diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form index de8cc1f6f..937b7e1ce 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form @@ -128,6 +128,7 @@ ru Состояние + false ГруппаСостояниеExtendedTooltip 107 diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl index 336084322..40e19cd8c 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl @@ -101,6 +101,10 @@ Отложен = (Параметр.Отложен И Параметр.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияПроцессовДляЗапуска.ГотовКСтарту")); ДатаОтложенногоСтарта = Параметр.ДатаОтложенногоСтарта; УстановитьСвойстваЭлементовФормы(ЭтотОбъект); + Если Элементы.ГруппаСостояние.Видимость Тогда + ИнфоНадписьЗаголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(СообщениеОСтатусеЗадания(ЭтотОбъект)); + Элементы.ИнфоНадписьЗаголовок.Высота = ?(СтрДлина(ИнфоНадписьЗаголовок) > 80, 2, 1); + КонецЕсли; КонецЕсли; // СтандартныеПодсистемы.РаботаСФайлами @@ -140,6 +144,10 @@ &НаКлиенте Процедура ОбновитьФорму() УстановитьСвойстваЭлементовФормы(ЭтотОбъект); + Если Элементы.ГруппаСостояние.Видимость Тогда + ИнфоНадписьЗаголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(СообщениеОСтатусеЗадания(ЭтотОбъект)); + Элементы.ИнфоНадписьЗаголовок.Высота = ?(СтрДлина(ИнфоНадписьЗаголовок) > 80, 2, 1); + КонецЕсли; ОбновитьДоступностьКомандОстановки(); КонецПроцедуры @@ -500,6 +508,10 @@ КонецЕсли; УстановитьСвойстваЭлементовФормы(ЭтотОбъект); + Если Элементы.ГруппаСостояние.Видимость Тогда + ИнфоНадписьЗаголовок = СтроковыеФункции.ФорматированнаяСтрока(СообщениеОСтатусеЗадания(ЭтотОбъект)); + Элементы.ИнфоНадписьЗаголовок.Высота = ?(СтрДлина(ИнфоНадписьЗаголовок) > 80, 2, 1); + КонецЕсли; КонецПроцедуры @@ -573,23 +585,15 @@ КонецЕсли; КонецЕсли; - УстановитьСвойстваГруппеСостояний(Форма); + Форма.Элементы.ГруппаСостояние.Видимость = Форма.Объект.Завершен Или ОбъектСтартован(Форма); УстановитьДоступностьПроверяющего(Форма); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура УстановитьСвойстваГруппеСостояний(Форма) - - ОтображатьГруппу = Форма.Объект.Завершен Или ОбъектСтартован(Форма); - Форма.Элементы.ГруппаСостояние.Видимость = ОтображатьГруппу; +Функция СообщениеОСтатусеЗадания(Форма) - Если НЕ ОтображатьГруппу Тогда - Возврат; - КонецЕсли; - - МассивСтрок = Новый Массив; - Высота = 1; + ТекстСостояния = ""; Если Форма.Объект.Завершен Тогда ДатаЗавершенияСтрокой = ?(Форма.ИспользоватьДатуИВремяВСрокахЗадач, @@ -598,34 +602,28 @@ НСтр("ru = 'Задание выполнено %1.'"), НСтр("ru = 'Задание отменено %1.'")); ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаТекста, ДатаЗавершенияСтрокой); - МассивСтрок.Добавить(ТекстСостояния); Для каждого Элемент Из Форма.Элементы Цикл Если ТипЗнч(Элемент) <> Тип("ПолеФормы") И ТипЗнч(Элемент) <> Тип("ГруппаФормы") Тогда Продолжить; КонецЕсли; Элемент.ТолькоПросмотр = Истина; - КонецЦикла; + КонецЦикла; ИначеЕсли Форма.Объект.Стартован Тогда ТекстСостояния = ?(Форма.ИзменятьЗаданияЗаднимЧислом, - НСтр("ru = 'Изменения формулировки, важности, автора, а также перенос сроков исполнения и проверки задания вступят в силу немедленно для ранее выданной задачи.'"), + НСтр("ru = 'Изменения формулировки, важности, автора, а также перенос сроков исполнения и проверки задания вступят в силу немедленно для ранее выданной задачи.'"), НСтр("ru = 'Изменения формулировки, важности, автора, а также перенос сроков исполнения и проверки задания не будут отражены в ранее выданной задаче.'")); - МассивСтрок.Добавить(ТекстСостояния); - Высота = 2; - ИначеЕсли Форма.Отложен Тогда ДатаОтложенногоСтартаСтрокой = ?(Форма.ИспользоватьДатуИВремяВСрокахЗадач, Формат(Форма.ДатаОтложенногоСтарта, "ДЛФ=DT"), Формат(Форма.ДатаОтложенногоСтарта, "ДЛФ=D")); - ТекстСостояния = НСтр("ru = 'Задание будет запущено'") + " "; - МассивСтрок.Добавить(ТекстСостояния); - МассивСтрок.Добавить(Новый ФорматированнаяСтрока(ДатаОтложенногоСтартаСтрокой,,,, "ОткрытьНастройкуОтложенногоСтарта")); + ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Задание будет запущено %1'"), + ДатаОтложенногоСтартаСтрокой); КонецЕсли; - Форма.ИнфоНадписьЗаголовок = Новый ФорматированнаяСтрока(МассивСтрок); - Форма.Элементы.ИнфоНадписьЗаголовок.МаксимальнаяВысота = Высота; + Возврат ТекстСостояния; -КонецПроцедуры +КонецФункции &НаСервере Процедура ПроверитьДатуЗавершенияОтложенногоПроцесса(ПроверяемыйОбъект, Отказ) diff --git a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl index 892538960..13498810f 100644 --- a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -211,9 +212,9 @@ // Устанавливает состояние элементов формы задачи. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - где: -// * Элементы - ВсеЭлементыФормы - где: -// ** Предмет - РасширениеПоляФормыДляПоляНадписи - +// Форма - ФормаКлиентскогоПриложения: +// * Элементы - ВсеЭлементыФормы: +// ** Предмет - РасширениеПоляФормыДляПоляНадписи // Процедура УстановитьСостояниеЭлементовФормыЗадачи(Форма) Экспорт diff --git a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl index 161655318..61e947060 100644 --- a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl @@ -127,9 +127,9 @@ // Обработчики событий элементов карты маршрута. // Параметры: -// ТочкаМаршрутаБизнесПроцесса - ТочкаМаршрутаБизнесПроцессаСсылка.Задание - -// ФормируемыеЗадачи - Массив из ЗадачаОбъект - -// Отказ - Булево - +// ТочкаМаршрутаБизнесПроцесса - ТочкаМаршрутаБизнесПроцессаСсылка.Задание +// ФормируемыеЗадачи - Массив из ЗадачаОбъект +// Отказ - Булево // Процедура ВыполнитьПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ) @@ -172,11 +172,10 @@ Записать(); КонецПроцедуры - // Параметры: -// ТочкаМаршрутаБизнесПроцесса - ТочкаМаршрутаБизнесПроцессаСсылка.Задание - -// ФормируемыеЗадачи - Массив из ЗадачаОбъект - -// Отказ - Булево - +// ТочкаМаршрутаБизнесПроцесса - ТочкаМаршрутаБизнесПроцессаСсылка.Задание +// ФормируемыеЗадачи - Массив из ЗадачаОбъект +// Отказ - Булево // Процедура ПроверитьПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ) diff --git a/SSL/src/Catalogs/Валюты/ManagerModule.bsl b/SSL/src/Catalogs/Валюты/ManagerModule.bsl index 8d5d5d145..fb7afe9ee 100644 --- a/SSL/src/Catalogs/Валюты/ManagerModule.bsl +++ b/SSL/src/Catalogs/Валюты/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/ManagerModule.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/ManagerModule.bsl index 7fe56bea7..4ba53c400 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl index 30bd35bed..d5d235720 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl @@ -172,14 +172,14 @@ // Возвращает данные для заполнения дерева разделов. // // Возвращаемое значение: -// Структура - где: -// * ОтфильтрованныеВарианты - ТаблицаЗначений - где: -// ** Ссылка - СправочникСсылка.ВариантыОтчетов - -// ** Причина - Число - -// * ВхожденияПодсистем - ТаблицаЗначений - где: -// ** Ссылка - СправочникСсылка.ВариантыОтчетов - -// ** Количество - Число - -// ** Важность - Строка - +// Структура: +// * ОтфильтрованныеВарианты - ТаблицаЗначений: +// ** Ссылка - СправочникСсылка.ВариантыОтчетов +// ** Причина - Число +// * ВхожденияПодсистем - ТаблицаЗначений: +// ** Ссылка - СправочникСсылка.ВариантыОтчетов +// ** Количество - Число +// ** Важность - Строка // &НаСервере Функция ДанныеЗаполненияРазделов() @@ -347,36 +347,38 @@ // Добавляет рекурсивно строку в дерево подсистем. // // Параметры: -// ПриемникРодитель - СтрокаДереваЗначений, ДеревоЗначений - где: -// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// * Имя - Строка - -// * ПолноеИмя - Строка - -// * Представление - Строка - -// * РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// * РазделПолноеИмя - Строка - -// * Приоритет - Строка - -// * ПолноеПредставление - Строка - -// * Важность - Строка - -// * Модифицированность - Булево - -// ИсточникРодитель - СтрокаДереваЗначений, ДеревоЗначений - где: -// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// * Имя - Строка - -// * ПолноеИмя - Строка - -// * Представление - Строка - -// * РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// * РазделПолноеИмя - Строка - -// * Приоритет - Строка - -// * ПолноеПредставление - Строка - -// * Важность - Строка - -// * Модифицированность - Булево - -// ВхожденияПодсистем - ТаблицаЗначений - где: -// * Ссылка - СправочникСсылка.ВариантыОтчетов - -// * Количество - Число - -// * Важность - Строка - +// ПриемникРодитель - СтрокаДереваЗначений +// - ДеревоЗначений: +// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * Имя - Строка +// * ПолноеИмя - Строка +// * Представление - Строка +// * РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * РазделПолноеИмя - Строка +// * Приоритет - Строка +// * ПолноеПредставление - Строка +// * Важность - Строка +// * Модифицированность - Булево +// ИсточникРодитель - СтрокаДереваЗначений +// - ДеревоЗначений: +// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * Имя - Строка +// * ПолноеИмя - Строка +// * Представление - Строка +// * РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * РазделПолноеИмя - Строка +// * Приоритет - Строка +// * ПолноеПредставление - Строка +// * Важность - Строка +// * Модифицированность - Булево +// ВхожденияПодсистем - ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ВариантыОтчетов +// * Количество - Число +// * Важность - Строка // &НаСервере Процедура ДобавитьПодсистемыВДерево(ПриемникРодитель, ИсточникРодитель, ВхожденияПодсистем) diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl index bc19ce692..c62c36222 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl @@ -10,14 +10,14 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Не Параметры.Свойство("Варианты") Или ТипЗнч(Параметры.Варианты) <> Тип("Массив") Тогда + Варианты = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Варианты"); // Массив из СправочникСсылка.ВариантыОтчетов + Если ТипЗнч(Варианты) <> Тип("Массив") Тогда ТекстОшибки = НСтр("ru = 'Не указаны варианты отчетов.'"); Возврат; КонецЕсли; ОпределитьПоведениеВМобильномКлиенте(); - ИзменяемыеВарианты.ЗагрузитьЗначения(Параметры.Варианты); + ИзменяемыеВарианты.ЗагрузитьЗначения(Варианты); Отфильтровать(); КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl index 7171b403c..3ca568b8f 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl @@ -10,20 +10,20 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Не Параметры.Свойство("Варианты") Или ТипЗнч(Параметры.Варианты) <> Тип("Массив") Тогда + Варианты = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Варианты"); // Массив из СправочникСсылка.ВариантыОтчетов + Если ТипЗнч(Варианты) <> Тип("Массив") Тогда ТекстОшибки = НСтр("ru = 'Не указаны варианты отчетов.'"); Возврат; КонецЕсли; - Если Не ЕстьПользовательскиеНастройки(Параметры.Варианты) Тогда + Если Не ЕстьПользовательскиеНастройки(Варианты) Тогда ТекстОшибки = НСтр("ru = 'Пользовательские настройки выбранных вариантов отчетов (%1 шт) не заданы или уже сброшены.'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Формат(Параметры.Варианты.Количество(), "ЧН=0; ЧГ=0")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Формат(Варианты.Количество(), "ЧН=0; ЧГ=0")); Возврат; КонецЕсли; ОпределитьПоведениеВМобильномКлиенте(); - ИзменяемыеВарианты.ЗагрузитьЗначения(Параметры.Варианты); + ИзменяемыеВарианты.ЗагрузитьЗначения(Варианты); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl index 7d82b4f81..7252b43b9 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -31,15 +31,19 @@ РежимРаботыФормы = "ВсеОтчетыРаздела"; РодительскиеЭлементы = Новый Массив; // Массив из ДанныеФормыЭлементДерева РодительскиеЭлементы.Добавить(ДеревоПодсистем.ПолучитьЭлементы()[0]); + Пока РодительскиеЭлементы.Количество() > 0 Цикл - РодительскийЭлемент = РодительскиеЭлементы[0].ПолучитьЭлементы(); // ДанныеФормыКоллекцияЭлементовДерева + РодительскийЭлемент = ЭлементДереваПодсистем(РодительскиеЭлементы); + ДочерниеЭлементы = РодительскийЭлемент.ПолучитьЭлементы(); РодительскиеЭлементы.Удалить(0); - Для Каждого ДочернийЭлемент Из РодительскийЭлемент Цикл + + Для Каждого ДочернийЭлемент Из ДочерниеЭлементы Цикл Если ДочернийЭлемент.Ссылка = Параметры.РазделСсылка Тогда Элементы.ДеревоПодсистем.ТекущаяСтрока = ДочернийЭлемент.ПолучитьИдентификатор(); РодительскиеЭлементы.Очистить(); Прервать; КонецЕсли; + РодительскиеЭлементы.Добавить(ДочернийЭлемент); КонецЦикла; КонецЦикла; @@ -339,17 +343,17 @@ // Возвращает параметры перетаскивания. // // Параметры: -// ПараметрыПеретаскивания - ПараметрыПеретаскивания - -// Строка - Число - +// ПараметрыПеретаскивания - ПараметрыПеретаскивания +// Строка - Число // // Возвращаемое значение: -// Неопределено - -// Структура - где: -// * Варианты - Структура - где: -// ** Массив - Массив из ДанныеФормыЭлементДерева - -// ** Всего - Число - -// ** Представление - Строка - -// * Действие - Строка - +// Неопределено +// Структура: +// * Варианты - Структура: +// ** Массив - Массив из ДанныеФормыЭлементДерева +// ** Всего - Число +// ** Представление - Строка +// * Действие - Строка // * Приемник - см. СвойстваДанныхСтроки // * Источник - см. СвойстваДанныхСтроки // @@ -421,12 +425,12 @@ // Конструктор свойств данных строки. // // Возвращаемое значение: -// Структура - где: -// * Ссылка - Неопределено - -// - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// * ПолноеПредставление - Строка - -// * Идентификатор - Число - +// Структура: +// * Ссылка - Неопределено +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ПолноеПредставление - Строка +// * Идентификатор - Число // &НаКлиенте Функция СвойстваДанныхСтроки() @@ -443,15 +447,15 @@ // Обработчик завершения перетаскивания. // // Параметры: -// Ответ - КодВозвратаДиалога - -// ПараметрыРазмещения - Структура - где: -// * Варианты - Структура - где: -// ** Массив - Массив из ДанныеФормыЭлементДерева - -// ** Всего - Число - -// ** Представление - Строка - -// * Действие - Строка - -// * Приемник - ДанныеФормыЭлементДерева - -// * Источник - ДанныеФормыЭлементДерева - +// Ответ - КодВозвратаДиалога +// ПараметрыРазмещения - Структура: +// * Варианты - Структура: +// ** Массив - Массив из ДанныеФормыЭлементДерева +// ** Всего - Число +// ** Представление - Строка +// * Действие - Строка +// * Приемник - ДанныеФормыЭлементДерева +// * Источник - ДанныеФормыЭлементДерева // &НаКлиенте Процедура ДеревоПодсистемПеретаскиваниеЗавершение(Ответ, ПараметрыРазмещения) Экспорт @@ -638,10 +642,10 @@ // ПараметрыРазмещения - см. ПараметрыРазмещения // // Возвращаемое значение: -// Структура - где: -// * Размещено - Число - -// * УжеРазмещены - Строка - -// * НеМогутРазмещаться - Строка - +// Структура: +// * Размещено - Число +// * УжеРазмещены - Строка +// * НеМогутРазмещаться - Строка // &НаСервере Функция РазместитьВариантыВПодсистеме(ПараметрыРазмещения) @@ -806,4 +810,31 @@ КонецЕсли; КонецПроцедуры +// Параметры: +// ЭлементыДерева - Массив из ДанныеФормыЭлементДерева: +// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * Представление - Строка +// * Имя - Строка +// * ПолноеИмя - Строка +// * Приоритет - Строка +// * ПолноеПредставление - Строка +// +// Возвращаемое значение: +// ДанныеФормыЭлементДерева: +// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * Представление - Строка +// * Имя - Строка +// * ПолноеИмя - Строка +// * Приоритет - Строка +// * ПолноеПредставление - Строка +// +&НаСервере +Функция ЭлементДереваПодсистем(ЭлементыДерева) + + Возврат ЭлементыДерева[0]; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl index 699afbaa6..79f51c909 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -251,14 +251,16 @@ &НаКлиенте Процедура ПодобратьПользователей(Команда) - ВариантыОтчетовКлиент.ПодобратьПользователейВариантаОтчета(ЭтотОбъект); + ВариантыОтчетовКлиент.ПодобратьПользователейВариантаОтчета( + ЭтотОбъект, Элементы.ПользователиВариантаГруппаПодобрать.Видимость); КонецПроцедуры &НаКлиенте Процедура ПодобратьГруппыВнешнихПользователей(Команда) - ВариантыОтчетовКлиент.ПодобратьПользователейВариантаОтчета(ЭтотОбъект, Истина); + ВариантыОтчетовКлиент.ПодобратьПользователейВариантаОтчета( + ЭтотОбъект, Элементы.ПользователиВариантаГруппаПодобрать.Видимость, Истина); КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl index b5f906a4f..4037d5e13 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl index ce88ae88c..2172f5db9 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl @@ -88,17 +88,7 @@ ИнтерактивнаяПометкаУдаления = ?(Пользовательский, ПометкаУдаления, Ложь); КонецЕсли; - // Удаление из табличной части подсистем, помеченных на удаление. - УдаляемыеСтроки = Новый Массив; - Для Каждого СтрокаРазмещения Из Размещение Цикл - Если СтрокаРазмещения.Подсистема.ПометкаУдаления = Истина Тогда - УдаляемыеСтроки.Добавить(СтрокаРазмещения); - КонецЕсли; - КонецЦикла; - Для Каждого СтрокаРазмещения Из УдаляемыеСтроки Цикл - Размещение.Удалить(СтрокаРазмещения); - КонецЦикла; - + ПроверитьРазмещение(); ЗаполнитьПоляДляПоиска(); КонецПроцедуры @@ -205,6 +195,31 @@ КонецПроцедуры +Процедура ПроверитьРазмещение() + + Если ЗначениеЗаполнено(Контекст) Тогда + + Размещение.Очистить(); + Возврат; + + КонецЕсли; + + // Удаление из табличной части подсистем, помеченных на удаление. + УдаляемыеСтроки = Новый Массив; + Для Каждого СтрокаРазмещения Из Размещение Цикл + + Если СтрокаРазмещения.Подсистема.ПометкаУдаления = Истина Тогда + УдаляемыеСтроки.Добавить(СтрокаРазмещения); + КонецЕсли; + + КонецЦикла; + + Для Каждого СтрокаРазмещения Из УдаляемыеСтроки Цикл + Размещение.Удалить(СтрокаРазмещения); + КонецЦикла; + +КонецПроцедуры + // Заполнение реквизитов НаименованияПолей и НаименованияПараметровИОтборов. Процедура ЗаполнитьПоляДляПоиска() diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo index fdaeda2de..c1d5394ad 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -261,6 +261,28 @@ Use Use + + Контекст + + ru + Контекст + + + String + + 430 + + + + ru + Служебный реквизит. Полное имя объекта метаданных, в контексте которого формируется вариант отчета. Используется, как разделитель вариантов отчетов. + + + + + Use + Use + НаименованияПараметровИОтборов diff --git a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl index 45f30f82b..d6fc0fc14 100644 --- a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl @@ -60,7 +60,7 @@ // расширений, независимо от установленных разделителей. // // Возвращаемое значение: -// ФиксированнаяСтруктура - со свойствами: +// ФиксированнаяСтруктура: // * Основные - Строка - контрольная сумма всех расширений, кроме исправительных расширений. // * Исправления - Строка - контрольная сумма всех исправительных расширений. // @@ -131,6 +131,15 @@ УстановленныеРасширения.Вставить("ОсновныеСостояние", КонтрольныеСуммыРасширений(Основные, "Все")); УстановленныеРасширения.Вставить("ИсправленияСостояние", КонтрольныеСуммыРасширений(Исправления, "Все")); + Если ПриЗапуске + И АктивныеРасширения.Количество() = 0 + И НеподключенныеРасширения.Количество() = 0 + И РасширенияБазыДанных.Количество() <> 0 + И СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + + УстановленныеРасширения.Вставить("РасширенияНедоступны"); + КонецЕсли; + Возврат Новый ФиксированнаяСтруктура(УстановленныеРасширения); КонецФункции @@ -138,12 +147,16 @@ // Возвращает признак изменения состава расширений после запуска сеанса. // // Возвращаемое значение: -// Булево - +// Булево // Функция РасширенияИзмененыДинамически() Экспорт УстановитьПривилегированныйРежим(Истина); + Если ПараметрыСеанса.УстановленныеРасширения.Свойство("РасширенияНедоступны") Тогда + Возврат Ложь; + КонецЕсли; + УстановленныеРасширения = УстановленныеРасширения(); Возврат ПараметрыСеанса.УстановленныеРасширения.ОсновныеСостояние <> УстановленныеРасширения.ОсновныеСостояние @@ -151,17 +164,16 @@ КонецФункции -// Структура - со свойствами: -// * Расширения - Структура со свойствами: +// Возвращает информацию по измененным расширениям и исправлениям. +// +// Возвращаемое значение: +// Структура: +// * Расширения - Структура: // * Добавлено - Число // * Удалено - Число -// * Изменено - Число -// * СписокНовых - Массив из Строка -// * Исправления - Структура со свойствами: +// * Исправления - Структура: // * Добавлено - Число // * Удалено - Число -// * Изменено - Число -// * СписокНовых - Массив из Строка // Функция ДинамическиИзмененныеРасширения() Экспорт @@ -506,7 +518,7 @@ // Для общих форм Расширения, УстановленныеИсправления. // // Возвращаемое значение: -// РасширениеКонфигурации, Неопределено - +// РасширениеКонфигурации, Неопределено // Функция НайтиРасширение(ИдентификаторРасширения) Экспорт @@ -527,7 +539,7 @@ // Для общих форм Расширения, УстановленныеИсправления. // // Параметры: -// Расширение - РасширениеКонфигурации - +// Расширение - РасширениеКонфигурации // Процедура ОтключитьПредупрежденияБезопасности(Расширение) Экспорт @@ -638,7 +650,7 @@ // Для общих форм Расширения, УстановленныеИсправления. // // Возвращаемое значение: -// Массив Из УникальныйИдентификатор - +// Массив Из УникальныйИдентификатор // Функция ЗапросыНаОтменуРазрешенийИспользованияВнешнегоМодуля(ИдентификаторыРасширений) Экспорт diff --git a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl index ddd3aa33f..a4f097806 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo b/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo index e5e24dfb5..a9cb87a2e 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo +++ b/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo @@ -121,6 +121,7 @@ ru + Catalog.ВерсииФайлов.StandardAttribute.Owner Managed Use diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ИсправлениеВидовКонтактнойИнформации/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ИсправлениеВидовКонтактнойИнформации/Module.bsl index 6025fd3f8..27c03e3ad 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ИсправлениеВидовКонтактнойИнформации/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ИсправлениеВидовКонтактнойИнформации/Module.bsl @@ -14,6 +14,10 @@ ИдентификаторПроверки = Параметры.ИдентификаторПроверки; УстановитьТекущуюСтраницу(ЭтотОбъект, "Вопрос"); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -79,7 +83,7 @@ Процедура ИсправитьПроблемуВФонеЗавершение(Результат, ДополнительныеПараметры) Экспорт ДлительнаяОперация = Неопределено; - + Если Результат = Неопределено Тогда УстановитьТекущуюСтраницу(ЭтотОбъект, "ИдетИсправлениеПроблемы"); Возврат; diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form index 1f3230b7e..814f9b5f5 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form @@ -101,7 +101,7 @@ true - Список.Ref + Список.Ссылка СсылкаExtendedTooltip @@ -139,6 +139,10 @@ Left true + + Selection + СписокВыбор + BeforeAddRow СписокПередНачаломДобавления @@ -227,6 +231,32 @@ СписокКонтекстноеМеню 2 + + СписокКонтекстноеМенюПерейтиКСписку + 57 + true + true + + true + + + СписокКонтекстноеМенюПерейтиКСпискуРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Form.Command.ПерейтиКСписку + Normal + Auto + true + true + UserCmds + Auto + true Tree @@ -272,6 +302,33 @@ ФормаКоманднаяПанель -1 + + ФормаПерейтиКСписку + 55 + true + true + + true + + + ФормаПерейтиКСпискуРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.Command.ПерейтиКСписку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left true @@ -302,15 +359,18 @@ true - - Список.Ref - Список.ИндексПиктограммы Список.РеквизитДопУпорядочивания + + Список.Ссылка + + + Список.ЭтоГруппа +
true
ВЫБРАТЬ @@ -361,22 +421,23 @@ ИНАЧЕ 3 КОНЕЦ КОНЕЦ КАК ИндексПиктограммы, - СправочникВидыКонтактнойИнформации.Ссылка, + СправочникВидыКонтактнойИнформации.Ссылка КАК Ссылка, ВЫБОР КОГДА &ЭтоОсновнойЯзык - ТОГДА СправочникВидыКонтактнойИнформации.Наименование + ТОГДА СправочникВидыКонтактнойИнформации.Наименование ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ВидыКонтактнойИнформацииПредставления.Наименование, СправочникВидыКонтактнойИнформации.Наименование) КАК СТРОКА(150)) КОНЕЦ КАК Наименование, - СправочникВидыКонтактнойИнформации.РеквизитДопУпорядочивания, - СправочникВидыКонтактнойИнформации.Используется + СправочникВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, + СправочникВидыКонтактнойИнформации.Используется КАК Используется, + СправочникВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоГруппа ИЗ Справочник.ВидыКонтактнойИнформации КАК СправочникВидыКонтактнойИнформации ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКонтактнойИнформации.Представления КАК ВидыКонтактнойИнформацииПредставления ПО (ВидыКонтактнойИнформацииПредставления.Ссылка = СправочникВидыКонтактнойИнформации.Ссылка) - И ВидыКонтактнойИнформацииПредставления.КодЯзыка = &КодЯзыка + И (ВидыКонтактнойИнформацииПредставления.КодЯзыка = &КодЯзыка) ГДЕ - СправочникВидыКонтактнойИнформации.Используется И ЕстьNULL(СправочникВидыКонтактнойИнформации.Родитель.Используется, Истина) - + СправочникВидыКонтактнойИнформации.Используется + И ЕСТЬNULL(СправочникВидыКонтактнойИнформации.Родитель.Используется, ИСТИНА) Catalog.ВидыКонтактнойИнформации true true @@ -385,6 +446,28 @@ true
+ + ПерейтиКСписку + + <key>ru</key> + <value>Перейти к списку...</value> + + 1 + + ru + Перейти к списку с контактной информацией + + + true + + + + ПерейтиКСписку + + + Auto + Auto + diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl index bc8183e0c..2b77781fe 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl @@ -40,8 +40,33 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + Если Элементы.Список.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + Если ТекущиеДанные.ЭтоГруппа Тогда + СтандартнаяОбработка = Ложь; + ПерейтиКСписку(Неопределено); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы +&НаКлиенте +Процедура ПерейтиКСписку(Команда) + Если Элементы.Список.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + ОткрытьФорму(ИмяФормыСписка(Элементы.Список.ТекущиеДанные.Ссылка)); +КонецПроцедуры + // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) @@ -81,4 +106,46 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция ИмяФормыСписка(ВидКонтактнойИнформацииСсылка) + + ЭтоГруппа = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформацииСсылка, "ЭтоГруппа,Родитель"); + ГруппаВидаСсылка = ?(ЭтоГруппа.ЭтоГруппа, ВидКонтактнойИнформацииСсылка, ЭтоГруппа.Родитель); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |КОНЕЦ КАК ИмяПредопределенногоВида + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.Ссылка = &ГруппаВидаСсылка"); + + Запрос.УстановитьПараметр("ГруппаВидаСсылка", ГруппаВидаСсылка); + ИмяПредопределенногоВида = ВРЕГ(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ИмяПредопределенногоВида")[0]); + + ИменаБазовыхТипов = Новый Массив; + ИменаБазовыхТипов.Добавить("Справочник"); + ИменаБазовыхТипов.Добавить("Документ"); + ИменаБазовыхТипов.Добавить("БизнесПроцесс"); + ИменаБазовыхТипов.Добавить("Задача"); + ИменаБазовыхТипов.Добавить("ПланСчетов"); + ИменаБазовыхТипов.Добавить("ПланОбмена"); + ИменаБазовыхТипов.Добавить("ПланВидовХарактеристик"); + ИменаБазовыхТипов.Добавить("ПланВидовРасчета"); + Для каждого ИмяБазовогоТипа Из ИменаБазовыхТипов Цикл + Если СтрНачинаетсяС(ИмяПредопределенногоВида, ВРег(ИмяБазовогоТипа)) Тогда + Возврат ИмяБазовогоТипа + "." + + Сред(ИмяПредопределенногоВида, СтрДлина(ИмяБазовогоТипа) + 1, СтрДлина(ИмяПредопределенногоВида)) + + ".ФормаСписка"; + КонецЕсли; + КонецЦикла; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно перейти в списку для %1'"), ВидКонтактнойИнформацииСсылка); + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form index 4a9653d91..22cc05e24 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form @@ -100,6 +100,10 @@ Объект.Description true + + OnChange + НаименованиеПриИзменении + НаименованиеExtendedTooltip 87 @@ -771,6 +775,169 @@ true + + МаскаПриВводеНомераТелефона + 178 + + <key>ru</key> + <value>Вводить номер по маске:</value> + + true + true + + true + + + Объект.ВводитьНомерПоМаске + + Right + + МаскаПриВводеНомераТелефонаРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + + МаскаПриВводеНомераТелефонаКонтекстноеМеню + 179 + true + + CheckBoxField + Enter + true + Left + true + + + + МаскаТелефона + 184 + + ДекорацияОтступМаскаТелефона + 186 + true + true + + true + + + ДекорацияОтступМаскаТелефонаРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + + ДекорацияОтступМаскаТелефонаКонтекстноеМеню + 187 + true + + Label + 1 + true + true + + Left + + + + ШаблонМаскиНомераТелефона + 181 + true + true + + true + + + Объект.МаскаНомераТелефона + + None + Button + + ШаблонМаскиНомераТелефонаРасширеннаяПодсказка + 183 + + <key>ru</key> + <value><font Arial><fontsize 8><bgcolor #ffffff><color #333333>В строке маски допустимо использование следующих специальных символов:</></></></> +<font Arial><fontsize 8><bgcolor #ffffff><color #333333>! - любой введенный символ преобразуется в верхний регистр;</></></></> +<font Arial><fontsize 8><bgcolor #ffffff><color #333333>9 - допустимо ввести произвольный символ цифры;</></></></> +<font Arial><fontsize 8><bgcolor #ffffff><color #333333># - допустимо ввести произвольный символ цифры или - (знак минус) или + (знак плюс) или пробел;</></></></> +<font Arial><fontsize 8><bgcolor #ffffff><color #333333>N - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры);</></></></> +<font Arial><fontsize 8><bgcolor #ffffff><color #333333>U - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) и любой введенный символ преобразуется в верхний регистр;</></></></> +<font Arial><fontsize 8><bgcolor #ffffff><color #333333>X (латинского алфавита) - допустимо ввести произвольный символ;</></></></> +<font Arial><fontsize 8><bgcolor #ffffff><color #333333>^ - недопустимо вводить этот символ интерактивно пользователем, он может устанавливаться только из языка;</></></></> +<font Arial><fontsize 8><bgcolor #ffffff><color #333333>@ – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре или пробел.</></></></> +<font Arial><fontsize 8><bgcolor #ffffff><color #333333></></></></></value> + + true + Label + true + true + + Left + + + + ШаблонМаскиНомераТелефонаКонтекстноеМеню + 182 + true + + InputField + Enter + true + Left + true + + 20 + true + true + true + true + true + true + Normal + + ru + +9 (999) 999-99-99 + + + + true + true + + true + + + <key>ru</key> + <value>Маска телефона</value> + + + МаскаТелефонаРасширеннаяПодсказка + 185 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + true true @@ -1094,12 +1261,116 @@ Auto + + ГруппаИдентификаторДляФормул + 171 + + ИдентификаторДляФормул + 173 + true + true + + true + + + Объект.ИдентификаторДляФормул + + + ИдентификаторДляФормулРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + ИдентификаторДляФормулКонтекстноеМеню + 174 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗаполнитьИдентификаторДляФормул + 176 + true + true + + true + + + ЗаполнитьИдентификаторДляФормулРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗаполнитьИдентификаторДляФормул + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Идентификатор для формул</value> + + + ГруппаИдентификаторДляФормулРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + ФормаКоманднаяПанель -1 Left true + + NotificationProcessing + ОбработкаОповещения + OnOpen ПриОткрытии @@ -1189,6 +1460,32 @@ DontUse Auto + + ЗаполнитьИдентификаторДляФормул + + <key>ru</key> + <value>Заполнить идентификатор для формул</value> + + 2 + + ru + Заполнить идентификатор для формул + + + true + + + CommonPicture.ЗаполнитьФорму + + + + ЗаполнитьИдентификаторДляФормул + + + Picture + Auto + Auto + @@ -1202,6 +1499,10 @@ OnReadAtServer ПриЧтенииНаСервере + + BeforeWrite + ПередЗаписью + BeforeWriteAtServer ПередЗаписьюНаСервере diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html index dcc7c808d..34caa4068 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html @@ -30,7 +30,8 @@
  • Введите Наименование, с которым поле контактной информации появится в списке или документе.
  • -
    Выберите Группу, если она не введена по умолчанию. Группа соответствует документу или списку программы, в который добавляется новое поле контактной информации.
  • Настройки полей контактной информации

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

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

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

      +
    • Указывать ОКТМО - включите флажок, для того чтобы автоматически заполнялось поле ОКТМО. При необходимости поле можно отредактировать.
    • +
    • Автоматически исправлять устаревшие адреса - можно включить автоматическую проверку и исправление адресов. В этом случае регламентное задание 1 раз в неделю проверяет и исправляет адреса, ставшие устаревшими.

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

    • Для того чтобы использовать Телефон с добавочным номером, включите соответствующий флажок.
    • @@ -62,7 +64,14 @@
    • Однострочное широкое - длинная строка;
    • -
      Однострочное узкое - если вид контактной информации Другое используется для ввода текстовых данных небольшой длины, то размер поля ввода можно уменьшить.

    См. также:

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

    Разрешение редактирования реквизитов

    +

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

    +

    +
    • Тип;
    • +
    • Группа;
    • +
    • Идентификатор формул.

    +

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

    +

    См. также:

    • Ввод контактной информации;
    • diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl index ae3639d2d..d1a7e8464 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl @@ -16,6 +16,7 @@ Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Тип.ТолькоПросмотр = Истина; Элементы.ГруппаТипОбщиеДляВсех.ТолькоПросмотр = Объект.ЗапретитьРедактированиеПользователем; + Элементы.ИдентификаторДляФормул.ТолькоПросмотр = Истина; Иначе // Обработчик подсистемы запрета редактирования реквизитов объектов. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда @@ -78,6 +79,13 @@ МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект); + Элементы.ЗаполнитьИдентификаторДляФормул.Доступность = НЕ Элементы.ИдентификаторДляФормул.ТолькоПросмотр; + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + МодульРаботаСАдресами.ЗаполнитьМаскиНомераТелефона(Элементы.ШаблонМаскиНомераТелефона.СписокВыбора); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -92,6 +100,46 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "ПослеВводаСтрокНаРазныхЯзыках" + И Параметр = ЭтотОбъект Тогда + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда + ОбновитьПредлагаемоеЗначениеИдентификатора(); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Если НЕ ПараметрыЗаписи.Свойство("КогдаИдентификаторДляФормулУжеИспользуется") + И ЗначениеЗаполнено(Объект.ИдентификаторДляФормул) Тогда + // Заполнение идентификатора для формул + // и проверка есть ли свойство с тем же наименованием. + ТекстВопроса = ИдентификаторДляФормулУжеИспользуется( + Объект.ИдентификаторДляФормул, Объект.Ссылка, Объект.Родитель); + + Если ЗначениеЗаполнено(ТекстВопроса) Тогда + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("ПродолжитьЗапись", НСтр("ru = 'Продолжить'")); + Кнопки.Добавить("ВернутьсяКВводуИдентификатора", НСтр("ru = 'Отмена'")); + + ПоказатьВопрос( + Новый ОписаниеОповещения("ПослеОтветаНаВопросКогдаИдентификаторДляФормулУжеИспользуется", ЭтотОбъект, ПараметрыЗаписи), + ТекстВопроса, Кнопки, , "ПродолжитьЗапись"); + + ОтказПриЗаписи = Истина; + Отказ = Истина; + Возврат; + + Иначе + ПараметрыЗаписи.Вставить("ПроверкаИдентификатораДляФормулВыполнена"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) @@ -99,6 +147,19 @@ Отказ = Истина; КонецЕсли; + // Формирование идентификатора для формул дополнительного реквизита (сведения). + Если Не ЗначениеЗаполнено(ТекущийОбъект.ИдентификаторДляФормул) + Или ПараметрыЗаписи.Свойство("КогдаИдентификаторДляФормулУжеИспользуется") Тогда + НаименованиеОбъекта = НаименованиеДляФормированияИдентификатора(ТекущийОбъект.Наименование, ТекущийОбъект.Представления); + ТекущийОбъект.ИдентификаторДляФормул = Справочники.ВидыКонтактнойИнформации.УникальныйИдентификаторДляФормул( + НаименованиеОбъекта, ТекущийОбъект.Ссылка, ТекущийОбъект.Родитель); + + ПараметрыЗаписи.Вставить("ПроверкаИдентификатораДляФормулВыполнена"); + КонецЕсли; + Если ПараметрыЗаписи.Свойство("ПроверкаИдентификатораДляФормулВыполнена") Тогда + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверкаИдентификатораДляФормулВыполнена"); + КонецЕсли; + МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект); КонецПроцедуры @@ -114,6 +175,8 @@ КонецЕсли; КонецЕсли; + Элементы.ЗаполнитьИдентификаторДляФормул.Доступность = НЕ Элементы.ИдентификаторДляФормул.ТолькоПросмотр; + МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры @@ -129,6 +192,13 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +&НаКлиенте +Процедура НаименованиеПриИзменении(Элемент) + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда + ОбновитьПредлагаемоеЗначениеИдентификатора(); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ТипПриИзменении(Элемент) @@ -195,6 +265,18 @@ МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка); КонецПроцедуры +&НаКлиенте +Процедура ДоступностьПолейДляАдреса() + + Если Объект.ВидРедактирования = "ПолеВвода" Тогда + Объект.ВключатьСтрануВПредставление = Ложь; + Элементы.ВключатьСтрануВПредставление.Доступность = Ложь; + Иначе + Элементы.ВключатьСтрануВПредставление.Доступность = Истина; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -205,12 +287,22 @@ Если Не Объект.Предопределенный Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда МодульЗапретРедактированияРеквизитовОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовКлиент"); - МодульЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект); + Оповещение = Новый ОписаниеОповещения("РазрешитьРедактированиеРеквизитовОбъектаЗавершение", ЭтотОбъект); + МодульЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект, Оповещение); КонецЕсли; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура РазрешитьРедактированиеРеквизитовОбъектаЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если НЕ Результат = Неопределено Тогда + Элементы.ЗаполнитьИдентификаторДляФормул.Доступность = НЕ Элементы.ИдентификаторДляФормул.ТолькоПросмотр; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ДополнительныеНастройкиАдреса(Команда) ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПослеЗакрытияФормыНастроекАдреса", ЭтотОбъект); @@ -221,6 +313,11 @@ ОткрытьФорму(ИмяФормыНастройкиАдреса, ПараметрыФормы,,,,, ОповещениеОЗакрытие); КонецПроцедуры +&НаКлиенте +Процедура ЗаполнитьИдентификаторДляФормул(Команда) + ЗаполнитьИдентификаторДляФормулНаСервере(); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -234,6 +331,9 @@ Элементы.ДополнительныеНастройкиАдреса.Видимость = ДоступныДополнительныеНастройкиАдреса; Элементы.ДополнительныеНастройкиАдреса.Доступность = Не Объект.МеждународныйФорматАдреса; Элементы.ВидРедактирования.Видимость = Истина; + + ДоступностьПолейДляАдреса(); + Иначе Элементы.ДополнительныеНастройкиАдреса.Видимость = Ложь; Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда @@ -293,5 +393,120 @@ КонецЕсли; КонецПроцедуры +&НаСервере +Процедура ОбновитьПредлагаемоеЗначениеИдентификатора() + + ПредлагаемыйИдентификатор = ""; + Если Не Элементы.ИдентификаторДляФормул.ТолькоПросмотр Тогда + Представление = НаименованиеДляФормированияИдентификатора(Объект.Наименование, Объект.Представления); + ПредлагаемыйИдентификатор = Справочники.ВидыКонтактнойИнформации.УникальныйИдентификаторДляФормул( + Представление, Объект.Ссылка, Объект.Родитель); + Если ПредлагаемыйИдентификатор <> Объект.ИдентификаторДляФормул Тогда + Объект.ИдентификаторДляФормул = ПредлагаемыйИдентификатор; + Модифицированность = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьИдентификаторДляФормулНаСервере() + ЗаголовокДляИдентификатора = НаименованиеДляФормированияИдентификатора(Объект.Наименование, Объект.Представления); + Объект.ИдентификаторДляФормул = Справочники.ВидыКонтактнойИнформации.УникальныйИдентификаторДляФормул( + ЗаголовокДляИдентификатора, Объект.Ссылка, Объект.Родитель); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НаименованиеДляФормированияИдентификатора(Знач Наименование, Знач Представления) + Если ТекущийЯзык() <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); + НайденныеСтроки = Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Наименование = НайденныеСтроки[0].Наименование; + КонецЕсли; + КонецЕсли; + + Возврат Наименование; +КонецФункции + +&НаКлиенте +Процедура ПослеОтветаНаВопросКогдаИдентификаторДляФормулУжеИспользуется(Ответ, ПараметрыЗаписи) Экспорт + + Если Ответ <> "ПродолжитьЗапись" Тогда + Если ПараметрыЗаписи.Свойство("ОбработкаПродолжения") Тогда + ВыполнитьОбработкуОповещения( + Новый ОписаниеОповещения(ПараметрыЗаписи.ОбработкаПродолжения.ИмяПроцедуры, + ЭтотОбъект, ПараметрыЗаписи.ОбработкаПродолжения.Параметры), + Истина); + КонецЕсли; + Иначе + ПараметрыЗаписи.Вставить("КогдаИдентификаторДляФормулУжеИспользуется"); + Записать(ПараметрыЗаписи); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ИдентификаторДляФормулУжеИспользуется(Знач ИдентификаторДляФормул, Знач ТекущийВидКонтактнойИнформации, Знач Родитель) + + ПроверочныйИдентификатор = Справочники.ВидыКонтактнойИнформации.ИдентификаторДляФормул(ИдентификаторДляФормул); + Если ВРег(ИдентификаторДляФормул) <> ВРег(ПроверочныйИдентификатор) Тогда + ТекстВопроса = НСтр("ru = 'Идентификатор ""%1"" не соответствует правилам именования переменных. + |Идентификатор не должен содержать пробелов и специальных символов. + | + |Создать новый идентификатор для формул и продолжить запись?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопроса, + ИдентификаторДляФормул); + Возврат ТекстВопроса; + КонецЕсли; + + РодительВерхнегоУровня = Родитель; + Пока ЗначениеЗаполнено(РодительВерхнегоУровня) Цикл + Значение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РодительВерхнегоУровня, "Родитель"); + Если ЗначениеЗаполнено(Значение) Тогда + РодительВерхнегоУровня = Значение; + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВидыКонтактнойИнформации.Ссылка + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ИдентификаторДляФормул = &ИдентификаторДляФормул + | И ВидыКонтактнойИнформации.Ссылка <> &Ссылка + | И ВидыКонтактнойИнформации.Ссылка В ИЕРАРХИИ (&Родитель)"; + + Запрос.УстановитьПараметр("Ссылка", ТекущийВидКонтактнойИнформации); + Запрос.УстановитьПараметр("ИдентификаторДляФормул", ИдентификаторДляФормул); + Запрос.УстановитьПараметр("Родитель", РодительВерхнегоУровня); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если НЕ Выборка.Следующий() Тогда + Возврат ""; + КонецЕсли; + + ТекстВопроса = НСтр("ru = 'Существует вид контактной информации с идентификатором для формул + |""%1"". + | + |Рекомендуется использовать другой идентификатор для формул, + |иначе программа может работать некорректно. + | + |Создать новый идентификатор для формул и продолжить запись?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопроса, + ИдентификаторДляФормул); + + Возврат ТекстВопроса; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl index 2901f6892..9ad692ec0 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -38,6 +39,7 @@ БлокируемыеРеквизиты.Добавить("Тип;Тип"); БлокируемыеРеквизиты.Добавить("Родитель"); + БлокируемыеРеквизиты.Добавить("ИдентификаторДляФормул"); Возврат БлокируемыеРеквизиты; @@ -53,9 +55,9 @@ // // Параметры: // ПарыЗамен - Соответствие - Ключ - что будет заменено, значение - на что будет заменено. -// Параметры - Структура - Набор флагов, описывающих действие с заменяемыми элементами. +// Параметры - Структура - набор флагов, описывающих действие с заменяемыми элементами. // Содержит необязательные реквизиты: -// * СпособУдаления - Строка, может принимать значения: +// * СпособУдаления - Строка - может принимать значения: // "Непосредственно" - Если после замены ссылка нигде не используется, // то она будет удалена непосредственно // "Пометка" - Если после замены ссылка не используется, то @@ -94,28 +96,28 @@ // // Параметры: // -// ПараметрыПоиска - Структура - Предлагаемые параметры поиска. Содержит поля: +// ПараметрыПоиска - Структура - предлагаемые параметры поиска. Содержит поля: // -// * ПравилаПоиска - ТаблицаЗначений - Предлагаемые правила сравнения для объектов. -// Может быть изменена для установки новых вариантов. Содержит колонки. -// ** Реквизит - Строка - Имя реквизита для сравнения. -// ** Правило - Строка - Правило сравнения: "Равно" - сравнение по равенству, "Подобно" -подобие строк, +// * ПравилаПоиска - ТаблицаЗначений - предлагаемые правила сравнения для объектов. +// Может быть изменена для установки новых вариантов. Содержит колонки: +// ** Реквизит - Строка - имя реквизита для сравнения. +// ** Правило - Строка - правило сравнения: "Равно" - сравнение по равенству, "Подобно" -подобие строк, // "" - пустая строка - не сравнивать. // -// * КомпоновщикОтбора - КомпоновщикНастроекКомпоновкиДанных - Инициализированный компоновщик для +// * КомпоновщикОтбора - КомпоновщикНастроекКомпоновкиДанных - инициализированный компоновщик для // предварительного отбора. Может быть изменен, например, для // усиления отборов. // -// * ОграниченияСравнения - Массив - Предназначен для заполнения описания прикладных правил-ограничений. +// * ОграниченияСравнения - Массив - предназначен для заполнения описания прикладных правил-ограничений. // Должен быть дополнен структурами с полями: -// ** Представление - Строка - Описание правила-ограничения для пользователя. -// ** ДополнительныеПоля - Строка - Список дополнительных реквизитов запятую, необходимых для +// ** Представление - Строка - описание правила-ограничения для пользователя. +// ** ДополнительныеПоля - Строка - список дополнительных реквизитов запятую, необходимых для // дополнительного анализа. // -// * КоличествоЭлементовДляСравнения - Число - Количество кандидатов в дубли, передаваемых одним вызовом +// * КоличествоЭлементовДляСравнения - Число - количество кандидатов в дубли, передаваемых одним вызовом // обработчику. // -// ДополнительныеПараметры - Произвольный - Значение, переданное при вызове программного интерфейса +// ДополнительныеПараметры - Произвольный - значение, переданное при вызове программного интерфейса // ОбщегоНазначения.НайтиДублиЭлементов. // При вызове пользователем из обработки "ПоискИЗаменаДублей" равно Неопределено. // @@ -135,18 +137,18 @@ // // Параметры: // -// ТаблицаКандидатов - ТаблицаЗначений - Описывает кандидатов в дубли. Содержит колонки: -// - Ссылка1 - ЛюбаяСсылка - Ссылка на элемент первого кандидата. -// - Ссылка2 - ЛюбаяСсылка - Ссылка на элемент второго кандидата. -// - ЭтоДубли - Булево - Флаг того, что кандидаты действительно являются дублями. По умолчанию содержит +// ТаблицаКандидатов - ТаблицаЗначений - описывает кандидатов в дубли. Содержит колонки: +// - Ссылка1 - ЛюбаяСсылка - ссылка на элемент первого кандидата. +// - Ссылка2 - ЛюбаяСсылка - ссылка на элемент второго кандидата. +// - ЭтоДубли - Булево - флаг того, что кандидаты действительно являются дублями. По умолчанию содержит // значение Ложь, может быть изменено на Истина, если кандидаты - действительно // дубли. -// - Поля1 - Структура - Содержит поля Код, Наименование и дополнительные поля первого кандидата, +// - Поля1 - Структура - содержит поля Код, Наименование и дополнительные поля первого кандидата, // указанные в ПараметрыПоискаДублей. -// - Поля2 - Структура - Содержит поля Код, Наименование и дополнительные поля второго кандидата, +// - Поля2 - Структура - содержит поля Код, Наименование и дополнительные поля второго кандидата, // указанные в ПараметрыПоискаДублей. // -// ДополнительныеПараметры - Произвольный - Значение, переданное при вызове программного интерфейса +// ДополнительныеПараметры - Произвольный - значение, переданное при вызове программного интерфейса // ОбщегоНазначения.НайтиДублиЭлементов. // При вызове пользователем из обработки "ПоискИЗаменаДублей" равно Неопределено. // @@ -180,6 +182,271 @@ #Область СлужебныеПроцедурыИФункции +#Область ИдентификаторДляФормул + +// Проверяет уникальность идентификатора в рамках объекта метаданных для которого предназначен вид контактной +// информации (родитель) а также соответствие идентификатора правилам написания. +// +// Параметры: +// ИдентификаторДляФормул - Строка - идентификатор для формул. +// Ссылка - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на текущий объект. +// Родитель - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на родитель текущего объекта. +// Отказ - Булево - флаг отказа при наличии ошибки. +// +Процедура ПроверитьУникальностьИдентификатора(ИдентификаторДляФормул, Ссылка, Родитель, Отказ) Экспорт + + Если ЗначениеЗаполнено(ИдентификаторДляФормул) Тогда + + ИдентификаторПоПравилам = Истина; + ПроверочныйИдентификатор = ИдентификаторДляФормул(ИдентификаторДляФормул); + Если НЕ ВРег(ПроверочныйИдентификатор) = ВРег(ИдентификаторДляФормул) Тогда + ИдентификаторПоПравилам = Ложь; + + ТекстОшибки = НСтр("ru = 'Идентификатор ""%1"" не соответствует правилам именования переменных. + |Идентификатор не должен содержать пробелов и специальных символов.'"); + ОбщегоНазначения.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ИдентификаторДляФормул),, + "ИдентификаторДляФормул",, Отказ); + + КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + ИмяСобытия = НСтр("ru = 'Запись дополнительного реквизита (сведения)'", КодЯзыка); + ТекстОшибки = НСтр("ru = 'Идентификатор ""%1"" не соответствует правилам именования переменных. + |Идентификатор не должен содержать пробелов и специальных символов.'", КодЯзыка); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + ИдентификаторДляФормул); + ЗаписьЖурналаРегистрации(ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + Ссылка.Метаданные(), + Ссылка, + ТекстОшибки); + КонецЕсли; + + Если ИдентификаторПоПравилам Тогда + РодительВерхнегоУровня = Родитель; + Пока ЗначениеЗаполнено(РодительВерхнегоУровня) Цикл + Значение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РодительВерхнегоУровня, "Родитель"); + Если ЗначениеЗаполнено(Значение) Тогда + РодительВерхнегоУровня = Значение; + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + Если НЕ ИдентификаторДляФормулУникален(ИдентификаторДляФормул, Ссылка, РодительВерхнегоУровня) Тогда + + Отказ = Истина; + + ТекстОшибки = НСтр("ru = 'В базе данных уже содержится вид контактной информации с идентификатором ""%1"" внутри группы ""%2"". Идентификатор должен быть уникальным'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + ИдентификаторДляФормул, РодительВерхнегоУровня); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, "ИдентификаторДляФормул"); + + КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + ТекстОшибки = НСтр("ru = 'В базе данных уже содержится вид контактной информации с идентификатором ""%1"" внутри группы ""%2"". Идентификатор должен быть уникальным'", КодЯзыка); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + ИдентификаторДляФормул, РодительВерхнегоУровня); + ИмяСобытия = НСтр("ru = 'Запись дополнительного реквизита (сведения)'", КодЯзыка); + ЗаписьЖурналаРегистрации(ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + Ссылка.Метаданные(), + Ссылка, + ТекстОшибки); + КонецЕсли; + КонецЕсли; + + Иначе + + ТекстОшибки = НСтр("ru = 'Идентификатор для формул не заполнен'"); + ОбщегоНазначения.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ИдентификаторДляФормул),, + "ИдентификаторДляФормул",, Отказ); + + КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + ИмяСобытия = НСтр("ru = 'Запись дополнительного реквизита (сведения)'", КодЯзыка); + ТекстОшибки = НСтр("ru = 'Идентификатор для формул не заполнен'", КодЯзыка); + ЗаписьЖурналаРегистрации(ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + Ссылка.Метаданные(), + Ссылка, + ТекстОшибки); + + КонецЕсли; + +КонецПроцедуры + +// Возвращает уникальный идентификатора для формул (после проверки на уникальность) +// +// Параметры: +// ПредставлениеОбъекта - Строка - представление, из которого будет сформирован идентификатор для формул. +// СсылкаНаТекущийОбъект - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на текущий элемент. +// Родитель - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на родитель текущего объекта. +// Возвращаемое значение: +// Строка - уникальное значение идентификатора для формул. +// +Функция УникальныйИдентификаторДляФормул(ПредставлениеОбъекта, СсылкаНаТекущийОбъект, Родитель) Экспорт + + Идентификатор = ИдентификаторДляФормул(ПредставлениеОбъекта); + Если ПустаяСтрока(Идентификатор) Тогда + // Представление состоит и спецсимволов или цифр. + Префикс = НСтр("ru = 'Идентификатор'"); + Идентификатор = ИдентификаторДляФормул(Префикс + ПредставлениеОбъекта); + КонецЕсли; + + РодительВерхнегоУровня = Родитель; + Пока ЗначениеЗаполнено(РодительВерхнегоУровня) Цикл + Значение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РодительВерхнегоУровня, "Родитель"); + Если ЗначениеЗаполнено(Значение) Тогда + РодительВерхнегоУровня = Значение; + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВидыКонтактнойИнформации.ИдентификаторДляФормул КАК ИдентификаторДляФормул + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ИдентификаторДляФормул = &ИдентификаторДляФормул + | И ВидыКонтактнойИнформации.Ссылка <> &СсылкаНаТекущийОбъект + | И ВидыКонтактнойИнформации.Ссылка В ИЕРАРХИИ (&РодительВерхнегоУровня) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВидыКонтактнойИнформации.ИдентификаторДляФормул КАК ИдентификаторДляФормул + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ИдентификаторДляФормул ПОДОБНО &ИдентификаторДляФормулПодобие + | И ВидыКонтактнойИнформации.Ссылка <> &СсылкаНаТекущийОбъект + | И ВидыКонтактнойИнформации.Ссылка В ИЕРАРХИИ (&РодительВерхнегоУровня)"; + Запрос.УстановитьПараметр("СсылкаНаТекущийОбъект", СсылкаНаТекущийОбъект); + Запрос.УстановитьПараметр("РодительВерхнегоУровня", РодительВерхнегоУровня); + Запрос.УстановитьПараметр("ИдентификаторДляФормул", Идентификатор); + Запрос.УстановитьПараметр("ИдентификаторДляФормулПодобие", Идентификатор + "%"); + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + УникальностьПоТочномуСоответствию = РезультатыЗапроса[0]; + Если НЕ УникальностьПоТочномуСоответствию.Пустой() Тогда + // Есть элементы с данным идентификатором. + ИспользованныеИдентификаторы = Новый Соответствие; + ВыборкаПодобных = РезультатыЗапроса[1].Выбрать(); + Пока ВыборкаПодобных.Следующий() Цикл + ИспользованныеИдентификаторы.Вставить(ВРЕГ(ВыборкаПодобных.ИдентификаторДляФормул), Истина); + КонецЦикла; + + ДобавляемыйНомер = 1; + ИдентификаторБезНомера = Идентификатор; + Пока НЕ ИспользованныеИдентификаторы.Получить(ВРЕГ(Идентификатор)) = Неопределено Цикл + ДобавляемыйНомер = ДобавляемыйНомер + 1; + Идентификатор = ИдентификаторБезНомера + ДобавляемыйНомер; + КонецЦикла; + КонецЕсли; + ИспользованныеИдентификаторы = Новый Соответствие; + + Возврат Идентификатор; +КонецФункции + +Функция ИдентификаторДляФормулУникален(ПроверяемыйИдентификатор, СсылкаНаТекущийОбъект, Родитель) + + РодительВерхнегоУровня = Родитель; + Пока ЗначениеЗаполнено(РодительВерхнегоУровня) Цикл + Значение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РодительВерхнегоУровня, "Родитель"); + Если ЗначениеЗаполнено(Значение) Тогда + РодительВерхнегоУровня = Значение; + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Таблица.Ссылка + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК Таблица + |ГДЕ + | Таблица.Ссылка <> &СсылкаНаТекущийОбъект + | И Таблица.Ссылка В ИЕРАРХИИ (&РодительВерхнегоУровня) + | И Таблица.ИдентификаторДляФормул = &ИдентификаторДляФормул"; + Запрос.УстановитьПараметр("ИдентификаторДляФормул", ПроверяемыйИдентификатор); + Запрос.УстановитьПараметр("СсылкаНаТекущийОбъект", СсылкаНаТекущийОбъект); + Запрос.УстановитьПараметр("РодительВерхнегоУровня", РодительВерхнегоУровня); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса.Пустой(); +КонецФункции + +// Вычисляет значение идентификатора из строки соответствии с правилами именования переменных. +// +// Параметры: +// СтрокаПредставления - Строка - наименование, строка из которой необходимо получить идентификатор. +// +// Возвращаемое значение: +// Строка - идентификатор, соответствующий правилам именования идентификаторов. +// +Функция ИдентификаторДляФормул(СтрокаПредставления) Экспорт + + СпецСимволы = СпецСимволы(); + + Идентификатор = ""; + БылСпецСимвол = Ложь; + + Для НомСимвола = 1 По СтрДлина(СтрокаПредставления) Цикл + + Символ = Сред(СтрокаПредставления, НомСимвола, 1); + + Если СтрНайти(СпецСимволы, Символ) <> 0 Тогда + БылСпецСимвол = Истина; + Если Символ = "_" Тогда + Идентификатор = Идентификатор + Символ; + КонецЕсли; + ИначеЕсли БылСпецСимвол + ИЛИ НомСимвола = 1 Тогда + БылСпецСимвол = Ложь; + Идентификатор = Идентификатор + ВРег(Символ); + Иначе + Идентификатор = Идентификатор + Символ; + КонецЕсли; + + КонецЦикла; + + Возврат Идентификатор; + +КонецФункции + +Функция СпецСимволы() + Диапазоны = Новый Массив; + Диапазоны.Добавить(Новый Структура("Мин, Макс", 0, 32)); + Диапазоны.Добавить(Новый Структура("Мин, Макс", 127, 191)); + + СпецСимволы = " .,+,-,/,*,?,=,<,>,(,)%!@#$%&*""№:;{}[]?()\|/`~'^_"; + Для Каждого Диапазон Из Диапазоны Цикл + Для КодСимвола = Диапазон.Мин По Диапазон.Макс Цикл + СпецСимволы = СпецСимволы + Символ(КодСимвола); + КонецЦикла; + КонецЦикла; + Возврат СпецСимволы; +КонецФункции + +Функция НаименованиеДляФормированияИдентификатора(Знач Наименование, Знач Представления) + Если ТекущийЯзык().КодЯзыка <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); + НайденныеСтроки = Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Наименование = НайденныеСтроки[0].Наименование; + КонецЕсли; + КонецЕсли; + + Возврат Наименование; +КонецФункции + +#КонецОбласти + // Регистрирует к обработке виды контактной информации. // Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт @@ -208,6 +475,7 @@ ОбъектовОбработано = 0; Пока ВидКонтактнойИнформацииСсылка.Следующий() Цикл + НачатьТранзакцию(); Попытка ВидКонтактнойИнформации = ВидКонтактнойИнформацииСсылка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.ВидыКонтактнойИнформации @@ -234,10 +502,22 @@ ВидКонтактнойИнформации.ВидРедактирования = "ПолеВводаИДиалог"; КонецЕсли; КонецЕсли; + + Если НЕ ВидКонтактнойИнформации.ЭтоГруппа + И НЕ ЗначениеЗаполнено(ВидКонтактнойИнформации.ИдентификаторДляФормул) Тогда + НаименованиеДляИдентификатора = НаименованиеДляФормированияИдентификатора(ВидКонтактнойИнформации.Наименование, + ВидКонтактнойИнформации.Представления); + ВидКонтактнойИнформации.ИдентификаторДляФормул = УникальныйИдентификаторДляФормул(НаименованиеДляИдентификатора, + ВидКонтактнойИнформации.Ссылка, ВидКонтактнойИнформации.Родитель); + КонецЕсли; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВидКонтактнойИнформации); ОбъектовОбработано = ОбъектовОбработано + 1; + ЗафиксироватьТранзакцию(); Исключение + ОтменитьТранзакцию(); + // Если не удалось обработать какой-либо вид контактной информации, повторяем попытку снова. ПроблемныхОбъектов = ПроблемныхОбъектов + 1; diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl index b0ccb0c3c..736b13b77 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl @@ -30,10 +30,22 @@ Если ПустаяСтрока(ИмяГруппы) Тогда ИмяГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Родитель, "ИмяПредопределенныхДанных"); КонецЕсли; + + ПроверкаИдентификатораДляФормул(Отказ); КонецЕсли; КонецПроцедуры +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + УстановитьСостояниеРегламентногоЗадания(); + +КонецПроцедуры + Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если СтрНачинаетсяС(ИмяПредопределенныхДанных, "Удалить") Тогда @@ -53,18 +65,56 @@ Процедура ПриКопировании(ОбъектКопирования) ИмяПредопределенногоВида = ""; + Если НЕ ЭтоГруппа Тогда + ИдентификаторДляФормул = ""; + КонецЕсли; КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции +Процедура ПроверкаИдентификатораДляФормул(Отказ) + Если НЕ ДополнительныеСвойства.Свойство("ПроверкаИдентификатораДляФормулВыполнена") Тогда + // Программная запись. + Если ЗначениеЗаполнено(ИдентификаторДляФормул) Тогда + Справочники.ВидыКонтактнойИнформации.ПроверитьУникальностьИдентификатора(ИдентификаторДляФормул, + Ссылка, Родитель, Отказ); + Иначе + // Установка идентификатора. + ИдентификаторДляФормул = Справочники.ВидыКонтактнойИнформации.УникальныйИдентификаторДляФормул( + НаименованиеДляФормированияИдентификатора(), Ссылка, Родитель); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Функция НаименованиеДляФормированияИдентификатора() + НаименованиеДляИдентификатора = Наименование; + Если ТекущийЯзык() <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); + НайденныеСтроки = Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + НаименованиеДляИдентификатора = НайденныеСтроки[0].Наименование; + КонецЕсли; + КонецЕсли; + + Возврат НаименованиеДляИдентификатора; +КонецФункции + Процедура ПриЧтенииПредставленийНаСервере() Экспорт МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); КонецПроцедуры +Процедура УстановитьСостояниеРегламентногоЗадания() + + Статус = ?(ИсправлятьУстаревшиеАдреса = Истина, Истина, Неопределено); + УправлениеКонтактнойИнформациейСлужебный.УстановитьИспользованиеРегламентногоЗадания(Статус); + +КонецПроцедуры + #КонецОбласти #Иначе diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo index b297a2cd5..fe0abed75 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo @@ -588,6 +588,88 @@ Use Use + + ИсправлятьУстаревшиеАдреса + + ru + Исправлять устаревшие адреса + + + Boolean + + + ru + Автоматические исправлять устаревшие адреса на новые + + + + + Use + Use + + + ИдентификаторДляФормул + + ru + Идентификатор для формул + + + en + Идентификатор для формул + + + String + + 150 + + + + + + Use + Use + + + МаскаНомераТелефона + + ru + Маска номера телефона + + + String + + 150 + + + + ru + Содержит строку маски для интерактивного ввода номера телефона. + + + + + Use + Use + + + ВводитьНомерПоМаске + + ru + Вводить номер по маске + + + Boolean + + + ru + Признак, что ввод номера телефона выполняется по маске. + + + + + Use + Use + diff --git a/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl b/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl index 6240a8e35..3de8f8906 100644 --- a/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo b/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo index 548ef1c78..10a4accaf 100644 --- a/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo +++ b/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo @@ -132,6 +132,7 @@ Вид проверки true + HierarchyOfItems 2 true 9 diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Form.form b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Form.form index 7c92014db..6c875138e 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Form.form +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Form.form @@ -669,7 +669,7 @@ - МассивСсылок + ОбновляемыеКомпоненты 1 ValueList @@ -688,13 +688,9 @@ ПодключитьИнтернетПоддержку <key>ru</key> - <value>Подключить интернет поддержку</value> + <value>Подключить Интернет-поддержку</value> 1 - - ru - Подключить интернет поддержку - true @@ -715,7 +711,7 @@ 2 ru - Загрузить + Загрузить внешнюю компоненту с портала 1С:ИТС true @@ -729,7 +725,7 @@ Auto - МассивСсылок + ОбновляемыеКомпоненты true diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl index 4ef1c1f36..c1716a58a 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl @@ -11,10 +11,9 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если ТипЗнч(Параметры.МассивСсылок) <> Тип("Массив") - Или Параметры.МассивСсылок.Количество() = 0 Тогда - - ВызватьИсключение НСтр("ru = 'Должна быть хоть одна ссылка указана.'"); + Если ТипЗнч(Параметры.ОбновляемыеКомпоненты) <> Тип("Массив") + Или Параметры.ОбновляемыеКомпоненты.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Некорректное значение параметра формы ОбновляемыеКомпоненты.'"); КонецЕсли; ДанныеАутентификацииПорталаСохранены = ДанныеАутентификацииПорталаСохранены(); @@ -22,8 +21,9 @@ ТекстПояснения = ""; ПредложитьОбновление = Ложь; - Для Каждого Ссылка Из Параметры.МассивСсылок Цикл - Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Идентификатор, Версия, ОбновлятьСПортала1СИТС"); + РеквизитыКомпонент = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Параметры.ОбновляемыеКомпоненты, "Идентификатор, Версия, ОбновлятьСПортала1СИТС"); + Для Каждого ОбновляемаяКомпонента Из Параметры.ОбновляемыеКомпоненты Цикл + Реквизиты = РеквизитыКомпонент[ОбновляемаяКомпонента]; ТекстПояснения = ТекстПояснения + ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты(Реквизиты.Идентификатор, Реквизиты. Версия) + ?(Реквизиты.ОбновлятьСПортала1СИТС, "", " - " + НСтр("ru = 'обновление отключено'") + ".") @@ -31,7 +31,7 @@ ПредложитьОбновление = ПредложитьОбновление Или Реквизиты.ОбновлятьСПортала1СИТС; Если Реквизиты.ОбновлятьСПортала1СИТС Тогда - МассивСсылок.Добавить(Ссылка); + ОбновляемыеКомпоненты.Добавить(ОбновляемаяКомпонента); КонецЕсли; КонецЦикла; @@ -140,7 +140,7 @@ КонецЕсли; ПараметрыПроцедуры = Новый Структура; - ПараметрыПроцедуры.Вставить("МассивСсылок", МассивСсылок.ВыгрузитьЗначения()); + ПараметрыПроцедуры.Вставить("ОбновляемыеКомпоненты", ОбновляемыеКомпоненты.ВыгрузитьЗначения()); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление внешней компоненты.'"); diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl index 757b64357..56372b980 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl @@ -130,9 +130,6 @@ &НаКлиенте Процедура ПослеПолученияКомпонентыСПортала(Результат, ДополнительныеПараметры) Экспорт - // Ответ: - // - Структура - Выполнено - результат в структуре. - // - Неопределено - Отменено пользователем. Если Результат = Неопределено Тогда Возврат; КонецЕсли; diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl index 8decc9a4e..274ca8085 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl @@ -98,16 +98,18 @@ Возврат; КонецЕсли; - СтандартнаяОбработка = Ложь; - - ПараметрЗакрытия = ВнешниеКомпонентыСлужебныйКлиент.РезультатЗагрузкиКомпоненты(); - ПараметрЗакрытия.Загружена = Записана; - ПараметрЗакрытия.Идентификатор = Объект.Идентификатор; - ПараметрЗакрытия.Версия = Объект.Версия; - ПараметрЗакрытия.Наименование = Объект.Наименование; - ПараметрЗакрытия.ДополнительнаяИнформация = ДополнительнаяИнформация; - - Закрыть(ПараметрЗакрытия); + Если Не Модифицированность Тогда + СтандартнаяОбработка = Ложь; + + ПараметрЗакрытия = ВнешниеКомпонентыСлужебныйКлиент.РезультатЗагрузкиКомпоненты(); + ПараметрЗакрытия.Загружена = Записана; + ПараметрЗакрытия.Идентификатор = Объект.Идентификатор; + ПараметрЗакрытия.Версия = Объект.Версия; + ПараметрЗакрытия.Наименование = Объект.Наименование; + ПараметрЗакрытия.ДополнительнаяИнформация = ДополнительнаяИнформация; + + Закрыть(ПараметрЗакрытия); + КонецЕсли; КонецПроцедуры @@ -139,7 +141,7 @@ Если Модифицированность Тогда Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопросаЗаписатьОбъект", ЭтотОбъект); ПоказатьВопрос(Оповещение, - НСтр("ru = 'Для проверки обновления необходимо записать объект. Записать?'"), + НСтр("ru = 'Для проверки обновления необходимо записать изменения. Записать?'"), РежимДиалогаВопрос.ДаНет); Иначе НачатьОбновлениеКомпонентыСПортала(); @@ -201,7 +203,6 @@ #Область КлиентскаяЛогика -// Строит диалог загрузки компоненты из файла. &НаКлиенте Процедура ЗагрузитьКомпонентуИзФайла() @@ -251,6 +252,7 @@ Результат = ЗагрузитьКомпонентуИзФайлаНаСервере(ПараметрыЗагрузки); Если Результат.Загружена И ЭтоАдресВременногоХранилища(АдресДвоичныхДанныхКомпоненты)Тогда ДополнительнаяИнформация = Результат.ДополнительнаяИнформация; + Модифицированность = Истина; Иначе ЗагрузитьКомпонентуПриОтображенииОшибки(Результат.ОписаниеОшибки); КонецЕсли; @@ -307,12 +309,11 @@ РазблокироватьДанныеФормыДляРедактирования(); - МассивСсылок = Новый Массив; - МассивСсылок.Добавить(Объект.Ссылка); + ОбновляемыеКомпоненты = Новый Массив; + ОбновляемыеКомпоненты.Добавить(Объект.Ссылка); Оповещение = Новый ОписаниеОповещения("ПослеОбновленияКомпонентыСПортала", ЭтотОбъект); - - ВнешниеКомпонентыСлужебныйКлиент.ОбновитьКомпонентыСПортала(Оповещение, МассивСсылок); + ВнешниеКомпонентыСлужебныйКлиент.ОбновитьКомпонентыСПортала(Оповещение, ОбновляемыеКомпоненты); КонецПроцедуры @@ -332,7 +333,7 @@ Функция ЗагрузитьКомпонентуИзФайлаНаСервере(ПараметрыЗагрузки) Если Не Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда - ВызватьИсключение НСтр("ru = 'Недостаточно прав для совершения операции.'"); + ВызватьИсключение НСтр("ru = 'Недостаточно прав для загрузки компоненты.'"); КонецЕсли; ОбъектСправочника = РеквизитФормыВЗначение("Объект"); @@ -353,10 +354,9 @@ Если ОбъектСправочника.Идентификатор <> Информация.Реквизиты.Идентификатор Тогда Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Текущий идентификатор %1 отличается от загружаемого %2 - |Обновление невозможно.'"), - ОбъектСправочника.Идентификатор, - Информация.Реквизиты.Идентификатор); + НСтр("ru = 'Невозможно обновить компоненту, т.к. различаются идентификаторы. + |Ожидался %1, а идентификатор загружаемой внешней компоненты: %2.'"), + ОбъектСправочника.Идентификатор, Информация.Реквизиты.Идентификатор); Возврат Результат; КонецЕсли; diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl index 009d091bb..a06b13796 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo b/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo index 32f5582f9..c0dc820c5 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo @@ -523,7 +523,7 @@ ОбновлениеКомпонентСПортала1СИТС ru - Обновление компонент с Портала 1С:ИТС + Обновление компонент с портала 1С:ИТС PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index 484135612..7efbf83ec 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -37,7 +37,7 @@ // Начальное значение настройки до загрузки данных из настроек. ВыбиратьИерархически = Истина; - ЗаполнитьХранимыеПараметры(); + НовыйХранимыеПараметры(); МассивПустыхСсылок = Неопределено; Параметры.Свойство("Назначение", МассивПустыхСсылок); @@ -597,7 +597,7 @@ МассивПользователей = РезультатВыбора(); ОповеститьОВыборе(МассивПользователей); ЭтотОбъект.Модифицированность = Ложь; - Закрыть(); + Закрыть(МассивПользователей); КонецЕсли; КонецПроцедуры @@ -660,8 +660,18 @@ #Область СлужебныеПроцедурыИФункции +// Возвращаемое значение: +// Структура: +// * ВыборГруппВнешнихПользователей - Булево +// * ОтборОбъектАвторизации - ОпределяемыйТип.ВнешнийПользователь +// * РасширенныйПодбор - Булево +// * ГруппаВсеПользователи - СправочникСсылка.ГруппыВнешнихПользователей +// * ТекущаяСтрока - Число +// * ЗаголовокФормыПодбора - Строка +// * ИспользоватьГруппы - Булево +// &НаСервере -Процедура ЗаполнитьХранимыеПараметры() +Функция НовыйХранимыеПараметры() ХранимыеПараметры = Новый Структура; ХранимыеПараметры.Вставить("ВыборГруппВнешнихПользователей", Параметры.ВыборГруппВнешнихПользователей); @@ -671,8 +681,9 @@ Иначе ХранимыеПараметры.Вставить("ОтборОбъектАвторизации", Неопределено); КонецЕсли; + Возврат ХранимыеПараметры; -КонецПроцедуры +КонецФункции &НаСервере Процедура ЗаполнитьПараметрыДинамическихСписков(МассивПустыхСсылок = Неопределено) @@ -910,6 +921,9 @@ &НаСервере Процедура ЗаполнитьСписокВыбранныхПользователейИГрупп(ВыбранныеЭлементыИКартинки) + ПользователиСлужебный.ВыбратьПользователейГруппы( + ВыбранныеЭлементыИКартинки, ХранимыеПараметры, Элементы.ВнешниеПользователиСписок); + Для Каждого СтрокаМассива Из ВыбранныеЭлементыИКартинки Цикл ВыбранныйПользовательИлиГруппа = СтрокаМассива.ВыбранныйЭлемент; @@ -1164,11 +1178,11 @@ // Обработчик вопроса. // // Параметры: -// Ответ - КодВозвратаДиалога - -// ДополнительныеПараметры - Структура - где: -// * ПараметрыПеретаскивания - ПараметрыПеретаскивания - -// * Строка - СправочникСсылка.ГруппыВнешнихПользователей - -// * Перемещение - ДействиеПеретаскивания - +// Ответ - КодВозвратаДиалога +// ДополнительныеПараметры - Структура: +// * ПараметрыПеретаскивания - ПараметрыПеретаскивания +// * Строка - СправочникСсылка.ГруппыВнешнихПользователей +// * Перемещение - ДействиеПеретаскивания // &НаКлиенте Процедура ГруппыВнешнихПользователейПеретаскиваниеОбработкаВопроса(Ответ, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index ac298dee7..fa0c6c3a0 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -468,10 +468,10 @@ Если Строка.ЭтоНесуществующаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Роли[%1].РолиСиноним", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Несуществующая роль ""%1"".'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 не найдена в метаданных.'"), Строка.Синоним, "%1")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Несуществующая роль ""%1"" в строке %2.'"), Строка.Синоним, "%1")); КонецЕсли; Если Строка.ЭтоНедоступнаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, @@ -1353,7 +1353,7 @@ КонецЕсли; Элементы.СопоставлениеПояснениеНесоответствия.Заголовок = - НСтр("ru = 'Пользователь информационной базы не найден.'") + Рекомендация; + НСтр("ru = 'Несуществующий пользователь информационной базы.'") + Рекомендация; КонецПроцедуры diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl index 73556536d..684fdb9e0 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl index 56671a553..42638ba40 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl @@ -82,7 +82,7 @@ Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей"); Блокировка.Заблокировать(); - ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя.ПолучитьОбъект(); + ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя.ПолучитьОбъект(); // СправочникСсылка.ГруппыВнешнихПользователей ОбъектГруппы.Состав.Добавить().ВнешнийПользователь = Ссылка; ОбъектГруппы.Записать(); КонецЕсли; diff --git a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl index cda2e7435..cf29d1f39 100644 --- a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl index c0b9772bf..ec189d0e3 100644 --- a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl index 8fa8b5276..cff58d851 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -171,10 +171,10 @@ Если Строка.ЭтоНесуществующаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Роли[%1].РолиСиноним", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Несуществующая роль ""%1"".'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 не найдена в метаданных.'"), Строка.Синоним, "%1")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Несуществующая роль ""%1"" в строке %2.'"), Строка.Синоним, "%1")); КонецЕсли; Если Строка.ЭтоНедоступнаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl index ba021a8b1..7e7761afd 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl index 1cdaf47d1..86b36e9cb 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl @@ -123,9 +123,10 @@ КонецЕсли; КонецЦикла; - Для каждого УдалитьПапку Из УдалитьПапки Цикл - Если УдалитьПапку.Ключ.Индекс(УдалитьПапку.Значение) > -1 Тогда - УдалитьПапку.Ключ.Удалить(УдалитьПапку.Значение); + Для Каждого КлючИЗначение Из УдалитьПапки Цикл + Строки = КлючИЗначение.Ключ; // КоллекцияСтрокДереваЗначений + Если Строки.Индекс(КлючИЗначение.Значение) > -1 Тогда + Строки.Удалить(КлючИЗначение.Значение); КонецЕсли; КонецЦикла; diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index a78f04ff7..28c2b3b33 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -1319,6 +1319,7 @@ ПараметрыФормы.Вставить("МножественныйВыбор", Истина); ПараметрыФормы.Вставить("РасширенныйПодбор", Истина); ПараметрыФормы.Вставить("ПараметрыРасширеннойФормыПодбора", ПараметрыРасширеннойФормыПодбора()); + ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина); ИначеЕсли Объект.Ссылка <> ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда Если ВыборИПодборВнешнихПользователей Тогда ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина); diff --git a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl index 8d0f499f2..01a6815b2 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; @@ -265,13 +266,15 @@ // Если родитель не найден он будет создан. // // Параметры: -// НеСоздавать - Булево, если задан Истина, родитель не будет автоматически создан, +// НеСоздавать - Булево - если задан Истина, родитель не будет автоматически создан, // а функция вернет Неопределено, если родитель не найден. // +// НаименованиеГруппыЭлементов - Строка +// // Возвращаемое значение: // СправочникСсылка.ГруппыДоступа - ссылка на группу-родителя. // -Функция РодительПерсональныхГруппДоступа(Знач НеСоздавать = Ложь, НаименованиеГруппыЭлементов = Неопределено) Экспорт +Функция РодительПерсональныхГруппДоступа(Знач НеСоздавать = Ложь, НаименованиеГруппыЭлементов = "") Экспорт УстановитьПривилегированныйРежим(Истина); @@ -604,6 +607,10 @@ // Только для внутреннего использования. +// +// Параметры: +// ЭлементДанных - СправочникОбъект.ГруппыДоступа +// Процедура ЗарегистрироватьГруппуДоступаИзмененнуюПриЗагрузке(ЭлементДанных) Экспорт СтарыеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭлементДанных.Ссылка, diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl index 02709de9f..373e0e553 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl @@ -195,6 +195,14 @@ #Область СлужебныеПроцедурыИФункции +// Параметры: +// НовыеУчастники - СправочникТабличнаяЧасть.ГруппыДоступа.Пользователи +// СтарыеУчастники - РезультатЗапроса +// Возвращаемое значение: +// Структура: +// * ВнешниеПользователи - Булево +// * Пользователи - Булево +// Функция ТипыИзмененныхУчастников(НовыеУчастники, СтарыеУчастники) ТипыИзмененныхУчастников = Новый Структура; diff --git a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl index db90de988..363a488fa 100644 --- a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form index 5835fb0bf..8c7c1fead 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form @@ -1722,6 +1722,13 @@ DontUse Auto + + Заголовок + + String + + + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl index 3f8ecf853..9fee5ae0c 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl @@ -15,8 +15,8 @@ Если Параметры.РежимВыбора Тогда РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; КонецЕсли; - - Если Параметры.Свойство("Заголовок") Тогда + + Если ЗначениеЗаполнено(Параметры.Заголовок) Тогда АвтоЗаголовок = Ложь; Заголовок = Параметры.Заголовок; КонецЕсли; @@ -212,15 +212,6 @@ Возврат Истина; КонецФункции -&НаКлиенте -Процедура ЗагрузитьФайлОбработкиОтчетаЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = "ФайлЗагружен" Тогда - ПоказатьЗначение(,Элементы.Список.ТекущиеДанные.Ссылка); - КонецЕсли; - -КонецПроцедуры - &НаСервере Процедура УстановитьУсловноеОформление() diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index 9dfb3ada2..5b7ec54fb 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -903,6 +903,10 @@ КонецПроцедуры +// Параметры: +// Ответ - КодВозвратаДиалога +// ДополнительныеПараметры - Структура +// &НаКлиенте Процедура ВариантыДополнительногоОтчетаПередУдалениемЗавершение(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда @@ -1332,7 +1336,7 @@ &НаСервере Процедура СформироватьСписокРазрешений() - ТаблицаРазрешений = ПолучитьИзВременногоХранилища(АдресРазрешений); + ТаблицаРазрешений = ПолучитьИзВременногоХранилища(АдресРазрешений);// СправочникТабличнаяЧасть.ДополнительныеОтчетыИОбработки.Разрешения Разрешения = Новый Массив(); @@ -1459,7 +1463,7 @@ МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); ОтчетМетаданные = ВнешнийОбъект.Метаданные(); - СхемаКДМетаданные = ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных; + СхемаКДМетаданные = ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных;// ОбъектМетаданных Если СхемаКДМетаданные <> Неопределено Тогда СхемаКД = ВнешнийОбъект.ПолучитьМакет(СхемаКДМетаданные.Имя); Для Каждого ВариантНастроекКД Из СхемаКД.ВариантыНастроек Цикл diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl index f7501c74f..d7d199fe3 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index 21540cb6f..1c2cb01b4 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -221,7 +221,7 @@ Возврат; КонецЕсли; - ТаблицаКоманд = ДополнительныеСвойства.АктуальныеКоманды; + ТаблицаКоманд = ДополнительныеСвойства.АктуальныеКоманды;// СправочникТабличнаяЧасть.ДополнительныеОтчетыИОбработки.Команды ЗаданияДляОбновления = Новый Соответствие; @@ -293,7 +293,7 @@ УстановитьПривилегированныйРежим(Истина); Для Каждого КлючИЗначение Из ДополнительныеСвойства.ЗаданияДляОбновления Цикл - Команда = КлючИЗначение.Ключ; + Команда = КлючИЗначение.Ключ;// СправочникТабличнаяЧастьСтрока.ДополнительныеОтчетыИОбработки.Команды Задание = КлючИЗначение.Значение; Изменения = Новый Структура; diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl index 3d7b5419b..a7705d0b2 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив - список имен реквизитов объекта. +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/Заметки/ManagerModule.bsl b/SSL/src/Catalogs/Заметки/ManagerModule.bsl index 51ca1f8af..4b6443cd6 100644 --- a/SSL/src/Catalogs/Заметки/ManagerModule.bsl +++ b/SSL/src/Catalogs/Заметки/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl index c0b9772bf..ec189d0e3 100644 --- a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl index 4b068c1c2..9369a691d 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl index b4da963aa..012483383 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index 406123aed..2d4fb6834 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; @@ -166,7 +167,7 @@ // Только для внутреннего использования. // // Параметры: -// Объекты - Массив из СправочникОбъект.ИдентификаторыОбъектовМетаданных - +// Объекты - Массив из СправочникОбъект.ИдентификаторыОбъектовМетаданных // Процедура ЗагрузитьДанныеВПодчиненныйУзел(Объекты) Экспорт @@ -378,8 +379,8 @@ // // Возвращаемое значение: // Массив - со значениями: -// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - найденная ссылка. +// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений - найденная ссылка. // Функция ИдентификаторУдаленногоОбъектаМетаданных(ПолноеИмяУдаленного) Экспорт @@ -582,9 +583,8 @@ Массив = Новый Массив; Массив.Добавить(ПолноеИмяОбъектаМетаданных); - Идентификатор = ИдентификаторыОбъектовМетаданных(Массив, - ВызыватьИсключение, Истина).Получить(ПолноеИмяОбъектаМетаданных); - + Идентификаторы = ИдентификаторыОбъектовМетаданных(Массив, ВызыватьИсключение, Истина); + Идентификатор = Идентификаторы.Получить(ПолноеИмяОбъектаМетаданных); Если Идентификатор = Неопределено Тогда Возврат Null; КонецЕсли; @@ -891,15 +891,15 @@ // Только для внутреннего использования. // // Возвращаемое значение: -// ТаблицаЗначений - -// * ПорядокБиблиотеки - Число - -// * ВерсияЧасть1 - Число - -// * ВерсияЧасть2 - Число - -// * ВерсияЧасть3 - Число - -// * ВерсияЧасть4 - Число - -// * ПорядокДобавления - Число - -// * СтароеПолноеИмя - Строка - -// * НовоеПолноеИмя - Строка - +// ТаблицаЗначений: +// * ПорядокБиблиотеки - Число +// * ВерсияЧасть1 - Число +// * ВерсияЧасть2 - Число +// * ВерсияЧасть3 - Число +// * ВерсияЧасть4 - Число +// * ПорядокДобавления - Число +// * СтароеПолноеИмя - Строка +// * НовоеПолноеИмя - Строка // Функция ТаблицаПереименованияДляТекущейВерсии() Экспорт @@ -1189,8 +1189,8 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - : -// * Список - ДинамическийСписок - +// Форма - ФормаКлиентскогоПриложения: +// * Список - ДинамическийСписок // Процедура ФормаСпискаПриСозданииНаСервере(Форма) Экспорт @@ -1213,9 +1213,10 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - : -// * Объект - ДанныеФормыСтруктура - : -// ** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений - +// Форма - ФормаКлиентскогоПриложения: +// * Объект - ДанныеФормыСтруктура: +// ** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений // Процедура ФормаЭлементаПриСозданииНаСервере(Форма) Экспорт @@ -1381,29 +1382,31 @@ КонецПроцедуры // Возвращаемое значение: -// ТаблицаЗначений - : -// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений - -// * ИмяПредопределенныхДанных - Строка - -// * Родитель - СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений - -// * ПометкаУдаления - Булево - -// * Наименование - Строка - -// * ПорядокКоллекции - Число - -// * Имя - Строка - -// * Синоним - Строка - -// * ПолноеИмя - Строка - -// * ПолныйСиноним - Строка - -// * БезДанных - Булево - -// * ЗначениеПустойСсылки - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// * ХранилищеКлюча - ХранилищеЗначения - -// * НоваяСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - -// * ИмяРасширения - Строка - -// * ХешСуммаРасширения - Строка - -// * КлючОбъектаМетаданных - ХранилищеЗначения - -// * БезКлючаОбъектаМетаданных - Булево - -// * ЭтоКоллекция - Булево - -// * ЭтоНовый - Булево - +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * ИмяПредопределенныхДанных - Строка +// * Родитель - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * ПометкаУдаления - Булево +// * Наименование - Строка +// * ПорядокКоллекции - Число +// * Имя - Строка +// * Синоним - Строка +// * ПолноеИмя - Строка +// * ПолныйСиноним - Строка +// * БезДанных - Булево +// * ЗначениеПустойСсылки - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * ХранилищеКлюча - ХранилищеЗначения +// * НоваяСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * ИмяРасширения - Строка +// * ХешСуммаРасширения - Строка +// * КлючОбъектаМетаданных - ХранилищеЗначения +// * БезКлючаОбъектаМетаданных - Булево +// * ЭтоКоллекция - Булево +// * ЭтоНовый - Булево // Функция ВыгрузкаВсехИдентификаторов(ОбъектыРасширений = Ложь) @@ -2660,7 +2663,7 @@ Попытка Идентификаторы = ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора( - ПолныеИменаОбъектовМетаданных, Истина, ОдинЭлемент); + ПолныеИменаОбъектовМетаданных, Истина, ОдинЭлемент, Истина); Исключение Идентификаторы = Неопределено; КонецПопытки; @@ -2678,7 +2681,7 @@ КонецЕсли; Идентификаторы = ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора( - ПолныеИменаОбъектовМетаданных, ВызыватьИсключение, ОдинЭлемент); + ПолныеИменаОбъектовМетаданных, ВызыватьИсключение, ОдинЭлемент, Не ВызыватьИсключение); КонецЕсли; Возврат Идентификаторы; @@ -2686,7 +2689,8 @@ КонецФункции // Для функций ИдентификаторыОбъектовМетаданных. -Функция ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора(ПолныеИменаОбъектовМетаданных, ВызыватьИсключение, ОдинЭлемент) +Функция ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора(ПолныеИменаОбъектовМетаданных, + ВызыватьИсключение, ОдинЭлемент, ПропускатьНеподдерживаемыеОбъекты) УстановитьПривилегированныйРежим(Истина); @@ -2752,8 +2756,7 @@ Продолжить; КонецЕсли; ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Объект метаданных не найден по полному имени: - |""%1"".'"), + НСтр("ru = 'Объект метаданных с именем ""%1"" не существует.'"), ПолноеИмяОбъектаМетаданных); Ошибки.Добавить(ОписаниеОшибки); Продолжить; @@ -2778,6 +2781,9 @@ И Не Метаданные.Задачи.Содержит(ОбъектМетаданных) И Не ЭтоПодсистема(ОбъектМетаданных) Тогда + Если ПропускатьНеподдерживаемыеОбъекты Тогда + Продолжить; + КонецЕсли; ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Объект метаданных не поддерживается: |""%1"". @@ -2815,9 +2821,9 @@ ШаблонОшибки = ?(Расширение <> Неопределено, НСтр("ru = 'Для объекта метаданных ""%1"" - |не найден идентификатор в регистре сведений ""Идентификаторы объектов версий расширений"".'"), + |не существует идентификатор в регистре сведений ""Идентификаторы объектов версий расширений"".'"), НСтр("ru = 'Для объекта метаданных ""%1"" - |не найден идентификатор в справочнике ""Идентификаторы объектов метаданных"".'")); + |не существует идентификатор в справочнике ""Идентификаторы объектов метаданных"".'")); ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПолноеИмяОбъектаМетаданных); ДобавитьУточнениеОшибкиПараметровРаботыПрограммыДляРазработчика = Истина; Ошибки.Добавить(ОписаниеОшибки); @@ -2870,12 +2876,12 @@ Если КоличествоОшибок > 0 Тогда Если ОдинЭлемент Тогда - ЗаголовокОшибки = НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных().'"); + ЗаголовокОшибки = НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных.'"); ИначеЕсли КоличествоОшибок = 1 Тогда - ЗаголовокОшибки = НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторыОбъектовМетаданных().'"); + ЗаголовокОшибки = НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторыОбъектовМетаданных.'"); Иначе - ЗаголовокОшибки = НСтр("ru = 'Ошибки при выполнении функции ОбщегоНазначения.ИдентификаторыОбъектовМетаданных().'"); + ЗаголовокОшибки = НСтр("ru = 'Ошибки при выполнении функции ОбщегоНазначения.ИдентификаторыОбъектовМетаданных.'"); КонецЕсли; Разделитель = Символы.ПС + Символы.ПС; @@ -3089,7 +3095,7 @@ Если ВызыватьИсключение Тогда ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Идентификатор ""%1"" - |не найден в справочнике ""%2"".'"), + |не существует в справочнике ""%2"".'"), Строка(Идентификатор), НазваниеСправочника(ИдентификаторыРасширений.Найти(Идентификатор) <> Неопределено)); @@ -3260,7 +3266,7 @@ КонецЕсли; Если ПолноеИмя = Неопределено Тогда - Возврат НСтр("ru = 'Объект не найден.'") + Возврат НСтр("ru = 'Объект не существует.'") КонецЕсли; ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); @@ -3393,15 +3399,13 @@ // АПК:1327-выкл - №783.1.4.1 Во-первых, нетранзакционная операция, так как может быть длительной. // Во-вторых, выполняется после загрузки данных из главного узла в режиме обновление информационной базы. // В третьих, выполняется только тогда, когда найдены дубли идентификаторов объектов метаданных (редкий случай). - Параметры = Новый Структура; + Параметры = ПараметрыЗаменыЭлементов(); Для Каждого РегистрБухгалтерии Из Метаданные.РегистрыБухгалтерии Цикл Параметры.Вставить(РегистрБухгалтерии.Имя + "Субконто", РегистрБухгалтерии.ПланСчетов.МаксКоличествоСубконто); Параметры.Вставить(РегистрБухгалтерии.Имя + "Корреспонденция", РегистрБухгалтерии.Корреспонденция); КонецЦикла; - Параметры.Вставить("Объект", Неопределено); - ОбрабатываемаяСсылка = Неопределено; БылиИсключения = Ложь; @@ -3614,7 +3618,7 @@ Для Каждого Последовательность Из Метаданные.Последовательности Цикл Если Последовательность.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда НадоЗаписывать = Ложь; - НаборЗаписи = Последовательности[Последовательность.Имя].СоздатьНаборЗаписей(); + НаборЗаписи = Последовательности[Последовательность.Имя].СоздатьНаборЗаписей(); // ПоследовательностьНаборЗаписей НаборЗаписи.Отбор.Регистратор.Установить(СтрокаТаблицы.Данные); НаборЗаписи.Прочитать(); @@ -3721,7 +3725,7 @@ СтруктураИзмерений = Новый Структура; МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрокаТаблицы.Метаданные.ПолноеИмя()); - НаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + НаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); // РегистрСведенийНаборЗаписей Для Каждого Измерение Из СтрокаТаблицы.Метаданные.Измерения Цикл НаборЗаписей.Отбор[Измерение.Имя].Установить(СтрокаТаблицы.Данные[Измерение.Имя]); СтруктураИзмерений.Вставить(Измерение.Имя, СтрокаТаблицы.Данные[Измерение.Имя]); @@ -3841,6 +3845,20 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * Объект - СправочникОбъект +// - Неопределено +// +Функция ПараметрыЗаменыЭлементов() + + Параметры = Новый Структура; + Параметры.Вставить("Объект", Неопределено); + Возврат Параметры; + +КонецФункции + + // Процедура из универсальной обработки ПоискИЗаменаЗначений. // Изменения: // - заменен метод Сообщить(...) на ЗаписьЖурналаРегистрации(...). diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo index 58fe1b791..2aed0b62c 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo @@ -1163,66 +1163,102 @@ - + РегистрСведенийЗапущенныеОбработчикиОчередиЗаданий - + РегистрСведенийКэшДанныхКлассификаторов - + + РегистрСведенийНеудаленныеОбъекты + + + + + РегистрСведенийОбновлениеКлючейДоступаТекущиеЗадания - + РегистрСведенийОбщиеПоставляемыеМакетыПечати - + РегистрСведенийОчередьОбновляемыхПоставляемыхРасширенийВОбластяхДанных - + РегистрСведенийОчередьРасширенийДляОповещений - + РегистрСведенийПоставляемыеДанныеТребующиеОбработкиВОбластях - + РегистрСведенийСвязиАдресныхОбъектов - + РегистрСведенийСостоянияПроверокВеденияУчета - + + РегистрСведенийУдаляемыеОбъекты + + + + + РегистрСведенийПериодыНерабочихДнейКалендаря + + РегистрСведенийОбработчикиОбновления + + + + + + РегистрСведенийОбработчикиОбновленияОбщихДанных + + + + + + РегистрСведенийПотокиОбновления + + + + + + РегистрСведенийСостоянияОригиналовПервичныхДокументов + + + + DontAutoUpdate InDialog diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl index ad6f2c0b3..3ae5bb329 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат Справочники.ИдентификаторыОбъектовМетаданных.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form index 04373b664..dabe49400 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form @@ -2882,6 +2882,7 @@ TextPicture + true DontUse Auto diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index 15071ec64..63e8950b9 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -15,7 +15,7 @@ Если Не Объект.Ссылка.Пустая() Тогда Возврат; - КонецЕсли; + КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан("Справочник.Календари", ЭтотОбъект); @@ -363,6 +363,8 @@ УстановитьДоступностьУчитыватьПраздники(ЭтотОбъект); УстановитьДоступностьРасписанияПредпраздничногоДня(ЭтотОбъект); + УстановитьДоступностьРучныхИзменений(); + КонецПроцедуры &НаСервере @@ -1052,4 +1054,13 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьДоступностьРучныхИзменений() + + Если Не ПравоДоступа("Изменение", Метаданные.Справочники.Календари) Тогда + Элементы.ГрафикРаботы.ТолькоПросмотр = Истина; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl b/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl index 035d59eee..b2d9209ea 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl +++ b/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl index 1bed9ef61..2a8b91a62 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl @@ -879,7 +879,7 @@ | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления | ПО Свойства.Ссылка = СвойстваПредставления.Ссылка | И СвойстваПредставления.КодЯзыка = &КодЯзыка - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.[ИмяТаблицы] КАК СоставНабора + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СоставНабора | ПО Свойства.Ссылка = СоставНабора.Свойство | |ГДЕ @@ -892,8 +892,6 @@ |ВЫБРАТЬ | ""ВерсияДанных"" КАК ВерсияДанных"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяТаблицы]", - ?(ЭтоНаборыДополнительныхСведений, "ДополнительныеСведения", "ДополнительныеРеквизиты")); Запрос.УстановитьПараметр("ЭтоДополнительноеСведение", (ЭтоНаборыДополнительныхСведений = 1)); КонецЕсли; diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl index 2fbb5d949..1b5f0d2af 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; @@ -293,16 +294,16 @@ // Только для внутреннего использования. // // Возвращаемое значение: -// Структура - со свойствами: -// * Имя - Строка - -// * ЭтоГруппа - Булево - -// * Используется - Булево - -// * Ссылка - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - -// * Родитель - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - -// * ДочерниеНаборы - Соответствие - со свойствами: -// ** Ключ - Строка - +// Структура: +// * Имя - Строка +// * ЭтоГруппа - Булево +// * Используется - Булево +// * Ссылка - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений +// * Родитель - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений +// * ДочерниеНаборы - Соответствие: +// ** Ключ - Строка // ** Значение - см. СвойстваНабора -// * Наименование - Строка - +// * Наименование - Строка // Функция СвойстваНабора(НаборыСвойств, Набор, Родитель = Неопределено, Наименования = Неопределено) Экспорт diff --git a/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl b/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl index 4bea79a82..7fb0b0a9c 100644 --- a/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl index 1b67f5ff0..9ff1a843b 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -167,8 +167,6 @@ РаботаСФайламиСлужебныйВызовСервера.СохранитьРабочийКаталогПапки(Объект.Ссылка, РабочийКаталог); КонецЕсли; - ОбновитьОтображениеДанных(); - КонецПроцедуры #КонецОбласти @@ -240,7 +238,7 @@ Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; - ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите каталог'"); + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите папку'"); Если ДиалогОткрытияФайла.Выбрать() Тогда ИмяКаталога = ДиалогОткрытияФайла.Каталог; @@ -256,7 +254,7 @@ // Нет прав на создание каталога, или такой путь отсутствует. ТекстОшибки = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный путь или отсутствуют права на запись в каталог ""%1""'"), ИмяКаталога); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный путь или отсутствуют права на запись в папку ""%1""'"), ИмяКаталога); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , "РабочийКаталог"); Возврат; @@ -267,8 +265,6 @@ КонецЕсли; - ОбновитьОтображениеДанных(); - КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl index 7a46c63ee..1cd9b7f0c 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form index bf26be6a9..27d5dddd9 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form @@ -1,5 +1,54 @@ + + Владелец + 22 + true + true + + true + + + Владелец + + + OnChange + ВладелецПриИзменении + + + ВладелецРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ВладелецКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + + Clearing + ВладелецОчистка + + 27 + true + true + true + true + true + Normal + + ГруппаПользовательскихНастроек 11 @@ -291,6 +340,23 @@ true + + Владелец + + <key>ru</key> + <value>Учетная запись</value> + + 2 + + CatalogRef.УчетныеЗаписиЭлектроннойПочты + + + true + + + true + + diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl index e0a4c5db8..fb8bffac9 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl @@ -11,6 +11,58 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ОбработатьПереданныеПараметры(); + + УстановитьПредопределенныеОтборы(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ВладелецПриИзменении(Элемент) + + ПриИзмененииВладельцаНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВладелецОчистка(Элемент, СтандартнаяОбработка) + + ПриИзмененииВладельцаНаСервере(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОбработатьПереданныеПараметры() + + УчетнаяЗаписьУказана = Ложь; + + Если Параметры.Отбор.Свойство("Владелец") + И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда + + УчетнаяЗаписьУказана = Истина; + Владелец = Параметры.Отбор.Владелец; + Элементы.Владелец.Видимость = Ложь; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(Владелец) Тогда + Владелец = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); + ПриИзмененииВладельцаНаСервере(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьПредопределенныеОтборы() + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ПометкаУдаления", Ложь, @@ -21,4 +73,17 @@ КонецПроцедуры -#КонецОбласти +&НаСервере +Процедура ПриИзмененииВладельцаНаСервере() + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, + "Владелец", + Владелец, + ВидСравненияКомпоновкиДанных.Равно, + НСтр("ru = 'Отбор по владельцу папок'"), + ЗначениеЗаполнено(Владелец), + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl index ae3b87cbc..326ce048a 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form index bed45d784..ca7b8008b 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form @@ -38,6 +38,10 @@ ЗавершитьИЗакрыть 95 + + <key>ru</key> + <value>Подобрать и закрыть</value> + true true @@ -494,210 +498,173 @@ - ГруппаСодержимое - 24 + ГруппаКоманднаяПанельВыбора + 218 + + ЗавершитьИЗакрытьВыбор + 220 + + <key>ru</key> + <value>Подобрать и закрыть</value> + + true + true + + true + + + ЗавершитьИЗакрытьВыборРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗавершитьИЗакрыть + Normal + Auto + true + true + UserCmds + Auto + + + Выбрать + 284 + true + + true + + + ВыбратьРасширеннаяПодсказка + 285 + Label + true + true + + Left + + + UsualButton + Form.Command.Выбрать + Normal + Auto + 3 + true + true + UserCmds + Auto + + + СтрокаПоиска + 222 + true + true + + true + + + СтрокаПоиска + + true + None + Shift+F + + СтрокаПоискаРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + + СтрокаПоискаКонтекстноеМеню + 223 + true + + InputField + Right + Right + Enter + true + Left + true + + + EditTextChange + СтрокаПоискаИзменениеТекстаРедактирования + + + Clearing + СтрокаПоискаОчистка + + 24 + true + true + false + true + true + true + true + true + DontUse + Normal + + ru + Поиск (Shift + F) + + + + + ВставитьИзБуфераОбмена + 282 + true + true + + true + + + ВставитьИзБуфераОбменаРасширеннаяПодсказка + 283 + Label + true + true + + Left + + + UsualButton + Form.Command.ВставитьИзБуфераОбмена + Normal + Auto + 3 + true + true + UserCmds + Auto + - ГруппыИПользователи - 74 + ГруппаРасширенныйВыборПраво + 225 - ГруппаГруппы - 75 - VeryLow - - ГруппыПользователей - 25 - VeryHigh - - <key>ru</key> - <value>Группы пользователей</value> - + ГруппаРасширенныйВыборЕще + 229 + + ИзменитьФорму + 231 true true true - - ГруппыПользователей - - false - None - Delete - - НаименованиеГруппы - 30 - true - true - - true - - - ГруппыПользователей.Description - - - НаименованиеГруппыExtendedTooltip - 112 - Label - true - true - - Left - - - - НаименованиеГруппыКонтекстноеМеню - 31 - true - - LabelField - Enter - true - Left - true - - 10 - true - true - - - - СсылкаГруппы - 153 - true - true - - - ГруппыПользователей.Ref - - - СсылкаГруппыРасширеннаяПодсказка - 155 - Label - true - true - - Left - - - - СсылкаГруппыКонтекстноеМеню - 154 - true - - LabelField - Enter - true - Left - true - - true - true - - - None - - ГруппыПользователейКоманднаяПанель - 27 - Left - true - - - DragCheck - ГруппыПользователейПроверкаПеретаскивания - - - ValueChoice - ГруппыПользователейВыборЗначения - - - BeforeAddRow - ГруппыПользователейПередНачаломДобавления - - - OnActivateRow - ГруппыПользователейПриАктивизацииСтроки - - - Drag - ГруппыПользователейПеретаскивание - - - OnChange - ГруппыПользователейПриИзменении - - - ГруппыПользователейСтрокаПоиска - 165 - - ГруппыПользователейСтрокаПоискаРасширеннаяПодсказка - 167 - Label - true - true - - Left - - - - ГруппыПользователейСтрокаПоискаКонтекстноеМеню - 166 - true - - ГруппыПользователей - - true - - - - ГруппыПользователейСостояниеПросмотра - 168 - - ГруппыПользователейСостояниеПросмотраРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - - ГруппыПользователейСостояниеПросмотраКонтекстноеМеню - 169 - true - - ViewStatusAddition - ГруппыПользователей - - true - - - - ГруппыПользователейУправлениеПоиском - 171 - - ГруппыПользователейУправлениеПоискомРасширеннаяПодсказка - 173 - Label - true - true - - Left - - - - ГруппыПользователейУправлениеПоискомКонтекстноеМеню - 172 - true - - SearchControlAddition - ГруппыПользователей - - true - - - ГруппыПользователейExtendedTooltip - 111 + ИзменитьФормуРасширеннаяПодсказка + 232 Label true true @@ -705,20 +672,361 @@ Left - - ГруппыПользователейКонтекстноеМеню - 26 - - ВывестиСписок - 156 + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 227 + true + true + + true + + + СправкаРасширеннаяПодсказка + 228 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Picture + true + true + UserCmds + Auto + + + РасширенныйВыборВывестиСписок + 233 + true + true + + true + + + РасширенныйВыборВывестиСписокРасширеннаяПодсказка + 234 + Label + true + true + + Left + + + Form.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Расширенный выбор еще</value> + + + ГруппаРасширенныйВыборЕщеРасширеннаяПодсказка + 230 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value>Расширенный выбор право</value> + + Right + + ГруппаРасширенныйВыборПравоРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Right + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Командная панель выбора</value> + + + ГруппаКоманднаяПанельВыбораРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаСодержимое + 24 + + СтраницыВыбораПользователей + 235 + + СтраницаВыборПользователейИГрупп + 237 + + ГруппыИПользователи + 74 + + ГруппаГруппы + 75 + VeryLow + + ГруппыПользователей + 25 + VeryHigh + + <key>ru</key> + <value>Группы пользователей</value> + true true true + + ГруппыПользователей + + false + None + Delete + + НаименованиеГруппы + 30 + true + true + + true + + + ГруппыПользователей.Description + + + НаименованиеГруппыExtendedTooltip + 112 + Label + true + true + + Left + + + + НаименованиеГруппыКонтекстноеМеню + 31 + true + + LabelField + Enter + true + Left + true + + 10 + true + true + + + + СсылкаГруппы + 153 + true + true + + + ГруппыПользователей.Ref + + + СсылкаГруппыРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + СсылкаГруппыКонтекстноеМеню + 154 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + ГруппыПользователейКоманднаяПанель + 27 + Left + true + + + DragCheck + ГруппыПользователейПроверкаПеретаскивания + + + ValueChoice + ГруппыПользователейВыборЗначения + + + BeforeAddRow + ГруппыПользователейПередНачаломДобавления + + + OnActivateRow + ГруппыПользователейПриАктивизацииСтроки + + + Drag + ГруппыПользователейПеретаскивание + + + OnChange + ГруппыПользователейПриИзменении + + + ГруппыПользователейСтрокаПоиска + 165 + + ГруппыПользователейСтрокаПоискаРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + ГруппыПользователейСтрокаПоискаКонтекстноеМеню + 166 + true + + ГруппыПользователей + + true + + + + ГруппыПользователейСостояниеПросмотра + 168 + + ГруппыПользователейСостояниеПросмотраРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + ГруппыПользователейСостояниеПросмотраКонтекстноеМеню + 169 + true + + ViewStatusAddition + ГруппыПользователей + + true + + + + ГруппыПользователейУправлениеПоиском + 171 + + ГруппыПользователейУправлениеПоискомРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + + ГруппыПользователейУправлениеПоискомКонтекстноеМеню + 172 + true + + SearchControlAddition + ГруппыПользователей + + true + + - ВывестиСписокРасширеннаяПодсказка - 157 + ГруппыПользователейExtendedTooltip + 111 Label true true @@ -726,72 +1034,209 @@ Left - Form.Item.ГруппыПользователей.StandardCommand.OutputList - Normal - Auto + + ГруппыПользователейКонтекстноеМеню + 26 + + ВывестиСписок + 156 + true + true + + true + + + ВывестиСписокРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + Form.Item.ГруппыПользователей.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + + Tree + true + true true + 10 true - UserCmds - Auto + true + true + MultiRow + Row + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + ExpandTopLevel + true + true + true + + ГруппыПользователей.НомерКартинки + + + CommonPicture.СостоянияПользователей + + SelectionPresentationAndChoice + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + + + + ГруппаВыбратьГруппу + 85 + + ВыбратьГруппу + 89 + true + true + + true + + + ВыбратьГруппуExtendedTooltip + 115 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбратьГруппу + Normal + Auto + 5 + true + true + UserCmds + Auto + + + ОтменитьВыборПользователяИлиГруппы + 90 + true + true + + true + + + ОтменитьВыборПользователяИлиГруппыExtendedTooltip + 116 + Label + true + true + + Left + + + UsualButton + Form.Command.ОтменитьВыборПользователяИлиГруппы + Normal + Auto + 5 + true + true + UserCmds + Auto + + + ОчиститьСписокВыбранныхПользователейИГрупп + 91 + true + true + + true + + + ОчиститьСписокВыбранныхПользователейИГруппExtendedTooltip + 117 + Label + true + true + + Left + + + UsualButton + Form.Command.ОчиститьСписокВыбранныхПользователейИГрупп + Normal + Auto + 5 + true + true + UserCmds + Auto + + true + + true + + + <key>ru</key> + <value>Выбрать группу</value> + + true + + ГруппаВыбратьГруппуExtendedTooltip + 113 + Label + true + true + + Left + + + UsualGroup + + Vertical + Center + Auto + true + true + Auto + Auto + - true - - Tree - true - true - true - 10 - true - true - true - MultiRow - Row - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - Auto - Auto - true - true - true - - ГруппыПользователей.НомерКартинки - - - CommonPicture.СостоянияПользователей - - SelectionPresentationAndChoice - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - - - - ГруппаВыбратьГруппу - 85 - - ВыбратьГруппу - 89 true true true + + <key>ru</key> + <value>Группы пользователей</value> + - ВыбратьГруппуExtendedTooltip - 115 + ГруппаГруппыExtendedTooltip + 110 Label true true @@ -799,27 +1244,576 @@ Left - UsualButton - Form.Command.ВыбратьГруппу - Normal - Auto - 5 - true - true - UserCmds - Auto + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + - - ОтменитьВыборПользователяИлиГруппы - 90 + + ГруппаПользователи + 76 + VeryHigh + + ПользователиСписок + 48 + + <key>ru</key> + <value>Пользователи список</value> + + true + true + + true + + + ПользователиСписок + + false + None + Delete + + Наименование + 51 + true + true + + true + + + ПользователиСписок.Description + + + НаименованиеExtendedTooltip + 121 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 52 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Ссылка + 134 + true + true + + + ПользователиСписок.Ref + + + СсылкаРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 135 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + ПользователиСписокКоманднаяПанель + 50 + Left + true + + + DragCheck + ПользователиСписокПроверкаПеретаскивания + + + ValueChoice + ПользователиСписокВыборЗначения + + + BeforeAddRow + ПользователиСписокПередНачаломДобавления + + + OnActivateRow + ПользователиСписокПриАктивизацииСтроки + + + BeforeRowChange + ПользователиСписокПередНачаломИзменения + + + OnChange + ПользователиСписокПриИзменении + + + ПользователиСписокСтрокаПоиска + 174 + + ПользователиСписокСтрокаПоискаРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + ПользователиСписокСтрокаПоискаКонтекстноеМеню + 175 + true + + ПользователиСписок + + true + + + + ПользователиСписокСостояниеПросмотра + 177 + + ПользователиСписокСостояниеПросмотраРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + ПользователиСписокСостояниеПросмотраКонтекстноеМеню + 178 + true + + ViewStatusAddition + ПользователиСписок + + true + + + + ПользователиСписокУправлениеПоиском + 180 + + ПользователиСписокУправлениеПоискомРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + + ПользователиСписокУправлениеПоискомКонтекстноеМеню + 181 + true + + SearchControlAddition + ПользователиСписок + + true + + + + ПользователиСписокExtendedTooltip + 120 + Label + true + true + + Left + + + + ПользователиСписокКонтекстноеМеню + 49 + + ПользователиСписокКонтекстноеМенюСоздать + 204 + true + true + + true + + + ПользователиСписокКонтекстноеМенюСоздатьРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + Form.Item.ПользователиСписок.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиСписокКонтекстноеМенюСкопировать + 206 + true + true + + true + + + ПользователиСписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + Form.Item.ПользователиСписок.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиСписокКонтекстноеМенюИзменить + 208 + true + true + + true + + + ПользователиСписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + Form.Item.ПользователиСписок.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиСписокКонтекстноеМенюУстановитьПароль + 200 + true + true + + true + + + ПользователиСписокКонтекстноеМенюУстановитьПарольРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + Form.Command.УстановитьПароль + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиСписокКонтекстноеМенюСтандартныеКоманды + 202 + true + true + + true + + + <key>ru</key> + <value>Пользователи список контекстное меню стандартные команды</value> + + + ПользователиСписокКонтекстноеМенюСтандартныеКомандыРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + + Item.ПользователиСписок + + + + ПользователиСписокКонтекстноеМенюНазначитьГруппы + 73 + true + true + + true + + + ПользователиСписокКонтекстноеМенюНазначитьГруппыExtendedTooltip + 119 + Label + true + true + + Left + + + Form.Command.НазначитьГруппы + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиСписокКонтекстноеМенюИзменитьВыделенные + 194 + true + true + + true + + + ПользователиСписокКонтекстноеМенюИзменитьВыделенныеРасширеннаяПодсказка + 195 + Label + true + true + + Left + + + Form.Command.ИзменитьВыделенные + Normal + Auto + true + true + UserCmds + Auto + + + true + true + true + 10 + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + DontUse + Auto + true + true + true + + ПользователиСписок.НомерКартинки + + + CommonPicture.СостоянияПользователей + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + + + + ГруппаВыбратьПользователя + 86 + + ВыбратьПользователяКоманда + 94 + true + true + + true + + + ВыбратьПользователяКомандаExtendedTooltip + 124 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбратьПользователяКоманда + Normal + Auto + 5 + true + true + UserCmds + Auto + + + ОтменитьВыборПользователя + 96 + true + + true + + + ОтменитьВыборПользователяExtendedTooltip + 125 + Label + true + true + + Left + + + UsualButton + Form.Command.ОтменитьВыборПользователяИлиГруппы + Normal + Auto + 5 + true + true + UserCmds + Auto + + + ОчиститьСписокВыбранных + 97 + true + + true + + + ОчиститьСписокВыбранныхExtendedTooltip + 126 + Label + true + true + + Left + + + UsualButton + Form.Command.ОчиститьСписокВыбранныхПользователейИГрупп + Normal + Auto + 5 + true + true + UserCmds + Auto + + true + + true + + + <key>ru</key> + <value>Выбрать пользователя</value> + + true + + ГруппаВыбратьПользователяExtendedTooltip + 122 + Label + true + true + + Left + + + UsualGroup + + Vertical + Center + Auto + true + true + Auto + Auto + + true true true + + <key>ru</key> + <value>Пользователи</value> + - ОтменитьВыборПользователяИлиГруппыExtendedTooltip - 116 + ГруппаПользователиExtendedTooltip + 118 Label true true @@ -827,56 +1821,28 @@ Left - UsualButton - Form.Command.ОтменитьВыборПользователяИлиГруппы - Normal - Auto - 5 - true - true - UserCmds - Auto - - - ОчиститьСписокВыбранныхПользователейИГрупп - 91 - true - true - - true - - - ОчиститьСписокВыбранныхПользователейИГруппExtendedTooltip - 117 - Label - true - true - - Left - - - UsualButton - Form.Command.ОчиститьСписокВыбранныхПользователейИГрупп - Normal - Auto - 5 - true - true - UserCmds - Auto + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + true true true <key>ru</key> - <value>Выбрать группу</value> + <value>Группы и пользователи</value> - true - ГруппаВыбратьГруппуExtendedTooltip - 113 + ГруппыИПользователиРасширеннаяПодсказка + 109 Label true true @@ -886,11 +1852,11 @@ UsualGroup - Vertical - Center + HorizontalIfPossible Auto true true + LeftNarrowest Auto Auto @@ -902,11 +1868,11 @@ <key>ru</key> - <value>Группы пользователей</value> + <value>Страница выбор пользователей и групп</value> - ГруппаГруппыExtendedTooltip - 110 + СтраницаВыборПользователейИГруппРасширеннаяПодсказка + 238 Label true true @@ -914,26 +1880,21 @@ Left - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto + Page + + Vertical + false - ГруппаПользователи - 76 - VeryHigh + СтраницаПоиск + 239 - ПользователиСписок - 48 + ПользователиСписокПоиск + 241 <key>ru</key> - <value>Пользователи список</value> + <value>Пользователи</value> true true @@ -944,11 +1905,11 @@ ПользователиСписок false - None + Top Delete - Наименование - 51 + ПользователиСписокПоискНаименование + 254 true true @@ -958,8 +1919,8 @@ ПользователиСписок.Description - НаименованиеExtendedTooltip - 121 + ПользователиСписокПоискНаименованиеРасширеннаяПодсказка + 256 Label true true @@ -968,8 +1929,8 @@ - НаименованиеКонтекстноеМеню - 52 + ПользователиСписокПоискНаименованиеКонтекстноеМеню + 255 true LabelField @@ -983,8 +1944,8 @@ - Ссылка - 134 + ПользователиСписокПоискСсылка + 257 true true @@ -992,8 +1953,8 @@ ПользователиСписок.Ref - СсылкаРасширеннаяПодсказка - 136 + ПользователиСписокПоискСсылкаРасширеннаяПодсказка + 259 Label true true @@ -1002,8 +1963,8 @@ - СсылкаКонтекстноеМеню - 135 + ПользователиСписокПоискСсылкаКонтекстноеМеню + 258 true LabelField @@ -1018,8 +1979,8 @@ None - ПользователиСписокКоманднаяПанель - 50 + ПользователиСписокПоискКоманднаяПанель + 243 Left true @@ -1037,7 +1998,7 @@ OnActivateRow - ПользователиСписокПриАктивизацииСтроки + ПользователиСписокПоискПриАктивизацииСтроки BeforeRowChange @@ -1048,11 +2009,11 @@ ПользователиСписокПриИзменении - ПользователиСписокСтрокаПоиска - 174 + ПользователиСписокПоискСтрокаПоиска + 245 - ПользователиСписокСтрокаПоискаРасширеннаяПодсказка - 176 + ПользователиСписокПоискСтрокаПоискаРасширеннаяПодсказка + 247 Label true true @@ -1061,21 +2022,21 @@ - ПользователиСписокСтрокаПоискаКонтекстноеМеню - 175 + ПользователиСписокПоискСтрокаПоискаКонтекстноеМеню + 246 true - ПользователиСписок + ПользователиСписокПоиск true - ПользователиСписокСостояниеПросмотра - 177 + ПользователиСписокПоискСостояниеПросмотра + 248 - ПользователиСписокСостояниеПросмотраРасширеннаяПодсказка - 179 + ПользователиСписокПоискСостояниеПросмотраРасширеннаяПодсказка + 250 Label true true @@ -1084,22 +2045,22 @@ - ПользователиСписокСостояниеПросмотраКонтекстноеМеню - 178 + ПользователиСписокПоискСостояниеПросмотраКонтекстноеМеню + 249 true ViewStatusAddition - ПользователиСписок + ПользователиСписокПоиск true - ПользователиСписокУправлениеПоиском - 180 + ПользователиСписокПоискУправлениеПоиском + 251 - ПользователиСписокУправлениеПоискомРасширеннаяПодсказка - 182 + ПользователиСписокПоискУправлениеПоискомРасширеннаяПодсказка + 253 Label true true @@ -1108,19 +2069,19 @@ - ПользователиСписокУправлениеПоискомКонтекстноеМеню - 181 + ПользователиСписокПоискУправлениеПоискомКонтекстноеМеню + 252 true SearchControlAddition - ПользователиСписок + ПользователиСписокПоиск true - ПользователиСписокExtendedTooltip - 120 + ПользователиСписокПоискРасширеннаяПодсказка + 244 Label true true @@ -1129,19 +2090,19 @@ - ПользователиСписокКонтекстноеМеню - 49 + ПользователиСписокПоискКонтекстноеМеню + 242 - ПользователиСписокКонтекстноеМенюСоздать - 204 + ПользователиСписокКонтекстноеМенюСоздать1 + 260 true true true - ПользователиСписокКонтекстноеМенюСоздатьРасширеннаяПодсказка - 205 + ПользователиСписокКонтекстноеМенюСоздать1РасширеннаяПодсказка + 261 Label true true @@ -1158,16 +2119,16 @@ Auto - ПользователиСписокКонтекстноеМенюСкопировать - 206 + ПользователиСписокКонтекстноеМенюСкопировать1 + 262 true true true - ПользователиСписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка - 207 + ПользователиСписокКонтекстноеМенюСкопировать1РасширеннаяПодсказка + 263 Label true true @@ -1184,16 +2145,16 @@ Auto - ПользователиСписокКонтекстноеМенюИзменить - 208 + ПользователиСписокКонтекстноеМенюИзменить1 + 264 true true true - ПользователиСписокКонтекстноеМенюИзменитьРасширеннаяПодсказка - 209 + ПользователиСписокКонтекстноеМенюИзменить1РасширеннаяПодсказка + 265 Label true true @@ -1210,16 +2171,16 @@ Auto - ПользователиСписокКонтекстноеМенюУстановитьПароль - 200 + ПользователиСписокКонтекстноеМенюУстановитьПароль1 + 266 true true true - ПользователиСписокКонтекстноеМенюУстановитьПарольРасширеннаяПодсказка - 201 + ПользователиСписокКонтекстноеМенюУстановитьПароль1РасширеннаяПодсказка + 267 Label true true @@ -1236,8 +2197,8 @@ Auto - ПользователиСписокКонтекстноеМенюСтандартныеКоманды - 202 + ПользователиСписокКонтекстноеМенюСтандартныеКоманды1 + 268 true true @@ -1248,8 +2209,8 @@ Пользователи список контекстное меню стандартные команды - ПользователиСписокКонтекстноеМенюСтандартныеКомандыРасширеннаяПодсказка - 203 + ПользователиСписокКонтекстноеМенюСтандартныеКоманды1РасширеннаяПодсказка + 269 Label true true @@ -1258,20 +2219,20 @@ - Item.ПользователиСписок + Item.ПользователиСписокПоиск - ПользователиСписокКонтекстноеМенюНазначитьГруппы - 73 + ПользователиСписокКонтекстноеМенюНазначитьГруппы1 + 270 true true true - ПользователиСписокКонтекстноеМенюНазначитьГруппыExtendedTooltip - 119 + ПользователиСписокКонтекстноеМенюНазначитьГруппы1РасширеннаяПодсказка + 271 Label true true @@ -1288,16 +2249,16 @@ Auto - ПользователиСписокКонтекстноеМенюИзменитьВыделенные - 194 + ПользователиСписокКонтекстноеМенюИзменитьВыделенные1 + 272 true true true - ПользователиСписокКонтекстноеМенюИзменитьВыделенныеРасширеннаяПодсказка - 195 + ПользователиСписокКонтекстноеМенюИзменитьВыделенные1РасширеннаяПодсказка + 273 Label true true @@ -1321,6 +2282,7 @@ true true true + true MultiRow 1 1 @@ -1356,19 +2318,19 @@ - ГруппаВыбратьПользователя - 86 + ГруппаКнопкиВыбораПоиска + 286 - ВыбратьПользователяКоманда - 94 + ВыбратьПользователяКомандаПоиск + 295 true true true - ВыбратьПользователяКомандаExtendedTooltip - 124 + ВыбратьПользователяКомандаПоискРасширеннаяПодсказка + 296 Label true true @@ -1387,42 +2349,16 @@ Auto - ОтменитьВыборПользователя - 96 + ОчиститьСписокВыбранныхПоиск + 288 + true true true - ОтменитьВыборПользователяExtendedTooltip - 125 - Label - true - true - - Left - - - UsualButton - Form.Command.ОтменитьВыборПользователяИлиГруппы - Normal - Auto - 5 - true - true - UserCmds - Auto - - - ОчиститьСписокВыбранных - 97 - true - - true - - - ОчиститьСписокВыбранныхExtendedTooltip - 126 + ОчиститьСписокВыбранныхПоискРасширеннаяПодсказка + 289 Label true true @@ -1440,18 +2376,47 @@ UserCmds Auto + + ОтменитьВыборПользователяПоиск + 290 + true + true + + true + + + ОтменитьВыборПользователяПоискРасширеннаяПодсказка + 291 + Label + true + true + + Left + + + UsualButton + Form.Command.ОтменитьВыборПользователяИлиГруппы + Normal + Auto + 5 + true + true + UserCmds + Auto + + true true true <key>ru</key> - <value>Выбрать пользователя</value> + <value>Кнопки выбора поиска</value> - true + Center - ГруппаВыбратьПользователяExtendedTooltip - 122 + ГруппаКнопкиВыбораПоискаРасширеннаяПодсказка + 287 Label true true @@ -1462,7 +2427,6 @@ UsualGroup Vertical - Center Auto true true @@ -1477,11 +2441,11 @@ <key>ru</key> - <value>Пользователи</value> + <value>Страница поиск</value> - ГруппаПользователиExtendedTooltip - 118 + СтраницаПоискРасширеннаяПодсказка + 240 Label true true @@ -1489,14 +2453,11 @@ Left - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto + Page + + AlwaysHorizontal + auto + false true @@ -1506,11 +2467,11 @@ <key>ru</key> - <value>Группы и пользователи</value> + <value>Страницы выбора пользователей</value> - ГруппыИПользователиExtendedTooltip - 109 + СтраницыВыбораПользователейРасширеннаяПодсказка + 236 Label true true @@ -1518,14 +2479,8 @@ Left - UsualGroup - - HorizontalIfPossible - Auto - true - true - LeftNarrowest - Auto + Pages + Auto @@ -1895,6 +2850,134 @@ Auto + + ГруппаКонтактнаяИнформация + 274 + + Фотография + 276 + true + true + + true + + + Фотография + + None + + ФотографияРасширеннаяПодсказка + 278 + Label + true + true + + Left + + + + ФотографияКонтекстноеМеню + 277 + true + + PictureField + Enter + true + Left + true + + 7 + 4 + true + 6 + Proportionally + + ru + Нет фото + + + + 1 + + AsFileRef + + + + ПредставлениеКонтактнойИнформации + 292 + true + true + + true + + + ПредставлениеКонтактнойИнформации + + None + + ПредставлениеКонтактнойИнформацииРасширеннаяПодсказка + 294 + Label + true + true + + Left + + + + ПредставлениеКонтактнойИнформацииКонтекстноеМеню + 293 + true + + InputField + true + Center + Enter + true + Left + true + + true + 6 + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Контактная информация</value> + + + ГруппаКонтактнаяИнформацияРасширеннаяПодсказка + 275 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Collapsible + Button + true + true + auto + Auto + Auto + + Комментарии 137 @@ -2431,6 +3514,69 @@ true + + СтрокаПоиска + + <key>ru</key> + <value>Строка поиска</value> + + 6 + + String + + + + true + + + true + + + + Фотография + + <key>ru</key> + <value>Фотография</value> + + 9 + + String + + + + true + + + true + + + + ПредставлениеКонтактнойИнформации + 10 + + String + + + + true + + + true + + + + ВыборУчастниковОбсуждения + 12 + + Boolean + + + true + + + true + + СоздатьГруппуПользователей @@ -2658,6 +3804,58 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ВставитьИзБуфераОбмена</name> + <title> + <key>ru</key> + <value>Вставить из буфера обмена...</value> + + 11 + + ru + Вставить из буфера обмена + + + true + + + CommonPicture.ВставитьИзБуфераОбмена + + + + ВставитьИзБуфераОбмена + + + Picture + DontUse + Auto + + + Выбрать + + <key>ru</key> + <value>Выбрать</value> + + 12 + + ru + Выбрать + + + true + + + StdPicture.ChooseValue + + + + Выбрать + + + Picture + Auto + Auto + ВыборГруппПользователей @@ -2688,6 +3886,12 @@ СкрываемыеПользователи + + ВыборУчастниковОбсуждения + + Boolean + + diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index 34ea9c463..4410fa8bc 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -9,17 +9,7 @@ //////////////////////////////////////////////////////////////////////////////// // ИСПОЛЬЗОВАНИЕ ФОРМЫ // // -// Дополнительные параметры открытия формы подбора: -// -// РасширенныйПодбор - Булево - если Истина - открывается расширенная форма -// подбора пользователей. Используется вместе с параметром. -// ПараметрыРасширеннойФормыПодбора. -// ПараметрыРасширеннойФормыПодбора - Строка - ссылка на структуру, -// содержащую параметры расширенной формы подбора во -// временном хранилище. -// Параметры структуры: -// ЗаголовокФормыПодбора - Строка - заголовок формы подбора. -// ВыбранныеПользователи - Массив - массив уже выбранных пользователей. +// Описание параметров формы см. ПользователиПереопределяемый.ПриОпределенииФормыПодбораПользователей // #Область ОписаниеПеременных @@ -27,6 +17,12 @@ &НаКлиенте Перем ПоследнийЭлемент; +&НаКлиенте +Перем СтрокаПоискаТекст; + +&НаКлиенте +Перем ТекущийПользователь; + #КонецОбласти #Область ОбработчикиСобытийФормы @@ -34,8 +30,16 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + // Начальное значение настройки до загрузки данных из настроек. ВыбиратьИерархически = Истина; + Элементы.ГруппаКоманднаяПанельВыбора.Видимость = Ложь; ЗаполнитьХранимыеПараметры(); @@ -125,6 +129,11 @@ Если ХранимыеПараметры.РасширенныйПодбор Тогда СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "РасширенныйПодбор"); ИзменитьПараметрыРасширеннойФормыПодбора(); + Элементы.КоманднаяПанель.Видимость = Ложь; + Элементы.ЗавершитьИЗакрытьВыбор.КнопкаПоУмолчанию = Истина; + Элементы.ГруппаКоманднаяПанельВыбора.Видимость = Истина; + Элементы.ПользователиСписок.ПоискПриВводе = ПоискВТаблицеПриВводе.НеИспользовать; + Элементы.ГруппыПользователей.ПоискПриВводе = ПоискВТаблицеПриВводе.НеИспользовать; КонецЕсли; Если ХранимыеПараметры.ВыборГруппПользователей Тогда @@ -175,6 +184,16 @@ Элементы.ЗавершитьИЗакрыть.Отображение = ОтображениеКнопки.Картинка; КонецЕсли; + ВыборУчастниковОбсуждения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВыборУчастниковОбсуждения", Ложь); + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла") Тогда + Элементы.ВставитьИзБуфераОбмена.Видимость = Ложь; + КонецЕсли; + + Фотография = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ЗаполнитьКонтактнуюИнформацию(ЭтотОбъект, Неопределено); + УстановитьЗаголовокВыбранныхПользователейИГрупп(); + КонецПроцедуры &НаКлиенте @@ -243,6 +262,50 @@ ПереключитьОтображениеНедействительныхПользователей(ПоказыватьНедействительныхПользователей); КонецПроцедуры +&НаКлиенте +Процедура СтрокаПоискаИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) + СтрокаПоискаТекст = Текст; + ПодключитьОбработчикОжидания("СтрокаПоискаОчисткаЗавершение", 0.1, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СтрокаПоискаОчисткаЗавершение() + + Если НЕ ЗначениеЗаполнено(СтрокаПоискаТекст) Тогда + Элементы.СтраницыВыбораПользователей.ТекущаяСтраница = Элементы.СтраницаВыборПользователейИГрупп; + Иначе + Элементы.СтраницыВыбораПользователей.ТекущаяСтраница = Элементы.СтраницаПоиск; + КонецЕсли; + + + Если ХранимыеПараметры.ИспользоватьГруппы Тогда + ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, + "ВсеПользователи", Истина); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ПользователиСписок, + "Наименование", + СтрокаПоискаТекст, + ВидСравненияКомпоновкиДанных.Содержит,, + ЗначениеЗаполнено(СтрокаПоискаТекст), + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); + +КонецПроцедуры + +&НаКлиенте +Процедура СтрокаПоискаОчистка(Элемент, СтандартнаяОбработка) + СтрокаПоискаТекст = ""; + Элементы.СтраницыВыбораПользователей.ТекущаяСтраница = Элементы.СтраницаВыборПользователейИГрупп; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ПользователиСписок, + "Наименование", + СтрокаПоиска, + ВидСравненияКомпоновкиДанных.Содержит,, + Ложь, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); + + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтотОбъект); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыГруппыПользователей @@ -438,6 +501,20 @@ Элементы.ФормаУстановитьПароль.Доступность = ВозможноСменитьПароль; Элементы.ПользователиСписокКонтекстноеМенюУстановитьПароль.Доступность = ВозможноСменитьПароль; + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если НЕ ХранимыеПараметры.РасширенныйПодбор Тогда + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + КонецЕсли; + + КонецЕсли; + + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + + ОбновитьКонтактнуюИнформациюПользователя(Элемент); + КонецПроцедуры &НаКлиенте @@ -509,6 +586,24 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыПользователиСписокПоиск + +&НаКлиенте +Процедура ПользователиСписокПоискПриАктивизацииСтроки(Элемент) + + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + + ОбновитьКонтактнуюИнформациюПользователя(Элемент); + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -555,7 +650,12 @@ &НаКлиенте Процедура ВыбратьПользователяКоманда(Команда) - МассивПользователей = Элементы.ПользователиСписок.ВыделенныеСтроки; + Если Элементы.СтраницыВыбораПользователей.ТекущаяСтраница = Элементы.СтраницаПоиск Тогда + МассивПользователей = Элементы.ПользователиСписокПоиск.ВыделенныеСтроки; + Иначе + МассивПользователей = Элементы.ПользователиСписок.ВыделенныеСтроки; + КонецЕсли; + ПолучитьКартинкиИЗаполнитьСписокВыбранных(МассивПользователей); КонецПроцедуры @@ -606,10 +706,128 @@ КонецПроцедуры +&НаКлиенте +Процедура ВставитьИзБуфераОбмена(Команда) + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("ОписаниеТипов", Новый ОписаниеТипов("СправочникСсылка.Пользователи")); + ПараметрыПоиска.Вставить("ПараметрыВыбора", Новый СписокЗначений); + ПараметрыПоиска.Вставить("ПредставлениеПоля", НСтр("ru='Выбор пользователей'")); + ПараметрыПоиска.Вставить("Сценарий", "ПоискСсылок"); + + ПараметрыВыполнения = Новый Структура; + Обработчик = Новый ОписаниеОповещения("ВставитьИзБуфераОбменаЗавершение", ЭтотОбъект, ПараметрыВыполнения); + + МодульЗагрузкаДанныхИзФайлаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗагрузкаДанныхИзФайлаКлиент"); + МодульЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗаполненияСсылок(ПараметрыПоиска, Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ВставитьИзБуфераОбменаЗавершение(НайденныеОбъекты, ПараметрыВыполнения) Экспорт + + Если НайденныеОбъекты = Неопределено Тогда + Возврат; + КонецЕсли; + + ВставитьИзБуфераОбменаЗавершениеСервер(НайденныеОбъекты); + +КонецПроцедуры + +&НаСервере +Процедура ВставитьИзБуфераОбменаЗавершениеСервер(НайденныеОбъекты) + + Для Каждого Значение Из НайденныеОбъекты Цикл + ВыбранныеПользователиИГруппы.Добавить().Пользователь = Значение; + КонецЦикла; + Пользователи.ЗаполнитьНомераКартинокПользователей(ВыбранныеПользователиИГруппы, "Пользователь", "НомерКартинки"); + +КонецПроцедуры + +&НаКлиенте +Процедура Выбрать(Команда) + Если Элементы.СтраницыВыбораПользователей.ТекущаяСтраница = Элементы.СтраницаВыборПользователейИГрупп Тогда + ПользователиСписокВыборЗначения(Элементы.ПользователиСписок, + ВыбранныеЗначенияСписка(Элементы.ПользователиСписок), + Ложь); + Иначе + ПользователиСписокВыборЗначения(Элементы.ПользователиСписокПоиск, + ВыбранныеЗначенияСписка(Элементы.ПользователиСписокПоиск), + Ложь); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Функция ВыбранныеЗначенияСписка(Элемент) + Результат = Новый Массив; + + ВыбранныеСтроки = ОбщегоНазначенияКлиентСервер.ЗначениеСвойстваЭлементаФормы(Элементы, Элемент.Имя, "ВыделенныеСтроки"); + Если ВыбранныеСтроки <> Неопределено Тогда + + Для каждого ИдентификаторСтроки Из ВыбранныеСтроки Цикл + Результат.Добавить(Элемент.ДанныеСтроки(ИдентификаторСтроки).Ссылка); + КонецЦикла; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ОбновитьКонтактнуюИнформациюПользователя(ЭлементСписок) + + ТекущиеДанные = ЭлементСписок.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + ЗаполнитьКонтактнуюИнформацию(ЭтотОбъект, Неопределено); + Возврат; + КонецЕсли; + + ТекущийПользователь = ТекущиеДанные.Ссылка; + ПодключитьОбработчикОжидания("ОбновитьКонтактнуюИнформациюПользователяЗавершение", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьКонтактнуюИнформациюПользователяЗавершение() + ЗаполнитьКонтактнуюИнформацию(ЭтотОбъект, ТекущийПользователь); +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ЗаполнитьКонтактнуюИнформацию(Форма, ТекущийПользователь) + Если НЕ ЗначениеЗаполнено(ТекущийПользователь) Тогда + Форма.ПредставлениеКонтактнойИнформации = ""; + Возврат; + КонецЕсли; + + КонтактнаяИнформацияПользователя = ?(ЗначениеЗаполнено(ТекущийПользователь), + КонтактнаяИнформацияПользователя(ТекущийПользователь, Форма.УникальныйИдентификатор), + Новый Структура); + Форма.Фотография = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(КонтактнаяИнформацияПользователя, "Фотография", ""); + + Шаблон = НСтр("ru='%1 + | + |Телефон: %2 + |Электронная почта: %3'"); + + Подразделение = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(КонтактнаяИнформацияПользователя, "Подразделение", ""); + ПредставлениеПользователя = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(КонтактнаяИнформацияПользователя, "Наименование", "") + + ?(ЗначениеЗаполнено(Подразделение), Символы.ПС + Подразделение, ""); + + Форма.ПредставлениеКонтактнойИнформации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, + ПредставлениеПользователя, + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(КонтактнаяИнформацияПользователя, "Телефон", ""), + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(КонтактнаяИнформацияПользователя, "АдресЭлектроннойПочты", "")); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция КонтактнаяИнформацияПользователя(Пользователь, УникальныйИдентификатор) + КонтактнаяИнформация = ПользователиСлужебный.ОписаниеПользователя(Пользователь); + КонтактнаяИнформация.Фотография = ПоместитьВоВременноеХранилище(КонтактнаяИнформация.Фотография, УникальныйИдентификатор); + Возврат КонтактнаяИнформация; +КонецФункции + &НаСервере Процедура ЗаполнитьХранимыеПараметры() @@ -712,7 +930,6 @@ Если УдалитьВсех Тогда ВыбранныеПользователиИГруппы.Очистить(); - ОбновитьЗаголовокСпискаВыбранныхПользователейИГрупп(); Возврат; КонецЕсли; @@ -721,8 +938,6 @@ ВыбранныеПользователиИГруппы.Удалить(ВыбранныеПользователиИГруппы.НайтиПоИдентификатору(ЭлементСписка)); КонецЦикла; - ОбновитьЗаголовокСпискаВыбранныхПользователейИГрупп(); - КонецПроцедуры &НаКлиенте @@ -747,11 +962,24 @@ &НаСервере Функция РезультатВыбора() + МассивПользователей = Новый Массив; ВыбранныеПользователиТаблицаЗначений = ВыбранныеПользователиИГруппы.Выгрузить( , "Пользователь"); - МассивПользователей = ВыбранныеПользователиТаблицаЗначений.ВыгрузитьКолонку("Пользователь"); - Возврат МассивПользователей; + Если ВыборУчастниковОбсуждения И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + МодульОбсуждения = ОбщегоНазначения.ОбщийМодуль("Обсуждения"); + ИдентификаторыУчастников = МодульОбсуждения.ПользователиСистемыВзаимодействия(ВыбранныеПользователиТаблицаЗначений.ВыгрузитьКолонку("Пользователь")); + Для каждого ПользовательИдентификатор Из ИдентификаторыУчастников Цикл + + Если ПользовательИдентификатор.Значение <> Неопределено Тогда + МассивПользователей.Добавить(ПользовательИдентификатор.Значение.Идентификатор); + КонецЕсли; + + КонецЦикла; + Иначе + МассивПользователей = ВыбранныеПользователиТаблицаЗначений.ВыгрузитьКолонку("Пользователь"); + КонецЕсли; + Возврат МассивПользователей; КонецФункции &НаСервере @@ -808,30 +1036,15 @@ Элементы.ОчиститьСписокВыбранных.Видимость = Истина; КонецЕсли; - // Добавление количества выбранных пользователей в заголовке выбранных пользователей и групп. - ОбновитьЗаголовокСпискаВыбранныхПользователейИГрупп(); - КонецПроцедуры &НаСервере -Процедура ОбновитьЗаголовокСпискаВыбранныхПользователейИГрупп() +Процедура УстановитьЗаголовокВыбранныхПользователейИГрупп() Если ХранимыеПараметры.ИспользоватьГруппы Тогда - ЗаголовокВыбранныеПользователиИГруппы = НСтр("ru = 'Выбранные пользователи и группы (%1)'"); + Элементы.СписокВыбранныхПользователейИГрупп.Заголовок = НСтр("ru = 'Выбранные пользователи и группы'"); Иначе - ЗаголовокВыбранныеПользователиИГруппы = НСтр("ru = 'Выбранные пользователи (%1)'"); - КонецЕсли; - - КоличествоПользователей = ВыбранныеПользователиИГруппы.Количество(); - Если КоличествоПользователей <> 0 Тогда - Элементы.СписокВыбранныхПользователейИГрупп.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокВыбранныеПользователиИГруппы, КоличествоПользователей); - Иначе - Если ХранимыеПараметры.ИспользоватьГруппы Тогда - Элементы.СписокВыбранныхПользователейИГрупп.Заголовок = НСтр("ru = 'Выбранные пользователи и группы'"); - Иначе - Элементы.СписокВыбранныхПользователейИГрупп.Заголовок = НСтр("ru = 'Выбранные пользователи'"); - КонецЕсли; + Элементы.СписокВыбранныхПользователейИГрупп.Заголовок = НСтр("ru = 'Выбранные пользователи'"); КонецЕсли; КонецПроцедуры @@ -839,6 +1052,9 @@ &НаСервере Процедура ЗаполнитьСписокВыбранныхПользователейИГрупп(ВыбранныеЭлементыИКартинки) + ПользователиСлужебный.ВыбратьПользователейГруппы( + ВыбранныеЭлементыИКартинки, ХранимыеПараметры, Элементы.ПользователиСписок); + Для Каждого СтрокаМассива Из ВыбранныеЭлементыИКартинки Цикл ВыбранныйПользовательИлиГруппа = СтрокаМассива.ВыбранныйЭлемент; @@ -858,7 +1074,6 @@ КонецЦикла; ВыбранныеПользователиИГруппы.Сортировать("Пользователь Возр"); - ОбновитьЗаголовокСпискаВыбранныхПользователейИГрупп(); КонецПроцедуры @@ -957,10 +1172,11 @@ Если ХранимыеПараметры.РасширенныйПодбор Тогда Заголовок = ХранимыеПараметры.ЗаголовокФормыПодбора; - Если ХранимыеПараметры.Свойство("ЗаголовокКнопкиЗавершенияПодбора") Тогда + Если ХранимыеПараметры.Свойство("ЗаголовокКнопкиЗавершенияПодбора") Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ЗавершитьИЗакрыть", "Заголовок", ХранимыеПараметры.ЗаголовокКнопкиЗавершенияПодбора); + "ЗавершитьИЗакрытьВыбор", "Заголовок", ХранимыеПараметры.ЗаголовокКнопкиЗавершенияПодбора); КонецЕсли; + Иначе Заголовок = НСтр("ru = 'Подбор пользователей'"); КонецЕсли; @@ -1000,6 +1216,7 @@ ТекущийЭлемент = Элементы.ПользователиСписок; КонецЕсли; #КонецЕсли + КонецПроцедуры &НаСервере @@ -1023,11 +1240,11 @@ // Обработчик вопроса. // // Параметры: -// Ответ - КодВозвратаДиалога - -// ДополнительныеПараметры - Структура - где: -// * ПараметрыПеретаскивания - ПараметрыПеретаскивания - -// * Строка - Строка - -// * Перемещение - ДействиеПеретаскивания - +// Ответ - КодВозвратаДиалога +// ДополнительныеПараметры - Структура: +// * ПараметрыПеретаскивания - ПараметрыПеретаскивания +// * Строка - Строка +// * Перемещение - ДействиеПеретаскивания // &НаКлиенте Процедура ГруппыПользователейПеретаскиваниеЗавершение(Ответ, ДополнительныеПараметры) Экспорт @@ -1127,4 +1344,30 @@ КонецПроцедуры -#КонецОбласти +// СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.ПользователиСписок); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.ПользователиСписок); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); + МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.ПользователиСписок); +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index 0d848606f..fc40c9204 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -450,27 +450,197 @@ ГруппаШапка 277 + + Фотография + 353 + true + true + + true + + + АдресФотографии + + None + + ФотографияРасширеннаяПодсказка + 355 + Label + true + true + + Left + + + + ФотографияКонтекстноеМеню + 354 + true + + PictureField + Center + Enter + true + Left + true + + + Click + ФотографияНажатие + + 7 + true + 4 + true + Proportionally + true + + ru + Добавить фото + + + + 1 + + AsFileRef + + - ГруппаНаименование - 329 + ГруппаДанныеШапки + 351 + + ГруппаНаименование + 329 + + Наименование + 49 + true + true + + true + + + Объект.Description + + + OnChange + НаименованиеПриИзменении + + + НаименованиеExtendedTooltip + 216 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 50 + true + + InputField + Enter + true + Left + true + + 22 + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Недействителен + 194 + true + true + + true + + + Объект.Недействителен + + Right + Button + + OnChange + НедействителенПриИзменении + + + НедействителенExtendedTooltip + 217 + Label + true + true + + Left + + + + НедействителенКонтекстноеМеню + 195 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Наименование</value> + + + ГруппаНаименованиеРасширеннаяПодсказка + 330 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + - Наименование - 49 + ФизическоеЛицо + 296 true true true - Объект.Description + Объект.ФизическоеЛицо - - OnChange - НаименованиеПриИзменении - - НаименованиеExtendedTooltip - 216 + ФизическоеЛицоРасширеннаяПодсказка + 298 Label true true @@ -479,8 +649,8 @@ - НаименованиеКонтекстноеМеню - 50 + ФизическоеЛицоКонтекстноеМеню + 297 true InputField @@ -489,38 +659,29 @@ Left true - 22 true true + true true true true - - Style.BorderColor - Normal - Недействителен - 194 + Подразделение + 299 true true true - Объект.Недействителен + Объект.Подразделение - Right - Button - - OnChange - НедействителенПриИзменении - - НедействителенExtendedTooltip - 217 + ПодразделениеРасширеннаяПодсказка + 301 Label true true @@ -529,16 +690,24 @@ - НедействителенКонтекстноеМеню - 195 + ПодразделениеКонтекстноеМеню + 300 true - CheckBoxField + InputField Enter true Left true - + + true + true + true + true + true + true + Normal + true true @@ -547,11 +716,11 @@ <key>ru</key> - <value>Наименование</value> + <value>Данные шапки</value> - ГруппаНаименованиеРасширеннаяПодсказка - 330 + ГруппаДанныеШапкиРасширеннаяПодсказка + 352 Label true true @@ -561,7 +730,7 @@ UsualGroup - HorizontalIfPossible + Vertical Auto true true @@ -569,88 +738,6 @@ Auto - - ФизическоеЛицо - 296 - true - true - - true - - - Объект.ФизическоеЛицо - - - ФизическоеЛицоРасширеннаяПодсказка - 298 - Label - true - true - - Left - - - - ФизическоеЛицоКонтекстноеМеню - 297 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - Подразделение - 299 - true - true - - true - - - Объект.Подразделение - - - ПодразделениеРасширеннаяПодсказка - 301 - Label - true - true - - Left - - - - ПодразделениеКонтекстноеМеню - 300 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - true true @@ -672,7 +759,7 @@ UsualGroup - Vertical + AlwaysHorizontal Auto true true @@ -2564,6 +2651,10 @@ OnOpen ПриОткрытии + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + OnCreateAtServer ПриСозданииНаСервере @@ -3315,6 +3406,25 @@ true + + АдресФотографии + + <key>ru</key> + <value>Фотография</value> + + 4 + + String + + + + true + + + true + + true + ПоказатьТолькоВыбранныеРоли diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index cff70f9a5..4804e5697 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -20,6 +20,13 @@ УстановитьУсловноеОформление(); + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначения.РазделениеВключено() Тогда ДоступноИзменениеПользователей = Истина; @@ -196,6 +203,13 @@ МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + КонецПроцедуры &НаКлиенте @@ -239,6 +253,18 @@ КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом + // СтандартныеПодсистемы.ПодключаемыеКоманды + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); + МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + + Фотография = ТекущийОбъект.Фотография.Получить(); + Если Фотография <> Неопределено Тогда + АдресФотографии = ПоместитьВоВременноеХранилище(Фотография, УникальныйИдентификатор); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -350,6 +376,10 @@ КонецЕсли; КонецЕсли; + Если ЭтоАдресВременногоХранилища(АдресФотографии) Тогда + ТекущийОбъект.Фотография = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресФотографии)); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -392,6 +422,11 @@ МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + МодульОбсуждения = ОбщегоНазначения.ОбщийМодуль("Обсуждения"); + МодульОбсуждения.ОбновитьПользователяВСистемеВзаимодействия(ТекущийОбъект); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -460,10 +495,10 @@ Если Строка.ЭтоНесуществующаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Роли[%1].РолиСиноним", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Несуществующая роль ""%1"".'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %2 не найдена в метаданных.'"), Строка.Синоним, "%1")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Несуществующая роль ""%1"" в строке %2.'"), Строка.Синоним, "%1")); КонецЕсли; Если Строка.ЭтоНедоступнаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, @@ -719,6 +754,29 @@ ОткрытьФорму("ОбщаяФорма.НастройкиВходаПользователей", , ЭтотОбъект); КонецПроцедуры +&НаКлиенте +Процедура ФотографияНажатие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОповещениеОЗавершение = Новый ОписаниеОповещения("ФотографияНажатиеЗавершение", ЭтотОбъект); + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + ФайловаяСистемаКлиент.ЗагрузитьФайл(ОповещениеОЗавершение,ПараметрыЗагрузки); +КонецПроцедуры + +&НаКлиенте +Процедура ФотографияНажатиеЗавершение(Результат, ДополнительныеПараметры) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ЭтоАдресВременногоХранилища(АдресФотографии) Тогда + УдалитьИзВременногоХранилища(АдресФотографии); + КонецЕсли; + + АдресФотографии = Результат.Хранение; + Модифицированность = Истина; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Поддержка контактной информации. @@ -728,7 +786,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); + МодульУправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент); УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); @@ -753,8 +811,8 @@ // Подключаемый обработчик очистки. // // Параметры: -// Элемент - ПолеФормы - -// СтандартнаяОбработка - Булево - +// Элемент - ПолеФормы +// СтандартнаяОбработка - Булево // &НаКлиенте Процедура Подключаемый_EMailОчистка(Элемент, СтандартнаяОбработка) @@ -767,7 +825,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.Очистка(ЭтотОбъект, Элемент.Имя); + МодульУправлениеКонтактнойИнформациейКлиент.НачатьОчистку(ЭтотОбъект, Элемент.Имя); КонецПроцедуры @@ -777,7 +835,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); + МодульУправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент); УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); @@ -838,7 +896,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); + МодульУправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент); КонецПроцедуры @@ -847,49 +905,50 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); + МодульУправлениеКонтактнойИнформациейКлиент.НачатьВыбор(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецПроцедуры // Подключаемый обработчик нажатия. // // Параметры: -// Элемент - ДекорацияФормы, РасширениеДекорацииФормыДляНадписи - -// СтандартнаяОбработка - Булево - +// Элемент - ДекорацияФормы +// - РасширениеДекорацииФормыДляНадписи +// СтандартнаяОбработка - Булево // &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка) МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); + МодульУправлениеКонтактнойИнформациейКлиент.НачатьВыбор(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецПроцедуры // Подключаемый обработчик очистки. // // Параметры: -// Элемент - ПолеФормы - -// СтандартнаяОбработка - Булево - +// Элемент - ПолеФормы +// СтандартнаяОбработка - Булево // &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка) МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.Очистка(ЭтотОбъект, Элемент.Имя); + МодульУправлениеКонтактнойИнформациейКлиент.НачатьОчистку(ЭтотОбъект, Элемент.Имя); КонецПроцедуры // Подключаемый обработчик команды. // // Параметры: -// Команда - КомандаФормы - +// Команда - КомандаФормы // &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда) МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда.Имя); + МодульУправлениеКонтактнойИнформациейКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда.Имя); КонецПроцедуры @@ -905,9 +964,9 @@ // Подключаемый обработчик выбора. // // Параметры: -// Элемент - ПолеФормы - -// ВыбранноеЗначение - Строка - -// СтандартнаяОбработка - Булево - +// Элемент - ПолеФормы +// ВыбранноеЗначение - Строка +// СтандартнаяОбработка - Булево // &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -918,6 +977,11 @@ КонецПроцедуры +&НаКлиенте +Процедура Подключаемый_ПродолжитьОбновлениеКонтактнойИнформации(Результат, ДополнительныеПараметры) Экспорт + ОбновитьКонтактнуюИнформацию(Результат); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыРоли @@ -1656,11 +1720,9 @@ // Поддержка контактной информации. &НаСервере -Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат) Экспорт - - МодульУправлениеКонтактнойИнформацией = - ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); +Процедура ОбновитьКонтактнуюИнформацию(Результат) + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); МодульУправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат); КонецПроцедуры @@ -2024,7 +2086,7 @@ КонецЕсли; Элементы.СопоставлениеПояснениеНесоответствия.Заголовок = - НСтр("ru = 'Пользователь информационной базы не найден.'") + Рекомендация; + НСтр("ru = 'Несуществующий пользователь информационной базы.'") + Рекомендация; КонецПроцедуры @@ -2219,4 +2281,30 @@ КонецПроцедуры +// СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); + МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + #КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl index 2a6d8447a..c1f8cdfa9 100644 --- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; @@ -103,6 +104,18 @@ КонецПроцедуры +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + Если ВидФормы = "ФормаВыбора" ИЛИ Параметры.Свойство("РежимВыбора") Тогда + + ВыбраннаяФормаПоУмолчанию = ВыбраннаяФорма; + ПользователиПереопределяемый.ПриОпределенииФормыВыбораПользователей(ВыбраннаяФорма, Параметры); + Если ВыбраннаяФормаПоУмолчанию <> ВыбраннаяФорма Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; + + КонецЕсли; +КонецПроцедуры + #КонецОбласти #КонецЕсли diff --git a/SSL/src/Catalogs/Пользователи/Пользователи.mdo b/SSL/src/Catalogs/Пользователи/Пользователи.mdo index 9fd60c83b..e975e3b28 100644 --- a/SSL/src/Catalogs/Пользователи/Пользователи.mdo +++ b/SSL/src/Catalogs/Пользователи/Пользователи.mdo @@ -372,6 +372,21 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="622d6de2-7404-41cc-961b-131d078d7ab4"> + <name>Фотография</name> + <synonym> + <key>ru</key> + <value>Фотография</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <tabularSections uuid="245f870e-a53a-4d86-aa0a-c0c7709b8acb"> <producedTypes> <objectType typeId="d775216b-7adc-4b4e-972d-b6ad881e79dd" valueTypeId="16c681bb-1a49-44e1-82a6-4af12b00b701"/> diff --git a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl index 82b3f6074..79c06de94 100644 --- a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ПоставляемыеДополнительныеОтчетыИОбработки/ПоставляемыеДополнительныеОтчетыИОбработки.mdo b/SSL/src/Catalogs/ПоставляемыеДополнительныеОтчетыИОбработки/ПоставляемыеДополнительныеОтчетыИОбработки.mdo index fd5fad905..f7e2b8971 100644 --- a/SSL/src/Catalogs/ПоставляемыеДополнительныеОтчетыИОбработки/ПоставляемыеДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Catalogs/ПоставляемыеДополнительныеОтчетыИОбработки/ПоставляемыеДополнительныеОтчетыИОбработки.mdo @@ -196,7 +196,10 @@ <value>Причина отключения</value> </synonym> <type> - <types>EnumRef.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса</types> + <types>String</types> + <stringQualifiers> + <length>10</length> + </stringQualifiers> </type> <toolTip> <key>ru</key> diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl index 65b99a006..d218ebdfe 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -58,7 +59,7 @@ // Применяет правила обработки писем. // // Параметры: -// ПараметрыВыгрузки - Структура - содержит следующие поля. +// ПараметрыВыгрузки - Структура: // - ДляПисемВПапке - Справочник.ПапкиЭлектронныхПисем - письма, которые находятся в этой папке // будут обработаны. // - ВключаяПодчиненные - Булево - признак, того что должны обрабатываться письма в подчиненных папках. diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl index 90de09885..3f0d069bd 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl @@ -44,7 +44,7 @@ КонецЕсли; Иначе Если (ОбщегоНазначения.РазделениеВключено() И ЭтоАдминистраторСистемы) Или Не ОбщегоНазначения.РазделениеВключено() Тогда - ОбщееРасписаниеПредставление = НСтр("ru = 'Не найдено общее регламентное задание'"); + ОбщееРасписаниеПредставление = НСтр("ru = 'Регламентное задание не доступно'"); Иначе ОбщееРасписаниеПредставление = ""; Элементы.ПредставлениеОбщегоРасписания.Видимость = Ложь; @@ -212,20 +212,6 @@ Список.УсловноеОформление.Элементы.Очистить(); - // Отключенные проверки. - - Элемент = Список.УсловноеОформление.Элементы.Добавить(); - - ЭлементОтбораДанных = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Использование"); - ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбораДанных.ПравоеЗначение = Ложь; - ЭлементОтбораДанных.Использование = Истина; - - ЭлементЦветаОформления = Элемент.Оформление.Элементы.Найти("ЦветТекста"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; - ЭлементЦветаОформления.Использование = Истина; - // Не выводить, если не описаны причины возникновения проблемы. Элемент = Список.УсловноеОформление.Элементы.Добавить(); @@ -365,7 +351,7 @@ КонецЕсли; Иначе ОбщееРасписание = Неопределено; - ОбщееРасписаниеПредставление = НСтр("ru = 'Не найдено общее регламентное задание'"); + ОбщееРасписаниеПредставление = НСтр("ru = 'Регламентное задание недоступно'"); КонецЕсли; Если Не ОбщегоНазначения.РазделениеВключено() Тогда diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl index 1dc98a2f5..34864db79 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl @@ -264,7 +264,7 @@ КонецЕсли; КонецЕсли; Иначе - ОбщееРасписаниеПредставление = НСтр("ru = 'Не найдено общее регламентное задание'"); + ОбщееРасписаниеПредставление = НСтр("ru = 'Регламентное задание не доступно'"); КонецЕсли; Элементы.ПредставлениеОбщегоРасписания.Заголовок = @@ -392,7 +392,7 @@ МетаданныеТекущейПроверки = МетаданныеПроверки(Объект.Идентификатор); Если МетаданныеТекущейПроверки = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Рассинхронизация проверок учета. Проверка с идентификатором ""%1"" не найдена в метаданных.'"), Объект.Идентификатор); + НСтр("ru = 'Проверка ведения учета с идентификатором ""%1"" не существует.'"), Объект.Идентификатор); КонецЕсли; ЗаполнитьЗначенияСвойств(Объект, МетаданныеТекущейПроверки, , "Идентификатор"); diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl index a7e64b1e3..0ac162e5a 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl @@ -17,7 +17,7 @@ // Имена реквизитов справочника, значения которых разрешено изменять массово. // // Возвращаемое значение: -// Массив Из Строка - Имена реквизитов справочника. +// Массив Из Строка - имена реквизитов справочника. // Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт @@ -34,7 +34,7 @@ // Имена реквизитов справочника, в разрезе которых контролируется уникальность элементов. // // Возвращаемое значение: -// Массив Из Строка - Имена реквизитов справочника. +// Массив Из Строка - имена реквизитов справочника. // Функция ПоляЕстественногоКлюча() Экспорт diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl index a7e64b1e3..0ac162e5a 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl @@ -17,7 +17,7 @@ // Имена реквизитов справочника, значения которых разрешено изменять массово. // // Возвращаемое значение: -// Массив Из Строка - Имена реквизитов справочника. +// Массив Из Строка - имена реквизитов справочника. // Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт @@ -34,7 +34,7 @@ // Имена реквизитов справочника, в разрезе которых контролируется уникальность элементов. // // Возвращаемое значение: -// Массив Из Строка - Имена реквизитов справочника. +// Массив Из Строка - имена реквизитов справочника. // Функция ПоляЕстественногоКлюча() Экспорт diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl index fe2987776..b82ec17d9 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl @@ -206,6 +206,11 @@ КонецПроцедуры +// Параметры: +// ОписаниеОшибки - ДанныеФормыКоллекция: +// * Ошибки - Массив из Структура +// ОшибкаНаСервере - Булево +// &НаСервере Процедура ДобавитьОшибки(ОписаниеОшибок, ОшибкаНаСервере = Ложь) diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form index 1b9d51313..e1c2bd44a 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,42 @@ <?xml version="1.0" encoding="UTF-8"?> <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:Decoration"> + <name>НадписьНастройкаВЦентральномУзле</name> + <id>55</id> + <title> + <key>ru</key> + <value>Настройка программы электронной подписи и шифрования выполнена в главном узле</value> + + true + true + + true + + + НадписьНастройкаВЦентральномУзлеРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + НадписьНастройкаВЦентральномУзлеКонтекстноеМеню + 56 + true + + Label + true + true + + Left + + Style.ToolTipBackColor + + + Наименование 50 diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html index c735d5be5..235e39e76 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html @@ -1,14 +1,21 @@

      Сведения о программе электронной подписи и шифрования.

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

      +

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

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

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

      См. также:

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl index d8e42e816..56592cabb 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl @@ -20,6 +20,8 @@ Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда ТолькоПросмотр = Истина; + Иначе + Элементы.НадписьНастройкаВЦентральномУзле.Видимость = Ложь; КонецЕсли; ПоставляемыеНастройки = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПоставляемыеНастройкиПрограмм(); diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl index 0c9006158..92467c78c 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; @@ -205,6 +206,9 @@ КонецПроцедуры +// Параметры: +// Программа - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования +// Процедура ОбновитьПредставлениеПрограммыОтложенно(Программа, ОбъектовОбработано, ПроблемныхОбъектов, ПоставляемыеНастройки) Блокировка = Новый БлокировкаДанных; diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index 247c153d2..43e792168 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -109,8 +109,8 @@ // Функция читает данные производственного календаря из регистра. // // Параметры: -// ПроизводственныйКалендарь - Ссылка на текущий элемент справочника. -// НомерГода - Номер года, за который необходимо прочитать производственный календарь. +// ПроизводственныйКалендарь - ссылка на текущий элемент справочника. +// НомерГода - номер года, за который необходимо прочитать производственный календарь. // // Возвращаемое значение // ДанныеПроизводственногоКалендаря - таблица значений, в которой хранятся сведения о виде дня на каждую дату календаря. @@ -498,13 +498,13 @@ // Преобразовывает данные производственных календарей, представленные в виде XML. // // Параметры: -// ДанныеXML - структура, извлеченная из файла XML методом ОбщегоНазначения.ПрочитатьXMLВТаблицу. +// ДанныеXML - структура - извлеченная из файла XML методом ОбщегоНазначения.ПрочитатьXMLВТаблицу. // ТаблицаКалендарей - таблица значений, список производственных календарей, поддерживаемых в конфигурации. // КодыКалендарей - необязательный, массив, если не задан, то отбор не будет установлен. // ФормироватьПолныйНабор - необязательный, булево, если ложь, то будут сформированы только данные по отклонениям от календаря по умолчанию. // // Возвращаемое значение: -// ТаблицаЗначений - таблица с колонками: +// ТаблицаЗначений: // * КодПроизводственногоКалендаря // * ВидДня // * Год @@ -616,7 +616,7 @@ // Получает таблицу поставляемых в составе программы производственных календарей. // // Возвращаемое значение: -// ТаблицаЗначений - . +// ТаблицаЗначений // Функция ПроизводственныеКалендариИзМакета() Экспорт @@ -697,35 +697,38 @@ | ИзмененияКалендарей.ПроизводственныйКалендарь, | Год"; - РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Пустой() Тогда - Возврат; - КонецЕсли; - - НаборЗаписей = РегистрыСведений.ДанныеПроизводственногоКалендаря.СоздатьНаборЗаписей(); - - КлючиРегистра = Новый Массив; - КлючиРегистра.Добавить("ПроизводственныйКалендарь"); - КлючиРегистра.Добавить("Год"); - - Выборка = РезультатЗапроса.Выбрать(); - Пока Выборка.СледующийПоЗначениюПоля("ПроизводственныйКалендарь") Цикл - Пока Выборка.СледующийПоЗначениюПоля("Год") Цикл - НаборЗаписей.Очистить(); - Пока Выборка.Следующий() Цикл - ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка); + Блокировка = Новый БлокировкаДанных(); + Блокировка.Добавить("РегистрСведений.ДанныеПроизводственногоКалендаря"); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.СледующийПоЗначениюПоля("ПроизводственныйКалендарь") Цикл + Пока Выборка.СледующийПоЗначениюПоля("Год") Цикл + НаборЗаписей = РегистрыСведений.ДанныеПроизводственногоКалендаря.СоздатьНаборЗаписей(); + Пока Выборка.Следующий() Цикл + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка); + КонецЦикла; + ЗаполнитьЗначенияСвойств(ИзмененияКалендарей.Добавить(), Выборка); + НаборЗаписей.Отбор.ПроизводственныйКалендарь.Установить(Выборка.ПроизводственныйКалендарь); + НаборЗаписей.Отбор.Год.Установить(Выборка.Год); + Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); + Продолжить; + КонецЕсли; + НаборЗаписей.Записать(); КонецЦикла; - ЗаполнитьЗначенияСвойств(ИзмененияКалендарей.Добавить(), Выборка); - Для Каждого Ключ Из КлючиРегистра Цикл - НаборЗаписей.Отбор[Ключ].Установить(Выборка[Ключ]); - КонецЦикла; - Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда - ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); - Продолжить; - КонецЕсли; - НаборЗаписей.Записать(); КонецЦикла; - КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; ИзмененияКалендарей.Свернуть("КодПроизводственногоКалендаря, Год"); @@ -810,7 +813,7 @@ // Определяет источник актуального перечня поддерживаемых производственных календарей (макет или поставка классификатора). // // Возвращаемое значение: -// ТаблицаЗначений - . +// ТаблицаЗначений // Функция ПроизводственныеКалендариПоУмолчанию() Экспорт @@ -909,8 +912,8 @@ // Процедура записывает данные одного производственного календаря за 1 год. // // Параметры: -// ПроизводственныйКалендарь - Ссылка на текущий элемент справочника. -// НомерГода - Номер года, за который необходимо записать производственный календарь. +// ПроизводственныйКалендарь - ссылка на текущий элемент справочника. +// НомерГода - номер года, за который необходимо записать производственный календарь. // ДанныеПроизводственногоКалендаря - таблица значений, в которой хранятся сведения о виде дня на каждую дату календаря. // // Возвращаемое значение diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Templates/ПФ_MXL_ПроизводственныйКалендарь/Template.mxlx b/SSL/src/Catalogs/ПроизводственныеКалендари/Templates/ПФ_MXL_ПроизводственныйКалендарь/Template.mxlx index dbd8fb0c5..888811dfd 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Templates/ПФ_MXL_ПроизводственныйКалендарь/Template.mxlx +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Templates/ПФ_MXL_ПроизводственныйКалендарь/Template.mxlx @@ -453,7 +453,7 @@ Picture - 2 + 1 31 20 6 @@ -562,7 +562,7 @@ - + 19 @@ -701,7 +701,7 @@ 41 - 96 + 132 3 diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl index 36415c23f..2ec713dc6 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; @@ -84,7 +85,7 @@ УстановитьПривилегированныйРежим(Истина); ПоставляемыеПрофили = ПоставляемыеПрофили(); - + НачатьТранзакцию(); Попытка ЕстьТекущиеИзменения = Ложь; @@ -201,27 +202,13 @@ // Процедура ОбновитьПоставляемыеПрофили(ЕстьИзменения = Неопределено) Экспорт - ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПоставляемыхПрофилей(); + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПоставляемыхПрофилей(); // См. ОписаниеПоставляемыхПрофилей ОписанияПрофилей = ПоставляемыеПрофили.ОписанияПрофилейМассив; ПараметрыОбновления = ПоставляемыеПрофили.ПараметрыОбновления; ОбновленныеПрофили = Новый Массив; - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); - Запрос.Текст = - "ВЫБРАТЬ - | ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен КАК ПоставляемыйПрофильИзменен, - | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных КАК ИдентификаторПоставляемыхДанных, - | ПрофилиГруппДоступа.Ссылка КАК Ссылка, - | ЛОЖЬ КАК Найден - |ИЗ - | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа - |ГДЕ - | НЕ ПрофилиГруппДоступа.ЭтоГруппа - | И ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных <> &ПустойУникальныйИдентификатор"; - ТекущиеПрофили = Запрос.Выполнить().Выгрузить(); + ТекущиеПрофили = ТекущиеПрофили(); Для Каждого СвойстваПрофиля Из ОписанияПрофилей Цикл @@ -354,15 +341,12 @@ // Возвращает строку уникального идентификатора // поставляемого и предопределенного профиля Администратор. // -Функция ИдентификаторПрофиляАдминистратор(Строка = Истина) Экспорт +// Возвращаемое значение: +// Строка - строка уникального идентификатора. +// +Функция ИдентификаторПрофиляАдминистратор() Экспорт - Идентификатор = "6c4b0307-43a4-4141-9c35-3dd7e9586d41"; - - Если Строка Тогда - Возврат Идентификатор; - КонецЕсли; - - Возврат Новый УникальныйИдентификатор(Идентификатор); + Возврат "6c4b0307-43a4-4141-9c35-3dd7e9586d41"; КонецФункции @@ -370,13 +354,18 @@ // // Параметры: // Идентификатор - Строка - имя или уникальный идентификатор поставляемого профиля. +// ВызыватьИсключениеЕслиНетВБазеДанных - Булево +// +// Возвращаемое значение: +// СправочникСсылка.ПрофилиГруппДоступа +// Неопределено // Функция ПоставляемыйПрофильПоИдентификатору(Идентификатор, ВызыватьИсключениеЕслиНетВБазеДанных = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПоставляемыхПрофилей(); - СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить(Строка(Идентификатор)); + СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить(Строка(Идентификатор)); // См. СвойстваПоставляемогоПрофиля Если СвойстваПрофиля = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -406,7 +395,7 @@ Если ВызыватьИсключениеЕслиНетВБазеДанных Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Поставляемый профиль с идентификатором ""%1"" - |не найден в информационной базе.'"), + |не существует в программе.'"), Строка(Идентификатор)); КонецЕсли; @@ -417,6 +406,10 @@ // Возвращает строку уникального идентификатора // данных поставляемого профиля. // +// Возвращаемое значение: +// Строка +// Неопределено +// Функция ИдентификаторПоставляемогоПрофиля(Профиль) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -456,7 +449,7 @@ // с описанием в переопределяемом общем модуле). // // Возвращаемое значение: -// Булево - +// Булево // Функция ПоставляемыйПрофильИзменен(Профиль) Экспорт @@ -465,7 +458,7 @@ КонецЕсли; ОписанияПрофилей = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПоставляемыхПрофилей().ОписанияПрофилей; - СвойстваПрофиля = ОписанияПрофилей.Получить(Строка(Профиль.ИдентификаторПоставляемыхДанных)); + СвойстваПрофиля = ОписанияПрофилей.Получить(Строка(Профиль.ИдентификаторПоставляемыхДанных)); // См. СвойстваПоставляемогоПрофиля Если СвойстваПрофиля = Неопределено Тогда Возврат Ложь; @@ -488,8 +481,8 @@ МетаданныеРоли = Метаданные.Роли.Найти(Роль); Если МетаданныеРоли = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При проверке поставляемого профиля ""%1"" - |роль ""%2"" не найдена в метаданных.'"), + НСтр("ru = 'В поставляемом профиле ""%1"" + |указана несуществующая роль ""%2"".'"), СвойстваПрофиля.Наименование, Роль); КонецЕсли; @@ -537,7 +530,7 @@ // Профиль - СправочникСсылка.ПрофилиГруппДоступа. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЕстьНачальноеЗаполнениеПрофиля(Знач Профиль) Экспорт @@ -559,7 +552,7 @@ // ДанныеФормыСтруктура созданные по объекту. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЗапретИзмененияПрофиля(Знач Профиль) Экспорт @@ -608,7 +601,7 @@ // Если для указанного профиля описание начального заполнения найдено, // содержимое профиля полностью замещается. // -// ОбновитьГруппыДоступа - Булево, если Истина, виды доступа групп доступа профиля будут обновлены. +// ОбновитьГруппыДоступа - Булево - если Истина, виды доступа групп доступа профиля будут обновлены. // Процедура ЗаполнитьПоставляемыйПрофиль(Знач Профиль, Знач ОбновитьГруппыДоступа) Экспорт @@ -636,20 +629,7 @@ // Функция НесовместимыеПрофилиГруппДоступа() Экспорт - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Профили.Ссылка КАК Ссылка, - | Профили.Назначение.( - | ТипПользователей КАК ТипПользователей - | ) КАК Назначение, - | Профили.Роли.( - | Роль КАК Роль - | ) КАК Роли - |ИЗ - | Справочник.ПрофилиГруппДоступа КАК Профили"; - - Выгрузка = Запрос.Выполнить().Выгрузить(); + Выгрузка = НазначениеИРолиПрофилейГруппаДоступа(); НесовместимыеПрофили = Новый Массив; НедоступныеРолиПоНазначению = Новый Соответствие; @@ -671,14 +651,15 @@ ОписаниеПрофиля.Роли.ВыгрузитьКолонку("Роль"), Ложь); Для Каждого ОписаниеРоли Из ОписаниеРолей Цикл - Если ОписаниеРоли.Значение = Неопределено Тогда + ОбъектМетаданных = ОписаниеРоли.Значение; // ОбъектМетаданных + Если ОбъектМетаданных = Неопределено Тогда // Роль, недоступная до перезапуска, не является проблемой. Продолжить; КонецЕсли; - Если ОписаниеРоли.Значение = Null - Или НедоступныеРоли.Получить(ОписаниеРоли.Значение.Имя) <> Неопределено - Или ВРег(Лев(ОписаниеРоли.Значение.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") Тогда + Если ОбъектМетаданных = Null + Или НедоступныеРоли.Получить(ОбъектМетаданных.Имя) <> Неопределено + Или ВРег(Лев(ОбъектМетаданных.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") Тогда НесовместимыеПрофили.Добавить(ОписаниеПрофиля.Ссылка); Прервать; @@ -690,7 +671,20 @@ КонецФункции -// См. Справочники.ПрофилиГруппДоступа.ПоставляемыеПрофили. +// См. ПоставляемыеПрофили. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * ОписанияПрофилей - Соответствие: +// ** Ключ - Строка +// ** Значение - см. СвойстваПоставляемогоПрофиля +// * ОписанияПрофилейМассив - Массив из см. СвойстваПоставляемогоПрофиля +// * ПараметрыОбновления - ФиксированнаяСтруктура: +// ** ОбновлятьИзмененныеПрофили - Булево +// ** ЗапретитьИзменениеПрофилей - Булево +// ** ОбновлятьГруппыДоступа - Булево +// ** ОбновлятьГруппыДоступаСУстаревшимиНастройками - Булево +// Функция ОписаниеПоставляемыхПрофилей() Экспорт ПоставляемыеПрофили = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы( @@ -756,6 +750,10 @@ // Процедуры и функции для поддержки обмена данными в РИБ. // Только для внутреннего использования. +// +// Параметры: +// ЭлементДанных - СправочникОбъект.ПрофилиГруппДоступа +// Процедура ВосстановитьСоставРолейРасширений(ЭлементДанных) Экспорт УдалитьРолиРасширений(ЭлементДанных); @@ -823,6 +821,10 @@ КонецПроцедуры // Только для внутреннего использования. +// +// Параметры: +// ЭлементДанных - СправочникОбъект.ПрофилиГруппДоступа +// Процедура ЗарегистрироватьПрофильИзмененныйПриЗагрузке(ЭлементДанных) Экспорт // Регистрация профилей, для групп доступа которых нужно обновить регистры сведений @@ -963,6 +965,9 @@ КонецПроцедуры +// Возвращаемое значение: +// см. ОписаниеПоставляемыхПрофилей +// Функция ПоставляемыеПрофили() ЗаполненныеПоставляемыеПрофили = ЗаполненныеПоставляемыеПрофили(); @@ -1008,6 +1013,13 @@ ОписаниеПрофиля.Идентификатор); КонецЕсли; + СвойстваПрофиля = Новый Структура; + СвойстваПрофиля.Вставить("Имя", ""); + СвойстваПрофиля.Вставить("Идентификатор", ""); + СвойстваПрофиля.Вставить("Наименование", ""); + СвойстваПрофиля.Вставить("Роли", Новый Массив); + ЗаполнитьЗначенияСвойств(СвойстваПрофиля, ОписаниеПрофиля); + // Назначение профиля. Если ОписаниеПрофиля.Назначение.Количество() = 0 Тогда ОписаниеПрофиля.Назначение.Добавить(Тип("СправочникСсылка.Пользователи")); @@ -1042,10 +1054,10 @@ МассивНазначений.Добавить(Значение); КонецЦикла; КонецЦикла; - ОписаниеПрофиля.Назначение = МассивНазначений; + СвойстваПрофиля.Вставить("Назначение", МассивНазначений); // Проверка ролей. - НазначениеПрофиля = УправлениеДоступомСлужебныйКлиентСервер.НазначениеПрофиля(ОписаниеПрофиля); + НазначениеПрофиля = УправлениеДоступомСлужебныйКлиентСервер.НазначениеПрофиля(СвойстваПрофиля); НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРоли(НазначениеПрофиля, Ложь); ПроверенныеРоли = Новый Соответствие; ИндексРоли = ОписаниеПрофиля.Роли.Количество(); @@ -1056,7 +1068,7 @@ Если ВсеРоли.Получить(Роль) = Неопределено Тогда ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В описании профиля ""%1 (%2)"" - |роль ""%3"" не найдена в метаданных.'"), + |указана несуществующая роль ""%3"".'"), ОписаниеПрофиля.Имя, ОписаниеПрофиля.Идентификатор, Роль); @@ -1083,24 +1095,24 @@ Если ОбщегоНазначения.РазделениеВключено() Тогда // Заполнение списка недоступных ролей в модели сервиса // для определения необходимости обновления поставляемых профилей. - ОписаниеПрофиля.Вставить("РолиНедоступныеВСервисе", + СвойстваПрофиля.Вставить("РолиНедоступныеВСервисе", РолиПрофиляНедоступныеВСервисе(ОписаниеПрофиля, НазначениеПрофиля)); КонецЕсли; - Если СвойстваПрофилей.Получить(ОписаниеПрофиля.Идентификатор) <> Неопределено Тогда + Если СвойстваПрофилей.Получить(СвойстваПрофиля.Идентификатор) <> Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Профиль с идентификатором ""%1"" уже существует.'"), - ОписаниеПрофиля.Идентификатор); + СвойстваПрофиля.Идентификатор); КонецЕсли; - СвойстваПрофилей.Вставить(ОписаниеПрофиля.Идентификатор, ОписаниеПрофиля); - ОписанияПрофилейМассив.Добавить(ОписаниеПрофиля); - Если ЗначениеЗаполнено(ОписаниеПрофиля.Имя) Тогда - Если СвойстваПрофилей.Получить(ОписаниеПрофиля.Имя) <> Неопределено Тогда + СвойстваПрофилей.Вставить(СвойстваПрофиля.Идентификатор, СвойстваПрофиля); + ОписанияПрофилейМассив.Добавить(СвойстваПрофиля); + Если ЗначениеЗаполнено(СвойстваПрофиля.Имя) Тогда + Если СвойстваПрофилей.Получить(СвойстваПрофиля.Имя) <> Неопределено Тогда ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Профиль с именем ""%1"" уже существует.'"), - ОписаниеПрофиля.Имя); + СвойстваПрофиля.Имя); КонецЕсли; - СвойстваПрофилей.Вставить(ОписаниеПрофиля.Имя, ОписаниеПрофиля); + СвойстваПрофилей.Вставить(СвойстваПрофиля.Имя, СвойстваПрофиля); КонецЕсли; // Преобразование СпискаЗначений к Соответствию для фиксации. ВидыДоступа = Новый Соответствие; @@ -1154,7 +1166,7 @@ КонецЕсли; ВидыДоступа.Вставить(ИмяВидаДоступа, УточнениеВидаДоступа); КонецЦикла; - ОписаниеПрофиля.ВидыДоступа = ВидыДоступа; + СвойстваПрофиля.Вставить("ВидыДоступа", ВидыДоступа); // Удаление повторяющихся значений. ЗначенияДоступа = Новый Массив; @@ -1230,7 +1242,7 @@ КонецЕсли; ТипЗначенияДоступа = ТипЗнч(ПустаяСсылкаЗначенияДоступа); - СвойстваВидаДоступаПоТипу = СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТипЗначенияДоступа); + СвойстваВидаДоступаПоТипу = СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТипЗначенияДоступа); // См. УправлениеДоступомСлужебный.СвойстваВидаДоступа Если СвойстваВидаДоступаПоТипу = Неопределено ИЛИ СвойстваВидаДоступаПоТипу.Имя <> ВидДоступа Тогда @@ -1259,7 +1271,7 @@ КонецЕсли; ЗначенияДоступа.Добавить(Отбор); КонецЦикла; - ОписаниеПрофиля.ЗначенияДоступа = ЗначенияДоступа; + СвойстваПрофиля.Вставить("ЗначенияДоступа", ЗначенияДоступа); КонецЦикла; ПоставляемыеПрофили = Новый Структура; @@ -1271,6 +1283,42 @@ КонецФункции +// Возвращает свойства профиля, указанные в переопределяемом модуле, +// преобразованные в фиксированный формат сохранения в базе данных. +// Подробное описание свойств см. УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа. +// +// Параметры: +// Идентификатор - Строка - имя или идентификатор поставляемого профиля. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * Имя - Строка +// * Идентификатор - Строка +// * Наименование - Строка +// * Роли - ФиксированныйМассив из Строка +// * Назначение - ФиксированныйМассив из ОпределяемыйТип.Пользователь +// * ВидыДоступа - ФиксированноеСоответствие: +// * Ключ - Строка +// * Значение - Строка +// * ЗначенияДоступа - ФиксированныйМассив из Структура: +// * ВидДоступа - Строка +// * ЗначениеДоступа - Строка +// +// Неопределено - профиль не существует. +// +Функция СвойстваПоставляемогоПрофиля(Идентификатор) Экспорт + + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПоставляемыхПрофилей(); + + Возврат ПоставляемыеПрофили.ОписанияПрофилей.Получить(Идентификатор); + +КонецФункции + +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Строка - строковый идентификатор поставляемого профиля +// * Значение - Строка - описание поставляемого профиля +// Функция ПояснениеПоставляемыхПрофилей() Экспорт ОписанияПрофилей = ЗаполненныеПоставляемыеПрофили().ОписанияПрофилей; @@ -1324,8 +1372,7 @@ // Замещает имеющийся или создает новый поставляемый профиль групп доступа по его описанию. // // Параметры: -// СвойстваПрофиля - ФиксированнаяСтруктура - свойства профиля, как в структуре возвращаемой -// функцией НовоеОписаниеПрофиляГруппДоступа общего модуля УправлениеДоступом. +// СвойстваПрофиля - см. СвойстваПоставляемогоПрофиля // // Возвращаемое значение: // Булево - Истина - профиль изменен. @@ -1359,7 +1406,7 @@ КонецЕсли; Если ПрофильСсылка = Неопределено Тогда - // Поставляемый профиль не найден, нужно создать новый. + // Поставляемый профиль не существует, нужно создать новый. ПрофильОбъект = СоздатьЭлемент(); Иначе // Поставляемый профиль связан с предопределенным элементом. @@ -1391,7 +1438,7 @@ Если МетаданныеРоли = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При обновлении поставляемого профиля ""%1"" - |роль ""%2"" не найдена в метаданных.'"), + |обнаружена несуществующая роль ""%2"".'"), СвойстваПрофиля.Наименование, Роль); КонецЕсли; @@ -1477,6 +1524,62 @@ КонецФункции +// Возвращаемое значение: +// ТаблицаЗначений: +// * ПоставляемыйПрофильИзменен - Булево +// * ИдентификаторПоставляемыхДанных - УникальныйИдентификатор +// * Ссылка - СправочникСсылка.ПрофилиГруппДоступа +// +Функция ТекущиеПрофили() + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); + Запрос.Текст = + "ВЫБРАТЬ + | ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен КАК ПоставляемыйПрофильИзменен, + | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных КАК ИдентификаторПоставляемыхДанных, + | ПрофилиГруппДоступа.Ссылка КАК Ссылка, + | ЛОЖЬ КАК Найден + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | НЕ ПрофилиГруппДоступа.ЭтоГруппа + | И ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных <> &ПустойУникальныйИдентификатор"; + ТекущиеПрофили = Запрос.Выполнить().Выгрузить(); + + Возврат ТекущиеПрофили; + +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ПрофилиГруппДоступа +// * Назначение - ТаблицаЗначений: +// ** ТипПользователей - ОпределяемыйТип.Пользователь +// * Роли - ТаблицаЗначений: +// ** Роль - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// +Функция НазначениеИРолиПрофилейГруппаДоступа() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Профили.Ссылка КАК Ссылка, + | Профили.Назначение.( + | ТипПользователей КАК ТипПользователей + | ) КАК Назначение, + | Профили.Роли.( + | Роль КАК Роль + | ) КАК Роли + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК Профили"; + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + #КонецОбласти #КонецЕсли diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl index 4131a5ca1..177e6945c 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl @@ -10,8 +10,7 @@ #Область ОписаниеПеременных -Перем СтарыеЗначения; // Значения некоторых реквизитов и табличных частей профиля - // до его изменения для использования в обработчике события ПриЗаписи. +Перем СтарыеЗначения; // см. СтарыеЗначения #КонецОбласти @@ -29,9 +28,8 @@ СтандартныеПодсистемыСервер.ПроверитьДинамическоеОбновлениеВерсииПрограммы(); РегистрыСведений.ПраваРолей.ПроверитьДанныеРегистра(); - - СтарыеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, - "Ссылка, ПометкаУдаления, Роли, Назначение, ВидыДоступа, ЗначенияДоступа"); + + СтарыеЗначения = СтарыеЗначения(); // Проверка ролей. РолиАдминистратора = Новый Массив; @@ -84,7 +82,7 @@ НачатьТранзакцию(); Попытка - ИзмененныеГруппыДоступа = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + ИзмененныеГруппыДоступа = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); // Массив из СправочникСсылка.ПрофилиГруппДоступа Если ИзмененныеГруппыДоступа.Количество() > 0 Тогда Блокировка = Новый БлокировкаДанных; @@ -412,6 +410,25 @@ КонецПроцедуры +// Значения некоторых реквизитов и табличных частей профиля +// до его изменения для использования в обработчике события ПриЗаписи. +// +// Возвращаемое значение: +// Структура: +// * Ссылка - СправочникСсылка.ПрофилиГруппДоступа +// * ПометкаУдаления - Булево +// * Роли - РезультатЗапроса +// * Назначение - РезультатЗапроса +// * ВидыДоступа - РезультатЗапроса +// * ЗначенияДоступа - РезультатЗапроса +// +Функция СтарыеЗначения() + + Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, + "Ссылка, ПометкаУдаления, Роли, Назначение, ВидыДоступа, ЗначенияДоступа"); + +КонецФункции + #КонецОбласти #Иначе diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl index ebadbf44b..7c9813a17 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -1351,13 +1351,13 @@ НайденныеИдентификаторыОбъектовМетаданных = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); Если НайденныеИдентификаторыОбъектовМетаданных.Количество() <> 1 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Тип получателей не найден'")); + ПоказатьПредупреждение(, НСтр("ru = 'Некорректный тип получателей.'")); Возврат; КонецЕсли; МассивТипов = НайденныеИдентификаторыОбъектовМетаданных[0].ОсновнойТип.Типы(); Если МассивТипов.Количество() <> 1 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Тип получателей не найден'")); + ПоказатьПредупреждение(, НСтр("ru = 'Некорректный тип получателей.'")); Возврат; КонецЕсли; @@ -1492,7 +1492,7 @@ ПолеКД = ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, ПользовательскиеНастройки.Элементы); КонецЕсли; Если ПолеКД = Неопределено Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Для настройки отчета не найдено описание доступного поля'")); + ПоказатьПредупреждение(, НСтр("ru = 'Для настройки отчета не существует описания доступного поля.'")); Возврат Неопределено; КонецЕсли; @@ -1861,17 +1861,18 @@ // Обработчик закрытия формы ПолучателиРассылки. // // Параметры: -// Результат - Структура - где: -// * Получатели - ТаблицаЗначений - где: +// Результат - Структура: +// * Получатели - ТаблицаЗначений: // * Получатель - СправочникСсылка.ГруппыПользователей, // - СправочникСсылка._ДемоКонтрагенты, // - СправочникСсылка._ДемоПартнеры, -// - СправочникСсылка.Пользователи - -// * Исключен - Булево - -// * Адрес - Строка - -// * ИндексКартинки - Число - -// * ВидПочтовогоАдресаПолучателей - СправочникСсылка.ВидыКонтактнойИнформации - -// Параметр - Структура, Неопределено - +// - СправочникСсылка.Пользователи +// * Исключен - Булево +// * Адрес - Строка +// * ИндексКартинки - Число +// * ВидПочтовогоАдресаПолучателей - СправочникСсылка.ВидыКонтактнойИнформации +// Параметр - Структура +// - Неопределено // &НаКлиенте Процедура ПолучателиРассылкиНажатиеЗавершение(Результат, Параметр) Экспорт @@ -2025,8 +2026,8 @@ // Обработчик закрытия диалога форматной строки. // // Параметры: -// СтрокаРезультат - Строка - -// Переменные - Структура - +// СтрокаРезультат - Строка +// Переменные - Структура // &НаКлиенте Процедура ДобавитьИзменитьШаблонДатыРассылкиЗавершение(СтрокаРезультат, Переменные) Экспорт @@ -2653,10 +2654,10 @@ // Формирует представление расписания регламентного задания. // // Параметры: -// Расписание - РасписаниеРегламентногоЗадания - Расписание. +// Расписание - РасписаниеРегламентногоЗадания - расписание. // // Возвращаемое значение: -// Строка - Представление расписания. +// Строка - представление расписания. // &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеРасписания(Расписание) @@ -3010,14 +3011,14 @@ // Выполняет проверку выбранного отчета. // // Параметры: -// СтруктураВыбора - Структура - где: -// * Выбрано - Структура - Строки, выбранные пользователем. -// * Успешно - Структура - Строки, инициализированные и добавленные в список. -// * СОшибками - Структура - Строки, не добавленные в список из-за ошибок, где: -// ** МассивСтрок - Массив - Массив идентификаторов строк. -// ** Количество - Число - Количество строк. -// ** ПредставлениеОтчетов - Строка - Представление всех отчетов указанных строк. -// ** Текст - Строка - Текст возникших ошибок. +// СтруктураВыбора - Структура: +// * Выбрано - Структура - строки, выбранные пользователем. +// * Успешно - Структура - строки, инициализированные и добавленные в список. +// * СОшибками - Структура - строки, не добавленные в список из-за ошибок, где: +// ** МассивСтрок - Массив - массив идентификаторов строк. +// ** Количество - Число - количество строк. +// ** ПредставлениеОтчетов - Строка - представление всех отчетов указанных строк. +// ** Текст - Строка - текст возникших ошибок. // &НаСервере Процедура ПроверитьДобавленныеСтрокиОтчетов(СтруктураВыбора) diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl index aa202ab1d..15ff5deee 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -87,7 +88,7 @@ // Параметры: // Объект - СправочникОбъект.РолиИсполнителей - заполняемый объект. // Данные - СтрокаТаблицыЗначений - данные заполнения. -// ДополнительныеПараметры - Структура - Дополнительные параметры. +// ДополнительныеПараметры - Структура // Процедура ПриНачальномЗаполненииЭлемента(Объект, Данные, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo index 7a6bd541f..451d2a564 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo +++ b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo @@ -344,25 +344,6 @@ Use Use - - ВключатьДатуВИмяФайла - - ru - Включать дату в имя файла - - - Boolean - - - ru - Признак добавления к имени файла отчета даты рассылки - - - - - Use - Use - ВыполнятьПоРасписанию @@ -840,6 +821,25 @@ Use + + ВключатьДатуВИмяФайла + + ru + Включать дату в имя файла + + + Boolean + + + ru + Признак добавления к имени файла отчета даты рассылки + + + + + Use + Use + diff --git a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl index cd08e2d75..3aa5e5630 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -145,7 +146,7 @@ Элемент.ИспользуетсяСОбъектамиАдресации = Истина; Элемент.ВнешняяРоль = Ложь; Элемент.Код = "000000001"; - Элемент.КраткоеПредставление = НСтр("ru = '000000001'"); + Элемент.КраткоеПредставление = НСтр("ru = '000000001'", ОбщегоНазначения.КодОсновногоЯзыка()); Элемент.ТипыОсновногоОбъектаАдресации = ПланыВидовХарактеристик.ОбъектыАдресацииЗадач.ВсеОбъектыАдресации; Элемент.Назначение = ТабличныеЧасти.Назначение.Скопировать(); @@ -161,7 +162,7 @@ // Параметры: // Объект - СправочникОбъект.РолиИсполнителей - заполняемый объект. // Данные - СтрокаТаблицыЗначений - данные заполнения. -// ДополнительныеПараметры - Структура - Дополнительные параметры. +// ДополнительныеПараметры - Структура // Процедура ПриНачальномЗаполненииЭлемента(Объект, Данные, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form index 0631132fc..5ce594ad5 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form @@ -1449,21 +1449,34 @@ Normal - - ПарольПояснение - 741 + + ЗапомнитьПароль + 820 <key>ru</key> - <value>(для проверки)</value> + <value>Запомнить на время сеанса</value> true true true + + ЗапомнитьПароль + + Right + + ru + Запомнить пароль сертификата до закрытия программы. При снятии флажка пароль стирается из памяти, если запоминался ранее. + + Button + + OnChange + ЗапомнитьПарольПриИзменении + - ПарольПояснениеРасширеннаяПодсказка - 743 + ЗапомнитьПарольРасширеннаяПодсказка + 822 Label true true @@ -1472,18 +1485,16 @@ - ПарольПояснениеКонтекстноеМеню - 742 + ЗапомнитьПарольКонтекстноеМеню + 821 true - Label - true - - Style.ПоясняющийТекст - - - Left - + CheckBoxField + Enter + true + Left + true + true true @@ -1523,78 +1534,6 @@ Страницы 816 - - СтраницаЗапоминаниеПароля - 818 - - ЗапомнитьПароль - 820 - true - true - - true - - - ЗапомнитьПароль - - Right - - ru - Запомнить пароль сертификата до закрытия программы. При снятии флажка пароль стирается из памяти, если запоминался ранее. - - Button - - OnChange - ЗапомнитьПарольПриИзменении - - - ЗапомнитьПарольРасширеннаяПодсказка - 822 - Label - true - true - - Left - - - - ЗапомнитьПарольКонтекстноеМеню - 821 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Страница запоминание пароля</value> - - - СтраницаЗапоминаниеПароляРасширеннаяПодсказка - 819 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - СтраницаПояснениеУсиленногоПароля 823 diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl index db9140137..ff63c5338 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl @@ -22,7 +22,7 @@ Элементы.СертификатУсиленнаяЗащитаЗакрытогоКлюча.Имя, Элементы.ПояснениеУсиленногоПароля.Имя); - СертификатПараметрыРеквизитов = Новый Структура; + СертификатПараметрыРеквизитов = СертификатПараметрыРеквизитов(); Если Параметры.Свойство("Организация") Тогда СертификатПараметрыРеквизитов.Вставить("Организация", Параметры.Организация); КонецЕсли; @@ -93,6 +93,16 @@ КонецПроцедуры + +// Возвращаемое значение: +// Структура: +// * Наименование - Строка +// +&НаКлиентеНаСервереБезКонтекста +Функция СертификатПараметрыРеквизитов() + Возврат Новый Структура; +КонецФункции + &НаКлиенте Процедура ПриОткрытии(Отказ) @@ -637,6 +647,11 @@ КонецПроцедуры // Продолжение процедуры ПерейтиКВыборуТекущегоСертификата. +// +// Параметры: +// РезультатПоиска - СертификатКриптографии +// Контекст +// &НаКлиенте Процедура ПерейтиКВыборуТекущегоСертификатаПослеПоискаСертификата(РезультатПоиска, Контекст) Экспорт @@ -653,12 +668,20 @@ Контекст.Вставить("СертификатКриптографии", РезультатПоиска); - Контекст.СертификатКриптографии.НачатьВыгрузку(Новый ОписаниеОповещения( + РезультатПоиска.НачатьВыгрузку(Новый ОписаниеОповещения( "ПерейтиКВыборуТекущегоСертификатаПослеВыгрузкиСертификата", ЭтотОбъект, Контекст)); КонецПроцедуры // Продолжение процедуры ПерейтиКВыборуТекущегоСертификата. +// +// Параметры: +// РезультатПоиска - Структура: +// * Выполнено - Булево +// * ОписаниеОшибки - Структура: +// ** Описание - Строка +// Контекст - Структура +// &НаКлиенте Процедура ПерейтиКВыборуТекущегоСертификатаПослеПоискаСертификатаВОблачномСервисе(РезультатПоиска, Контекст) Экспорт @@ -708,7 +731,8 @@ Процедура ПерейтиКВыборуТекущегоСертификатаПослеЗаполненияСвойствСертификата(Контекст) Если СертификатПараметрыРеквизитов.Свойство("Наименование") Тогда - Если СертификатПараметрыРеквизитов.Наименование.ТолькоПросмотр Тогда + ПараметрыРеквизитов = СертификатПараметрыРеквизитов; // см. СертификатПараметрыРеквизитов + Если ПараметрыРеквизитов.Наименование.ТолькоПросмотр Тогда Элементы.СертификатНаименование.ТолькоПросмотр = Истина; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl index 3aef240a6..b01b2f53a 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - СертификатПараметрыРеквизитов = Новый Структура; + СертификатПараметрыРеквизитов = СертификатПараметрыРеквизитов(); Если Параметры.Свойство("Организация") Тогда СертификатПараметрыРеквизитов.Вставить("Организация", Параметры.Организация); КонецЕсли; @@ -55,6 +55,17 @@ КонецПроцедуры + +// Возвращаемое значение: +// Структура: +// * Организация +// +&НаКлиентеНаСервереБезКонтекста +Функция СертификатПараметрыРеквизитов() + ПараметрыРеквизитов = Новый Структура; + Возврат ПараметрыРеквизитов; +КонецФункции + &НаКлиенте Процедура ПриОткрытии(Отказ) @@ -280,6 +291,13 @@ КонецПроцедуры // Продолжение процедуры Далее. +// +// Параметры: +// Результат - Структура: +// * ОписаниеОшибки - Структура: +// ** Описание - Строка +// Контекст - Структура +// &НаКлиенте Процедура ДалееПослеПоискаСертификатаВОблачномСервисе(Результат, Контекст) Экспорт @@ -362,22 +380,24 @@ ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОписаниеДанныхСертификата( Форма.СертификатОписаниеДанных, СвойстваСертификата); + СертификатПараметрыРеквизитов = Форма.СертификатПараметрыРеквизитов; // см. ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатПараметрыРеквизитов СохраненныеСвойства = СохраненныеСвойстваСертификата( Форма.СертификатОтпечаток, Форма.СертификатАдрес, - Форма.СертификатПараметрыРеквизитов); + СертификатПараметрыРеквизитов); - Если Форма.СертификатПараметрыРеквизитов.Свойство("Наименование") Тогда - Если Форма.СертификатПараметрыРеквизитов.Наименование.ТолькоПросмотр Тогда + Если СертификатПараметрыРеквизитов.Свойство("Наименование") Тогда + НаименованиеСертификата = СертификатПараметрыРеквизитов.Наименование; + Если НаименованиеСертификата.ТолькоПросмотр Тогда Элементы.СертификатНаименование.ТолькоПросмотр = Истина; КонецЕсли; КонецЕсли; Если Форма.ОпределяемыйТипОрганизацияНастроен Тогда - Если Форма.СертификатПараметрыРеквизитов.Свойство("Организация") Тогда - Если Не Форма.СертификатПараметрыРеквизитов.Организация.Видимость Тогда + Если СертификатПараметрыРеквизитов.Свойство("Организация") Тогда + Если Не СертификатПараметрыРеквизитов.Организация.Видимость Тогда Элементы.СертификатОрганизация.Видимость = Ложь; - ИначеЕсли Форма.СертификатПараметрыРеквизитов.Организация.ТолькоПросмотр Тогда + ИначеЕсли СертификатПараметрыРеквизитов.Организация.ТолькоПросмотр Тогда Элементы.СертификатОрганизация.ТолькоПросмотр = Истина; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form index 0ae56a503..34b740d37 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form @@ -162,113 +162,27 @@ DontUse - - Пароль - 316 - true - true - - true - - - Пароль - - - OnChange - ПарольПриИзменении - - - ПарольРасширеннаяПодсказка - 318 - Label - true - true - - Left - - - - ПарольКонтекстноеМеню - 317 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - Normal - - - Страницы - 416 - - СтраницаЗапоминаниеПароля - 418 - - ЗапомнитьПароль - 324 - true - true - - true - - - ЗапомнитьПароль - - Right - - ru - Запомнить пароль сертификата до закрытия программы. При снятии флажка пароль стирается из памяти, если запоминался ранее. - - Button - - OnChange - ЗапомнитьПарольПриИзменении - - - ЗапомнитьПарольРасширеннаяПодсказка - 326 - Label - true - true - - Left - - - - ЗапомнитьПарольКонтекстноеМеню - 325 - true - - CheckBoxField - Enter - true - Left - true - - + ГруппаПароль + 454 + + Пароль + 316 true true true - - <key>ru</key> - <value>Страница запоминание пароля</value> - + + Пароль + + + OnChange + ПарольПриИзменении + - СтраницаЗапоминаниеПароляРасширеннаяПодсказка - 419 + ПарольРасширеннаяПодсказка + 318 Label true true @@ -276,13 +190,106 @@ Left - Page - - Vertical - auto - false + + ПарольКонтекстноеМеню + 317 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + ЗапомнитьПароль + 324 + + <key>ru</key> + <value>Запомнить на время сеанса</value> + + true + true + + true + + + ЗапомнитьПароль + + Right + + ru + Запомнить пароль сертификата до закрытия программы. При снятии флажка пароль стирается из памяти, если запоминался ранее. + + Button + + OnChange + ЗапомнитьПарольПриИзменении + + + ЗапомнитьПарольРасширеннаяПодсказка + 326 + Label + true + true + + Left + + + + ЗапомнитьПарольКонтекстноеМеню + 325 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Пароль</value> + + + ГруппаПарольРасширеннаяПодсказка + 455 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Страницы + 416 СтраницаПояснениеУсиленногоПароля 438 diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form index dac516670..e7b831a97 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form @@ -535,9 +535,7 @@ 48 <key>ru</key> - <value>Показывает установлен ли сертификат в личный список (личное хранилище) -на компьютере. Для подписания и расшифровки требуется, чтобы сертификат -был установлен в личный список на компьютере и был связан с закрытым ключом.</value> + <value>Показывает установлен ли сертификат в личный список (личное хранилище) на компьютере. Для подписания и расшифровки требуется, чтобы сертификат был установлен в личный список на компьютере и был связан с закрытым ключом.</value> Label true @@ -612,7 +610,7 @@ 179 <key>ru</key> - <value>Наличие сертификата (клиент)</value> + <value>Наличие сертификата (клиент)</value> true true @@ -970,8 +968,7 @@ 59 <key>ru</key> - <value>Показывает результат проверки данных сертификата -с помощью программы электронной подписи и шифрования. + <value>Показывает результат проверки данных сертификата с помощью программы электронной подписи и шифрования. Данные сертификата, загруженные из файла сертификата или другим путем, могут быть некорректны по разным причинам, но самые частые следующие: @@ -1410,9 +1407,7 @@ <id>23</id> <title> <key>ru</key> - <value>Показывает имеется ли на компьютере программа, -указанная в сертификате для закрытого ключа, -которая позволяет подписывать и расшифровывать данные.</value> + <value>Показывает имеется ли на компьютере программа, указанная в сертификате для закрытого ключа, которая позволяет подписывать и расшифровывать данные.</value> Label true @@ -1877,9 +1872,7 @@ 95 <key>ru</key> - <value>Показывает возможность подписания данных закрытым ключом сертификата -с помощью программы электронной подписи и шифрования. -Требуется пароль.</value> + <value>Показывает возможность подписания данных закрытым ключом сертификата с помощью программы электронной подписи и шифрования. Требуется пароль.</value> Label true @@ -2312,8 +2305,7 @@ 106 <key>ru</key> - <value>Показывает возможность проверки имеющейся подписи открытым ключом сертификата -с помощью программы электронной подписи и шифрования. + <value>Показывает возможность проверки имеющейся подписи открытым ключом сертификата с помощью программы электронной подписи и шифрования. </value> Label @@ -2389,7 +2381,7 @@ 267 <key>ru</key> - <value>Проверка подписи (клиент)</value> + <value>Проверка подписи (клиент)</value> true true @@ -2747,8 +2739,7 @@ 70 <key>ru</key> - <value>Показывает возможность шифрования данных открытым ключом сертификата -с помощью программы электронной подписи и шифрования. + <value>Показывает возможность шифрования данных открытым ключом сертификата с помощью программы электронной подписи и шифрования. </value> Label @@ -3182,9 +3173,7 @@ 81 <key>ru</key> - <value>Показывает возможность расшифровки данных закрытым ключом сертификата -с помощью программы электронной подписи и шифрования. -Требуется пароль.</value> + <value>Показывает возможность расшифровки данных закрытым ключом сертификата с помощью программы электронной подписи и шифрования. Требуется пароль.</value> Label true @@ -4559,6 +4548,19 @@ true + + ПроверкаВыполнена + 20 + + Boolean + + + true + + + true + + Проверить diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl index 525e01ecc..55e3d8989 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl @@ -41,6 +41,7 @@ Параметры.ОбъединятьРезультаты, "НеОбъединять"); Если Параметры.РезультатПроверки <> Неопределено Тогда + ПроверкаВыполнена = Истина; ПроверкиНаКлиенте = Параметры.РезультатПроверки.ПроверкиНаКлиенте; ПроверкиНаСервере = Параметры.РезультатПроверки.ПроверкиНаСервере; КонецЕсли; @@ -111,8 +112,10 @@ Элементы[Проверка + "РешениеКлиент"].Видимость = Ложь; Элементы[Проверка + "РешениеСервер"].Видимость = Ложь; - Элементы[Проверка + "Надпись"].Заголовок = - СтандартныйЗаголовокЭлемента(Проверка + "Надпись"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + Проверка + "Надпись", + "Заголовок", + СтандартныйЗаголовокЭлемента(Проверка + "Надпись")); Если ПроверкиНаКлиенте <> Неопределено Тогда ВывестиРезультатПроверки(Проверка); @@ -188,15 +191,15 @@ &НаКлиенте Процедура Подключаемый_НадписьНажатие(Элемент) + ИмяОшибки = Лев(Элемент.Имя, СтрДлина(Элемент.Имя) - СтрДлина("Надпись")) + "Ошибка"; + ПараметрыПредупреждения = Новый Структура; ПараметрыПредупреждения.Вставить("ЗаголовокПредупреждения", СтандартныйЗаголовокЭлемента(Элемент.Имя)); ПараметрыПредупреждения.Вставить("ТекстОшибкиКлиент", - ПроверкиНаКлиенте[Лев(Элемент.Имя, СтрДлина(Элемент.Имя) - 7) + "Ошибка"]); - - ТекстОшибкиСервер = ?(Не ОперацииНаСервере, "", - ПроверкиНаСервере[Лев(Элемент.Имя, СтрДлина(Элемент.Имя) - 7) + "Ошибка"]); - ПараметрыПредупреждения.Вставить("ТекстОшибкиСервер", ТекстОшибкиСервер); + ПроверкиНаКлиенте[ИмяОшибки]); + ПараметрыПредупреждения.Вставить("ТекстОшибкиСервер", + ?(Не ОперацииНаСервере, "", ПроверкиНаСервере[ИмяОшибки])); ОткрытьФорму("ОбщаяФорма.РасширенноеПредставлениеОшибки", ПараметрыПредупреждения, ЭтотОбъект); @@ -246,6 +249,13 @@ Процедура ИнформацияДляПоддержкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + Если Не ПроверкаВыполнена Тогда + + ПоказатьПредупреждение(, + НСтр("ru = 'Для сбора технической информации о возникшей проблеме необходимо выполнить проверку сертификата.'")); + Возврат; + + КонецЕсли; СоставПроверок = СтандартныеПроверки(); Для Каждого Проверка Из ДополнительныеПроверки Цикл @@ -469,8 +479,9 @@ &НаКлиенте Процедура ПроверитьНаСторонеКлиента(Оповещение) - Контекст = Новый Структура("Оповещение", Оповещение); + ПроверкаВыполнена = Истина; + Контекст = Новый Структура("Оповещение", Оповещение); Если СтандартныеПроверки Тогда ЭлектроннаяПодписьКлиент.УстановитьРасширение(Ложь, Новый ОписаниеОповещения( "ПроверитьНаСторонеКлиентаПослеПодключенияРасширенияРаботыСКриптографией", ЭтотОбъект, Контекст), @@ -542,8 +553,6 @@ Процедура ПроверитьНаСторонеКлиентаПослеИнициализацииСертификата(СертификатКриптографии, Контекст) Экспорт Контекст.Вставить("СертификатКриптографии", СертификатКриптографии); - - // Законный сертификат ПроверитьЗаконныйСертификатНаКлиенте(Контекст); // Наличие сертификата в личном списке. @@ -565,7 +574,7 @@ Процедура ПроверитьЗаконныйСертификатНаКлиенте(Контекст) Если Не Элементы.ГруппаЗаконныйСертификат.Видимость - Или Контекст.СертификатКриптографии.Субъект.Свойство("SN") Тогда + Или Контекст.СертификатКриптографии.Субъект.Свойство("SN") Тогда ОписаниеОшибки = ""; Иначе @@ -600,6 +609,12 @@ КонецПроцедуры // Продолжение процедуры ПроверитьНаСторонеКлиента. +// +// Параметры: +// Результат - Структура: +// * ОписаниеОшибки - Структура: +// ** Описание - Строка +// &НаКлиенте Процедура ПроверитьНаСторонеКлиентаПослеПоискаСертификатаВМоделиСервиса(Результат, Контекст) Экспорт @@ -673,6 +688,13 @@ КонецПроцедуры // Продолжение процедуры ПроверитьНаСторонеКлиента. +// +// Параметры: +// Результат - Структура: +// * ИнформацияОбОшибке - Структура: +// ** Описание - Строка +// Контекст - Структура +// &НаКлиенте Процедура ПроверитьНаСторонеКлиентаПослеПроверкиСертификатаВМоделиСервиса(Результат, Контекст) Экспорт @@ -803,6 +825,13 @@ КонецПроцедуры // Продолжение процедуры ПроверитьНаСторонеКлиента. +// +// Параметры: +// ДанныеПодписи - Структура: +// * ИнформацияОбОшибке - Структура: +// ** Описание - Строка +// Контекст - Структура +// &НаКлиенте Процедура ПроверитьНаСторонеКлиентаПослеПодписанияВМоделиСервиса(ДанныеПодписи, Контекст) Экспорт @@ -864,6 +893,13 @@ КонецПроцедуры // Продолжение процедуры ПроверитьНаСторонеКлиента. +// +// Параметры: +// Результат - Структура: +// * ИнформацияОбОшибке - Структура: +// ** Описание - Строка +// Контекст - Структура +// &НаКлиенте Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписиВМоделиСервиса(Результат, Контекст) Экспорт @@ -918,6 +954,13 @@ КонецПроцедуры // Продолжение процедуры ПроверитьНаСторонеКлиента. +// +// Параметры: +// Результат - Структура: +// * ИнформацияОбОшибке - Структура: +// ** Описание - Строка +// Контекст - Структура +// &НаКлиенте Процедура ПроверитьНаСторонеКлиентаПослеШифрованияВМоделиСервиса(Результат, Контекст) Экспорт @@ -971,6 +1014,13 @@ КонецПроцедуры // Продолжение процедуры ПроверитьНаСторонеКлиента. +// +// Параметры: +// Результат - Структура: +// * ИнформацияОбОшибке - Структура: +// ** Описание - Строка +// Контекст - Структура +// &НаКлиенте Процедура ПроверитьНаСторонеКлиентаПослеРасшифровкиВМоделиСервиса(Результат, Контекст) Экспорт @@ -1064,18 +1114,17 @@ &НаСервере Процедура ПроверитьНаСторонеСервера(Знач ЗначениеПароля) + ПроверкаВыполнена = Истина; + ДанныеСертификата = ПолучитьИзВременногоХранилища(АдресСертификата); АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата); Попытка СертификатКриптографии = Новый СертификатКриптографии(ДанныеСертификата); Исключение - УстановитьЭлемент(ЭтотОбъект, ИмяПервойПроверки, Истина, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), Истина, ОбъединятьРезультаты); - Возврат; - КонецПопытки; // Законный сертификат @@ -1230,6 +1279,7 @@ КонецПроцедуры + &НаСервере Процедура ПроверитьНаСторонеСервераДополнительныеПроверки(ЗначениеПароля, МенеджерКриптографии = Неопределено) @@ -1239,6 +1289,7 @@ ОписаниеОшибки = ""; ЭтоПредупреждение = Ложь; Попытка + ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("Сертификат", Сертификат); ПараметрыВыполнения.Вставить("Проверка", ЭлементСписка.Имя); @@ -1285,12 +1336,12 @@ Суффикс = ?(НаСервере, "Сервер", "Клиент"); ГруппаРешение = ГруппаФормыБезОтображения( - ИмяПроверки + "Решение" + Суффикс, Родитель); + ИмяПроверки + ?(НаСервере, "РешениеСервер", "РешениеКлиент"), Родитель); - ДобавитьКартинку(ИмяПроверки + "Решение" + Суффикс + "Картинка", - ГруппаРешение, БиблиотекаКартинок["Компьютер" + Суффикс]); + ДобавитьКартинку(ИмяПроверки + ?(НаСервере, "РешениеСерверКартинка", "РешениеКлиентКартинка"), + ГруппаРешение, БиблиотекаКартинок[?(НаСервере, "КомпьютерСервер", "КомпьютерКлиент")]); - Надпись = Элементы.Добавить(ИмяПроверки + "Решение" + Суффикс + "Надпись", + Надпись = Элементы.Добавить(ИмяПроверки + ?(НаСервере, "РешениеСерверНадпись", "РешениеКлиентНадпись"), Тип("ДекорацияФормы"), ГруппаРешение); Надпись.ЦветТекста = ЦветаСтиля.ПоясняющийТекст; @@ -1356,18 +1407,18 @@ Процедура УстановитьЭлемент(Форма, НачалоЭлемента, НаСервере, ОписаниеОшибки = Неопределено, ЭтоОшибка = Ложь, ОбъединятьРезультаты = "НеОбъединять") - ЭлементНадпись = Форма.Элементы[НачалоЭлемента + "Надпись"]; + ЭлементНадпись = Форма.Элементы[НачалоЭлемента + "Надпись"]; // Label Если ОбъединятьРезультаты = "ОбъединятьПоИ" Или ОбъединятьРезультаты = "ОбъединятьПоИли" Тогда - ЭлементКартинка = Форма.Элементы[НачалоЭлемента + "НаКлиентеКартинка"]; + ЭлементКартинка = Форма.Элементы[НачалоЭлемента + "НаКлиентеКартинка"]; // ДекорацияФормы Иначе ЭлементКартинка = Форма.Элементы[НачалоЭлемента - + ?(НаСервере, "НаСервере", "НаКлиенте") + "Картинка"]; + + ?(НаСервере, "НаСервереКартинка", "НаКлиентеКартинка")]; // ДекорацияФормы КонецЕсли; - - Проверки = Форма["Проверки" + ?(НаСервере, "НаСервере", "НаКлиенте")]; - ПроверкиВторогоКонтекста = Форма["Проверки" + ?(НаСервере, "НаКлиенте", "НаСервере")]; + + Проверки = Форма[?(НаСервере, "ПроверкиНаСервере", "ПроверкиНаКлиенте")]; + ПроверкиВторогоКонтекста = Форма[?(НаСервере, "ПроверкиНаКлиенте", "ПроверкиНаСервере")]; ЗначениеПроверкиВторогоКонтекста = Неопределено; Если ТипЗнч(ПроверкиВторогоКонтекста) = Тип("Структура") @@ -1377,7 +1428,6 @@ КонецЕсли; Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - ЗначениеПроверки = Ложь; РезультатПроверки = ЗначениеПроверки; Если ОбъединятьРезультаты = "ОбъединятьПоИли" @@ -1387,7 +1437,6 @@ КонецЕсли; Если Не РезультатПроверки Тогда - ЭлементКартинка.Картинка = ?(ЭтоОшибка, БиблиотекаКартинок.ПроверкаСертификатаОшибка, БиблиотекаКартинок.ПроверкаСертификатаПредупреждение); @@ -1399,18 +1448,17 @@ ОписаниеИзвестнойОшибки = ОшибкаПоКлассификатору(ОписаниеОшибки); ЭтоИзвестнаяОшибка = ОписаниеИзвестнойОшибки <> Неопределено; - ИмяГруппыРешение = НачалоЭлемента + "Решение" + ?(НаСервере, "Сервер", "Клиент"); + ИмяГруппыРешение = НачалоЭлемента + ?(НаСервере, "РешениеСервер", "РешениеКлиент"); Форма.Элементы[ИмяГруппыРешение].Видимость = ЭтоИзвестнаяОшибка; Если ЭтоИзвестнаяОшибка Тогда - Форма.Элементы[ИмяГруппыРешение + "Надпись"].Заголовок = ОписаниеИзвестнойОшибки.Решение; + ИмяГруппыРешениеНадпись = НачалоЭлемента + ?(НаСервере, "РешениеСерверНадпись", "РешениеКлиентНадпись"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Форма.Элементы, + ИмяГруппыРешениеНадпись, "Заголовок", ОписаниеИзвестнойОшибки.Решение); КонецЕсли; - КонецЕсли; - Иначе - ЭлементРешение = Форма.Элементы[НачалоЭлемента - + "Решение" + ?(НаСервере, "Сервер", "Клиент")]; + + ?(НаСервере, "РешениеСервер", "РешениеКлиент")]; ЗначениеПроверки = ?(ОписаниеОшибки = Неопределено, Неопределено, Истина); Если (ОбъединятьРезультаты = "ОбъединятьПоИ" Или ОбъединятьРезультаты = "ОбъединятьПоИли") Тогда @@ -1423,7 +1471,8 @@ ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка не выполнялась.'"); ЭлементНадпись.Гиперссылка = Ложь; ЭлементНадпись.Заголовок = ЗаголовокЭлемента( - Форма.ДополнительныеПроверки, ЭлементНадпись.Имя); + Форма.ДополнительныеПроверки, + ЭлементНадпись.Имя); ИначеЕсли ЗначениеПроверки = Неопределено И ЗначениеПроверкиВторогоКонтекста <> Неопределено Тогда @@ -1431,7 +1480,6 @@ Проверки.Вставить(НачалоЭлемента, ЗначениеПроверки); Проверки.Вставить(НачалоЭлемента + "Ошибка", ?(ОписаниеОшибки = Неопределено, "", ОписаниеОшибки)); - Возврат; ИначеЕсли ЗначениеПроверки <> Неопределено @@ -1443,28 +1491,21 @@ ЭлементНадпись.Гиперссылка = Ложь; ЭлементНадпись.Заголовок = ЗаголовокЭлемента( Форма.ДополнительныеПроверки, ЭлементНадпись.Имя); - Иначе - РезультатПроверки = ?(ОбъединятьРезультаты = "ОбъединятьПоИ", ЗначениеПроверки И ЗначениеПроверкиВторогоКонтекста, ЗначениеПроверки Или ЗначениеПроверкиВторогоКонтекста); Если РезультатПроверки Тогда - ЭлементРешение.Видимость = Ложь; ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех; ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'"); ЭлементНадпись.Гиперссылка = Ложь; ЭлементНадпись.Заголовок = ЗаголовокЭлемента( Форма.ДополнительныеПроверки, ЭлементНадпись.Имя); - КонецЕсли; - КонецЕсли; - Иначе - ЭлементКартинка.Картинка = ?(ОписаниеОшибки = Неопределено, БиблиотекаКартинок.ПроверкаСертификатаНеВыполнялась, БиблиотекаКартинок.ПроверкаСертификатаУспех); @@ -1480,17 +1521,14 @@ ЭлементНадпись.Гиперссылка = Ложь; ЭлементНадпись.Заголовок = ЗаголовокЭлемента( Форма.ДополнительныеПроверки, ЭлементНадпись.Имя); - КонецЕсли; - КонецЕсли; - КонецЕсли; Проверки.Вставить(НачалоЭлемента, ЗначениеПроверки); Проверки.Вставить(НачалоЭлемента + "Ошибка", ?(ОписаниеОшибки = Неопределено, "", ОписаниеОшибки)); - + КонецПроцедуры &НаКлиентеНаСервереБезКонтекста @@ -1518,18 +1556,25 @@ Если ИмяЭлемента = "ЗаконныйСертификатНадпись" Тогда Возврат НСтр("ru = 'Соответствие законодательству Российской Федерации'"); + ИначеЕсли ИмяЭлемента = "НаличиеСертификатаНадпись" Тогда Возврат НСтр("ru = 'Наличие сертификата в личном списке'"); + ИначеЕсли ИмяЭлемента = "ДанныеСертификатаНадпись" Тогда Возврат НСтр("ru = 'Корректность данных сертификата'"); + ИначеЕсли ИмяЭлемента = "НаличиеПрограммыНадпись" Тогда Возврат НСтр("ru = 'Наличие программы для подписания и расшифровки'"); + ИначеЕсли ИмяЭлемента = "ПодписаниеНадпись" Тогда Возврат НСтр("ru = 'Подписание данных'"); + ИначеЕсли ИмяЭлемента = "ПроверкаПодписиНадпись" Тогда Возврат НСтр("ru = 'Проверка созданной подписи'"); + ИначеЕсли ИмяЭлемента = "ШифрованиеНадпись" Тогда Возврат НСтр("ru = 'Шифрование данных'"); + ИначеЕсли ИмяЭлемента = "РасшифровкаНадпись" Тогда Возврат НСтр("ru = 'Расшифровка данных'"); Иначе @@ -1543,12 +1588,12 @@ &НаКлиенте Процедура ДополнитьТекстОшибками(ТекстОшибок, Проверки, НаСервере = Ложь) - СоставПроверок = ЭтотОбъект["Проверки" + ?(НаСервере, "НаСервере", "НаКлиенте")]; + СоставПроверок = ЭтотОбъект[?(НаСервере, "ПроверкиНаСервере", "ПроверкиНаКлиенте")]; Для Каждого Проверка Из Проверки Цикл Если СоставПроверок = Неопределено Тогда ТекстОшибок = ТекстОшибок + Проверка + ": " - + НСтр("ru = 'Не запускалась'") + Символы.ПС; + + НСтр("ru = 'Не выполнялась, так как не требуется (не настроено)'") + Символы.ПС; Иначе РезультатПроверки = ?(СоставПроверок.Свойство(Проверка), @@ -1558,7 +1603,7 @@ ПроверкиНаКлиенте[Проверка + "Ошибка"], ""); ТекстОшибок = ТекстОшибок + Проверка + ": " - + ?(РезультатПроверки = Неопределено, НСтр("ru = 'Не выполнялась'"), + + ?(РезультатПроверки = Неопределено, НСтр("ru = 'Не выполнялась из-за предыдущих ошибок'"), Формат(РезультатПроверки, НСтр("ru = 'БЛ=Ошибка; БИ=Успех'"))) + ?(ПустаяСтрока(ТекстОшибкиПроверки), "", ": ") + ТекстОшибкиПроверки + Символы.ПС; @@ -1571,7 +1616,7 @@ &НаСервереБезКонтекста Функция ОшибкаПоКлассификатору(ОписаниеОшибки) - Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ОписаниеОшибки); + Возврат ЭлектроннаяПодпись.ОшибкаПоКлассификатору(ОписаниеОшибки); КонецФункции diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl index 510e61933..c57746029 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl @@ -591,8 +591,8 @@ КонецФункции // Возвращаемое значение: -// Структура - со свойствами: -// * Ссылка - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - . +// Структура: +// * Ссылка - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования // &НаКлиенте Функция ОписаниеОбъекта(ЭлементДанных) @@ -620,7 +620,7 @@ КонецПроцедуры // Параметры: -// ОписаниеОбъектов - Массив из см. ОписаниеОбъекта - . +// ОписаниеОбъектов - Массив из см. ОписаниеОбъекта // &НаСервереБезКонтекста Процедура ЗаписатьСертификатыШифрованияНаСервере(ОписаниеОбъектов, ИдентификаторФормы, Ошибка) diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl index ea4239bef..4eb84c9b9 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl @@ -109,8 +109,9 @@ Продолжить; КонецЕсли; + Элемент = Элементы[ИмяРеквизита]; // ПолеФормы ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле %1 не заполнено.'"), - Элементы[ИмяРеквизита].Заголовок); + Элемент.Заголовок); ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, ИмяРеквизита,, Отказ); КонецЦикла; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl index 6260721ca..563e66a65 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl @@ -339,7 +339,7 @@ ДанныеСертификата = Выборка.ДанныеСертификата.Получить(); Если ТипЗнч(ДанныеСертификата) <> Тип("ДвоичныеДанные") Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Данные сертификата ""%1"" не найдены в справочнике'"), Выборка.Представление); + НСтр("ru = 'Данные сертификата ""%1"" не существуют в справочнике'"), Выборка.Представление); КонецЕсли; Попытка СертификатКриптографии = Новый СертификатКриптографии(ДанныеСертификата); @@ -534,8 +534,8 @@ // Продолжение процедуры ЗаполнитьПрограммуШифрования. // // Параметры: -// Контекст - Структура - со свойствами: -// * ОписаниеПрограммы - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - . +// Контекст - Структура: +// * ОписаниеПрограммы - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования // &НаКлиенте Процедура ЗаполнитьПрограммуШифрованияЦиклНачало(Контекст) @@ -565,8 +565,8 @@ // Продолжение процедуры ЗаполнитьПрограммуШифрования. // // Параметры: -// Контекст - Структура - со свойствами: -// * ОписаниеПрограммы - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - . +// Контекст - Структура: +// * ОписаниеПрограммы - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования // &НаКлиенте Процедура ЗаполнитьПрограммуШифрованияПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст) Экспорт @@ -599,8 +599,8 @@ // Продолжение процедуры ЗаполнитьПрограммуШифрования. // // Параметры: -// Контекст - Структура - со свойствами: -// * ОписаниеПрограммы - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - . +// Контекст - Структура: +// * ОписаниеПрограммы - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования // &НаКлиенте Процедура ЗаполнитьПрограммуШифрованияПослеШифрования(ЗашифрованныеДанные, Контекст) Экспорт @@ -945,7 +945,7 @@ ДанныеСертификата = Выборка.ДанныеСертификата.Получить(); Если ТипЗнч(ДанныеСертификата) <> Тип("ДвоичныеДанные") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Данные сертификата ""%1"" не найдены в справочнике'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Данные сертификата ""%1"" не существует в справочнике'"), Выборка.Наименование); КонецЕсли; @@ -996,8 +996,8 @@ КонецФункции // Возвращаемое значение: -// Структура - со свойствами: -// * Ссылка - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - . +// Структура: +// * Ссылка - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования // &НаКлиенте Функция ОписаниеОбъекта(ЭлементДанных) @@ -1025,7 +1025,7 @@ КонецПроцедуры // Параметры: -// ОписаниеОбъектов - Массив из см. ОписаниеОбъекта - . +// ОписаниеОбъектов - Массив из см. ОписаниеОбъекта // &НаСервереБезКонтекста Процедура ЗаписатьСертификатыШифрованияНаСервере(ОписаниеОбъектов, АдресСертификатов, ИдентификаторФормы, Ошибка) diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl index b460662e0..123730941 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl index 5e55090c0..eb31279f0 100644 --- a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..3c82ef846 --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,21 @@ +<?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> + <item xsi:type="OrderItemField"> + <field>РеквизитДопУпорядочивания</field> + <orderType>Asc</orderType> + </item> + <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/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбора/Form.form new file mode 100644 index 000000000..fc09a23f2 --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбора/Form.form @@ -0,0 +1,338 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns: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 + + Ссылка + 19 + + <key>ru</key> + <value>Ссылка</value> + + true + + + Список.Ссылка + + + СсылкаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Наименование + 16 + true + true + + true + + + Список.Наименование + + true + + НаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + AsFileRef + + Список.Картинка + + + CommonPicture.КоллекцияПиктограммНаличиеОригиналаПервичногоДокумента + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Список + + <key>ru</key> + <value>Список</value> + + 1 + + DynamicList + + + true + + + true + + + Список.Ссылка + +
    true
    + + ВЫБРАТЬ + СправочникСостоянияОригиналовПервичныхДокументов.Ссылка КАК Ссылка, + СправочникСостоянияОригиналовПервичныхДокументов.ПометкаУдаления КАК ПометкаУдаления, + СправочникСостоянияОригиналовПервичныхДокументов.Код КАК Код, + СправочникСостоянияОригиналовПервичныхДокументов.Наименование КАК Наименование, + СправочникСостоянияОригиналовПервичныхДокументов.Описание КАК Описание, + СправочникСостоянияОригиналовПервичныхДокументов.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, + СправочникСостоянияОригиналовПервичныхДокументов.Предопределенный КАК Предопределенный, + СправочникСостоянияОригиналовПервичныхДокументов.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + ВЫБОР + КОГДА СправочникСостоянияОригиналовПервичныхДокументов.Ссылка = ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен) + ТОГДА 1 + КОГДА СправочникСостоянияОригиналовПервичныхДокументов.Ссылка = ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана) + ТОГДА 0 + КОГДА СправочникСостоянияОригиналовПервичныхДокументов.ПометкаУдаления + ТОГДА 4 + ИНАЧЕ 3 + КОНЕЦ КАК Картинка +ИЗ + Справочник.СостоянияОригиналовПервичныхДокументов КАК СправочникСостоянияОригиналовПервичныхДокументов +ГДЕ + Не СправочникСостоянияОригиналовПервичныхДокументов.Ссылка = ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе) + И НЕ СправочникСостоянияОригиналовПервичныхДокументов.ПометкаУдаления + Catalog.СостоянияОригиналовПервичныхДокументов + true + true + true + true + true + +
    + + + + + + diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбораСостояния/Form.form b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбораСостояния/Form.form new file mode 100644 index 000000000..3c728329c --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбораСостояния/Form.form @@ -0,0 +1,431 @@ + + + + <key>ru</key> + <value>Состояния оригиналов первичных документов</value> + + + СписокСостоянийОригинала + 1 + + <key>ru</key> + <value>Список состояний оригинала</value> + + true + true + + true + + + СписокСостоянийОригинала + + None + + СписокСостоянийОригиналаПометка + 19 + true + true + + true + + + СписокСостоянийОригинала.Check + + + СписокСостоянийОригиналаПометкаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СписокСостоянийОригиналаПометкаКонтекстноеМеню + 20 + true + + CheckBoxField + Enter + true + Left + true + + + + СписокСостоянийОригиналаЗначение + 14 + true + true + + true + + + СписокСостоянийОригинала.Value + + + СписокСостоянийОригиналаЗначениеРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокСостоянийОригиналаЗначениеКонтекстноеМеню + 15 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокСостоянийОригиналаКоманднаяПанель + 3 + Left + + + СписокСостоянийОригиналаСтрокаПоиска + 5 + + СписокСостоянийОригиналаСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + СписокСостоянийОригиналаСтрокаПоискаКонтекстноеМеню + 6 + true + + СписокСостоянийОригинала + + true + + + + СписокСостоянийОригиналаСостояниеПросмотра + 8 + + СписокСостоянийОригиналаСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + СписокСостоянийОригиналаСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + СписокСостоянийОригинала + + true + + + + СписокСостоянийОригиналаУправлениеПоиском + 11 + + СписокСостоянийОригиналаУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СписокСостоянийОригиналаУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + СписокСостоянийОригинала + + true + + + + СписокСостоянийОригиналаРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + СписокСостоянийОригиналаКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + AsFileRef + + СписокСостоянийОригинала.Picture + + true + + + ФормаКоманднаяПанель + -1 + + СписокСостоянийОригиналаВыбрать + 17 + true + true + + true + + + СписокСостоянийОригиналаВыбратьРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + ГруппаУстСнятьФлажкиВидДокумента + 26 + + УстановитьВсеФлажки + 22 + true + true + + true + + + УстановитьВсеФлажкиРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.УстановитьВсеФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СнятьВсеФлажки + 24 + true + true + + true + + + СнятьВсеФлажкиРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.Command.СнятьВсеФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Уст снять флажки вид документа</value> + + + ГруппаУстСнятьФлажкиВидДокументаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + СписокСостоянийОригинала + + <key>ru</key> + <value>Список состояний оригинала</value> + + 1 + + ValueList + + + true + + + true + + + + + + + Выбрать + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать + + + true + + + + Выбрать + + + Auto + Auto + + + УстановитьВсеФлажки + + <key>ru</key> + <value>Установить все флажки</value> + + 2 + + ru + Установить все флажки + + + true + + + StdPicture.CheckAll + + + + УстановитьВсеФлажки + + + Auto + Auto + + + СнятьВсеФлажки + + <key>ru</key> + <value>Снять все флажки</value> + + 3 + + ru + Снять все флажки + + + true + + + StdPicture.UncheckAll + + + + СнятьВсеФлажки + + + Auto + Auto + + + + + + diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбораСостояния/Module.bsl b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбораСостояния/Module.bsl new file mode 100644 index 000000000..052c43a4a --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаВыбораСостояния/Module.bsl @@ -0,0 +1,61 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..3c82ef846 --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,21 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + + РеквизитДопУпорядочивания + Asc + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..3ca006b81 --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Form.form @@ -0,0 +1,369 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <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 + + Ссылка + 26 + + <key>ru</key> + <value>Ссылка</value> + + true + + + Список.Ссылка + + + СсылкаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 27 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Наименование + 23 + true + true + + true + + + Список.Наименование + + + НаименованиеРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 24 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + OnChange + СписокПриИзменении + + + СписокСтрокаПоиска + 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 + AsFileRef + + Список.Картинка + + + CommonPicture.ПиктограммыЭлементовСправочникаСостоянияОригиналовПервичныхДокументов + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
    + + ФормаКоманднаяПанель + -1 + + НастройкаПорядкаЭлементов + 21 + true + true + + true + + + <key>ru</key> + <value>Настройка порядка элементов</value> + + + НастройкаПорядкаЭлементовРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + Compact + + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + + + Список.ИмяПредопределенныхДанных + + + Список.Предопределенный + + + Список.РеквизитДопУпорядочивания + + + Список.Ссылка + +
    true
    + + ВЫБРАТЬ + СправочникСостоянияОригиналовПервичныхДокументов.Ссылка КАК Ссылка, + СправочникСостоянияОригиналовПервичныхДокументов.ПометкаУдаления КАК ПометкаУдаления, + СправочникСостоянияОригиналовПервичныхДокументов.Код КАК Код, + СправочникСостоянияОригиналовПервичныхДокументов.Наименование КАК Наименование, + СправочникСостоянияОригиналовПервичныхДокументов.Описание КАК Описание, + СправочникСостоянияОригиналовПервичныхДокументов.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, + СправочникСостоянияОригиналовПервичныхДокументов.Предопределенный КАК Предопределенный, + СправочникСостоянияОригиналовПервичныхДокументов.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + ВЫБОР + КОГДА СправочникСостоянияОригиналовПервичныхДокументов.Ссылка = ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен) + ТОГДА 1 + КОГДА СправочникСостоянияОригиналовПервичныхДокументов.Ссылка = ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана) + ТОГДА 0 + КОГДА СправочникСостоянияОригиналовПервичныхДокументов.ПометкаУдаления + ТОГДА 4 + ИНАЧЕ 3 + КОНЕЦ КАК Картинка +ИЗ + Справочник.СостоянияОригиналовПервичныхДокументов КАК СправочникСостоянияОригиналовПервичныхДокументов +ГДЕ + НЕ СправочникСостоянияОригиналовПервичныхДокументов.Ссылка = ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе) + Catalog.СостоянияОригиналовПервичныхДокументов + true + true + true + true + true + +
    + + + + + +
    diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..af2d83a07 --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,112 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // СтандартныеПодсистемы.ПодключаемыеКоманды + ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормы + +&НаКлиенте +Процедура СписокПриИзменении(Элемент) + + Оповестить("ДобавлениеУдалениеСостоянияОригиналаПервичногоДокумента"); + +КонецПроцедуры + +#КонецОбласти + + +#Область ОбработчикиКомандФормы + +// СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если Команда.Имя = "НастройкаПорядкаЭлементовОбычное_Вниз" Или Команда.Имя = "НастройкаПорядкаЭлементовОбычное_Вверх" Тогда + Если ТекущиеДанные.Ссылка = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана") + Или ТекущиеДанные.Ссылка = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен") Тогда + ПоказатьПредупреждение(,НСтр("ru='Начальное и конечное состояние перемещать нельзя.'")); + Иначе + + Если Команда.Имя = "НастройкаПорядкаЭлементовОбычное_Вниз" Тогда + Перемещать = ВозможностьПеремещения("Вниз",ТекущиеДанные.РеквизитДопУпорядочивания); + ИначеЕсли Команда.Имя = "НастройкаПорядкаЭлементовОбычное_Вверх" Тогда + Перемещать = ВозможностьПеремещения("Вверх",ТекущиеДанные.РеквизитДопУпорядочивания); + КонецЕсли; + + Если Перемещать Тогда + ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); + Иначе + ПоказатьПредупреждение(,НСтр("ru = 'Начальное и конечное состояние перемещать нельзя.'")); + КонецЕсли; + + КонецЕсли; + Иначе + ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); +КонецПроцедуры +//Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ВозможностьПеремещения(Перемещение, НомерПорядка); + + Запрос = Новый Запрос; + Запрос.Текст ="ВЫБРАТЬ + | СостоянияОригиналовПервичныхДокументов.Ссылка КАК Ссылка + |ИЗ + | Справочник.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов + |ГДЕ + | СостоянияОригиналовПервичныхДокументов.РеквизитДопУпорядочивания > &НомерПорядка + | И СостоянияОригиналовПервичныхДокументов.Ссылка <> ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана) + | И СостоянияОригиналовПервичныхДокументов.Ссылка <> ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе) + | И СостоянияОригиналовПервичныхДокументов.Ссылка <> ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен)"; + + Если Перемещение = "Вверх" Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст,"> &НомерПорядка","< &НомерПорядка"); + КонецЕсли; + + Запрос.УстановитьПараметр("НомерПорядка", НомерПорядка); + + Выборка = Запрос.Выполнить(); + + Если Не Выборка.Пустой() Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..4ed26a27a --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,128 @@ + + + + Наименование + 4 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Описание + 7 + true + true + + true + + + Объект.Описание + + Left + + ОписаниеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ОписаниеКонтекстноеМеню + 8 + true + + InputField + Auto + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + true + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + CatalogObject.СостоянияОригиналовПервичныхДокументов + + + true + + + true + +
    true
    + true +
    + + + + + + + BeforeWrite + ПередЗаписью + + +
    diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..6877dc403 --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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/Catalogs/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl new file mode 100644 index 000000000..4d0facc23 --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl @@ -0,0 +1,54 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт + + Настройки.ПриНачальномЗаполненииЭлемента = Ложь; + +КонецПроцедуры + +// Вызывается при начальном заполнении справочника. +// +// Параметры: +// КодыЯзыков - Массив - список языков конфигурации. Актуально для мультиязычных конфигураций. +// Элементы - ТаблицаЗначений - данные заполнения. Состав колонок соответствует набору реквизитов +// справочника РолиИсполнителей. +// +Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы, ТабличныеЧасти) Экспорт + + Элемент = Элементы.Добавить(); + Элемент.ИмяПредопределенныхДанных = "ФормаНапечатана"; + Элемент.Наименование = НСтр("ru='Форма напечатана'",ОбщегоНазначения.КодОсновногоЯзыка()); + Элемент.Описание = НСтр("ru='Состояние, означающее, что печатная форма только печаталась.'") ; + Элемент.Код = "000000001"; + Элемент.РеквизитДопУпорядочивания = "1"; + + Элемент = Элементы.Добавить(); + Элемент.ИмяПредопределенныхДанных = "ОригиналыНеВсе"; + Элемент.Наименование = НСтр("ru='Оригиналы не все'",ОбщегоНазначения.КодОсновногоЯзыка()); + Элемент.Описание = НСтр("ru='Общее состояние для документа, у которого оригиналы печатных форм находятся в разных состояниях.'"); + Элемент.Код = "000000002"; + Элемент.РеквизитДопУпорядочивания = "99998"; + + Элемент = Элементы.Добавить(); + Элемент.ИмяПредопределенныхДанных = "ОригиналПолучен"; + Элемент.Наименование = НСтр("ru='Оригинал получен'",ОбщегоНазначения.КодОсновногоЯзыка()); + Элемент.Описание = НСтр("ru='Состояние, означающее, что подписанный оригинал печатной формы есть в наличии.'"); + Элемент.Код = "000000003"; + Элемент.РеквизитДопУпорядочивания = "99999"; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли + diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/СостоянияОригиналовПервичныхДокументов.mdo b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/СостоянияОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..48f27c094 --- /dev/null +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/СостоянияОригиналовПервичныхДокументов.mdo @@ -0,0 +1,229 @@ + + + + + + + + + + СостоянияОригиналовПервичныхДокументов + + ru + Состояния оригиналов первичных документов + + true + Catalog.СостоянияОригиналовПервичныхДокументов.StandardAttribute.Description + Catalog.СостоянияОригиналовПервичныхДокументов.StandardAttribute.Code + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + true + + Use + + + + + Use + Description + + ShowError + Use + + + + + Use + Code + + Use + + + + Use + Managed + Use + + ru + Состояние оригинала + + + ru + Состояние оригинала первичного документа + + + ru + Состояния оригиналов + + + ru + Состояния оригиналов первичных документов + + 2 + true + 9 + 50 + String + Variable + true + true + AsDescription + + + ОригиналПолучен + Оригинал получен + + 000000003 + + + + ОригиналыНеВсе + Оригиналы не все + + 000000002 + + + + ФормаНапечатана + Форма напечатана + + 000000001 + + + + AutoUpdate + InDialog + BothWays + Catalog.СостоянияОригиналовПервичныхДокументов.Form.ФормаЭлемента + Catalog.СостоянияОригиналовПервичныхДокументов.Form.ФормаСписка + Catalog.СостоянияОригиналовПервичныхДокументов.Form.ФормаВыбора + + Описание + + ru + Описание + + + String + + + + ru + Полное описание назначения состояния оригинала + + true + + + + Use + Use + + + РеквизитДопУпорядочивания + + ru + Порядок + + + Number + + 5 + true + + + + + + IndexWithAdditionalOrder + Use + Use + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + + ФормаВыбораСостояния + + ru + Форма выбора состояния + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl index 943f48e92..ef253fafd 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl @@ -117,6 +117,7 @@ &НаКлиенте Процедура ОткрытьФормуЭлементаКлассификатора(ДанныеЗаполнения, ЭтоНовый = Ложь) + Если ДанныеЗаполнения=Неопределено Тогда Возврат; КонецЕсли; @@ -129,11 +130,10 @@ Иначе ПараметрыФормы.Вставить("ТолькоПросмотр", Истина); КонецЕсли; - Форма = ОткрытьФорму("Справочник.СтраныМира.ФормаОбъекта", ПараметрыФормы, Элементы.Классификатор); - Если Не ЭтоНовый И Форма.АвтоЗаголовок Тогда - Форма.АвтоЗаголовок = Ложь; - Форма.Заголовок = ДанныеЗаполнения.Наименование + ПредставлениеОбъектаКлассификатора; - КонецЕсли; + ПараметрыФормы.Вставить("Заголовок", ДанныеЗаполнения.Наименование + ПредставлениеОбъектаКлассификатора); + + ОткрытьФорму("Справочник.СтраныМира.ФормаОбъекта", ПараметрыФормы, Элементы.Классификатор); + КонецПроцедуры &НаКлиенте @@ -163,6 +163,11 @@ КонецПроцедуры +// Параметры: +// Результат - КодВозвратаДиалога +// ДополнительныеПараметры - Структура: +// * Ссылка - СправочникСсылка.СтраныМира +// &НаКлиенте Процедура ПослеВопросаПроОбновление(Результат, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form index f6b72fc3c..24a08ed21 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form @@ -385,6 +385,13 @@
    true
    true + + Заголовок + + String + + + diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl index 1ab1632fa..033a9a37b 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl @@ -16,6 +16,11 @@ Элементы.ГруппаНаименование.ТолькоПросмотр = Истина; КонецЕсли; + Если ЗначениеЗаполнено(Параметры.Заголовок) Тогда + Заголовок = Параметры.Заголовок; + АвтоЗаголовок = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl index 116abe0ab..b6ae8fe58 100644 --- a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -62,18 +63,19 @@ // Рекомендуется использовать УправлениеКонтактнойИнформацией.ДанныеСтраныМира. // // Параметры: -// КодСтраны - Строка, Число - код страны по классификатору. Если не указано, то поиск по коду не производится. +// КодСтраны - Строка +// - Число - код страны по классификатору. Если не указано, то поиск по коду не производится. // Наименование - Строка - наименование страны. Если не указано, то поиск по наименованию не производится. // // Возвращаемое значение: -// Структура - поля: -// * Код - Строка - реквизит найденной страны. -// * Наименование - Строка - реквизит найденной страны. -// * НаименованиеПолное - Строка - реквизит найденной страны. -// * КодАльфа2 - Строка - реквизит найденной страны. -// * КодАльфа3 - Строка - реквизит найденной страны. -// * Ссылка - СправочникаСсылка.СтраныМира - реквизит найденной страны. -// Неопределено - страна не найдена. +// Структура: +// * Код - Строка +// * Наименование - Строка +// * НаименованиеПолное - Строка +// * КодАльфа2 - Строка +// * КодАльфа3 - Строка +// * Ссылка - СправочникаСсылка.СтраныМира +// Неопределено - страна не существует. // Функция ДанныеСтраныМира(Знач КодСтраны = Неопределено, Знач Наименование = Неопределено) Экспорт Возврат УправлениеКонтактнойИнформацией.ДанныеСтраныМира(КодСтраны, Наименование); @@ -83,17 +85,18 @@ // Рекомендуется использовать УправлениеКонтактнойИнформацией.ДанныеКлассификатораСтранМираПоКоду. // // Параметры: -// Код - Строка, Число - код страны по классификатору. +// Код - Строка +// - Число - код страны по классификатору. // ТипКода - Строка - Варианты: КодСтраны (по умолчанию), Альфа2, Альфа3. // // Возвращаемое значение: -// Структура - поля: -// * Код - Строка - реквизит найденной страны. -// * Наименование - Строка - реквизит найденной страны. -// * НаименованиеПолное - Строка - реквизит найденной страны. -// * КодАльфа2 - Строка - реквизит найденной страны. -// * КодАльфа3 - Строка - реквизит найденной страны. -// Неопределено - страна не найдена. +// Структура: +// * Код - Строка +// * Наименование - Строка +// * НаименованиеПолное - Строка +// * КодАльфа2 - Строка +// * КодАльфа3 - Строка +// Неопределено - страна не существует. // Функция ДанныеКлассификатораСтранМираПоКоду(Знач Код, ТипКода = "КодСтраны") Экспорт Возврат УправлениеКонтактнойИнформацией.ДанныеКлассификатораСтранМираПоКоду(Код, ТипКода); @@ -106,13 +109,13 @@ // Наименование - Строка - наименование страны. // // Возвращаемое значение: -// Структура - поля: -// * Код - Строка - реквизит найденной страны. -// * Наименование - Строка - реквизит найденной страны. -// * НаименованиеПолное - Строка - реквизит найденной страны. -// * КодАльфа2 - Строка - реквизит найденной страны. -// * КодАльфа3 - Строка - реквизит найденной страны. -// Неопределено - страна не найдена. +// Структура: +// * Код - Строка +// * Наименование - Строка +// * НаименованиеПолное - Строка +// * КодАльфа2 - Строка +// * КодАльфа3 - Строка +// Неопределено - страна не существует. // Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт Возврат УправлениеКонтактнойИнформацией.ДанныеКлассификатораСтранМираПоНаименованию(Наименование); @@ -180,6 +183,13 @@ НоваяСтрока.КодАльфа3 = "GMB"; НоваяСтрока.НаименованиеПолное = НСтр("ru = 'Республика Гамбия'"); + НоваяСтрока = СписокСтран.Добавить(); + НоваяСтрока.Код = "807"; + НоваяСтрока.Наименование = НСтр("ru = 'РЕСПУБЛИКА МАКЕДОНИЯ'"); + НоваяСтрока.КодАльфа2 = "MK"; + НоваяСтрока.КодАльфа3 = "MKD"; + НоваяСтрока.НаименованиеПолное = НСтр("ru = 'Республика Македония'"); + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СписокСтран.Код КАК Код, @@ -229,6 +239,8 @@ СтранаМира = СтранаМираСсылка.Ссылка.ПолучитьОбъект(); ЗаполнитьЗначенияСвойств(СтранаМира, ДанныеКлассификатора); ОбновлениеИнформационнойБазы.ЗаписатьДанные(СтранаМира); + Иначе + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(СтранаМираСсылка.Ссылка); КонецЕсли; // Обновление наименований diff --git a/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl b/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl index aad6e356d..2548cb15d 100644 --- a/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl index e7569993a..068732bfd 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl index c0b9772bf..ec189d0e3 100644 --- a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl index a535ef5ea..693e0ff56 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl @@ -141,7 +141,7 @@ Процедура ПроверкаСуществованияКаталогаЗавершение(Существует, ДополнительныеПараметры) Экспорт Если Не Существует Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Путь к каталогу копирования некорректен.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Указанная папка не существует.'")); Иначе ПравоЗаписиВКаталог(Новый ОписаниеОповещения("ПослеПроверкиЗаписиВКаталог", ЭтотОбъект)); КонецЕсли; @@ -189,13 +189,7 @@ КонецЕсли; ПолноеИмяТекущегоФайла = ТекущийФайл.ПолноеИмя; - КаталогДляКопирования = ПутьКПапкеДляКопирования + ПутьДня + ПолучитьРазделительПути(); - - ПараметрыТекущегоФайла = Новый Структура; - ПараметрыТекущегоФайла.Вставить("ИтоговоеОповещение", ДополнительныеПараметры.ИтоговоеОповещение); - ПараметрыТекущегоФайла.Вставить("ТекущийФайл", ТекущийФайл); - ПараметрыТекущегоФайла.Вставить("ПоследняяИтерация", ПоследняяИтерация); - ПараметрыТекущегоФайла.Вставить("КаталогДляКопирования", КаталогДляКопирования); + ПараметрыТекущегоФайла = ПараметрыТекущегоФайла(ДополнительныеПараметры, ПоследняяИтерация, ТекущийФайл); Если Не ПустаяСтрока(ПутьКПапкеДляКопирования) Тогда @@ -211,6 +205,28 @@ КонецПроцедуры + +// Возвращаемое значение: +// Структура: +// * КаталогДляКопирования - Строка +// * ПоследняяИтерация - Булево +// * ТекущийФайл - ОпределяемыйТип.ПрисоединенныйФайл: +// ** Имя - Строка +// * ИтоговоеОповещение - ОписаниеОповещения +// +&НаКлиенте +Функция ПараметрыТекущегоФайла(ДополнительныеПараметры, Знач ПоследняяИтерация, Знач ТекущийФайл) + КаталогДляКопирования = ПутьКПапкеДляКопирования + ПутьДня + ПолучитьРазделительПути(); + + ПараметрыТекущегоФайла = Новый Структура; + ПараметрыТекущегоФайла.Вставить("ИтоговоеОповещение", ДополнительныеПараметры.ИтоговоеОповещение); + ПараметрыТекущегоФайла.Вставить("ТекущийФайл", ТекущийФайл); + ПараметрыТекущегоФайла.Вставить("ПоследняяИтерация", ПоследняяИтерация); + ПараметрыТекущегоФайла.Вставить("КаталогДляКопирования", КаталогДляКопирования); + Возврат ПараметрыТекущегоФайла +КонецФункции + + &НаКлиенте Процедура ПроверкаСуществованияФайлаЗавершение(ФайлСуществует, ДополнительныеПараметры) Экспорт @@ -223,6 +239,10 @@ КонецПроцедуры +// Параметры: +// КаталогСуществует - Булево +// ДополнительныеПараметры - см. ПараметрыТекущегоФайла +// &НаКлиенте Процедура КаталогДняСуществуетЗавершение(КаталогСуществует, ДополнительныеПараметры) Экспорт @@ -236,9 +256,12 @@ КонецПроцедуры +// Параметры: +// ИмяКаталога - Строка +// ДополнительныеПараметры - см. ПараметрыТекущегоФайла +// &НаКлиенте Процедура СоздатьКаталогДняЗавершение(ИмяКаталога, ДополнительныеПараметры) Экспорт - КонечноеИмяФайла = ДополнительныеПараметры.КаталогДляКопирования + ДополнительныеПараметры.ТекущийФайл.Имя; Файл = Новый Файл(КонечноеИмяФайла); Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения("ПроверкаСуществованияКонечногоФайлаЗавершение", ЭтотОбъект, ДополнительныеПараметры)); @@ -307,9 +330,7 @@ ИтоговоеОповещение = ДополнительныеПараметры.ИтоговоеОповещение; // ОписаниеОповещения ПараметрыИтоговогоОповещения = ИтоговоеОповещение.ДополнительныеПараметры; - СтруктураОшибки = Новый Структура; - СтруктураОшибки.Вставить("Имя", ИмяТекущегоФайла); - СтруктураОшибки.Вставить("Ошибка", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + СтруктураОшибки = СтруктураОшибки(ИмяТекущегоФайла, ИнформацияОбОшибке); МассивФайловСОшибками = ПараметрыИтоговогоОповещения.МассивФайловСОшибками; // Массив МассивФайловСОшибками.Добавить(СтруктураОшибки); @@ -326,11 +347,24 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Имя - Строка +// * Ошибка - Строка +// +&НаКлиенте +Функция СтруктураОшибки(ИмяТекущегоФайла, ИнформацияОбОшибке) + СтруктураОшибки = Новый Структура; + СтруктураОшибки.Вставить("Имя", ИмяТекущегоФайла); + СтруктураОшибки.Вставить("Ошибка", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Возврат СтруктураОшибки; +КонецФункции + &НаКлиенте Процедура ПослеОбработкиФайлов(Результат, ДополнительныеПараметры) Экспорт ЧислоУдаленныхФайлов = ДополнительныеПараметры.ЧислоУдаленныхФайлов; - МассивФайловСОшибками = ДополнительныеПараметры.МассивФайловСОшибками; + МассивФайловСОшибками = ДополнительныеПараметры.МассивФайловСОшибками;// Массив из см. СтруктураОшибки Если ЧислоУдаленныхФайлов <> 0 Тогда ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -443,11 +477,11 @@ &НаКлиенте Процедура ОбработатьОшибкуПравДоступа(ИнформацияОбОшибке, ИсходноеОповещение) - ШаблонОшибки = НСтр("ru = 'Путь каталога для копирования некорректен. - |Возможно учетная запись, от лица которой работает - |сервер 1С:Предприятия, не имеет прав доступа к указанному каталогу. - | - |%1'"); + ШаблонОшибки = НСтр("ru = 'Некорректная папка для копирования. + |Возможно учетная запись, от лица которой работает + |сервер 1С:Предприятия, не имеет прав доступа к указанной папке. + | + |%1'"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , , "ПутьКПапкеДляКопирования"); @@ -471,6 +505,10 @@ КонецПроцедуры +// Параметры: +// ОтчетОбОшибках - ТабличныйДокумент +// МассивФайловСОшибками - Массив из см. СтруктураОшибки +// &НаСервере Процедура СформироватьОтчетОбОшибках(ОтчетОбОшибках, МассивФайловСОшибками) diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl index bee72b7d8..ab53e7119 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; @@ -37,6 +38,10 @@ #Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. +// +// Параметры: +// Запросы - Массив +// Процедура ДобавитьЗапросыНаИспользованиеВнешнихРесурсовВсехТомов(Запросы) Экспорт Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -65,6 +70,10 @@ КонецПроцедуры // Только для внутреннего использования. +// +// Параметры: +// Запросы - Массив +// Процедура ДобавитьЗапросыНаОтменуИспользованияВнешнихРесурсовВсехТомов(Запросы) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form index 38f37f1fa..64d5303d7 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form @@ -11,7 +11,7 @@ 207 <key>ru</key> - <value>Создание учетной записи электронной почты</value> + <value>Введите настройки почты</value> true true @@ -46,46 +46,6 @@ Left
    - - НадписьУчетнаяЗаписьНеНастроена - 5 - - <key>ru</key> - <value>Для отправки писем необходимо настроить -учетную запись электронной почты. </value> - - true - - true - - - НадписьУчетнаяЗаписьНеНастроенаРасширеннаяПодсказка - 7 - Label - true - true - - Left - - - - НадписьУчетнаяЗаписьНеНастроенаКонтекстноеМеню - 6 - true - - Label - true - - System.DefaultGUIFont - true - false - false - false - - - Left - - НеУдалосьПодключитьсяКартинкаИНадпись 158 @@ -424,6 +384,10 @@ ИспользоватьДляОтправки 191 + + <key>ru</key> + <value>Для отправки писем</value> + true true @@ -458,6 +422,10 @@ ИспользоватьДляПолучения 194 + + <key>ru</key> + <value>Для получения писем</value> + true true @@ -496,7 +464,7 @@ <key>ru</key> - <value>Использовать учетную запись</value> + <value>Почта будет использоваться</value> ИспользоватьУчетнуюЗаписьРасширеннаяПодсказка @@ -559,7 +527,7 @@ ru - Для всех + Всеми пользователями (общая почта) Общая @@ -568,7 +536,7 @@ ru - Только для меня + Только мной Персональная @@ -582,10 +550,6 @@ true - - <key>ru</key> - <value>Для кого учетная запись</value> - ДляКогоУчетнаяЗаписьРасширеннаяПодсказка 248 @@ -603,7 +567,6 @@ NormalSeparation true true - auto Auto Auto @@ -730,99 +693,6 @@ Auto - - СпособНастройкиУчетнойЗаписи - 154 - - СпособНастройки - 50 - - <key>ru</key> - <value>Настроить</value> - - true - true - - true - - - СпособНастройки - - None - - OnChange - СпособНастройкиПриИзменении - - - СпособНастройкиРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - - СпособНастройкиКонтекстноеМеню - 51 - true - - RadioButtonField - Enter - true - Left - true - - RadioButtons - 1 - - - ru - Определить параметры подключения автоматически (рекомендуется) - - - Автоматически - - - - - ru - Настроить параметры подключения вручную - - - Вручную - - - Vertical - - - true - true - - true - - - СпособНастройкиУчетнойЗаписиРасширеннаяПодсказка - 155 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - true true @@ -852,21 +722,28 @@ НастройкаСервераИсходящейПочты 38 - - НастройкаСервераИсходящейПочтыЗаголовок - 210 + + Протокол + 116 <key>ru</key> - <value>Настройка сервера исходящей почты</value> + <value>Тип учетной записи</value> true true true + + Протокол + + + OnChange + ПротоколПриИзменении + - НастройкаСервераИсходящейПочтыЗаголовокРасширеннаяПодсказка - 212 + ПротоколРасширеннаяПодсказка + 118 Label true true @@ -875,32 +752,48 @@ - НастройкаСервераИсходящейПочтыЗаголовокКонтекстноеМеню - 211 + ПротоколКонтекстноеМеню + 117 true - Label - true - - System.DefaultGUIFont - true - false - false - false - - - Left + InputField + true + Enter + true + Left + true + + 8 + true + true + false + true + true + true + true + true + + + IMAP + + + + + POP + + + Normal - ЛогинИПарольПриОтправкеПисем - 78 + ПротоколИПортСервераВходящейПочты + 114 - ИмяПользователяДляОтправкиПисем - 80 + СерверВходящейПочты + 111 <key>ru</key> - <value>Имя пользователя</value> + <value>Сервер IMAP</value> true true @@ -908,11 +801,12 @@ true - ИмяПользователяДляОтправкиПисем + СерверВходящейПочты + Top - ИмяПользователяДляОтправкиПисемРасширеннаяПодсказка - 82 + СерверВходящейПочтыРасширеннаяПодсказка + 113 Label true true @@ -921,8 +815,8 @@ - ИмяПользователяДляОтправкиПисемКонтекстноеМеню - 81 + СерверВходящейПочтыКонтекстноеМеню + 112 true InputField @@ -932,7 +826,7 @@ Left true - 25 + 22 true true false @@ -945,11 +839,11 @@ - ПарольДляОтправкиПисем - 83 + ПортВходящейПочты + 119 <key>ru</key> - <value>Пароль</value> + <value>Порт</value> true true @@ -957,11 +851,12 @@ true - ПарольДляОтправкиПисем + ПортСервераВходящейПочты + Top - ПарольДляОтправкиПисемРасширеннаяПодсказка - 85 + ПортВходящейПочтыРасширеннаяПодсказка + 121 Label true true @@ -970,8 +865,8 @@ - ПарольДляОтправкиПисемКонтекстноеМеню - 84 + ПортВходящейПочтыКонтекстноеМеню + 120 true InputField @@ -981,12 +876,9 @@ Left true - 25 true true - false true - true true true true @@ -994,14 +886,72 @@ Normal + + ШифрованиеПриПолученииПочты + 265 + true + true + + true + + + ШифрованиеПриПолученииПочты + + Top + + OnChange + ШифрованиеПриПолученииПочтыПриИзменении + + + ШифрованиеПриПолученииПочтыРасширеннаяПодсказка + 267 + Label + true + true + + Left + + + + ШифрованиеПриПолученииПочтыКонтекстноеМеню + 266 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + STARTTLS + + + Авто + + + + + ru + SSL + + + SSL + + + Vertical + + true true true - ЛогинИПарольПриОтправкеПисемРасширеннаяПодсказка - 79 + ПротоколИПортСервераВходящейПочтыРасширеннаяПодсказка + 115 Label true true @@ -1011,9 +961,8 @@ UsualGroup - Vertical + HorizontalIfPossible Auto - NormalSeparation true true Auto @@ -1028,7 +977,7 @@ 91 <key>ru</key> - <value>Сервер</value> + <value>Сервер SMTP</value> true true @@ -1038,6 +987,7 @@ СерверИсходящейПочты + Top СерверИсходящейПочтыРасширеннаяПодсказка 93 @@ -1087,6 +1037,7 @@ ПортСервераИсходящейПочты + Top ПортСервераИсходящейПочтыРасширеннаяПодсказка 96 @@ -1119,6 +1070,64 @@ Normal + + ШифрованиеПриОтправкеПочты + 262 + true + true + + true + + + ШифрованиеПриОтправкеПочты + + Top + + OnChange + ШифрованиеПриОтправкеПочтыПриИзменении + + + ШифрованиеПриОтправкеПочтыРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + + ШифрованиеПриОтправкеПочтыКонтекстноеМеню + 263 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + STARTTLS + + + Авто + + + + + ru + SSL + + + SSL + + + Vertical + + true true @@ -1144,674 +1153,6 @@ Auto
    - - ШифрованиеПриОтправкеПочты - 262 - true - true - - true - - - ШифрованиеПриОтправкеПочты - - - OnChange - ШифрованиеПриОтправкеПочтыПриИзменении - - - ШифрованиеПриОтправкеПочтыРасширеннаяПодсказка - 264 - Label - true - true - - Left - - - - ШифрованиеПриОтправкеПочтыКонтекстноеМеню - 263 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Авто - - - Авто - - - - - ru - Всегда (SSL) - - - SSL - - - Vertical - - - - ДлительностьОжиданияИсходящейПочты - 179 - - ДлительностьОжиданияСервераПриОтправкеПисем - 181 - - <key>ru</key> - <value>Длительность ожидания сервера</value> - - true - true - - true - - - ДлительностьОжиданияСервераПриОтправкеПисем - - - ДлительностьОжиданияСервераПриОтправкеПисемРасширеннаяПодсказка - 183 - Label - true - true - - Left - - - - ДлительностьОжиданияСервераПриОтправкеПисемКонтекстноеМеню - 182 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - true - - 5 - - Normal - - - - НадписьСекунд1 - 184 - - <key>ru</key> - <value>сек.</value> - - true - true - - true - - - НадписьСекунд1РасширеннаяПодсказка - 186 - Label - true - true - - Left - - - - НадписьСекунд1КонтекстноеМеню - 185 - true - - Label - true - - Left - - - true - - true - - - ДлительностьОжиданияИсходящейПочтыРасширеннаяПодсказка - 180 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - Группа1 - 187 - true - true - - true - - - Группа1РасширеннаяПодсказка - 188 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройка сервера исходящей почты</value> - - - НастройкаСервераИсходящейПочтыРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - Page - - Vertical - auto - false - -
    - - НастройкаСервераВходящейПочты - 40 - - НастройкаСервераВходящейПочтыЗаголовок - 213 - - <key>ru</key> - <value>Настройка сервера входящей почты</value> - - true - true - - true - - - НастройкаСервераВходящейПочтыЗаголовокРасширеннаяПодсказка - 215 - Label - true - true - - Left - - - - НастройкаСервераВходящейПочтыЗаголовокКонтекстноеМеню - 214 - true - - Label - true - - System.DefaultGUIFont - true - false - false - false - - - Left - - - - ИмяПользователяДляПолученияПисем - 100 - - <key>ru</key> - <value>Имя пользователя</value> - - true - true - - true - - - ИмяПользователяДляПолученияПисем - - - ИмяПользователяДляПолученияПисемРасширеннаяПодсказка - 102 - Label - true - true - - Left - - - - ИмяПользователяДляПолученияПисемКонтекстноеМеню - 101 - true - - InputField - true - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - true - Normal - - - - ПарольДляПолученияПисем - 103 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - ПарольДляПолученияПисем - - - ПарольДляПолученияПисемРасширеннаяПодсказка - 105 - Label - true - true - - Left - - - - ПарольДляПолученияПисемКонтекстноеМеню - 104 - true - - InputField - true - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - true - true - Normal - - - - НастройкиСервераВходящейПочты - 109 - - Протокол - 116 - - <key>ru</key> - <value>Протокол</value> - - true - true - - true - - - Протокол - - - OnChange - ПротоколПриИзменении - - - ПротоколРасширеннаяПодсказка - 118 - Label - true - true - - Left - - - - ПротоколКонтекстноеМеню - 117 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - false - true - true - true - true - true - - - IMAP - - - - - POP - - - Normal - - - - ПротоколИПортСервераВходящейПочты - 114 - - СерверВходящейПочты - 111 - - <key>ru</key> - <value>Сервер</value> - - true - true - - true - - - СерверВходящейПочты - - Left - - СерверВходящейПочтыРасширеннаяПодсказка - 113 - Label - true - true - - Left - - - - СерверВходящейПочтыКонтекстноеМеню - 112 - true - - InputField - true - Enter - true - Left - true - - 22 - true - true - false - true - true - true - true - true - Normal - - - - ПортВходящейПочты - 119 - - <key>ru</key> - <value>Порт</value> - - true - true - - true - - - ПортСервераВходящейПочты - - - ПортВходящейПочтыРасширеннаяПодсказка - 121 - Label - true - true - - Left - - - - ПортВходящейПочтыКонтекстноеМеню - 120 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - ПротоколИПортСервераВходящейПочтыРасширеннаяПодсказка - 115 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ТипСоединенияИДлительностьОжидания - 122 - true - true - - true - - - ТипСоединенияИДлительностьОжиданияРасширеннаяПодсказка - 123 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ШифрованиеПриПолученииПочты - 265 - true - true - - true - - - ШифрованиеПриПолученииПочты - - - OnChange - ШифрованиеПриПолученииПочтыПриИзменении - - - ШифрованиеПриПолученииПочтыРасширеннаяПодсказка - 267 - Label - true - true - - Left - - - - ШифрованиеПриПолученииПочтыКонтекстноеМеню - 266 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Авто - - - Авто - - - - - ru - Всегда (SSL) - - - SSL - - - Vertical - - - true - true - - true - - - НастройкиСервераВходящейПочтыРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - ОставлятьПисьмаНаСервере 135 @@ -2036,237 +1377,11 @@ <key>ru</key> - <value>Настройка сервера входящей почты</value> + <value>Настройка сервера исходящей почты</value> - НастройкаСервераВходящейПочтыРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - ДополнительныеНастройки - 42 - - ДополнительныеНастройкиЗаголовок - 229 - - <key>ru</key> - <value>Дополнительные настройки</value> - - true - true - - true - - - ДополнительныеНастройкиЗаголовокРасширеннаяПодсказка - 231 - Label - true - true - - Left - - - - ДополнительныеНастройкиЗаголовокКонтекстноеМеню - 230 - true - - Label - true - - System.DefaultGUIFont - true - false - false - false - - - Left - - - - НазваниеУчетнойЗаписи - 148 - true - true - - true - - - НазваниеУчетнойЗаписи - - - НазваниеУчетнойЗаписиРасширеннаяПодсказка - 150 - Label - true - true - - Left - - - - НазваниеУчетнойЗаписиКонтекстноеМеню - 149 - true - - InputField - true - Enter - true - Left - true - - 25 - true - true - true - true - true - true - true - Normal - - - - ДлительностьОжидания - 127 - - ДлительностьОжиданияСервераПриПолученииПисем - 129 - - <key>ru</key> - <value>Длительность ожидания сервера</value> - - true - true - - true - - - ДлительностьОжиданияСервера - - - ДлительностьОжиданияСервераПриПолученииПисемРасширеннаяПодсказка - 131 - Label - true - true - - Left - - - - ДлительностьОжиданияСервераПриПолученииПисемКонтекстноеМеню - 130 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - true - - 5 - - Normal - - - - НадписьСекунд - 132 - - <key>ru</key> - <value>сек.</value> - - true - true - - true - - - НадписьСекундРасширеннаяПодсказка - 134 - Label - true - true - - Left - - - - НадписьСекундКонтекстноеМеню - 133 - true - - Label - true - - Left - - - true - true - - true - - - ДлительностьОжиданияРасширеннаяПодсказка - 128 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Дополнительные настройки</value> - - - ДополнительныеНастройкиРасширеннаяПодсказка - 43 + НастройкаСервераИсходящейПочтыРасширеннаяПодсказка + 39 Label true true @@ -2284,46 +1399,6 @@ ПроверкаНастроекУчетнойЗаписи 34 - - ПроверкаНастроекУчетнойЗаписиЗаголовок - 232 - - <key>ru</key> - <value>Проверка настроек учетной записи</value> - - true - true - - true - - - ПроверкаНастроекУчетнойЗаписиЗаголовокРасширеннаяПодсказка - 234 - Label - true - true - - Left - - - - ПроверкаНастроекУчетнойЗаписиЗаголовокКонтекстноеМеню - 233 - true - - Label - true - - System.DefaultGUIFont - true - false - false - false - - - Left - - ПроверкаНастроекУчетнойЗаписиКартинкаИНадпись 53 @@ -2363,7 +1438,7 @@ 58 <key>ru</key> - <value>Выполняется проверка настроек учетной записи. + <value>Выполняется проверка настроек почты. Это может занять несколько минут.</value> true @@ -2449,7 +1524,11 @@ 275 КартинкаПриПроверкеОбнаруженыОшибки - 277 + 279 + + <key>ru</key> + <value>Картинка вопрос</value> + true true @@ -2457,7 +1536,7 @@ КартинкаПредупреждениеРасширеннаяПодсказка1 - 279 + 281 Label true true @@ -2467,7 +1546,7 @@ КартинкаПредупреждениеКонтекстноеМеню1 - 278 + 280 true true @@ -2480,10 +1559,10 @@ ГруппаПриПроверкеОбнаруженыОшибки - 280 + 282 ТекстПриПроверкеОбнаруженыОшибки - 282 + 284 true true @@ -2495,7 +1574,7 @@ None СообщенияОбОшибкахРасширеннаяПодсказка1 - 284 + 286 Label true true @@ -2505,7 +1584,7 @@ СообщенияОбОшибкахКонтекстноеМеню1 - 283 + 285 true InputField @@ -2539,7 +1618,7 @@ НужнаПомощьПриПроверкеОбнаруженыОшибки - 285 + 287 <key>ru</key> <value>Нужна помощь?</value> @@ -2551,7 +1630,7 @@ </userVisible> <extendedTooltip> <name>НужнаПомощьРасширеннаяПодсказка1</name> - <id>287</id> + <id>289</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2561,7 +1640,7 @@ </extendedTooltip> <contextMenu> <name>НужнаПомощьКонтекстноеМеню1</name> - <id>286</id> + <id>288</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -2584,7 +1663,7 @@ </userVisible> <extendedTooltip> <name>ГруппаСообщенияОбОшибкахРасширеннаяПодсказка1</name> - <id>281</id> + <id>283</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2636,9 +1715,8 @@ <id>235</id> <title> <key>ru</key> - <value>Учетная запись успешно настроена</value> + <value>Почта успешно настроена</value> - true true true @@ -2714,7 +1792,7 @@ 69 <key>ru</key> - <value>Настройка параметров учетной записи + <value>Настройка параметров почты vasyapupkin@example.com завершена.</value> true @@ -3081,10 +2159,6 @@ vasyapupkin@example.com завершена. СпособНастройки - - <key>ru</key> - <value>Способ настройки</value> - 3 String @@ -3114,10 +2188,6 @@ vasyapupkin@example.com завершена. ИмяПользователяДляОтправкиПисем - - <key>ru</key> - <value>Имя пользователя для отправки писем</value> - 5 String @@ -3134,10 +2204,6 @@ vasyapupkin@example.com завершена. ПарольДляОтправкиПисем - - <key>ru</key> - <value>Пароль для отправки писем</value> - 6 String @@ -3208,10 +2274,6 @@ vasyapupkin@example.com завершена. ИмяПользователяДляПолученияПисем - - <key>ru</key> - <value>Имя пользователя для получения писем</value> - 11 String @@ -3322,10 +2384,6 @@ vasyapupkin@example.com завершена. ДлительностьОжиданияСервера - - <key>ru</key> - <value>Длительность ожидания сервера</value> - 18 Number @@ -3360,10 +2418,6 @@ vasyapupkin@example.com завершена. НазваниеУчетнойЗаписи - - <key>ru</key> - <value>Наименование учетной записи</value> - 21 String @@ -3439,10 +2493,6 @@ vasyapupkin@example.com завершена. ДлительностьОжиданияСервераПриОтправкеПисем - - <key>ru</key> - <value>Длительность ожидания сервера при отправке писем</value> - 26 Number diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl index e4b5b993f..4a92387f6 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl @@ -20,7 +20,6 @@ ИспользуютсяПрофилиБезопасности = Ложь; КонецЕсли; - Элементы.СпособНастройки.Видимость = Не ИспользуютсяПрофилиБезопасности; Если ИспользуютсяПрофилиБезопасности Тогда СпособНастройки = "Вручную"; Иначе @@ -35,14 +34,11 @@ Элементы.ОставлятьПисьмаНаСервере.Видимость = ДоступноПолучениеПисем; Элементы.НастройкаУчетнойЗаписиЗаголовок.Заголовок = ?(КонтекстныйРежим, - НСтр("ru = 'Для отправки писем необходимо настроить учетную запись электронной почты'"), - НСтр("ru = 'Введите параметры учетной записи'")); + НСтр("ru = 'Для отправки писем необходимо настроить почту'"), + НСтр("ru = 'Введите настройки почты'")); - Если КонтекстныйРежим Или Перенастройка Тогда - Заголовок = НСтр("ru = 'Настройка учетной записи электронной почты'"); - Иначе - Заголовок = НСтр("ru = 'Создание учетной записи электронной почты'"); - КонецЕсли; + Элементы.НастройкаУчетнойЗаписиЗаголовок.Видимость = КонтекстныйРежим; + Заголовок = НСтр("ru = 'Настройка почты'"); ИспользоватьДляПолучения = Не КонтекстныйРежим И ДоступноПолучениеПисем; ИспользоватьДляОтправки = Истина; @@ -87,8 +83,9 @@ КонецЕсли; ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); - Элементы.ДляКогоУчетнаяЗапись.Видимость = ЭтоПолноправныйПользователь; + Элементы.ДляКогоУчетнаяЗапись.Видимость = ЭтоПолноправныйПользователь И Не КонтекстныйРежим; ВидУчетнойЗаписи = ?(ЭтоПолноправныйПользователь, "Общая", "Персональная"); + Элементы.ИмяОтправителя.Видимость = Не КонтекстныйРежим; ТребуетсяАвторизацияПриОтправкеПисем = Истина; @@ -145,14 +142,11 @@ ТребуетсяПодтверждениеЗакрытияФормы = Истина; КонецПроцедуры -&НаКлиенте -Процедура СпособНастройкиПриИзменении(Элемент) - НастроитьЭлементыТекущейСтраницы(); -КонецПроцедуры - &НаКлиенте Процедура ПротоколПриИзменении(Элемент) УстановитьВидимостьЭлементов(); + Элементы.СерверВходящейПочты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сервер %1'"), Протокол); КонецПроцедуры &НаКлиенте @@ -210,20 +204,6 @@ ПредыдущаяСтраница = Неопределено; Если ТекущаяСтраница = Элементы.НастройкаСервераИсходящейПочты Тогда ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи; - ИначеЕсли ТекущаяСтраница = Элементы.НастройкаСервераВходящейПочты Тогда - Если ИспользоватьДляОтправки Тогда - ПредыдущаяСтраница = Элементы.НастройкаСервераИсходящейПочты; - Иначе - ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи; - КонецЕсли; - ИначеЕсли ТекущаяСтраница = Элементы.ДополнительныеНастройки Тогда - Если ИспользоватьДляОтправки Или ИспользоватьДляПолучения Тогда - ПредыдущаяСтраница = Элементы.НастройкаСервераВходящейПочты; - ИначеЕсли ИспользоватьДляОтправки Тогда - ПредыдущаяСтраница = Элементы.НастройкаСервераИсходящейПочты; - Иначе - ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи; - КонецЕсли; ИначеЕсли ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи Или ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки Тогда ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи; КонецЕсли; @@ -251,7 +231,7 @@ Кнопки = Новый СписокЗначений; Кнопки.Добавить("Закрыть", НСтр("ru = 'Закрыть'")); Кнопки.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Не закрывать'")); - ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки, , КодВозвратаДиалога.Отмена, НСтр("ru = 'Настройка учетной записи'")); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки, , КодВозвратаДиалога.Отмена, НСтр("ru = 'Настройка почты'")); КонецПроцедуры &НаКлиенте @@ -281,19 +261,13 @@ Если СпособНастройки = "Автоматически" Или ПроверкаЗавершиласьСОшибками Тогда СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи; Иначе - Если ИспользоватьДляОтправки Тогда + Если ИспользоватьДляОтправки Или ИспользоватьДляПолучения Тогда СледующаяСтраница = Элементы.НастройкаСервераИсходящейПочты; - ИначеЕсли ИспользоватьДляПолучения Тогда - СледующаяСтраница = Элементы.НастройкаСервераВходящейПочты; Иначе - СледующаяСтраница = Элементы.ДополнительныеНастройки; + СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи; КонецЕсли; КонецЕсли; ИначеЕсли ТекущаяСтраница = Элементы.НастройкаСервераИсходящейПочты Тогда - СледующаяСтраница = Элементы.НастройкаСервераВходящейПочты; - ИначеЕсли ТекущаяСтраница = Элементы.НастройкаСервераВходящейПочты Тогда - СледующаяСтраница = Элементы.ДополнительныеНастройки; - ИначеЕсли ТекущаяСтраница = Элементы.ДополнительныеНастройки Тогда СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи; ИначеЕсли ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи Тогда Если ПроверкаЗавершиласьСОшибками Тогда @@ -454,25 +428,24 @@ И ПроверкаЗавершиласьСОшибками Или Не КонтекстныйРежим И Не Перенастройка И ТекущаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена); Если Не КонтекстныйРежим И ТекущаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена Тогда - Элементы.КнопкаПерейтиКНастройкам.Заголовок = НСтр("ru = 'Перейти к учетной записи'"); + Элементы.КнопкаПерейтиКНастройкам.Заголовок = НСтр("ru = 'Перейти к настройкам'"); Иначе Элементы.КнопкаПерейтиКНастройкам.Заголовок = НСтр("ru = 'Настроить вручную'"); КонецЕсли; Если ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи Тогда Элементы.НеУдалосьПодключитьсяКартинкаИНадпись.Видимость = ПроверкаЗавершиласьСОшибками; - Элементы.СпособНастройки.Видимость = Не ПроверкаЗавершиласьСОшибками И Не ИспользуютсяПрофилиБезопасности; КонецЕсли; - Если ТекущаяСтраница = Элементы.НастройкаСервераВходящейПочты Тогда + Если ТекущаяСтраница = Элементы.НастройкаСервераИсходящейПочты Тогда ОбновитьДоступностьНастройкиДнейДоУдаления(); УстановитьВидимостьЭлементов(); КонецЕсли; Если ТекущаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена Тогда Элементы.НадписьУчетнаяЗаписьУспешноНастроена.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Настройка параметров учетной записи - |%1 завершена.'"), АдресЭлектроннойПочты); + НСтр("ru = 'Настройка почты + |%1 успешно завершена.'"), АдресЭлектроннойПочты); КонецЕсли; КонецПроцедуры @@ -621,6 +594,7 @@ УчетнаяЗапись.ПериодХраненияСообщенийНаСервере = ?(ОставлятьКопииПисемНаСервере И УдалятьПисьмаССервера И Протокол = "POP", ПериодХраненияСообщенийНаСервере, 0); УчетнаяЗапись.ПротоколВходящейПочты = Протокол; УчетнаяЗапись.Наименование = НазваниеУчетнойЗаписи; + УчетнаяЗапись.ПриОтправкеПисемТребуетсяАвторизация = ЗначениеЗаполнено(УчетнаяЗапись.ПользовательSMTP); Если ВидУчетнойЗаписи = "Персональная" Тогда УчетнаяЗапись.ВладелецУчетнойЗаписи = Пользователи.ТекущийПользователь(); Иначе diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Form.form index 8317d3d82..26c0d499b 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Form.form @@ -42,7 +42,7 @@ 163 <key>ru</key> - <value>Выполняется проверка настроек учетной записи. + <value>Выполняется проверка настроек почты. Это может занять несколько минут.</value> true @@ -101,34 +101,6 @@ ПриПроверкеОбнаруженыОшибки 3 - - НеУдалосьПодключитьсяКартинкаИНадпись - 11 - true - true - - true - - - НеУдалосьПодключитьсяКартинкаИНадписьРасширеннаяПодсказка - 12 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Auto - true - true - Auto - Auto - - КартинкаПредупреждение 13 @@ -356,7 +328,7 @@ 176 <key>ru</key> - <value>Проверка настроек учетной записи завершилась успешно:</value> + <value>Проверка настроек почты завершилась успешно:</value> true true diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form index a388b41ba..223650480 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form @@ -373,6 +373,10 @@ Left + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -431,6 +435,19 @@ true + + ПредлагатьНастройкуПочты + 3 + + Boolean + + + true + + + true + + diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Module.bsl index 3043ca4f8..8d5379fce 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Module.bsl @@ -20,6 +20,9 @@ Элементы.ВладелецУчетнойЗаписи.Видимость = ПоказыватьПерсональныеУчетныеЗаписиПользователей; + ПредлагатьНастройкуПочты = РаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем() + И РаботаСПочтовымиСообщениями.ДоступныеУчетныеЗаписи(Истина, Ложь, Истина).Количество() = 0; + КонецПроцедуры #КонецОбласти @@ -50,5 +53,20 @@ Список, "ВладелецУчетнойЗаписи", СписокПользователей, ВидСравненияКомпоновкиДанных.ВСписке, , Не ПоказыватьПерсональныеУчетныеЗаписиПользователей); КонецПроцедуры - + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если ПредлагатьНастройкуПочты Тогда + ПодключитьОбработчикОжидания("НастроитьПочту", 0.1, Истина); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьПочту() + + РаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(Неопределено); + +КонецПроцедуры + + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form index d3253189f..fd82623a9 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form @@ -167,7 +167,7 @@ 8 <key>ru</key> - <value>Адрес электронной почты</value> + <value>Адрес почты</value> true true @@ -280,6 +280,10 @@ Left true + + OnActivateRow + СписокПриАктивизацииСтроки + СписокСтрокаПоиска 31 diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl index 4011e0d33..7c771891d 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl @@ -23,6 +23,11 @@ Элементы.ВладелецУчетнойЗаписи.Видимость = ПоказыватьПерсональныеУчетныеЗаписиПользователей; Элементы.ПоказыватьНедействительные.Доступность = ПоказыватьПерсональныеУчетныеЗаписиПользователей; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -51,6 +56,58 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + +&НаКлиенте +Процедура СписокПриАктивизацииСтроки(Элемент) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); + МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); + КонецЕсли; +КонецПроцедуры + + +&НаСервере +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список); + КонецЕсли; +КонецПроцедуры + + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); +КонецПроцедуры + + +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + + + #Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 2596517a3..bb4102227 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -57,6 +57,10 @@ АдресЭлектроннойПочты 80 + + <key>ru</key> + <value>Адрес почты</value> + true true @@ -271,7 +275,7 @@ <key>ru</key> - <value>Использование учетной записи</value> + <value>Почта используется</value> ИспользоватьУчетнуюЗаписьРасширеннаяПодсказка @@ -342,7 +346,7 @@ ru - Для всех + Всеми пользователями Общая @@ -351,7 +355,7 @@ ru - Только для: + Одним пользователем: Персональная @@ -419,7 +423,7 @@ ru Для кого учетная запись - 46 + 60 false ГруппаДляКогоУчетнаяЗаписьРасширеннаяПодсказка @@ -516,7 +520,7 @@ ЛогинПароль 263 - ИмяПользователяДляПолученияПисем + Логин 102 <key>ru</key> @@ -531,7 +535,7 @@ <segments>Объект.Пользователь</segments> </dataPath> <extendedTooltip> - <name>ИмяПользователяДляПолученияПисемРасширеннаяПодсказка</name> + <name>ЛогинРасширеннаяПодсказка</name> <id>104</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -541,7 +545,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ИмяПользователяДляПолученияПисемКонтекстноеМеню</name> + <name>ЛогинКонтекстноеМеню</name> <id>103</id> <autoFill>true</autoFill> </contextMenu> @@ -563,7 +567,7 @@ </extInfo> </items> <items xsi:type="form:FormField"> - <name>ПарольДляПолученияПисем</name> + <name>Пароль</name> <id>105</id> <visible>true</visible> <enabled>true</enabled> @@ -575,10 +579,10 @@ </dataPath> <handlers> <event>OnChange</event> - <name>ПарольДляПолученияПисемПриИзменении</name> + <name>ПарольПриИзменении</name> </handlers> <extendedTooltip> - <name>ПарольДляПолученияПисемРасширеннаяПодсказка</name> + <name>ПарольРасширеннаяПодсказка</name> <id>107</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -588,7 +592,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПарольДляПолученияПисемКонтекстноеМеню</name> + <name>ПарольКонтекстноеМеню</name> <id>106</id> <autoFill>true</autoFill> </contextMenu> @@ -600,11 +604,11 @@ <extInfo xsi:type="form:InputFieldExtInfo"> <handlers> <event>EditTextChange</event> - <name>ПарольДляПолученияПисемИзменениеТекстаРедактирования</name> + <name>ПарольИзменениеТекстаРедактирования</name> </handlers> <handlers> <event>StartChoice</event> - <name>ПарольДляПолученияПисемНачалоВыбора</name> + <name>ПарольНачалоВыбора</name> </handlers> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -908,70 +912,6 @@ <items xsi:type="form:FormGroup"> <name>НастройкиСервераВходящейПочты</name> <id>125</id> - <items xsi:type="form:FormGroup"> - <name>ПротоколИПортСервераВходящейПочты</name> - <id>111</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <title> - <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 @@ -1107,7 +1047,7 @@ ru - Авто + STARTTLS Авто @@ -1116,7 +1056,7 @@ ru - Всегда (SSL) + SSL SSL @@ -1293,7 +1233,7 @@ ru - Авто + STARTTLS Авто @@ -1302,7 +1242,7 @@ ru - Всегда (SSL) + SSL SSL @@ -1381,75 +1321,9 @@ 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 - - true - - - <key>ru</key> - <value>Настройки подключения при отправке писем</value> - - - НастройкиПодключенияПриОтправкеПисемРасширеннаяПодсказка - 203 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - ГруппаТребуетсяАвторизация 258 @@ -1462,7 +1336,7 @@ true - ТребуетсяАвторизацияПриОтправкеПисем + Объект.ПриОтправкеПисемТребуетсяАвторизация Right @@ -1525,348 +1399,25 @@ false - - СпособАвторизацииСОтступом - 251 - - АвторизацияSMTP - 244 - - СпособАвторизацииПриОтправкеПочты - 238 - true - true - - true - - - СпособАвторизацииПриОтправкеПочты - - None - - OnChange - СпособАвторизацииПриОтправкеПочтыПриИзменении - - - СпособАвторизацииПриОтправкеПочтыРасширеннаяПодсказка - 240 - Label - true - true - - Left - - - - СпособАвторизацииПриОтправкеПочтыКонтекстноеМеню - 239 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - На сервере исходящей почты (SMTP) - - - SMTP - - - Vertical - - - - ЛогинПарольПриОтправкеПисемСОтступом - 253 - - ОтступАвторизацияПриОтправкеПисем - 235 - - <key>ru</key> - <value>Отступ авторизация при отправке писем</value> - - true - true - - true - - - ОтступАвторизацияПриОтправкеПисемРасширеннаяПодсказка - 237 - Label - true - true - - Left - - - - ОтступАвторизацияПриОтправкеПисемКонтекстноеМеню - 236 - true - - 1 - true - 1 - true - false - false - - - - ЛогинИПарольПриОтправкеПисем - 233 - - ИмяПользователяДляОтправкиПисем - 149 - - <key>ru</key> - <value>Имя пользователя</value> - - true - true - - true - - - Объект.ПользовательSMTP - - - ИмяПользователяДляОтправкиПисемРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - - ИмяПользователяДляОтправкиПисемКонтекстноеМеню - 150 - true - - InputField - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - Normal - - - - ПарольДляОтправкиПисем - 152 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - ПарольSMTP - - - OnChange - ПарольДляОтправкиПисемПриИзменении - - - ПарольДляОтправкиПисемРасширеннаяПодсказка - 154 - Label - true - true - - Left - - - - ПарольДляОтправкиПисемКонтекстноеМеню - 153 - true - - InputField - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Логин и пароль при отправке писем</value> - - - ЛогинИПарольПриОтправкеПисемРасширеннаяПодсказка - 234 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - - true - - - <key>ru</key> - <value>Логин пароль при отправке писем с отступом</value> - - - ЛогинПарольПриОтправкеПисемСОтступомРасширеннаяПодсказка - 254 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Авторизация SMTP</value> - - - АвторизацияSMTPРасширеннаяПодсказка - 245 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - СпособАвторизацииПриОтправкеПочты1 - 241 - true - true - - true - - - СпособАвторизацииПриОтправкеПочты - - None - - OnChange - СпособАвторизацииПриОтправкеПочтыПриИзменении - - - СпособАвторизацииПриОтправкеПочты1РасширеннаяПодсказка - 243 - Label - true - true - - Left - - - - СпособАвторизацииПриОтправкеПочты1КонтекстноеМеню - 242 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - На сервере входящей почты (POP) - - - POP - - - Vertical - - + + СпособАвторизацииПриОтправкеПочты + 238 true true true - - <key>ru</key> - <value>Способ авторизации с отступом</value> - + + СпособАвторизацииПриОтправкеПочты + + None + + OnChange + СпособАвторизацииПриОтправкеПочтыПриИзменении + - СпособАвторизацииСОтступомРасширеннаяПодсказка - 252 + СпособАвторизацииПриОтправкеПочтыРасширеннаяПодсказка + 240 Label true true @@ -1874,14 +1425,37 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + СпособАвторизацииПриОтправкеПочтыКонтекстноеМеню + 239 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + На сервере исходящей почты (SMTP) + + + SMTP + + + + + ru + На сервере входящей почты (POP) + + + POP + + + Vertical true @@ -1942,80 +1516,6 @@ Auto - - POPПередSMTP - 204 - - ТребуетсяВходНаСерверПередОтправкой - 189 - - <key>ru</key> - <value>Требуется авторизация на сервере входящей почты перед отправкой</value> - - true - - true - - - Объект.ТребуетсяВходНаСерверПередОтправкой - - Right - - OnChange - ТребуетсяВходНаСерверПередОтправкойПриИзменении - - - ТребуетсяВходНаСерверПередОтправкойРасширеннаяПодсказка - 191 - Label - true - true - - Left - - - - ТребуетсяВходНаСерверПередОтправкойКонтекстноеМеню - 190 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>POP перед SMTP</value> - - - POPПередSMTPРасширеннаяПодсказка - 205 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - true true @@ -2046,153 +1546,6 @@ Auto - - ПрочиеНастройки - 206 - - ДлительностьОжидания - 136 - - ДлительностьОжиданияСервера - 127 - - <key>ru</key> - <value>Длительность ожидания сервера</value> - - true - true - - true - - - Объект.ВремяОжидания - - - ДлительностьОжиданияСервераРасширеннаяПодсказка - 129 - Label - true - true - - Left - - - - ДлительностьОжиданияСервераКонтекстноеМеню - 128 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - - 10 - - Normal - - - - НадписьСекунд - 138 - - <key>ru</key> - <value>сек.</value> - - true - true - - true - - - НадписьСекундРасширеннаяПодсказка - 140 - Label - true - true - - Left - - - - НадписьСекундКонтекстноеМеню - 139 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Длительность ожидания</value> - - - ДлительностьОжиданияРасширеннаяПодсказка - 137 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - - true - - - <key>ru</key> - <value>Прочие настройки</value> - - - ПрочиеНастройкиРасширеннаяПодсказка - 207 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - НужнаПомощь 269 @@ -2504,38 +1857,6 @@ true - - ПарольSMTP - - <key>ru</key> - <value>Пароль SMTP</value> - - 4 - - String - - - - true - - - true - - true - - - ПарольSMTPИзменен - 5 - - Boolean - - - true - - - true - - ПарольИзменен 6 @@ -2568,19 +1889,6 @@ true - - ВладелецУчетнойЗаписи - 8 - - CatalogRef.Пользователи - - - true - - - true - - ПроверкаПароля 9 @@ -2608,24 +1916,6 @@ true - - ТребуетсяАвторизацияПриОтправкеПисем - - <key>ru</key> - <value>При отправке писем требуется авторизация</value> - - 11 - - Boolean - - - true - - - true - - true - СпособАвторизацииПриОтправкеПочты @@ -2697,19 +1987,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ИспользуетсяПочтовыйКлиент</name> - <id>16</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/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index b793f76bc..118d048c3 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -6,13 +6,6 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область ОписаниеПеременных - -&НаКлиенте -Перем ПараметрыПередЗаписью; - -#КонецОбласти - #Область ОбработчикиСобытийФормы &НаСервере @@ -22,6 +15,12 @@ РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; КонецЕсли; + Если Объект.Ссылка.Пустая() Тогда + Объект.ИспользоватьДляОтправки = Истина; + Объект.ИспользоватьДляПолучения = ДоступноПолучениеПисем; + ЗаполнитьНастройки(); + КонецЕсли; + Элементы.ИспользоватьУчетнуюЗапись.ОтображатьЗаголовок = ДоступноПолучениеПисем; Элементы.ДляПолучения.Видимость = ДоступноПолучениеПисем; @@ -29,16 +28,15 @@ Элементы.ДляОтправки.Заголовок = НСтр("ru = 'Использовать для отправки писем'"); КонецЕсли; - Если Объект.Ссылка.Пустая() Тогда - Объект.ИспользоватьДляОтправки = Истина; - Объект.ИспользоватьДляПолучения = ДоступноПолучениеПисем; - ЗаполнитьНастройки(); - КонецЕсли; - Элементы.ГруппаДляКогоУчетнаяЗапись.Доступность = Пользователи.ЭтоПолноправныйПользователь(); РеквизитыТребующиеВводаПароляДляИзменения = Справочники.УчетныеЗаписиЭлектроннойПочты.РеквизитыТребующиеВводаПароляДляИзменения(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -64,8 +62,8 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - ТекущийОбъект.ПользовательSMTP = ?(ТребуетсяАвторизацияПриОтправкеПисем И Не Объект.ТребуетсяВходНаСерверПередОтправкой, ТекущийОбъект.Пользователь, ""); - ТекущийОбъект.ТребуетсяВходНаСерверПередОтправкой = ТекущийОбъект.ТребуетсяВходНаСерверПередОтправкой И ТребуетсяАвторизацияПриОтправкеПисем; + ТекущийОбъект.ПользовательSMTP = ?(ТекущийОбъект.ПриОтправкеПисемТребуетсяАвторизация И Не Объект.ТребуетсяВходНаСерверПередОтправкой, ТекущийОбъект.Пользователь, ""); + ТекущийОбъект.ТребуетсяВходНаСерверПередОтправкой = ТекущийОбъект.ТребуетсяВходНаСерверПередОтправкой И ТекущийОбъект.ПриОтправкеПисемТребуетсяАвторизация; ТекущийОбъект.ДополнительныеСвойства.Вставить("Пароль", ПроверкаПароля); КонецПроцедуры @@ -80,10 +78,12 @@ ЗаполнитьРеквизитыОбъекта(); - Если Не ПроверкиПередЗаписьюВыполнены(ПараметрыЗаписи) Тогда - Отказ = Истина; - Возврат; - КонецЕсли; + ОбработчикиПередЗаписью = Новый Массив; + ОбработчикиПередЗаписью.Добавить(Новый ОписаниеОповещения("ПроверитьЗаполнениеПередЗаписью", ЭтотОбъект, ПараметрыЗаписи)); + ОбработчикиПередЗаписью.Добавить(Новый ОписаниеОповещения("ПроверитьРазрешенияПередЗаписью", ЭтотОбъект, ПараметрыЗаписи)); + ОбработчикиПередЗаписью.Добавить(Новый ОписаниеОповещения("ПроверитьПарольПередЗаписью", ЭтотОбъект, ПараметрыЗаписи)); + + ПодключитьОбработчикиПередЗаписью(ОбработчикиПередЗаписью, ЭтотОбъект, Отказ, ПараметрыЗаписи); КонецПроцедуры @@ -96,17 +96,25 @@ Закрыть(); КонецЕсли; - ВладелецУчетнойЗаписи = Объект.ВладелецУчетнойЗаписи; - Если ПараметрыЗаписи.Свойство("ПроверитьНастройки") Тогда ПодключитьОбработчикОжидания("ВыполнитьПроверкуНастроек", 0.1, Истина); КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи); + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) УстановитьВидНастройкиХраненияПисемНаСервере(); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -121,6 +129,11 @@ ЗаполнитьНастройки(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); + МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -208,25 +221,20 @@ КонецПроцедуры &НаКлиенте -Процедура ПарольДляПолученияПисемПриИзменении(Элемент) +Процедура ПарольПриИзменении(Элемент) ПарольИзменен = Истина; КонецПроцедуры &НаКлиенте -Процедура ПарольДляПолученияПисемИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) - Элементы.ПарольДляПолученияПисем.КнопкаВыбора = Истина; +Процедура ПарольИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) + Элементы.Пароль.КнопкаВыбора = Истина; КонецПроцедуры &НаКлиенте -Процедура ПарольДляПолученияПисемНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) +Процедура ПарольНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) РаботаСПочтовымиСообщениямиКлиент.ПолеПароляНачалоВыбора(Элемент, Пароль, СтандартнаяОбработка); КонецПроцедуры -&НаКлиенте -Процедура ПарольДляОтправкиПисемПриИзменении(Элемент) - ПарольSMTPИзменен = Истина; -КонецПроцедуры - &НаКлиенте Процедура ДляКогоУчетнаяЗаписьПриИзменении(Элемент) Элементы.ПользовательУчетнойЗаписи.Доступность = ВидУчетнойЗаписи = "Персональная"; @@ -238,14 +246,9 @@ ОповеститьОбИзмененииВладельцаУчетнойЗаписи(); КонецПроцедуры -&НаКлиенте -Процедура ТребуетсяВходНаСерверПередОтправкойПриИзменении(Элемент) - Элементы.ПолучениеПисем.Доступность = ДоступноПолучениеПисем Или Объект.ТребуетсяВходНаСерверПередОтправкой; -КонецПроцедуры - &НаКлиенте Процедура ТребуетсяАвторизацияПриОтправкеПисемПриИзменении(Элемент) - Элементы.АвторизацияПриОтправкеПисем.Доступность = ТребуетсяАвторизацияПриОтправкеПисем; + Элементы.АвторизацияПриОтправкеПисем.Доступность = Объект.ПриОтправкеПисемТребуетсяАвторизация; Элементы.АвторизацияПриОтправкеПисем.Видимость = Объект.ПротоколВходящейПочты = "POP"; КонецПроцедуры @@ -283,6 +286,35 @@ #Область ОбработчикиКомандФормы +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); + МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения) + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); + МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт + ВыполнитьКомандуНаСервере(ПараметрыВыполнения); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент"); + МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ЗаписатьИЗакрыть(Команда) @@ -376,43 +408,19 @@ КонецПроцедуры &НаКлиенте -Функция ПроверкиПередЗаписьюВыполнены(ПараметрыЗаписи) +Процедура ПроверитьЗаполнениеПередЗаписью(Отказ, ПараметрыЗаписи) Экспорт - ПараметрыПередЗаписью = ПараметрыЗаписи; - - Если Не ПараметрыПередЗаписью.Свойство("ПроверкаЗаполненияВыполнена") Тогда - ПодключитьОбработчикОжидания("ПроверитьЗаполнениеИЗаписать", 0.1, Истина); - Возврат Ложь; - КонецЕсли; - - Если Не ПараметрыПередЗаписью.Свойство("РазрешенияПолучены") Тогда - ПодключитьОбработчикОжидания("ПроверитьРазрешенияИЗаписать", 0.1, Истина); - Возврат Ложь; - КонецЕсли; - - Если Не ПроверкаПароляВыполнена(ПараметрыПередЗаписью) Тогда - ПодключитьОбработчикОжидания("ВвестиПарольУчетнойЗаписиИЗаписать", 0.1, Истина); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -&НаКлиенте -Процедура ПроверитьЗаполнениеИЗаписать() - - Если ПроверитьЗаполнение() Тогда - ПараметрыПередЗаписью.Вставить("ПроверкаЗаполненияВыполнена"); - Записать(ПараметрыПередЗаписью); + Если Не ПроверитьЗаполнение() Тогда + Отказ = Истина; КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ПроверитьРазрешенияИЗаписать() +Процедура ПроверитьРазрешенияПередЗаписью(Отказ, ПараметрыЗаписи) Экспорт - ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПроверкиРазрешений", ЭтотОбъект, ПараметрыПередЗаписью); + Отказ = Истина; + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПроверкиРазрешений", ЭтотОбъект, ПараметрыЗаписи); Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); @@ -424,6 +432,18 @@ КонецПроцедуры +&НаКлиенте +Процедура ПроверитьПарольПередЗаписью(Отказ, ПараметрыЗаписи) Экспорт + + Если Не ПроверкаПароляВыполнена(ПараметрыЗаписи) Тогда + Отказ = Истина; + ПроверкаПароля = ""; + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВводаПароля", ЭтотОбъект, ПараметрыЗаписи); + ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ПроверкаДоступаКУчетнойЗаписи", , ЭтотОбъект, , , , ОписаниеОповещения); + КонецЕсли; + +КонецПроцедуры + &НаСервере Функция ЗапросыНаИспользованиеВнешнихРесурсов() @@ -472,7 +492,7 @@ Если Результат = КодВозвратаДиалога.ОК Тогда ПараметрыЗаписи.Вставить("РазрешенияПолучены"); - Записать(ПараметрыПередЗаписью); + Записать(ПараметрыЗаписи); КонецЕсли; КонецПроцедуры @@ -495,15 +515,6 @@ Возврат Справочники.УчетныеЗаписиЭлектроннойПочты.ТребуетсяПроверкаПароля(Ссылка, ЗначенияРеквизитов); КонецФункции -&НаКлиенте -Процедура ВвестиПарольУчетнойЗаписиИЗаписать() - - ПроверкаПароля = ""; - ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВводаПароля", ЭтотОбъект, ПараметрыПередЗаписью); - ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ПроверкаДоступаКУчетнойЗаписи", , ЭтотОбъект, , , , ОписаниеОповещения); - -КонецПроцедуры - &НаКлиенте Процедура ПослеВводаПароля(Пароль, ПараметрыЗаписи) Экспорт @@ -534,8 +545,6 @@ &НаСервере Процедура ЗаполнитьНастройки() - Перем ИспользуетсяПротоколPOP, Пароли, ЭтоПерсональнаяУчетнаяЗапись; - ДоступноПолучениеПисем = РаботаСПочтовымиСообщениямиСлужебный.НастройкиПодсистемы().ДоступноПолучениеПисем; Элементы.ОставлятьПисьмаНаСервере.Видимость = Объект.ПротоколВходящейПочты = "POP" И ДоступноПолучениеПисем; @@ -549,10 +558,9 @@ Если НЕ Объект.Ссылка.Пустая() Тогда УстановитьПривилегированныйРежим(Истина); - Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Объект.Ссылка, "Пароль, ПарольSMTP"); + ПарольУстановлен = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Объект.Ссылка) <> ""; УстановитьПривилегированныйРежим(Ложь); - Пароль = ?(ЗначениеЗаполнено(Пароли.Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); - ПарольSMTP = ?(ЗначениеЗаполнено(Пароли.ПарольSMTP), ЭтотОбъект.УникальныйИдентификатор, ""); + Пароль = ?(ПарольУстановлен, ЭтотОбъект.УникальныйИдентификатор, ""); Если Не Справочники.УчетныеЗаписиЭлектроннойПочты.ИзменениеРазрешено(Объект.Ссылка) Тогда ТолькоПросмотр = Истина; @@ -564,11 +572,9 @@ ЭтоПерсональнаяУчетнаяЗапись = ЗначениеЗаполнено(Объект.ВладелецУчетнойЗаписи); Элементы.ПользовательУчетнойЗаписи.Доступность = ЭтоПерсональнаяУчетнаяЗапись; ВидУчетнойЗаписи = ?(ЭтоПерсональнаяУчетнаяЗапись, "Персональная", "Общая"); - ВладелецУчетнойЗаписи = Объект.ВладелецУчетнойЗаписи; ИспользуетсяПротоколPOP = Объект.ПротоколВходящейПочты = "POP"; - ТребуетсяАвторизацияПриОтправкеПисем = ЗначениеЗаполнено(Объект.ПользовательSMTP) Или Объект.ТребуетсяВходНаСерверПередОтправкой; - Элементы.АвторизацияПриОтправкеПисем.Доступность = ТребуетсяАвторизацияПриОтправкеПисем; + Элементы.АвторизацияПриОтправкеПисем.Доступность = Объект.ПриОтправкеПисемТребуетсяАвторизация; УстановитьВидГруппыТребуетсяАвторизация(ЭтотОбъект, ИспользуетсяПротоколPOP); ШифрованиеПриОтправкеПочты = ?(Объект.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты, "SSL", "Авто"); @@ -578,7 +584,64 @@ Элементы.ФормаПроверитьНастройки.Доступность = Объект.ИспользоватьДляОтправки Или Объект.ИспользоватьДляПолучения; Элементы.ФормаОткрытьПомощникНастройки.Доступность = Не Объект.Ссылка.Пустая() И Не ТолькоПросмотр; - Элементы.ПарольДляПолученияПисем.КнопкаВыбора = Ложь; + Элементы.Пароль.КнопкаВыбора = Ложь; + +КонецПроцедуры + +// Последовательно вызывает указанные обработчики в событии ПередЗаписью через обработчик ожидания. +&НаКлиенте +Процедура ПодключитьОбработчикиПередЗаписью(Обработчики, Форма, Отказ, ПараметрыЗаписи) + + Если Не ПараметрыЗаписи.Свойство("ОбработчикиПередЗаписью") Тогда + ПараметрыЗаписи.Вставить("ОбработчикиПередЗаписью", Новый Структура) + КонецЕсли; + + Для Каждого Обработчик Из Обработчики Цикл + Если Не ПараметрыЗаписи.ОбработчикиПередЗаписью.Свойство(Обработчик.ИмяПроцедуры) Тогда + ПараметрыЗаписи.ОбработчикиПередЗаписью.Вставить(Обработчик.ИмяПроцедуры, Ложь); + КонецЕсли; + КонецЦикла; + + Для Каждого Проверка Из ПараметрыЗаписи.ОбработчикиПередЗаписью Цикл + Если Проверка.Значение = Ложь Тогда + Отказ = Истина; + ОписаниеОповещения = Новый ОписаниеОповещения(Проверка.Ключ, Форма, ПараметрыЗаписи); + + ИмяПараметра = "СтандартныеПодсистемы.ОбработчикОжиданияПередЗаписьюВФорме"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Новый Массив); + КонецЕсли; + ПараметрыПриложения[ИмяПараметра].Добавить(ОписаниеОповещения); + + ПодключитьОбработчикОжидания("ВыполнитьПроверкуПередЗаписьюВФорме", 0.1, Истина); + Возврат; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПроверкуПередЗаписьюВФорме() + + ИмяПараметра = "СтандартныеПодсистемы.ОбработчикОжиданияПередЗаписьюВФорме"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Новый Массив); + КонецЕсли; + ОбработчикиОжидания = ПараметрыПриложения[ИмяПараметра]; + + Если ОбработчикиОжидания.Количество() > 0 Тогда + ОписаниеОповещения = ОбработчикиОжидания[0]; + ИмяПроцедуры = ОбработчикиОжидания[0].ИмяПроцедуры; + Форма = ОбработчикиОжидания[0].Модуль; + ПараметрыЗаписи = ОбработчикиОжидания[0].ДополнительныеПараметры; + ОбработчикиОжидания.Удалить(0); + ПараметрыЗаписи.ОбработчикиПередЗаписью[ИмяПроцедуры] = Истина; + Отказ = Ложь; + ВыполнитьОбработкуОповещения(ОписаниеОповещения, Отказ); + Если Не Отказ Тогда + Форма.Записать(ПараметрыЗаписи); + КонецЕсли; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl index 5fa4704b7..8ce6c8152 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -53,6 +54,32 @@ #КонецОбласти +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Поля.Добавить("АдресЭлектроннойПочты"); + Поля.Добавить("Наименование"); + +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Данные.АдресЭлектроннойПочты) И СтрНайти(Данные.Наименование, Данные.АдресЭлектроннойПочты) = 0 Тогда + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2)'"), + Данные.Наименование, Данные.АдресЭлектроннойПочты); + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область СлужебныйПрограммныйИнтерфейс // Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, @@ -65,6 +92,23 @@ МодульВзаимодействия.ЗарегистрироватьУчетныеЗаписиЭлектроннойПочтыКОбработкеДляПереходаНаНовуюВерсию(Параметры); КонецЕсли; + ТекстЗапроса = + "ВЫБРАТЬ + | УчетныеЗаписиЭлектроннойПочты.Ссылка + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | НЕ УчетныеЗаписиЭлектроннойПочты.ПриОтправкеПисемТребуетсяАвторизация + | И (УчетныеЗаписиЭлектроннойПочты.ПользовательSMTP <> """" + | ИЛИ УчетныеЗаписиЭлектроннойПочты.ТребуетсяВходНаСерверПередОтправкой)"; + + Запрос = Новый Запрос(ТекстЗапроса); + + Результат = Запрос.Выполнить().Выгрузить(); + МассивСсылок = Результат.ВыгрузитьКолонку("Ссылка"); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); + КонецПроцедуры Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт @@ -110,13 +154,30 @@ Если ВладельцыУчетныхЗаписей[Выборка.Ссылка] <> Неопределено Тогда УчетнаяЗапись.ВладелецУчетнойЗаписи = ВладельцыУчетныхЗаписей[Выборка.Ссылка]; КонецЕсли; + Если Не УчетнаяЗапись.ПриОтправкеПисемТребуетсяАвторизация + И (УчетнаяЗапись.ПользовательSMTP <> "" + Или УчетнаяЗапись.ТребуетсяВходНаСерверПередОтправкой) Тогда + УчетнаяЗапись.ПриОтправкеПисемТребуетсяАвторизация = Истина; + Если УчетнаяЗапись.ИспользоватьДляОтправки И УчетнаяЗапись.Пользователь <> УчетнаяЗапись.ПользовательSMTP Тогда + УчетнаяЗапись.Пользователь = УчетнаяЗапись.ПользовательSMTP; + УстановитьПривилегированныйРежим(Истина); + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись.Ссылка, "Пароль,ПарольSMTP"); + Если Пароли.Пароль <> Пароли.ПарольSMTP Тогда + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗапись.Ссылка, Пароли.ПарольSMTP); + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия.ОчиститьПризнакПерсональнаяУчетнаяЗапись(УчетнаяЗапись.Ссылка); + КонецЕсли; ОбновлениеИнформационнойБазы.ЗаписатьДанные(УчетнаяЗапись); КонецЦикла; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление персональных учетных записей'", ОбщегоНазначения.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление учетных записей'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -153,7 +214,7 @@ Элемент.ИмяПредопределенныхДанных = "СистемнаяУчетнаяЗаписьЭлектроннойПочты"; Элемент.Наименование = НСтр("ru = 'Системная учетная запись'", ОбщегоНазначения.КодОсновногоЯзыка()); - Элемент.ИмяПользователя = НСтр("ru = '1С:Предприятие'"); + Элемент.ИмяПользователя = НСтр("ru = '1С:Предприятие'", ОбщегоНазначения.КодОсновногоЯзыка()); Элемент.ИспользоватьДляПолучения = Ложь; Элемент.ИспользоватьДляОтправки = Ложь; Элемент.ОставлятьКопииСообщенийНаСервере = Ложь; @@ -662,7 +723,7 @@ ?(ПустаяСтрока(ТекстОшибки), НСтр("ru = 'OK'"), ТекстОшибки)); КонецЕсли; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначения.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеПроверкаПодключенияКПочтовомуСерверу(), УровеньЖурналаРегистрации.Информация, , , ТекстДляЖурнала); Возврат ТекстОшибки; @@ -707,7 +768,7 @@ Профиль.ПользовательSMTP, ?(ПустаяСтрока(ТекстОшибки), НСтр("ru = 'OK'"), ТекстОшибки)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначения.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеПроверкаПодключенияКПочтовомуСерверу(), УровеньЖурналаРегистрации.Информация, , , ТекстДляЖурнала); Возврат ТекстОшибки; @@ -1241,6 +1302,10 @@ КонецФункции +Функция СобытиеПроверкаПодключенияКПочтовомуСерверу() + Возврат НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначения.КодОсновногоЯзыка()); +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo index a25dec2f0..c949d739c 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo @@ -10,8 +10,9 @@ <name>УчетныеЗаписиЭлектроннойПочты</name> <synonym> <key>ru</key> - <value>Учетные записи электронной почты</value> + <value>Настройки почты</value> </synonym> + <comment>АПК:58</comment> <useStandardCommands>true</useStandardCommands> <inputByString>Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Description</inputByString> <fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString> @@ -106,7 +107,7 @@ <fullTextSearch>Use</fullTextSearch> <objectPresentation> <key>ru</key> - <value>Учетная запись электронной почты</value> + <value>Настройка почты</value> </objectPresentation> <levelCount>2</levelCount> <foldersOnTop>true</foldersOnTop> @@ -526,8 +527,9 @@ <name>ВладелецУчетнойЗаписи</name> <synonym> <key>ru</key> - <value>Владелец учетной записи</value> + <value>Владелец почты</value> </synonym> + <comment>АПК:58</comment> <type> <types>CatalogRef.Пользователи</types> </type> @@ -541,6 +543,21 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="b5b56a64-5550-4da9-8872-d42ab871d21c"> + <name>ПриОтправкеПисемТребуетсяАвторизация</name> + <synonym> + <key>ru</key> + <value>При отправке писем требуется авторизация</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <forms uuid="ecaa0af8-549c-4c07-82ff-1c4e02ff15b8"> <name>ФормаВыбора</name> <synonym> @@ -600,7 +617,7 @@ <name>ПроверкаНастроекУчетнойЗаписи</name> <synonym> <key>ru</key> - <value>Проверка настроек учетной записи</value> + <value>Проверка настроек почты</value> </synonym> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl index 5d22c649d..a6845b8dc 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl @@ -1475,7 +1475,7 @@ КонецПроцедуры // Параметры: -// ПараметрыВыполнения - Структура - со свойствами: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайлами.ДанныеФайла // &НаКлиенте diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form index 30d3e46d3..3823c71df 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form @@ -4054,6 +4054,19 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ИзменениеФайлов</name> + <id>5</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/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl index 540a076ec..0d43207c1 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl @@ -146,16 +146,19 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства + ИзменениеФайлов = Пользователи.ЭтоПолноправныйПользователь(); УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); ОбновитьЗаголовок(); // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом - + КонецПроцедуры &НаСервере @@ -1110,8 +1113,12 @@ СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); Иначе СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); - СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); СделатьКомандуНедоступной(ИменаКоманд, "Редактировать"); + + Если Не Форма.ИзменениеФайлов Тогда + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + КонецЕсли; + КонецЕсли; СделатьКомандуНедоступной(ИменаКоманд, "Занять"); @@ -1121,8 +1128,11 @@ СделатьКомандуНедоступной(ИменаКоманд, "Расшифровать"); Иначе СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); - СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); СделатьКомандуНедоступной(ИменаКоманд, "СохранитьИзменения"); + + Если Не Форма.ИзменениеФайлов Тогда + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + КонецЕсли; КонецЕсли; Если ФайлПодписан Тогда @@ -1409,7 +1419,8 @@ // Продолжение процедуры ПрочитатьСертификатыПодписей. // // Параметры: -// Контекст - Структура - . +// Контекст - Структура +// &НаКлиенте Процедура ПрочитатьСертификатыПодписейЦиклНачало(Контекст) @@ -1457,8 +1468,9 @@ Возврат; КонецЕсли; - Контекст.Вставить("Сертификат", Сертификаты[0]); - Контекст.Сертификат.НачатьВыгрузку(Новый ОписаниеОповещения( + Сертификат = Сертификаты[0];// СертификатКриптографии + Контекст.Вставить("Сертификат", Сертификат); + Сертификат.НачатьВыгрузку(Новый ОписаниеОповещения( "ПрочитатьСертификатыПодписейЦиклПослеВыгрузкиСертификата", ЭтотОбъект, Контекст, "ПрочитатьСертификатыПодписейЦиклПослеОшибкиВыгрузкиСертификата", ЭтотОбъект)); @@ -1477,11 +1489,12 @@ &НаКлиенте Процедура ПрочитатьСертификатыПодписейЦиклПослеВыгрузкиСертификата(ДанныеСертификата, Контекст) Экспорт + МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); СтрокаТаблицы = Контекст.СтрокаТаблицы; СтрокаТаблицы.Отпечаток = Base64Строка(Контекст.Сертификат.Отпечаток); СтрокаТаблицы.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификата, УникальныйИдентификатор); - СтрокаТаблицы.КомуВыданСертификат = Контекст.МодульЭлектроннаяПодпись.ПредставлениеСубъекта(Контекст.Сертификат); + СтрокаТаблицы.КомуВыданСертификат = МодульЭлектроннаяПодписьКлиент.ПредставлениеСубъекта(Контекст.Сертификат); ПрочитатьСертификатыПодписейЦиклНачало(Контекст); diff --git a/SSL/src/Catalogs/Файлы/ManagerModule.bsl b/SSL/src/Catalogs/Файлы/ManagerModule.bsl index 566eb13fe..54752f682 100644 --- a/SSL/src/Catalogs/Файлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/Файлы/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); @@ -132,6 +133,7 @@ // Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, // которые необходимо обновить на новую версию. +// Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт ОтработаныВсеФайлы = Ложь; diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl index c55dac263..4e50117a5 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl @@ -484,6 +484,7 @@ // Процедура очищает таблицу ответов, от ответов, родительский вопрос которых // не входит в МассивВопросов, выступающий в качестве параметра. +// &НаКлиенте Процедура ОчиститьСписокОтветовЕслиНеобходимо(МассивВопросов) @@ -505,6 +506,7 @@ // Устанавливает нужную страницу формирования структуры табличного вопроса в зависимости от // выбранного типа табличного вопроса. +// &НаКлиенте Процедура УстановитьСтраницуОтветы() @@ -631,6 +633,7 @@ // Устанавливает отборы в элементы форм, предназначенные для // составления списка предопределенных ответов. +// &НаКлиенте Процедура УстановитьОтборы() @@ -701,6 +704,7 @@ // Вызывается при изменении элементов форма, связанных с таблицей ответов. // Параметры: // Элемент - ТаблицаФормы - ЭлементКоторыйВызвал изменение. +// &НаКлиенте Процедура ПриИзмененииОтветов(Элемент) diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl index 18ea699b6..f2e6d1daf 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl @@ -412,6 +412,7 @@ // Устанавливает флаг окончания редактирования шаблона анкеты // и записывает анкету. +// &НаКлиенте Процедура ЗакончитьРедактирование(Команда) diff --git a/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl index 897c42e60..8d2cbc3dc 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl index f0337af74..a952080f5 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl @@ -241,7 +241,7 @@ АдресРезультата = СформироватьСообщениеНаСервере(АдресВременногоХранилища, ПараметрыОтправки, ВидСообщения); - Результат = ПолучитьИзВременногоХранилища(АдресРезультата); + Результат = ПолучитьИзВременногоХранилища(АдресРезультата); // см. ШаблоныСообщенийСлужебный.СформироватьСообщение Результат.Вставить("Предмет", Предмет); Результат.Вставить("Шаблон", ПараметрыОтправки.Шаблон); @@ -280,6 +280,10 @@ КонецФункции +// Параметры: +// Результат - КодВозвратаДиалога +// ПараметрыОтправки - см. ШаблоныСообщенийКлиентСервер.КонструкторПараметровОтправки +// &НаКлиенте Процедура ПослеВводаПараметров(Результат, ПараметрыОтправки) Экспорт @@ -335,7 +339,6 @@ МодульОтправкаSMSКлиент= ОбщегоНазначенияКлиент.ОбщийМодуль("ОтправкаSMSКлиент"); ДополнительныеПараметры = Новый Структура("ПеревестиВТранслит"); - Если Сообщение.ДополнительныеПараметры <> Неопределено Тогда ЗаполнитьЗначенияСвойств(ДополнительныеПараметры, Сообщение.ДополнительныеПараметры); КонецЕсли; @@ -406,6 +409,10 @@ КонецФункции +// Параметры: +// Результат - КодВозвратаДиалога +// ПараметрыОтправки -см. ШаблоныСообщенийКлиентСервер.КонструкторПараметровОтправки +// &НаКлиенте Процедура ПослеВопросаОбОткрытиеФормыСообщения(Результат, ПараметрыОтправки) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда @@ -501,10 +508,11 @@ &НаСервере Процедура УстановитьHTMLВФорматированныйДокумент(ТекстШаблонаПисьмаHTML, СсылкаНаТекущийОбъект); + Сообщение = ШаблоныСообщенийСлужебный.КонструкторСообщения(); + ПараметрШаблона = Новый Структура("Шаблон, УникальныйИдентификатор"); ПараметрШаблона.Шаблон = СсылкаНаТекущийОбъект; ПараметрШаблона.УникальныйИдентификатор = УникальныйИдентификатор; - Сообщение = ШаблоныСообщенийСлужебный.КонструкторСообщения(); Сообщение.Текст = ТекстШаблонаПисьмаHTML; ШаблоныСообщенийСлужебный.ОбработатьHTMLДляФорматированногоДокумента(ПараметрШаблона, Сообщение, Истина); СтруктураВложений = Новый Структура(); @@ -512,6 +520,12 @@ Изображение = Новый Картинка(ПолучитьИзВременногоХранилища(ВложениеВHTML.АдресВоВременномХранилище)); СтруктураВложений.Вставить(ВложениеВHTML.Представление, Изображение); КонецЦикла; + + ПараметрыШаблона = ШаблоныСообщенийСлужебный.ПараметрыШаблона(СсылкаНаТекущийОбъект); + СведенияОШаблоне = ШаблоныСообщенийСлужебный.СведенияОШаблоне(ПараметрыШаблона); + + Сообщение.Текст = ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(ТекстШаблонаПисьмаHTML, СведенияОШаблоне.Реквизиты, "ПараметрыВПредставление"); + Сообщение.Текст = ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(Сообщение.Текст , СведенияОШаблоне.ОбщиеРеквизиты, "ПараметрыВПредставление"); ПредпросмотрФорматированныйДокумент.УстановитьHTML(Сообщение.Текст, СтруктураВложений); КонецПроцедуры diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form index 390919f88..fd649ed0f 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form @@ -3470,6 +3470,22 @@ <common>true</common> </edit> </columns> + <columns> + <name>ПолноеПредставление</name> + <id>8</id> + <valueType> + <types>String</types> + <stringQualifiers> + <length>300</length> + </stringQualifiers> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </columns> </attributes> <attributes> <name>Вложения</name> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl index eaf7cb99e..12331dbc8 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl @@ -74,6 +74,8 @@ Элементы.ПодписьИПечать.Видимость = МодульУправлениеПечатью.НастройкиПечати().ИспользоватьПодписиИПечати; КонецЕсли; + УстановитьТекстШаблона(Объект); + КонецПроцедуры &НаСервере @@ -133,31 +135,23 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - РезультатПроверкиШаблоны = РезультатПроверкиШаблоны(); - Если ЗначениеЗаполнено(РезультатПроверкиШаблоны) Тогда + ИнформацияОПроверке = ОбработатьТекстШаблона(); + + Если Не ИнформацияОПроверке.Успех Тогда ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Шаблон сообщения не может быть записан.'") - + Символы.ПС + РезультатПроверкиШаблоны); + + Символы.ПС + ИнформацияОПроверке.ТекстОшибки); Отказ = Истина; Возврат; КонецЕсли; Если ТекущийОбъект.ПредназначенДляSMS Тогда - ТекущийОбъект.ТекстШаблонаSMS = ТелоСообщенияОбычныйТекст.ПолучитьТекст(); + ТекущийОбъект.ТекстШаблонаSMS = ИнформацияОПроверке.ОбычныйТекст; ТекущийОбъект.ФорматВложений = Неопределено; Иначе - Если ТекущийОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - ТекстВHTML = ""; - ВложенияВHTML = Новый Структура(); - ТелоПисьмаВHTML.ПолучитьHTML(ТекстВHTML, ВложенияВHTML); - ТекущийОбъект.ТекстШаблонаПисьмаHTML = ТекстВHTML; - ТекущийОбъект.ТекстШаблонаПисьма = ТелоПисьмаВHTML.ПолучитьТекст(); - Иначе - ТекущийОбъект.ТекстШаблонаПисьма = ТелоСообщенияОбычныйТекст.ПолучитьТекст(); - Если ПустаяСтрока(ТекущийОбъект.ТекстШаблонаПисьма) Тогда - ТекущийОбъект.ТекстШаблонаПисьма = ТелоПисьмаВHTML.ПолучитьТекст(); - КонецЕсли; - ТекущийОбъект.ТекстШаблонаПисьмаHTML = ТекущийОбъект.ТекстШаблонаПисьма; - КонецЕсли; + + ТекущийОбъект.ТекстШаблонаПисьмаHTML = ИнформацияОПроверке.HTMLТекст; + ТекущийОбъект.ТекстШаблонаПисьма = ИнформацияОПроверке.ОбычныйТекст; + ТекущийОбъект.ТемаПисьма = ИнформацияОПроверке.ТемаПисьма; СписокФорматов = Новый СписокЗначений; Для каждого ЭлементСписка Из ВыбранныеФорматыСохранения Цикл @@ -167,33 +161,34 @@ КонецЦикла; ТекущийОбъект.ФорматВложений = Новый ХранилищеЗначения(СписокФорматов); - КонецЕсли; - - ТаблицаСоответствийИменВложенийИдентификаторам = Новый СписокЗначений; - СтруктураВложений = Новый Структура; - ТелоПисьмаВHTML.ПолучитьHTML(ТекущийОбъект.ТекстШаблонаПисьмаHTML, СтруктураВложений); - Для каждого Вложение Из СтруктураВложений Цикл - ТаблицаСоответствийИменВложенийИдентификаторам.Добавить(Вложение.Ключ, Новый УникальныйИдентификатор,, Вложение.Значение); - КонецЦикла; - - ПараметрыЗаписи.Вставить("ВложенияHTML", ТаблицаСоответствийИменВложенийИдентификаторам); - - Если ТаблицаСоответствийИменВложенийИдентификаторам.Количество() > 0 Тогда + ТаблицаСоответствийИменВложенийИдентификаторам = Новый СписокЗначений; + СтруктураВложений = Новый Структура; + + ТекстШаблонаHTML = ""; // Извлекаем вложения + ТелоПисьмаВHTML.ПолучитьHTML(ТекстШаблонаHTML, СтруктураВложений); + Для каждого Вложение Из СтруктураВложений Цикл + ТаблицаСоответствийИменВложенийИдентификаторам.Добавить(Вложение.Ключ, Новый УникальныйИдентификатор,, Вложение.Значение); + КонецЦикла; + + ПараметрыЗаписи.Вставить("ВложенияHTML", ТаблицаСоответствийИменВложенийИдентификаторам); + + Если ТаблицаСоответствийИменВложенийИдентификаторам.Количество() > 0 Тогда ДокументHTML = ШаблоныСообщенийСлужебный.ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекущийОбъект.ТекстШаблонаПисьмаHTML); - ЗаменитьИменаКартинокНаИдентификаторыПочтовыхВложенийВHTML( ДокументHTML, ТаблицаСоответствийИменВложенийИдентификаторам); + ЗаменитьИменаКартинокНаИдентификаторыПочтовыхВложенийВHTML(ДокументHTML, ТаблицаСоответствийИменВложенийИдентификаторам); ТекущийОбъект.ТекстШаблонаПисьмаHTML = ШаблоныСообщенийСлужебный.ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML); - КонецЕсли; - - ТекущийОбъект.ПечатныеФормыИВложения.Очистить(); - Для каждого Вложение Из Вложения Цикл - Если Вложение.Выбрано = 1 Тогда - НоваяСтрока = ТекущийОбъект.ПечатныеФормыИВложения.Добавить(); - НоваяСтрока.Идентификатор = Вложение.Идентификатор; - НоваяСтрока.Имя = Вложение.ИмяПараметра; КонецЕсли; - КонецЦикла; + + ТекущийОбъект.ПечатныеФормыИВложения.Очистить(); + Для каждого Вложение Из Вложения Цикл + Если Вложение.Выбрано = 1 Тогда + НоваяСтрока = ТекущийОбъект.ПечатныеФормыИВложения.Добавить(); + НоваяСтрока.Идентификатор = Вложение.Идентификатор; + НоваяСтрока.Имя = Вложение.ИмяПараметра; + КонецЕсли; + КонецЦикла; + КонецЕсли; ТекущийОбъект.Параметры.Очистить(); Для каждого ПараметрШаблона Из Объект.Параметры Цикл @@ -204,14 +199,95 @@ КонецПроцедуры +&НаСервере +Функция ОбработатьТекстШаблона() + + ДеревоПараметровШаблона = РеквизитФормыВЗначение("Реквизиты"); + + Результат = Новый Структура; + Результат.Вставить("ОбычныйТекст", ТелоСообщенияОбычныйТекст.ПолучитьТекст()); + Результат.Вставить("HTMLТекст", ""); + Результат.Вставить("ТекстОшибки", ""); + Результат.Вставить("Успех", Истина); + Результат.Вставить("ТемаПисьма", Объект.ТемаПисьма); + Результат.Вставить("ТипТекстаПисьма", Объект.ТипТекстаПисьма); + + ПроверяемыйТекст = ""; + ВариантПреобразования = "ПредставлениеВПараметры"; + + Если Объект.ПредназначенДляSMS Тогда + Результат.ОбычныйТекст = + ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(Результат.ОбычныйТекст, ДеревоПараметровШаблона, ВариантПреобразования); + ПроверяемыйТекст = Результат.ОбычныйТекст; + Иначе + Если Результат.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + + ВложенияВHTML = Новый Структура(); + ТелоПисьмаВHTML.ПолучитьHTML(Результат.HTMLТекст, ВложенияВHTML); + + Результат.HTMLТекст = ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(СтрЗаменить(Результат.HTMLТекст, """, """"), ДеревоПараметровШаблона, ВариантПреобразования); + Результат.ОбычныйТекст = ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(ТелоПисьмаВHTML.ПолучитьТекст(), ДеревоПараметровШаблона, ВариантПреобразования); + ПроверяемыйТекст = Результат.HTMLТекст; + + Иначе + + Если ПустаяСтрока(Результат.ОбычныйТекст) Тогда + Результат.ОбычныйТекст = ТелоПисьмаВHTML.ПолучитьТекст(); + КонецЕсли; + Результат.ОбычныйТекст = ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(Результат.ОбычныйТекст, + ДеревоПараметровШаблона, ВариантПреобразования); + Результат.HTMLТекст = Результат.ОбычныйТекст; + + ПроверяемыйТекст = Результат.ОбычныйТекст; + + КонецЕсли; + + Результат.ТемаПисьма = ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(Результат.ТемаПисьма, ДеревоПараметровШаблона, ВариантПреобразования); + ПроверяемыйТекст = ПроверяемыйТекст + Результат.ТемаПисьма; + + КонецЕсли; + + // проверка + + ОшибочныеПараметры = Новый Массив; + ПараметрыШаблонаИзТекста = ШаблоныСообщенийСлужебный.ПараметрыТекстаСообщения(ПроверяемыйТекст); + + Для каждого ПараметрШаблонаИзТекста Из ПараметрыШаблонаИзТекста Цикл + + ОписаниеПараметра = ШаблоныСообщенийСлужебный.ИмяПараметраБезСтрокиФормата(ПараметрШаблонаИзТекста.Ключ); + + НайденныеСтроки = ДеревоПараметровШаблона.Строки.НайтиСтроки(Новый Структура("Имя", ОписаниеПараметра.Имя), Истина); + Если НайденныеСтроки.Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + ОшибочныеПараметры.Добавить( ОписаниеПараметра.Имя); + + КонецЦикла; + + Если ОшибочныеПараметры.Количество() > 0 Тогда + ТекстОшибки = ?(ОшибочныеПараметры.Количество() = 1, + НСтр("ru = 'Некорректный реквизит в шаблоне сообщения:'"), + НСтр("ru = 'Некорректные реквизиты в шаблоне сообщения:'")); + Результат.ТекстОшибки = ТекстОшибки + " " + СтрСоединить(ОшибочныеПараметры, ", "); + Результат.Успех = Ложь; + КонецЕсли; + + Возврат Результат; + +КонецФункции + &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + Если ТекущийОбъект.ПредназначенДляSMS Тогда + Возврат; + КонецЕсли; // Добавим в список удаленных вложений ранее сохраненные картинки, отображаемые в теле форматированного документа. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); - СписокФайлов = Новый Массив; + СписокФайлов = Новый Массив; // Массив из ОпределяемыйТип.ПрисоединенныйФайл МодульРаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(ТекущийОбъект.Ссылка, СписокФайлов); Для каждого Вложение Из СписокФайлов Цикл Если ЗначениеЗаполнено(Вложение.ИДФайлаЭлектронногоПисьма) Тогда @@ -220,12 +296,12 @@ КонецЦикла; КонецЕсли; - СохранитьКартинкиФорматированногоДокументаКакПрисоединенныеФайлы(ТекущийОбъект.Ссылка, + СохранитьКартинкиФорматированногоДокументаКакПрисоединенныеФайлы(ТекущийОбъект.Ссылка, ТекущийОбъект.ТипТекстаПисьма, ПараметрыЗаписи.ВложенияHTML, УникальныйИдентификатор); Индекс = Вложения.Количество() - 1; Пока Индекс >= 0 Цикл - СтрокаТаблицыВложений = Вложения.Получить(Индекс); + СтрокаТаблицыВложений = ШаблоныСообщений.СтрокаВложений(Вложения.Получить(Индекс)); Если СтрокаТаблицыВложений.Статус = "ВнешнийУдаляемый" Тогда Если Не СтрокаТаблицыВложений.Ссылка.Пустая() Тогда УдалитьПрисоединенныйФайл(СтрокаТаблицыВложений.Ссылка); @@ -421,13 +497,26 @@ Процедура РеквизитыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) Отказ = Истина; Если ИспользоватьПроизвольныеПараметры Тогда - ДополнительныеПараметры = Новый Структура("Добавление", Истина); + ДополнительныеПараметры = ДополнительныеПараметрыДобавленияРеквизитов(); ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПослеЗакрытияФормыПараметра", ЭтотОбъект, ДополнительныеПараметры); ПараметрыФормы = Новый Структура("СписокПараметров, ПолноеИмяТипаПараметраВводаНаОсновании", Объект.Параметры, Объект.ПолноеИмяТипаПараметраВводаНаОсновании); ОткрытьФорму("Справочник.ШаблоныСообщений.Форма.ПроизвольныйПараметр", ПараметрыФормы,,,,, ОповещениеОЗакрытие); КонецЕсли; КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Добавление - Булево +// +&НаКлиенте +Функция ДополнительныеПараметрыДобавленияРеквизитов() + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Добавление", Истина); + Возврат ДополнительныеПараметры; + +КонецФункции + &НаКлиенте Процедура РеквизитыПриАктивизацииСтроки(Элемент) ТекущиеДанные = Элементы.Реквизиты.ТекущиеДанные; @@ -473,6 +562,7 @@ &НаКлиенте Процедура РеквизитыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение) + ПеретаскиваемыеОбъекты = ПараметрыПеретаскивания.Значение; ТекстДляВставки = ""; Разделитель = ""; @@ -480,13 +570,12 @@ ЭлементДерева = Реквизиты.НайтиПоИдентификатору(ПеретаскиваемыйОбъект); Если ЭлементДерева.ПолучитьЭлементы().Количество() = 0 Тогда ФорматВывода = ?(ПустаяСтрока(ЭлементДерева.Формат), "", "{" + ЭлементДерева.Формат +"}"); - ТекстДляВставки = ТекстДляВставки + Разделитель + "[" + ЭлементДерева.Имя + ФорматВывода + "]"; + ТекстДляВставки = ТекстДляВставки + Разделитель + "[" + ЭлементДерева.ПолноеПредставление + ФорматВывода + "]"; Разделитель = " "; КонецЕсли; КонецЦикла; ПараметрыПеретаскивания.Значение = ТекстДляВставки; - КонецПроцедуры &НаКлиенте @@ -533,15 +622,17 @@ Процедура ПроверитьШаблон(Команда) ОчиститьСообщения(); - РезультатПроверкиШаблоны = РезультатПроверкиШаблоны(); - Если ЗначениеЗаполнено(РезультатПроверкиШаблоны) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатПроверкиШаблоны); - Иначе + ИнформацияОПроверке = ОбработатьТекстШаблона(); + + Если ИнформацияОПроверке.Успех Тогда ПоказатьПредупреждение(, НСтр("ru = 'Шаблон заполнен корректно'")); + Иначе + ОбщегоНазначенияКлиент.СообщитьПользователю(ИнформацияОПроверке.ТекстОшибки); КонецЕсли; КонецПроцедуры + &НаКлиенте Процедура ВнешнейОбработкой(Команда) @@ -633,7 +724,7 @@ Если ТекущиеДанные <> Неопределено Тогда ФорматВывода = ?(ПустаяСтрока(ТекущиеДанные.Формат), "", "{" + ТекущиеДанные.Формат +"}"); НачалоПараметра = ?(Прав(Объект.ТемаПисьма, 1) = " ", "[", " ["); - Объект.ТемаПисьма = Объект.ТемаПисьма + НачалоПараметра + ТекущиеДанные.Имя + ФорматВывода + "]"; + Объект.ТемаПисьма = Объект.ТемаПисьма + НачалоПараметра + ТекущиеДанные.ПолноеПредставление + ФорматВывода + "]"; КонецЕсли; КонецПроцедуры @@ -682,6 +773,10 @@ #Область СлужебныеПроцедурыИФункции +// Параметры: +// ОписаниеПараметра - Структура +// ДополнительныеПараметры - см. ДополнительныеПараметрыДобавленияРеквизитов +// &НаКлиенте Процедура ПослеЗакрытияФормыПараметра(ОписаниеПараметра, ДополнительныеПараметры) Экспорт Если ТипЗнч(ОписаниеПараметра) = Тип("Структура") Тогда @@ -984,18 +1079,31 @@ &НаСервере Процедура УстановитьТекстШаблона(ТекущийОбъект, СписокФайлов = Неопределено) + СписокВсехПараметров = РеквизитФормыВЗначение("Реквизиты"); + Если СписокВсехПараметров.Строки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Если ТекущийОбъект.ПредназначенДляSMS Тогда - ТелоСообщенияОбычныйТекст.УстановитьТекст(ТекущийОбъект.ТекстШаблонаSMS); + ТелоСообщенияОбычныйТекст.УстановитьТекст( + ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(ТекущийОбъект.ТекстШаблонаSMS, СписокВсехПараметров, "ПараметрыВПредставление")); + Иначе Если ТекущийОбъект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - УстановитьHTMLДляФорматированногоДокумента(ТекущийОбъект.ТекстШаблонаПисьмаHTML, ТекущийОбъект.Ссылка, СписокФайлов); + УстановитьHTMLДляФорматированногоДокумента( + ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(ТекущийОбъект.ТекстШаблонаПисьмаHTML, СписокВсехПараметров, "ПараметрыВПредставление"), ТекущийОбъект.Ссылка, СписокФайлов); Иначе - ТелоСообщенияОбычныйТекст.УстановитьТекст(ТекущийОбъект.ТекстШаблонаПисьма); + ТелоСообщенияОбычныйТекст.УстановитьТекст( + ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(ТекущийОбъект.ТекстШаблонаПисьма, СписокВсехПараметров, "ПараметрыВПредставление")); КонецЕсли; + + Объект.ТемаПисьма = ШаблоныСообщенийСлужебный.ПреобразоватьТекстШаблона(ТекущийОбъект.ТемаПисьма, СписокВсехПараметров, "ПараметрыВПредставление"); + КонецЕсли; - + КонецПроцедуры + &НаСервере Процедура ОтображениеЭлементовФормы(ФорматаПисьма = "") @@ -1248,33 +1356,6 @@ КонецПроцедуры -// проверить шаблон -&НаСервере -Функция РезультатПроверкиШаблоны() - - ПараметрыШаблона = ШаблоныСообщенийСлужебный.ПараметрыШаблона(Объект); - СведенияОШаблоне = ШаблоныСообщенийСлужебный.СведенияОШаблоне(ПараметрыШаблона); - - ОшибочныеРеквизиты = Новый Массив; - ПараметрыТекстаСообщения = ШаблоныСообщенийСлужебный.ПараметрыИзТекстаСообщения(ПараметрыШаблона); - ШаблоныСообщенийСлужебный.ОпределитьОшибочныеРеквизиты(ПараметрыТекстаСообщения, ОшибочныеРеквизиты, СведенияОШаблоне); - - ТекстОшибки = ""; - Если ОшибочныеРеквизиты.Количество() > 0 Тогда - ТекстОшибки = ?(ОшибочныеРеквизиты.Количество() = 1, - НСтр("ru = 'Некорректный реквизит в шаблоне сообщения:'"), - НСтр("ru = 'Некорректные реквизиты в шаблоне сообщения:'")) + " "; - Разделитель = ""; - Для каждого ОшибочныйРеквизит Из ОшибочныеРеквизиты Цикл - ТекстОшибки = ТекстОшибки + Разделитель + СокрЛП(ОшибочныйРеквизит); - Разделитель = ", "; - КонецЦикла; - КонецЕсли; - - Возврат ТекстОшибки; - -КонецФункции - // Вынужденная установка свойств на сервере &НаСервере @@ -1309,7 +1390,9 @@ Элементы.ФормаЭлектронноеПисьмоHTML.Пометка = Ложь; Объект.ТипТекстаПисьма = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст"); Если ТребуетсяПереносТекста Тогда - ТелоСообщенияОбычныйТекст.УстановитьТекст(ТелоПисьмаВHTML.ПолучитьТекст()); + ШаблонОбычнымТекстом = ТелоПисьмаВHTML.ПолучитьТекст(); + ТелоСообщенияОбычныйТекст.УстановитьТекст(ШаблонОбычнымТекстом); + Объект.ТекстШаблонаПисьма = ШаблонОбычнымТекстом; КонецЕсли; Элементы.СкрытыйЗаголовокПараметры.Видимость = Ложь; @@ -1488,7 +1571,7 @@ &НаСервере Функция СкопироватьВложенияИзИсточника() - СписокФайлов = Новый Массив; + СписокФайлов = Новый Массив; // Массив из ОпределяемыйТип.ПрисоединенныйФайл СписокОшибок = Неопределено; ОписаниеОшибки = НСтр("ru = 'Не удалось скопировать вложение по причине: %1'"); @@ -1720,8 +1803,6 @@ &НаСервере Процедура ЗаполнитьПроизвольныеПараметрыИзОбъекта(Знач ТекущийОбъект) - Перем НайденныеСтроки, Отбор, ПараметрШаблонаТекущийОбъект; - Для каждого ПараметрШаблонаТекущийОбъект Из ТекущийОбъект.Параметры Цикл Отбор = Новый Структура("ИмяПараметра", ПараметрШаблонаТекущийОбъект.ИмяПараметра); НайденныеСтроки = Объект.Параметры.НайтиСтроки(Отбор); @@ -1832,13 +1913,13 @@ НайденнаяСтрока = Реквизиты.НайтиПоИдентификатору(НомерСтроки); Если НайденнаяСтрока <> Неопределено Тогда ФорматВывода = ?(ПустаяСтрока(НайденнаяСтрока.Формат), "", "{" + НайденнаяСтрока.Формат +"}"); - Текст = Текст + "[" + НайденнаяСтрока.Имя + ФорматВывода + "] "; + Текст = Текст + "[" + НайденнаяСтрока.ПолноеПредставление + ФорматВывода + "] "; КонецЕсли; КонецЦикла; Если Объект.ТипТекстаПисьма = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда Если ПустаяСтрока(Элементы.ТелоПисьмаВHTML.ВыделенныйТекст) Тогда ЗакладкаДляВставкиНачало = Неопределено; - ЗакладкаДляВставкиКонец = Неопределено; + ЗакладкаДляВставкиКонец = Неопределено; Элементы.ТелоПисьмаВHTML.ПолучитьГраницыВыделения(ЗакладкаДляВставкиНачало, ЗакладкаДляВставкиКонец); ТелоПисьмаВHTML.Вставить(ЗакладкаДляВставкиКонец, Текст); Иначе @@ -1855,5 +1936,4 @@ КонецПроцедуры - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl index eeb53ef5d..19fd12038 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl @@ -88,4 +88,193 @@ #КонецОбласти +#Область СлужебныеПроцедурыИФункции + +#Область ОбновлениеИнформационнойБазы + +// Регистрирует к обработке шаблоны сообщений. +// +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШаблоныСообщений.Ссылка КАК Ссылка + |ИЗ + | Справочник.ШаблоныСообщений КАК ШаблоныСообщений"; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + ШаблоныКОбработке = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ШаблоныКОбработке); + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Шаблон = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.ШаблоныСообщений"); + + ПроблемныхОбъектов = 0; + ОбъектовОбработано = 0; + + Пока Шаблон.Следующий() Цикл + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ШаблоныСообщений"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Шаблон.Ссылка); + + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + + ШаблонОбъект = Шаблон.Ссылка.ПолучитьОбъект(); + Если ШаблонОбъект = Неопределено Тогда // объект может быть уже удален в других сеансах + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Шаблон.Ссылка); + ОбъектовОбработано = ОбъектовОбработано + 1; + ЗафиксироватьТранзакцию(); + Продолжить; + КонецЕсли; + + ПараметрыШаблона = ШаблоныСообщенийСлужебный.ПараметрыШаблона(Шаблон.Ссылка); + СведенияОШаблоне = ШаблоныСообщенийСлужебный.СведенияОШаблоне(ПараметрыШаблона); + + МетаданныеОбъект = Метаданные.НайтиПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения); + + Если МетаданныеОбъект = Неопределено Тогда + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Шаблон.Ссылка); + ОбъектовОбработано = ОбъектовОбработано + 1; + ЗафиксироватьТранзакцию(); + Продолжить; + КонецЕсли; + + ПараметрыДляЗамены = Новый Соответствие; + Префикс = МетаданныеОбъект.Имя + "."; + + Для каждого РеквизитОбъектаНазначения Из МетаданныеОбъект.Реквизиты Цикл + Если РеквизитОбъектаНазначения.Тип.Типы().Количество() = 1 Тогда + ТипОбъекта = Метаданные.НайтиПоТипу(РеквизитОбъектаНазначения.Тип.Типы()[0]); + Если ТипОбъекта <> Неопределено И СтрНачинаетсяС(ТипОбъекта.ПолноеИмя(), "Справочник") Тогда + МетаданныеВложенногоОбъект = Метаданные.НайтиПоПолномуИмени(ТипОбъекта.ПолноеИмя()); + ВложенныйПредмет = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ТипОбъекта.ПолноеИмя()).ПустаяСсылка(); + ПодготовитьПараметрыСвойствоИКИ(МетаданныеВложенногоОбъект, ВложенныйПредмет, ПараметрыДляЗамены, Префикс + РеквизитОбъектаНазначения.Имя + "."); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Предмет = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения).ПустаяСсылка(); + ПодготовитьПараметрыСвойствоИКИ(МетаданныеОбъект, Предмет, ПараметрыДляЗамены, Префикс); + + СформироватьПараметрыДляЗамены(СведенияОШаблоне.ОбщиеРеквизиты.Строки, ПараметрыДляЗамены, ""); + + Если ПараметрыШаблона.ТипШаблона = "Письмо" Тогда + + Для каждого РеквизитДляЗамены Из ПараметрыДляЗамены Цикл + ШаблонОбъект.ТемаПисьма = СтрЗаменить(ШаблонОбъект.ТемаПисьма, РеквизитДляЗамены.Ключ, РеквизитДляЗамены.Значение); + ШаблонОбъект.ТекстШаблонаПисьмаHTML = СтрЗаменить(ШаблонОбъект.ТекстШаблонаПисьмаHTML, РеквизитДляЗамены.Ключ, РеквизитДляЗамены.Значение); + ШаблонОбъект.ТекстШаблонаПисьма = СтрЗаменить(ШаблонОбъект.ТекстШаблонаПисьма, РеквизитДляЗамены.Ключ, РеквизитДляЗамены.Значение); + КонецЦикла; + + Иначе + + Для каждого РеквизитДляЗамены Из ПараметрыДляЗамены Цикл + ШаблонОбъект.ТекстШаблонаSMS = СтрЗаменить(ШаблонОбъект.ТекстШаблонаSMS, РеквизитДляЗамены.Ключ, РеквизитДляЗамены.Значение); + КонецЦикла; + + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ШаблонОбъект); + + ОбъектовОбработано = ОбъектовОбработано + 1; + ЗафиксироватьТранзакцию(); + Исключение + // Если не удалось обработать шаблон сообщения, повторяем попытку снова. + ОтменитьТранзакцию(); + ПроблемныхОбъектов = ПроблемныхОбъектов + 1; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать шаблон сообщения: %1 по причине: %2'"), + Шаблон.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + Метаданные.Справочники.ШаблоныСообщений, Шаблон.Ссылка, ТекстСообщения); + КонецПопытки; + КонецЦикла; + + Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.ШаблоныСообщений"); + + Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые шаблоны сообщений (пропущены): %1'"), + ПроблемныхОбъектов); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, + Метаданные.Справочники.ШаблоныСообщений,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Процедура обновления обработала очередную порцию шаблонов сообщений: %1'"), + ОбъектовОбработано)); + КонецЕсли; + +КонецПроцедуры + +Процедура СформироватьПараметрыДляЗамены(Строки, РеквизитыДляЗамены, Префикс) + + Для каждого РеквизитОбъектаНазначения Из Строки Цикл + + Если РеквизитОбъектаНазначения.Тип.Типы().Количество() = 1 Тогда + ТипОбъекта = Метаданные.НайтиПоТипу(РеквизитОбъектаНазначения.Тип.Типы()[0]); + Если ТипОбъекта <> Неопределено И СтрНачинаетсяС(ТипОбъекта.ПолноеИмя(), "Справочник") Тогда + МетаданныеВложенногоОбъект = Метаданные.НайтиПоПолномуИмени(ТипОбъекта.ПолноеИмя()); + ВложенныйПредмет = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ТипОбъекта.ПолноеИмя()).ПустаяСсылка(); + ПодготовитьПараметрыСвойствоИКИ(МетаданныеВложенногоОбъект, ВложенныйПредмет, РеквизитыДляЗамены, Префикс + РеквизитОбъектаНазначения.Имя + "."); + Продолжить; + КонецЕсли; + КонецЕсли; + + Если РеквизитОбъектаНазначения.Строки.Количество() > 0 Тогда + СформироватьПараметрыДляЗамены(РеквизитОбъектаНазначения.Строки, РеквизитыДляЗамены, Префикс); + + КонецЕсли; + + + КонецЦикла; + +КонецПроцедуры + +Процедура ПодготовитьПараметрыСвойствоИКИ(Знач МетаданныеОбъект, Знач Предмет, Знач РеквизитыДляЗамены, Префикс) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ВидыКонтактнойИнформацией = МодульУправлениеКонтактнойИнформацией.ВидыКонтактнойИнформацииОбъекта(Предмет); + Если ВидыКонтактнойИнформацией.Количество() > 0 Тогда + Для каждого ВидКонтактнойИнформацией Из ВидыКонтактнойИнформацией Цикл + РеквизитыДляЗамены.Вставить("[" + Префикс + ВидКонтактнойИнформацией.Наименование + "]", "[" + Префикс + "~КИ." + ВидКонтактнойИнформацией.ИдентификаторДляФормул + "]"); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Свойства = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + ПолучатьДопСведения = МодульУправлениеСвойствами.ИспользоватьДопСведения(Предмет); + ПолучатьДопРеквизиты = МодульУправлениеСвойствами.ИспользоватьДопРеквизиты(Предмет); + + Если ПолучатьДопРеквизиты Или ПолучатьДопСведения Тогда + Свойства = МодульУправлениеСвойствами.СвойстваОбъекта(Предмет, ПолучатьДопРеквизиты, ПолучатьДопСведения); + Для каждого Свойство Из Свойства Цикл + РеквизитыДляЗамены.Вставить("[" + Префикс + Свойство.Наименование + "]", "[" + Префикс + "~Свойство." + Свойство.ИдентификаторДляФормул + "]"); + КонецЦикла; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + + #КонецЕсли diff --git a/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl index c0b9772bf..ec189d0e3 100644 --- a/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl index c0b9772bf..ec189d0e3 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl index c0b9772bf..ec189d0e3 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl index 1dd11c626..d69b58c23 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl @@ -181,6 +181,10 @@ #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ПодключаемыеКоманды +// +// Параметры: +// Команда - КомандаФормы +// &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) Если СтрНачинаетсяС(Команда.Имя, "ВариантыОтветовАнкет") Тогда diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl index 479599a77..ca3268fe4 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl index 3cdfb1f6f..7c6ecbde9 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl @@ -55,6 +55,7 @@ // Процедура очищает значения ненужных реквизитов, // Такая ситуация возникает, когда пользователь изменяет тип ответа при редактировании. +// Процедура ОчиститьНенужныеРеквизиты() Если ((ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Число) И (ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Строка) И (ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Текст)) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl index 26bd66b65..c3af1b220 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl @@ -169,12 +169,23 @@ ТаблицаФормы = Элементы.ЗависимостиРеквизитов; ТекущаяСтрока = ЗависимостиРеквизитов.НайтиПоИдентификатору(ТаблицаФормы.ТекущаяСтрока); - ТекущаяСтрока.Значение = Неопределено; Если ТаблицаФормы.ТекущиеДанные.Условие = "ВСписке" Или ТаблицаФормы.ТекущиеДанные.Условие = "НеВСписке" Тогда - ТекущаяСтрока.Значение = Новый СписокЗначений; - ТекущаяСтрока.Значение.ТипЗначения = ТаблицаФормы.ТекущиеДанные.ТипЗначения; + Если ТипЗнч(ТекущаяСтрока.Значение) <> Тип("СписокЗначений") Тогда + СтароеЗначение = ТекущаяСтрока.Значение; + ТекущаяСтрока.Значение = Новый СписокЗначений; + ТекущаяСтрока.Значение.ТипЗначения = ТаблицаФормы.ТекущиеДанные.ТипЗначения; + Если ЗначениеЗаполнено(СтароеЗначение) Тогда + ТекущаяСтрока.Значение.Добавить(СтароеЗначение); + КонецЕсли; + КонецЕсли; + ИначеЕсли ТаблицаФормы.ТекущиеДанные.Условие = "Равно" + Или ТаблицаФормы.ТекущиеДанные.Условие = "НеРавно" Тогда + Если ТипЗнч(ТекущаяСтрока.Значение) = Тип("СписокЗначений") + И ТекущаяСтрока.Значение.Количество() > 0 Тогда + ТекущаяСтрока.Значение = ТекущаяСтрока.Значение[0].Значение; + КонецЕсли; Иначе ТекущаяСтрока.Значение = Неопределено; КонецЕсли; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl index 61ce51cbc..3971caa28 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl @@ -57,6 +57,7 @@ РазблокируемыеРеквизиты = Новый Массив; РазблокируемыеРеквизиты.Добавить("ТипЗначения"); РазблокируемыеРеквизиты.Добавить("Имя"); + РазблокируемыеРеквизиты.Добавить("ИдентификаторДляФормул"); Закрыть(РазблокируемыеРеквизиты); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form index d0ae2d63d..63c0cfe84 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form @@ -1332,6 +1332,10 @@ <value>Краткое представление свойства, которое выводится в формах редактирования его значения.</value> </toolTip> + <handlers> + <event>OnChange</event> + <name>ЗаголовокПриИзменении</name> + </handlers> <extendedTooltip> <name>ЗаголовокExtendedTooltip</name> <id>118</id> @@ -2339,6 +2343,106 @@ <items xsi:type="form:FormGroup"> <name>ОстальныеРеквизиты</name> <id>107</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаИдентификаторДляФормул</name> + <id>481</id> + <items xsi:type="form:FormField"> + <name>ИдентификаторДляФормул</name> + <id>483</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.ИдентификаторДляФормул</segments> + </dataPath> + <extendedTooltip> + <name>ИдентификаторДляФормулРасширеннаяПодсказка</name> + <id>485</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ИдентификаторДляФормулКонтекстноеМеню</name> + <id>484</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:Button"> + <name>ЗаполнитьИдентификаторДляФормул</name> + <id>486</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ЗаполнитьИдентификаторДляФормулРасширеннаяПодсказка</name> + <id>487</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <type>UsualButton</type> + <commandName>Form.Command.ЗаполнитьИдентификаторДляФормул</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Идентификатор для формул</value> + + + ГруппаИдентификаторДляФормулРасширеннаяПодсказка + 482 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + Подсказка 30 @@ -5289,6 +5393,32 @@ DontUse Auto + + ЗаполнитьИдентификаторДляФормул + + <key>ru</key> + <value>Заполнить идентификатор для формул</value> + + 11 + + ru + Заполнить идентификатор для формул + + + true + + + CommonPicture.ЗаполнитьФорму + + + + ЗаполнитьИдентификаторДляФормул + + + Picture + Auto + Auto + ЭтоДополнительноеСведение diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html index 0bf60f159..c0be6e473 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html @@ -54,7 +54,7 @@
  • Сделать копию реквизита по образцу - создается дополнительный реквизит (сведение) с общим списком значений. Должен быть включен флажок Реквизиты и сведения с общим списком значений в разделе Администрирование - Общие настройки.
  • -
  • Добавить общий реквизит в набор - сделать дополнительный реквизит (сведение) общим. В этом случае общим становится не список значений, а сам реквизит. Должен быть включен флажок Общие реквизиты и сведения в разделе Администрирование - Общие настройки.
  • Копирование дополнительных реквизитов (сведений)

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

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

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

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

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

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

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

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

    Типы значений дополнительных реквизитов и сведений

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

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

    • Строка - Определите Длину строки, выберите параметр Фиксированная или Переменная (если введенная строка получится меньше предполагаемой длины, то количество знаков, отведенное под это значение, будет автоматически уменьшено до фактической). Максимальная длина строки в этом случае 1024 символа. Также можно включить флажок Неограниченная, если планируется вводить большой объем текстовой информации.
      • Для дополнительного реквизита типа Строка в программе предлагается возможность сделать поле многострочным. Для этого включите флажок Многострочное поле ввода и введите количество строк.
    • diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl index 4a67da145..25b024d8e 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl @@ -62,6 +62,8 @@ Элементы.ТипЗначенияРеквизита.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; КонецЕсли; + Элементы.ЗаполнитьИдентификаторДляФормул.Доступность = НЕ Элементы.ИдентификаторДляФормул.ТолькоПросмотр; + МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект); ТекущийЗаголовок = Объект.Заголовок; @@ -153,6 +155,31 @@ КонецЕсли; КонецЕсли; + Если НЕ ПараметрыЗаписи.Свойство("КогдаИдентификаторДляФормулУжеИспользуется") + И ЗначениеЗаполнено(Объект.ИдентификаторДляФормул) Тогда + // Заполнение идентификатора для формул + // и проверка есть ли свойство с тем же наименованием. + ТекстВопроса = ИдентификаторДляФормулУжеИспользуется( + Объект.ИдентификаторДляФормул, Объект.Ссылка); + + Если ЗначениеЗаполнено(ТекстВопроса) Тогда + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("ПродолжитьЗапись", НСтр("ru = 'Продолжить'")); + Кнопки.Добавить("ВернутьсяКВводуИдентификатора", НСтр("ru = 'Отмена'")); + + ПоказатьВопрос( + Новый ОписаниеОповещения("ПослеОтветаНаВопросКогдаИдентификаторДляФормулУжеИспользуется", ЭтотОбъект, ПараметрыЗаписи), + ТекстВопроса, Кнопки, , "ПродолжитьЗапись"); + + ОтказПриЗаписи = Истина; + Отказ = Истина; + Возврат; + + Иначе + ПараметрыЗаписи.Вставить("ПроверкаИдентификатораДляФормулВыполнена"); + КонецЕсли; + КонецЕсли; + Если ПараметрыЗаписи.Свойство("ОбработкаПродолжения") Тогда ОбработкаПродолженияПриОшибкеЗаписи = ПараметрыЗаписи.ОбработкаПродолжения; ПодключитьОбработчикОжидания("ПослеОшибкиЗаписи", 0.1, Истина); @@ -207,6 +234,19 @@ ТекущийОбъект.Имя = ТекущийОбъект.Имя + "_" + СтрокаУИД; КонецЕсли; + // Формирование идентификатора для формул дополнительного реквизита (сведения). + Если Не ЗначениеЗаполнено(ТекущийОбъект.ИдентификаторДляФормул) + Или ПараметрыЗаписи.Свойство("КогдаИдентификаторДляФормулУжеИспользуется") Тогда + ЗаголовокОбъекта = ЗаголовокДляФормированияИдентификатора(ТекущийОбъект.Заголовок, ТекущийОбъект.Представления); + ТекущийОбъект.ИдентификаторДляФормул = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.УникальныйИдентификаторДляФормул( + ЗаголовокОбъекта, ТекущийОбъект.Ссылка); + + ПараметрыЗаписи.Вставить("ПроверкаИдентификатораДляФормулВыполнена"); + КонецЕсли; + Если ПараметрыЗаписи.Свойство("ПроверкаИдентификатораДляФормулВыполнена") Тогда + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверкаИдентификатораДляФормулВыполнена"); + КонецЕсли; + МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект); КонецПроцедуры @@ -326,6 +366,13 @@ УстановитьЗависимостиДополнительныхРеквизитов(); КонецЕсли; + Если ИмяСобытия = "ПослеВводаСтрокНаРазныхЯзыках" + И Параметр = ЭтотОбъект Тогда + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда + ОбновитьПредлагаемоеЗначениеИдентификатора(); + КонецЕсли; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -542,6 +589,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗаголовокПриИзменении(Элемент) + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда + ОбновитьПредлагаемоеЗначениеИдентификатора(); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -706,10 +760,52 @@ ЗаписатьОбъект("ИзменениеПометкиУдаления", ОбработчикПродолжения); КонецПроцедуры +&НаКлиенте +Процедура ЗаполнитьИдентификаторДляФормул(Команда) + ЗаполнитьИдентификаторДляФормулНаСервере(); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаСервере +Процедура ОбновитьПредлагаемоеЗначениеИдентификатора() + + ПредлагаемыйИдентификатор = ""; + Если Не Элементы.ИдентификаторДляФормул.ТолькоПросмотр Тогда + Представление = ЗаголовокДляФормированияИдентификатора(Объект.Заголовок, Объект.Представления); + ПредлагаемыйИдентификатор = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.УникальныйИдентификаторДляФормул( + Представление, Объект.Ссылка); + Если ПредлагаемыйИдентификатор <> Объект.ИдентификаторДляФормул Тогда + Объект.ИдентификаторДляФормул = ПредлагаемыйИдентификатор; + Модифицированность = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьИдентификаторДляФормулНаСервере() + ЗаголовокДляИдентификатора = ЗаголовокДляФормированияИдентификатора(Объект.Заголовок, Объект.Представления); + Объект.ИдентификаторДляФормул = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.УникальныйИдентификаторДляФормул( + ЗаголовокДляИдентификатора, Объект.Ссылка); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаголовокДляФормированияИдентификатора(Знач Заголовок, Знач Представления) + Если ТекущийЯзык() <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); + НайденныеСтроки = Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Заголовок = НайденныеСтроки[0].Заголовок; + КонецЕсли; + КонецЕсли; + + Возврат Заголовок; +КонецФункции + &НаСервере Процедура УстановитьЗависимостиДополнительныхРеквизитов() @@ -1032,10 +1128,7 @@ ЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы(ЭтотОбъект, РазблокируемыеРеквизиты); - - #Если ВебКлиент Тогда - ОбновитьОтображениеДанных(); - #КонецЕсли + Элементы.ЗаполнитьИдентификаторДляФормул.Доступность = НЕ Элементы.ИдентификаторДляФормул.ТолькоПросмотр; КонецПроцедуры @@ -1093,6 +1186,23 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеОтветаНаВопросКогдаИдентификаторДляФормулУжеИспользуется(Ответ, ПараметрыЗаписи) Экспорт + + Если Ответ <> "ПродолжитьЗапись" Тогда + Если ПараметрыЗаписи.Свойство("ОбработкаПродолжения") Тогда + ВыполнитьОбработкуОповещения( + Новый ОписаниеОповещения(ПараметрыЗаписи.ОбработкаПродолжения.ИмяПроцедуры, + ЭтотОбъект, ПараметрыЗаписи.ОбработкаПродолжения.Параметры), + Истина); + КонецЕсли; + Иначе + ПараметрыЗаписи.Вставить("КогдаИдентификаторДляФормулУжеИспользуется"); + Записать(ПараметрыЗаписи); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПослеПодтвержденияОчисткиВесовыхКоэффициентов(Ответ, Контекст) Экспорт @@ -1858,6 +1968,8 @@ КонецЕсли; КонецЕсли; + Элементы.ЗаполнитьИдентификаторДляФормул.Доступность = НЕ Элементы.ИдентификаторДляФормул.ТолькоПросмотр; + КонецПроцедуры &НаСервере @@ -1904,7 +2016,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - ЗначениеОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ЗначениеОбъект = Выборка.Ссылка.ПолучитьОбъект();// СправочникОбъект.ЗначенияСвойствОбъектов ЗначениеОбъект.Вес = 0; ЗначениеОбъект.Записать(); КонецЦикла; @@ -2239,13 +2351,6 @@ |ГДЕ | Наборы.Ссылка = &Набор"; - Если ЭтоДополнительноеСведение Тогда - Запрос.Текст = СтрЗаменить( - Запрос.Текст, - "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты", - "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения"); - КонецЕсли; - Иначе Запрос.Текст = "ВЫБРАТЬ @@ -2284,7 +2389,7 @@ | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления | ПО Свойства.Ссылка = СвойстваПредставления.Ссылка | И СвойстваПредставления.КодЯзыка = &КодЯзыка - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.[ИмяТаблицы] КАК СоставНабора + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СоставНабора | ПО Свойства.Ссылка = СоставНабора.Свойство | |ГДЕ @@ -2297,10 +2402,15 @@ |ВЫБРАТЬ | ""ВерсияДанных"" КАК ВерсияДанных"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяТаблицы]", - ?(ЭтоДополнительноеСведение, "ДополнительныеСведения", "ДополнительныеРеквизиты")); - Запрос.УстановитьПараметр("ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1)); + Запрос.УстановитьПараметр("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); КонецЕсли; + Если ЭтоДополнительноеСведение Тогда + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты", + "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения"); + КонецЕсли; + Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); @@ -2574,6 +2684,68 @@ КонецФункции +&НаСервереБезКонтекста +Функция ИдентификаторДляФормулУжеИспользуется(Знач ИдентификаторДляФормул, Знач ТекущееСвойство) + + ПроверочныйИдентификатор = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ИдентификаторДляФормул(ИдентификаторДляФормул); + Если ВРег(ИдентификаторДляФормул) <> ВРег(ПроверочныйИдентификатор) Тогда + ТекстВопроса = НСтр("ru = 'Идентификатор ""%1"" не соответствует правилам именования переменных. + |Идентификатор не должен содержать пробелов и специальных символов. + | + |Создать новый идентификатор для формул и продолжить запись?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопроса, + ИдентификаторДляФормул); + Возврат ТекстВопроса; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Свойства.ЭтоДополнительноеСведение + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + |ГДЕ + | Свойства.ИдентификаторДляФормул = &ИдентификаторДляФормул + | И Свойства.Ссылка <> &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", ТекущееСвойство); + Запрос.УстановитьПараметр("ИдентификаторДляФормул", ИдентификаторДляФормул); + + НачатьТранзакцию(); + Попытка + Выборка = Запрос.Выполнить().Выбрать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если НЕ Выборка.Следующий() Тогда + Возврат ""; + КонецЕсли; + + Если Выборка.ЭтоДополнительноеСведение Тогда + ТекстВопроса = НСтр("ru = 'Существует дополнительное сведение с идентификатором для формул + |""%1"".'"); + Иначе + ТекстВопроса = НСтр("ru = 'Существует дополнительный реквизит с идентификатором для формул + |""%1"".'"); + КонецЕсли; + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопроса + Символы.ПС + Символы.ПС + + НСтр("ru = 'Рекомендуется использовать другой идентификатор для формул, + |иначе программа может работать некорректно. + | + |Создать новый идентификатор для формул и продолжить запись?'"), + ИдентификаторДляФормул); + + Возврат ТекстВопроса; + +КонецФункции + &НаКлиентеНаСервереБезКонтекста Процедура УстановитьЗаголовокКнопкиФормата(Форма) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl index e8b827efa..61f3c284a 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; @@ -45,6 +46,7 @@ Результат.Добавить("ТипЗначения"); Результат.Добавить("Имя"); + Результат.Добавить("ИдентификаторДляФормул"); Возврат Результат; @@ -113,14 +115,241 @@ #Область СлужебныеПроцедурыИФункции +#Область УникальностьИдентификатораДляФормул + +// Проверяет уникальность идентификатора, а также соответствие идентификатора правилам написания +// +// Параметры: +// ИдентификаторДляФормул - Строка - идентификатор для формул. +// Ссылка - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на текущий объект. +// Отказ - Булево - флаг отказа при наличии ошибки. +// +Процедура ПроверитьУникальностьИдентификатора(ИдентификаторДляФормул, Ссылка, Отказ) Экспорт + + Если ЗначениеЗаполнено(ИдентификаторДляФормул) Тогда + + ИдентификаторПоПравилам = Истина; + ПроверочныйИдентификатор = ИдентификаторДляФормул(ИдентификаторДляФормул); + Если НЕ ВРег(ПроверочныйИдентификатор) = ВРег(ИдентификаторДляФормул) Тогда + ИдентификаторПоПравилам = Ложь; + + ТекстОшибки = НСтр("ru = 'Идентификатор ""%1"" не соответствует правилам именования переменных. + |Идентификатор не должен содержать пробелов и специальных символов.'"); + ОбщегоНазначения.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ИдентификаторДляФормул),, + "ИдентификаторДляФормул",, Отказ); + + КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + ИмяСобытия = НСтр("ru = 'Запись дополнительного реквизита (сведения)'", КодЯзыка); + ТекстОшибки = НСтр("ru = 'Идентификатор ""%1"" не соответствует правилам именования переменных. + |Идентификатор не должен содержать пробелов и специальных символов.'", КодЯзыка); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + ИдентификаторДляФормул); + ЗаписьЖурналаРегистрации(ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + Ссылка.Метаданные(), + Ссылка, + ТекстОшибки); + КонецЕсли; + + Если ИдентификаторПоПравилам Тогда + Если НЕ ИдентификаторДляФормулУникален(ИдентификаторДляФормул, Ссылка) Тогда + + Отказ = Истина; + + ТекстОшибки = НСтр("ru = 'Идентификатор для формул ""%1"" не уникален'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + ИдентификаторДляФормул); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, "ИдентификаторДляФормул"); + + КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + ТекстОшибки = НСтр("ru = 'Идентификатор для формул ""%1"" не уникален'", КодЯзыка); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + ИдентификаторДляФормул); + ИмяСобытия = НСтр("ru = 'Запись дополнительного реквизита (сведения)'", КодЯзыка); + ЗаписьЖурналаРегистрации(ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + Ссылка.Метаданные(), + Ссылка, + ТекстОшибки); + КонецЕсли; + КонецЕсли; + + Иначе + + ТекстОшибки = НСтр("ru = 'Идентификатор для формул не заполнен'"); + ОбщегоНазначения.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ИдентификаторДляФормул),, + "ИдентификаторДляФормул",, Отказ); + + КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + ИмяСобытия = НСтр("ru = 'Запись дополнительного реквизита (сведения)'", КодЯзыка); + ТекстОшибки = НСтр("ru = 'Идентификатор для формул не заполнен'", КодЯзыка); + ЗаписьЖурналаРегистрации(ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + Ссылка.Метаданные(), + Ссылка, + ТекстОшибки); + + КонецЕсли; + +КонецПроцедуры + +// Возвращает уникальный идентификатора для формул (после проверки на уникальность) +// +// Параметры: +// ПредставлениеОбъекта - Строка - представление, из которого будет сформирован идентификатор для формул. +// СсылкаНаТекущийОбъект - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на текущий элемент. +// Возвращаемое значение: +// Строка - уникальное значение идентификатора для формул. +// +Функция УникальныйИдентификаторДляФормул(ПредставлениеОбъекта, СсылкаНаТекущийОбъект) Экспорт + + Идентификатор = ИдентификаторДляФормул(ПредставлениеОбъекта); + Если ПустаяСтрока(Идентификатор) Тогда + // Представление состоит и спецсимволов или цифр. + Префикс = НСтр("ru = 'Идентификатор'"); + Идентификатор = ИдентификаторДляФормул(Префикс + ПредставлениеОбъекта); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДополнительныеРеквизитыИСведения.ИдентификаторДляФормул КАК ИдентификаторДляФормул + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения + |ГДЕ + | ДополнительныеРеквизитыИСведения.ИдентификаторДляФормул = &ИдентификаторДляФормул + | И ДополнительныеРеквизитыИСведения.Ссылка <> &СсылкаНаТекущийОбъект + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДополнительныеРеквизитыИСведения.ИдентификаторДляФормул КАК ИдентификаторДляФормул + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения + |ГДЕ + | ДополнительныеРеквизитыИСведения.ИдентификаторДляФормул ПОДОБНО &ИдентификаторДляФормулПодобие + | И ДополнительныеРеквизитыИСведения.Ссылка <> &СсылкаНаТекущийОбъект"; + Запрос.УстановитьПараметр("СсылкаНаТекущийОбъект", СсылкаНаТекущийОбъект); + Запрос.УстановитьПараметр("ИдентификаторДляФормул", Идентификатор); + Запрос.УстановитьПараметр("ИдентификаторДляФормулПодобие", Идентификатор + "%"); + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + УникальностьПоТочномуСоответствию = РезультатыЗапроса[0]; + Если НЕ УникальностьПоТочномуСоответствию.Пустой() Тогда + // Есть элементы с данным идентификатором. + ИспользованныеИдентификаторы = Новый Соответствие; + ВыборкаПодобных = РезультатыЗапроса[1].Выбрать(); + Пока ВыборкаПодобных.Следующий() Цикл + ИспользованныеИдентификаторы.Вставить(ВРЕГ(ВыборкаПодобных.ИдентификаторДляФормул), Истина); + КонецЦикла; + + ДобавляемыйНомер = 1; + ИдентификаторБезНомера = Идентификатор; + Пока НЕ ИспользованныеИдентификаторы.Получить(ВРЕГ(Идентификатор)) = Неопределено Цикл + ДобавляемыйНомер = ДобавляемыйНомер + 1; + Идентификатор = ИдентификаторБезНомера + ДобавляемыйНомер; + КонецЦикла; + КонецЕсли; + + Возврат Идентификатор; +КонецФункции + +Функция ИдентификаторДляФормулУникален(ПроверяемыйИдентификатор, СсылкаНаТекущийОбъект) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДополнительныеРеквизитыИСведения.ИдентификаторДляФормул КАК ИдентификаторДляФормул + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения + |ГДЕ + | ДополнительныеРеквизитыИСведения.ИдентификаторДляФормул = &ИдентификаторДляФормул + | И ДополнительныеРеквизитыИСведения.Ссылка <> &СсылкаНаТекущийОбъект"; + Запрос.УстановитьПараметр("ИдентификаторДляФормул", ПроверяемыйИдентификатор); + Запрос.УстановитьПараметр("СсылкаНаТекущийОбъект", СсылкаНаТекущийОбъект); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса.Пустой(); +КонецФункции + +// Вычисляет значение идентификатора из строки соответствии с правилами именования переменных. +// +// Параметры: +// СтрокаПредставления - Строка - наименование, строка из которой необходимо получить идентификатор. +// +// Возвращаемое значение: +// Строка - идентификатор, соответствующий правилам именования идентификаторов. +// +Функция ИдентификаторДляФормул(СтрокаПредставления) Экспорт + + СпецСимволы = СпецСимволы(); + + Идентификатор = ""; + БылСпецСимвол = Ложь; + + Для НомСимвола = 1 По СтрДлина(СтрокаПредставления) Цикл + + Символ = Сред(СтрокаПредставления, НомСимвола, 1); + + Если СтрНайти(СпецСимволы, Символ) <> 0 Тогда + БылСпецСимвол = Истина; + Если Символ = "_" Тогда + Идентификатор = Идентификатор + Символ; + КонецЕсли; + ИначеЕсли БылСпецСимвол + ИЛИ НомСимвола = 1 Тогда + БылСпецСимвол = Ложь; + Идентификатор = Идентификатор + ВРег(Символ); + Иначе + Идентификатор = Идентификатор + Символ; + КонецЕсли; + + КонецЦикла; + + Возврат Идентификатор; + +КонецФункции + +Функция СпецСимволы() + Диапазоны = Новый Массив; + Диапазоны.Добавить(Новый Структура("Мин, Макс", 0, 32)); + Диапазоны.Добавить(Новый Структура("Мин, Макс", 127, 191)); + + СпецСимволы = " .,+,-,/,*,?,=,<,>,(,)%!@#$%&*""№:;{}[]?()\|/`~'^_"; + Для Каждого Диапазон Из Диапазоны Цикл + Для КодСимвола = Диапазон.Мин По Диапазон.Макс Цикл + СпецСимволы = СпецСимволы + Символ(КодСимвола); + КонецЦикла; + КонецЦикла; + Возврат СпецСимволы; +КонецФункции + +Функция ЗаголовокДляФормированияИдентификатора(Знач Заголовок, Знач Представления) + Если ТекущийЯзык().КодЯзыка <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); + НайденныеСтроки = Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Заголовок = НайденныеСтроки[0].Заголовок; + КонецЕсли; + КонецЕсли; + + Возврат Заголовок; +КонецФункции + +#КонецОбласти + // Изменяет настройку свойства с общего свойства или общего списка значений свойства // на отдельное свойство с отдельным списком значений. // // Параметры: -// Параметры - Структура - со свойствами: -// * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - -// * ТекущийНаборСвойств - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - -// АдресХранилища - Строка - +// Параметры - Структура: +// * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения +// * ТекущийНаборСвойств - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений +// АдресХранилища - Строка // Процедура ИзменитьНастройкуСвойства(Параметры, АдресХранилища) Экспорт @@ -153,7 +382,7 @@ Иначе Запрос.УстановитьПараметр("Владелец", Свойство); НовыйОбъект = СоздатьЭлемент(); - ЗаполнитьЗначенияСвойств(НовыйОбъект, СвойствоОбъект, , "Родитель"); + ЗаполнитьЗначенияСвойств(НовыйОбъект, СвойствоОбъект, , "Родитель, ИдентификаторДляФормул"); Отбор = Новый Структура; Отбор.Вставить("НаборСвойств", ТекущийНаборСвойств); @@ -579,7 +808,16 @@ |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов КАК ЗависимостиДополнительныхРеквизитов |ГДЕ - | ЗависимостиДополнительныхРеквизитов.НаборСвойств = &НаборСвойств"; + | ЗависимостиДополнительныхРеквизитов.НаборСвойств = &НаборСвойств + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ДополнительныеРеквизитыИСведения.Ссылка + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения + |ГДЕ + | ИдентификаторДляФормул = """""; Запрос.УстановитьПараметр("НаборСвойств", Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка()); @@ -605,10 +843,11 @@ // Блокируем объект от изменения другими сеансами. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(ПолноеИмя); - ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + Ссылка = Выборка.Ссылка; // ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); Блокировка.Заблокировать(); - Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект = Ссылка.ПолучитьОбъект(); Если Не ЗначениеЗаполнено(Объект.Имя) Тогда УстановитьИмяРеквизита(Выборка, Объект); @@ -622,6 +861,10 @@ КонецЕсли; Зависимость.НаборСвойств = Объект.НаборСвойств; КонецЦикла; + Если НЕ ЗначениеЗаполнено(Объект.ИдентификаторДляФормул) Тогда + ЗаголовокДляФормул = ЗаголовокДляФормированияИдентификатора(Объект.Заголовок, Объект.Представления); + Объект.ИдентификаторДляФормул = УникальныйИдентификаторДляФормул(ЗаголовокДляФормул, Объект.Ссылка); + КонецЕсли; ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); ОбъектовОбработано = ОбъектовОбработано + 1; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl index a85c8b91c..e2093f4e3 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl @@ -14,6 +14,7 @@ Заголовок = ""; Имя = ""; + ИдентификаторДляФормул = ""; КонецПроцедуры @@ -23,6 +24,8 @@ Возврат; КонецЕсли; + КонтрольЗаполнениеИдентификатораДляФормул(Отказ); + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); КонецПроцедуры @@ -108,7 +111,7 @@ Результат = Запрос.Выполнить().Выгрузить(); Для Каждого СтрокаРезультата Из Результат Цикл - НаборСвойствОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект(); + НаборСвойствОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект();// СправочникОбъект.НаборыДополнительныхРеквизитовИСведений, Если ЭтоДополнительноеСведение Тогда ЗаполнитьЗначенияСвойств(НаборСвойствОбъект.ДополнительныеСведения.Найти(Ссылка, "Свойство"), СвойстваОбъекта); Иначе @@ -188,6 +191,37 @@ #КонецОбласти +#Область СлужебныеПроцедурыИФункции + +Процедура КонтрольЗаполнениеИдентификатораДляФормул(Отказ) + Если НЕ ДополнительныеСвойства.Свойство("ПроверкаИдентификатораДляФормулВыполнена") Тогда + // Программная запись. + Если ЗначениеЗаполнено(ИдентификаторДляФормул) Тогда + ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПроверитьУникальностьИдентификатора(ИдентификаторДляФормул, Ссылка, Отказ); + Иначе + // Установка идентификатора. + ИдентификаторДляФормул = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.УникальныйИдентификаторДляФормул( + ЗаголовокДляФормированияИдентификатора(), Ссылка); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Функция ЗаголовокДляФормированияИдентификатора() + ЗаголовокДляИдентификатора = Заголовок; + Если ТекущийЯзык() <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); + НайденныеСтроки = Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + ЗаголовокДляИдентификатора = НайденныеСтроки[0].Заголовок; + КонецЕсли; + КонецЕсли; + + Возврат ЗаголовокДляИдентификатора; +КонецФункции + +#КонецОбласти + #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo index c7520ebbf..9bcf114d5 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo @@ -471,7 +471,7 @@ ru - Набор свойств, которому принадлежит уникальное свойство. Если не задан, значит свойство включено в несколько наборов. + Набор свойств, в котором было изначально создано свойство. При включении свойства в несколько наборов значение не меняется. @@ -479,6 +479,28 @@ Use Use + + ИдентификаторДляФормул + + ru + Идентификатор для формул + + + en + Идентификатор для формул + + + String + + 150 + + + + + + Use + Use + @@ -505,7 +527,9 @@ String - + + 25 + ru diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl index 875a835db..4f6bc995a 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -69,8 +70,8 @@ // Определяет настройки начального заполнения элементов // // Параметры: -// Настройки - Структура - настройки заполнения -// * ПриНачальномЗаполненииЭлемента - Булево - Если Истина, то для каждого элемента будет +// Настройки - Структура: +// * ПриНачальномЗаполненииЭлемента - Булево - если Истина, то для каждого элемента будет // вызвана процедура индивидуального заполнения ПриНачальномЗаполненииЭлемента. // Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт @@ -110,7 +111,7 @@ // Параметры: // Объект - ПланВидовХарактеристикОбъект.ОбъектыАдресацииЗадач - заполняемый объект. // Данные - СтрокаТаблицыЗначений - данные заполнения. -// ДополнительныеПараметры - Структура - Дополнительные параметры. +// ДополнительныеПараметры - Структура // Процедура ПриНачальномЗаполненииЭлемента(Объект, Данные, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl index ffb8d792e..eb48a0011 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl @@ -152,11 +152,11 @@ КонецФункции // Возвращаемое значение: -// Структура - Описание: -// * ТипыОбъектов - ФиксированныйМассив - -// * Представление - Строка - -// * Ссылка - ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения - -// * Имя - Строка - +// Структура: +// * ТипыОбъектов - ФиксированныйМассив +// * Представление - Строка +// * Ссылка - ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения +// * Имя - Строка // Функция СвойстваРаздела(Ссылка, Знач Имя = "", Знач Представление = "", Знач ТипыОбъектов = Неопределено) Экспорт diff --git a/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo index b16532145..0553a9cdb 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo @@ -24,6 +24,10 @@ InformationRegister.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных Use + + InformationRegister.ОбработчикиОбновления + Use + Constant.ОтложенноеОбновлениеЗавершеноУспешно Use @@ -32,6 +36,10 @@ InformationRegister.ОчередьИзвлеченияТекста Use + + InformationRegister.ПотокиОбновления + Use + Constant.СведенияОБлокируемыхОбъектах Use diff --git a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo index 7a531e43b..dd837a526 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo @@ -170,6 +170,10 @@ Catalog.ИдентификаторыОбъектовМетаданных DontUse + + InformationRegister.ОбработчикиОбновления + DontUse + ScheduledJob.СинхронизацияФайлов DontUse @@ -270,6 +274,10 @@ Constant.ИспользоватьПрофилиБезопасностиДляДОО DontUse + + ScheduledJob.ИсправлениеУстаревшихАдресов + DontUse + Constant.КоличествоЗамеровВПакетеЭкспорта DontUse @@ -342,6 +350,10 @@ Constant.КоличествоПотоковОбновленияДоступа DontUse + + InformationRegister.ПотокиОбновления + DontUse + ScheduledJob.ОбновлениеСтатусовДоставкиSMS DontUse @@ -490,6 +502,10 @@ Constant.НастройкаПодчиненногоУзлаРИБЗавершена DontUse + + ScheduledJob.ОтключениеПроверкиИспользованияУдаляемыхОбъектов + DontUse + Catalog.КлассификаторБанков DontUse @@ -654,6 +670,10 @@ InformationRegister.ОперацииСтатистики DontUse + + InformationRegister.ОбработчикиОбновленияОбщихДанных + DontUse + Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском DontUse diff --git a/SSL/src/CommonCommands/ЖурналУчетаОригиналовПервичныхДокументов/CommandModule.bsl b/SSL/src/CommonCommands/ЖурналУчетаОригиналовПервичныхДокументов/CommandModule.bsl new file mode 100644 index 000000000..4ab070896 --- /dev/null +++ b/SSL/src/CommonCommands/ЖурналУчетаОригиналовПервичныхДокументов/CommandModule.bsl @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытий + +// Открывает форму журнала учета оригиналов первичных документов +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + УчетОригиналовПервичныхДокументовКлиентПереопределяемый.ПриОткрытииФормыЖурналаУчетаОригиналов(); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonCommands/ЖурналУчетаОригиналовПервичныхДокументов/ЖурналУчетаОригиналовПервичныхДокументов.mdo b/SSL/src/CommonCommands/ЖурналУчетаОригиналовПервичныхДокументов/ЖурналУчетаОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..b09ae5b05 --- /dev/null +++ b/SSL/src/CommonCommands/ЖурналУчетаОригиналовПервичныхДокументов/ЖурналУчетаОригиналовПервичныхДокументов.mdo @@ -0,0 +1,10 @@ + + + ЖурналУчетаОригиналовПервичныхДокументов + + ru + Оригиналы первичных документов + + NavigationPanelOrdinary + Auto + diff --git a/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты.mdo b/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты.mdo index efaf2c4cf..8b4e1208d 100644 --- a/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты.mdo +++ b/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты.mdo @@ -9,6 +9,6 @@ Auto ru - Открыть форму настройки системной учетной записи + Открыть форму настройки системной учетной записи электронной почты diff --git a/SSL/src/CommonCommands/СвязанныеДокументы/СвязанныеДокументы.mdo b/SSL/src/CommonCommands/СвязанныеДокументы/СвязанныеДокументы.mdo index d1d4f1ba2..637762c9d 100644 --- a/SSL/src/CommonCommands/СвязанныеДокументы/СвязанныеДокументы.mdo +++ b/SSL/src/CommonCommands/СвязанныеДокументы/СвязанныеДокументы.mdo @@ -1,5 +1,5 @@ - + СвязанныеДокументы ru @@ -11,4 +11,7 @@ ru Перейти к иерархическому списку связанных документов + + CommonPicture.СтруктураПодчиненности + diff --git a/SSL/src/CommonForms/АдреснаяКнига/Form.form b/SSL/src/CommonForms/АдреснаяКнига/Form.form index 44456f372..ebc0d2608 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Form.form +++ b/SSL/src/CommonForms/АдреснаяКнига/Form.form @@ -4,76 +4,33 @@ ГруппаСписки 24 - СтраницыСписки - 83 + ГруппаСпискаНастройки + 338 - СтраницаПоискКонтактов - 90 + СтраницыСписки + 83 - ГруппаСтрокаПоиска - 51 - - СтрокаПоиска - 22 - true - true - - true - - - СтрокаПоиска - - true - None - - СтрокаПоискаExtendedTooltip - 187 - Label - true - true - - Left - - - - СтрокаПоискаКонтекстноеМеню - 23 - true - - InputField - Enter - true - Left - true - - 30 - true - true - true - true - true - Normal - - ru - Введите часть адреса или имени контакта - - - + СтраницаПоискКонтактов + 90 - ГруппаНайтиКонтакт - 304 - - Найти - 50 + ГруппаСтрокаПоиска + 51 + + СтрокаПоиска + 22 true true true - false + + СтрокаПоиска + + true + None - НайтиExtendedTooltip - 188 + СтрокаПоискаExtendedTooltip + 187 Label true true @@ -81,29 +38,45 @@ Left - Form.Command.НайтиКонтакты - Normal - Auto - true - true - UserCmds - Auto - InCommandBar + + СтрокаПоискаКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + 30 + true + true + true + true + true + Normal + + ru + Введите часть адреса или имени контакта + + - ГруппаВариантыПоиска - 306 + ГруппаНайтиКонтакт + 304 - ВариантПоискаВезде - 310 + Найти + 50 true true true + false - ВариантПоискаВездеРасширеннаяПодсказка - 311 + НайтиExtendedTooltip + 188 Label true true @@ -111,7 +84,7 @@ Left - Form.Command.ВариантПоискаВезде + Form.Command.НайтиКонтакты Normal Auto true @@ -120,17 +93,126 @@ Auto InCommandBar - - ВариантПоискаВАдресах - 312 + + ГруппаВариантыПоиска + 306 + + ВариантПоискаВезде + 310 + true + true + + true + + + ВариантПоискаВездеРасширеннаяПодсказка + 311 + Label + true + true + + Left + + + Form.Command.ВариантПоискаВезде + Normal + Auto + true + true + UserCmds + Auto + InCommandBar + + + ВариантПоискаВАдресах + 312 + true + true + + true + + + ВариантПоискаВАдресахРасширеннаяПодсказка + 313 + Label + true + true + + Left + + + Form.Command.ВариантПоискаВАдресах + Normal + Auto + true + true + UserCmds + Auto + + + ВариантПоискаВНаименованияхКонтактов + 314 + true + true + + true + + + ВариантПоискаВНаименованияхКонтактовРасширеннаяПодсказка + 315 + Label + true + true + + Left + + + Form.Command.ВариантПоискаВНаименованияхКонтактов + Normal + Auto + true + true + UserCmds + Auto + + + ВариантПоискаПоДоменномуИмени + 316 + true + true + + true + + + ВариантПоискаПоДоменномуИмениРасширеннаяПодсказка + 317 + Label + true + true + + Left + + + Form.Command.ВариантПоискаПоДоменномуИмени + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Область поиска</value> + - ВариантПоискаВАдресахРасширеннаяПодсказка - 313 + ГруппаВариантыПоискаРасширеннаяПодсказка + 307 Label true true @@ -138,65 +220,14 @@ Left - Form.Command.ВариантПоискаВАдресах - Normal - Auto - true - true - UserCmds - Auto - - - ВариантПоискаВНаименованияхКонтактов - 314 - true - true - - true - - - ВариантПоискаВНаименованияхКонтактовРасширеннаяПодсказка - 315 - Label - true - true - - Left - - - Form.Command.ВариантПоискаВНаименованияхКонтактов - Normal - Auto - true - true - UserCmds - Auto - - - ВариантПоискаПоДоменномуИмени - 316 - true - true - - true - - - ВариантПоискаПоДоменномуИмениРасширеннаяПодсказка - 317 - Label - true - true - - Left - - - Form.Command.ВариантПоискаПоДоменномуИмени - Normal - Auto - true - true - UserCmds - Auto + Popup + + + StdPicture.Find + + Picture + Normal + true true @@ -205,11 +236,11 @@ <key>ru</key> - <value>Область поиска</value> + <value>Найти контакт</value> - ГруппаВариантыПоискаРасширеннаяПодсказка - 307 + ГруппаНайтиКонтактРасширеннаяПодсказка + 305 Label true true @@ -217,13 +248,51 @@ Left - Popup - - - StdPicture.Find - - Picture - Normal + CommandBar + + Right + + + + ВариантыПоиска + 119 + true + + true + + + ВариантыПоиска + + None + + ВариантыПоискаExtendedTooltip + 186 + Label + true + true + + Left + + + + ВариантыПоискаКонтекстноеМеню + 120 + true + + InputField + Enter + true + Left + true + + 20 + true + true + true + true + true + true + Normal true @@ -233,11 +302,12 @@ <key>ru</key> - <value>Найти контакт</value> + <value>Строка поиска</value> + true - ГруппаНайтиКонтактРасширеннаяПодсказка - 305 + ГруппаСтрокаПоискаExtendedTooltip + 185 Label true true @@ -245,25 +315,206 @@ Left - CommandBar - - Right + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto - - ВариантыПоиска - 119 + + НайденныеКонтакты + 25 + + <key>ru</key> + <value>Найденные контакты</value> + + true true true - ВариантыПоиска + НайденныеКонтакты + false None + CancelSearch + Change + Copy + Delete + EndEdit + Find + MoveDown + MoveUp + + НаименованиеКонтакта + 28 + true + true + + true + + + НайденныеКонтакты.НаименованиеКонтакта + + + НаименованиеКонтактаExtendedTooltip + 191 + Label + true + true + + Left + + + + НаименованиеКонтактаКонтекстноеМеню + 29 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + АдресЭП + 30 + true + true + + true + + + НайденныеКонтакты.Представление + + + АдресЭПExtendedTooltip + 192 + Label + true + true + + Left + + + + АдресЭПКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + None + + НайденныеКонтактыКоманднаяПанель + 27 + Left + true + + + Selection + НайденныеКонтактыВыбор + + + НайденныеКонтактыСтрокаПоиска + 245 + + НайденныеКонтактыСтрокаПоискаРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + + НайденныеКонтактыСтрокаПоискаКонтекстноеМеню + 246 + true + + НайденныеКонтакты + + true + + + + НайденныеКонтактыСостояниеПросмотра + 248 + + НайденныеКонтактыСостояниеПросмотраРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + НайденныеКонтактыСостояниеПросмотраКонтекстноеМеню + 249 + true + + ViewStatusAddition + НайденныеКонтакты + + true + + + + НайденныеКонтактыУправлениеПоиском + 251 + + НайденныеКонтактыУправлениеПоискомРасширеннаяПодсказка + 253 + Label + true + true + + Left + + + + НайденныеКонтактыУправлениеПоискомКонтекстноеМеню + 252 + true + + SearchControlAddition + НайденныеКонтакты + + true + + - ВариантыПоискаExtendedTooltip - 186 + НайденныеКонтактыExtendedTooltip + 190 Label true true @@ -272,25 +523,83 @@ - ВариантыПоискаКонтекстноеМеню - 120 - true + НайденныеКонтактыКонтекстноеМеню + 26 + + НайденныеКонтактыПросмотр + 333 + true + true + + true + + + НайденныеКонтактыПросмотрРасширеннаяПодсказка + 334 + Label + true + true + + Left + + + Form.Command.Просмотр + Normal + Auto + true + true + UserCmds + Auto + + + НайтиВСпискеИзСпискаНайденных + 143 + true + true + + true + + false + + НайтиВСпискеИзСпискаНайденныхExtendedTooltip + 189 + Label + true + true + + Left + + + Form.Command.НайтиВСпискеИзСпискаНайденных + Normal + Auto + true + true + UserCmds + Auto + - InputField - Enter - true - Left - true - - 20 - true - true - true - true - true - true - Normal - + true + true + true + true + 5 + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true +
      true true @@ -299,12 +608,11 @@ <key>ru</key> - <value>Строка поиска</value> + <value>Поиск контактов</value> - true - ГруппаСтрокаПоискаExtendedTooltip - 185 + СтраницаПоискКонтактовExtendedTooltip + 184 Label true true @@ -312,503 +620,325 @@ Left - UsualGroup - - AlwaysHorizontal - Auto - true - true - Auto - Auto + Page + + Vertical + auto + false
      - - НайденныеКонтакты - 25 - - <key>ru</key> - <value>Найденные контакты</value> - + + СтраницаВсеКонтактыПоПредмету + 94 + + КонтактыПоПредмету + 121 + + <key>ru</key> + <value>Контакты по предмету</value> + + true + true + + true + + + КонтактыПоПредмету + + false + None + + ПредставлениеНаименования + 128 + true + true + + true + + + КонтактыПоПредмету.ПредставлениеНаименования + + + ПредставлениеНаименованияExtendedTooltip + 201 + Label + true + true + + Left + + + + ПредставлениеНаименованияКонтекстноеМеню + 129 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + АдресКонтакта + 126 + true + true + + true + + + КонтактыПоПредмету.Адрес + + + АдресКонтактаExtendedTooltip + 202 + Label + true + true + + Left + + + + АдресКонтактаКонтекстноеМеню + 127 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + None + + КонтактыПоПредметуКоманднаяПанель + 123 + Left + true + + + Selection + КонтактыПоПредметуВыбор + + + КонтактыПоПредметуСтрокаПоиска + 254 + + КонтактыПоПредметуСтрокаПоискаРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + + КонтактыПоПредметуСтрокаПоискаКонтекстноеМеню + 255 + true + + КонтактыПоПредмету + + true + + + + КонтактыПоПредметуСостояниеПросмотра + 257 + + КонтактыПоПредметуСостояниеПросмотраРасширеннаяПодсказка + 259 + Label + true + true + + Left + + + + КонтактыПоПредметуСостояниеПросмотраКонтекстноеМеню + 258 + true + + ViewStatusAddition + КонтактыПоПредмету + + true + + + + КонтактыПоПредметуУправлениеПоиском + 260 + + КонтактыПоПредметуУправлениеПоискомРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + + КонтактыПоПредметуУправлениеПоискомКонтекстноеМеню + 261 + true + + SearchControlAddition + КонтактыПоПредмету + + true + + + + КонтактыПоПредметуExtendedTooltip + 200 + Label + true + true + + Left + + + + КонтактыПоПредметуКонтекстноеМеню + 122 + + ДобавитьИзСпискаПредметов + 131 + true + true + + true + + false + + ДобавитьИзСпискаПредметовExtendedTooltip + 197 + Label + true + true + + Left + + + Form.Command.ДобавитьИзСпискаПредметов + Normal + Auto + true + true + UserCmds + Auto + + + УстановитьКонтактИзСпискаПредметов + 132 + true + true + + true + + false + + УстановитьКонтактИзСпискаПредметовExtendedTooltip + 198 + Label + true + true + + Left + + + Form.Command.УстановитьКонтактИзСпискаПредметов + Normal + Auto + true + true + UserCmds + Auto + + + НайтиВСпискеИзСпискаПредметов + 130 + true + true + + true + + false + + НайтиВСпискеИзСпискаПредметовExtendedTooltip + 199 + Label + true + true + + Left + + + Form.Command.НайтиВСпискеИзСпискаПредметов + Normal + Auto + true + true + UserCmds + Auto + + + true + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + +
      true true true - - НайденныеКонтакты - - false - None - CancelSearch - Change - Copy - Delete - EndEdit - Find - MoveDown - MoveUp - - НаименованиеКонтакта - 28 - true - true - - true - - - НайденныеКонтакты.НаименованиеКонтакта - - - НаименованиеКонтактаExtendedTooltip - 191 - Label - true - true - - Left - - - - НаименованиеКонтактаКонтекстноеМеню - 29 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - АдресЭП - 30 - true - true - - true - - - НайденныеКонтакты.Представление - - - АдресЭПExtendedTooltip - 192 - Label - true - true - - Left - - - - АдресЭПКонтекстноеМеню - 31 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - None - - НайденныеКонтактыКоманднаяПанель - 27 - Left - true - - - Selection - НайденныеКонтактыВыбор - - - НайденныеКонтактыСтрокаПоиска - 245 - - НайденныеКонтактыСтрокаПоискаРасширеннаяПодсказка - 247 - Label - true - true - - Left - - - - НайденныеКонтактыСтрокаПоискаКонтекстноеМеню - 246 - true - - НайденныеКонтакты - - true - - - - НайденныеКонтактыСостояниеПросмотра - 248 - - НайденныеКонтактыСостояниеПросмотраРасширеннаяПодсказка - 250 - Label - true - true - - Left - - - - НайденныеКонтактыСостояниеПросмотраКонтекстноеМеню - 249 - true - - ViewStatusAddition - НайденныеКонтакты - - true - - - - НайденныеКонтактыУправлениеПоиском - 251 - - НайденныеКонтактыУправлениеПоискомРасширеннаяПодсказка - 253 - Label - true - true - - Left - - - - НайденныеКонтактыУправлениеПоискомКонтекстноеМеню - 252 - true - - SearchControlAddition - НайденныеКонтакты - - true - - - - НайденныеКонтактыExtendedTooltip - 190 - Label - true - true - - Left - - - - НайденныеКонтактыКонтекстноеМеню - 26 - - НайденныеКонтактыПросмотр - 333 - true - true - - true - - - НайденныеКонтактыПросмотрРасширеннаяПодсказка - 334 - Label - true - true - - Left - - - Form.Command.Просмотр - Normal - Auto - true - true - UserCmds - Auto - - - НайтиВСпискеИзСпискаНайденных - 143 - true - true - - true - - false - - НайтиВСпискеИзСпискаНайденныхExtendedTooltip - 189 - Label - true - true - - Left - - - Form.Command.НайтиВСпискеИзСпискаНайденных - Normal - Auto - true - true - UserCmds - Auto - - - true - true - true - true - 5 - true - MultiRow -
      true
      - 1 - 1 - AutoUse - AutoUse - true - true - true - Auto - Auto - true - true - true - -
      - true - true - - true - - - <key>ru</key> - <value>Поиск контактов</value> - - - СтраницаПоискКонтактовExtendedTooltip - 184 - Label - true - true - - Left - - - Page - - Vertical - auto - false - -
      - - СтраницаВсеКонтактыПоПредмету - 94 - - КонтактыПоПредмету - 121 <key>ru</key> <value>Контакты по предмету</value> - true - true - - true - - - КонтактыПоПредмету - - false - None - - ПредставлениеНаименования - 128 - true - true - - true - - - КонтактыПоПредмету.ПредставлениеНаименования - - - ПредставлениеНаименованияExtendedTooltip - 201 - Label - true - true - - Left - - - - ПредставлениеНаименованияКонтекстноеМеню - 129 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - АдресКонтакта - 126 - true - true - - true - - - КонтактыПоПредмету.Адрес - - - АдресКонтактаExtendedTooltip - 202 - Label - true - true - - Left - - - - АдресКонтактаКонтекстноеМеню - 127 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - None - - КонтактыПоПредметуКоманднаяПанель - 123 - Left - true - - - Selection - КонтактыПоПредметуВыбор - - - КонтактыПоПредметуСтрокаПоиска - 254 - - КонтактыПоПредметуСтрокаПоискаРасширеннаяПодсказка - 256 - Label - true - true - - Left - - - - КонтактыПоПредметуСтрокаПоискаКонтекстноеМеню - 255 - true - - КонтактыПоПредмету - - true - - - - КонтактыПоПредметуСостояниеПросмотра - 257 - - КонтактыПоПредметуСостояниеПросмотраРасширеннаяПодсказка - 259 - Label - true - true - - Left - - - - КонтактыПоПредметуСостояниеПросмотраКонтекстноеМеню - 258 - true - - ViewStatusAddition - КонтактыПоПредмету - - true - - - - КонтактыПоПредметуУправлениеПоиском - 260 - - КонтактыПоПредметуУправлениеПоискомРасширеннаяПодсказка - 262 - Label - true - true - - Left - - - - КонтактыПоПредметуУправлениеПоискомКонтекстноеМеню - 261 - true - - SearchControlAddition - КонтактыПоПредмету - - true - - - КонтактыПоПредметуExtendedTooltip - 200 + СтраницаВсеКонтактыПоПредметуExtendedTooltip + 196 Label true true @@ -816,21 +946,60 @@ Left - - КонтактыПоПредметуКонтекстноеМеню - 122 - - ДобавитьИзСпискаПредметов - 131 + Page + + Vertical + auto + false + + + + СтраницаПользователей + 93 + + ГруппыПользователей + 176 + + <key>ru</key> + <value>Группы пользователей</value> + + true + true + + true + + + ГруппыПользователей + + false + None + Change + Copy + CopyToClipboard + Create + Delete + HierarchicalList + List + ListSettings + MoveItem + OutputList + Refresh + SetDeletionMark + Tree + + НаименованиеГруппы + 179 true true true - false + + ГруппыПользователей.Description + - ДобавитьИзСпискаПредметовExtendedTooltip - 197 + НаименованиеГруппыExtendedTooltip + 205 Label true true @@ -838,26 +1007,33 @@ Left - Form.Command.ДобавитьИзСпискаПредметов - Normal - Auto - true - true - UserCmds - Auto + + НаименованиеГруппыКонтекстноеМеню + 180 + true + + LabelField + Enter + true + Left + true + + true + true + - - УстановитьКонтактИзСпискаПредметов - 132 + + ГруппыПользователейСсылка + 290 true true - - true - - false + + + ГруппыПользователей.Ref + - УстановитьКонтактИзСпискаПредметовExtendedTooltip - 198 + ГруппыПользователейСсылкаРасширеннаяПодсказка + 292 Label true true @@ -865,26 +1041,38 @@ Left - Form.Command.УстановитьКонтактИзСпискаПредметов - Normal - Auto - true - true - UserCmds - Auto + + ГруппыПользователейСсылкаКонтекстноеМеню + 291 + true + + LabelField + Enter + true + Left + true + + true + true + - - НайтиВСпискеИзСпискаПредметов - 130 - true - true - - true - - false + None + + ГруппыПользователейКоманднаяПанель + 178 + Left + true + + + OnActivateRow + ГруппыПользователейПриАктивизацииСтроки + + + ГруппыПользователейСтрокаПоиска + 263 - НайтиВСпискеИзСпискаПредметовExtendedTooltip - 199 + ГруппыПользователейСтрокаПоискаРасширеннаяПодсказка + 265 Label true true @@ -892,37 +1080,464 @@ Left - Form.Command.НайтиВСпискеИзСпискаПредметов - Normal - Auto + + ГруппыПользователейСтрокаПоискаКонтекстноеМеню + 264 + true + + ГруппыПользователей + + true + + + + ГруппыПользователейСостояниеПросмотра + 266 + + ГруппыПользователейСостояниеПросмотраРасширеннаяПодсказка + 268 + Label + true + true + + Left + + + + ГруппыПользователейСостояниеПросмотраКонтекстноеМеню + 267 + true + + ViewStatusAddition + ГруппыПользователей + + true + + + + ГруппыПользователейУправлениеПоиском + 269 + + ГруппыПользователейУправлениеПоискомРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + + ГруппыПользователейУправлениеПоискомКонтекстноеМеню + 270 + true + + SearchControlAddition + ГруппыПользователей + + true + + + + ГруппыПользователейExtendedTooltip + 204 + Label true true - UserCmds - Auto + + Left + + + + ГруппыПользователейКонтекстноеМеню + 177 + true + + Tree + true + true + true + 5 + true + Row + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + true + + ГруппыПользователей.НомерКартинки + + + CommonPicture.СостоянияПользователей + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + + + + СписокПользователей + 95 + + <key>ru</key> + <value>Список пользователей</value> + + true + true + + true + + + СписокПользователей + + false + None + Change + Copy + Create + SetDeletionMark + + Пользователь + 98 + + <key>ru</key> + <value>Пользователь</value> + + true + true + + true + + + СписокПользователей.Ref + + + ПользовательExtendedTooltip + 207 + Label + true + true + + Left + + + + ПользовательКонтекстноеМеню + 99 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + - - true - true - true - true - true - true - MultiRow -
      true
      - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - true - + + СписокПользователейПредставление + 326 + + <key>ru</key> + <value>Адрес</value> + + true + true + + true + + + СписокПользователей.Представление + + + СписокПользователейПредставлениеРасширеннаяПодсказка + 328 + Label + true + true + + Left + + + + СписокПользователейПредставлениеКонтекстноеМеню + 327 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокПользователейСсылка + 293 + true + true + + + СписокПользователей.Ref + + + СписокПользователейСсылкаРасширеннаяПодсказка + 295 + Label + true + true + + Left + + + + СписокПользователейСсылкаКонтекстноеМеню + 294 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокПользователейКоманднаяПанель + 97 + + СписокПользователейПросмотр + 329 + true + true + + true + + + СписокПользователейПросмотрРасширеннаяПодсказка + 330 + Label + true + true + + Left + + + Form.Command.Просмотр + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + Selection + Подключаемый_СписокСправочникаВыбор + + + СписокПользователейСтрокаПоиска + 272 + + СписокПользователейСтрокаПоискаРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + + СписокПользователейСтрокаПоискаКонтекстноеМеню + 273 + true + + СписокПользователей + + true + + + + СписокПользователейСостояниеПросмотра + 275 + + СписокПользователейСостояниеПросмотраРасширеннаяПодсказка + 277 + Label + true + true + + Left + + + + СписокПользователейСостояниеПросмотраКонтекстноеМеню + 276 + true + + ViewStatusAddition + СписокПользователей + + true + + + + СписокПользователейУправлениеПоиском + 278 + + СписокПользователейУправлениеПоискомРасширеннаяПодсказка + 280 + Label + true + true + + Left + + + + СписокПользователейУправлениеПоискомКонтекстноеМеню + 279 + true + + SearchControlAddition + СписокПользователей + + true + + + + СписокПользователейExtendedTooltip + 206 + Label + true + true + + Left + + + + СписокПользователейКонтекстноеМеню + 96 + + СписокПользователейКонтекстноеМенюПросмотр + 331 + true + true + + true + + + СписокПользователейКонтекстноеМенюПросмотрРасширеннаяПодсказка + 332 + Label + true + true + + Left + + + Form.Command.Просмотр + Normal + Auto + true + true + UserCmds + Auto + + true + + HierarchicalList + true + true + true + true + 6 + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + + СписокПользователей.НомерКартинки + + + CommonPicture.СостоянияПользователей + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + +
      + true + true + + true + + + <key>ru</key> + <value>Пользователи</value> + + + СтраницаПользователейExtendedTooltip + 203 + Label + true + true + + Left + + + Page + + Vertical + auto + false +
      true true @@ -931,11 +1546,11 @@ <key>ru</key> - <value>Контакты по предмету</value> + <value>Страницы списки</value> - СтраницаВсеКонтактыПоПредметуExtendedTooltip - 196 + СтраницыСпискиExtendedTooltip + 183 Label true true @@ -943,598 +1558,57 @@ Left - Page - - Vertical - auto - false + Pages + + + OnCurrentPageChange + СтраницыПриСменеСтраницы + + TabsOnTop + Auto
      - - СтраницаПользователей - 93 - - ГруппыПользователей - 176 - - <key>ru</key> - <value>Группы пользователей</value> - - true - true - - true - - - ГруппыПользователей - - false - None - Change - Copy - CopyToClipboard - Create - Delete - HierarchicalList - List - ListSettings - MoveItem - OutputList - Refresh - SetDeletionMark - Tree - - НаименованиеГруппы - 179 - true - true - - true - - - ГруппыПользователей.Description - - - НаименованиеГруппыExtendedTooltip - 205 - Label - true - true - - Left - - - - НаименованиеГруппыКонтекстноеМеню - 180 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ГруппыПользователейСсылка - 290 - true - true - - - ГруппыПользователей.Ref - - - ГруппыПользователейСсылкаРасширеннаяПодсказка - 292 - Label - true - true - - Left - - - - ГруппыПользователейСсылкаКонтекстноеМеню - 291 - true - - LabelField - Enter - true - Left - true - - true - true - - - None - - ГруппыПользователейКоманднаяПанель - 178 - Left - true - - - OnActivateRow - ГруппыПользователейПриАктивизацииСтроки - - - ГруппыПользователейСтрокаПоиска - 263 - - ГруппыПользователейСтрокаПоискаРасширеннаяПодсказка - 265 - Label - true - true - - Left - - - - ГруппыПользователейСтрокаПоискаКонтекстноеМеню - 264 - true - - ГруппыПользователей - - true - - - - ГруппыПользователейСостояниеПросмотра - 266 - - ГруппыПользователейСостояниеПросмотраРасширеннаяПодсказка - 268 - Label - true - true - - Left - - - - ГруппыПользователейСостояниеПросмотраКонтекстноеМеню - 267 - true - - ViewStatusAddition - ГруппыПользователей - - true - - - - ГруппыПользователейУправлениеПоиском - 269 - - ГруппыПользователейУправлениеПоискомРасширеннаяПодсказка - 271 - Label - true - true - - Left - - - - ГруппыПользователейУправлениеПоискомКонтекстноеМеню - 270 - true - - SearchControlAddition - ГруппыПользователей - - true - - - - ГруппыПользователейExtendedTooltip - 204 - Label - true - true - - Left - - - - ГруппыПользователейКонтекстноеМеню - 177 - true - - Tree - true - true - true - 5 - true - Row - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - ExpandTopLevel - true - true - true - true - - ГруппыПользователей.НомерКартинки - - - CommonPicture.СостоянияПользователей - - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - - - - СписокПользователей - 95 - - <key>ru</key> - <value>Список пользователей</value> - - true - true - - true - - - СписокПользователей - - false - None - Change - Copy - Create - SetDeletionMark - - Пользователь - 98 - - <key>ru</key> - <value>Пользователь</value> - - true - true - - true - - - СписокПользователей.Ref - - - ПользовательExtendedTooltip - 207 - Label - true - true - - Left - - - - ПользовательКонтекстноеМеню - 99 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - СписокПользователейПредставление - 326 - - <key>ru</key> - <value>Адрес</value> - - true - true - - true - - - СписокПользователей.Представление - - - СписокПользователейПредставлениеРасширеннаяПодсказка - 328 - Label - true - true - - Left - - - - СписокПользователейПредставлениеКонтекстноеМеню - 327 - true - - LabelField - Enter - true - Left - true - - true - true - - - - СписокПользователейСсылка - 293 - true - true - - - СписокПользователей.Ref - - - СписокПользователейСсылкаРасширеннаяПодсказка - 295 - Label - true - true - - Left - - - - СписокПользователейСсылкаКонтекстноеМеню - 294 - true - - LabelField - Enter - true - Left - true - - true - true - - - - СписокПользователейКоманднаяПанель - 97 - - СписокПользователейПросмотр - 329 - true - true - - true - - - СписокПользователейПросмотрРасширеннаяПодсказка - 330 - Label - true - true - - Left - - - Form.Command.Просмотр - Normal - Auto - true - true - UserCmds - Auto - - Left - true - - - Selection - Подключаемый_СписокСправочникаВыбор - - - СписокПользователейСтрокаПоиска - 272 - - СписокПользователейСтрокаПоискаРасширеннаяПодсказка - 274 - Label - true - true - - Left - - - - СписокПользователейСтрокаПоискаКонтекстноеМеню - 273 - true - - СписокПользователей - - true - - - - СписокПользователейСостояниеПросмотра - 275 - - СписокПользователейСостояниеПросмотраРасширеннаяПодсказка - 277 - Label - true - true - - Left - - - - СписокПользователейСостояниеПросмотраКонтекстноеМеню - 276 - true - - ViewStatusAddition - СписокПользователей - - true - - - - СписокПользователейУправлениеПоиском - 278 - - СписокПользователейУправлениеПоискомРасширеннаяПодсказка - 280 - Label - true - true - - Left - - - - СписокПользователейУправлениеПоискомКонтекстноеМеню - 279 - true - - SearchControlAddition - СписокПользователей - - true - - - - СписокПользователейExtendedTooltip - 206 - Label - true - true - - Left - - - - СписокПользователейКонтекстноеМеню - 96 - - СписокПользователейКонтекстноеМенюПросмотр - 331 - true - true - - true - - - СписокПользователейКонтекстноеМенюПросмотрРасширеннаяПодсказка - 332 - Label - true - true - - Left - - - Form.Command.Просмотр - Normal - Auto - true - true - UserCmds - Auto - - true - - HierarchicalList - true - true - true - true - 6 - true - MultiRow -
      true
      - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - true - true - - СписокПользователей.НомерКартинки - - - CommonPicture.СостоянияПользователей - - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - -
      + + ПоказыватьТолькоКонтактыСАдресами + 335 true true true - - <key>ru</key> - <value>Пользователи</value> - + + ПоказыватьТолькоКонтактыСАдресами + + Right + ShowBottom + + OnChange + ПоказыватьТолькоКонтактыСАдресамиПриИзменении + - СтраницаПользователейExtendedTooltip - 203 + ПоказыватьТолькоКонтактыСАдресамиРасширеннаяПодсказка + 337 + + <key>ru</key> + <value> Будет применено только к тем спискам, в которых есть колонка "Адрес"</value> + Label - true true Left - Page - - Vertical - auto - false - + + ПоказыватьТолькоКонтактыСАдресамиКонтекстноеМеню + 336 + true + + CheckBoxField + Enter + true + Left + true + true true @@ -1543,11 +1617,11 @@ <key>ru</key> - <value>Страницы списки</value> + <value>Списка настройки</value> - СтраницыСпискиExtendedTooltip - 183 + ГруппаСпискаНастройкиРасширеннаяПодсказка + 339 Label true true @@ -1555,13 +1629,14 @@ Left - Pages - - - OnCurrentPageChange - СтраницыПриСменеСтраницы - - TabsOnTop + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto Auto
      @@ -3089,6 +3164,10 @@ OnOpen ПриОткрытии + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + OnCreateAtServer ПриСозданииНаСервере @@ -3185,6 +3264,19 @@ true + + ПредставлениеЗаполнено + 4 + + Boolean + + + true + + + true + + СтрокаПоиска @@ -3502,6 +3594,19 @@ true + + АдресЗаполнен + 3 + + Boolean + + + true + + + true + + ППДВключен @@ -3616,6 +3721,42 @@ true + + ПоказыватьТолькоКонтактыСАдресами + + <key>ru</key> + <value>Только контакты с адресами</value> + + 3 + + Boolean + + + true + + + true + + + ПоказыватьТолькоКонтактыСАдресами + + + + ИменаДобавленныхТаблиц + 8 + + ValueList + + + true + + + true + + + + + КомандаВыбрать diff --git a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl index 7b8f0ca3d..875a5d19c 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl +++ b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl @@ -53,6 +53,13 @@ КонецПроцедуры +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + ПриИзмененииТолькоКонтактыСАдресами(ЭтотОбъект); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -172,6 +179,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ПоказыватьТолькоКонтактыСАдресамиПриИзменении(Элемент) + + ПриИзмененииТолькоКонтактыСАдресами(ЭтотОбъект); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -355,6 +369,7 @@ // Осуществляет поиск всех адресов электронной почты контакта из списка "Получатели письма" и // предлагает пользователю сделать выбор, если у контакта более одного адреса электронной почты. +// &НаКлиенте Процедура УстановитьАдресКонтактаВыполнить() @@ -437,11 +452,11 @@ // ВыделеннаяСтрока - ДанныеФормыЭлементКоллекции - строка, данные которой получаются. // // Возвращаемое значение: -// Структура - содержит: -// * НаименованиеКонтакта - Строка - -// * ИмяСправочника - Строка - -// * Представление - Строка - -// * Ссылка - ОпределяемыйТип.КонтактВзаимодействия - +// Структура: +// * НаименованиеКонтакта - Строка +// * ИмяСправочника - Строка +// * Представление - Строка +// * Ссылка - ОпределяемыйТип.КонтактВзаимодействия // &НаКлиенте Функция ДанныеСтрокиНайденныеКонтакты(ВыделеннаяСтрока) @@ -792,4 +807,28 @@ КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Процедура ПриИзмененииТолькоКонтактыСАдресами(Форма) + + Для Каждого ИмяСписка Из Форма.ИменаДобавленныхТаблиц Цикл + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Форма.ЭтотОбъект[ИмяСписка.Значение], "Адрес", , ВидСравненияКомпоновкиДанных.Заполнено,, Форма.ПоказыватьТолькоКонтактыСАдресами); + + КонецЦикла; + + Если Форма.ПоказыватьТолькоКонтактыСАдресами Тогда + + Форма.Элементы.КонтактыПоПредмету.ОтборСтрок = Новый ФиксированнаяСтруктура("АдресЗаполнен", Истина); + Форма.Элементы.НайденныеКонтакты.ОтборСтрок = Новый ФиксированнаяСтруктура("ПредставлениеЗаполнено", Истина); + + + Иначе + + Форма.Элементы.НайденныеКонтакты.ОтборСтрок = Неопределено; + Форма.Элементы.КонтактыПоПредмету.ОтборСтрок = Неопределено; + + КонецЕсли + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form index 1317c9a91..caffcff5f 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form @@ -1185,7 +1185,7 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> <group>Vertical</group> diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl index d62862a84..920aa0b4c 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl @@ -290,10 +290,10 @@ // // Возвращаемое значение: // Структура - описание свойств элемента списка значений, где: -// * Идентификатор - Число - -// * Пометка - Булево - -// * Значение - Неопределено - -// * Представление - Строка - +// * Идентификатор - Число +// * Пометка - Булево +// * Значение - Неопределено +// * Представление - Строка // &НаКлиенте Функция ЭлементСпискаДоНачалаИзменения() diff --git a/SSL/src/CommonForms/Вопрос/Module.bsl b/SSL/src/CommonForms/Вопрос/Module.bsl index 1e80da0b7..3fb51fb35 100644 --- a/SSL/src/CommonForms/Вопрос/Module.bsl +++ b/SSL/src/CommonForms/Вопрос/Module.bsl @@ -92,7 +92,8 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы // Параметры: -// Команда - КомандаФормы - +// Команда - КомандаФормы +// &НаКлиенте Процедура Подключаемый_ОбработчикКоманды(Команда) ВыбранноеЗначение = СоответствиеКнопокИВозвращаемыхЗначений.Получить(Команда.Имя); @@ -123,7 +124,8 @@ ОжиданиеЗаголовокКнопки, Строка(ОжиданиеСчетчик)); - Элементы[ОжиданиеИмяКнопки].Заголовок = НовыйЗаголовок; + ЭлементФормы = Элементы[ОжиданиеИмяКнопки]; // ВсеЭлементыФормы + ЭлементФормы.Заголовок = НовыйЗаголовок; КонецЕсли; ПодключитьОбработчикОжидания("ПродолжитьОбратныйОтсчет", 1, Истина); КонецЕсли; @@ -183,7 +185,7 @@ Для Каждого ЭлементОписаниеКнопки Из КнопкиСписокЗначений Цикл Индекс = Индекс + 1; - ИмяКоманды = "Команда" + Строка(Индекс); + ИмяКоманды = "Команда" + XMLСтрока(Индекс); Команда = Команды.Добавить(ИмяКоманды); Команда.Действие = "Подключаемый_ОбработчикКоманды"; Команда.Заголовок = ЭлементОписаниеКнопки.Представление; @@ -232,7 +234,8 @@ Для Каждого Элемент Из СоответствиеКнопокИВозвращаемыхЗначений Цикл Если Элемент.Значение = ЗначениеКнопкиОжидания Тогда ОжиданиеИмяКнопки = Элемент.Ключ; - ОжиданиеЗаголовокКнопки = Команды[ОжиданиеИмяКнопки].Заголовок; + КомандаФормы = Команды[ОжиданиеИмяКнопки]; // КомандаФормы + ОжиданиеЗаголовокКнопки = КомандаФормы.Заголовок; Возврат; КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonForms/ВыборКонтакта/Form.form b/SSL/src/CommonForms/ВыборКонтакта/Form.form index 3c8e440e4..8991efdf1 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Form.form +++ b/SSL/src/CommonForms/ВыборКонтакта/Form.form @@ -1336,6 +1336,19 @@ <common>true</common> </edit> </columns> + <columns> + <name>ПредставлениеЗаполнено</name> + <id>4</id> + <valueType> + <types>Boolean</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </columns> </attributes> <attributes> <name>ИнформацияОбАктуальностиИндексаППД</name> @@ -1622,6 +1635,22 @@ <itemValueType/> </extInfo> </attributes> + <attributes> + <name>ИменаДобавленныхТаблиц</name> + <id>13</id> + <valueType> + <types>ValueList</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + <extInfo xsi:type="form:ValueListExtInfo"> + <itemValueType/> + </extInfo> + </attributes> <formCommands> <name>КомандаНайти</name> <title> diff --git a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl index 5dc1e1470..2548753f6 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl +++ b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl @@ -186,11 +186,11 @@ // ВыделеннаяСтрока - ДанныеФормыЭлементКоллекции - строка, данные которой получаются. // // Возвращаемое значение: -// Структура - Описание: -// * Ссылка - ОпределяемыйТип.КонтактВзаимодействия - -// * Наименование - Строка - -// * ИмяСправочника - Строка - -// * ПредставлениеНаименования - Строка - +// Структура: +// * Ссылка - ОпределяемыйТип.КонтактВзаимодействия +// * Наименование - Строка +// * ИмяСправочника - Строка +// * ПредставлениеНаименования - Строка // &НаКлиенте Функция ДанныеКонтактыПоПредмету(ВыделеннаяСтрока); diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form index 5a0a97fc0..e525f175c 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form @@ -1,5 +1,119 @@ <?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>36</id> + <items xsi:type="form:Button"> + <name>Выбрать</name> + <id>13</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <skipOnInput>false</skipOnInput> + <extendedTooltip> + <name>ВыбратьExtendedTooltip</name> + <id>16</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <type>UsualButton</type> + <commandName>Form.Command.Выбрать</commandName> + <representation>Auto</representation> + <defaultButton>true</defaultButton> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:FormField"> + <name>СпособГруппировкиОбъектов</name> + <id>33</id> + <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>35</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СпособГруппировкиОбъектовКонтекстноеМеню</name> + <id>34</id> + <autoFill>true</autoFill> + </contextMenu> + <type>RadioButtonField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:RadioButtonsFieldExtInfo"> + <choiceList> + <presentation> + <key>ru</key> + <value>По разделам интерфейса</value> + </presentation> + <value xsi:type="core:StringValue"> + <value>ПоРазделам</value> + </value> + </choiceList> + <choiceList> + <presentation> + <key>ru</key> + <value>По видам объектов</value> + </presentation> + <value xsi:type="core:StringValue"> + <value>ПоВидам</value> + </value> + </choiceList> + <orientation>Vertical</orientation> + </extInfo> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>КоманднаяПанельРасширеннаяПодсказка</name> + <id>37</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:Table"> <name>ДеревоОбъектовМетаданных</name> <id>1</id> @@ -291,7 +405,6 @@ <verticalScrollBar>AutoUse</verticalScrollBar> <horizontalLines>true</horizontalLines> <verticalLines>true</verticalLines> - <useAlternationRowColorBWA>false</useAlternationRowColorBWA> <autoInsertNewRow>true</autoInsertNewRow> <searchOnInput>Auto</searchOnInput> <initialListView>Auto</initialListView> @@ -300,93 +413,12 @@ <verticalStretch>true</verticalStretch> <autoMaxCardHeight>true</autoMaxCardHeight> </items> - <commandBarLocation>Bottom</commandBarLocation> + <commandBarLocation>Top</commandBarLocation> <showCommandBar>true</showCommandBar> <autoCommandBar> <name>ФормаКоманднаяПанель</name> <id>-1</id> - <items xsi:type="form:Button"> - <name>Выбрать</name> - <id>13</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>ВыбратьExtendedTooltip</name> - <id>16</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.Выбрать</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>14</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>ЗакрытьExtendedTooltip</name> - <id>17</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>15</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>СправкаExtendedTooltip</name> - <id>18</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.StandardCommand.Help</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <horizontalAlign>Right</horizontalAlign> + <horizontalAlign>Left</horizontalAlign> </autoCommandBar> <handlers> <event>OnOpen</event> @@ -520,6 +552,33 @@ <common>true</common> </edit> </columns> + <columns> + <name>ЭтоПодраздел</name> + <id>7</id> + <valueType> + <types>Boolean</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </columns> + <columns> + <name>Адрес</name> + <id>8</id> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </columns> </attributes> <attributes> <name>ВыбранныеОбъектыМетаданных</name> @@ -623,6 +682,53 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ВыбиратьСсылки</name> + <id>9</id> + <valueType> + <types>Boolean</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </attributes> + <attributes> + <name>СпособГруппировкиОбъектов</name> + <title> + <key>ru</key> + <value>Способ группировки объектов</value> + + 10 + + String + + + + true + + + true + + + + АдресаВыбранныхОбъектов + 11 + + ValueList + + + true + + + true + + + + + Выбрать @@ -685,18 +791,42 @@ <valueType> <types>ValueList</types> </valueType> + <keyParameter>true</keyParameter> </parameters> <parameters> <name>ФильтрПоОбъектамМетаданных</name> <valueType> <types>ValueList</types> </valueType> + <keyParameter>true</keyParameter> </parameters> <parameters> <name>РодительскиеПодсистемы</name> <valueType> <types>ValueList</types> </valueType> + <keyParameter>true</keyParameter> + </parameters> + <parameters> + <name>Заголовок</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> + <parameters> + <name>СпособГруппировкиОбъектов</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> + <parameters> + <name>ЗапоминатьРазделыВыбранныхОбъектов</name> + <valueType> + <types>Boolean</types> + </valueType> + <keyParameter>true</keyParameter> </parameters> <commandInterface> <navigationPanel/> diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl index 9d5ca66ba..693c866a0 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl @@ -40,7 +40,9 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВыбранныеОбъектыМетаданных.ЗагрузитьЗначения(Параметры.ВыбранныеОбъектыМетаданных.ВыгрузитьЗначения()); + УстановитьУсловноеОформление(); + + ЗаполнитьВыбранныеОбъектыМетаданных(); Если Параметры.ФильтрПоОбъектамМетаданных.Количество() > 0 Тогда Параметры.КоллекцииВыбираемыхОбъектовМетаданных.Очистить(); @@ -74,14 +76,19 @@ НачальноеЗначениеВыбора = Параметры.ВыбранныеОбъектыМетаданных[0].Значение; КонецЕсли; - ДеревоОбъектовМетаданныхЗаполнить(); + СпособГруппировкиОбъектов = Параметры.СпособГруппировкиОбъектов; + Если Не ЗначениеЗаполнено(СпособГруппировкиОбъектов) Тогда + СпособГруппировкиОбъектов = "ПоРазделам"; + Иначе + Элементы.СпособГруппировкиОбъектов.Видимость = Ложь; + КонецЕсли; + + ЗаполнитьДеревоОбъектов(); Если Параметры.РодительскиеПодсистемы.Количество()> 0 Тогда Элементы.ДеревоОбъектовМетаданных.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; КонецЕсли; - НачальнаяПометкаКоллекций(ДеревоОбъектовМетаданных); - Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; КонецЕсли; @@ -107,14 +114,23 @@ // Процедура обработчик события нажатия на поле "Пометка" дерева формы. &НаКлиенте Процедура ПометкаПриИзменении(Элемент) + + ПриПометкеЭлементаДерева(ТекущийЭлемент.ТекущиеДанные); + +КонецПроцедуры - ТекущиеДанные = ТекущийЭлемент.ТекущиеДанные; - Если ТекущиеДанные.Пометка = 2 Тогда - ТекущиеДанные.Пометка = 0; +&НаКлиенте +Процедура РежимВыбораПриИзменении(Элемент) + + АдресаВыбранныхОбъектов.Очистить(); + ОбновитьКоллекциюВыбранныеОбъектыМетаданных(); + + ЗаполнитьДеревоОбъектов(); + Если ДеревоОбъектовМетаданных.ПолучитьЭлементы().Количество() = 1 Тогда + ИдентификаторСтроки = ДеревоОбъектовМетаданных.ПолучитьЭлементы()[0].ПолучитьИдентификатор(); + Элементы.ДеревоОбъектовМетаданных.Развернуть(ИдентификаторСтроки); КонецЕсли; - ПометитьВложенныеЭлементы(ТекущиеДанные); - ПометитьЭлементыРодителей(ТекущиеДанные); - + КонецПроцедуры #КонецОбласти @@ -149,20 +165,23 @@ ВыбранныеОбъектыМетаданных.Добавить(ТекДанные.ПолноеИмя, ТекДанные.Представление); Иначе - Возврат; - КонецЕсли; Иначе ВыбранныеОбъектыМетаданных.Очистить(); - - ПолучениеДанных(); + ОбновитьКоллекциюВыбранныеОбъектыМетаданных(); КонецЕсли; + + Если ВыбиратьСсылки Тогда + ВыбратьСсылки(ВыбранныеОбъектыМетаданных); + КонецЕсли; + Если ЭтотОбъект.ОписаниеОповещенияОЗакрытии = Неопределено Тогда Оповестить("ВыборОбъектовМетаданных", ВыбранныеОбъектыМетаданных, Параметры.УникальныйИдентификаторИсточник); КонецЕсли; + Закрыть(ВыбранныеОбъектыМетаданных); КонецПроцедуры @@ -178,12 +197,59 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере +Процедура ЗаполнитьВыбранныеОбъектыМетаданных() + + ОбъектыМетаданных = Параметры.ВыбранныеОбъектыМетаданных.ВыгрузитьЗначения(); + ВыбранныеОбъектыМетаданных = ОбщегоНазначения.СкопироватьРекурсивно(Параметры.ВыбранныеОбъектыМетаданных); + + Если Параметры.ЗапоминатьРазделыВыбранныхОбъектов + И ВыбранныеОбъектыМетаданных.Количество() > 0 И СтрНачинаетсяС(ВыбранныеОбъектыМетаданных[0].Представление, "./") Тогда + Для Каждого Элемент Из ВыбранныеОбъектыМетаданных Цикл + АдресаВыбранныхОбъектов.Добавить(Элемент.Представление, Элемент.Значение); + КонецЦикла; + КонецЕсли; + + ВыбиратьСсылки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВыбиратьСсылки", Ложь); + Если Не ВыбиратьСсылки Тогда + Возврат; + КонецЕсли; + + Ссылки = Новый Массив; + + Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл + + Если ТипЗнч(ОбъектМетаданных) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") + Или ТипЗнч(ОбъектМетаданных) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + + Ссылки.Добавить(ОбъектМетаданных); + КонецЕсли; + + КонецЦикла; + + Если Ссылки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ИменаОбъектовМетаданных = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Ссылки, "ПолноеИмя"); + + Для Каждого ЭлементСписка Из ВыбранныеОбъектыМетаданных Цикл + + ИмяОбъектаМетаданных = ИменаОбъектовМетаданных[ЭлементСписка.Значение]; + Если ИмяОбъектаМетаданных <> Неопределено Тогда + ЭлементСписка.Значение = ИмяОбъектаМетаданных; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + &НаСервере Процедура ЗаполнитьСписокПодсистем(СписокПодсистем) Для Каждого Подсистема Из СписокПодсистем Цикл Если Подсистема.ВключатьВКомандныйИнтерфейс Тогда ЭлементыПодсистемСКоманднымИнтерфейсом.Добавить(Подсистема.ПолноеИмя()); - КонецЕсли; + КонецЕсли; Если Подсистема.Подсистемы.Количество() > 0 Тогда ЗаполнитьСписокПодсистем(Подсистема.Подсистемы); @@ -200,6 +266,8 @@ &НаСервере Процедура ДеревоОбъектовМетаданныхЗаполнить() + ДеревоОбъектовМетаданных.ПолучитьЭлементы().Очистить(); + КоллекцииОбъектовМетаданных = Новый ТаблицаЗначений; КоллекцииОбъектовМетаданных.Колонки.Добавить("Имя"); КоллекцииОбъектовМетаданных.Колонки.Добавить("Синоним"); @@ -241,7 +309,7 @@ КоллекцииОбъектовМетаданных_НоваяСтрока("Обработки", НСтр("ru = 'Обработки'"), БиблиотекаКартинок.Обработка, БиблиотекаКартинок.Обработка, Ложь, КоллекцииОбъектовМетаданных); КоллекцииОбъектовМетаданных_НоваяСтрока("ПланыВидовХарактеристик", НСтр("ru = 'Планы видов характеристик'"), БиблиотекаКартинок.ПланВидовХарактеристик, БиблиотекаКартинок.ПланВидовХарактеристикОбъект, Ложь, КоллекцииОбъектовМетаданных); КоллекцииОбъектовМетаданных_НоваяСтрока("ПланыСчетов", НСтр("ru = 'Планы счетов'"), БиблиотекаКартинок.ПланСчетов, БиблиотекаКартинок.ПланСчетовОбъект, Ложь, КоллекцииОбъектовМетаданных); - КоллекцииОбъектовМетаданных_НоваяСтрока("ПланыВидовРасчета", НСтр("ru = 'Планы видов характеристик'"), БиблиотекаКартинок.ПланВидовХарактеристик, БиблиотекаКартинок.ПланВидовХарактеристикОбъект, Ложь, КоллекцииОбъектовМетаданных); + КоллекцииОбъектовМетаданных_НоваяСтрока("ПланыВидовРасчета", НСтр("ru = 'Планы видов расчета'"), БиблиотекаКартинок.ПланВидовРасчета, БиблиотекаКартинок.ПланВидовРасчетаОбъект, Ложь, КоллекцииОбъектовМетаданных); КоллекцииОбъектовМетаданных_НоваяСтрока("РегистрыСведений", НСтр("ru = 'Регистры сведений'"), БиблиотекаКартинок.РегистрСведений, БиблиотекаКартинок.РегистрСведений, Ложь, КоллекцииОбъектовМетаданных); КоллекцииОбъектовМетаданных_НоваяСтрока("РегистрыНакопления", НСтр("ru = 'Регистры накопления'"), БиблиотекаКартинок.РегистрНакопления, БиблиотекаКартинок.РегистрНакопления, Ложь, КоллекцииОбъектовМетаданных); КоллекцииОбъектовМетаданных_НоваяСтрока("РегистрыБухгалтерии", НСтр("ru = 'Регистры бухгалтерии'"), БиблиотекаКартинок.РегистрБухгалтерии, БиблиотекаКартинок.РегистрБухгалтерии, Ложь, КоллекцииОбъектовМетаданных); @@ -282,7 +350,7 @@ // Возвращает новую структуру параметров элемента дерева объектов метаданных. // // Возвращаемое значение: -// Структура с полями: +// Структура: // Имя - Строка - имя родительского элемента. // Синоним - Строка - синоним родительского элемента. // Пометка - Булево - начальная пометка коллекции или объекта метаданных. @@ -313,7 +381,7 @@ // Если параметр Подсистемы заполнен, то вызывается рекурсивно для всех дочерних подсистем. // // Параметры: -// ПараметрыЭлемента - Структура с полями: +// ПараметрыЭлемента - Структура: // Имя - Строка - имя родительского элемента. // Синоним - Строка - синоним родительского элемента. // Пометка - Булево - начальная пометка коллекции или объекта метаданных. @@ -363,6 +431,7 @@ ПараметрыЭлемента.ПолноеИмя = ЭлементКоллекцииМетаданных.ПолноеИмя(); ПараметрыЭлемента.Синоним = ЭлементКоллекцииМетаданных.Синоним; ПараметрыЭлемента.Родитель = НоваяСтрока; + ПараметрыЭлемента.Картинка = КартинкаВКонфигураторе(ЭлементКоллекцииМетаданных); НоваяСтрокаДерева(ПараметрыЭлемента, Истина); КонецЦикла; @@ -388,6 +457,7 @@ ПараметрыЭлемента.ПолноеИмя = ЭлементКоллекцииМетаданных.ПолноеИмя(); ПараметрыЭлемента.Синоним = ЭлементКоллекцииМетаданных.Синоним; ПараметрыЭлемента.Родитель = НоваяСтрока; + ПараметрыЭлемента.Картинка = КартинкаВКонфигураторе(ЭлементКоллекцииМетаданных); ДобавитьЭлементДереваОбъектовМетаданных(ПараметрыЭлемента, ЭлементКоллекцииМетаданных.Подсистемы, Ложь); КонецЕсли; КонецЦикла; @@ -399,11 +469,11 @@ &НаСервере Функция НоваяСтрокаДерева(ПараметрыСтроки, ЭтоОбъектМетаданных = Ложь) - Коллекция = ПараметрыСтроки.Родитель.ПолучитьЭлементы(); + Коллекция = ПараметрыСтроки.Родитель.ПолучитьЭлементы(); // КоллекцияСтрокДереваЗначений НоваяСтрока = Коллекция.Добавить(); НоваяСтрока.Имя = ПараметрыСтроки.Имя; НоваяСтрока.Представление = ?(ЗначениеЗаполнено(ПараметрыСтроки.Синоним), ПараметрыСтроки.Синоним, ПараметрыСтроки.Имя); - НоваяСтрока.Пометка = ?(Параметры.ВыбранныеОбъектыМетаданных.НайтиПоЗначению(ПараметрыСтроки.ПолноеИмя) = Неопределено, 0, 1); + НоваяСтрока.Пометка = ?(ВыбранныеОбъектыМетаданных.НайтиПоЗначению(ПараметрыСтроки.ПолноеИмя) = Неопределено, 0, 1); НоваяСтрока.Картинка = ПараметрыСтроки.Картинка; НоваяСтрока.ПолноеИмя = ПараметрыСтроки.ПолноеИмя; НоваяСтрока.ЭтоОбъектМетаданных = ЭтоОбъектМетаданных; @@ -439,33 +509,6 @@ КонецПроцедуры -// Процедура рекурсивно устанавливает/снимает пометку для родителей передаваемого элемента. -// -// Параметры: -// Элемент - ДанныеФормыКоллекцияЭлементовДерева. -// -&НаКлиенте -Процедура ПометитьЭлементыРодителей(Элемент) - - Родитель = Элемент.ПолучитьРодителя(); - - Если Родитель = Неопределено Тогда - Возврат; - КонецЕсли; - - ЭлементыРодителя = Родитель.ПолучитьЭлементы(); - Если ЭлементыРодителя.Количество() = 0 Тогда - Родитель.Пометка = 0; - ИначеЕсли Элемент.Пометка = 2 Тогда - Родитель.Пометка = 2; - Иначе - Родитель.Пометка = ЗначениеПометкиЭлементов(ЭлементыРодителя); - КонецЕсли; - - ПометитьЭлементыРодителей(Родитель); - -КонецПроцедуры - &НаКлиенте Функция ЗначениеПометкиЭлементов(ЭлементыРодителя) @@ -581,50 +624,564 @@ КонецПроцедуры -// Процедура рекурсивно устанавливает/снимает пометку для вложенных элементов начиная -// с передаваемого элемента. -// -// Параметры: -// Элемент - ДанныеФормыКоллекцияЭлементовДерева. -// -&НаКлиенте -Процедура ПометитьВложенныеЭлементы(Элемент) - - ВложенныеЭлементы = Элемент.ПолучитьЭлементы(); +&НаСервереБезКонтекста +Процедура ВыбратьСсылки(ВыбранныеОбъектыМетаданных) - Если ВложенныеЭлементы.Количество() = 0 Тогда - Если Не Элемент.ЭтоОбъектМетаданных Тогда - Элемент.Пометка = 0; - КонецЕсли; - Иначе - Для Каждого ВложенныйЭлемент Из ВложенныеЭлементы Цикл - Если Не ТолькоПодсистемыСКИ Тогда - ВложенныйЭлемент.Пометка = Элемент.Пометка; - КонецЕсли; - ПометитьВложенныеЭлементы(ВложенныйЭлемент); - КонецЦикла; + Если ВыбранныеОбъектыМетаданных.Количество() = 0 Тогда + Возврат; КонецЕсли; + ОписаниеОбъектовМетаданных = ВыбранныеОбъектыМетаданных.ВыгрузитьЗначения(); + Ссылки = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ОписаниеОбъектовМетаданных, Ложь); + + Для Каждого ЭлементСписка Из ВыбранныеОбъектыМетаданных Цикл + + Ссылка = Ссылки[ЭлементСписка.Значение]; + Если Ссылка <> Неопределено Тогда + ЭлементСписка.Значение = Ссылка; + КонецЕсли; + + КонецЦикла; + КонецПроцедуры -// Процедура для заполнения списка выбранных элементов дерева. -// Рекурсивно просматривает все дерево элементов и в случае, если элемент -// выбран добавляет его ПолноеИмя в список выбранных. -// -// Родитель - ДанныеФормыЭлементДерева -// &НаСервере -Процедура ПолучениеДанных(Родитель = Неопределено) +Процедура ДеревоОбъектовМетаданныхЗаполнитьПоРазделам() - Родитель = ?(Родитель = Неопределено, ДеревоОбъектовМетаданных, Родитель); + ДеревоОбъектовМетаданных.ПолучитьЭлементы().Очистить(); - КоллекцияЭлементов = Родитель.ПолучитьЭлементы(); + Ветка = ДеревоОбъектовМетаданных.ПолучитьЭлементы().Добавить(); + Ветка.Имя = Метаданные.Имя; + Ветка.Представление = Метаданные.Синоним; + Ветка.Адрес = "."; - Для Каждого Элемент Из КоллекцияЭлементов Цикл - Если Элемент.Пометка = 1 И Не ПустаяСтрока(Элемент.ПолноеИмя) Тогда - ВыбранныеОбъектыМетаданных.Добавить(Элемент.ПолноеИмя, Элемент.Представление); + ВывестиКоллекцию(Ветка, Метаданные.Подсистемы); + +КонецПроцедуры + +&НаСервере +Процедура ВывестиКоллекцию(Знач Ветка, Знач КоллекцияОбъектовМетаданных) + + Для Каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл + Если ТипЗнч(Ветка) = Тип("ДанныеФормыЭлементДерева") И ОбъектМетаданных.ПолноеИмя() = Ветка.ПолноеИмя Тогда + Продолжить; КонецЕсли; - ПолучениеДанных(Элемент); + Если Не ОбъектМетаданныхДоступен(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + + НоваяВетка = Ветка.ПолучитьЭлементы().Добавить(); + НоваяВетка.Имя = ОбъектМетаданных.Имя; + НоваяВетка.ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + НоваяВетка.Представление = ОбъектМетаданных.Представление(); + НоваяВетка.Картинка = КартинкаВИнтерфейсе(ОбъектМетаданных); + НоваяВетка.Адрес = ?(ТипЗнч(Ветка) = Тип("ДанныеФормыЭлементДерева"), Ветка.Адрес + "/", "") + НоваяВетка.Представление; + Если ЗначениеЗаполнено(АдресаВыбранныхОбъектов) Тогда + НоваяВетка.Пометка = ?(АдресаВыбранныхОбъектов.НайтиПоЗначению(НоваяВетка.Адрес) = Неопределено, 0, 1); + Иначе + НоваяВетка.Пометка = ?(ВыбранныеОбъектыМетаданных.НайтиПоЗначению(НоваяВетка.ПолноеИмя) = Неопределено, 0, 1); + КонецЕсли; + + Если ЭтоПодсистема(ОбъектМетаданных) Тогда + ВывестиКоллекцию(НоваяВетка, ОбъектМетаданных.Состав); + ВывестиКоллекцию(НоваяВетка, ОбъектМетаданных.Подсистемы); + НоваяВетка.ЭтоПодраздел = КоллекцияОбъектовМетаданных <> Метаданные.Подсистемы; + Иначе + НоваяВетка.ЭтоОбъектМетаданных = Истина; + + Если ОбщегоНазначения.ЭтоЖурналДокументов(ОбъектМетаданных) Тогда + ВывестиКоллекцию(НоваяВетка, ОбъектМетаданных.РегистрируемыеДокументы); + ИначеЕсли ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) Тогда + ВывестиКоллекцию(НоваяВетка, ПодчиненныеСправочники(ОбъектМетаданных)); + КонецЕсли; + КонецЕсли; + + Если ЭтоПодсистема(ОбъектМетаданных) И НоваяВетка.ПолучитьЭлементы().Количество() = 0 Тогда + Индекс = Ветка.ПолучитьЭлементы().Индекс(НоваяВетка); + Ветка.ПолучитьЭлементы().Удалить(Индекс); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция КартинкаВИнтерфейсе(ОбъектМетаданных) + + СвойстваОбъекта = Новый Структура("Картинка"); + ЗаполнитьЗначенияСвойств(СвойстваОбъекта, ОбъектМетаданных); + Если ЗначениеЗаполнено(СвойстваОбъекта.Картинка) Тогда + Возврат СвойстваОбъекта.Картинка; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +&НаСервере +Функция КартинкаВКонфигураторе(ОбъектМетаданных) + + ВидОбъекта = СтрРазделить(ОбъектМетаданных.ПолноеИмя(), ".")[0]; + Картинки = Новый Структура(ВидОбъекта); + ЗаполнитьЗначенияСвойств(Картинки, БиблиотекаКартинок); + + Возврат Картинки[ВидОбъекта]; + +КонецФункции + +&НаСервереБезКонтекста +Функция ЭтоПодсистема(ОбъектМетаданных) + Возврат СтрНачинаетсяС(ОбъектМетаданных.ПолноеИмя(), "Подсистема"); +КонецФункции + +&НаСервере +Функция ОбъектМетаданныхДоступен(ОбъектМетаданных) + + Если Не ЭтоПодсистема(ОбъектМетаданных) Тогда + ЭтоВыбираемыйОбъект = Не ЗначениеЗаполнено(Параметры.КоллекцииВыбираемыхОбъектовМетаданных); + Для Каждого ВидОбъекта Из Параметры.КоллекцииВыбираемыхОбъектовМетаданных.ВыгрузитьЗначения() Цикл + Если Метаданные[ВидОбъекта].Содержит(ОбъектМетаданных) Тогда + ЭтоВыбираемыйОбъект = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ЭтоВыбираемыйОбъект Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Если Не ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоЖурналДокументов(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоПланВидовХарактеристик(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоРегистрБухгалтерии(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоРегистрНакопления(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоПланВидовХарактеристик(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоПланСчетов(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоПланВидовРасчета(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоБизнесПроцесс(ОбъектМетаданных) + И Не ОбщегоНазначения.ЭтоЗадача(ОбъектМетаданных) + И Не ЭтоПодсистема(ОбъектМетаданных) Тогда + Возврат Ложь; + КонецЕсли; + + ДоступенПоПравам = ПравоДоступа("Просмотр", ОбъектМетаданных); + ДоступенПоФункциональнымОпциям = ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных); + + СвойстваМетаданного = Новый Структура("ПолнотекстовыйПоиск, ВключатьВКомандныйИнтерфейс"); + ЗаполнитьЗначенияСвойств(СвойстваМетаданного, ОбъектМетаданных); + + Если СвойстваМетаданного.ПолнотекстовыйПоиск = Неопределено Тогда + ИспользованиеПолнотекстовогоПоиска = Истина; // Если свойства нет - игнорируем. + Иначе + ИспользованиеПолнотекстовогоПоиска = (СвойстваМетаданного.ПолнотекстовыйПоиск = + Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать); + КонецЕсли; + + Если СвойстваМетаданного.ВключатьВКомандныйИнтерфейс = Неопределено Тогда + ВключатьВКомандныйИнтерфейс = Истина; // Если свойства нет - игнорируем. + Иначе + ВключатьВКомандныйИнтерфейс = СвойстваМетаданного.ВключатьВКомандныйИнтерфейс; + КонецЕсли; + + Возврат ДоступенПоПравам И ДоступенПоФункциональнымОпциям + И ИспользованиеПолнотекстовогоПоиска И ВключатьВКомандныйИнтерфейс; + +КонецФункции + +&НаСервереБезКонтекста +Функция ПодчиненныеСправочники(ОбъектМетаданных) + + Результат = Новый Массив; + + Для Каждого Справочник Из Метаданные.Справочники Цикл + Если Справочник.Владельцы.Содержит(ОбъектМетаданных) Тогда + Результат.Добавить(Справочник); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьДеревоОбъектов() + + Если СпособГруппировкиОбъектов = "ПоРазделам" Тогда + Если ВыбранныеОбъектыМетаданных.Количество() > 0 + И ЗначениеЗаполнено(ВыбранныеОбъектыМетаданных[0].Представление) Тогда + ИскатьВыбранныеПоАдресу = Истина; + КонецЕсли; + ДеревоОбъектовМетаданныхЗаполнитьПоРазделам(); + Иначе + ДеревоОбъектовМетаданныхЗаполнить(); + КонецЕсли; + + НачальнаяПометкаКоллекций(ДеревоОбъектовМетаданных); + +КонецПроцедуры + +#Область ПометкаЭлементов + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПриПометкеЭлементаДерева(ЭлементДерева) + + ЭлементДерева.Пометка = СледующееЗначениеПометкиЭлемента(ЭлементДерева); + + Если ТребуетсяПометитьВложенныеЭлементы(ЭлементДерева) Тогда + ПометитьВложенныеЭлементыРекурсивно(ЭлементДерева); + КонецЕсли; + + Если ЭлементДерева.Пометка = ПометкаФлажокНеУстановлен() Тогда + ЭлементДерева.Пометка = ЗначениеПометкиОтносительноВложенныхЭлементов(ЭлементДерева); + КонецЕсли; + + ПометитьЭлементыРодителейРекурсивно(ЭлементДерева); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПометкаФлажокНеУстановлен() + + Возврат 0; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПометкаФлажокУстановлен() + + Возврат 1; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПометкаКвадрат() + + Возврат 2; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция СледующееЗначениеПометкиЭлемента(ЭлементДерева) + + // 0 - Флажок не установлен. + // 1 - Флажок установлен. + // 2 - Установлен квадрат. + // + // Переопределение графа конечного автомата (или машины состояний, как ее еще можно назвать). + // + // Платформа делает постоянный цикл при изменении пометки, + // т.е. имеет компоненту сильной связности орграфа: + // 0-1-2-0-1-2-0-1... + // + // 0 + // / \ + // 2 - 1 + // + // т.е. совершает цикл: не помеченный - помеченный - квадрат - не помеченный. + // + // Нам требуется поведение недетерминированного конечного автомата с компонентой сильной связности: + // 0-1-0-1-0... + // + // т.е. помеченный должен переходить в не помеченный, а тот - опять в помеченный. + // + // При этом: + // + // Для разделов циклы: + // 1) 1-0-1-0-1... + // 2) 2-0-1-0-1-0-... + // + // /\ + // 2 - 0 -1 + // + // т.е. с квадрата должен быть переход к неустановленному флажку. + // + // Для метаданных циклы: + // 1) 1-0-1-0-1-0... + // 2) 2-1-0-1-0-1-0... + // + // /\ + // 2 - 1 -0 + // + // т.е. с квадрата должен быть переход к установленному флажку. + + // На момент проверки платформа уже изменила значение пометки. + + Если ЭлементДерева.ЭтоОбъектМетаданных Тогда + // Предыдущее значение пометки = 2 : Установлен квадрат. + Если ЭлементДерева.Пометка = 0 Тогда + Возврат ПометкаФлажокУстановлен(); + КонецЕсли; + КонецЕсли; + + // Предыдущее значение пометки = 1 : Флажок установлен. + Если ЭлементДерева.Пометка = 2 Тогда + Возврат ПометкаФлажокНеУстановлен(); + КонецЕсли; + + // Во всех остальных случаях - значение установленное платформой. + Возврат ЭлементДерева.Пометка; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПометитьЭлементыРодителейРекурсивно(ЭлементДерева) + + Родитель = ЭлементДерева.ПолучитьРодителя(); + + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ЭлементыРодителя = Родитель.ПолучитьЭлементы(); + Если ЭлементыРодителя.Количество() = 0 Тогда + Родитель.Пометка = ПометкаФлажокУстановлен(); + ИначеЕсли ЭлементДерева.Пометка = ПометкаКвадрат() Тогда + Родитель.Пометка = ПометкаКвадрат(); + Иначе + Родитель.Пометка = ЗначениеПометкиОтносительноВложенныхЭлементов(Родитель); + КонецЕсли; + + ПометитьЭлементыРодителейРекурсивно(Родитель); + +КонецПроцедуры + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция ЗначениеПометкиОтносительноВложенныхЭлементов(ЭлементДерева) + + СостояниеВложенныхЭлементов = СостояниеВложенныхЭлементов(ЭлементДерева); + + ЕстьПомеченные = СостояниеВложенныхЭлементов.ЕстьПомеченные; + ЕстьНепомеченные = СостояниеВложенныхЭлементов.ЕстьНепомеченные; + + Если ЭлементДерева.ЭтоОбъектМетаданных Тогда + + // Для объекта метаданных важно какое у него состояние сейчас, + // ведь этот объект метаданных надо возвращать. + // Нельзя сбрасывать установленный флажок. + + Если ЭлементДерева.Пометка = ПометкаФлажокУстановлен() Тогда + // Оставляем флажок взведенным независимо от вложенных. + Возврат ПометкаФлажокУстановлен(); + КонецЕсли; + + Если ЭлементДерева.Пометка = ПометкаФлажокНеУстановлен() + Или ЭлементДерева.Пометка = ПометкаКвадрат() Тогда + + Если ЕстьПомеченные Тогда + Возврат ПометкаКвадрат(); + Иначе + Возврат ПометкаФлажокНеУстановлен(); + КонецЕсли; + КонецЕсли; + + Иначе + + // Для разделов не важно какое состояние сейчас, + // они всегда зависят только от вложенных. + + Если ЕстьПомеченные Тогда + + Если ЕстьНепомеченные Тогда + Возврат ПометкаКвадрат(); + Иначе + Возврат ПометкаФлажокУстановлен(); + КонецЕсли; + + КонецЕсли; + + Возврат ПометкаФлажокНеУстановлен(); + + КонецЕсли; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция СостояниеВложенныхЭлементов(ЭлементДерева) + + ВложенныеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + + ЕстьПомеченные = Ложь; + ЕстьНепомеченные = Ложь; + + Для каждого ВложенныйЭлемент Из ВложенныеЭлементы Цикл + + Если ВложенныйЭлемент.Пометка = ПометкаФлажокНеУстановлен() Тогда + ЕстьНепомеченные = Истина; + Продолжить; + КонецЕсли; + + Если ВложенныйЭлемент.Пометка = ПометкаФлажокУстановлен() Тогда + ЕстьПомеченные = Истина; + + Если ВложенныйЭлемент.ЭтоОбъектМетаданных Тогда + + // Для объекта метаданных допустимо иметь непомеченные в своем составе вложенных, + // при этом самостоятельно быть помеченным. Чтобы обыграть эту ситуацию надо поднять + // вложенные элементы на один уровень с самим объектом, к которому они относятся. + + Состояние = СостояниеВложенныхЭлементов(ВложенныйЭлемент); + ЕстьПомеченные = ЕстьПомеченные Или Состояние.ЕстьПомеченные; + ЕстьНепомеченные = ЕстьНепомеченные Или Состояние.ЕстьНепомеченные; + КонецЕсли; + + Продолжить; + КонецЕсли; + + Если ВложенныйЭлемент.Пометка = ПометкаКвадрат() Тогда + ЕстьПомеченные = Истина; + ЕстьНепомеченные = Истина; + Продолжить; + КонецЕсли; + + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("ЕстьПомеченные", ЕстьПомеченные); + Результат.Вставить("ЕстьНепомеченные", ЕстьНепомеченные); + + Возврат Результат; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция ТребуетсяПометитьВложенныеЭлементы(ЭлементДерева) + + Если ЭлементДерева.ЭтоОбъектМетаданных Тогда + + // Если для объекта метаданных есть не полностью выбранные вложенные элементы, + // значит эти элементы были выбраны пользователем и не следует портить его выбор. + + СостояниеВложенныхЭлементов = СостояниеВложенныхЭлементов(ЭлементДерева); + + ЕстьПомеченные = СостояниеВложенныхЭлементов.ЕстьПомеченные; + ЕстьНепомеченные = СостояниеВложенныхЭлементов.ЕстьНепомеченные; + + Если ЕстьПомеченные И ЕстьНепомеченные Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПометитьВложенныеЭлементыРекурсивно(ЭлементДерева) + + ВложенныеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + + Для каждого ВложенныйЭлемент Из ВложенныеЭлементы Цикл + + ВложенныйЭлемент.Пометка = ЭлементДерева.Пометка; + ПометитьВложенныеЭлементыРекурсивно(ВложенныйЭлемент); + + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// КоллекцияЭлементовДерева - ДанныеФормыДерева +// - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// ЗначениеПометки - Число - устанавливаемое значение. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПометитьВсеЭлементыДереваРекурсивно(ЭлементДеревоРазделовПоиска, ЗначениеПометки) + + КоллекцияЭлементовДерева = ЭлементДеревоРазделовПоиска.ПолучитьЭлементы(); + + Для каждого ЭлементДерева Из КоллекцияЭлементовДерева Цикл + ЭлементДерева.Пометка = ЗначениеПометки; + ПометитьВсеЭлементыДереваРекурсивно(ЭлементДерева, ЗначениеПометки); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ДеревоОбъектовМетаданных"); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоОбъектовМетаданных.ЭтоПодраздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветРазделаПанелиФункций); + +КонецПроцедуры + +&НаКлиенте +Функция ВыбранныеЭлементы(Ветка) + + Результат = Новый Соответствие; + + Для Каждого Элемент Из Ветка.ПолучитьЭлементы() Цикл + Если Элемент.Пометка = 1 И Не ПустаяСтрока(Элемент.ПолноеИмя) И Элемент.ЭтоОбъектМетаданных Тогда + Результат.Вставить(Элемент.ПолноеИмя, ?(Параметры.ЗапоминатьРазделыВыбранныхОбъектов + И СпособГруппировкиОбъектов = "ПоРазделам", Элемент.Адрес, Элемент.Представление)); + КонецЕсли; + Для Каждого ВыбранныйЭлемент Из ВыбранныеЭлементы(Элемент) Цикл + Результат.Вставить(ВыбранныйЭлемент.Ключ, ВыбранныйЭлемент.Значение); + КонецЦикла; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ОбновитьКоллекциюВыбранныеОбъектыМетаданных() + + ВыбранныеОбъектыМетаданных.Очистить(); + Для Каждого ВыбранныйЭлемент Из ВыбранныеЭлементы(ДеревоОбъектовМетаданных) Цикл + ВыбранныеОбъектыМетаданных.Добавить(ВыбранныйЭлемент.Ключ, ВыбранныйЭлемент.Значение, Истина); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonForms/ГруппыПользователей/Module.bsl b/SSL/src/CommonForms/ГруппыПользователей/Module.bsl index 5f473c93f..4f14a472f 100644 --- a/SSL/src/CommonForms/ГруппыПользователей/Module.bsl +++ b/SSL/src/CommonForms/ГруппыПользователей/Module.bsl @@ -316,9 +316,9 @@ // Получает группы пользователей. // // Параметры: -// ГруппыПользователей - ТаблицаЗначений - где: -// * Ссылка - СправочникСсылка.ГруппыПользователей - -// * Родитель - СправочникСсылка.ГруппыПользователей - +// ГруппыПользователей - ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ГруппыПользователей +// * Родитель - СправочникСсылка.ГруппыПользователей // &НаСервере Процедура ПолучитьГруппыПользователей(ГруппыПользователей) @@ -339,10 +339,10 @@ // Получает группы внешних пользователей. // // Параметры: -// ГруппыПользователей - ТаблицаЗначений - где: -// * Ссылка - СправочникСсылка.ГруппыВнешнихПользователей - -// * Родитель - СправочникСсылка.ГруппыВнешнихПользователей - -// * ВсеОбъектыАвторизации - Булево - +// ГруппыПользователей - ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ГруппыВнешнихПользователей +// * Родитель - СправочникСсылка.ГруппыВнешнихПользователей +// * ВсеОбъектыАвторизации - Булево // &НаСервере Процедура ПолучитьГруппыВнешнихПользователей(ГруппыПользователей) @@ -365,8 +365,9 @@ // // Параметры: // ГруппыПользователей - см. ПолучитьГруппыВнешнихПользователей.ГруппыПользователей -// ПодчиненныеГруппы - Массив - -// ГруппаРодитель - СправочникСсылка.ГруппыПользователей, СправочникСсылка.ГруппыВнешнихПользователей - +// ПодчиненныеГруппы - Массив +// ГруппаРодитель - СправочникСсылка.ГруппыПользователей +// - СправочникСсылка.ГруппыВнешнихПользователей // &НаСервере Процедура ПолучитьПодчиненныеГруппы(ГруппыПользователей, ПодчиненныеГруппы, ГруппаРодитель) @@ -400,11 +401,12 @@ // Описание // // Параметры: -// ДеревоГруппИсточник - ДанныеФормыКоллекцияЭлементовДерева - -// МассивПеремещенныхПользователей - Массив из СправочникСсылка.Пользователи - -// НеПеремещенныеПользователи - Соответствие - где: -// * Ключ - СправочникСсылка.Пользователи - -// * Значение - Массив из СправочникСсылка.ГруппыПользователей, СправочникСсылка.ГруппыВнешнихПользователей - +// ДеревоГруппИсточник - ДанныеФормыКоллекцияЭлементовДерева +// МассивПеремещенныхПользователей - Массив из СправочникСсылка.Пользователи +// НеПеремещенныеПользователи - Соответствие: +// * Ключ - СправочникСсылка.Пользователи +// * Значение - Массив из СправочникСсылка.ГруппыПользователей +// - СправочникСсылка.ГруппыВнешнихПользователей // &НаСервере Процедура ПерезаполнитьСоставГрупп(ДеревоГруппИсточник, МассивПеремещенныхПользователей, НеПеремещенныеПользователи) diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form index 8881aa128..7fbc86d28 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form @@ -490,7 +490,7 @@ <name>ПриСозданииНаСервере</name> </handlers> <excludedCommands>CustomizeForm</excludedCommands> - <windowOpeningMode>LockOwner</windowOpeningMode> + <windowOpeningMode>DontBlock</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> <group>Vertical</group> diff --git a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl index 4746b4e23..e68ef7670 100644 --- a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl @@ -139,25 +139,21 @@ АдресаКорректны = Истина; Для каждого СтрАдрес Из АдресаИсключений Цикл - Если НЕ ПустаяСтрока(СтрАдрес.АдресСервера) Тогда - НедопустимыеСимволы = НедопустимыеСимволыВСтроке(СтрАдрес.АдресСервера, - "0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ_-.:*?"); - - Если НЕ ПустаяСтрока(НедопустимыеСимволы) Тогда - - ТекстСообщения = СтрЗаменить(НСтр("ru = 'В адресе найдены недопустимые символы: %1'"), - "%1", - НедопустимыеСимволы); - - ИндексСтрокой = СтрЗаменить(Строка(АдресаИсключений.Индекс(СтрАдрес)), Символ(160), ""); - - ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, - , - "АдресаИсключений[" + ИндексСтрокой + "].АдресСервера"); - АдресаКорректны = Ложь; - - КонецЕсли; + Если ПустаяСтрока(СтрАдрес.АдресСервера) Тогда + Продолжить; КонецЕсли; + + НедопустимыеСимволы = НедопустимыеСимволыВСтроке(СтрАдрес.АдресСервера, + "0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ_-.:*?"); + Если ПустаяСтрока(НедопустимыеСимволы) Тогда + Продолжить; + КонецЕсли; + ТекстСообщения = СтрЗаменить(НСтр("ru = 'В адресе найдены недопустимые символы: %1'"), + "%1", НедопустимыеСимволы); + ИндексСтрокой = СтрЗаменить(Строка(АдресаИсключений.Индекс(СтрАдрес)), Символ(160), ""); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , + "АдресаИсключений[" + Формат(ИндексСтрокой, "ЧГ=0") + "].АдресСервера"); + АдресаКорректны = Ложь; КонецЦикла; Возврат АдресаКорректны; @@ -167,7 +163,7 @@ // Находит и возвращает недопустимые символы в строке, перечисленные через запятую. // // Параметры: -// ПроверяемаяСтрока (Строка) - строка, проверяемая на предмет наличия недопустимых +// ПроверяемаяСтрока (Строка) - строка - проверяемая на предмет наличия недопустимых // символов. // ДопустимыеСимволы (Строка) - строка допустимых символов. // diff --git a/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl b/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl index a8e939922..12e5d9ff2 100644 --- a/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl +++ b/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl @@ -319,7 +319,9 @@ Образец.Область(1, 1).ВысотаСтроки = 5; Образец.Область(1, 1).ШиринаКолонки = 1; - ЦветОбразца = Метаданные.ЭлементыСтиля.ОбразецНастройкиКолонтитуловЦвет.Значение; + ЭлементыСтиля = Метаданные.ЭлементыСтиля; + ЦветОбразца = ЭлементыСтиля.ОбразецНастройкиКолонтитуловЦвет.Значение; + ШрифтОбразца = ЭлементыСтиля.ОбразецНастройкиКолонтитуловШрифт.Значение; Образец.Область(2, 2, 4, 4).ЦветРамки = ЦветОбразца; Образец.Область(2, 2, 4, 4).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Забивать; @@ -347,7 +349,7 @@ Образец.Область(2, 4).ШиринаКолонки = 40; Образец.Область(3, 2).Текст = Символы.ПС + НСтр("ru = 'Образец отчета'") + Символы.ПС + " "; - Образец.Область(3, 2).Шрифт = Новый Шрифт("Arial", 20); + Образец.Область(3, 2).Шрифт = ШрифтОбразца; Образец.Область(3, 2).ЦветТекста = ЦветОбразца; Образец.Область(3, 2).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; diff --git a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form index 4b52cf65c..fc86c53e9 100644 --- a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form @@ -208,44 +208,14 @@ <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> </items> <items xsi:type="form:FormGroup"> - <name>ГруппаПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов</name> - <id>41</id> - <items xsi:type="form:Decoration"> - <name>ДекорацияОтступЗависимыеОпции</name> - <id>43</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ДекорацияОтступЗависимыеОпцииРасширеннаяПодсказка</name> - <id>45</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>ДекорацияОтступЗависимыеОпцииКонтекстноеМеню</name> - <id>44</id> - <autoFill>true</autoFill> - </contextMenu> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </items> + <name>ГруппаТекущееСостояние</name> + <id>48</id> <items xsi:type="form:FormField"> - <name>ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов</name> - <id>24</id> + <name>КоличествоСуммарное</name> + <id>11</id> <title> <key>ru</key> - <value>Подтверждать при удалении из рабочего каталога</value> + <value>Файлов</value> true true @@ -253,16 +223,11 @@ true - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов + КоличествоСуммарное - Right - - OnChange - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайловПриИзменении - - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайловExtendedTooltip - 34 + КоличествоСуммарноеExtendedTooltip + 37 Label true true @@ -271,288 +236,118 @@ - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайловКонтекстноеМеню - 25 + КоличествоСуммарноеКонтекстноеМеню + 12 true - CheckBoxField + InputField + true Enter true Left true - + Left + + true + true + true + true + true + + Style.BorderColor + + Normal +
      - true - true - - true - - - <key>ru</key> - <value>Подтверждать при удалении из локального кэша файлов</value> - - - ГруппаПодтверждатьПриУдаленииИзЛокальногоКэшаФайловРасширеннаяПодсказка - 42 - Label + + РазмерФайловВРабочемКаталоге + 9 + + <key>ru</key> + <value>Общий объем (Мб)</value> + + true + true + + true + + + РазмерФайловВРабочемКаталоге + + + РазмерФайловВРабочемКаталогеExtendedTooltip + 38 + Label + true + true + + Left + + + + РазмерФайловВРабочемКаталогеКонтекстноеМеню + 10 + true + + InputField + true + Enter + true + Left + true + Left + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ОчиститьРабочийКаталог + 13 + + <key>ru</key> + <value>Очистить</value> + + true + true + + true + + false + + ОчиститьРабочийКаталогExtendedTooltip + 40 + Label + true + true + + Left + + + UsualButton + Form.Command.ОчиститьЛокальныйКэшФайлов + Normal + Auto true true - - Left - - - UsualGroup - - AlwaysHorizontal - Auto - true - true - Auto - Auto - -
      - - ГруппаТекущееСостояние - 48 - - ГруппаФайлов - 46 - - КоличествоСуммарное - 11 - - <key>ru</key> - <value>Файлов</value> - - true - true - - true - - - КоличествоСуммарное - - - КоличествоСуммарноеExtendedTooltip - 37 - Label - true - true - - Left - - - - КоличествоСуммарноеКонтекстноеМеню - 12 - true - - InputField - true - Enter - true - Left - true - Left - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - СписокФайлов - 14 - true - true - - true - - false - - СписокФайловExtendedTooltip - 39 - Label - true - true - - Left - - - UsualButton - Form.Command.СписокФайлов - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - true - true - - true - - - <key>ru</key> - <value>Файлы</value> - - - ГруппаФайловРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - СейчасВЛокальномКэшеФайлов - 18 - - РазмерФайловВРабочемКаталоге - 9 - - <key>ru</key> - <value>Общий объем (Мб)</value> - - true - true - - true - - - РазмерФайловВРабочемКаталоге - - - РазмерФайловВРабочемКаталогеExtendedTooltip - 38 - Label - true - true - - Left - - - - РазмерФайловВРабочемКаталогеКонтекстноеМеню - 10 - true - - InputField - true - Enter - true - Left - true - Left - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ОчиститьРабочийКаталог - 13 - - <key>ru</key> - <value>Очистить</value> - - true - true - - true - - false - - ОчиститьРабочийКаталогExtendedTooltip - 40 - Label - true - true - - Left - - - UsualButton - Form.Command.ОчиститьЛокальныйКэшФайлов - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - true - true - - true - - - <key>ru</key> - <value>Общий объем</value> - - - СейчасВЛокальномКэшеФайловExtendedTooltip - 36 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Auto - true - true - Auto - Auto - + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto true true @@ -730,23 +525,6 @@ true - - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов - - <key>ru</key> - <value>Подтверждать при удалении из локального кэша файлов</value> - - 6 - - Boolean - - - true - - - true - - ОчиститьЛокальныйКэшФайлов @@ -770,28 +548,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>СписокФайлов</name> - <title> - <key>ru</key> - <value>Открыть список файлов...</value> - - 4 - - ru - Список файлов - - - true - - - - СписокФайловВыполнить - - - DontUse - Auto - ПутьКРабочемуКаталогуПоУмолчанию diff --git a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html index 3a8314f16..968ba0d5c 100644 --- a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html @@ -8,8 +8,7 @@ <li>Устанавливается программой автоматически, но может быть изменен при необходимости. Для этого <img src="StdPicture.InputFieldSelect"></img> <strong>Выберите</strong> другую папку на компьютере. При выборе другого пути к основному рабочему каталогу надо выбирать пустой каталог (не содержащий файлов или подкаталогов). </li> <li>Для того чтобы вернуться к первоначальным настройкам программы, нажмите кнопку <strong><img src="CommonPicture.РабочийКаталогПоУмолчанию"></img> Восстановить значение по умолчанию</strong>.</li></ul><h3>Максимальный размер</h3> -<ul><li>В поле <strong>Максимальный размер (Мб)</strong> установите предел суммарного объема всех файлов в <span lang="RU">основном рабочем каталоге</span> (по умолчанию 100 Мб). Если установлен равным 0, то объем файлов не ограничен. Размер указывается в мегабайтах (Мб).</li></ul><h3>Запрос программы на удаление файлов</h3> -<ul><li>Если установлен флажок <strong>Подтверждать при удалении из рабочего каталога</strong>, то перед удалением каждого файла будет выдаваться запрос на удаление файла. По умолчанию флажок снят.</li></ul><h3>Удаление файлов после редактирования</h3> -<ul><li>Если установлен флажок <strong>Удалять файлы при завершении редактирования</strong>, то после переносав программу файл удаляется на Вашем персональном компьютере. Используйте эту настройку для экономии места на жестком диске или в целях повышения безопасности. По умолчанию флажок снят.</li></ul><h3>Текущее состояние</h3> +<ul><li>В поле <strong>Максимальный размер (Мб)</strong> установите предел суммарного объема всех файлов в <span lang="RU">основном рабочем каталоге</span> (по умолчанию 100 Мб). Если установлен равным 0, то объем файлов не ограничен. Размер указывается в мегабайтах (Мб).</li></ul><h3>Удаление файлов после редактирования</h3> +<ul><li>Если установлен флажок <strong>Удалять файлы при завершении редактирования</strong>, то после переноса в программу файл удаляется на Вашем персональном компьютере. Используйте эту настройку для экономии места на жестком диске или в целях повышения безопасности. По умолчанию флажок снят.</li></ul><h3>Текущее состояние</h3> <ul><li>Программа показывает <strong>Текущее состояние</strong> основного рабочего каталога - количество <strong>Файлов</strong>, содержащихся в нем и их <strong>Общий объем (Мб)</strong>.</li></ul><h3>Очистка основного рабочего каталога</h3> <ul><li>Нажмите <strong>Очистить </strong><span lang="RU"><strong>рабочий каталог</strong>, для того чтобы удалить все файлы в <span lang="RU">основном рабочем каталоге,</span> кроме занятых Вами для редактирования. Для подтверждения очистки нажмите <strong>Да</strong>.</span></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl index 15a5f04d8..33cde66c4 100644 --- a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl @@ -12,7 +12,7 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если ОбщегоНазначения.ЭтоВебКлиент() Тогда - Элементы.СейчасВЛокальномКэшеФайлов.Видимость = Ложь; + Элементы.РазмерФайловВРабочемКаталоге.Видимость = Ложь; Элементы.ОчиститьРабочийКаталог.Видимость = Ложь; КонецЕсли; @@ -24,8 +24,6 @@ Элементы.РабочийКаталогПользователя.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; КонецЕсли; - Элементы.СписокФайлов.Видимость = Ложь; - КонецПроцедуры &НаКлиенте @@ -75,23 +73,9 @@ КонецПроцедуры -&НаКлиенте -Процедура ПодтверждатьПриУдаленииИзЛокальногоКэшаФайловПриИзменении(Элемент) - - СохранитьПараметры(); - -КонецПроцедуры - &НаКлиенте Процедура УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактированияПриИзменении(Элемент) - Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования Тогда - Элементы.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов.Доступность = Истина; - Иначе - Элементы.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов.Доступность = Ложь; - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Ложь; - КонецЕсли; - СохранитьПараметры(); КонецПроцедуры @@ -108,14 +92,6 @@ КонецПроцедуры -&НаКлиенте -Процедура СписокФайловВыполнить() - - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФайлыВОсновномРабочемКаталоге", , ЭтотОбъект, , , , - Новый ОписаниеОповещения("СписокФайловЗакрытие", ЭтотОбъект)); - -КонецПроцедуры - &НаКлиенте Процедура ОчиститьЛокальныйКэшФайлов(Команда) @@ -143,33 +119,27 @@ &НаКлиенте Процедура СохранитьПараметры() - МассивСтруктур = Новый Массив; + ПерсональныеНастройки = Новый Массив; Элемент = Новый Структура; Элемент.Вставить("Объект", "ЛокальныйКэшФайлов"); Элемент.Вставить("Настройка", "ПутьКЛокальномуКэшуФайлов"); Элемент.Вставить("Значение", РабочийКаталогПользователя); - МассивСтруктур.Добавить(Элемент); + ПерсональныеНастройки.Добавить(Элемент); Элемент = Новый Структура; Элемент.Вставить("Объект", "ЛокальныйКэшФайлов"); Элемент.Вставить("Настройка", "МаксимальныйРазмерЛокальногоКэшаФайлов"); Элемент.Вставить("Значение", МаксимальныйРазмерЛокальногоКэшаФайлов * 1048576); - МассивСтруктур.Добавить(Элемент); + ПерсональныеНастройки.Добавить(Элемент); Элемент = Новый Структура; Элемент.Вставить("Объект", "ЛокальныйКэшФайлов"); Элемент.Вставить("Настройка", "УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования"); Элемент.Вставить("Значение", УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования); - МассивСтруктур.Добавить(Элемент); + ПерсональныеНастройки.Добавить(Элемент); - Элемент = Новый Структура; - Элемент.Вставить("Объект", "ЛокальныйКэшФайлов"); - Элемент.Вставить("Настройка", "ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов"); - Элемент.Вставить("Значение", ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов); - МассивСтруктур.Добавить(Элемент); - - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, Истина); + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(ПерсональныеНастройки, Истина); КонецПроцедуры @@ -195,33 +165,13 @@ КонецПроцедуры -&НаКлиенте -Процедура СписокФайловЗакрытие(Результат, ДополнительныеПараметры) Экспорт - - ОбновитьТекущееСостояниеРабочегоКаталога(); - -КонецПроцедуры - &НаСервере Процедура ЗаполнитьПараметрыНаСервере() УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "ЛокальныйКэшФайлов", "УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования"); - - Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Неопределено Тогда - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; - КонецЕсли; - - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "ЛокальныйКэшФайлов", "ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов"); - - Если ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Неопределено Тогда - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Ложь; - КонецЕсли; - + "ЛокальныйКэшФайлов", "УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования", Ложь); МаксРазмер = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ЛокальныйКэшФайлов", "МаксимальныйРазмерЛокальногоКэшаФайлов"); - Если МаксРазмер = Неопределено Тогда МаксРазмер = 100*1024*1024; // 100 мб ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( @@ -229,13 +179,6 @@ КонецЕсли; МаксимальныйРазмерЛокальногоКэшаФайлов = МаксРазмер / 1048576; - Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования Тогда - Элементы.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов.Доступность = Истина; - Иначе - Элементы.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов.Доступность = Ложь; - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Ложь; - КонецЕсли; - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl b/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl index 749c64477..c73fd854f 100644 --- a/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl +++ b/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl @@ -539,13 +539,13 @@ Если НовыеРеквизиты <> Неопределено Тогда - ДобавитьРеквизит(НовыеРеквизиты, Новый РеквизитФормы(ОписаниеПрава.Имя, ОписаниеТиповПсевдоФлажка, + ДобавитьРеквизит(НовыеРеквизиты, Новый РеквизитФормы(ПредставленияПрава.Имя, ОписаниеТиповПсевдоФлажка, "ГруппыПрав", ПредставленияПрава.Заголовок), ОписаниеПрава.НачальноеЗначение); - ВозможныеПрава.Вставить(ОписаниеПрава.Имя); + ВозможныеПрава.Вставить(ПредставленияПрава.Имя); // Добавление прямых и обратных зависимостей прав. - ПрямыеЗависимостиПрав.Вставить(ОписаниеПрава.Имя, ОписаниеПрава.ТребуемыеПрава); + ПрямыеЗависимостиПрав.Вставить(ПредставленияПрава.Имя, ОписаниеПрава.ТребуемыеПрава); Для каждого ЗависимоеПраво Из ОписаниеПрава.ТребуемыеПрава Цикл Если ТипЗнч(ЗависимоеПраво) = Тип("Массив") Тогда ЗависимыеПрава = ЗависимоеПраво; @@ -560,18 +560,18 @@ ЗависимыеПрава = Новый Массив; ОбратныеЗависимостиПрав.Вставить(ЗависимоеПраво, ЗависимыеПрава); КонецЕсли; - Если ЗависимыеПрава.Найти(ОписаниеПрава.Имя) = Неопределено Тогда - ЗависимыеПрава.Добавить(ОписаниеПрава.Имя); + Если ЗависимыеПрава.Найти(ПредставленияПрава.Имя) = Неопределено Тогда + ЗависимыеПрава.Добавить(ПредставленияПрава.Имя); КонецЕсли; КонецЦикла; КонецЦикла; Иначе - Элемент = ДобавитьЭлемент("ГруппыПрав" + ОписаниеПрава.Имя, Тип("ПолеФормы"), Элементы.ГруппыПрав); + Элемент = ДобавитьЭлемент("ГруппыПрав" + ПредставленияПрава.Имя, Тип("ПолеФормы"), Элементы.ГруппыПрав); Элемент.ТолькоПросмотр = Истина; Элемент.Формат = НСтр("ru = 'ЧЦ=1; ЧН=; БЛ=Нет; БИ=Да'"); Элемент.ГоризонтальноеПоложениеВШапке = ГоризонтальноеПоложениеЭлемента.Центр; Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; - Элемент.ПутьКДанным = "ГруппыПрав." + ОписаниеПрава.Имя; + Элемент.ПутьКДанным = "ГруппыПрав." + ПредставленияПрава.Имя; Элемент.Подсказка = ПредставленияПрава.Подсказка; // Расчет оптимальной ширины элемента. diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form index 6cecd56be..5e43bdb03 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form @@ -339,7 +339,7 @@ </extInfo> </items> <items xsi:type="form:Button"> - <name>Скопировать</name> + <name>ПеревыпуститьСертификат</name> <id>353</id> <visible>true</visible> <enabled>true</enabled> @@ -347,7 +347,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>СкопироватьРасширеннаяПодсказка</name> + <name>ПеревыпуститьСертификатРасширеннаяПодсказка</name> <id>354</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -356,9 +356,8 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.Скопировать</commandName> + <commandName>Form.Command.ПеревыпуститьСертификат</commandName> <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> @@ -3025,15 +3024,15 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>Скопировать</name> + <name>ПеревыпуститьСертификат</name> <title> <key>ru</key> - <value>Скопировать</value> + <value>Перевыпустить...</value> 6 ru - Скопировать + Перевыпустить сертификат, у которого закончился срок действия true @@ -3044,7 +3043,7 @@ - Скопировать + ПеревыпуститьСертификат Picture diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl index 955ee942c..7838939e2 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl @@ -465,7 +465,7 @@ КонецПроцедуры &НаКлиенте -Процедура Скопировать(Команда) +Процедура ПеревыпуститьСертификат(Команда) Если Элементы.Сертификаты.ТекущаяСтрока = Неопределено Тогда Возврат; @@ -810,7 +810,7 @@ Процедура ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклПродолжение(Менеджер, Контекст) Экспорт ОписаниеПрограммы = Контекст.ОписаниеПрограммы; - Ошибки = Контекст.ПараметрыВыполнения.ОписаниеОшибок.Ошибки; + Ошибки = Контекст.ПараметрыВыполнения.ОписаниеОшибок.Ошибки; // см. ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваОшибки Если Менеджер <> Неопределено Тогда ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверки, НСтр("ru = 'Установлена на компьютере.'")); diff --git a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Form.form b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Form.form index 067ff57a6..c39f00559 100644 --- a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Form.form +++ b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Form.form @@ -36,9 +36,9 @@ 17 true - 4 + 6 true - 2 + 3 true @@ -100,6 +100,7 @@ UsualGroup + Center Auto NormalSeparation true @@ -164,7 +165,7 @@ 11 true - 8 + 6 true 3 true @@ -227,6 +228,7 @@ UsualGroup + Center Auto true true @@ -289,9 +291,9 @@ 5 true - 4 + 6 true - 2 + 3 true @@ -304,9 +306,7 @@ 6 <key>ru</key> - <value>Синхронизация с автономным рабочим местом прекращена. -Теперь его можно удалить из списка информационных баз -на Вашем компьютере.</value> + <value>Синхронизация с автономным рабочим местом прекращена.</value> true true @@ -352,6 +352,7 @@ UsualGroup + Center Auto NormalSeparation true diff --git a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl index 421bb8813..843e4e19e 100644 --- a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl +++ b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl @@ -337,19 +337,19 @@ // // Параметры: // -// ПорядковыйНомерПерехода (обязательный) - Число. Порядковый номер перехода, который соответствует текущему шагу перехода -// ИмяОсновнойСтраницы (обязательный) - Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему +// ПорядковыйНомерПерехода (обязательный) - Число - порядковый номер перехода, который соответствует текущему шагу перехода +// ИмяОсновнойСтраницы (обязательный) - Строка - имя страницы панели "ПанельОсновная", которая соответствует текущему // номеру перехода -// ИмяСтраницыНавигации (обязательный) - Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему +// ИмяСтраницыНавигации (обязательный) - Строка - имя страницы панели "ПанельНавигации", которая соответствует текущему // номеру перехода -// ИмяСтраницыДекорации (необязательный) - Строка. Имя страницы панели "ПанельДекорации", которая соответствует +// ИмяСтраницыДекорации (необязательный) - Строка - имя страницы панели "ПанельДекорации", которая соответствует // текущему номеру перехода -// ИмяОбработчикаПриОткрытии (необязательный) - Строка. Имя функции-обработчика события открытия текущей страницы помощника -// ИмяОбработчикаПриПереходеДалее (необязательный) - Строка. Имя функции-обработчика события перехода на следующую +// ИмяОбработчикаПриОткрытии (необязательный) - Строка - имя функции-обработчика события открытия текущей страницы помощника +// ИмяОбработчикаПриПереходеДалее (необязательный) - Строка - имя функции-обработчика события перехода на следующую // страницу помощника -// ИмяОбработчикаПриПереходеНазад (необязательный) - Строка. Имя функции-обработчика события перехода на предыдущую +// ИмяОбработчикаПриПереходеНазад (необязательный) - Строка - имя функции-обработчика события перехода на предыдущую // страницу помощника -// ДлительнаяОперация (необязательный) - Булево. Признак отображения страницы длительной операции. +// ДлительнаяОперация (необязательный) - Булево - признак отображения страницы длительной операции. // Истина - отображается страница длительной операции; Ложь - отображается обычная страница. Значение по умолчанию - Ложь. // &НаСервере diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl index 80862acae..e0bad50c4 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl @@ -530,7 +530,7 @@ Поле = "ПочтовыеАдресаПолучателей"; Для Каждого АдресПолучателя Из ПочтовыеАдресаПолучателей Цикл Если СтрНайти(АдресПолучателя.Представление, ОшибочныйПолучатель.Ключ) > 0 Тогда - Поле = Поле + "[" + ПочтовыеАдресаПолучателей.Индекс(АдресПолучателя) + "].Представление"; + Поле = Поле + "[" + XMLСтрока(ПочтовыеАдресаПолучателей.Индекс(АдресПолучателя)) + "].Представление"; Прервать; КонецЕсли; КонецЦикла; @@ -564,30 +564,37 @@ Возврат; КонецЕсли; - #Если ВебКлиент Тогда - ПолучитьФайл(ВыбранноеВложение.АдресВоВременномХранилище, ВыбранноеВложение.Представление, Истина); - #Иначе - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяВременнойПапки); - - ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + ВыбранноеВложение.Представление; - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ВыбранноеВложение.АдресВоВременномХранилище); - ДвоичныеДанные.Записать(ИмяВременногоФайла); - - Файл = Новый Файл(ИмяВременногоФайла); - Файл.УстановитьТолькоЧтение(Истина); - Если Файл.Расширение = ".mxl" Тогда - ТабличныйДокумент = ПолучитьТабличныйДокументПоДвоичнымДанным(ВыбранноеВложение.АдресВоВременномХранилище); - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("ИмяДокумента", ВыбранноеВложение.Представление); - ПараметрыОткрытия.Вставить("ТабличныйДокумент", ТабличныйДокумент); - ПараметрыОткрытия.Вставить("ПутьКФайлу", ИмяВременногоФайла); - ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия, ЭтотОбъект); - Иначе - ФайловаяСистемаКлиент.ОткрытьФайл(ИмяВременногоФайла); - КонецЕсли; - #КонецЕсли +#Если Не ВебКлиент Тогда + Если СтрЗаканчиваетсяНа(ВыбранноеВложение.Представление, ".mxl") Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьОткрытиеФайлаMXLПослеСозданияКаталога", ЭтотОбъект, ВыбранноеВложение); + ФайловаяСистемаКлиент.СоздатьВременныйКаталог(ОписаниеОповещения); + Возврат; + КонецЕсли; +#КонецЕсли + + ФайловаяСистемаКлиент.ОткрытьФайл(ВыбранноеВложение.АдресВоВременномХранилище, , ВыбранноеВложение.Представление); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьОткрытиеФайлаMXLПослеСозданияКаталога(ИмяВременногоКаталога, ВыбранноеВложение) Экспорт + +#Если Не ВебКлиент Тогда + ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + ВыбранноеВложение.Представление; + ТабличныйДокумент = ПолучитьТабличныйДокументПоДвоичнымДанным(ВыбранноеВложение.АдресВоВременномХранилище); + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ВыбранноеВложение.АдресВоВременномХранилище); + ДвоичныеДанные.Записать(ИмяВременногоФайла); + Файл = Новый Файл(ИмяВременногоФайла); + Файл.УстановитьТолькоЧтение(Истина); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ИмяДокумента", ВыбранноеВложение.Представление); + ПараметрыОткрытия.Вставить("ТабличныйДокумент", ТабличныйДокумент); + ПараметрыОткрытия.Вставить("ПутьКФайлу", ИмяВременногоФайла); + + ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия, ЭтотОбъект); +#КонецЕсли КонецПроцедуры @@ -599,7 +606,8 @@ НаименованиеВложения = Элементы.Вложения.ТекущиеДанные[Элементы.Вложения.ТекущийЭлемент.Имя]; Для Каждого Вложение Из Вложения Цикл Если Вложение.Представление = НаименованиеВложения Тогда - Результат = Вложение; + Результат = Новый Структура("Представление, АдресВоВременномХранилище"); + ЗаполнитьЗначенияСвойств(Результат, Вложение); Прервать; КонецЕсли; КонецЦикла; @@ -679,8 +687,7 @@ СтрокаПредставления = ПредставлениеВложений.Добавить(); КонецЕсли; - СтрокаПредставления["Вложение" + Строка(Индекс + 1)] = Вложение.Представление; - + СтрокаПредставления["Вложение" + Формат(Индекс + 1, "ЧГ=0")] = Вложение.Представление; Если Элементы.Вложение2.Видимость Тогда // Для мобильного клиента. Индекс = Индекс + 1; Если Индекс = 2 Тогда diff --git a/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Form.form b/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Form.form index 18cc31453..59c26d89a 100644 --- a/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Form.form +++ b/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Form.form @@ -138,7 +138,7 @@ - ПапкаСФайлами + КаталогСФайлами 2 String @@ -158,10 +158,6 @@ Открыть папку с файлами 1 - - ru - Открыть папку с файлами - true @@ -174,7 +170,7 @@ Auto - ПапкаСФайлами + КаталогСФайлами String diff --git a/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl b/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl index 1158e7000..534fcf51f 100644 --- a/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl +++ b/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl @@ -12,9 +12,9 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Текст = Параметры.Текст; - ПапкаСФайлами = Параметры.ПапкаСФайлами; + КаталогСФайлами = Параметры.КаталогСФайлами; - Элементы.ФормаОткрытьПапкуСФайлами.Видимость = ЗначениеЗаполнено(ПапкаСФайлами); + Элементы.ФормаОткрытьПапкуСФайлами.Видимость = ЗначениеЗаполнено(КаталогСФайлами); КонецПроцедуры @@ -25,7 +25,7 @@ &НаКлиенте Процедура ОткрытьПапкуСФайлами(Команда) - ФайловаяСистемаКлиент.ОткрытьПроводник(ПапкаСФайлами); + ФайловаяСистемаКлиент.ОткрытьПроводник(КаталогСФайлами); КонецПроцедуры diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 9d6ad6c91..59198092b 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -159,6 +159,9 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +// Параметры: +// Элемент - ДекорацияФормы +// &НаКлиенте Процедура Подключаемый_ВариантНажатие(Элемент) Вариант = НайтиВариантПоИмениЭлемента(Элемент.Имя); @@ -173,6 +176,9 @@ ВариантыОтчетовКлиент.ОткрытьФормуОтчета(ЭтотОбъект, Вариант, ПараметрыФормыОтчета); КонецПроцедуры +// Параметры: +// Элемент - ПолеФормы +// &НаКлиенте Процедура Подключаемый_ВидимостьВариантаПриИзменении(Элемент) Флажок = Элемент; @@ -234,6 +240,9 @@ КонецЕсли; КонецПроцедуры +// Параметры: +// Элемент - ДекорацияФормы +// &НаКлиенте Процедура Подключаемый_ЗаголовокРазделаНажатие(Элемент) ГруппаРазделаИмя = Элемент.Родитель.Имя; @@ -928,7 +937,7 @@ &НаСервере Процедура ЗаполнитьПанельОтчетов(ПараметрыЗаполненияВременноеХранилище) - ПараметрыЗаполнения = ПолучитьИзВременногоХранилища(ПараметрыЗаполненияВременноеХранилище); + ПараметрыЗаполнения = ПолучитьИзВременногоХранилища(ПараметрыЗаполненияВременноеХранилище); // см. ВариантыОтчетов.ВариантыОтчетовДляВывода УдалитьИзВременногоХранилища(ПараметрыЗаполненияВременноеХранилище); ИнициализироватьПараметрыЗаполнения(ПараметрыЗаполнения); @@ -964,7 +973,7 @@ Если ПараметрыЗаполнения.ДобавляемыеРеквизиты.Количество() > 0 Тогда // Регистрация старых реквизитов для удаления. УдаляемыеРеквизиты = Новый Массив; - НаборРеквизитов = ПолучитьРеквизиты(); + НаборРеквизитов = ПолучитьРеквизиты(); // Массив из РеквизитФормы Для Каждого Реквизит Из НаборРеквизитов Цикл Если ПостоянныеРеквизиты.НайтиПоЗначению(Реквизит.Имя) = Неопределено Тогда УдаляемыеРеквизиты.Добавить(Реквизит.Имя); @@ -1074,6 +1083,11 @@ КонецПроцедуры +// Параметры: +// ПараметрыЗаполнения - см. ВариантыОтчетов.ВариантыОтчетовДляВывода +// РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// &НаСервере Процедура ВывестиВариантыРаздела(ПараметрыЗаполнения, РазделСсылка) ОтборПоРазделу = Новый Структура("РазделСсылка", РазделСсылка); @@ -1107,7 +1121,7 @@ КонецЕсли; Если ПараметрыЗаполнения.ТолькоТекущийРаздел Тогда - ПодсистемыРаздела = ПараметрыЗаполнения.ТаблицаПодсистем; + ПодсистемыРаздела = ПараметрыЗаполнения.ТаблицаПодсистем; // ТаблицаЗначений Иначе ПодсистемыРаздела = ПараметрыЗаполнения.ТаблицаПодсистем.Скопировать(ОтборПоРазделу); КонецЕсли; @@ -1125,7 +1139,7 @@ КонецЕсли; Для Каждого ИмяГруппы Из ПараметрыЗаполнения.ГруппыВажности Цикл - ПараметрыГруппы = ПараметрыЗаполнения[ИмяГруппы]; + ПараметрыГруппы = ПараметрыЗаполнения[ИмяГруппы]; // см. ВариантыОтчетов.ВариантыОтчетовДляВывода Если ПараметрыЗаполнения.ОсталосьВывести <= 0 Тогда ПараметрыГруппы.Варианты = Новый Массив; ПараметрыГруппы.Количество = 0; @@ -1226,7 +1240,7 @@ РазделЗаголовок = ИнформацияОРазделе.Представление + РазделСуффикс; КонецЕсли; - ЗаголовокРаздела = ГруппаРаздела.РасширеннаяПодсказка; + ЗаголовокРаздела = ГруппаРаздела.РасширеннаяПодсказка; // ДекорацияФормы, РасширениеДекорацииФормыДляНадписи ЗаголовокРаздела.Заголовок = РазделЗаголовок; ЗаголовокРаздела.Шрифт = ШрифтРаздела; ЗаголовокРаздела.ЦветТекста = ЦветРаздела; @@ -1252,7 +1266,9 @@ СкопироватьЭлемент(ПараметрыЗаполнения.Префикс, ГруппаРаздела, "Колонки", 2); Элементы.Удалить(Элементы[ПараметрыЗаполнения.Префикс + "БыстрыйДоступПодсказкаКогдаНеНастроен"]); - Элементы[ПараметрыЗаполнения.Префикс + "БыстрыйДоступШапка"].РасширеннаяПодсказка.Заголовок = ""; + + НайденнаяГруппа = Элементы[ПараметрыЗаполнения.Префикс + "БыстрыйДоступШапка"]; // ГруппаФормы + НайденнаяГруппа.РасширеннаяПодсказка.Заголовок = ""; КонецПроцедуры &НаСервере @@ -1279,9 +1295,12 @@ Возврат НовыйЭлемент; КонецФункции +// Параметры: +// ПараметрыЗаполнения - см. ВариантыОтчетов.ВариантыОтчетовДляВывода +// &НаСервере Процедура ВывестиВариантыСГруппой(ПараметрыЗаполнения) - ПараметрыГруппы = ПараметрыЗаполнения[ПараметрыЗаполнения.ИмяГруппы]; + ПараметрыГруппы = ПараметрыЗаполнения[ПараметрыЗаполнения.ИмяГруппы]; // см. ВариантыОтчетов.ВариантыОтчетовДляВывода Варианты = ПараметрыГруппы.Варианты; КоличествоВариантов = ПараметрыГруппы.Количество; Если КоличествоВариантов = 0 И Не (РежимНастройки И ПараметрыЗаполнения.ИмяГруппы = "СГруппой") Тогда @@ -1460,11 +1479,36 @@ // Возвращаемое значение: // ДеревоЗначений - коллекция, для моделирования распределения вариантов отчетов с учетом вложенности подсистем, где: // * Подсистема - СтрокаТаблицыЗначений - описание подсистемы. -// * ПодсистемаСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - ссылка на идентификатор подсистемы. -// * Варианты - Массив - коллекция вариантов отчета, где: -// ** Элемент - СтрокаТаблицыЗначений - описание варианта отчета, где: -// *** КоличествоПодчиненных - Число - счетчик подчиненных элементов. +// * ПодсистемаСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * Варианты - Массив из СтрокаТаблицыЗначений: +// ** Ссылка - СправочникСсылка.ВариантыОтчетов +// ** Подсистема - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** ПодсистемаПредставление - Строка +// ** ПодсистемаПриоритет - Строка +// ** РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** БезГруппы - Булево +// ** Важный - Булево +// ** СмТакже - Булево +// ** Дополнительный - Булево +// ** Видимость - Булево +// ** БыстрыйДоступ - Булево +// ** ИмяОтчета - Строка +// ** Наименование - Строка +// ** Описание - Строка +// ** Автор - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// ** Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - Строка +// ** ТипОтчета - ПеречислениеСсылка.ТипыОтчетов +// ** КлючВарианта - Строка +// ** Родитель - СправочникСсылка.ВариантыОтчетов +// ** ВерхнийУровень - Булево +// ** КлючЗамеров - Строка // * КоличествоВариантов- Число - счетчик вариантов отчетов. // * КоличествоПустыхСтрок - Число - дополнительный счетчик. // * ВсегоВложенныхВариантов- Число - счетчик дочерних вариантов отчетов. @@ -1503,21 +1547,34 @@ // Конструктор коллекции, хранящей сведения о порядке вывода отчетов на панель. // // Возвращаемое значение: -// ТаблицаЗначений - коллекция, хранящая сведения о порядке вывода отчетов на панель, где: -// * НомерКолонки- Число - номер колонки, в которую выводится отчет. -// * ЭтоПодсистема - Булево - признак подсистемы. -// * ЭтоПродолжение - Булево - дополнительный признак. -// * ЭтоВариант - Булево -признак варианта отчета. -// * ЭтоПустаяСтрока - Булево - признак не заполненной строки. +// ТаблицаЗначений: +// * НомерКолонки- Число +// * ЭтоПодсистема - Булево +// * ЭтоПродолжение - Булево +// * ЭтоВариант - Булево +// * ЭтоПустаяСтрока - Булево // * СтрокаДерева - СтрокаДереваЗначений - см. ... -// * Подсистема - СтрокаТаблицыЗначений - описание подсистемы. -// * ПодсистемаСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - ссылка на идентификатор подсистемы. -// * ПодсистемаПриоритет - Число - приоритет подсистемы. -// * Вариант - СтрокаТаблицыЗначений - описание варианта отчета, где: +// * Подсистема - СтрокаТаблицыЗначений: +// ** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** Представление - Строка +// ** Имя - Строка +// ** ПолноеИмя - Строка +// ** Приоритет - Строка +// ** НомерЭлемента - Число +// ** ИмяЭлемента - Строка +// ** РодительСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** ВидимыхВариантов - Число +// * ПодсистемаСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * ПодсистемаПриоритет - Число +// * Вариант - СтрокаТаблицыЗначений: // ** КоличествоПодчиненных - Число - счетчик подчиненных элементов. -// * ВариантСсылка - СправочникСсылка.ВариантыОтчетов - ссылка на вариант отчета. -// * УровеньВложенности - Число - номер уровня в иерархии. +// * ВариантСсылка - СправочникСсылка.ВариантыОтчетов +// * УровеньВложенности - Число // &НаСервере Функция ПорядокВывода() @@ -1548,6 +1605,21 @@ КонецФункции +// Параметры: +// ПорядокВывода - см. ПорядокВывода +// СтрокаРодителя - см. ДеревоРаспределения +// СтрокаДерева - см. ДеревоРаспределения +// Рекурсия - Структура: +// ** ВсегоОсталосьВывести - Число +// ** СвободноКолонок - Число +// ** КоличествоКолонок - Число +// ** ГруппаУровня3Отсечка - Число +// ** НомерТекущейКолонки - Число +// ** ЭтоПоследняяКолонка - Булево +// ** СвободноСтрок - Число +// ** НачатВыводВТекущейКолонке - Булево +// ПараметрыЗаполнения - см. ВариантыОтчетов.ВариантыОтчетовДляВывода +// &НаСервере Процедура ЗаполнитьПорядокВывода(ПорядокВывода, СтрокаРодителя, СтрокаДерева, Рекурсия, ПараметрыЗаполнения) @@ -1734,6 +1806,14 @@ КонецПроцедуры +// Параметры: +// ПараметрыЗаполнения - см. ВариантыОтчетов.ВариантыОтчетовДляВывода +// СтрокаПорядкаВывода - см. ПорядокВывода +// ВГруппу - ГруппаФормы +// +// Возвращаемое значение: +// ГруппаФормы, КнопкаФормы, ТаблицаФормы, ПолеФормы, Произвольный, ДекорацияФормы +// &НаСервере Функция ДобавитьГруппуПодсистемы(ПараметрыЗаполнения, СтрокаПорядкаВывода, ВГруппу) Подсистема = СтрокаПорядкаВывода.Подсистема; @@ -1866,6 +1946,46 @@ Возврат ГруппаВывода; КонецФункции +// Параметры: +// ПараметрыЗаполнения - см. ВариантыОтчетов.ВариантыОтчетовДляВывода +// Вариант - СтрокаТаблицыЗначений: +// * Ссылка - СправочникСсылка.ВариантыОтчетов +// * Подсистема - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * ПодсистемаПредставление - Строка +// * ПодсистемаПриоритет - Строка +// * РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * БезГруппы - Булево +// * Важный - Булево +// * СмТакже - Булево +// * Дополнительный - Булево +// * Видимость - Булево +// * БыстрыйДоступ - Булево +// * ИмяОтчета - Строка +// * Наименование - Строка +// * Описание - Строка +// * Автор - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - Строка +// * ТипОтчета - ПеречислениеСсылка.ТипыОтчетов +// * КлючВарианта - Строка +// * Родитель - СправочникСсылка.ВариантыОтчетов +// * ВерхнийУровень - Булево +// * КлючЗамеров - Строка +// ВГруппу - ГруппаФормы +// - КнопкаФормы +// - ТаблицаФормы +// - ПолеФормы +// - Произвольный +// УровеньВложенности - Число +// +// Возвращаемое значение: +// ГруппаФормы, КнопкаФормы, ТаблицаФормы, ПолеФормы, ДекорацияФормы +// &НаСервере Функция ДобавитьЭлементыВариантаОтчета(ПараметрыЗаполнения, Вариант, ВГруппу, УровеньВложенности = 0) @@ -1886,7 +2006,7 @@ КонецЕсли; Пока Элементы.Найти(НадписьИмя + Суффикс) <> Неопределено Цикл Номер = Номер + 1; - Суффикс = "_" + Строка(Номер); + Суффикс = "_" + XMLСтрока(Номер); КонецЦикла; НадписьИмя = НадписьИмя + Суффикс; КонецЕсли; @@ -1966,11 +2086,22 @@ КонецФункции +// Параметры: +// ПараметрыЗаполнения - см. ВариантыОтчетов.ВариантыОтчетовДляВывода +// Вариант - СтрокаТаблицыЗначений: +// * КоличествоПодчиненных - Число +// СоставПодсказки - Массив +// Надпись - ГруппаФормы +// - КнопкаФормы +// - ТаблицаФормы +// - ПолеФормы +// - ДекорацияФормы +// &НаСервере Процедура ОпределитьСоставПодсказкиВарианта(ПараметрыЗаполнения, Вариант, СоставПодсказки, Надпись) ПодсказкаВыведена = Ложь; Если ПараметрыЗаполнения.ИспользоватьПодсветку Тогда - ПараметрыПодсветки = ПараметрыЗаполнения.РезультатПоиска.ПодсветкаВариантов.Получить(Вариант.Ссылка); + ПараметрыПодсветки = ПараметрыЗаполнения.РезультатПоиска.ПодсветкаВариантов.Получить(Вариант.Ссылка); // Структура Если ПараметрыПодсветки <> Неопределено Тогда Если ПараметрыПодсветки.НаименованиеВарианта.КоличествоНайденныхСлов > 0 Тогда Надпись.Заголовок = СформироватьСтрокуСПодсветкой(ПараметрыПодсветки.НаименованиеВарианта); @@ -2090,7 +2221,7 @@ КонецЕсли; Если ВозвращатьФорматированнуюСтроку Тогда - Возврат Новый ФорматированнаяСтрока(Содержимое); + Возврат Новый ФорматированнаяСтрока(Содержимое); // АПК:1356 Строка не формируется заново, а выполняется обработка существующей. Иначе Возврат Неопределено; КонецЕсли; diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index f0580ad63..17a9b0552 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -165,7 +165,7 @@ Если ВыбранноеЗначение <> Неопределено И ВыбранноеЗначение <> КодВозвратаДиалога.Отмена Тогда ФайлыВоВременномХранилище = ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранноеЗначение); Если ВыбранноеЗначение.ВариантСохранения = "СохранитьВПапку" Тогда - СохранитьПечатныеФормыВПапку(ФайлыВоВременномХранилище, ВыбранноеЗначение.ПапкаДляСохранения); + СохранитьПечатныеФормыВКаталог(ФайлыВоВременномХранилище, ВыбранноеЗначение.ПапкаДляСохранения); Иначе ЗаписанныеОбъекты = ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременномХранилище, ВыбранноеЗначение.ОбъектДляПрикрепления); Если ЗаписанныеОбъекты.Количество() > 0 Тогда @@ -478,7 +478,8 @@ // Возвращаемое значение: -// См. УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм +// см. УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм +// &НаСервере Функция СформироватьПечатныеФормы(ИменаМакетов, Отказ) @@ -681,7 +682,7 @@ КонецЕсли; Если Не ЕстьДанныеДляПечати Тогда - Элементы.ТекущаяПечатнаяФорма.УстановитьДействие("ПриАктивизацииОбласти", ""); + Элементы.ТекущаяПечатнаяФорма.УстановитьДействие("ПриАктивизации", ""); КонецЕсли; Элементы.КнопкаПоказатьСкрытьНастройкуКомплекта.Видимость = ЭтоПечатьКомплекта(); @@ -869,9 +870,8 @@ ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива); КонецЕсли; - // подготовка временной папки - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяВременнойПапки); + ИмяВременногоКаталога = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ИмяВременногоКаталога); ВыбранныеФорматыСохранения = НастройкиСохранения.ФорматыСохранения; ПереводитьИменаФайловВТранслит = НастройкиСохранения.ПереводитьИменаФайловВТранслит; @@ -888,7 +888,7 @@ Для Каждого ФайлОфисногоДокумента Из ФайлыОфисныхДокументов Цикл ИмяФайла = УправлениеПечатью.ИмяФайлаОфисногоДокумента(ФайлОфисногоДокумента.Значение); Если ЗаписьZipФайла <> Неопределено Тогда - ПолноеИмяФайла = УникальноеИмяФайла(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + ПолноеИмяФайла = УникальноеИмяФайла(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + ИмяФайла); ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлОфисногоДокумента.Ключ); // ДвоичныеДанные - ДвоичныеДанные.Записать(ПолноеИмяФайла); @@ -949,7 +949,7 @@ ИмяФайла = ИмяФайла + "." + НастройкиФормата.Расширение; - ПолноеИмяФайла = УникальноеИмяФайла(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + ИмяФайла); + ПолноеИмяФайла = УникальноеИмяФайла(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + ИмяФайла); ПечатнаяФорма.Записать(ПолноеИмяФайла, ТипФайла); Если ТипФайла = ТипФайлаТабличногоДокумента.HTML Тогда @@ -984,7 +984,7 @@ Результат.Добавить(ОписаниеФайла); КонецЕсли; - УдалитьФайлы(ИмяВременнойПапки); + УдалитьФайлы(ИмяВременногоКаталога); Если ЗначениеЗаполнено(ИмяАрхива) Тогда УдалитьФайлы(ИмяАрхива); КонецЕсли; @@ -1041,22 +1041,25 @@ КонецПроцедуры &НаКлиенте -Процедура СохранитьПечатныеФормыВПапку(СписокФайловВоВременномХранилище, Знач Папка = "") +Процедура СохранитьПечатныеФормыВКаталог(СписокФайловВоВременномХранилище, Знач ИмяКаталога = "") - #Если ВебКлиент Тогда - Для Каждого ФайлДляЗаписи Из СписокФайловВоВременномХранилище Цикл - ПолучитьФайл(ФайлДляЗаписи.АдресВоВременномХранилище, ФайлДляЗаписи.Представление); - КонецЦикла; - Возврат; - #КонецЕсли +#Если ВебКлиент Тогда + СохраняемыеФайлы = Новый Массив; + Для Каждого ФайлДляЗаписи Из СписокФайловВоВременномХранилище Цикл + СохраняемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ФайлДляЗаписи.Представление, ФайлДляЗаписи.АдресВоВременномХранилище)); + КонецЦикла; + ФайловаяСистемаКлиент.СохранитьФайлы(Неопределено, СохраняемыеФайлы); + Возврат; +#КонецЕсли - Папка = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Папка); + ИмяКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога); Для Каждого ФайлДляЗаписи Из СписокФайловВоВременномХранилище Цикл ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлДляЗаписи.АдресВоВременномХранилище); // ДвоичныеДанные - - ДвоичныеДанные.Записать(УникальноеИмяФайла(Папка + ФайлДляЗаписи.Представление)); + ДвоичныеДанные.Записать(УникальноеИмяФайла(ИмяКаталога + ФайлДляЗаписи.Представление)); КонецЦикла; - ПоказатьОповещениеПользователя(НСтр("ru = 'Сохранение успешно завершено'"), "file:///" + Папка, НСтр("ru = 'в папку:'") + " " + Папка, БиблиотекаКартинок.Информация32); + ПоказатьОповещениеПользователя(НСтр("ru = 'Сохранение успешно завершено'"), "file:///" + ИмяКаталога, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'в папку %1'"), ИмяКаталога), БиблиотекаКартинок.Информация32); КонецПроцедуры @@ -1066,12 +1069,12 @@ Файл = Новый Файл(ИмяФайла); ИмяБезРасширения = Файл.ИмяБезРасширения; Расширение = Файл.Расширение; - Папка = Файл.Путь; + ИмяКаталога = Файл.Путь; Счетчик = 1; Пока Файл.Существует() Цикл Счетчик = Счетчик + 1; - Файл = Новый Файл(Папка + ИмяБезРасширения + " (" + Счетчик + ")" + Расширение); + Файл = Новый Файл(ИмяКаталога + ИмяБезРасширения + " (" + Счетчик + ")" + Расширение); КонецЦикла; Возврат Файл.ПолноеИмя; @@ -1462,6 +1465,19 @@ КонецЕсли; КонецЦикла; + // СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов + // Записываем сведения о печати формы в регистр состояний оригиналов + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда + Массив = НастройкиПечатныхФорм.Выгрузить(,"ИмяМакета, Название"); + СписокПечати = Новый СписокЗначений; + Для Каждого ПечатнаяФорма Из Массив Цикл + СписокПечати.Добавить(ПечатнаяФорма.ИмяМакета, ПечатнаяФорма.Название); + КонецЦикла; + МодульУчетОригиналовПервичныхДокументовВызовСервера = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументовВызовСервера"); + МодульУчетОригиналовПервичныхДокументовВызовСервера.ЗаписатьСостоянияОригиналовПослеПечати(ОбъектыПечати, СписокПечати); + КонецЕсли; + // Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов + Возврат ТабличныеДокументы; КонецФункции @@ -1495,9 +1511,10 @@ КонецФункции // Параметры: -// ТабличныйДокумент - ТабличныйДокумент - +// ТабличныйДокумент - ТабличныйДокумент // Возвращаемое значение: -// Булево - +// Булево +// &НаСервереБезКонтекста Функция ЕстьПодписьИПечать(ТабличныйДокумент) diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index 3e37027f2..9206be8a5 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -148,7 +148,7 @@ &НаКлиенте Процедура ПрофилиПриАктивизацииСтроки(Элемент) - ПриИзмененииТекущегоПрофиля(ЭтотОбъект); + ПодключитьОбработчикОжидания("ОбработчикОжиданияПрофилиПриАктивизацииСтроки", 0.1, Истина); КонецПроцедуры @@ -511,6 +511,7 @@ | И (ГруппыДоступаПользователи.Пользователь = &Пользователь) |ГДЕ | НЕ Профили.ПометкаУдаления + | И НЕ ГруппыДоступа.ПометкаУдаления | И НЕ(&ОтборПрофилейТолькоТекущегоПользователя = ИСТИНА | И ГруппыДоступаПользователи.Ссылка ЕСТЬ NULL) |; @@ -878,6 +879,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработчикОжиданияПрофилиПриАктивизацииСтроки() + + ПриИзмененииТекущегоПрофиля(ЭтотОбъект); + +КонецПроцедуры + &НаКлиентеНаСервереБезКонтекста Процедура ПриИзмененииТекущегоПрофиля(Знач Форма, Знач ОбработкаНаКлиенте = Истина) diff --git a/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form b/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form index 57d8d4581..8f4a19c80 100644 --- a/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form +++ b/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form @@ -86,7 +86,7 @@ true Label true - false + true Left @@ -151,10 +151,6 @@ true - - <key>ru</key> - <value>Командная панель 1</value> - КоманднаяПанель1РасширеннаяПодсказка 48 @@ -236,7 +232,7 @@ true Label true - false + true Left @@ -275,10 +271,6 @@ true - - <key>ru</key> - <value>Командная панель 2</value> - КоманднаяПанель2РасширеннаяПодсказка 59 @@ -358,8 +350,10 @@ true Label + 60 true false + true Left @@ -424,10 +418,6 @@ true - - <key>ru</key> - <value>Командная панель 3</value> - КоманднаяПанель3РасширеннаяПодсказка 79 @@ -508,7 +498,7 @@ true Label true - false + true Left @@ -573,10 +563,6 @@ true - - <key>ru</key> - <value>Командная панель 4</value> - КоманднаяПанель4РасширеннаяПодсказка 35 @@ -657,7 +643,7 @@ true Label true - false + true Left @@ -722,10 +708,6 @@ true - - <key>ru</key> - <value>Командная панель4</value> - КоманднаяПанель8РасширеннаяПодсказка 161 @@ -809,7 +791,7 @@ true Label true - false + true Left @@ -874,10 +856,6 @@ true - - <key>ru</key> - <value>Командная панель 5</value> - КоманднаяПанель5РасширеннаяПодсказка 119 @@ -957,7 +935,7 @@ true Label true - false + true Left @@ -1022,10 +1000,6 @@ true - - <key>ru</key> - <value>Командная панель5</value> - КоманднаяПанель6РасширеннаяПодсказка 132 @@ -1138,7 +1112,7 @@ true Label true - false + true Left @@ -1203,10 +1177,6 @@ true - - <key>ru</key> - <value>Командная панель5</value> - КоманднаяПанель7РасширеннаяПодсказка 148 @@ -1287,7 +1257,7 @@ true Label true - false + true Left @@ -1352,10 +1322,6 @@ true - - <key>ru</key> - <value>Командная панель4</value> - КоманднаяПанель9РасширеннаяПодсказка 174 @@ -1413,17 +1379,18 @@ true - - ru - 1. Если требуется обновить расширение следует использовать кнопку Обновить. -2. Если требуется временно отключить расширение следует снять флажок "Подключать расширение при входе". - ShowBottom ПредупреждениеПередУдалениемРасширенияБезДанныхРасширеннаяПодсказка 215 + + <key>ru</key> + <value>Если требуется... +• обновить расширение, то вместо удаления и добавления нажмите кнопку <b>Обновить</>; +• временно отключить расширение, следует снять флажок <b>Подключать расширение при входе</>.</value> + + true Label - true true Left @@ -1441,22 +1408,56 @@ Left - - ПредупреждениеПередУдалениемРасширенияБезДанныхРезервноеКопирование - 234 - - <key>ru</key> - <value>Перед удалением расширения рекомендуется + <items xsi:type="form:FormGroup"> + <name>ГруппаОтступРасширенияБезДанных</name> + <id>243</id> + <items xsi:type="form:Decoration"> + <name>ПредупреждениеПередУдалениемРасширенияБезДанныхРезервноеКопирование</name> + <id>234</id> + <title> + <key>ru</key> + <value>Перед удалением расширения рекомендуется выполнить резервное копирование информационной базы.</value> - + + true + true + + true + + + ПредупреждениеПередУдалениемРасширенияБезДанныхРезервноеКопированиеРасширеннаяПодсказка + 236 + Label + true + true + + Left + + + + ПредупреждениеПередУдалениемРасширенияБезДанныхРезервноеКопированиеКонтекстноеМеню + 235 + true + + Label + true + true + + + URLProcessing + ПредупреждениеПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки + + Left + + true true true - ПредупреждениеПередУдалениемРасширенияБезДанныхРезервноеКопированиеРасширеннаяПодсказка - 236 + ГруппаОтступРасширенияБезДанныхРасширеннаяПодсказка + 244 Label true true @@ -1464,20 +1465,15 @@ Left - - ПредупреждениеПередУдалениемРасширенияБезДанныхРезервноеКопированиеКонтекстноеМеню - 235 - true - - Label - true - true - - - URLProcessing - ПредупреждениеПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки - - Left + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto
      @@ -1512,8 +1508,10 @@ Label true true + true Left + Top @@ -1580,10 +1578,6 @@ true - - <key>ru</key> - <value>Командная панель4</value> - КоманднаяПанель12РасширеннаяПодсказка 223 @@ -1633,8 +1627,7 @@ 228 <key>ru</key> - <value>Удаляемое расширение хранит данные в информационной базе, -которые будут безвозвратно потеряны.</value> + <value>Удаляемое расширение хранит данные в информационной базе, которые будут безвозвратно потеряны.</value> true true @@ -1647,13 +1640,14 @@ 230 <key>ru</key> - <value>1. Ознакомьтесь с документацией по расширению, -которую можно получить от поставщика расширения. -2. Если требуется обновить расширение следует использовать кнопку Обновить. -3. Если требуется временно отключить расширение следует снять флажок "Подключать расширение при входе".</value> + <value>Ознакомьтесь с документацией по расширению, которую можно получить от поставщика расширения. +Если требуется... +• обновить расширение, то вместо удаления и добавления нажмите кнопку <b>Обновить</>; +• временно отключить расширение, следует снять флажок <b>Подключать расширение при входе</>.</value> + true Label - true + 64 true Left @@ -1671,22 +1665,56 @@ Left - - ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопирование - 205 - - <key>ru</key> - <value>Перед удалением расширения рекомендуется + <items xsi:type="form:FormGroup"> + <name>ГруппаОтступРасширениеСДанными</name> + <id>245</id> + <items xsi:type="form:Decoration"> + <name>ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопирование</name> + <id>205</id> + <title> + <key>ru</key> + <value>Перед удалением расширения рекомендуется выполнить резервное копирование информационной базы.</value> - + + true + true + + true + + + ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопированиеРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + + ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопированиеКонтекстноеМеню + 206 + true + + Label + true + true + + + URLProcessing + ПредупреждениеПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки + + Left + + true true true - ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопированиеРасширеннаяПодсказка - 207 + ГруппаОтступРасширениеСДаннымиРасширеннаяПодсказка + 246 Label true true @@ -1694,20 +1722,15 @@ Left - - ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопированиеКонтекстноеМеню - 206 - true - - Label - true - true - - - URLProcessing - ПредупреждениеПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки - - Left + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto
      @@ -1742,8 +1765,10 @@ Label true true + true Left + Top @@ -1810,10 +1835,6 @@ true - - <key>ru</key> - <value>Командная панель4</value> - КоманднаяПанель10РасширеннаяПодсказка 187 @@ -1863,26 +1884,24 @@ 194 <key>ru</key> - <value>Отключаемое расширение хранит данные в информационной базе, -которые станут недоступными, кроме того некоторые данные -самой программы могут стать недоступными для изменения.</value> + <value>Отключаемое расширение хранит данные в информационной базе, которые станут недоступными. +Кроме того некоторые данные самой программы могут также стать недоступными для изменения.</value> true true true - - ru - Ознакомьтесь с документацией по расширению, -которую можно получить от поставщика расширения. - ShowBottom ПредупреждениеПередОтключениемРасширенияРасширеннаяПодсказка 196 + + <key>ru</key> + <value>Ознакомьтесь с документацией по расширению, которую можно получить от поставщика расширения.</value> + Label - true + 60 true Left @@ -1894,27 +1913,60 @@ true Label + 60 true false Left - - ПредупреждениеПередОтключениемРасширенияТекстОтключить - 231 - - <key>ru</key> - <value>Отключить расширение?</value> - + + ГруппаОтступПередОтключениемРасширенияСДанными + 247 + + ПредупреждениеПередОтключениемРасширенияТекстОтключить + 231 + + <key>ru</key> + <value>Отключить расширение?</value> + + true + true + + true + + + ПредупреждениеПередОтключениемРасширенияТекстОтключитьРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + + ПредупреждениеПередОтключениемРасширенияТекстОтключитьКонтекстноеМеню + 232 + true + + Label + true + true + + Left + Top + + true true true + F7 - ПредупреждениеПередОтключениемРасширенияТекстОтключитьРасширеннаяПодсказка - 233 + ГруппаОтступПередОтключениемРасширенияСДаннымиРасширеннаяПодсказка + 248 Label true true @@ -1922,16 +1974,15 @@ Left - - ПредупреждениеПередОтключениемРасширенияТекстОтключитьКонтекстноеМеню - 232 - true - - Label - true - false - - Left + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto @@ -1998,10 +2049,6 @@ true - - <key>ru</key> - <value>Командная панель4</value> - КоманднаяПанель11РасширеннаяПодсказка 200 @@ -2048,10 +2095,6 @@ true - - <key>ru</key> - <value>Страницы</value> - СтраницыРасширеннаяПодсказка 16 @@ -2078,6 +2121,7 @@ OnCreateAtServer ПриСозданииНаСервере + CustomizeForm LockOwner true true diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl index dad4a7657..46987d1bd 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl @@ -26,6 +26,9 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +// Параметры: +// Элемент - ДекорацияФормы +// &НаКлиенте Процедура Подключаемый_НажатиеНаГиперссылку(Элемент) ИмяЭлемента = Элемент.Имя; @@ -46,7 +49,10 @@ КонецПроцедуры -&НаКлиенте +// Параметры: +// Элемент - ДекорацияФормы +// +&НаКлиенте Процедура Подключаемый_ФлажокПриИзменении(Элемент) ИмяЭлемента = Элемент.Имя; diff --git a/SSL/src/CommonForms/Расширения/Module.bsl b/SSL/src/CommonForms/Расширения/Module.bsl index 2c576b905..1fd3075de 100644 --- a/SSL/src/CommonForms/Расширения/Module.bsl +++ b/SSL/src/CommonForms/Расширения/Module.bsl @@ -727,6 +727,12 @@ КонецПроцедуры +// Параметры: +// ПомещенныеФайлы - Массив из ОписаниеПереданногоФайла +// МодульОбновлениеКонфигурацииКлиент - CommonModule.ОбновлениеКонфигурацииКлиент +// Возвращаемое значение: +// Булево +// &НаКлиенте Функция ВыбранныеФайлыСодержатИсправления(ПомещенныеФайлы, МодульОбновлениеКонфигурацииКлиент) @@ -741,6 +747,12 @@ КонецФункции +// Параметры: +// ПомещенныеФайлы - Массив из ОписаниеПереданногоФайла +// МодульОбновлениеКонфигурацииКлиент - CommonModule.ОбновлениеКонфигурацииКлиент +// Возвращаемое значение: +// Булево +// &НаКлиенте Функция ВыбранныеФайлыСодержатТолькоИсправления(ПомещенныеФайлы, МодульОбновлениеКонфигурацииКлиент) @@ -755,6 +767,11 @@ КонецФункции +// Параметры: +// ПомещенныеФайлы - Массив из ОписаниеПереданногоФайла +// Возвращаемое значение: +// Строка +// &НаКлиенте Функция ВыбранныеФайлыПоОписанию(ПомещенныеФайлы) @@ -1250,7 +1267,7 @@ ВременноеРасширение = НайтиРасширение(ИдентификаторРасширения); Если ВременноеРасширение = Неопределено Тогда ВызватьИсключение - НСтр("ru = 'Текущее расширение не найдено в базе данных, + НСтр("ru = 'Текущее расширение не существует в программе, |возможно оно было удалено в другом сеансе.'"); КонецЕсли; ДанныеОбновляемогоРасширения = ВременноеРасширение.ПолучитьДанные(); @@ -1467,4 +1484,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Form.form b/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Form.form index 08e06af74..ae05b1dd6 100644 --- a/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Form.form +++ b/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Form.form @@ -808,7 +808,6 @@ ПриСозданииНаСервере 45 - 15 LockOwner true true diff --git a/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Module.bsl b/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Module.bsl index 5ef22e32d..b5b01b2da 100644 --- a/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Module.bsl +++ b/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Module.bsl @@ -25,8 +25,8 @@ И Не ПустаяСтрока(ТекстОшибкиСервер) Тогда Элементы.ДекорацияРазделитель.Видимость = Истина; - Если Элементы.ИнструкцияКлиент.Заголовок <> НСтр("ru = 'Подробнее'") - И Элементы.ИнструкцияСервер.Заголовок <> НСтр("ru = 'Подробнее'") Тогда + Если ПустаяСтрока(ЯкорьОшибкиКлиент) + И ПустаяСтрока(ЯкорьОшибкиСервер) Тогда Элементы.ИнструкцияКлиент.Видимость = Ложь; КонецЕсли; @@ -43,11 +43,11 @@ Процедура ИнструкцияНажатие(Элемент) ЯкорьОшибки = ""; - Если СтрЗаканчиваетсяНа(Элемент.Имя, "Клиент") + Если Элемент.Имя = "ИнструкцияКлиент" И Не ПустаяСтрока(ЯкорьОшибкиКлиент) Тогда ЯкорьОшибки = ЯкорьОшибкиКлиент; - ИначеЕсли СтрЗаканчиваетсяНа(Элемент.Имя, "Сервер") + ИначеЕсли Элемент.Имя = "ИнструкцияСервер" И Не ПустаяСтрока(ЯкорьОшибкиСервер) Тогда ЯкорьОшибки = ЯкорьОшибкиСервер; @@ -64,25 +64,45 @@ &НаСервере Процедура УстановитьЭлементы(ТекстОшибки, ОшибкаНаСервере = Ложь) - Суффикс = ?(ОшибкаНаСервере, "Сервер", "Клиент"); + Если ОшибкаНаСервере Тогда + ЭлементОшибка = Элементы.ОшибкаСервер; + ЭлементИнструкция = Элементы.ИнструкцияСервер; + ЭлементПричиныТекст = Элементы.ПричиныСерверТекст; + ЭлементРешенияТекст = Элементы.РешенияСерверТекст; + ГруппаПричиныИРешения = Элементы.ВозможныеПричиныИРешенияСервер; + Иначе + ЭлементОшибка = Элементы.ОшибкаКлиент; + ЭлементИнструкция = Элементы.ИнструкцияКлиент; + ЭлементПричиныТекст = Элементы.ПричиныКлиентТекст; + ЭлементРешенияТекст = Элементы.РешенияКлиентТекст; + ГруппаПричиныИРешения = Элементы.ВозможныеПричиныИРешенияКлиент; + КонецЕсли; - Элементы["Ошибка" + Суффикс].Видимость = Не ПустаяСтрока(ТекстОшибки); + ЭлементОшибка.Видимость = Не ПустаяСтрока(ТекстОшибки); Если Не ПустаяСтрока(ТекстОшибки) Тогда - ОписаниеОшибки = ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ТекстОшибки); + ОписаниеОшибки = ЭлектроннаяПодпись.ОшибкаПоКлассификатору(ТекстОшибки); ЭтоИзвестнаяОшибка = ОписаниеОшибки <> Неопределено; КлючНазначенияИспользования = КлючНазначенияИспользования - + ?(ЭтоИзвестнаяОшибка, "ИзвестнаяОшибка", "НеизвестнаяОшибка") + Суффикс; + + ?(ЭтоИзвестнаяОшибка, "ИзвестнаяОшибка", "НеизвестнаяОшибка") + + ?(ОшибкаНаСервере, "Сервер", "Клиент"); - Элементы["ВозможныеПричиныИРешения" + Суффикс].Видимость = ЭтоИзвестнаяОшибка; + ГруппаПричиныИРешения.Видимость = ЭтоИзвестнаяОшибка; Если ЭтоИзвестнаяОшибка Тогда - Элементы["Инструкция" + Суффикс].Заголовок = НСтр("ru = 'Подробнее'"); - Элементы["Причины" + Суффикс + "Текст"].Заголовок = ОписаниеОшибки.Причина; - Элементы["Решения" + Суффикс + "Текст"].Заголовок = ОписаниеОшибки.Решение; - - ЭтотОбъект["ЯкорьОшибки" + Суффикс] = ОписаниеОшибки.Ссылка; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + ЭлементИнструкция.Имя, "Заголовок", НСтр("ru = 'Подробнее'")); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + ЭлементПричиныТекст.Имя, "Заголовок", ОписаниеОшибки.Причина); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + ЭлементРешенияТекст.Имя, "Заголовок", ОписаниеОшибки.Решение); + + Если ОшибкаНаСервере Тогда + ЯкорьОшибкиСервер = ОписаниеОшибки.Ссылка; + Иначе + ЯкорьОшибкиКлиент = ОписаниеОшибки.Ссылка; + КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl index cac237471..27ca58112 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl @@ -190,43 +190,65 @@ ЗначенияСвойств, ДоступныеНаборыСвойств, Истина); ПроверятьПрава = Не Пользователи.ЭтоПолноправныйПользователь() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом"); + Если ПроверятьПрава Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - ПроверяемыеСвойства = Таблица.ВыгрузитьКолонку("Свойство"); - РазрешенныеСвойства = МодульУправлениеДоступомСлужебный.РазрешенныеЗначенияДляДинамическогоСписка( - ПроверяемаяТаблица, - ЗначениеДоступа, - ПроверяемыеСвойства, , Истина); + УниверсальноеОграничение = МодульУправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально(); + Если Не УниверсальноеОграничение Тогда + ПроверяемыеСвойства = Таблица.ВыгрузитьКолонку("Свойство"); + РазрешенныеСвойства = МодульУправлениеДоступомСлужебный.РазрешенныеЗначенияДляДинамическогоСписка( + ПроверяемаяТаблица, + ЗначениеДоступа, + ПроверяемыеСвойства, , Истина); + КонецЕсли; КонецЕсли; Для Каждого Строка Из Таблица Цикл - ДоступноДляИзменения = Истина; - Если ПроверятьПрава Тогда - // Проверка на чтение свойства. - Если РазрешенныеСвойства <> Неопределено И РазрешенныеСвойства.Найти(Строка.Свойство) = Неопределено Тогда - Продолжить; - КонецЕсли; - - // Проверка на запись свойства. - НачатьТранзакцию(); - Попытка + Если Не ПроверятьПрава Тогда + ДоступноДляИзменения = Истина; + Иначе + Если УниверсальноеОграничение Тогда Набор = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); Набор.Отбор.Объект.Установить(Параметры.Ссылка); Набор.Отбор.Свойство.Установить(Строка.Свойство); - Запись = Набор.Добавить(); Запись.Свойство = Строка.Свойство; Запись.Объект = Параметры.Ссылка; - Набор.ОбменДанными.Загрузка = Истина; - Набор.Записать(Истина); - - ОтменитьТранзакцию(); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - ОтменитьТранзакцию(); + ДоступноДляИзменения = МодульУправлениеДоступом.ИзменениеРазрешено(Набор); + Если Не ДоступноДляИзменения + И Не МодульУправлениеДоступом.ЧтениеРазрешено(Набор) Тогда + + Продолжить; + КонецЕсли; + Иначе ДоступноДляИзменения = Ложь; - КонецПопытки; + // Проверка на чтение свойства. + Если РазрешенныеСвойства <> Неопределено И РазрешенныеСвойства.Найти(Строка.Свойство) = Неопределено Тогда + Продолжить; + КонецЕсли; + + // Проверка на запись свойства. + НачатьТранзакцию(); + Попытка + Набор = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); + Набор.Отбор.Объект.Установить(Параметры.Ссылка); + Набор.Отбор.Свойство.Установить(Строка.Свойство); + + Запись = Набор.Добавить(); + Запись.Свойство = Строка.Свойство; + Запись.Объект = Параметры.Ссылка; + Набор.ОбменДанными.Загрузка = Истина; + Набор.Записать(Истина); + ДоступноДляИзменения = Истина; + + ОтменитьТранзакцию(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ОтменитьТранзакцию(); + КонецПопытки; + КонецЕсли; КонецЕсли; НоваяСтрока = ТаблицаЗначенийСвойств.Добавить(); diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl index b6067b554..23de51919 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl @@ -290,7 +290,7 @@ КонецФункции // Возвращаемое значение: -// Массив из ОбластьЯчеекТабличногоДокумента - +// Массив из ОбластьЯчеекТабличногоДокумента // &НаКлиенте Функция СписокОбластейДляИзмененияШрифта() diff --git a/SSL/src/CommonForms/РезультатПроверки/Form.form b/SSL/src/CommonForms/РезультатПроверки/Form.form index b78e0edf8..ced37a3b0 100644 --- a/SSL/src/CommonForms/РезультатПроверки/Form.form +++ b/SSL/src/CommonForms/РезультатПроверки/Form.form @@ -67,6 +67,7 @@ Left true + 5 true true true @@ -114,7 +115,7 @@ Left - Bottom + Top true ФормаКоманднаяПанель @@ -122,10 +123,6 @@ ФормаЗакрыть 16 - - <key>ru</key> - <value>ОК</value> - true true @@ -149,7 +146,7 @@ UserCmds Auto - Center + Left OnCreateAtServer diff --git a/SSL/src/CommonForms/СвязанныеДокументы/Form.form b/SSL/src/CommonForms/СвязанныеДокументы/Form.form index dc5e31026..653a1bc1f 100644 --- a/SSL/src/CommonForms/СвязанныеДокументы/Form.form +++ b/SSL/src/CommonForms/СвязанныеДокументы/Form.form @@ -1,5 +1,5 @@ - + <key>ru</key> <value>Связанные документы</value> @@ -142,6 +142,213 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> + <items xsi:type="form:FormGroup"> + <name>Поиск</name> + <id>31</id> + <items xsi:type="form:Button"> + <name>ФормаНайти</name> + <id>33</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаНайтиРасширеннаяПодсказка</name> + <id>34</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Item.ТаблицаОтчета.StandardCommand.Find</commandName> + <buttonImportance>Normal</buttonImportance> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> + </items> + <items xsi:type="form:Button"> + <name>ФормаНайтиСледующий</name> + <id>35</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаНайтиСледующийРасширеннаяПодсказка</name> + <id>36</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Item.ТаблицаОтчета.StandardCommand.FindNext</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Picture</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Поиск</value> + + + ПоискРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + Compact + + + + ИзменениеСостояния + 21 + + ИзменениеСостоянияДокумента + 29 + + Провести + 25 + true + true + + true + + + ПровестиРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.Command.Провести + Normal + Auto + true + true + UserCmds + Auto + + + ОтменитьПроведение + 27 + true + true + + true + + + ОтменитьПроведениеРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Form.Command.ОтменитьПроведение + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Изменение состояния документа</value> + + + ИзменениеСостоянияДокументаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + Compact + + + + ИзменитьПометкуУдаления + 23 + true + true + + true + + + ИзменитьПометкуУдаленияРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Form.Command.ИзменитьПометкуУдаления + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Изменение состояния</value> + + + ИзменениеСостоянияРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + Left true @@ -259,7 +466,7 @@ - ОбъектСсылка + ОсновнойОбъект 2 DocumentRef @@ -460,6 +667,84 @@ DontUse Auto + + Провести + + <key>ru</key> + <value>Провести</value> + + 3 + + ru + Провести + + + true + + + StdPicture.Post + + + + Провести + + + Text + Auto + Auto + + + ОтменитьПроведение + + <key>ru</key> + <value>Отменить проведение</value> + + 4 + + ru + Отменить проведение + + + true + + + StdPicture.UndoPosting + + + + ОтменитьПроведение + + + Picture + Auto + Auto + + + ИзменитьПометкуУдаления + + <key>ru</key> + <value>Пометить на удаление / Снять пометку</value> + + 5 + + ru + Пометить на удаление / Снять пометку + + + true + + + StdPicture.MarkToDelete + + + + ИзменитьПометкуУдаления + + + Picture + Auto + Auto + ОбъектОтбора diff --git a/SSL/src/CommonForms/СвязанныеДокументы/Module.bsl b/SSL/src/CommonForms/СвязанныеДокументы/Module.bsl index 71895899f..ff523e81a 100644 --- a/SSL/src/CommonForms/СвязанныеДокументы/Module.bsl +++ b/SSL/src/CommonForms/СвязанныеДокументы/Module.bsl @@ -13,9 +13,10 @@ ОпределитьНастройки(); - Параметры.Свойство("ОбъектОтбора", ОбъектСсылка); - ИсходныйОбъект = ОбъектСсылка; - Если ЗначениеЗаполнено(ОбъектСсылка) Тогда + Параметры.Свойство("ОбъектОтбора", ОсновнойОбъект); + ИсходныйОбъект = ОсновнойОбъект; + + Если ЗначениеЗаполнено(ОсновнойОбъект) Тогда ОбновитьДеревоСтруктурыПодчиненности(); КонецЕсли; @@ -37,16 +38,49 @@ ТекущийОбъект = Элементы.ТаблицаОтчета.ТекущаяОбласть.Расшифровка; - Если ЗначениеЗаполнено(ТекущийОбъект) Тогда - ОбъектСсылка = ТекущийОбъект; - Иначе + Если Не ЗначениеЗаполнено(ТекущийОбъект) Тогда Возврат; КонецЕсли; + ОсновнойОбъект = ТекущийОбъект; + ВывестиСтруктуруПодчиненности(); КонецПроцедуры +&НаКлиенте +Процедура ИзменитьПометкуУдаления(Команда) + + ВыбранныеЭлементы = ВыбранныеЭлементы(); + + Если ВыбранныеЭлементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Статистика = СтатистикаПоВыбраннымЭлементам(ВыбранныеЭлементы); + + Сценарий = СценарийИзмененияПометкиУдаления(ВыбранныеЭлементы, Статистика); + Сценарий.Вставить("ВыбранныеЭлементы", ВыбранныеЭлементы); + + Обработчик = Новый ОписаниеОповещения("ВыполнитьСценарийИзмененияПометкиУдаления", ЭтотОбъект, Сценарий); + ПоказатьВопрос(Обработчик, Сценарий.Вопрос, РежимДиалогаВопрос.ДаНет); + +КонецПроцедуры + +&НаКлиенте +Процедура Провести(Команда) + + ИзменитьПроведениеДокументов(РежимЗаписиДокумента.Проведение); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьПроведение(Команда) + + ИзменитьПроведениеДокументов(РежимЗаписиДокумента.ОтменаПроведения); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -62,9 +96,9 @@ Макет = ПолучитьОбщийМакет("СтруктураПодчиненности"); - ВывестиРодительскиеЭлементыДерева(ДеревоРодительскиеОбъекты.ПолучитьЭлементы(),Макет,1); + ВывестиРодительскиеЭлементыДерева(ДеревоРодительскиеОбъекты.ПолучитьЭлементы(), Макет); ВывестиТекущийОбъект(Макет); - ВывестиПодчиненныеЭлементыДерева(ДеревоПодчиненныеОбъекты.ПолучитьЭлементы(),Макет,1) + ВывестиПодчиненныеЭлементыДерева(ДеревоПодчиненныеОбъекты.ПолучитьЭлементы(), Макет); КонецПроцедуры @@ -75,40 +109,40 @@ // которые выводятся в табличный документ. // Макет - МакетТабличногоДокумента - макет, на основании которого // происходит вывод в табличный документ. -// УровеньРекурсии - Число - уровень рекурсии процедуры. +// УровниРекурсии - Число - уровень рекурсии процедуры. // &НаСервере -Процедура ВывестиРодительскиеЭлементыДерева(СтрокиДерева,Макет,УровеньРекурсии) +Процедура ВывестиРодительскиеЭлементыДерева(СтрокиДерева, Макет, УровниРекурсии = 1) Счетчик = СтрокиДерева.Количество(); - Пока Счетчик >0 Цикл + Пока Счетчик > 0 Цикл + + ТекущаяСтрокаДерева = СтрокиДерева.Получить(Счетчик - 1); - ТекущаяСтрокаДерева = СтрокиДерева.Получить(Счетчик -1); ПодчиненныеЭлементыСтрокиДерева = ТекущаяСтрокаДерева.ПолучитьЭлементы(); - ВывестиРодительскиеЭлементыДерева(ПодчиненныеЭлементыСтрокиДерева,Макет,УровеньРекурсии + 1); + ВывестиРодительскиеЭлементыДерева(ПодчиненныеЭлементыСтрокиДерева, Макет, УровниРекурсии + 1); - Для инд=1 По УровеньРекурсии Цикл + Для Уровень = 1 По УровниРекурсии Цикл - Если инд = УровеньРекурсии Тогда + Если Уровень = УровниРекурсии Тогда - Если СтрокиДерева.Индекс(ТекущаяСтрокаДерева) < (СтрокиДерева.Количество()-1) Тогда + Если СтрокиДерева.Индекс(ТекущаяСтрокаДерева) < (СтрокиДерева.Количество() - 1) Тогда Область = Макет.ПолучитьОбласть("КоннекторВерхПравоНиз"); - Иначе + Иначе Область = Макет.ПолучитьОбласть("КоннекторПравоНиз"); КонецЕсли; Иначе - Если НеобходимостьВыводаВертикальногоКоннектора(УровеньРекурсии - инд + 1,ТекущаяСтрокаДерева,Ложь) Тогда + Если ВыводитьВертикальныйКоннектор(УровниРекурсии - Уровень + 1, ТекущаяСтрокаДерева, Ложь) Тогда Область = Макет.ПолучитьОбласть("КоннекторВерхНиз"); Иначе Область = Макет.ПолучитьОбласть("Отступ"); - КонецЕсли; КонецЕсли; - Если инд = 1 Тогда + Если Уровень = 1 Тогда ТаблицаОтчета.Вывести(Область); Иначе ТаблицаОтчета.Присоединить(Область); @@ -116,8 +150,8 @@ КонецЦикла; - ВывестиПредставлениеИКартинку(ТекущаяСтрокаДерева,Макет,Ложь,Ложь); - + ВывестиПредставлениеИКартинку(ТекущаяСтрокаДерева, Макет, Ложь, Ложь); + Счетчик = Счетчик - 1; КонецЦикла; @@ -127,29 +161,34 @@ // Выводит в табличный документ картинку, соответствующую статусу объекта и его представление. // &НаСервере -Процедура ВывестиПредставлениеИКартинку(СтрокаДерева,Макет, ЭтоТекущийОбъект = Ложь, ЭтоПодчиненный = Неопределено) +Процедура ВывестиПредставлениеИКартинку(СтрокаДерева, Макет, ЭтоТекущийОбъект = Ложь, ЭтоПодчиненный = Неопределено) МетаданныеОбъекта = СтрокаДерева.Ссылка.Метаданные(); ЭтоДокумент = ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта); + ЕстьРодителиСуммарно = ДеревоРодительскиеОбъекты.ПолучитьЭлементы().Количество() > 0; + ЕстьПодчиненныеСуммарно = ДеревоПодчиненныеОбъекты.ПолучитьЭлементы().Количество() > 0; + ЕстьПодчиненные = ТипЗнч(СтрокаДерева) = Тип("ДанныеФормыЭлементДерева") + И СтрокаДерева.ПолучитьЭлементы().Количество() > 0; + // Вывод картинки Если СтрокаДерева.Проведен Тогда Если ЭтоТекущийОбъект Тогда - Если ДеревоПодчиненныеОбъекты.ПолучитьЭлементы().Количество() И ДеревоРодительскиеОбъекты.ПолучитьЭлементы().Количество() Тогда + Если ЕстьПодчиненныеСуммарно И ЕстьРодителиСуммарно Тогда ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведенКоннекторВерхНиз"); - ИначеЕсли ДеревоПодчиненныеОбъекты.ПолучитьЭлементы().Количество() Тогда + ИначеЕсли ЕстьПодчиненныеСуммарно Тогда ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведенКоннекторНиз"); Иначе ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведенКоннекторВерх"); КонецЕсли; ИначеЕсли ЭтоПодчиненный = Истина Тогда - Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда + Если ЕстьПодчиненные Тогда ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведенКоннекторЛевоНиз"); Иначе ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведен"); КонецЕсли; Иначе - Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда + Если ЕстьПодчиненные Тогда ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведенКоннекторЛевоВерх"); Иначе ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведен"); @@ -157,63 +196,64 @@ КонецЕсли; ИначеЕсли СтрокаДерева.ПометкаУдаления Тогда Если ЭтоТекущийОбъект Тогда - Если ДеревоПодчиненныеОбъекты.ПолучитьЭлементы().Количество() И ДеревоРодительскиеОбъекты.ПолучитьЭлементы().Количество() Тогда - ИмяОбласти = ?( ЭтоДокумент, "ДокументПомеченНаУдалениеКоннекторВерхНиз", "СправочникПВХПомеченНаУдалениеКоннекторВерхНиз"); + Если ЕстьПодчиненныеСуммарно И ЕстьРодителиСуммарно Тогда + ИмяОбласти = ?(ЭтоДокумент, "ДокументПомеченНаУдалениеКоннекторВерхНиз", "СправочникПВХПомеченНаУдалениеКоннекторВерхНиз"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); - ИначеЕсли ДеревоПодчиненныеОбъекты.ПолучитьЭлементы().Количество() Тогда - ИмяОбласти = ?( ЭтоДокумент, "ДокументПомеченНаУдалениеКоннекторНиз", "СправочникПВХПомеченНаУдалениеКоннекторНиз"); + ИначеЕсли ЕстьПодчиненныеСуммарно Тогда + ИмяОбласти = ?(ЭтоДокумент, "ДокументПомеченНаУдалениеКоннекторНиз", "СправочникПВХПомеченНаУдалениеКоннекторНиз"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); Иначе - ИмяОбласти = ?( ЭтоДокумент, "ДокументПомеченНаУдалениеКоннекторВерх", "СправочникПВХПомеченНаУдалениеКоннекторВерх"); + ИмяОбласти = ?(ЭтоДокумент, "ДокументПомеченНаУдалениеКоннекторВерх", "СправочникПВХПомеченНаУдалениеКоннекторВерх"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); КонецЕсли; ИначеЕсли ЭтоПодчиненный = Истина Тогда - Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда - ИмяОбласти = ?( ЭтоДокумент, "ДокументПомеченНаУдалениеКоннекторЛевоНиз", "СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз"); + Если ЕстьПодчиненные Тогда + ИмяОбласти = ?(ЭтоДокумент, "ДокументПомеченНаУдалениеКоннекторЛевоНиз", "СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); Иначе - ИмяОбласти = ?( ЭтоДокумент, "ДокументПомеченНаУдаление", "СправочникПВХПомеченНаУдалениеКоннекторЛево"); + ИмяОбласти = ?(ЭтоДокумент, "ДокументПомеченНаУдаление", "СправочникПВХПомеченНаУдалениеКоннекторЛево"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); КонецЕсли; Иначе - Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда - ИмяОбласти = ?( ЭтоДокумент, "ДокументПомеченНаУдалениеКоннекторЛевоВерх", "СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх"); + Если ЕстьПодчиненные Тогда + ИмяОбласти = ?(ЭтоДокумент, "ДокументПомеченНаУдалениеКоннекторЛевоВерх", "СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); Иначе - ИмяОбласти = ?( ЭтоДокумент, "ДокументПомеченНаУдаление", "СправочникПВХПомеченНаУдалениеКоннекторЛево"); + ИмяОбласти = ?(ЭтоДокумент, "ДокументПомеченНаУдаление", "СправочникПВХПомеченНаУдалениеКоннекторЛево"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); КонецЕсли; КонецЕсли; Иначе Если ЭтоТекущийОбъект Тогда - Если ДеревоПодчиненныеОбъекты.ПолучитьЭлементы().Количество() И ДеревоРодительскиеОбъекты.ПолучитьЭлементы().Количество() Тогда - ИмяОбласти = ?( ЭтоДокумент, "ДокументЗаписанКоннекторВерхНиз", "СправочникПВХКоннекторВерхНиз"); + Если ЕстьПодчиненныеСуммарно И ЕстьРодителиСуммарно Тогда + ИмяОбласти = ?(ЭтоДокумент, "ДокументЗаписанКоннекторВерхНиз", "СправочникПВХКоннекторВерхНиз"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); - ИначеЕсли ДеревоПодчиненныеОбъекты.ПолучитьЭлементы().Количество() Тогда - ИмяОбласти = ?( ЭтоДокумент, "ДокументЗаписанКоннекторНиз", "СправочникПВХКоннекторНиз"); + ИначеЕсли ЕстьПодчиненныеСуммарно Тогда + ИмяОбласти = ?(ЭтоДокумент, "ДокументЗаписанКоннекторНиз", "СправочникПВХКоннекторНиз"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); Иначе - ИмяОбласти = ?( ЭтоДокумент, "ДокументЗаписанКоннекторВерх", "СправочникПВХКоннекторВерх"); + ИмяОбласти = ?(ЭтоДокумент, "ДокументЗаписанКоннекторВерх", "СправочникПВХКоннекторВерх"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); КонецЕсли; ИначеЕсли ЭтоПодчиненный = Истина Тогда - Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда - ИмяОбласти = ?( ЭтоДокумент, "ДокументЗаписанКоннекторЛевоНиз", "СправочникПВХКоннекторЛевоНиз"); + Если ЕстьПодчиненные Тогда + ИмяОбласти = ?(ЭтоДокумент, "ДокументЗаписанКоннекторЛевоНиз", "СправочникПВХКоннекторЛевоНиз"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); Иначе - ИмяОбласти = ?( ЭтоДокумент, "ДокументЗаписан", "СправочникПВХКоннекторЛево"); + ИмяОбласти = ?(ЭтоДокумент, "ДокументЗаписан", "СправочникПВХКоннекторЛево"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); КонецЕсли; Иначе - Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда - ИмяОбласти = ?( ЭтоДокумент, "ДокументЗаписанКоннекторЛевоВерх", "СправочникПВХКоннекторЛевоВерх"); + Если ЕстьПодчиненные Тогда + ИмяОбласти = ?(ЭтоДокумент, "ДокументЗаписанКоннекторЛевоВерх", "СправочникПВХКоннекторЛевоВерх"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); Иначе - ИмяОбласти = ?( ЭтоДокумент, "ДокументЗаписан", "СправочникПВХКоннекторЛево"); + ИмяОбласти = ?(ЭтоДокумент, "ДокументЗаписан", "СправочникПВХКоннекторЛево"); ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбласти); КонецЕсли; КонецЕсли; КонецЕсли; + Если ЭтоТекущийОбъект Тогда ТаблицаОтчета.Вывести(ОбластьКартинка) Иначе @@ -221,7 +261,7 @@ КонецЕсли; // Вывод объекта - ОбластьОбъект = Макет.ПолучитьОбласть(?(ЭтоТекущийОбъект,"ТекущийОбъект","Объект")); + ОбластьОбъект = Макет.ПолучитьОбласть(?(ЭтоТекущийОбъект, "ТекущийОбъект", "Объект")); ОбластьОбъект.Параметры.ПредставлениеОбъекта = СтрокаДерева.Представление; ОбластьОбъект.Параметры.Объект = СтрокаДерева.Ссылка; ТаблицаОтчета.Присоединить(ОбластьОбъект); @@ -239,11 +279,11 @@ // Булево - необходимость вывода в области вертикального коннектора. // &НаСервере -Функция НеобходимостьВыводаВертикальногоКоннектора(УровеньВверх,СтрокаДерева,ИщемСредиПодчиненных = Истина) +Функция ВыводитьВертикальныйКоннектор(УровеньВверх,СтрокаДерева,ИщемСредиПодчиненных = Истина) ТекущаяСтрока = СтрокаДерева; - Для инд=1 По УровеньВверх Цикл + Для инд = 1 По УровеньВверх Цикл ТекущаяСтрока = ТекущаяСтрока.ПолучитьРодителя(); Если инд = УровеньВверх Тогда @@ -272,10 +312,11 @@ // // Параметры: // Макет - МакетТабличногоДокумента - макет, на основании которого формируется табличный документ. +// &НаСервере Процедура ВывестиТекущийОбъект(Макет) - Выборка = ПолучитьВыборкуПоРеквизитамОбъекта(ОбъектСсылка); + Выборка = ПолучитьВыборкуПоРеквизитамОбъекта(ОсновнойОбъект); Если Выборка.Следующий() Тогда ПереопределяемоеПредставление = ПредставлениеОбъектаДляВывода(Выборка); @@ -310,7 +351,10 @@ Если ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) Тогда Если (Выборка.СуммаДокумента <> 0) И (Выборка.СуммаДокумента <> NULL) Тогда - ПредставлениеОбъекта = ПредставлениеОбъекта + " " + НСтр("ru = 'на сумму'") + " " + Выборка.СуммаДокумента + " " + Выборка.Валюта; + ПредставлениеОбъекта = ПредставлениеОбъекта + + " " + НСтр("ru = 'на сумму'") + + " " + Выборка.СуммаДокумента + + " " + Выборка.Валюта; КонецЕсли; Иначе ПредставлениеОбъекта = ПредставлениеОбъекта + " (" + МетаданныеОбъекта.ПредставлениеОбъекта + ")"; @@ -327,10 +371,10 @@ // которые выводятся в табличный документ. // Макет - МакетТабличногоДокумента - макет, на основании которого // происходит вывод в табличный документ. -// УровеньРекурсии - Число - уровень рекурсии процедуры. +// УровниРекурсии - Число - уровень рекурсии процедуры. // &НаСервере -Процедура ВывестиПодчиненныеЭлементыДерева(СтрокиДерева,Макет,УровеньРекурсии) +Процедура ВывестиПодчиненныеЭлементыДерева(СтрокиДерева, Макет, УровниРекурсии = 1) Для каждого СтрокаДерева Из СтрокиДерева Цикл @@ -338,39 +382,39 @@ ПодчиненныеЭлементыДерева = СтрокаДерева.ПолучитьЭлементы(); // Вывод коннекторов - Для инд = 1 По УровеньРекурсии Цикл - Если УровеньРекурсии > инд Тогда + Для Уровень = 1 По УровниРекурсии Цикл + + Если УровниРекурсии > Уровень Тогда - Если НеобходимостьВыводаВертикальногоКоннектора(УровеньРекурсии - инд + 1,СтрокаДерева) Тогда + Если ВыводитьВертикальныйКоннектор(УровниРекурсии - Уровень + 1,СтрокаДерева) Тогда Область = Макет.ПолучитьОбласть("КоннекторВерхНиз"); Иначе Область = Макет.ПолучитьОбласть("Отступ"); - КонецЕсли; + Иначе - Если СтрокиДерева.Количество() > 1 И (СтрокиДерева.Индекс(СтрокаДерева)<> (СтрокиДерева.Количество()-1)) Тогда + Если СтрокиДерева.Количество() > 1 И (СтрокиДерева.Индекс(СтрокаДерева) <> (СтрокиДерева.Количество() - 1)) Тогда Область = Макет.ПолучитьОбласть("КоннекторВерхПравоНиз"); Иначе Область = Макет.ПолучитьОбласть("КоннекторВерхПраво"); КонецЕсли; - КонецЕсли; + КонецЕсли; - Область.Параметры.Документ = ?(ЭтоИсходныйОбъект,Неопределено,СтрокаДерева.Ссылка); + Область.Параметры.Документ = ?(ЭтоИсходныйОбъект, Неопределено, СтрокаДерева.Ссылка); - Если инд = 1 Тогда + Если Уровень = 1 Тогда ТаблицаОтчета.Вывести(Область); Иначе ТаблицаОтчета.Присоединить(Область); КонецЕсли; - КонецЦикла; + КонецЦикла; - ВывестиПредставлениеИКартинку(СтрокаДерева,Макет,Ложь,Истина); + ВывестиПредставлениеИКартинку(СтрокаДерева, Макет, Ложь, Истина); - // Вывод подчиненных элементов дерева. - ВывестиПодчиненныеЭлементыДерева(ПодчиненныеЭлементыДерева,Макет,УровеньРекурсии + 1); + ВывестиПодчиненныеЭлементыДерева(ПодчиненныеЭлементыДерева, Макет, УровниРекурсии + 1); КонецЦикла; @@ -390,14 +434,20 @@ &НаСервере Процедура ОбновитьДеревоСтруктурыПодчиненности() - Если ОсновнойДокументДоступен() Тогда - СформироватьДеревьяДокументов(); - ВывестиТабличныйДокумент(); - Иначе - ОбщегоНазначения.СообщитьПользователю( - НСтр("ru = 'Документ, для которого сформирован отчет о структуре подчиненности, стал недоступен.'")); + Если Не ОсновнойДокументДоступен() Тогда + + ТекстСообщения = НСтр("ru = 'Документ, для которого сформирован отчет о структуре подчиненности, стал недоступен.'"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); + Возврат; + КонецЕсли; - + + Заголовок = Метаданные.ОбщиеФормы.СвязанныеДокументы.Представление() + + ": " + ОбщегоНазначения.ПредметСтрокой(ОсновнойОбъект); + + СформироватьДеревьяДокументов(); + ВывестиТабличныйДокумент(); + КонецПроцедуры &НаСервере @@ -405,10 +455,12 @@ ДеревоРодительскиеОбъекты.ПолучитьЭлементы().Очистить(); ДеревоПодчиненныеОбъекты.ПолучитьЭлементы().Очистить(); - - ВывестиРодительскиеОбъекты(ОбъектСсылка, ДеревоРодительскиеОбъекты); - ВывестиПодчиненныеОбъекты(ОбъектСсылка, ДеревоПодчиненныеОбъекты); - + + ВыведенныеОбъекты = Новый Соответствие; + + ВывестиРодительскиеОбъекты(ОсновнойОбъект, ДеревоРодительскиеОбъекты, ВыведенныеОбъекты); + ВывестиПодчиненныеОбъекты(ОсновнойОбъект, ДеревоПодчиненныеОбъекты, ВыведенныеОбъекты); + КонецПроцедуры &НаСервере @@ -418,11 +470,11 @@ "ВЫБРАТЬ РАЗРЕШЕННЫЕ | 1 |ИЗ - | " + ОбъектСсылка.Метаданные().ПолноеИмя() + " КАК Таб + | " + ОсновнойОбъект.Метаданные().ПолноеИмя() + " КАК Таб |ГДЕ | Таб.Ссылка = &ТекущийОбъект |"); - Запрос.УстановитьПараметр("ТекущийОбъект", ОбъектСсылка); + Запрос.УстановитьПараметр("ТекущийОбъект", ОсновнойОбъект); Возврат Не Запрос.Выполнить().Пустой(); КонецФункции @@ -430,16 +482,18 @@ // Получает выборку по реквизитам документа. // // Параметры: -// ОбъектСсылка - ДокументСсылка, СправочникСсылка, ПВХСсылка - ссылка на объект, значения реквизитов которого -// получаются запросом. +// ТекущийОбъект - ДокументСсылка +// - СправочникСсылка +// - ПВХСсылка - ссылка на объект, значения реквизитов которого +// получаются запросом. // // Возвращаемое значение: -// ВыборкаИзРезультатаЗапроса - +// ВыборкаИзРезультатаЗапроса // &НаСервере -Функция ПолучитьВыборкуПоРеквизитамОбъекта(ОбъектСсылка) +Функция ПолучитьВыборкуПоРеквизитамОбъекта(ТекущийОбъект) - МетаданныеОбъекта = ОбъектСсылка.Метаданные(); + МетаданныеОбъекта = ТекущийОбъект.Метаданные(); ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -473,17 +527,16 @@ ДополнитьТекстЗапросаПоРеквизитамОбъекта(ТекстЗапроса, МассивДопРеквизитов); Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Ссылка", ОбъектСсылка); + Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект); Возврат Запрос.Выполнить().Выбрать(); КонецФункции &НаСервере -Процедура ВывестиРодительскиеОбъекты(ТекущийОбъект, ДеревоРодитель) - - СтрокиДерева = ДеревоРодитель.ПолучитьЭлементы(); +Процедура ВывестиРодительскиеОбъекты(ТекущийОбъект, ДеревоРодитель, ВыведенныеОбъекты) + МетаданныеОбъекта = ТекущийОбъект.Метаданные(); - СписокРеквизитов = Новый СписокЗначений; + СписокРеквизитов = Новый СписокЗначений; Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл @@ -497,16 +550,18 @@ Если МетаданныеРеквизита = Неопределено Тогда Продолжить; КонецЕсли; + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеРеквизита) Или Не ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда Продолжить; КонецЕсли; + Если Не Метаданные.Документы.Содержит(МетаданныеРеквизита) И Не Метаданные.Справочники.Содержит(МетаданныеРеквизита) И Не Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеРеквизита) Тогда Продолжить; КонецЕсли; - + ЗначениеРеквизита = ТекущийОбъект[Реквизит.Имя]; Если ЗначениеЗаполнено(ЗначениеРеквизита) И ТипЗнч(ЗначениеРеквизита) = ТекущийТип @@ -516,8 +571,8 @@ ЯвляетсяДокументом = ОбщегоНазначения.ЭтоДокумент(МетаданныеРеквизита); Если ЯвляетсяДокументом Тогда - СписокРеквизитов.Добавить(ЗначениеРеквизита, - Формат(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеРеквизита, "Дата", Истина), "ДЛФ=DT")); + ДатаДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеРеквизита, "Дата", Истина); + СписокРеквизитов.Добавить(ЗначениеРеквизита, Формат(ДатаДокумента, "ДЛФ=DT")); Иначе СписокРеквизитов.Добавить(ЗначениеРеквизита, Дата(1,1,1)); КонецЕсли; @@ -526,7 +581,7 @@ КонецЦикла; КонецЦикла; - + Для Каждого ТЧ Из МетаданныеОбъекта.ТабличныеЧасти Цикл ИменаРеквизитов = ""; @@ -543,6 +598,7 @@ Если МетаданныеРеквизита = Неопределено Тогда Продолжить; КонецЕсли; + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеРеквизита) Или Не ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда Продолжить; @@ -556,25 +612,27 @@ ИменаРеквизитов = ИменаРеквизитов + ?(ИменаРеквизитов = "", "", ", ") + Реквизит.Имя; Прервать; - + КонецЦикла; КонецЦикла; - + СодержимоеТЧ.Свернуть(ИменаРеквизитов); Для Каждого КолонкаТЧ Из СодержимоеТЧ.Колонки Цикл - + Для Каждого СтрокаТЧ Из СодержимоеТЧ Цикл - + ЗначениеРеквизита = СтрокаТЧ[КолонкаТЧ.Имя]; МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(ЗначениеРеквизита)); Если МетаданныеЗначения = Неопределено Тогда Продолжить; КонецЕсли; + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеЗначения) Или Не ПравоДоступа("Чтение", МетаданныеЗначения) Тогда Продолжить; КонецЕсли; + Если ЗначениеРеквизита = ТекущийОбъект Или СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) <> Неопределено Тогда Продолжить; @@ -587,16 +645,16 @@ КонецЕсли; Если ЯвляетсяДокументом Тогда - СписокРеквизитов.Добавить(ЗначениеРеквизита, - Формат(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеРеквизита, "Дата", Истина), "ДЛФ=DT")); + ДатаДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеРеквизита, "Дата", Истина); + СписокРеквизитов.Добавить(ЗначениеРеквизита, Формат(ДатаДокумента, "ДЛФ=DT")); Иначе - СписокРеквизитов.Добавить(ЗначениеРеквизита, Дата(1,1,1)); + СписокРеквизитов.Добавить(ЗначениеРеквизита, Дата(1, 1, 1)); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; - + СписокРеквизитов.СортироватьПоПредставлению(); Для каждого ЭлементСписка Из СписокРеквизитов Цикл @@ -604,9 +662,9 @@ Выборка = ПолучитьВыборкуПоРеквизитамОбъекта(ЭлементСписка.Значение); Если Выборка.Следующий() Тогда - СтрокаДерева = ДобавитьСтрокуВДерево(СтрокиДерева, Выборка); - Если НЕ ДобавляемыйОбъектИмеетсяСредиРодителей(ДеревоРодитель, ЭлементСписка.Значение) Тогда - ВывестиРодительскиеОбъекты(ЭлементСписка.Значение, СтрокаДерева); + НоваяСтрока = ДобавитьСтрокуВДерево(ДеревоРодитель, Выборка, ВыведенныеОбъекты); + Если Не ДобавляемыйОбъектИмеетсяСредиРодителей(ДеревоРодитель, ЭлементСписка.Значение) Тогда + ВывестиРодительскиеОбъекты(ЭлементСписка.Значение, НоваяСтрока, ВыведенныеОбъекты); КонецЕсли; КонецЕсли; @@ -617,7 +675,8 @@ // Определяет наличие документа среди родителей строки дерева, которая возможно будет добавлена. // // Параметры: -// СтрокаРодитель - ДанныеФормыДерево, ДанныеФормыЭлементДерева - родитель, для +// СтрокаРодитель - ДанныеФормыДерево +// - ДанныеФормыЭлементДерева - родитель, для // которого предполагается добавить строку дерева. // ИскомыйОбъект - Ссылка - ссылка на объект метаданных, на наличие которого выполняется проверка. // @@ -627,7 +686,7 @@ &НаСервере Функция ДобавляемыйОбъектИмеетсяСредиРодителей(СтрокаРодитель, ИскомыйОбъект) - Если ИскомыйОбъект = ОбъектСсылка Тогда + Если ИскомыйОбъект = ОсновнойОбъект Тогда Возврат Истина; КонецЕсли; @@ -720,8 +779,9 @@ // Возвращает ссылки на связанные объекты. // // Возвращаемое значение: -// ТаблицаЗначений - где: -// - Ссылка - СправочникСсылка, ДокументСсылка - +// ТаблицаЗначений: +// - Ссылка - СправочникСсылка +// - ДокументСсылка // &НаСервере Функция ОбъектыПоКритериюОтбора(ЗначениеКритерияОтбора) @@ -744,10 +804,9 @@ КонецФункции &НаСервере -Процедура ВывестиПодчиненныеОбъекты(ТекущийОбъект, ДеревоРодитель) +Процедура ВывестиПодчиненныеОбъекты(ТекущийОбъект, ДеревоРодитель, ВыведенныеОбъекты) - СтрокиДерева = ДеревоРодитель.ПолучитьЭлементы(); - Таблица = ОбъектыПоКритериюОтбора(ТекущийОбъект); + Таблица = ОбъектыПоКритериюОтбора(ТекущийОбъект); Если Таблица = Неопределено Тогда Возврат; КонецЕсли; @@ -824,9 +883,9 @@ Пока Выборка.Следующий() Цикл - НоваяСтрока = ДобавитьСтрокуВДерево(СтрокиДерева, Выборка); - Если НЕ ДобавляемыйОбъектИмеетсяСредиРодителей(ДеревоРодитель, Выборка.Ссылка) Тогда - ВывестиПодчиненныеОбъекты(Выборка.Ссылка, НоваяСтрока) + НоваяСтрока = ДобавитьСтрокуВДерево(ДеревоРодитель, Выборка, ВыведенныеОбъекты, Истина); + Если Не ДобавляемыйОбъектИмеетсяСредиРодителей(ДеревоРодитель, Выборка.Ссылка) Тогда + ВывестиПодчиненныеОбъекты(Выборка.Ссылка, НоваяСтрока, ВыведенныеОбъекты); КонецЕсли; КонецЦикла; @@ -834,20 +893,94 @@ КонецПроцедуры &НаСервере -Функция ДобавитьСтрокуВДерево(СтрокиДерева, Выборка) - - НоваяСтрока = СтрокиДерева.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка, "Ссылка, Представление, СуммаДокумента, Валюта, Проведен, ПометкаУдаления"); +Функция ДобавитьСтрокуВДерево(Родитель, Данные, ВыведенныеОбъекты, ЭтоПодчиненный = Ложь) - ПереопределенноеПредставление = ПредставлениеОбъектаДляВывода(Выборка); + Если Не ВыводитьТекущийОбъект(Данные.Ссылка, ВыведенныеОбъекты, ЭтоПодчиненный) Тогда + Возврат Родитель; + КонецЕсли; + + НоваяСтрока = Родитель.ПолучитьЭлементы().Добавить(); + ОбщиеСвойства = "Ссылка, Представление, СуммаДокумента, Валюта, Проведен, ПометкаУдаления"; + ЗаполнитьЗначенияСвойств(НоваяСтрока, Данные, ОбщиеСвойства); + + ПереопределенноеПредставление = ПредставлениеОбъектаДляВывода(Данные); Если ПереопределенноеПредставление <> Неопределено Тогда НоваяСтрока.Представление = ПереопределенноеПредставление; Иначе - НоваяСтрока.Представление = ПредставлениеОбъектаДляВыводаВОтчет(Выборка); + НоваяСтрока.Представление = ПредставлениеОбъектаДляВыводаВОтчет(Данные); КонецЕсли; + УстановитьЧастотуВыводаОбъекта(Данные.Ссылка, ВыведенныеОбъекты, ЭтоПодчиненный); + Возврат НоваяСтрока; + +КонецФункции +&НаСервере +Функция ВыводитьТекущийОбъект(ТекущийОбъект, ВыведенныеОбъекты, ЭтоПодчиненный, Отказ = Ложь) + + Выводился = ВыведенныеОбъекты[ТекущийОбъект]; + Если Выводился = Неопределено Тогда + Выводился = НовыеСвойстваЧастотыВыводаОбъекта(); + КонецЕсли; + + СвойстваОбъекта = НовыеСвойстваОбъекта(); + СвойстваОбъекта.ЭтоОсновной = (ТекущийОбъект = ОсновнойОбъект); + СвойстваОбъекта.ЭтоПодчиненный = ЭтоПодчиненный; + СвойстваОбъекта.Выводился = Выводился; + + Если СвойстваОбъекта.ЭтоОсновной + Или ЭтоПодчиненный И Выводился.ВПодчиненных > 0 + Или Не ЭтоПодчиненный И (Выводился.Итого - Выводился.ВПодчиненных) > 0 Тогда + + Отказ = Истина; + КонецЕсли; + + СтруктураПодчиненностиПереопределяемый.ПередВыводомСвязанногоОбъекта(ТекущийОбъект, СвойстваОбъекта, Отказ); + + Возврат Не Отказ; + +КонецФункции + +&НаСервере +Функция НовыеСвойстваОбъекта() + + СвойстваОбъекта = Новый Структура; + СвойстваОбъекта.Вставить("ЭтоОсновной", Ложь); + СвойстваОбъекта.Вставить("ЭтоСлужебный", Ложь); + СвойстваОбъекта.Вставить("ЭтоПодчиненный", Ложь); + СвойстваОбъекта.Вставить("Выводился", НовыеСвойстваЧастотыВыводаОбъекта()); + + Возврат СвойстваОбъекта; + +КонецФункции + +&НаСервере +Процедура УстановитьЧастотуВыводаОбъекта(ТекущийОбъект, ВыведенныеОбъекты, ЭтоПодчиненный) + + Выводился = ВыведенныеОбъекты[ТекущийОбъект]; + Если Выводился = Неопределено Тогда + Выводился = НовыеСвойстваЧастотыВыводаОбъекта(); + КонецЕсли; + + Выводился.Итого = Выводился.Итого + 1; + Если ЭтоПодчиненный Тогда + Выводился.ВПодчиненных = Выводился.ВПодчиненных + 1; + КонецЕсли; + + ВыведенныеОбъекты.Вставить(ТекущийОбъект, Выводился); + +КонецПроцедуры + +&НаСервере +Функция НовыеСвойстваЧастотыВыводаОбъекта() + + СвойстваЧастотыВывода = Новый Структура; + СвойстваЧастотыВывода.Вставить("Итого", 0); + СвойстваЧастотыВывода.Вставить("ВПодчиненных", 0); + + Возврат СвойстваЧастотыВывода; + КонецФункции &НаСервере @@ -924,5 +1057,312 @@ Возврат СтруктураПодчиненностиПереопределяемый.ПредставлениеОбъектаДляВыводаВОтчет(Данные); // АПК:223 КонецФункции + +////////////////////////////////////////////////////////////////////////////////////////////// +// Процедуры изменения состояния объектов. + +&НаКлиенте +Функция ВыбранныеЭлементы() + ВыбранныеЭлементы = Новый Массив; + + ВыделенныеОбласти = Элементы.ТаблицаОтчета.ПолучитьВыделенныеОбласти(); + + Для Каждого ВыделеннаяОбласть Из ВыделенныеОбласти Цикл + + Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда + Продолжить; + КонецЕсли; + + Границы = ГраницыВыделеннойОбласти(ВыделеннаяОбласть); + + Для НомерКолонки = Границы.Лево По Границы.Право Цикл + + Для НомерСтроки = Границы.Верх По Границы.Низ Цикл + + Ячейка = ТаблицаОтчета.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + + Если ЗначениеЗаполнено(Ячейка.Расшифровка) Тогда + ВыбранныеЭлементы.Добавить(Ячейка.Расшифровка); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + + Возврат ВыбранныеЭлементы; + +КонецФункции + +&НаКлиенте +Функция ГраницыВыделеннойОбласти(ВыделеннаяОбласть) + + Границы = Новый Структура("Лево, Верх, Низ, Право"); + ЗаполнитьЗначенияСвойств(Границы, ВыделеннаяОбласть); + + Если Границы.Лево = 0 Тогда + Границы.Лево = 1; + КонецЕсли; + + Если Границы.Верх = 0 Тогда + Границы.Верх = 1; + КонецЕсли; + + Если Границы.Низ = 0 Тогда + Границы.Низ = 1; + КонецЕсли; + + Если Границы.Право = 0 Тогда + Границы.Право = 1; + КонецЕсли; + + Возврат Границы; + +КонецФункции + +&НаКлиенте +Процедура ОповеститьСистемуОбИзменении(ВыбранныеЭлементы) + + Для Каждого Элемент Из ВыбранныеЭлементы Цикл + ОповеститьОбИзменении(Элемент); + КонецЦикла; + +КонецПроцедуры + +// Изменение пометки удаления. + +&НаСервереБезКонтекста +Функция СтатистикаПоВыбраннымЭлементам(ВыбранныеЭлементы) + + Статистика = Новый Структура; + Статистика.Вставить("СПометкойНаУдаление", Новый Соответствие); + Статистика.Вставить("БезПометкиНаУдаление", Новый Соответствие); + + СвойстваЭлементов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ВыбранныеЭлементы, "ПометкаУдаления, Представление"); + + Для Каждого Элемент Из ВыбранныеЭлементы Цикл + + СвойстваЭлемента = СвойстваЭлементов[Элемент]; + + Если СвойстваЭлемента.ПометкаУдаления Тогда + Статистика.СПометкойНаУдаление.Вставить(Элемент, СвойстваЭлемента.Представление); + Иначе + Статистика.БезПометкиНаУдаление.Вставить(Элемент, СвойстваЭлемента.Представление); + КонецЕсли; + + КонецЦикла; + + Возврат Статистика; + +КонецФункции + +&НаКлиенте +Функция СценарийИзмененияПометкиУдаления(ВыбранныеЭлементы, СтатистикаПоВыбраннымЭлементам) + + Сценарий = Новый Структура; + Сценарий.Вставить("Пометка", Ложь); + Сценарий.Вставить("Вопрос", ""); + Сценарий.Вставить("Оповещение", ""); + Сценарий.Вставить("Ссылка", ""); + Сценарий.Вставить("Пояснение", ""); + + КоличествоВыбранныхЭлементов = ВыбранныеЭлементы.Количество(); + КоличествоПомеченныхНаУдаление = СтатистикаПоВыбраннымЭлементам.СПометкойНаУдаление.Количество(); + + Если КоличествоВыбранныхЭлементов = 1 Тогда + + Элемент = ВыбранныеЭлементы[0]; + Сценарий.Ссылка = ПолучитьНавигационнуюСсылку(Элемент); + + Если КоличествоПомеченныхНаУдаление = 0 Тогда + + ПредставлениеЭлемента = СтатистикаПоВыбраннымЭлементам.БезПометкиНаУдаление[Элемент]; + + Сценарий.Пометка = Истина; + Сценарий.Оповещение = НСтр("ru = 'Пометка удаления установлена'"); + Сценарий.Пояснение = ПредставлениеЭлемента; + Сценарий.Вопрос = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пометить ""%1"" на удаление?'"), ПредставлениеЭлемента); + + Иначе + + ПредставлениеЭлемента = СтатистикаПоВыбраннымЭлементам.СПометкойНаУдаление[Элемент]; + + Сценарий.Оповещение = НСтр("ru = 'Пометка удаления снята'"); + Сценарий.Пояснение = ПредставлениеЭлемента; + Сценарий.Вопрос = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"), ПредставлениеЭлемента); + + КонецЕсли; + + Иначе + + Сценарий.Пояснение = Заголовок; + + Если КоличествоПомеченныхНаУдаление = 0 Тогда + + Сценарий.Пометка = Истина; + Сценарий.Вопрос = НСтр("ru = 'Пометить выделенные элементы на удаление?'"); + Сценарий.Оповещение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пометка удаления установлена (%1)'"), КоличествоВыбранныхЭлементов); + + ИначеЕсли КоличествоПомеченныхНаУдаление = КоличествоВыбранныхЭлементов Тогда + + Сценарий.Вопрос = НСтр("ru = 'Снять с выделенных элементов пометку на удаление?'"); + Сценарий.Оповещение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пометка удаления снята (%1)'"), КоличествоВыбранныхЭлементов); + + Иначе + + // Если часть выбранных элементов помечена на удаление, то система должна обработать только их, сняв пометку. + ВыбранныеЭлементы.Очистить(); + + Для Каждого Элемент Из СтатистикаПоВыбраннымЭлементам.СПометкойНаУдаление Цикл + ВыбранныеЭлементы.Добавить(Элемент.Ключ); + КонецЦикла; + + Сценарий = СценарийИзмененияПометкиУдаления(ВыбранныеЭлементы, СтатистикаПоВыбраннымЭлементам); + + КонецЕсли; + + КонецЕсли; + + Возврат Сценарий; + +КонецФункции + +&НаКлиенте +Процедура ВыполнитьСценарийИзмененияПометкиУдаления(Ответ, Сценарий) Экспорт + + Если Ответ <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + ИзменитьПометкуУдаленияЭлементов(Сценарий.ВыбранныеЭлементы, Сценарий.Пометка); + + ПоказатьОповещениеПользователя( + Сценарий.Оповещение, + Сценарий.Ссылка, + Сценарий.Пояснение, + БиблиотекаКартинок.Информация32); + + ОповеститьСистемуОбИзменении(Сценарий.ВыбранныеЭлементы); + +КонецПроцедуры + +&НаСервере +Процедура ИзменитьПометкуУдаленияЭлементов(ВыбранныеЭлементы, Пометка) + + Для Каждого Элемент Из ВыбранныеЭлементы Цикл + + ВыбранныйОбъект = Элемент.ПолучитьОбъект(); + ВыбранныйОбъект.УстановитьПометкуУдаления(Пометка); + + КонецЦикла; + + ОбновитьДеревоСтруктурыПодчиненности(); + +КонецПроцедуры + +// Изменение проведения документа. + +&НаКлиенте +Процедура ИзменитьПроведениеДокументов(Режим) + + ВыбранныеДокументы = ВыбранныеЭлементы(); + + Если ВыбранныеДокументы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ОбработанныеДокументы = ОбработанныеДокументы(ВыбранныеДокументы, Режим); + КоличествоОбработанныхДокументов = ОбработанныеДокументы.Количество(); + + Если КоличествоОбработанныхДокументов = 0 Тогда + Возврат; + КонецЕсли; + + Если КоличествоОбработанныхДокументов = 1 Тогда + + Документ = ВыбранныеДокументы[0]; + + Оповещение = НСтр("ru = 'Изменение'"); + Ссылка = ПолучитьНавигационнуюСсылку(Документ); + Пояснение = ОбработанныеДокументы[Документ]; + + Иначе + + Ссылка = ""; + Пояснение = Заголовок; + Оповещение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Изменение (%1)'"), КоличествоОбработанныхДокументов); + + КонецЕсли; + + ПоказатьОповещениеПользователя( + Оповещение, + Ссылка, + Пояснение, + БиблиотекаКартинок.Информация32); + + ОповеститьСистемуОбИзменении(ВыбранныеДокументы); + +КонецПроцедуры + +&НаСервере +Функция ОбработанныеДокументы(ВыбранныеДокументы, Режим) + + ОбработанныеДокументы = Новый Соответствие; + + Индекс = ВыбранныеДокументы.ВГраница(); + + Пока Индекс >= 0 Цикл + + Если Не ОбщегоНазначения.ЭтоДокумент(ВыбранныеДокументы[Индекс].Метаданные()) Тогда + ВыбранныеДокументы.Удалить(Индекс); + КонецЕсли; + + Индекс = Индекс - 1; + + КонецЦикла; + + Если ВыбранныеДокументы.Количество() = 0 Тогда + Возврат ОбработанныеДокументы; + КонецЕсли; + + СвойстваДокументов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ВыбранныеДокументы, "Проведен, Представление"); + + Индекс = ВыбранныеДокументы.ВГраница(); + + Пока Индекс >= 0 Цикл + + Документ = ВыбранныеДокументы[Индекс]; + СвойстваДокумента = СвойстваДокументов[Документ]; + + Если Режим = РежимЗаписиДокумента.ОтменаПроведения + И Не СвойстваДокумента.Проведен Тогда + + ВыбранныеДокументы.Удалить(Индекс); + + Иначе + + ВыбранныйОбъект = Документ.ПолучитьОбъект(); + ВыбранныйОбъект.Записать(Режим); + + ОбработанныеДокументы.Вставить(Документ, СвойстваДокумента.Представление); + + КонецЕсли; + + Индекс = Индекс - 1; + + КонецЦикла; + + ОбновитьДеревоСтруктурыПодчиненности(); + + Возврат ОбработанныеДокументы; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonForms/Сертификат/Module.bsl b/SSL/src/CommonForms/Сертификат/Module.bsl index cd8405193..6440bf477 100644 --- a/SSL/src/CommonForms/Сертификат/Module.bsl +++ b/SSL/src/CommonForms/Сертификат/Module.bsl @@ -22,7 +22,7 @@ Если АдресСертификата = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось открыть сертификат ""%1"", - |т.к. он не найден в справочнике.'"), Параметры.Ссылка); + |т.к. он не существует в справочнике.'"), Параметры.Ссылка); КонецЕсли; Иначе // Отпечаток АдресСертификата = АдресСертификата(Параметры.Отпечаток, УникальныйИдентификатор); diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl index 9c13d88bc..03b889b4a 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl @@ -230,7 +230,7 @@ Если НайтиФайлы(ПутьКФайлу).Количество() = 0 Тогда СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Каталог ""%1"" не существует или не доступен. + НСтр("ru = 'Папка ""%1"" не существует или не доступна. |Проверьте правильность указания пути.'"), ПутьКФайлу); Возврат Ложь; @@ -278,8 +278,9 @@ КонецПроцедуры // Параметры: -// ВыбранныеФайлы - Массив, Неопределено -. -// Контекст - Структура - . +// ВыбранныеФайлы - Массив +// - Неопределено +// Контекст - Структура // &НаКлиенте Процедура ОбработчикСохраненияФайлаПослеВыбораВДиалоге(ВыбранныеФайлы, Контекст) Экспорт diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl index b0391ef24..dcd303960 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -260,19 +260,19 @@ &НаСервере Процедура УстановитьУсловноеОформление() - + УсловноеОформление.Элементы.Очистить(); // Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаКонтактовИзменять.Имя); - + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; - + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонтактов.Адрес"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; @@ -300,7 +300,7 @@ ОтборЭлемента.ПравоеЗначение = Ложь; Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); - + КонецПроцедуры &НаКлиенте @@ -348,11 +348,11 @@ // ВыделеннаяСтрока - ДанныеФормыЭлементКоллекции - строка, данные которой получаются. // // Возвращаемое значение: -// Структура - Описание: -// * НаименованиеВладельца - Строка - -// * Наименование - Строка - -// * Представление - Строка - -// * Ссылка - ОпределяемыйТип.КонтактВзаимодействия - +// Структура: +// * НаименованиеВладельца - Строка +// * Наименование - Строка +// * Представление - Строка +// * Ссылка - ОпределяемыйТип.КонтактВзаимодействия // &НаСервере Функция ДанныеСтрокиНайденныеКонтакты(ВыделеннаяСтрока) @@ -396,12 +396,13 @@ КонецЕсли; Для Каждого Группа Из Группа.Строки Цикл - + СтрокаГруппы = ДанныеСтрокиНайденныеКонтакты(Группа); Если СтрокаТаблицы.СписокНайденныхКонтактов.НайтиПоЗначению(Группа.Контакт) = Неопределено Тогда ПредставлениеКонтакта = СтрокаГруппы.Наименование + ?(ПустаяСтрока(СтрокаГруппы.НаименованиеВладельца), "", " (" + СтрокаГруппы.НаименованиеВладельца + ")"); СтрокаТаблицы.СписокНайденныхКонтактов.Добавить(СтрокаГруппы.Контакт, ПредставлениеКонтакта); КонецЕсли; + КонецЦикла; КонецЕсли; КонецЦикла; @@ -903,7 +904,7 @@ КонецЕсли; КонецЦикла; - + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl index 6c8e42828..d4ddcec2a 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -742,7 +742,7 @@ // Обработка строк. СтрокаИсточник = ПараметрыГруппировки.Родитель; - СтрокаПриемник = СтрокаИсточник.ПолучитьЭлементы().Вставить(ПараметрыГруппировки.Индекс); + СтрокаПриемник = СтрокаИсточник.ПолучитьЭлементы().Вставить(ПараметрыГруппировки.Индекс); // см. ЭлементКоллекцииФормыНастроек УстановитьДанныеСтрокиОтборов(СтрокаПриемник, СвойствоЭлементаСтруктуры, ЭлементНастройкиПриемник); СтрокаПриемник.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник); @@ -1695,6 +1695,7 @@ ПараметрыЗаполнения.ПутьКСписку = ПутьКСписку; ПараметрыЗаполнения.Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку]; ПараметрыЗаполнения.Владелец = Элементы[ПутьКСписку]; + ПараметрыЗаполнения.Вставить("ЭтоПодбор", Истина); НачатьЗаполнениеСписка(Элементы[Команда.Имя], ПараметрыЗаполнения); КонецПроцедуры @@ -1704,7 +1705,7 @@ ПутьКСписку = СтрЗаменить(Команда.Имя, "ВставитьИзБуфера", ""); Список = ЭтотОбъект[ПутьКСписку]; - ПолеСписка = Элементы[ПутьКСписку]; + ПолеСписка = Элементы[ПутьКСписку]; // ТаблицаФормы Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку]; Сведения = ОтчетыКлиент.СведенияОЭлементеНастройки(Отчет.КомпоновщикНастроек, Индекс); @@ -1903,7 +1904,7 @@ Возврат; КонецЕсли; - Схема = ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы); + Схема = ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы); // СхемаКомпоновкиДанных Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл НайденныйПараметр = Схема.Параметры.Найти(ЭлементНастройки.Параметр); @@ -2218,6 +2219,13 @@ // Изменение группировки элементов. +// Возвращаемое значение: +// Неопределено, Структура: +// * Строки - Массив из ДанныеФормыЭлементДерева: +// * Родитель - ДанныеФормыЭлементДерева: +// ** Идентификатор - ИдентификаторКомпоновкиДанных +// * Индекс - Число +// &НаКлиенте Функция ПараметрыГруппировкиОтборов() Строки = Новый Массив; @@ -2250,7 +2258,9 @@ Строки = МассивСортировать(Строки); Родитель = Родители[0]; - Индекс = Родитель.ПолучитьЭлементы().Индекс(Строки[0]); + ДочерниеЭлементы = Родитель.ПолучитьЭлементы(); // ДанныеФормыКоллекцияЭлементовДерева + + Индекс = ДочерниеЭлементы.Индекс(Строки[0]); Возврат Новый Структура("Строки, Родитель, Индекс", Строки, Родитель, Индекс); КонецФункции @@ -2265,7 +2275,7 @@ Иначе РодительЭлементаНастройкиИсточника = ЭлементНастройкиИсточник.Родитель; КонецЕсли; - РодительЭлементаНастройкиПриемника = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточника); + РодительЭлементаНастройкиПриемника = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточника); // ГруппаЭлементовОтбораКомпоновкиДанных РодительСтрокиИсточника = СтрокаИсточник.ПолучитьРодителя(); РодительСтрокиПриемника = НаследникиСтрок.Получить(РодительСтрокиИсточника); @@ -2301,7 +2311,7 @@ Индекс = ПараметрыГруппировки.Строки.ВГраница(); Пока Индекс >= 0 Цикл - Строка = ПараметрыГруппировки.Строки[Индекс]; + Строка = ПараметрыГруппировки.Строки[Индекс]; // см. ЭлементКоллекцииФормыНастроек ЭлементНастройки = ОтборыУзлаНастроек.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор); Строки.Удалить(Строка); @@ -2327,7 +2337,7 @@ ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы; - Если ЭлементНастройки.Родитель <> Неопределено Тогда + Если ЭлементНастройки.Родитель <> Неопределено Тогда ЭлементыНастроек = ЭлементНастройки.Родитель.Элементы; КонецЕсли; Строки = ПараметрыСдвига.Родитель.ПолучитьЭлементы(); @@ -2469,6 +2479,12 @@ ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор,,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры +// Параметры: +// СвойстваГруппы - Структура: +// * ЗаголовокГруппы - Строка +// * Расположение - РасположениеПоляКомпоновкиДанных +// ИдентификаторСтроки - Число +// &НаКлиенте Процедура ВыбранныеПоляПослеВыбораГруппы(СвойстваГруппы, ИдентификаторСтроки) Экспорт Если ТипЗнч(СвойстваГруппы) <> Тип("Структура") Тогда @@ -2548,6 +2564,13 @@ // Изменение группировки элементов. +// Возвращаемое значение: +// - Структура: +// * Строки - Массив из ДанныеФормыЭлементДерева +// * Родитель - см. ЭлементКоллекцииФормыНастроек +// * Индекс - Число +// - Неопределено +// &НаКлиенте Функция ПараметрыГруппировкиВыбранныхПолей() Строки = Новый Массив; @@ -2579,12 +2602,18 @@ КонецЕсли; Строки = МассивСортировать(Строки); - Родитель = Родители[0]; + Родитель = Родители[0]; // ДанныеФормыЭлементДерева Индекс = Родитель.ПолучитьЭлементы().Индекс(Строки[0]); Возврат Новый Структура("Строки, Родитель, Индекс", Строки, Родитель, Индекс); КонецФункции +// Параметры: +// СвойстваГруппы - Структура: +// * ЗаголовокГруппы - Строка +// * Расположение - РасположениеПоляКомпоновкиДанных +// ПараметрыГруппировки - см. ПараметрыГруппировкиВыбранныхПолей +// &НаКлиенте Процедура ВыбранныеПоляПередГруппировкойПолей(СвойстваГруппы, ПараметрыГруппировки) Экспорт Если ТипЗнч(СвойстваГруппы) <> Тип("Структура") Тогда @@ -2609,7 +2638,7 @@ // Обработка строк. СтрокаИсточник = ПараметрыГруппировки.Родитель; - СтрокаПриемник = СтрокаИсточник.ПолучитьЭлементы().Вставить(ПараметрыГруппировки.Индекс); + СтрокаПриемник = СтрокаИсточник.ПолучитьЭлементы().Вставить(ПараметрыГруппировки.Индекс); // см. ЭлементКоллекцииФормыНастроек ЗаполнитьЗначенияСвойств(СтрокаПриемник, ЭлементНастройкиПриемник); СтрокаПриемник.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник); СтрокаПриемник.ЭтоГруппа = Истина; @@ -2639,7 +2668,7 @@ Иначе РодительЭлементаНастройкиИсточника = ЭлементНастройкиИсточник.Родитель; КонецЕсли; - РодительЭлементаНастройкиПриемника = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточника); + РодительЭлементаНастройкиПриемника = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточника); // ГруппаВыбранныхПолейКомпоновкиДанных РодительСтрокиИсточника = СтрокаИсточник.ПолучитьРодителя(); РодительСтрокиПриемника = НаследникиСтрок.Получить(РодительСтрокиИсточника); @@ -2676,7 +2705,7 @@ Индекс = ПараметрыГруппировки.Строки.ВГраница(); Пока Индекс >= 0 Цикл - Строка = ПараметрыГруппировки.Строки[Индекс]; + Строка = ПараметрыГруппировки.Строки[Индекс]; // см. ЭлементКоллекцииФормыНастроек ЭлементНастройки = ВыбранныеПоляУзлаНастроек.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор); Строки.Удалить(Строка); @@ -2738,7 +2767,7 @@ Строки.Добавить(ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки)); КонецЦикла; - СтрокаИсточник = Строки[0].ПолучитьРодителя(); + СтрокаИсточник = Строки[0].ПолучитьРодителя(); // см. ЭлементКоллекцииФормыНастроек Если ТекущиеДанные.ЭтоРаздел Или ТекущиеДанные.ЭтоГруппа Тогда СтрокаПриемник = ТекущиеДанные; Иначе @@ -2776,6 +2805,16 @@ УстановитьМодифицированность(); КонецПроцедуры +// Параметры: +// ВыбранныеПоляУзлаНастроек - ГруппаВыбранныхПолейКомпоновкиДанных +// - ВыбранныеПоляКомпоновкиДанных +// - ВыбранноеПолеКомпоновкиДанных +// Индекс - Число +// Строки - Массив из ДанныеФормыЭлементДерева: +// * Идентификатор - ИдентификаторКомпоновкиДанных +// НаследникиЭлементовНастроек - Соответствие +// НаследникиСтрок - Соответствие +// &НаКлиенте Процедура ПеретащитьВыбранныеПоля(ВыбранныеПоляУзлаНастроек, Индекс, Строки, НаследникиЭлементовНастроек, НаследникиСтрок) Для Каждого СтрокаИсточник Из Строки Цикл @@ -2786,8 +2825,8 @@ РодительЭлементаНастройкиИсточник = ЭлементНастройкиИсточник.Родитель; КонецЕсли; - РодительЭлементаНастройкиПриемник = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточник); - РодительСтрокиПриемник = НаследникиСтрок.Получить(СтрокаИсточник.ПолучитьРодителя()); + РодительЭлементаНастройкиПриемник = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточник); // ГруппаВыбранныхПолейКомпоновкиДанных + РодительСтрокиПриемник = НаследникиСтрок.Получить(СтрокаИсточник.ПолучитьРодителя()); // см. ЭлементКоллекцииФормыНастроек Если Индекс > РодительЭлементаНастройкиПриемник.Элементы.Количество() - 1 Тогда ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемник.Элементы.Добавить(ТипЗнч(ЭлементНастройкиИсточник)); @@ -2987,6 +3026,13 @@ ТекущееЗначение = Строка.ПравоеЗначение; КонецЕсли; + Обработчик = Новый ОписаниеОповещения("ЗавершитьВыборИзСписка", ЭтотОбъект, Строка.ПолучитьИдентификатор()); + + Если ОтчетыКлиент.ЭтоВыборОбъектовМетаданных(Строка.ТипЗначения, ТекущееЗначение, Обработчик) + Или ОтчетыКлиент.ЭтоВыборПользователей(Строка.ТипЗначения, ТекущееЗначение, ПолеЗначения.ПараметрыВыбора, Обработчик) Тогда + Возврат; + КонецЕсли; + ЗначенияДляВыбора = ЗначенияДляВыбора(Строка); ПараметрыОткрытия = Новый Структура; @@ -2999,10 +3045,7 @@ ПараметрыОткрытия.Вставить("ПараметрыВыбора", Новый Массив(ПолеЗначения.ПараметрыВыбора)); ПараметрыОткрытия.Вставить("ВыборГруппИЭлементов", ПолеЗначения.ВыборГруппИЭлементов); - Обработчик = Новый ОписаниеОповещения("ЗавершитьВыборИзСписка", ЭтотОбъект, Строка.ПолучитьИдентификатор()); - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыОткрытия, ЭтотОбъект,,,, Обработчик, Режим); + ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыОткрытия, ЭтотОбъект,,,, Обработчик); КонецПроцедуры &НаКлиенте @@ -3038,7 +3081,13 @@ &НаКлиенте Процедура ЗавершитьВыборИзСписка(Список, ИдентификаторСтроки) Экспорт - Если ТипЗнч(Список) <> Тип("СписокЗначений") Тогда + Если ТипЗнч(Список) = Тип("Массив") Тогда + ВыбранныеЗначения = Список; + + Список = Новый СписокЗначений; + Список.ЗагрузитьЗначения(ВыбранныеЗначения); + Список.ЗаполнитьПометки(Истина); + ИначеЕсли ТипЗнч(Список) <> Тип("СписокЗначений") Тогда Возврат; КонецЕсли; @@ -3208,6 +3257,10 @@ // Перетаскивание элементов. +// Параметры: +// Строки - Массив из ДанныеФормыЭлементДерева: +// * Идентификатор - ИдентификаторКомпоновкиДанных +// &НаКлиенте Процедура ПеретащитьВыбранныеПоляВСортировку(Строки) ВыбранныеПоляЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( @@ -3497,6 +3550,12 @@ ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор,,, Обработчик); КонецПроцедуры +// Параметры: +// Результат - Структура: +// * ЭлементКД - ЭлементУсловногоОформления +// * Наименование - Строка +// ИдентификаторСтроки - Число +// &НаКлиенте Процедура ОформлениеИзменитьЭлементЗавершение(Результат, ИдентификаторСтроки) Экспорт Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда @@ -3584,11 +3643,15 @@ НСтр("ru = 'Заголовок: %1'"), ?(ЗначениеЗаполнено(Значение), Значение, "<Отсутствует>")); - ПараметрыВывода = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода; + Настройки = Отчет.КомпоновщикНастроек.Настройки; + + ПараметрыВывода = Настройки.ПараметрыВывода; ЭлементНастройки = ПараметрыВывода.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор); ЭлементНастройки.Значение = Значение; ЭлементНастройки.Использование = Истина; + Настройки.ДополнительныеСвойства.Вставить("ЗаголовокУстановленИнтерактивно", ЗначениеЗаполнено(Значение)); + УстановитьМодифицированность(); КонецПроцедуры @@ -3781,6 +3844,21 @@ КонецЦикла; КонецПроцедуры +// Параметры: +// Элемент - НастройкиВложенногоОбъектаКомпоновкиДанных +// +// Возвращаемое значение: +// Структура: +// * СодержитУсловноеОформление - Булево +// * СодержитПоляИлиСортировки - Булево +// * СодержитОтборы - Булево +// * Тип - Строка +// * Картинка - Число +// * ПометкаУдаления - Булево +// * ИменаКоллекций - Массив +// * Заголовок - Строка +// * Представление - Строка +// &НаСервере Функция СвойстваЭлементаКоллекцииСтруктуры(Элемент) СвойстваЭлемента = ПалитраСвойствЭлементаКоллекцииСтруктуры(); @@ -3826,7 +3904,9 @@ Если ТипЭлемента <> Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - ЗаголовокЭлемента = Элемент.ПараметрыВывода.Элементы.Найти("Заголовок"); + ПараметрыВывода = Элемент.ПараметрыВывода; // ЗначенияПараметровВыводаКомпоновкиДанных + ЗаголовокЭлемента = ПараметрыВывода.Элементы.Найти("Заголовок"); + Если ЗаголовокЭлемента <> Неопределено Тогда СвойстваЭлемента.Заголовок = ЗаголовокЭлемента.Значение; КонецЕсли; @@ -3868,7 +3948,7 @@ Возврат ЭлементНастройки.ПредставлениеПользовательскойНастройки; КонецЕсли; - Поля = ЭлементНастройки.ПоляГруппировки; + Поля = ЭлементНастройки.ПоляГруппировки; // ПоляГруппировкиКомпоновкиДанных Если Поля.Элементы.Количество() = 0 Тогда Возврат НСтр("ru = '<Детальные записи>'"); КонецЕсли; @@ -4024,7 +4104,7 @@ Строка.Представление = НСтр("ru = 'Диаграмма'"); ПодчиненныйЭлементНастройки = ЭлементНастройки.Точки; - ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); + ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); // см. ЭлементКоллекцииФормыНастроек ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки; ПодчиненнаяСтрока.Подтип = "ДиаграммаТочки"; ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки); @@ -4032,7 +4112,7 @@ ПодчиненнаяСтрока.Представление = НСтр("ru = 'Точки'"); ПодчиненныйЭлементНастройки = ЭлементНастройки.Серии; - ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); + ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); // см. ЭлементКоллекцииФормыНастроек ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки; ПодчиненнаяСтрока.Подтип = "ДиаграммаСерии"; ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки); @@ -4042,7 +4122,7 @@ Строка.Представление = НСтр("ru = 'Таблица'"); ПодчиненныйЭлементНастройки = ЭлементНастройки.Строки; - ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); + ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); // см. ЭлементКоллекцииФормыНастроек ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки; ПодчиненнаяСтрока.Подтип = "ТаблицаСтроки"; ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки); @@ -4050,7 +4130,7 @@ ПодчиненнаяСтрока.Представление = НСтр("ru = 'Строки'"); ПодчиненныйЭлементНастройки = ЭлементНастройки.Колонки; - ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); + ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); // см. ЭлементКоллекцииФормыНастроек ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки; ПодчиненнаяСтрока.Подтип = "ТаблицаКолонки"; ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки); @@ -4129,6 +4209,17 @@ УстановитьМодифицированность(); КонецПроцедуры +// Параметры: +// ТипЭлемента - Тип +// Строка - см. ЭлементКоллекцииФормыНастроек +// СледующийУровень - Булево +// +// Возвращаемое значение: +// Структура: +// * Строка - см. ЭлементКоллекцииФормыНастроек +// * СвойствоЭлементаСтруктуры - см. СвойствоЭлементаСтруктурыНастроек +// * ЭлементНастройки - см. ЭлементНастройки +// &НаКлиенте Функция ВставитьЭлементСтруктурыНастроек(ТипЭлемента, Строка, СледующийУровень) СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура"); @@ -4242,8 +4333,8 @@ Результат.Строка = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, Строка, КудаВставить, Индекс, ПоискСтрокТаблицы); Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл - СтараяСтрока = КлючИЗначение.Ключ; - НоваяСтрока = КлючИЗначение.Значение; + СтараяСтрока = КлючИЗначение.Ключ; // см. ЭлементКоллекцииФормыНастроек + НоваяСтрока = КлючИЗначение.Значение; // см. ЭлементКоллекцииФормыНастроек НоваяСтрока.Идентификатор = ПоискЭлементовКД.Получить(СтараяСтрока.Идентификатор); КонецЦикла; @@ -4425,7 +4516,7 @@ &НаКлиенте Процедура НачатьЗаполнениеСписка(Элемент, ПараметрыЗаполнения) Список = ЭтотОбъект[ПараметрыЗаполнения.ПутьКСписку]; - ПолеСписка = Элементы[ПараметрыЗаполнения.ПутьКСписку]; + ПолеСписка = Элементы[ПараметрыЗаполнения.ПутьКСписку]; // ТаблицаФормы ПолеЗначения = Элементы[ПараметрыЗаполнения.ПутьКСписку + "Значение"]; Сведения = ОтчетыКлиент.СведенияОЭлементеНастройки(Отчет.КомпоновщикНастроек, ПараметрыЗаполнения.Индекс); @@ -4435,7 +4526,9 @@ ВыборГруппИЭлементов = Сведения.Описание.ВыборГруппИЭлементов; КонецЕсли; - Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки(Сведения.ЭлементПользовательскойНастройки, Сведения.Описание); + ЭлементПользовательскойНастройки = Сведения.ЭлементПользовательскойНастройки; + + Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки(ЭлементПользовательскойНастройки, Сведения.Описание); ПолеЗначения.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы( ВыборГруппИЭлементов, Условие); ПараметрыЗаполнения.ВыборГруппИЭлементов = ОтчетыКлиент.ЗначениеТипаИспользованиеГруппИЭлементов( @@ -4458,6 +4551,21 @@ Список.ТипЗначения = ОтчетыКлиент.ТипЗначенияОграниченныйСвязьюПоТипу( Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент, Сведения.Описание, Список.ТипЗначения); + Если ТипЗнч(ЭлементПользовательскойНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ТекущееЗначение = ЭлементПользовательскойНастройки.ПравоеЗначение; + Иначе + ТекущееЗначение = ЭлементПользовательскойНастройки.Значение; + КонецЕсли; + + ОтмеченныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение); + Обработчик = Новый ОписаниеОповещения("ЗавершитьЗаполнениеСписка", ЭтотОбъект, ПараметрыЗаполнения); + + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ЭтоПодбор", Ложь) + И (ОтчетыКлиент.ЭтоВыборОбъектовМетаданных(Список.ТипЗначения, ОтмеченныеЗначения, Обработчик) + Или ОтчетыКлиент.ЭтоВыборПользователей(Список.ТипЗначения, ОтмеченныеЗначения, ПараметрыВыбора, Обработчик)) Тогда + Возврат; + КонецЕсли; + Типы = Список.ТипЗначения.Типы(); Если Типы.Количество() = 0 Тогда Если ПараметрыЗаполнения.ДобавлятьСтроку Тогда @@ -4468,19 +4576,19 @@ Если Типы.Количество() = 1 Тогда ПараметрыЗаполнения.ВыбранныйТип = Типы[0]; - ЗавершитьЗаполнениеСписка(-1, ПараметрыЗаполнения); + ПродолжитьЗаполнениеСписка(-1, ПараметрыЗаполнения); Возврат; КонецЕсли; ДоступныеТипы = Новый СписокЗначений; ДоступныеТипы.ЗагрузитьЗначения(Типы); - Обработчик = Новый ОписаниеОповещения("ЗавершитьЗаполнениеСписка", ЭтотОбъект, ПараметрыЗаполнения); + Обработчик = Новый ОписаниеОповещения("ПродолжитьЗаполнениеСписка", ЭтотОбъект, ПараметрыЗаполнения); ПоказатьВыборИзМеню(Обработчик, ДоступныеТипы, Элемент); КонецПроцедуры &НаКлиенте -Процедура ЗавершитьЗаполнениеСписка(ВыбранныйЭлемент, ПараметрыЗаполнения) Экспорт +Процедура ПродолжитьЗаполнениеСписка(ВыбранныйЭлемент, ПараметрыЗаполнения) Экспорт Если ВыбранныйЭлемент = Неопределено Тогда Возврат; КонецЕсли; @@ -4515,6 +4623,51 @@ ОткрытьФорму(ПутьКФорме, ПараметрыЗаполнения, Владелец); КонецПроцедуры +&НаКлиенте +Процедура ЗавершитьЗаполнениеСписка(ВыбранныеЗначения, ПараметрыЗаполнения) Экспорт + Если ТипЗнч(ВыбранныеЗначения) = Тип("Массив") Тогда + Значения = ВыбранныеЗначения; + + ВыбранныеЗначения = Новый СписокЗначений; + ВыбранныеЗначения.ЗагрузитьЗначения(Значения); + ВыбранныеЗначения.ЗаполнитьПометки(Истина); + ИначеЕсли ТипЗнч(ВыбранныеЗначения) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + ПутьКСписку = ПараметрыЗаполнения.ПутьКСписку; + Список = ЭтотОбъект[ПутьКСписку]; + + Индекс = Список.Количество() - 1; + Пока Индекс >= 0 Цикл + Элемент = Список[Индекс]; + Индекс = Индекс - 1; + + Если Элемент.Пометка + И ВыбранныеЗначения.НайтиПоЗначению(Элемент.Значение) = Неопределено Тогда + Список.Удалить(Элемент); + КонецЕсли; + КонецЦикла; + + Для Каждого Элемент Из ВыбранныеЗначения Цикл + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, Элемент.Значение, Неопределено, Истина); + КонецЦикла; + + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; + + Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку]; + ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс]; + ЭлементНастройки.Использование = Истина; + + Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭлементНастройки.ПравоеЗначение = ВыбранныеЗначения; + Иначе + ЭлементНастройки.Значение = ВыбранныеЗначения; + КонецЕсли; + + ОформитьСписок(Элементы[ПутьКСписку], ЭлементНастройки); +КонецПроцедуры + &НаКлиенте Процедура ВставитьИзБуфераЗавершение(НайденныеОбъекты, ПутьКСписку) Экспорт Если НайденныеОбъекты = Неопределено Тогда @@ -4818,16 +4971,36 @@ РезультатВыбора = Новый Структура; РезультатВыбора.Вставить("ИмяСобытия", "ФормаНастроек"); РезультатВыбора.Вставить("Переформировать", Переформировать); - РезультатВыбора.Вставить("ВариантМодифицирован", ВариантИзменен); - РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", ВариантИзменен Или ПользовательскиеНастройкиМодифицированы); РезультатВыбора.Вставить("СброситьПользовательскиеНастройки", РасширенныйРежим = 1); РезультатВыбора.Вставить("ФормаНастроекРасширенныйРежим", РасширенныйРежим); РезультатВыбора.Вставить("ФормаНастроекИмяСтраницы", Элементы.СтраницыНастроек.ТекущаяСтраница.Имя); РезультатВыбора.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); + РезультатВыбора.Вставить("ВариантМодифицирован", ВариантИзменен); + РезультатВыбора.Вставить( + "ПользовательскиеНастройкиМодифицированы", + ВариантИзменен Или ПользовательскиеНастройкиМодифицированы); Возврат РезультатВыбора; КонецФункции +// Параметры: +// Настройки - НастройкиКомпоновкиДанных +// +// Возвращаемое значение: +// Структура: +// * TITLE - Структура: +// ** Объект - ЗначениеПараметраКомпоновкиДанных +// ** Идентификатор - ИдентификаторКомпоновкиДанных +// * TITLEOUTPUT - Структура: +// ** Объект - ЗначениеПараметраКомпоновкиДанных +// ** Идентификатор - ИдентификаторКомпоновкиДанных +// * DATAPARAMETERSOUTPUT - Структура: +// ** Объект - ЗначениеПараметраКомпоновкиДанных +// ** Идентификатор - ИдентификаторКомпоновкиДанных +// * FILTEROUTPUT - Структура: +// ** Объект - ЗначениеПараметраКомпоновкиДанных +// ** Идентификатор - ИдентификаторКомпоновкиДанных +// &НаКлиентеНаСервереБезКонтекста Функция ПредопределенныеПараметрыВывода(Настройки) ПредопределенныеПараметры = Новый Структура("TITLE, TITLEOUTPUT, DATAPARAMETERSOUTPUT, FILTEROUTPUT"); @@ -4973,7 +5146,7 @@ &НаКлиенте Процедура СдвинутьСтроки(Контекст) - ТекущийРодитель = Контекст.ТекущийРодитель; + ТекущийРодитель = Контекст.ТекущийРодитель; // см. ЭлементКоллекцииФормыНастроек УзелКД = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура"); Если Контекст.ТекущийРодитель = Неопределено Тогда @@ -5007,7 +5180,7 @@ ИндексВМассиве = ВыделеноСтрок - Номер; КонецЕсли; - СтрокаДерева = Контекст.СтрокиДерева[ИндексВМассиве]; + СтрокаДерева = Контекст.СтрокиДерева[ИндексВМассиве]; // см. ЭлементКоллекцииФормыНастроек ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.Идентификатор); ИндексВДереве = СтрокиРодителя.Индекс(СтрокаДерева); @@ -5076,7 +5249,7 @@ КартинкаРежимаОтображения = 5; КонецЕсли; - Строка = ЭтотОбъект[Контекст.ИмяКоллекции].НайтиПоИдентификатору(Контекст.ИдентификаторСтроки); + Строка = ЭтотОбъект[Контекст.ИмяКоллекции].НайтиПоИдентификатору(Контекст.ИдентификаторСтроки); // см. ЭлементКоллекцииФормыНастроек Если Строка = Неопределено Тогда Возврат; КонецЕсли; @@ -5091,6 +5264,13 @@ УстановитьМодифицированность(); КонецПроцедуры +// Параметры: +// ИмяКоллекции - Строка +// Строка - см. ЭлементКоллекцииФормыНастроек +// ЭлементНастройки - см. ЭлементНастройки +// КартинкаРежимаОтображения - Неопределено +// - Число +// &НаКлиенте Процедура УстановитьРежимОтображения(ИмяКоллекции, Строка, ЭлементНастройки, КартинкаРежимаОтображения = Неопределено) Если КартинкаРежимаОтображения = Неопределено Тогда @@ -5174,6 +5354,49 @@ //////////////////////////////////////////////////////////////////////////////// // Клиент - Таблицы полей (функциональная часть). +// Параметры: +// УзелНастроек - НастройкиКомпоновкиДанных +// - НастройкиВложенногоОбъектаКомпоновкиДанных +// - СтруктураНастроекКомпоновкиДанных +// - ДиаграммаКомпоновкиДанных +// - ПорядокКомпоновкиДанных +// - ГруппировкаКомпоновкиДанных +// - ГруппировкаТаблицыКомпоновкиДанных +// - ГруппировкаДиаграммыКомпоновкиДанных +// - УсловноеОформлениеКомпоновкиДанных +// - ГруппаВыбранныхПолейКомпоновкиДанных +// - ГруппаЭлементовОтбораКомпоновкиДанных +// - ЭлементОтбораКомпоновкиДанных +// - ЭлементУсловногоОформленияКомпоновкиДанных +// - ЗначенияПараметровВыводаКомпоновкиДанных +// - ЗначениеПараметраНастроекКомпоновкиДанных +// - ОтборКомпоновкиДанных +// - ВыбранныеПоляКомпоновкиДанных +// - ТаблицаКомпоновкиДанных +// - Неопределено +// Строка - см. ЭлементКоллекцииФормыНастроек +// +// Возвращаемое значение: +// - НастройкиКомпоновкиДанных +// - НастройкиВложенногоОбъектаКомпоновкиДанных +// - СтруктураНастроекКомпоновкиДанных +// - ДиаграммаКомпоновкиДанных +// - ПорядокКомпоновкиДанных +// - ГруппировкаКомпоновкиДанных +// - ГруппировкаТаблицыКомпоновкиДанных +// - ГруппировкаДиаграммыКомпоновкиДанных +// - УсловноеОформлениеКомпоновкиДанных +// - ГруппаВыбранныхПолейКомпоновкиДанных +// - ГруппаЭлементовОтбораКомпоновкиДанных +// - ЭлементОтбораКомпоновкиДанных +// - ЭлементУсловногоОформленияКомпоновкиДанных +// - ЗначенияПараметровВыводаКомпоновкиДанных +// - ЗначениеПараметраНастроекКомпоновкиДанных +// - ОтборКомпоновкиДанных +// - ВыбранныеПоляКомпоновкиДанных +// - ТаблицаКомпоновкиДанных +// - Неопределено +// &НаКлиентеНаСервереБезКонтекста Функция ЭлементНастройки(Знач УзелНастроек, Знач Строка) ЭлементНастройки = Неопределено; @@ -6299,6 +6522,8 @@ ИнициализироватьРеквизитыПредопределенныхПараметровВывода(); КомпоновщикНастроек = Отчет.КомпоновщикНастроек; + ОтчетыСервер.УстановитьУсловияОтборов(ПараметрыЗагрузки, КомпоновщикНастроек); + Если ПараметрыЗагрузки.ВариантМодифицирован Тогда ВариантИзменен = Истина; КонецЕсли; @@ -6714,4 +6939,47 @@ #КонецОбласти +// АПК:568-выкл выполняет задачу адаптации кода (исправление проблем типизации). + +// Параметры: +// Коллекция - ДанныеФормыДерево +// +// Возвращаемое значение: +// ДанныеФормыЭлементДерева: +// * Идентификатор - ИдентификаторКомпоновкиДанных +// * Использование - Булево +// * ОтображатьИспользование - Булево +// * ПредставлениеПользовательскойНастройки - Строка +// * ВидСравнения - ВидСравненияКомпоновкиДанных +// * Значение - Неопределено +// * ПредставлениеЗначения - Строка +// * ТипЗначения - ОписаниеТипов +// * ДоступныеЗначения - СписокЗначений +// * ДоступенСписокЗначений - Булево +// * КартинкаРежимаОтображения - Число +// * Заголовок - Строка +// * ЭтоПредопределенныйЗаголовок - Булево +// * ЭтоРаздел - Булево +// * ЭтоГруппа - Булево +// * ЭтоПараметр - Булево +// * ЭтоПериод - Булево +// * Картинка - Число +// * ФормаВыбора - Строка +// * ВыборГруппИЭлементов - ВыборГруппИЭлементов +// * ДоступныеВидыСравнения - СписокЗначений +// * Параметр - ПараметрКомпоновкиДанных +// * ЛевоеЗначение - ПолеКомпоновкиДанных +// * ПравоеЗначение - Неопределено +// * ПометкаУдаления - Булево +// * ЭтоУникальныйИдентификатор - Булево +// +&НаКлиентеНаСервереБезКонтекста +Функция ЭлементКоллекцииФормыНастроек(Коллекция) + + Возврат Коллекция.ПолучитьЭлементы()[0]; + +КонецФункции + +// АПК:568-вкл + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаОтчета/Form.form b/SSL/src/CommonForms/ФормаОтчета/Form.form index fd6390b93..498acad00 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаОтчета/Form.form @@ -2323,6 +2323,57 @@ Normal + + Отчеты + 830 + + ПраваПользователей + 832 + true + true + + true + + + ПраваПользователейРасширеннаяПодсказка + 833 + Label + true + true + + Left + + + Form.Command.ПраваПользователей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Отчеты</value> + + + ОтчетыРасширеннаяПодсказка + 831 + Label + true + true + + Left + + + + НовоеОкно 41 @@ -4140,6 +4191,41 @@ РазвернутьОбластьПоказателей + + КонтекстВарианта + 11 + + String + + + + true + + + true + + + + ВариантыКонтекста + 13 + + ValueList + + + true + + + true + + + + String + + 256 + + + + ВсеНастройки @@ -4698,6 +4784,31 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ПраваПользователей</name> + <title> + <key>ru</key> + <value>Права пользователей</value> + + 25 + + ru + Права пользователей + + + true + + + StdPicture.Report + + + + ПраваПользователей + + + Auto + Auto + Ссылка diff --git a/SSL/src/CommonForms/ФормаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаОтчета/Module.bsl index ef3def0d6..bda6b3cce 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -37,6 +37,7 @@ ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетМетаданные = ОтчетОбъект.Метаданные(); ОтчетПолноеИмя = ОтчетМетаданные.ПолноеИмя(); + ПредопределенныеВарианты = Новый СписокЗначений; Если ОтчетОбъект.СхемаКомпоновкиДанных <> Неопределено Тогда Для Каждого Вариант Из ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек Цикл @@ -44,57 +45,32 @@ КонецЦикла; КонецЕсли; + КонтекстВарианта = КонтекстВариантаОтчета(); + УстановитьКлючНазначенияИспользования(); + СохранитьПараметрыФормы(); УстановитьКлючТекущегоВарианта(ОтчетПолноеИмя, ПредопределенныеВарианты); - // Предварительная инициализация компоновщика (если требуется). - АдресСхемы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "АдресСхемы"); - Если РежимРасшифровки И ТипЗнч(Параметры.Расшифровка) = Тип("ОписаниеОбработкиРасшифровкиКомпоновкиДанных") Тогда - НовыеНастройкиКД = ПолучитьИзВременногоХранилища(Параметры.Расшифровка.Данные).Настройки; - АдресСхемы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыеНастройкиКД.ДополнительныеСвойства, "АдресСхемы"); - КонецЕсли; - Если ТипЗнч(АдресСхемы) = Тип("Строка") И ЭтоАдресВременногоХранилища(АдресСхемы) Тогда - СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(АдресСхемы); - Если ТипЗнч(СхемаКомпоновкиДанных) = Тип("СхемаКомпоновкиДанных") Тогда - АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор); - Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); - Иначе - АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор); - КонецЕсли; - Иначе - АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор); - КонецЕсли; - - // Сохранение параметров открытия формы. - ФормаПараметры = Новый Структура( - "КлючНазначенияИспользования, КлючПользовательскихНастроек, - |СформироватьПриОткрытии, ТолькоПросмотр, - |ФиксированныеНастройки, Раздел, Подсистема, ПодсистемаПредставление"); - ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры); - ФормаПараметры.Вставить("Отбор", Новый Структура); - Если ТипЗнч(Параметры.Отбор) = Тип("Структура") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ФормаПараметры.Отбор, Параметры.Отбор, Истина); - Параметры.Отбор.Очистить(); - КонецЕсли; - // Определение настроек отчета. ТипОтчетаСтрокой = ВариантыОтчетов.ТипОтчетаСтрокой(Параметры.Отчет); Если ТипОтчетаСтрокой = Неопределено Тогда Информация = ВариантыОтчетов.ИнформацияОбОтчете(ОтчетПолноеИмя, Истина); Параметры.Отчет = Информация.Отчет; КонецЕсли; + НастройкиОтчета = ВариантыОтчетов.НастройкиФормыОтчета(Параметры.Отчет, КлючТекущегоВарианта, ОтчетОбъект); НастройкиОтчета.Вставить("РазрешеноВыбиратьВарианты", Истина); НастройкиОтчета.Вставить("СхемаМодифицирована", Ложь); НастройкиОтчета.Вставить("ПредопределенныеВарианты", ПредопределенныеВарианты); - НастройкиОтчета.Вставить("АдресСхемы", АдресСхемы); + НастройкиОтчета.Вставить("АдресСхемы", АдресСхемыОтчета(ОтчетОбъект)); НастройкиОтчета.Вставить("КлючСхемы", ""); - НастройкиОтчета.Вставить("Контекстный", ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") И ФормаПараметры.Отбор.Количество() > 0); + НастройкиОтчета.Вставить("Контекстный", ЗначениеЗаполнено(КонтекстВарианта)); НастройкиОтчета.Вставить("ПолноеИмя", ОтчетПолноеИмя); НастройкиОтчета.Вставить("Наименование", СокрЛП(ОтчетМетаданные.Представление())); НастройкиОтчета.Вставить("ОтчетСсылка", Параметры.Отчет); НастройкиОтчета.Вставить("Подсистема", ФормаПараметры.Подсистема); НастройкиОтчета.Вставить("Внешний", ТипЗнч(НастройкиОтчета.ОтчетСсылка) = Тип("Строка")); НастройкиОтчета.Вставить("Безопасный", БезопасныйРежим() <> Ложь); + ОбновитьИнформациюОВариантеОтчета(); ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(НастройкиОтчета, ВариантыОтчетов.ПараметрыКлиента()); @@ -114,36 +90,10 @@ Элементы.ГруппаПоказатель.Видимость = Ложь; Элементы.ОбластьПоказателей.Видимость = Ложь; Элементы.КомандыВидовПоказателейЕще.Видимость = Ложь; - Элементы.ОтчетТабличныйДокумент.УстановитьДействие("ПриАктивизацииОбласти", ""); + Элементы.ОтчетТабличныйДокумент.УстановитьДействие("ПриАктивизации", ""); КонецЕсли; - // Скрытие команд вариантов. - ВидимостьКомандВариантовОтчетов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВидимостьКомандВариантовОтчетов"); - - Если ВидимостьКомандВариантовОтчетов = Ложь Тогда - НастройкиОтчета.РазрешеноИзменятьВарианты = Ложь; - НастройкиОтчета.РазрешеноВыбиратьВарианты = Ложь; - Если ПустаяСтрока(КлючНазначенияИспользования) Тогда - КлючНазначенияИспользования = Параметры.КлючВарианта; - ФормаПараметры.КлючНазначенияИспользования = КлючНазначенияИспользования; - КонецЕсли; - КонецЕсли; - Если НастройкиОтчета.РазрешеноИзменятьВарианты И Не ВариантыОтчетовПовтИсп.ПравоДобавления() Тогда - НастройкиОтчета.РазрешеноИзменятьВарианты = Ложь; - КонецЕсли; - - РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - НастройкиОтчета, "РазрешеноВыбиратьИНастраиватьВариантыБезСохранения", Ложь); - - Если РазрешеноВыбиратьИНастраиватьВариантыБезСохранения Тогда - НастройкиОтчета.РазрешеноИзменятьВарианты = Истина; - НастройкиОтчета.РазрешеноВыбиратьВарианты = Истина; - ВариантМодифицирован = Ложь; - Если ПустаяСтрока(КлючНазначенияИспользования) Тогда - КлючНазначенияИспользования = Параметры.КлючВарианта; - ФормаПараметры.КлючНазначенияИспользования = КлючНазначенияИспользования; - КонецЕсли; - КонецЕсли; + УстановитьРазрешенияПользователя(); // Регистрация команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек. НаборРеквизитов = ПолучитьРеквизиты(); @@ -166,10 +116,12 @@ МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); ДоступнаОтправкаПисем = МодульРаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем(); КонецЕсли; + Если ДоступнаОтправкаПисем Тогда Если НастройкиОтчета.РазрешеноИзменятьВарианты И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") И Не НастройкиОтчета.СкрытьКомандыРассылки Тогда + МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); МодульРассылкаОтчетов.ФормаОтчетаДобавитьКоманды(ЭтотОбъект, Отказ, СтандартнаяОбработка); Иначе // Если в подменю одна команда, то выпадающий список не отображается. @@ -185,9 +137,11 @@ Попытка ИспользуемыеТаблицы = ВариантыОтчетов.ИспользуемыеТаблицы(ОтчетОбъект.СхемаКомпоновкиДанных); ИспользуемыеТаблицы.Добавить(НастройкиОтчета.ПолноеИмя); + Если НастройкиОтчета.События.ПриОпределенииИспользуемыхТаблиц Тогда ОтчетОбъект.ПриОпределенииИспользуемыхТаблиц(КлючТекущегоВарианта, ИспользуемыеТаблицы); КонецЕсли; + ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ИспользуемыеТаблицы); Исключение ТекстОшибки = НСтр("ru = 'Не удалось определить используемые таблицы:'"); @@ -196,13 +150,18 @@ КонецПопытки; КонецЕсли; - ОтобразитьСостояниеОтчета(НСтр("ru = 'Отчет не сформирован. Нажмите ""Сформировать"" для получения отчета.'")); + ОтчетыКлиентСервер.ОтобразитьСостояниеОтчета( + ЭтотОбъект, НСтр("ru = 'Отчет не сформирован. Нажмите ""Сформировать"" для получения отчета.'")); ИнтеграцияПодсистемБСП.ПриСозданииНаСервереВариантыОтчетов(ЭтотОбъект, Отказ, СтандартнаяОбработка); ОтчетыПереопределяемый.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); Если НастройкиОтчета.События.ПриСозданииНаСервере Тогда ОтчетОбъект.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); КонецЕсли; + + Элементы.ПраваПользователей.Видимость = Пользователи.ЭтоПолноправныйПользователь() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом"); + КонецПроцедуры &НаКлиенте @@ -299,6 +258,7 @@ ОповещениеОбработано = Истина; КлючВарианта = Неопределено; + НастройкиОтчета.КлючСхемы = ""; Если ТипЗнч(Параметр) = Тип("Структура") Тогда Параметр.Свойство("КлючВарианта", КлючВарианта); @@ -357,7 +317,10 @@ Если РежимРасшифровки Тогда ОтчетНаименованиеТекущегоВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыеНастройкиКД.ДополнительныеСвойства, "ВариантНаименование"); - Если Параметры <> Неопределено И Параметры.Свойство("Расшифровка") Тогда + Если Параметры <> Неопределено + И Параметры.Свойство("Расшифровка") + И ТипЗнч(Параметры.Расшифровка) = Тип("ОписаниеОбработкиРасшифровкиКомпоновкиДанных") Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Параметры.Расшифровка.ПрименяемыеНастройки); Отчет.КомпоновщикНастроек.ФиксированныеНастройки.ДополнительныеСвойства.Вставить("РежимРасшифровки", Истина); КонецЕсли; @@ -435,7 +398,10 @@ Продолжить; КонецЕсли; - ШаблонИмени = "КомпоновщикНастроекПользовательскиеНастройкиЭлемент" + ЭлементыНастроек.Индекс(ЭлементНастройки); + ШаблонИмени = ПутьКДаннымЭлементов.ПоИндексу[ЭлементыНастроек.Индекс(ЭлементНастройки)]; + Если ШаблонИмени = Неопределено Тогда + Продолжить; + КонецЕсли; ДатаНачала = Элементы.Найти(ШаблонИмени + "ДатаНачала"); ДатаОкончания = Элементы.Найти(ШаблонИмени + "ДатаОкончания"); @@ -443,7 +409,7 @@ Продолжить; КонецЕсли; - Значение = ЭлементНастройки.Значение; + Значение = ЭлементНастройки.Значение; // СтандартныйПериод Если ДатаНачала.АвтоОтметкаНезаполненного = Истина И Не ЗначениеЗаполнено(Значение.ДатаНачала) И Не ЗначениеЗаполнено(Значение.ДатаОкончания) Тогда @@ -580,6 +546,8 @@ ОбновитьЭлементыФормыНастроек(ПараметрыОбновления); КонецЕсли; + + ОтчетыКлиентСервер.ОповеститьОИзмененииНастроек(ЭтотОбъект); КонецПроцедуры &НаКлиенте @@ -858,6 +826,10 @@ //////////////////////////////////////////////////////////////////////////////// // Подключаемые + +// Параметры: +// Команда - КомандаФормы +// &НаКлиенте Процедура Подключаемый_Команда(Команда) ПостояннаяКоманда = ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя); @@ -872,11 +844,14 @@ КонецЕсли; КонецПроцедуры +// Параметры: +// Команда - КомандаФормы +// &НаКлиенте Процедура Подключаемый_ЗагрузитьВариантОтчета(Команда) Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("ИмяКоманды", Команда.Имя)); Если Найденные.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Вариант отчета не найден.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Вариант отчета не существует.'")); Возврат; КонецЕсли; @@ -996,9 +971,10 @@ &НаКлиенте Процедура ПослеФормирования(Результат, ЗагрузитьРезультатФормированияОтчета) Экспорт Если Результат = Неопределено Тогда - ПоказатьОшибкиФормирования(НСтр("ru = 'Формирование отчета прервано администратором'")); - ПоказатьОповещениеПользователя(НСтр("ru = 'Отчет не сформирован'"),, Заголовок); - ИначеЕсли Результат.Статус = "Выполнено" Тогда + Возврат; + КонецЕсли; + + Если Результат.Статус = "Выполнено" Тогда Если ЗагрузитьРезультатФормированияОтчета Тогда ЗагрузитьРезультатФормированияОтчета(); КонецЕсли; @@ -1016,7 +992,7 @@ МодульОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(ИдентификаторЗамера); КонецЕсли; - ОтчетСформирован = ?(Результат = Неопределено, Ложь, Результат.Статус = "Выполнено"); + ОтчетСформирован = (Результат.Статус = "Выполнено"); ИнтеграцияПодсистемБСПКлиент.ПослеФормирования(ЭтотОбъект, ОтчетСформирован); ОтчетыКлиентПереопределяемый.ПослеФормирования(ЭтотОбъект, ОтчетСформирован); @@ -1060,8 +1036,9 @@ Если Результат.Статус <> "Выполняется" Тогда ЗагрузитьРезультатФормированияОтчета(); - Иначе - ОтобразитьСостояниеОтчета(НСтр("ru = 'Отчет формируется...'"), БиблиотекаКартинок.ДлительнаяОперация48); + Иначе + ОтчетыКлиентСервер.ОтобразитьСостояниеОтчета( + ЭтотОбъект, НСтр("ru = 'Отчет формируется...'"), БиблиотекаКартинок.ДлительнаяОперация48); КонецЕсли; Возврат Результат; @@ -1069,6 +1046,10 @@ &НаСервере Функция ПараметрыФормированияОтчета(ИмяОтчета, Непосредственно) + ДополнительныеСвойства = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; + ДополнительныеСвойства.Вставить("ВариантМодифицирован", ВариантМодифицирован); + ДополнительныеСвойства.Вставить("ПользовательскиеНастройкиМодифицированы", ПользовательскиеНастройкиМодифицированы); + ПараметрыФормированияОтчета = Новый Структура; ПараметрыФормированияОтчета.Вставить("СсылкаОтчета", НастройкиОтчета.ОтчетСсылка); ПараметрыФормированияОтчета.Вставить("СсылкаВарианта", НастройкиОтчета.ВариантСсылка); @@ -1124,7 +1105,6 @@ &НаСервере Процедура ЗагрузитьРезультатФормированияОтчета() Если Не ЭтоАдресВременногоХранилища(ФоновоеЗаданиеАдресХранилища) Тогда - ПоказатьОшибкиФормирования(НСтр("ru = 'Не удалось сформировать отчет'")); Возврат; КонецЕсли; @@ -1135,7 +1115,6 @@ ФоновоеЗаданиеИдентификатор = Неопределено; Если Результат = Неопределено Тогда - ПоказатьОшибкиФормирования(НСтр("ru = 'Не удалось сформировать отчет (пустой результат)'")); Возврат; КонецЕсли; @@ -1150,7 +1129,7 @@ ОбщегоНазначения.СообщитьПользователю(ВариантыОтчетов.СообщениеДанныеЕщеОбновляются()); КонецЕсли; - ОтобразитьСостояниеОтчета(); + ОтчетыКлиентСервер.ОтобразитьСостояниеОтчета(ЭтотОбъект); ЗаполнитьЗначенияСвойств(НастройкиОтчета.Печать, ОтчетТабличныйДокумент); // Сохранение настроек печати. ОтчетТабличныйДокумент = Результат.ТабличныйДокумент; @@ -1168,6 +1147,7 @@ Результат.Вставить("ИмяСобытия", "ПослеФормирования"); Результат.Вставить("Непосредственно", Ложь); + ОбновитьЭлементыФормыНастроекНаСервере(Результат); КонецПроцедуры @@ -1190,6 +1170,10 @@ КонецЕсли; КонецПроцедуры +// Параметры: +// Элемент - ПолеФормы +// СтандартнаяОбработка - Булево +// &НаКлиенте Процедура ПоказатьСписокВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -1202,8 +1186,20 @@ ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора( Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент); + РасширенноеОписаниеТипов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства, + "РасширенноеОписаниеТипов"); + + ТипЗначения = Неопределено; + Если РасширенноеОписаниеТипов <> Неопределено Тогда + РасширенноеОписаниеТипа = РасширенноеОписаниеТипов[Сведения.Индекс]; + Если РасширенноеОписаниеТипа <> Неопределено Тогда + ТипЗначения = РасширенноеОписаниеТипа.ОписаниеТиповДляФормы; + КонецЕсли; + КонецЕсли; + Элемент.ДоступныеТипы = ОтчетыКлиент.ТипЗначенияОграниченныйСвязьюПоТипу( - Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент, ОписаниеНастроек); + Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент, ОписаниеНастроек, ТипЗначения); Если ТипЗнч(Сведения.ЭлементПользовательскойНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда ТекущееЗначение = Сведения.ЭлементПользовательскойНастройки.Значение; @@ -1211,6 +1207,7 @@ ТекущееЗначение = Сведения.ЭлементПользовательскойНастройки.ПравоеЗначение; КонецЕсли; + ОтмеченныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение); ДоступныеЗначения = ?(ОписаниеНастроек = Неопределено, Неопределено, ОписаниеНастроек.ДоступныеЗначения); Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки(Сведения.ЭлементПользовательскойНастройки, ОписаниеНастроек); @@ -1224,8 +1221,20 @@ ОграничиватьВыборУказаннымиЗначениями = ДоступныеЗначения <> Неопределено; + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ЭлементПользовательскойНастройки", Сведения.ЭлементПользовательскойНастройки); + ПараметрыОбработчика.Вставить("ОграничиватьВыборУказаннымиЗначениями", ОграничиватьВыборУказаннымиЗначениями); + ПараметрыОбработчика.Вставить("ИмяЭлемента", Элемент.Имя); + + Обработчик = Новый ОписаниеОповещения("ЗавершитьВыборИзСписка", ЭтотОбъект, ПараметрыОбработчика); + + Если ОтчетыКлиент.ЭтоВыборОбъектовМетаданных(Элемент.ДоступныеТипы, ОтмеченныеЗначения, Обработчик) + Или ОтчетыКлиент.ЭтоВыборПользователей(Элемент.ДоступныеТипы, ОтмеченныеЗначения, ПараметрыВыбора, Обработчик) Тогда + Возврат; + КонецЕсли; + ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение)); + ПараметрыОткрытия.Вставить("Отмеченные", ОтмеченныеЗначения); ПараметрыОткрытия.Вставить("ОписаниеТипов", Элемент.ДоступныеТипы); ПараметрыОткрытия.Вставить("ЗначенияДляВыбора", ЗначенияДляВыбора); ПараметрыОткрытия.Вставить("ЗначенияДляВыбораЗаполнены", Элемент.СписокВыбора.Количество() > 0); @@ -1235,15 +1244,7 @@ ПараметрыОткрытия.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); ПараметрыОткрытия.Вставить("БыстрыйВыбор", ?(ОписаниеНастроек = Неопределено, Ложь, ОписаниеНастроек.БыстрыйВыбор)); - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("ЭлементПользовательскойНастройки", Сведения.ЭлементПользовательскойНастройки); - ПараметрыОбработчика.Вставить("ОграничиватьВыборУказаннымиЗначениями", ОграничиватьВыборУказаннымиЗначениями); - ПараметрыОбработчика.Вставить("ИмяЭлемента", Элемент.Имя); - - Обработчик = Новый ОписаниеОповещения("ЗавершитьВыборИзСписка", ЭтотОбъект, ПараметрыОбработчика); - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыОткрытия, ЭтотОбъект,,,, Обработчик, Режим); + ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыОткрытия, ЭтотОбъект,,,, Обработчик); КонецПроцедуры &НаКлиенте @@ -1269,9 +1270,24 @@ Возврат ЗначенияДляВыбора; КонецФункции +// Параметры: +// Список - СписокЗначений +// - Массив из СправочникСсылка.Пользователи +// ПараметрыВыбора - Структура: +// * ЭлементПользовательскойНастройки - ЭлементОтбораКомпоновкиДанных +// - ЗначениеПараметраНастроекКомпоновкиДанных +// * ОграничиватьВыборУказаннымиЗначениями - Булево +// * ИмяЭлемента - Строка +// &НаКлиенте Процедура ЗавершитьВыборИзСписка(Список, ПараметрыВыбора) Экспорт - Если ТипЗнч(Список) <> Тип("СписокЗначений") Тогда + Если ТипЗнч(Список) = Тип("Массив") Тогда + ВыбранныеЗначения = Список; + + Список = Новый СписокЗначений; + Список.ЗагрузитьЗначения(ВыбранныеЗначения); + Список.ЗаполнитьПометки(Истина); + ИначеЕсли ТипЗнч(Список) <> Тип("СписокЗначений") Тогда Возврат; КонецЕсли; @@ -1305,6 +1321,8 @@ ОтчетыКлиент.КэшироватьЗначениеОтбора( Список, ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки, Отчет.КомпоновщикНастроек); + + ОтчетыКлиентСервер.ОповеститьОИзмененииНастроек(ЭтотОбъект); КонецПроцедуры &НаКлиенте @@ -1351,7 +1369,7 @@ Возврат; КонецЕсли; - КлючТекущихПользовательскихНастроек = ОписаниеНастроек.КлючНастроек; + КлючТекущихПользовательскихНастроек = ОписаниеНастроек.КлючНастроек; // Строка ПредставлениеТекущихПользовательскихНастроек = ОписаниеНастроек.Представление; Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ОписаниеНастроек.Настройки); @@ -1474,30 +1492,12 @@ НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек = Истина; УстановитьТекущийВариант(КлючВарианта); - ОтобразитьСостояниеОтчета(НСтр("ru = 'Выбран другой вариант отчета. Нажмите ""Сформировать"" для получения отчета.'"), + ОтчетыКлиентСервер.ОтобразитьСостояниеОтчета( + ЭтотОбъект, + НСтр("ru = 'Выбран другой вариант отчета. Нажмите ""Сформировать"" для получения отчета.'"), БиблиотекаКартинок.Информация32); КонецПроцедуры -&НаСервере -Процедура ОтобразитьСостояниеОтчета(Знач ТекстСостояния = "", Знач КартинкаСостояния = Неопределено) - - ОтображатьСостояние = Не ПустаяСтрока(ТекстСостояния); - Если КартинкаСостояния = Неопределено Или Не ОтображатьСостояние Тогда - КартинкаСостояния = Новый Картинка; - КонецЕсли; - - ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; - ОтображениеСостояния.Видимость = ОтображатьСостояние; - ОтображениеСостояния.ДополнительныйРежимОтображения = - ?(ОтображатьСостояние, ДополнительныйРежимОтображения.Неактуальность, ДополнительныйРежимОтображения.НеИспользовать); - ОтображениеСостояния.Картинка = КартинкаСостояния; - ОтображениеСостояния.Текст = ТекстСостояния; - - Элементы.ОтчетТабличныйДокумент.ТолькоПросмотр = ОтображатьСостояние - Или Элементы.ОтчетТабличныйДокумент.Вывод = ИспользованиеВывода.Запретить; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Сервер @@ -1517,29 +1517,197 @@ Элементы.Показатель.Ширина = 0; КонецПроцедуры +&НаСервере +Функция КонтекстВариантаОтчета() + Если РежимРасшифровки Тогда + Возврат ""; + КонецЕсли; + + Если Параметры.Свойство("КонтекстВарианта") + И Параметры.КонтекстВарианта <> Неопределено Тогда + + Возврат Параметры.КонтекстВарианта; + КонецЕсли; + + СвойстваИнтерфейса = СтрРазделить("ПараметрКоманды, Отбор", ", ", Ложь); + + Для Каждого СвойствоИнтерфейса Из СвойстваИнтерфейса Цикл + + ЗначениеСвойства = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, СвойствоИнтерфейса); + Если ЗначениеСвойства = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ЗначениеСвойства) Тогда + + Возврат ЗначениеСвойства.Метаданные().ПолноеИмя(); + + ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("Массив") + И ЗначениеСвойства.Количество() > 0 + И ОбщегоНазначения.ЗначениеСсылочногоТипа(ЗначениеСвойства[0]) Тогда + + Возврат ЗначениеСвойства[0].Метаданные().ПолноеИмя(); + + ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("Структура") Тогда + + Для Каждого ЭлементСтруктуры Из ЗначениеСвойства Цикл + + ЗначениеЭлемента = ЭлементСтруктуры.Значение; + + Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ЗначениеЭлемента) Тогда + + Возврат ЗначениеЭлемента.Метаданные().ПолноеИмя(); + + ИначеЕсли ТипЗнч(ЗначениеЭлемента) = Тип("Массив") + И ЗначениеЭлемента.Количество() > 0 + И ОбщегоНазначения.ЗначениеСсылочногоТипа(ЗначениеЭлемента[0]) Тогда + + Возврат ЗначениеЭлемента[0].Метаданные().ПолноеИмя(); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + ОписаниеКоманды = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ОписаниеКоманды"); + + Если ТипЗнч(ОписаниеКоманды) = Тип("Структура") Тогда + + ОписаниеТипаКонтекста = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ОписаниеКоманды, "ТипПараметра"); + ТипыКонтекста = ?(ТипЗнч(ОписаниеТипаКонтекста) = Тип("ОписаниеТипов"), ОписаниеТипаКонтекста.Типы(), Новый Массив); + + Если ТипыКонтекста.Количество() > 0 Тогда + Возврат Метаданные.НайтиПоТипу(ТипыКонтекста[0]).ПолноеИмя(); + КонецЕсли; + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +&НаСервере +Процедура УстановитьКлючНазначенияИспользования() + Если ЗначениеЗаполнено(КлючНазначенияИспользования) Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Параметры.КлючНазначенияИспользования) Тогда + КлючНазначенияИспользования = Параметры.КлючНазначенияИспользования; + ИначеЕсли ЗначениеЗаполнено(КонтекстВарианта) Тогда + КлючНазначенияИспользования = КонтекстВарианта + + ?(ЗначениеЗаполнено(Параметры.КлючВарианта), ".", "") + + Параметры.КлючВарианта; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура СохранитьПараметрыФормы() + ФормаПараметры = Новый Структура( + "КлючНазначенияИспользования, КлючПользовательскихНастроек, + |СформироватьПриОткрытии, ТолькоПросмотр, + |ФиксированныеНастройки, Раздел, Подсистема, ПодсистемаПредставление"); + ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры); + + ФормаПараметры.Вставить("Отбор", Новый Структура); + Если ТипЗнч(Параметры.Отбор) = Тип("Структура") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ФормаПараметры.Отбор, Параметры.Отбор, Истина); + Параметры.Отбор.Очистить(); + КонецЕсли; + + ФормаПараметры.КлючНазначенияИспользования = КлючНазначенияИспользования; +КонецПроцедуры + &НаСервере Процедура УстановитьКлючТекущегоВарианта(ОтчетПолноеИмя, ПредопределенныеВарианты) ВариантыПанелиКлючТекущегоВарианта = ПустойКлючВарианта(); - Если ЗначениеЗаполнено(Параметры.КлючВарианта) Тогда - КлючТекущегоВарианта = Параметры.КлючВарианта; + Если ЗначениеЗаполнено(КлючНазначенияИспользования) Тогда + КлючОбъекта = ОтчетПолноеИмя + "/" + КлючНазначенияИспользования + "/КлючТекущегоВарианта"; Иначе - Если Параметры.Свойство("ПараметрКоманды") - И ОбщегоНазначения.ЗначениеСсылочногоТипа(Параметры.ПараметрКоманды) Тогда - - ВладелецПолноеИмя = Параметры.ПараметрКоманды.Метаданные().ПолноеИмя(); - КлючОбъекта = ОтчетПолноеИмя + "/" + ВладелецПолноеИмя + "/КлючТекущегоВарианта"; - Иначе - КлючОбъекта = ОтчетПолноеИмя + "/КлючТекущегоВарианта"; - КонецЕсли; - - КлючТекущегоВарианта = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, ""); + КлючОбъекта = ОтчетПолноеИмя + "/КлючТекущегоВарианта"; КонецЕсли; - Если Не ЗначениеЗаполнено(КлючТекущегоВарианта) - И ПредопределенныеВарианты.Количество() > 0 Тогда + КлючТекущегоВарианта = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, ""); + + Если Не ЗначениеЗаполнено(КлючТекущегоВарианта) Тогда - КлючТекущегоВарианта = ПредопределенныеВарианты[0].Значение; + Если ЗначениеЗаполнено(Параметры.КлючВарианта) Тогда + КлючТекущегоВарианта = Параметры.КлючВарианта; + ИначеЕсли ПредопределенныеВарианты.Количество() > 0 Тогда + КлючТекущегоВарианта = ПредопределенныеВарианты[0].Значение; + КонецЕсли; + + КонецЕсли; + + // Сохраняется ключ контекстного варианты, который обычно исключен из интерфейса, + // т.е. Включен равен Ложь (см. Справочник.ПредопределенныеВариантыОтчетов.Включен = Ложь). + // + Если ЗначениеЗаполнено(КонтекстВарианта) Тогда + ВариантКонтекста = ?(ЗначениеЗаполнено(Параметры.КлючВарианта), Параметры.КлючВарианта, КлючТекущегоВарианта); + ВариантыКонтекста.Добавить(ВариантКонтекста); + КонецЕсли; + + Если ЗначениеЗаполнено(КонтекстВарианта) + И ЗначениеЗаполнено(Параметры.КлючВарианта) + И Параметры.КлючВарианта <> КлючТекущегоВарианта Тогда + + // Управление передается платформе - + // ключ варианта восстановится из стандартного хранилища. + Параметры.КлючВарианта = Неопределено; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция АдресСхемыОтчета(ОтчетОбъект) + АдресСхемы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "АдресСхемы", ""); + + Расшифровка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Расшифровка"); + + Если ТипЗнч(Расшифровка) = Тип("ОписаниеОбработкиРасшифровкиКомпоновкиДанных") Тогда + Настройки = ПолучитьИзВременногоХранилища(Расшифровка.Данные).Настройки; + АдресСхемы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Настройки.ДополнительныеСвойства, "АдресСхемы", ""); + КонецЕсли; + + ЭтоСхема = Ложь; + Если ЭтоАдресВременногоХранилища(АдресСхемы) Тогда + Схема = ПолучитьИзВременногоХранилища(АдресСхемы); + ЭтоСхема = (ТипЗнч(Схема) = Тип("СхемаКомпоновкиДанных")); + + Если ЭтоСхема Тогда + АдресСхемы = ПоместитьВоВременноеХранилище(Схема, УникальныйИдентификатор); + Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); + КонецЕсли; + КонецЕсли; + + Если Не ЭтоСхема Тогда + АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор); + КонецЕсли; + + Возврат АдресСхемы; +КонецФункции + +&НаСервере +Процедура УстановитьРазрешенияПользователя() + РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + НастройкиОтчета, "РазрешеноВыбиратьИНастраиватьВариантыБезСохранения", Ложь); + + ВидимостьКомандВариантовОтчетов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Параметры, "ВидимостьКомандВариантовОтчетов", Истина); + + Если РазрешеноВыбиратьИНастраиватьВариантыБезСохранения Тогда + + НастройкиОтчета.РазрешеноИзменятьВарианты = Истина; + НастройкиОтчета.РазрешеноВыбиратьВарианты = Истина; + + ИначеЕсли Не ВидимостьКомандВариантовОтчетов Тогда + + НастройкиОтчета.РазрешеноИзменятьВарианты = Ложь; + НастройкиОтчета.РазрешеноВыбиратьВарианты = Ложь; + + КонецЕсли; + + Если НастройкиОтчета.РазрешеноИзменятьВарианты + И Не ВариантыОтчетовПовтИсп.ПравоДобавления() Тогда + + НастройкиОтчета.РазрешеноИзменятьВарианты = Ложь; КонецЕсли; КонецПроцедуры @@ -1560,12 +1728,13 @@ ИначеЕсли Переформировать Тогда - ОтобразитьСостояниеОтчета(НСтр("ru = 'Отчет формируется...'"), БиблиотекаКартинок.ДлительнаяОперация48); + ОтчетыКлиентСервер.ОтобразитьСостояниеОтчета( + ЭтотОбъект, НСтр("ru = 'Отчет формируется...'"), БиблиотекаКартинок.ДлительнаяОперация48); ИначеЕсли ПараметрыОбновления.ВариантМодифицирован Или ПараметрыОбновления.ПользовательскиеНастройкиМодифицированы Тогда - ОтобразитьСостояниеОтчета(НСтр("ru = 'Изменились настройки. Нажмите ""Сформировать"" для получения отчета.'")); + ОтчетыКлиентСервер.ОповеститьОИзмененииНастроек(ЭтотОбъект); КонецЕсли; КонецЕсли; @@ -1626,9 +1795,18 @@ ОтчетыСервер.УстановитьДоступныеЗначения(ОтчетОбъект, ЭтотОбъект); ОтчетыСервер.ИнициализироватьПредопределенныеПараметрыВывода(НастройкиОтчета, Отчет.КомпоновщикНастроек.Настройки); + Если ПараметрыЗагрузки.ВариантМодифицирован Тогда + ВариантМодифицирован = Истина; + КонецЕсли; + + Если ПараметрыЗагрузки.ПользовательскиеНастройкиМодифицированы Тогда + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; + ДополнительныеСвойства = Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства; ДополнительныеСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); + ДополнительныеСвойства.Вставить("КонтекстВарианта", КонтекстВарианта); // Подготовка к предварительной инициализации компоновщика (используется при расшифровке). Если НастройкиОтчета.СхемаМодифицирована Тогда @@ -1643,15 +1821,7 @@ НастройкиОтчета.Вставить("ФормаНастроекИмяСтраницы", ПараметрыЗагрузки.ФормаНастроекИмяСтраницы); КонецЕсли; - УстановитьУсловияОтборов(ПараметрыЗагрузки); - - Если ПараметрыЗагрузки.ВариантМодифицирован Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - - Если ПараметрыЗагрузки.ПользовательскиеНастройкиМодифицированы Тогда - ПользовательскиеНастройкиМодифицированы = Истина; - КонецЕсли; + ОтчетыСервер.УстановитьУсловияОтборов(ПараметрыЗагрузки, Отчет.КомпоновщикНастроек); Если НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек Тогда НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек = Ложь; @@ -1687,34 +1857,6 @@ ПараметрыЗагрузки.Вставить("ОтчетОбъектИлиПолноеИмя", НастройкиОтчета.ПолноеИмя); КонецПроцедуры -&НаСервере -Процедура УстановитьУсловияОтборов(ПараметрыЗагрузки) - УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗагрузки, "УсловияОтборов"); - Если УсловияОтборов = Неопределено Тогда - Возврат; - КонецЕсли; - - Настройки = Отчет.КомпоновщикНастроек.Настройки; - ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; - - Для Каждого Условие Из УсловияОтборов Цикл - ЭлементПользовательскойНастройки = ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(Условие.Ключ); - ЭлементПользовательскойНастройки.ВидСравнения = Условие.Значение; - - Если ОтчетыКлиентСервер.ЭтоВидСравненияСписка(ЭлементПользовательскойНастройки.ВидСравнения) - И ТипЗнч(ЭлементПользовательскойНастройки.ПравоеЗначение) <> Тип("СписокЗначений") Тогда - - ЭлементПользовательскойНастройки.ПравоеЗначение = ОтчетыКлиентСервер.ЗначенияСписком( - ЭлементПользовательскойНастройки.ПравоеЗначение); - КонецЕсли; - - ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( - Настройки, ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,, ПользовательскиеНастройки); - - ЗаполнитьЗначенияСвойств(ЭлементНастройки, ЭлементПользовательскойНастройки, "ВидСравнения, ПравоеЗначение"); - КонецЦикла; -КонецПроцедуры - &НаСервере Процедура ПоказатьОшибкиФормирования(ИнформацияОбОшибке) Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда @@ -1728,7 +1870,8 @@ ПодробноеПредставлениеОшибки = ""; КонецЕсли; - ОтобразитьСостояниеОтчета(ОписаниеОшибки); + ОтчетыКлиентСервер.ОтобразитьСостояниеОтчета(ЭтотОбъект, ОписаниеОшибки); + Если Не ПустаяСтрока(ПодробноеПредставлениеОшибки) Тогда ВариантыОтчетов.ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Предупреждение, ПодробноеПредставлениеОшибки, НастройкиОтчета.ВариантСсылка); КонецЕсли; @@ -1743,6 +1886,8 @@ ПараметрыПоиска = Новый Структура; ПараметрыПоиска.Вставить("Отчеты", ОтчетыСервер.ЗначениеВМассив(НастройкиОтчета.ОтчетСсылка)); ПараметрыПоиска.Вставить("ТолькоЛичные", Истина); + ПараметрыПоиска.Вставить("Контекст", КонтекстВарианта); + ТаблицаВариантов = ВариантыОтчетов.ТаблицаВариантовОтчетов(ПараметрыПоиска); Если НастройкиОтчета.Внешний Тогда // Добавить предопределенные варианты внешнего отчета в таблицу вариантов. Для Каждого ЭлементСписка Из НастройкиОтчета.ПредопределенныеВарианты Цикл @@ -1754,6 +1899,8 @@ ТаблицаВариантов.Свернуть("Ссылка, КлючВарианта, Наименование, Автор, ТолькоДляАвтора"); ТаблицаВариантов.Сортировать("Наименование Возр, КлючВарианта Возр"); + ОтчетыСервер.ДобавитьВариантыКонтекста(НастройкиОтчета.ОтчетСсылка, ТаблицаВариантов, ВариантыКонтекста); + ГраницаМеню = ВариантыФормы.Количество() - 1; Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл Если СтрокаТаблицы.ТолькоДляАвтора = Истина @@ -1809,10 +1956,12 @@ Найденные = ВариантыФормы.НайтиСтроки(Новый Структура("Найден", Ложь)); Для Каждого ВариантФормы Из Найденные Цикл Кнопка = Элементы.Найти(ВариантФормы.ИмяКоманды); + Кнопка.Пометка = Ложь; Кнопка.Видимость = Ложь; // Подменю Еще (Все действия). КнопкаЕще = Элементы.Найти(ВариантФормы.ИмяКоманды + "Еще"); + КнопкаЕще.Пометка = Ложь; КнопкаЕще.Видимость = Ложь; КонецЦикла; @@ -1833,9 +1982,10 @@ НастройкиОтчета.Вставить("Пользовательский", Ложь); НастройкиОтчета.Вставить("ТипОтчета", Неопределено); - Запрос = Новый Запрос(" - |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ВариантыОтчетов.Ссылка КАК ВариантСсылка, + | ВариантыОтчетов.Представление КАК Наименование, | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров, | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйСсылка, | ВЫБОР @@ -1850,8 +2000,8 @@ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ВариантыОтчетов.Отчет = &Отчет - | И ВариантыОтчетов.КлючВарианта = &КлючВарианта - |"); + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"); + Запрос.УстановитьПараметр("Отчет", НастройкиОтчета.ОтчетСсылка); Запрос.УстановитьПараметр("КлючВарианта", КлючТекущегоВарианта); @@ -1882,4 +2032,14 @@ Возврат " - "; КонецФункции +&НаКлиенте +Процедура ПраваПользователей(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеДоступомСлужебныйКлиент"); + МодульУправлениеДоступомСлужебныйКлиент.ПоказатьПраваПользователейОтчета(НастройкиОтчета.ОтчетСсылка); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаПоиска/Module.bsl b/SSL/src/CommonForms/ФормаПоиска/Module.bsl index a033cd468..eb6db8ddd 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Module.bsl +++ b/SSL/src/CommonForms/ФормаПоиска/Module.bsl @@ -281,13 +281,13 @@ КонецПроцедуры // Параметры: -// РезультатыПоиска - Массив из Структура - где: -// * Ссылка - Строка - -// * ОписаниеHTML - Строка - -// * Представление - Строка - +// РезультатыПоиска - Массив из Структура: +// * Ссылка - Строка +// * ОписаниеHTML - Строка +// * Представление - Строка // // Возвращаемое значение: -// Строка - +// Строка // &НаСервере Функция НоваяHTMLСтраницаРезультата(РезультатыПоиска) diff --git a/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl b/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl index 27942b4ce..c429efb19 100644 --- a/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl +++ b/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl @@ -15,19 +15,19 @@ // получаемых из приложения, в автономном рабочем месте. // // Параметры: -// ТекущийОбъект - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект, -// РегистрСведенийМенеджерЗаписи, -// РегистрНакопленияМенеджерЗаписи, -// РегистрБухгалтерииМенеджерЗаписи, -// РегистрРасчетаМенеджерЗаписи - менеджер записи. -// ТолькоПросмотр - Булево - Свойство ТолькоПросмотр формы. +// ТекущийОбъект - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект +// - РегистрСведенийМенеджерЗаписи +// - РегистрНакопленияМенеджерЗаписи +// - РегистрБухгалтерииМенеджерЗаписи +// - РегистрРасчетаМенеджерЗаписи - менеджер записи. +// ТолькоПросмотр - Булево - свойство ТолькоПросмотр формы. // Процедура ОбъектПриЧтенииНаСервере(ТекущийОбъект, ТолькоПросмотр) Экспорт diff --git a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl index 4f3a173ac..5bddfb0c1 100644 --- a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl @@ -565,27 +565,14 @@ Функция РасписаниеСинхронизацииДанныхПоУмолчанию() Экспорт // Каждый час Месяцы = Новый Массив; - Месяцы.Добавить(1); - Месяцы.Добавить(2); - Месяцы.Добавить(3); - Месяцы.Добавить(4); - Месяцы.Добавить(5); - Месяцы.Добавить(6); - Месяцы.Добавить(7); - Месяцы.Добавить(8); - Месяцы.Добавить(9); - Месяцы.Добавить(10); - Месяцы.Добавить(11); - Месяцы.Добавить(12); + Для Сч = 1 По 12 Цикл + Месяцы.Добавить(Сч); + КонецЦикла; ДниНедели = Новый Массив; - ДниНедели.Добавить(1); - ДниНедели.Добавить(2); - ДниНедели.Добавить(3); - ДниНедели.Добавить(4); - ДниНедели.Добавить(5); - ДниНедели.Добавить(6); - ДниНедели.Добавить(7); + Для Сч = 1 По 7 Цикл + ДниНедели.Добавить(Сч); + КонецЦикла; Расписание = Новый РасписаниеРегламентногоЗадания; Расписание.Месяцы = Месяцы; @@ -628,8 +615,8 @@ // 4. Не входит в список исключений. // // Параметры: -// ОбъектМетаданных - Метаданные проверяемого объекта -// Только просмотр - Булево - Если Истина, то объект доступен только для просмотра. +// ОбъектМетаданных - ОбъектМетаданных - метаданные проверяемого объекта +// ТолькоПросмотр - Булево - если Истина, то объект доступен только для просмотра. // Процедура ОпределитьВозможностьИзмененияДанных(ОбъектМетаданных, ТолькоПросмотр) Экспорт diff --git a/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl index 338c6a24c..7f80b7f1c 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl @@ -13,7 +13,7 @@ // Параметры подключения к администрируемому кластеру серверов. // // Возвращаемое значение: -// Структура - где: +// Структура: // * ТипПодключения - Строка - возможные значения: // "COM" - при подключении к агенту сервера с использованием COM-объекта V8*.ComConnector; // "RAS" - при подключении к серверу администрирования (ras) с использованием консольного @@ -57,7 +57,7 @@ // Параметры подключения к администрируемой информационной базе кластера. // // Возвращаемое значение: -// Структура - где: +// Структура: // * ИмяВКластере - Строка - имя администрируемой информационной базы в кластере серверов, // * ИмяАдминистратораИнформационнойБазы - Строка - имя пользователя информационной базы с правами // администратора (если для информационной базы не задан список пользователей ИБ - используется @@ -111,7 +111,7 @@ // Свойства блокировки сеансов и регламентных заданий информационной базы. // // Возвращаемое значение: -// Структура - где: +// Структура: // * БлокировкаСеансов - Булево - флаг установки блокировки новых сеансов с информационной базой, // * ДатаС - Дата - момент начала блокировки новых сеансов с информационной базой, // * ДатаПо - Дата - момент окончания блокировки новых сеансов с информационной базой, @@ -146,7 +146,7 @@ // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера // // Возвращаемое значение: -// Структура - см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий +// см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий // Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт @@ -280,7 +280,7 @@ // Свойства сеанса информационной базы. // // Возвращаемое значение: -// Структура - где: +// Структура: // * Номер - Число - номер сеанса. Уникален среди всех сеансов информационной базы, // * ИмяПользователя - Строка - имя аутентифицированного пользователя информационной базы, // * ИмяКлиентскогоКомпьютера - Строка - имя или сетевой адрес компьютера, установившего @@ -327,18 +327,20 @@ // СУБД не захвачено - значение равно 0, // * МоментЗахватаСоединенияСУБД - Дата - момент времени, когда соединение с СУБД было последний раз // захвачено другим сеансом. -// * ОписаниеСоединения - Структура, Неопределено - содержит описание соединения, которому назначен сеанс, +// * ОписаниеСоединения - Структура +// - Неопределено - содержит описание соединения, которому назначен сеанс, // описание полей см. АдминистрированиеКластера.СвойстваОписанияСоединения(). Иначе - Неопределено. // * Спящий - Булево - сеанс находится в спящем режиме. -// * ЗавершитьЧерез - Число - Интервал времени в секундах, по истечении которого спящий сеанс завершается. -// * ЗаснутьЧерез - Число - Интервал времени в секундах, по истечении которого неактивный сеанс переводится в спящий +// * ЗавершитьЧерез - Число - интервал времени в секундах, по истечении которого спящий сеанс завершается. +// * ЗаснутьЧерез - Число - интервал времени в секундах, по истечении которого неактивный сеанс переводится в спящий // режим. // * ПрочитаноСДиска - Число - содержит количество данных в байтах, прочитанных с диска сеансом с момента начала сеанса. -// * ПрочитаноСДискаВТекущемВызове - Число - Содержит количество данных в байтах, прочитанных с диска с начала +// * ПрочитаноСДискаВТекущемВызове - Число - содержит количество данных в байтах, прочитанных с диска с начала // выполнения текущего вызова. // * ПрочитаноСДискаЗа5Минут - Число - содержит количество данных в байтах, прочитанных с диска сеансом за последние // 5 минут. -// * Лицензия - Структура, Неопределено - содержит информацию о клиентской лицензии, используемой этим сеансом, +// * Лицензия - Структура +// - Неопределено - содержит информацию о клиентской лицензии, используемой этим сеансом, // описание полей см. АдминистрированиеКластера.СвойстваЛицензии(). // Неопределено, если сеанс не использует лицензию. // * ЗанятоПамяти - Число - содержит объем памяти в байтах, занятый в процессе вызовов с момента начала сеанса. @@ -350,7 +352,8 @@ // выполнения текущего вызова. // * ЗаписаноНаДискЗа5Минут - Число - содержит количество данных в байтах, записанных на диск сеансом за последние 5 // минут. -// * РабочийПроцесс - Структура, Неопределено - содержит рабочий процесс, с которым установлено соединение, если +// * РабочийПроцесс - Структура +// - Неопределено - содержит рабочий процесс, с которым установлено соединение, если // сеанс назначен соединению, описание полей см. АдминистрированиеКластера.СвойстваРабочегоПроцесса(). // Иначе - Неопределено. // @@ -405,8 +408,8 @@ // Свойства лицензии. // // Возвращаемое значение: -// Структура - структура с полями: -// * ИмяФайла - Строка - Содержит полное имя используемого файла программной лицензии. +// Структура: +// * ИмяФайла - Строка - содержит полное имя используемого файла программной лицензии. // * ПолноеПредставление - Строка - содержит локализованное строковое представление лицензии, как в свойстве // "Лицензия" диалога свойств сеанса или свойств рабочего процесса консоли кластера // * КраткоеПредставление - Строка - содержит локализованное строковое представление лицензии, как в колонке @@ -425,7 +428,7 @@ // является сетевым, лицензия получена через менеджер лицензий Aladdin License Manager; Ложь в // противном случае. // * АдресПроцесса - Строка - содержит адрес сервера, на котором запущен процесс, получивший лицензию. -// * ИдентификаторПроцесса - Строка - Содержит идентификатор процесса, получившего лицензию, присвоенный ему +// * ИдентификаторПроцесса - Строка - содержит идентификатор процесса, получившего лицензию, присвоенный ему // операционной системой. // * ПортПроцесса - Число - содержит номер IP-порта серверного процесса, получившего лицензию. // * СерияКлюча - Строка - содержит серию ключа защиты программы для аппаратной лицензии или регистрационный номер @@ -455,7 +458,7 @@ // Свойства описания соединения. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * ИмяПриложения - Строка - содержит имя приложения, установившего соединение с фермой серверов "1С:Предприятия". // * Блокировка - Число - содержит идентификатор соединения, блокирующего работу данного соединения (в Сервисе // транзакционных блокировок). @@ -486,50 +489,51 @@ // Свойства рабочего процесса. // // Возвращаемое значение: -// Структура - структура с полями: -// * ДоступнаяПроизводительность - Число - Средняя за последние 5 минут доступная производительность. Определяется +// Структура: +// * ДоступнаяПроизводительность - Число - средняя за последние 5 минут доступная производительность. Определяется // по времени реакции рабочего процесса на эталонный запрос. В соответствии с доступной // производительностью кластер серверов принимает решение о распределении клиентов между рабочими // процессами. -// * ЗатраченоКлиентом - Число - Показывает среднее время, затрачиваемое рабочим процессом на обратные вызовы +// * ЗатраченоКлиентом - Число - показывает среднее время, затрачиваемое рабочим процессом на обратные вызовы // методов клиентского приложения при выполнении одного клиентского обращения -// * РеакцияСервера - Число - Показывает среднее время обслуживания рабочим процессом одного клиентского обращения. +// * РеакцияСервера - Число - показывает среднее время обслуживания рабочим процессом одного клиентского обращения. // Оно складывается из: значений свойств ЗатраченоСервером, ЗатраченоСУБД, ЗатраченоМенеджеромБлокировок, // ЗатраченоКлиентом. -// * ЗатраченоСУБД - Число - Показывает среднее время, затрачиваемое рабочим процессом на обращения к серверу баз +// * ЗатраченоСУБД - Число - показывает среднее время, затрачиваемое рабочим процессом на обращения к серверу баз // данных при выполнении одного клиентского обращения. -// * ЗатраченоМенеджеромБлокировок - Число - Показывает среднее время обращения к менеджеру блокировок. -// * ЗатраченоСервером - Число - Показывает среднее время, затрачиваемое самим рабочим процессом на выполнение +// * ЗатраченоМенеджеромБлокировок - Число - показывает среднее время обращения к менеджеру блокировок. +// * ЗатраченоСервером - Число - показывает среднее время, затрачиваемое самим рабочим процессом на выполнение // одного клиентского обращения. -// * КлиентскихПотоков - Число - Показывает среднее количество клиентских потоков, исполняемых рабочим процессом кластера. -// * ОтносительнаяПроизводительность - Число - Относительная производительность процесса. Может находиться в +// * КлиентскихПотоков - Число - показывает среднее количество клиентских потоков, исполняемых рабочим процессом кластера. +// * ОтносительнаяПроизводительность - Число - относительная производительность процесса. Может находиться в // диапазоне от 1 до 1000. Используется в процессе выбора рабочего процесса, к которому будет // подсоединен очередной клиент. Клиенты распределяются между рабочими процессами пропорционально // производительности рабочих процессов. -// * Соединений - Число - Количество соединений рабочего процесса с пользовательскими приложениями. -// * ИмяКомпьютера - Строка - Содержит имя или IP-адрес компьютера, на котором должен быть запущен рабочий процесс. -// * Включен - Булево - Устанавливается кластером при необходимости запустить или остановить рабочий процесс. +// * Соединений - Число - количество соединений рабочего процесса с пользовательскими приложениями. +// * ИмяКомпьютера - Строка - содержит имя или IP-адрес компьютера, на котором должен быть запущен рабочий процесс. +// * Включен - Булево - устанавливается кластером при необходимости запустить или остановить рабочий процесс. // Истина - процесс должен быть запущен и будет запущен при возможности. // Ложь - процесс должен быть остановлен и будет остановлен после отсоединения всех пользователей или // после истечения времени, заданного настройками кластера. -// * Порт - Число - Содержит номер основного IP-порта рабочего процесса. Этот порт выделяется динамически при старте +// * Порт - Число - содержит номер основного IP-порта рабочего процесса. Этот порт выделяется динамически при старте // рабочего процесса из диапазонов портов, определенных для соответствующего рабочего сервера. -// * ПревышениеНадКритическимЗначением - Число - Содержит время, в течение которого объем виртуальной памяти +// * ПревышениеНадКритическимЗначением - Число - содержит время, в течение которого объем виртуальной памяти // рабочего процесса превышает критическое значение, установленное для кластера, в секундах. -// * ЗанятоПамяти - Число - Содержит объем виртуальной памяти, занимаемой рабочим процессом, в килобайтах. -// * Идентификатор - Строка - Идентификатор активного рабочего процесса в терминах операционной системы. -// * Запущен - Число - Состояние рабочего процесса. +// * ЗанятоПамяти - Число - содержит объем виртуальной памяти, занимаемой рабочим процессом, в килобайтах. +// * Идентификатор - Строка - идентификатор активного рабочего процесса в терминах операционной системы. +// * Запущен - Число - состояние рабочего процесса. // 0 - процесс неактивен (либо не загружен в память, либо не может выполнять клиентские запросы); // 1 - процесс активен (работает). -// * КоличествоВызововПоКоторымПосчитанаСтатистика - Число - Количество вызовов, по которым посчитана статистика. -// * МоментЗапуска - Дата - Содержит момент запуска рабочего процесса. Если процесс не запущен, то пустая дата. -// * Использование - Число - Определяет использование рабочего процесса кластером. Устанавливается администратором. +// * КоличествоВызововПоКоторымПосчитанаСтатистика - Число - количество вызовов, по которым посчитана статистика. +// * МоментЗапуска - Дата - содержит момент запуска рабочего процесса. Если процесс не запущен, то пустая дата. +// * Использование - Число - определяет использование рабочего процесса кластером. Устанавливается администратором. // Возможные значения: // 0 - не использовать, процесс не должен быть запущен; // 1 - использовать, процесс должен быть запущен; // 2 - использовать как резервный, процесс должен быть запущен только при невозможности запуска // процесса со значением 1 этого свойства. -// * Лицензия - Структура, Неопределено - Содержит информацию о серверной лицензии, используемой рабочим процессом. +// * Лицензия - Структура +// - Неопределено - содержит информацию о серверной лицензии, используемой рабочим процессом. // Неопределено - рабочий процесс не использует серверную лицензию. // Функция СвойстваРабочегоПроцесса() Экспорт @@ -571,11 +575,11 @@ // Параметры: // ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера -// Фильтр - Массив из см. АдминистрированиеКластера.ФильтрСеансов - +// Фильтр - Массив из см. АдминистрированиеКластера.ФильтрСеансов // - см. АдминистрированиеКластера.ФильтрСеансов // // Возвращаемое значение: -// Массив из см. АдминистрированиеКластера.СвойстваСеанса - +// Массив из см. АдминистрированиеКластера.СвойстваСеанса // Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач Фильтр = Неопределено) Экспорт @@ -602,8 +606,8 @@ // // Параметры: // ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера -// ПараметрыАдминистрированияИБ - Структура - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера -// Фильтр - Массив из см. АдминистрированиеКластера.ФильтрСеансов - +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера +// Фильтр - Массив из см. АдминистрированиеКластера.ФильтрСеансов // - см. АдминистрированиеКластера.ФильтрСеансов // Процедура УдалитьСеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, @@ -629,7 +633,7 @@ // Свойства соединения с информационной базой. // // Возвращаемое значение: -// Структура - где: +// Структура: // * Номер - Число - номер соединения с информационной базой. // * ИмяПользователя - Строка - имя пользователя 1С:Предприятия, подсоединенного к информационной базе. // * ИмяКлиентскогоКомпьютера - Строка - имя компьютера, с которого установлено соединение. @@ -662,21 +666,21 @@ // * ДлительностьТекущегоВызоваСУБД - Число - длительность текущего вызова сервера СУБД. // * ДлительностьСерверныхВызововЗа5Минут - Число - длительность серверных вызовов соединения за последние 5 минут. // * ДлительностьВызововСУБДЗа5Минут - Число - длительность вызовов соединения СУБД за последние 5 минут. -// * ПрочитаноСДиска - Число - Содержит количество данных в байтах, прочитанных с диска сеансом с момента начала сеанса. -// * ПрочитаноСДискаВТекущемВызове - Число - Содержит количество данных в байтах, прочитанных с диска с начала +// * ПрочитаноСДиска - Число - содержит количество данных в байтах, прочитанных с диска сеансом с момента начала сеанса. +// * ПрочитаноСДискаВТекущемВызове - Число - содержит количество данных в байтах, прочитанных с диска с начала // выполнения текущего вызова. -// * ПрочитаноСДискаЗа5Минут - Число - Содержит количество данных в байтах, прочитанных с диска сеансом за +// * ПрочитаноСДискаЗа5Минут - Число - содержит количество данных в байтах, прочитанных с диска сеансом за // последние 5 минут. -// * ЗанятоПамяти - Число - Содержит объем памяти в байтах, занятый в процессе вызовов с момента начала сеанса. -// * ЗанятоПамятиВТекущемВызове - Число - Содержит объем памяти в байтах, занятый с начала выполнения текущего +// * ЗанятоПамяти - Число - содержит объем памяти в байтах, занятый в процессе вызовов с момента начала сеанса. +// * ЗанятоПамятиВТекущемВызове - Число - содержит объем памяти в байтах, занятый с начала выполнения текущего // вызова. Если в данный момент вызов не выполняется, содержит 0. -// * ЗанятоПамятиЗа5Минут - Число - Содержит объем памяти в байтах, занятый в процессе вызовов за последние 5 минут. -// * ЗаписаноНаДиск - Число - Содержит количество данных в байтах, записанных на диск сеансом с момента начала сеанса. -// * ЗаписаноНаДискВТекущемВызове - Число - Содержит количество данных в байтах, записанных на диск с начала +// * ЗанятоПамятиЗа5Минут - Число - содержит объем памяти в байтах, занятый в процессе вызовов за последние 5 минут. +// * ЗаписаноНаДиск - Число - содержит количество данных в байтах, записанных на диск сеансом с момента начала сеанса. +// * ЗаписаноНаДискВТекущемВызове - Число - содержит количество данных в байтах, записанных на диск с начала // выполнения текущего вызова. -// * ЗаписаноНаДискЗа5Минут - Число - Содержит количество данных в байтах, записанных на диск сеансом за +// * ЗаписаноНаДискЗа5Минут - Число - содержит количество данных в байтах, записанных на диск сеансом за // последние 5 минут. -// * УправлениеНаходитсяНаСервере - Число - Указывает, находится ли управление на сервере (0 - не находится, 1 - находится). +// * УправлениеНаходитсяНаСервере - Число - указывает, находится ли управление на сервере (0 - не находится, 1 - находится). // Функция СвойстваСоединения() Экспорт @@ -761,7 +765,8 @@ // Параметры: // ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера -// Фильтр - см. АдминистрированиеКластера.ФильтрСоединений, Массив из см. АдминистрированиеКластера.ФильтрСоединений +// Фильтр - Массив из см. АдминистрированиеКластера.ФильтрСоединений +// - см. АдминистрированиеКластера.ФильтрСоединений // Процедура РазорватьСоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач Фильтр = Неопределено) Экспорт @@ -817,7 +822,7 @@ // в параметре ПараметрыАдминистрированияКластера. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера // // Возвращаемое значение: @@ -898,7 +903,7 @@ // ИмяПрофиля - Строка - имя профиля безопасности, существование которого проверяется. // // Возвращаемое значение: -// Булево - +// Булево // Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт @@ -913,7 +918,7 @@ // Свойства профиля безопасности. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя профиля безопасности, // * Описание - Строка - описание профиля безопасности, // * ПрофильБезопасногоРежима - Булево - определяет возможность использования профиля безопасности @@ -1013,7 +1018,7 @@ // Свойства виртуального каталога, к которому предоставляется доступ. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * ЛогическийURL - Строка - логический URL каталога. // * ФизическийURL - Строка - физический URL каталога на сервере для размещения данных виртуального каталога. // * Описание - Строка - описание виртуального каталога. @@ -1039,7 +1044,7 @@ // Свойства COM-класса, к которому предоставляется доступ. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя COM-класса, используется в качестве ключа при поиске. // * Описание - Строка - описание COM-класса. // * ФайлМоникер - Строка - имя файла, по которому создается объект методом глобального контекста @@ -1066,21 +1071,19 @@ // Свойства внешней компоненты, к которой предоставляется доступ. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя внешней компоненты, используется в качестве ключа для поиска. // * Описание - Строка - описание внешней компоненты. -// * ХэшСумма - Строка - контрольная сумма разрешенной внешней компоненты, вычисленная алгоритмом SHA-1 и +// * ХешСумма - Строка - контрольная сумма разрешенной внешней компоненты, вычисленная алгоритмом SHA-1 и // преобразованная к строке base64. // Функция СвойстваВнешнейКомпоненты() Экспорт Результат = Новый Структура(); - Результат.Вставить("Имя"); Результат.Вставить("Описание"); - - Результат.Вставить("ХэшСумма"); - + Результат.Вставить("ХешСумма"); + Результат.Вставить("ХэшСумма"); // АПК:1036 для обратной совместимости Возврат Результат; КонецФункции @@ -1088,21 +1091,19 @@ // Свойства внешнего модуля, к которому предоставляется доступ. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя внешнего модуля, используется в качестве ключа для поиска. // * Описание - Строка - описание внешнего модуля. -// * ХэшСумма - Строка - контрольная сумма разрешенного внешнего модуля, вычисленная алгоритмом SHA-1 и +// * ХешСумма - Строка - контрольная сумма разрешенного внешнего модуля, вычисленная алгоритмом SHA-1 и // преобразованная к строке base64. // Функция СвойстваВнешнегоМодуля() Экспорт Результат = Новый Структура(); - Результат.Вставить("Имя"); Результат.Вставить("Описание"); - - Результат.Вставить("ХэшСумма"); - + Результат.Вставить("ХешСумма"); + Результат.Вставить("ХэшСумма"); // АПК:1036 для обратной совместимости Возврат Результат; КонецФункции @@ -1110,7 +1111,7 @@ // Свойства приложения операционной системы, к которому предоставляется доступ. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя приложения операционной системы, используется в качестве ключа для поиска. // * Описание - Строка - описание приложения операционной системы. // * ШаблонСтрокиЗапуска - Строка - шаблон строки запуска приложения (состоит из последовательности шаблонных слов, @@ -1132,7 +1133,7 @@ // Свойства Интернет-ресурса, к которому предоставляется доступ. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя интернет-ресурса, используется в качестве ключа для поиска. // * Описание - Строка - описание интернет-ресурса. // * Протокол - Строка - разрешаемый сетевой протокол. Возможные значения: @@ -1440,7 +1441,7 @@ // Для использования в функциях СеансыИнформационнойБазы, УдалитьСеансыИнформационнойБазы и аналогичных. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Свойство - Строка - имя свойства, по которому осуществляется фильтрация. // Допустимые значения - см. возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса. // * ВидСравнения - ВидСравнения - вид сравнения значений сеансов с указанным в условии фильтра. @@ -1457,7 +1458,13 @@ // ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), // ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), // ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений). -// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// * Значение - Число +// - Строка +// - Дата +// - Булево +// - СписокЗначений +// - Массив +// - Структура - значение, с которым // сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке // в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми // будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, @@ -1481,7 +1488,7 @@ // Для использования в функциях СоединенияСИнформационнойБазой, РазорватьСоединенияСИнформационнойБазой и аналогичных. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Свойство - Строка - имя свойства, по которому осуществляется фильтрация. // Допустимые значения - см. возвращаемое значение функции АдминистрированиеКластера.СвойстваСоединения. // * ВидСравнения - ВидСравнения - вид сравнения значений сеансов с указанным в условии фильтра. @@ -1498,7 +1505,13 @@ // ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), // ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), // ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений). -// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// * Значение - Число +// - Строка +// - Дата +// - Булево +// - СписокЗначений +// - Массив +// - Структура - значение, с которым // сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке // в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми // будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl index bfbfb98c4..86739caef 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl @@ -670,7 +670,7 @@ // // Параметры: // ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера -// ИмяПрофиля - Строка, имя профиля безопасности. +// ИмяПрофиля - Строка - имя профиля безопасности. // // Возвращаемое значение: // см. АдминистрированиеКластера.СвойстваПрофиляБезопасности @@ -859,7 +859,7 @@ КонецЕсли; КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'На рабочем сервере %1 не найден кластер %2'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'На рабочем сервере %1 не существует кластер %2'"), СоединениеСАгентомСервера.ConnectionString, ПортКластера); @@ -877,7 +877,7 @@ КонецЦикла; Если Результат.Количество() = 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдено активных рабочих процессов.'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не существует активных рабочих процессов.'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0")); КонецЕсли; @@ -893,7 +893,7 @@ КонецЕсли; КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не существует информационная база ""%3""'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0"), ИмяВКластере); @@ -932,7 +932,7 @@ ИмяВКластере, Кластер.HostName, Кластер.MainPort, ИмяАдминистратораИБ); Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""'"), + НСтр("ru = 'В кластере серверов %1:%2 не существует информационная база ""%3""'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0"), ИмяВКластере); КонецЕсли; @@ -1034,7 +1034,7 @@ КонецЕсли; КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найден профиль безопасности ""%3""'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не существует профиль безопасности ""%3""'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0"), ИмяПрофиля); @@ -1484,12 +1484,9 @@ Функция СловарьСвойствВнешнейКомпоненты() Результат = АдминистрированиеКластера.СвойстваВнешнейКомпоненты(); - Результат.Имя = "Name"; Результат.Описание = "Descr"; - - Результат.ХэшСумма = "AddInHash"; - + Результат.ХешСумма = "AddInHash"; Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции @@ -1497,12 +1494,9 @@ Функция СловарьСвойствВнешнегоМодуля() Результат = АдминистрированиеКластера.СвойстваВнешнегоМодуля(); - Результат.Имя = "Name"; Результат.Описание = "Descr"; - - Результат.ХэшСумма = "ExternalModuleHash"; - + Результат.ХешСумма = "ExternalModuleHash"; Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl index 977ab96a0..6c925ce6b 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl @@ -6,6 +6,8 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// +// Содержит устаревшую реализацию для программного интерфейса модуля АдминистрированиеКластераКлиентСервер. + #Область СлужебныйПрограммныйИнтерфейс #Область БлокировкаСеансовИЗаданий @@ -127,15 +129,14 @@ // Проверяет корректность параметров администрирования. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - Структура - описывающая параметры подключения к информационной базе, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной // в качестве значения параметра ПараметрыАдминистрированияКластера, -// ПроверятьПараметрыАдминистрированияКластера - Булево, флаг необходимости проверки параметров администрирования +// ПроверятьПараметрыАдминистрированияКластера - Булево - флаг необходимости проверки параметров администрирования // кластера, -// ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево, флаг необходимости проверки параметров +// ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево - флаг необходимости проверки параметров // администрирования кластера. // Процедура ПроверитьПараметрыАдминистрирования(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, @@ -723,7 +724,7 @@ // // Параметры: // ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера -// ИмяПрофиля - Строка, имя профиля безопасности. +// ИмяПрофиля - Строка - имя профиля безопасности. // // Возвращаемое значение: // см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности @@ -927,7 +928,7 @@ КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'На рабочем сервере %1 не найден кластер %2'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'На рабочем сервере %1 не существует кластер %2'"), СоединениеСАгентомСервера.ConnectionString, ПортКластера); @@ -942,7 +943,7 @@ КонецЕсли; КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдено активных рабочих процессов.'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не существует активных рабочих процессов.'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0")); @@ -960,7 +961,7 @@ КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не существует информационная база ""%3""'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0"), ИмяВКластере); @@ -991,7 +992,7 @@ КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не существует информационная база ""%3""'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0"), ИмяВКластере); @@ -1091,7 +1092,7 @@ КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найден профиль безопасности ""%3""'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не существует профиль безопасности ""%3""'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0"), ИмяПрофиля); @@ -1478,12 +1479,9 @@ Функция СловарьСвойствВнешнейКомпоненты() Результат = Новый Структура(); - Результат.Вставить("Имя", "Name"); Результат.Вставить("Описание", "Descr"); - - Результат.Вставить("ХэшСумма", "AddInHash"); - + Результат.Вставить("ХэшСумма", "AddInHash"); // АПК:1036 для обратной совместимости Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции @@ -1494,9 +1492,7 @@ Результат.Вставить("Имя", "Name"); Результат.Вставить("Описание", "Descr"); - - Результат.Вставить("ХэшСумма", "ExternalModuleHash"); - + Результат.Вставить("ХэшСумма", "ExternalModuleHash"); // АПК:1036 для обратной совместимости Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl index c1534fa96..448517f90 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl @@ -758,7 +758,7 @@ // Возвращает описания рабочих серверов. // // Параметры: -// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов, // ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера // Фильтр - Структура - параметры фильтрации рабочих серверов. // @@ -1732,12 +1732,9 @@ Функция СловарьСвойствВнешнейКомпоненты() Результат = АдминистрированиеКластера.СвойстваВнешнейКомпоненты(); - Результат.Имя = "name"; Результат.Описание = "descr"; - - Результат.ХэшСумма = "hash"; - + Результат.ХешСумма = "hash"; Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции @@ -1745,12 +1742,9 @@ Функция СловарьСвойствВнешнегоМодуля() Результат = АдминистрированиеКластера.СвойстваВнешнегоМодуля(); - Результат.Имя = "name"; Результат.Описание = "descr"; - - Результат.ХэшСумма = "hash"; - + Результат.ХешСумма = "hash"; Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции @@ -2276,7 +2270,7 @@ Если Не ФайлКлиента.Существует() Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно выполнить операцию администрирования кластера серверов по причине: файл %1 не найден + НСтр("ru = 'Невозможно выполнить операцию администрирования кластера серверов по причине: не существует файл %1 | |Для администрирования кластера через сервер администрирования (ras) требуется установить на данном |компьютере клиент сервера администрирования (rac). diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl index bec3a0152..a09164107 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl @@ -6,6 +6,8 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// +// Содержит устаревшую реализацию для программного интерфейса модуля АдминистрированиеКластераКлиентСервер. + #Если Не ВебКлиент И НЕ МобильныйКлиент Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -15,14 +17,11 @@ // Возвращает текущее состояние блокировки сеансов и регламентных заданий для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера // // Возвращаемое значение: -// Структура - , описывающая состояние блокировки сеансов и регламентных заданий, -// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий // Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт @@ -55,12 +54,9 @@ // Устанавливает новое состояние блокировки сеансов и регламентных заданий для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), -// СвойстваБлокировкиСеансовИЗаданий - Структура, описывающая состояние блокировки сеансов и регламентных заданий, -// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера +// СвойстваБлокировкиСеансовИЗаданий - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий // Процедура УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач СвойстваБлокировкиСеансовИЗаданий) Экспорт @@ -74,16 +70,15 @@ // Проверяет корректность параметров администрирования. // +// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля были указаны в структуре, +// переданной в качестве значения параметра ПараметрыАдминистрированияКластера. +// // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера, -// ПроверятьПараметрыАдминистрированияКластера - Булево, флаг необходимости проверки параметров администрирования -// кластера, -// ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево, флаг необходимости проверки параметров +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера +// ПроверятьПараметрыАдминистрированияКластера - Булево - флаг необходимости проверки параметров администрирования +// кластера +// ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево - флаг необходимости проверки параметров // администрирования кластера. // Процедура ПроверитьПараметрыАдминистрирования(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, @@ -116,13 +111,11 @@ // Возвращает текущее состояние блокировки регламентных заданий для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера // // Возвращаемое значение: -// Булево - +// Булево // Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт @@ -136,11 +129,9 @@ // Устанавливает новое состояние блокировки регламентных заданий для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), -// БлокировкаРегламентныхЗаданий - Булево, флаг установки блокировки регламентных заданий информационной базы. +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера +// БлокировкаРегламентныхЗаданий - Булево - флаг установки блокировки регламентных заданий информационной базы. // Процедура УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач БлокировкаРегламентныхЗаданий) Экспорт @@ -347,13 +338,11 @@ // Возвращает имя профиля безопасности, назначенного для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера // // Возвращаемое значение: -// Строка - , имя профиля безопасности, назначенного для информационной базы. Если +// Строка - имя профиля безопасности, назначенного для информационной базы. Если // для информационной базы не назначен профиль безопасности - возвращается пустая строка. // Функция ПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт @@ -374,13 +363,11 @@ // безопасного режима. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера // // Возвращаемое значение: -// Строка - , имя профиля безопасности, назначенного для информационной базы в качестве профиля +// Строка - имя профиля безопасности, назначенного для информационной базы в качестве профиля // безопасности безопасного режима. Если для информационной базы не назначен профиль безопасности - возвращается // пустая строка. // @@ -401,11 +388,9 @@ // Назначает для информационной базы использование профиля безопасности. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), -// ИмяПрофиля - Строка, имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера +// ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет // отключено использование профиля безопасности. // Процедура УстановитьПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач ИмяПрофиля = "") Экспорт @@ -427,11 +412,9 @@ // Назначает для информационной базы использование профиля безопасности безопасного режима. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), -// ИмяПрофиля - Строка, имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера +// ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет // отключено использование профиля безопасности безопасного режима. // Процедура УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач ИмяПрофиля = "") Экспорт @@ -453,9 +436,8 @@ // Проверяет существование в кластере серверов профиля безопасности. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ИмяПрофиля - Строка, имя профиля безопасности, существование которого проверяется. +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ИмяПрофиля - Строка - имя профиля безопасности, существование которого проверяется. // Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт @@ -472,13 +454,11 @@ // Возвращает свойства профиля безопасности. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ИмяПрофиля - Строка, имя профиля безопасности. +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ИмяПрофиля - Строка - имя профиля безопасности. // // Возвращаемое значение: -// Структура, описывающая профиль безопасности, описание - см. -// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности // Функция ПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт @@ -574,9 +554,8 @@ // Удаляет профиль безопасности. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ИмяПрофиля - Строка, имя профиля безопасности. +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ИмяПрофиля - Строка - имя профиля безопасности. // Процедура УдалитьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт @@ -601,14 +580,12 @@ // Возвращает внутренний идентификатор информационной базы. // // Параметры: -// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИнформационнойБазы - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ИдентификаторКластера - Строка -внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИнформационнойБазы - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера // // Возвращаемое значение: -// Строка - , внутренний идентификатор информационной базы. +// Строка - внутренний идентификатор информационной базы. // Функция ИдентификаторИнформационнойБазы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы) Экспорт @@ -627,10 +604,9 @@ // Возвращает описания информационных баз. // // Параметры: -// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// Фильтр - Структура, параметры фильтрации информационных баз. +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// Фильтр - Структура - параметры фильтрации информационных баз. // // Возвращаемое значение: // Массив(Структура). @@ -657,10 +633,10 @@ // Возвращает внутренний идентификатор кластера серверов. // // Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // -// Возвращаемое значение - Строка, внутренний идентификатор кластера серверов. +// Возвращаемое значение: +// Строка - внутренний идентификатор кластера серверов. // Функция ИдентификаторКластера(Знач ПараметрыАдминистрированияКластера) Экспорт @@ -678,12 +654,11 @@ // Возвращает описания кластеров серверов. // -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// Фильтр - Структура, параметры фильтрации кластеров серверов. +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// Фильтр - Структура - параметры фильтрации кластеров серверов. // // Возвращаемое значение: -// Массив(Структура). +// Массив из Структура // Функция СвойстваКластеров(Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт @@ -701,13 +676,12 @@ // Возвращает описания рабочих процессов. // // Параметры: -// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// Фильтр - Структура, параметры фильтрации рабочих процессов. +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// Фильтр - Структура - параметры фильтрации рабочих процессов. // // Возвращаемое значение: -// Массив(Структура). +// Массив из Структура // Функция СвойстваРабочихПроцессов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт @@ -736,13 +710,12 @@ // Возвращает описания рабочих серверов. // // Параметры: -// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// Фильтр - Структура, параметры фильтрации рабочих серверов. +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// Фильтр - Структура - параметры фильтрации рабочих серверов. // // Возвращаемое значение: -// Массив(Структура). +// Массив из Структура. // Функция СвойстваРабочихСерверов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт @@ -769,7 +742,7 @@ // ИдентификаторИнформационнойБазы - Строка - внутренний идентификатор информационной базы, // ПараметрыАдминистрированияИнформационнойБазы - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера // Фильтр - см. АдминистрированиеКластера.ФильтрСеансов, Массив из см. АдминистрированиеКластера.ФильтрСеансов -// ИспользоватьСловарь - Булево, если Истина - возвращаемый результат будет заполнен с использованием словаря. +// ИспользоватьСловарь - Булево - если Истина - возвращаемый результат будет заполнен с использованием словаря. // // Возвращаемое значение: // - Массив из см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса @@ -802,14 +775,12 @@ // Возвращает описания соединений с информационной базой. // // Параметры: -// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ИдентификаторИнформационнойБазы - Строка, внутренний идентификатор информационной базы, -// ПараметрыАдминистрированияИнформационнойБазы - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ИдентификаторИнформационнойБазы - Строка - внутренний идентификатор информационной базы. +// ПараметрыАдминистрированияИнформационнойБазы - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера // Фильтр - см. АдминистрированиеКластера.ФильтрСоединений, Массив из см. АдминистрированиеКластера.ФильтрСоединений -// ИспользоватьСловарь - Булево, если Истина - возвращаемый результат будет заполнен с использованием словаря. +// ИспользоватьСловарь - Булево - если Истина, то возвращаемый результат будет заполнен с использованием словаря. // // Возвращаемое значение: // - Массив из см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения @@ -1012,6 +983,27 @@ КонецФункции +// Параметры: +// ИдентификаторКластера - Строка +// ПараметрыАдминистрированияКластера - Структура: +// * ТипПодключения - Строка +// * АдресАгентаСервера - Строка +// * ПортАгентаСервера - Число +// * АдресСервераАдминистрирования - Строка +// * ПортСервераАдминистрирования - Число +// * ПортКластера - Число +// * ИмяАдминистратораКластера - Строка +// * ПарольАдминистратораКластера - Строка +// ИмяПрофиля - Строка +// ИмяСписка - Строка +// Словарь - ФиксированнаяСтруктура: +// * Имя - Строка +// * Описание - Строка +// * ХэшСумма - Строка - для обратной совместимости. +// Фильтр - Неопределено +// Возвращаемое значение: +// Массив из см. СловарьСвойствВнешнейКомпоненты +// Функция СпискиКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач ИмяСписка, Знач Словарь, Знач Фильтр = Неопределено) Шаблон = "%rac profile --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% acl --name=%name% directory list"; @@ -1313,7 +1305,7 @@ Если Не ФайлКлиента.Существует() Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно выполнить операцию администрирования кластера серверов по причине: файл %1 не найден. + НСтр("ru = 'Невозможно выполнить операцию администрирования кластера серверов по причине: не существует файл %1. | |Для администрирования кластера через сервер администрирования (ras) требуется установить на данном |компьютере клиент сервера администрирования (rac). @@ -1653,15 +1645,18 @@ КонецФункции +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * Имя - Строка +// * Описание - Строка +// * ХэшСумма - Строка - для обратной совместимости. +// Функция СловарьСвойствВнешнейКомпоненты() Результат = Новый Структура(); - Результат.Вставить("Имя", "name"); Результат.Вставить("Описание", "descr"); - - Результат.Вставить("ХэшСумма", "hash"); - + Результат.Вставить("ХэшСумма", "hash"); // АПК:1036 для обратной совместимости Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции @@ -1669,12 +1664,9 @@ Функция СловарьСвойствВнешнегоМодуля() Результат = Новый Структура(); - Результат.Вставить("Имя", "name"); Результат.Вставить("Описание", "descr"); - - Результат.Вставить("ХэшСумма", "hash"); - + Результат.Вставить("ХэшСумма", "hash"); // АПК:1036 для обратной совместимости Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции diff --git a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl index 574635522..6f79d12e5 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl @@ -17,7 +17,7 @@ // кластеру серверов. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * ТипПодключения - Строка - возможные значения: // "COM" - при подключении к агенту сервера с использованием COM-объекта V8*.ComConnector, // "RAS" - при подключении к серверу администрирования (ras) с использованием консольного @@ -63,7 +63,7 @@ // базе кластера. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * ИмяВКластере - Строка - имя администрируемой информационной базы в кластере серверов, // * ИмяАдминистратораИнформационнойБазы - Строка - имя пользователя информационной базы с правами // администратора (если для информационной базы не задан список пользователей ИБ - используется @@ -88,10 +88,8 @@ // Проверяет корректность параметров администрирования. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. // ПроверятьПараметрыАдминистрированияКластера - Булево - флаг необходимости проверки параметров администрирования кластера, // ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево - флаг необходимости проверки параметров // администрирования кластера. @@ -118,7 +116,7 @@ // информационной базы. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * БлокировкаСеансов - Булево - флаг установки блокировки новых сеансов с информационной базой, // * ДатаС - Дата - (Дата и время) момент начала блокировки новых сеансов с информационной базой, // * ДатаПо - Дата - (Дата и время) момент окончания блокировки новых сеансов с информационной базой, @@ -148,10 +146,8 @@ // Возвращает текущее состояние блокировки сеансов и регламентных заданий для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. // // Возвращаемое значение: // см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий. @@ -176,7 +172,7 @@ // Устанавливает новое состояние блокировки сеансов и регламентных заданий для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. // СвойстваБлокировкиСеансовИЗаданий - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий. // @@ -199,10 +195,8 @@ // Снимает блокировку сеансов и регламентных заданий для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. // Процедура СнятьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт @@ -233,10 +227,8 @@ // Возвращает текущее состояние блокировки регламентных заданий для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. // // Возвращаемое значение: // Булево - Истина, если удалось заблокировать регламентные задания, Ложь - иначе. @@ -261,8 +253,8 @@ // Устанавливает новое состояние блокировки регламентных заданий для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, -// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера // БлокировкаРегламентныхЗаданий - Булево - флаг установки блокировки регламентных заданий информационной базы. // Процедура УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач БлокировкаРегламентныхЗаданий) Экспорт @@ -288,7 +280,7 @@ // Конструктор структуры, описывающей свойства сеанса информационной базы. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Номер - Число - номер сеанса. Уникален среди всех сеансов информационной базы, // * ИмяПользователя - Строка - имя аутентифицированного пользователя информационной базы, // * ИмяКлиентскогоКомпьютера - Строка - имя или сетевой адрес компьютера, установившего @@ -373,14 +365,18 @@ // Возвращает описания сеансов информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. -// Фильтр - Массив из Структура - со свойствами: -// * Свойство - Строка - имя свойства, по которому осуществляется фильтрация (см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса), +// Фильтр - Массив из Структура: +// * Свойство - см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса // * ВидСравнения - ВидСравнения - значение системного перечисления ВидСравнения, -// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// * Значение - Число +// - Строка +// - Дата +// - Булево +// - СписокЗначений +// - Массив +// - Структура - значение, с которым // сравнивается значение соответствующего свойства сеанса. // - Структура - структура: ключ - Имя свойства сеанса (см. выше), значение - значение, с которым // выполняется сеанс. При использовании данного варианта описания фильтра сравнение всегда выполняется на @@ -408,14 +404,18 @@ // Удаляет сеансы с информационной базой по фильтру. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. -// Фильтр - Массив из Структура - со свойствами: -// * Свойство - Строка - имя свойства, по которому осуществляется фильтрация (см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса), +// Фильтр - Массив из Структура: +// * Свойство - см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса // * ВидСравнения - ВидСравнения - значение системного перечисления ВидСравнения, -// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// * Значение - Число +// - Строка +// - Дата +// - Булево +// - СписокЗначений +// - Массив +// - Структура - значение, с которым // сравнивается значение соответствующего свойства сеанса, // - Структура - структура: ключ - Имя свойства сеанса (см. выше), значение - значение, с которым // выполняется сеанс. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. @@ -443,7 +443,7 @@ // Конструктор структуры, описывающей свойства соединения с информационной базой. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Номер - Число - номер соединения с информационной базой, // * ИмяПользователя - Строка - имя пользователя 1С:Предприятия, подсоединенного к информационной базе, // * ИмяКлиентскогоКомпьютера - Строка - имя компьютера, с которого установлено соединение, @@ -513,15 +513,19 @@ // Возвращает описания соединений с информационной базой. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. -// Фильтр - Массив из Структура - со свойствами: -// * Свойство - Строка - имя свойства, по которому осуществляется фильтрация (см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения), +// Фильтр - Массив из Структура: +// * Свойство - см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения // * ВидСравнения - ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений // соединений с указанным в условии фильтра, -// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// * Значение - Число +// - Строка +// - Дата +// - Булево +// - СписокЗначений +// - Массив +// - Структура - значение, с которым // сравнивается значение соответствующего свойства соединения, // - Структура - структура: ключ - Имя свойства соединения (см. выше), значение - значение, с которым // выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. @@ -548,15 +552,19 @@ // Разрывает соединения с информационной базой по фильтру. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. -// Фильтр - Массив из Структура - со свойствами: -// * Свойство - Строка - имя свойства, по которому осуществляется фильтрация (см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения), +// Фильтр - Массив из Структура: +// * Свойство - см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения // * ВидСравнения - ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений // соединений с указанным в условии фильтра, -// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// * Значение - Число +// - Строка +// - Дата +// - Булево +// - СписокЗначений +// - Массив +// - Структура - значение, с которым // сравнивается значение соответствующего свойства соединения, // - Структура - структура: ключ - Имя свойства соединения (см. выше), значение - значение, с которым // выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. @@ -584,10 +592,8 @@ // Возвращает имя профиля безопасности, назначенного для информационной базы. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. // // Возвращаемое значение: // Строка - имя профиля безопасности, назначенного для информационной базы. Если @@ -612,10 +618,8 @@ // безопасного режима. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. // // Возвращаемое значение: // Строка - имя профиля безопасности, назначенного для информационной базы в качестве профиля @@ -640,10 +644,8 @@ // Назначает для информационной базы использование профиля безопасности. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. // ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет // отключено использование профиля безопасности. // @@ -666,10 +668,8 @@ // Назначает для информационной базы использование профиля безопасности безопасного режима. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИБ - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной -// в качестве значения параметра ПараметрыАдминистрированияКластера. // ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет // отключено использование профиля безопасности безопасного режима. // @@ -692,7 +692,7 @@ // Проверяет существование в кластере серверов профиля безопасности. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ИмяПрофиля - Строка - имя профиля безопасности, существование которого проверяется. // // Возвращаемое значение: @@ -712,7 +712,7 @@ // Конструктор структуры, описывающей свойства профиля безопасности. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя профиля безопасности, // * Описание - Строка - описание профиля безопасности, // * ПрофильБезопасногоРежима - Булево - определяет возможность использования профиля безопасности @@ -777,7 +777,7 @@ // Конструктор структуры, описывающей свойства виртуального каталога. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * ЛогическийURL - Строка - логический URL каталога, // * ФизическийURL - Строка - физический URL каталога на сервере для размещения данных // виртуального каталога, @@ -805,7 +805,7 @@ // Конструктор структуры, описывающей свойства COM-класса. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя COM-класса, используется в качестве ключа при поиске, // * Описание - Строка - описание COM-класса, // * ФайлМоникер - Строка - имя файла, по которому создается объект методом глобального @@ -833,21 +833,18 @@ // Конструктор структуры, описывающей свойства внешней компоненты. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя внешней компоненты, используется в качестве ключа для поиска, -// * Описание - Строка -описание внешней компоненты, +// * Описание - Строка - описание внешней компоненты, // * ХэшСумма - Строка - контрольная сумма разрешенной внешней компоненты, вычисленная алгоритмом // SHA-1 и преобразованная к строке base64. // Функция СвойстваВнешнейКомпоненты() Экспорт Результат = Новый Структура(); - Результат.Вставить("Имя"); Результат.Вставить("Описание"); - - Результат.Вставить("ХэшСумма"); - + Результат.Вставить("ХэшСумма"); // АПК:1036 для обратной совместимости Возврат Результат; КонецФункции @@ -856,7 +853,7 @@ // Конструктор структуры, описывающей свойства внешнего модуля. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя внешнего модуля, используется в качестве ключа для поиска, // * Описание - Строка - описание внешнего модуля, // * ХэшСумма - Строка - контрольная сумма разрешенного внешнего модуля, вычисленная алгоритмом @@ -865,12 +862,9 @@ Функция СвойстваВнешнегоМодуля() Экспорт Результат = Новый Структура(); - Результат.Вставить("Имя"); Результат.Вставить("Описание"); - - Результат.Вставить("ХэшСумма"); - + Результат.Вставить("ХэшСумма"); // АПК:1036 для обратной совместимости Возврат Результат; КонецФункции @@ -879,7 +873,7 @@ // Конструктор структуры, описывающей свойства приложения операционной системы. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя приложения операционной системы, используется в качестве ключа для поиска, // * Описание - Строка - описание приложения операционной системы, // * ШаблонСтрокиЗапуска - Строка - шаблон строки запуска приложения (состоит из последовательности @@ -902,7 +896,7 @@ // Конструктор структуры, описывающей Интернет-ресурс. // // Возвращаемое значение: -// Структура - структура с полями: +// Структура: // * Имя - Строка - имя Интернет-ресурса, используется в качестве ключа для поиска, // * Описание - Строка - описание Интернет-ресурса, // * Протокол - Строка - разрешаемый сетевой протокол. Возможные значения: @@ -935,7 +929,7 @@ // Возвращает свойства профиля безопасности. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ИмяПрофиля - Строка - имя профиля безопасности. // // Возвращаемое значение: @@ -955,7 +949,7 @@ // Создает профиль безопасности по переданному описанию. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // СвойстваПрофиляБезопасности - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности. // Процедура СоздатьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт @@ -972,7 +966,7 @@ // Устанавливает свойства для существующего профиля безопасности по переданному описанию. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // СвойстваПрофиляБезопасности - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности. // Процедура УстановитьСвойстваПрофиляБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт @@ -989,7 +983,7 @@ // Удаляет профиль безопасности. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ИмяПрофиля - Строка - имя профиля безопасности. // Процедура УдалитьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт @@ -1011,7 +1005,7 @@ // // Параметры: // ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ПараметрыАдминистрированияИнформационнойБазы - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. // // Возвращаемое значение: @@ -1033,7 +1027,7 @@ // // Параметры: // ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // Фильтр - Структура - параметры фильтрации информационных баз. // // Возвращаемое значение: @@ -1075,7 +1069,7 @@ // Возвращает описания кластеров серверов. // // Параметры: -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // Фильтр - Структура - параметры фильтрации кластеров серверов. // // Возвращаемое значение: @@ -1098,7 +1092,7 @@ // // Параметры: // ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // Фильтр - Структура - параметры фильтрации рабочих процессов. // // Возвращаемое значение: @@ -1120,7 +1114,7 @@ // // Параметры: // ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // Фильтр - Структура - параметры фильтрации рабочих серверов. // // Возвращаемое значение: @@ -1144,12 +1138,18 @@ // // Параметры: // ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ИдентификаторИнформационнойБазы - Строка - внутренний идентификатор информационной базы, -// Фильтр - Массив из Структура - со свойствами: -// * Свойство - Строка - имя свойства, по которому осуществляется фильтрация (см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса), +// Фильтр - Массив из Структура: +// * Свойство - см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса // * ВидСравнения - ВидСравнения - значение системного перечисления ВидСравнения, -// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// * Значение - Число +// - Строка +// - Дата +// - Булево +// - СписокЗначений +// - Массив +// - Структура - значение, с которым // сравнивается значение соответствующего свойства сеанса. // - Структура - структура: ключ - Имя свойства сеанса (см. выше), значение - значение, с которым // выполняется сеанс. При использовании данного варианта описания фильтра сравнение всегда выполняется на @@ -1179,13 +1179,19 @@ // // Параметры: // ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов, -// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера, +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // ИдентификаторИнформационнойБазы - Строка - внутренний идентификатор информационной базы, // ПараметрыАдминистрированияИнформационнойБазы - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. -// Фильтр - Массив из Структура - со свойствами: -// * Свойство - Строка - имя свойства, по которому осуществляется фильтрация (см. АдминистрированиеКластераКлиентСервер.СвойстваСоединений), +// Фильтр - Массив из Структура: +// * Свойство - см. АдминистрированиеКластераКлиентСервер.СвойстваСоединений // * ВидСравнения - ВидСравнения - значение системного перечисления ВидСравнения, -// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// * Значение - Число +// - Строка +// - Дата +// - Булево +// - СписокЗначений +// - Массив +// - Структура - значение, с которым // сравнивается значение соответствующего свойства соединения. // - Структура - структура: ключ - Имя свойства соединения (см. выше), значение - значение, с которым // выполняется соединение. При использовании данного варианта описания фильтра сравнение всегда выполняется на @@ -1413,3 +1419,5 @@ КонецФункции #КонецОбласти + + diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl index 01fae9732..4efdc8cc3 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl @@ -11,11 +11,12 @@ // Определяет наименование с сокращением региона по его коду. // // Параметры: -// КодСубъектаРФ - Число, Строка - код региона. Например, 50. +// КодСубъектаРФ - Число +// - Строка - код региона. Например, 50. // // Возвращаемое значение: // Строка - наименование и сокращение региона. Например, "Московская обл". -// Неопределено - если регион не найден. +// Неопределено - если регион не существует. // Функция НаименованиеРегионаПоКоду(КодСубъектаРФ) Экспорт @@ -57,7 +58,7 @@ // // Возвращаемое значение: // Число - код региона, например, 50. -// Неопределено - если данные не найдены. +// Неопределено - если указанный регион не существует. // Функция КодРегионаПоНаименованию(Название) Экспорт @@ -259,7 +260,7 @@ // // Возвращаемое значение: // Строка - полное наименование адресного объекта. Например, "город". -// Неопределено - если сокращение не найдено. +// Неопределено - если указанное сокращение не существует. // Функция ПолноеНаименованиеАдресногоСокращения(АдресноеСокращение, Уровень = Неопределено) Экспорт @@ -303,7 +304,7 @@ // а затем, если коды не были определены, то они будут получены через веб-сервис "1С". // Если параметр не указан, то определение кодов будет аналогично параметру ЗагруженныеДанные. // Возвращаемое значение: -// Структура - коды адреса. Если адрес не найден, то поля структуры содержат пустые значения. +// Структура - коды адреса. Если адрес не существует, то поля структуры содержат пустые значения: // * Идентификатор - Строка - уникальный идентификационный код адресного объекта ФИАС. // * ИдентификаторДома - Строка - уникальный идентификационный код дома(здания) адресного объекта ФИАС. // * КодКЛАДР - Строка - код классификатор адресов России (КЛАДР). @@ -337,6 +338,66 @@ Возврат АдресныйКлассификаторСлужебный.СокращенияАдресныхОбъектов(НаименованияАдресныхОбъектов); КонецФункции +// Возвращает сведения об адресе по коду ОКТМО, который состоит из 8 или 11 цифр. +// +// Параметры: +// ОКТМО - Соответствие - код общероссийского классификатора территорий муниципальных образований. +// +// Возвращаемое значение: +// Структура: +// * КодРегиона - Строка - код региона РФ. +// * Регион - Строка - текстовое представление региона РФ. +// * РегионТипПолный - Строка - полное наименование типа региона. Например: "область". +// * РегионТипКраткий - Строка - краткое наименование типа региона. Например: "обл". +// * ИдентификаторРегиона- УникальныйИдентификатор +// - Неопределено - идентификационный код ФИАС региона. +// * МуниципальныйРайон - Строка - текстовое представление муниципального района для адреса по муниципальному делению. +// * МуниципальныйРайонТипПолный - Строка - полное наименование типа муниципального района по муниципальному +// делению. Например: "городской округ". +// * МуниципальныйРайонТипКраткий - Строка - краткое наименование типа муниципального района для адреса по +// муниципальному делению. Например: "мун.р-н". +// * ИдентификаторМуниципальногоРайона- УникальныйИдентификатор +// - Неопределено - идентификационный код ФИАС муниципального район. +// * КодМуниципальногоРайона - Строка - код муниципального района: 1- муниципальный район; 2- городской округ; +// 3 - внутригородская территория города федерального значения; 4 - муниципальный округ. +// Если не удалось определить код, то возвращается пустая строка. +// * Поселение - Строка - текстовое представление поселения у адресов по муниципальному делению. +// * ПоселениеТипПолный - Строка - полное наименование типа сельского поселения по муниципальному делению. +// Например: "сельское поселение". +// * ПоселениеТипКраткий - Строка - краткое наименование типа муниципального района для адреса по муниципальному делению. Например: "с. п.". +// * ИдентификаторПоселения- УникальныйИдентификатор +// - Неопределено - идентификационный код ФИАС поселения. +// * КодПоселения - Строка - код поселения: 1 - городское поселение; 2 - сельское поселение; 3- межселенная +// территория в составе муниципального района; 4 - внутригородской район городского округа; +// * НаселенныйПункт - Строка - текстовое представление населенного пункта. +// * НаселенныйПунктТипПолный - Строка - полное наименование типа населенного пункта. Например: "деревня". +// * НаселенныйПунктТипКраткий - Строка - краткое наименование типа населенного пункта. Например: "д". +// * ИдентификаторНаселенногоПункта- УникальныйИдентификатор +// - Неопределено - идентификационный код ФИАС населенного пункта. +// * Территория - Строка - текстовое представление территории. В терминах ФИАС элемент планировочной структуры. +// * ТерриторияТипПолный - Строка - полное наименование типа территории. Например: "Гаражно-строительный кооп.". +// * ТерриторияТипКраткий - Строка - краткое наименование типа территории. Например: "гск". +// * ИдентификаторТерритории- УникальныйИдентификатор +// - Неопределено - идентификационный код ФИАС территории. +// * ПочтовыйИндекс - Число - почтовый индекс. +// * OKATO - Строка - код общероссийского классификатора объектов административно-территориального деления. +// * КодКЛАДР - Строка - код классификатор адресов России (КЛАДР). +// * КодИФНСФЛ - Строка - код инспекции ФНС, обслуживающей физических лиц. +// * КодИФНСЮЛ - Строка - код инспекции ФНС, обслуживающей юридические лица. +// * КодУчасткаИФНСФЛ - Строка - код территориального участка инспекции ФНС, обслуживающей физических лиц. +// * КодУчасткаИФНСЮЛ - Строка - код территориального участка инспекции ФНС, обслуживающей юридические лица. +// +Функция СведенияПоОКМТО(ОКТМО) Экспорт + + СписокОКТМО = Новый Соответствие; + СписокОКТМО.Вставить(1, ОКТМО); + + Результат = АдресныйКлассификаторСлужебный.СведенияПоСпискуОКМТО(СписокОКТМО); + + Возврат Результат[1]; + +КонецФункции + #Область УстаревшиеПроцедурыИФункции // Возвращает идентификационный код дома и адресного объекта с помощью веб-сервиса фирмы 1С предоставляющего @@ -348,7 +409,7 @@ // Адрес - Строка - XML соответствующий структуре XDTO-пакета Адрес, содержащий адрес, // для которого требуется определить идентификационные коды. // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - идентификационный код адресного объекта (улицы, // нас. пункта). // * ИдентификаторДома - УникальныйИдентификатор - идентификационный код дома адресного объекта. diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index f8eca557d..d31b3d813 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -11,7 +11,8 @@ // Открывает форму загрузки классификатора. // // Параметры: -// Параметры - ПараметрыВыполненияКоманды, Структура - параметры открытия формы. +// Параметры - ПараметрыВыполненияКоманды +// - Структура - параметры открытия формы. // Процедура ЗагрузитьАдресныйКлассификатор(Параметры = Неопределено) Экспорт @@ -42,11 +43,13 @@ // Параметры: // ОповещениеОЗакрытие - ОписаниеОповещения - оповещение, которое вызывается при закрытии формы загрузки адресного классификатора. // ПараметрыФормы - Структура - параметры открытия формы: -// * КодРегионаДляЗагрузки - Число, Массив - если указан, то регион будет отмечен для загрузки. +// * КодРегионаДляЗагрузки - Число +// - Массив - если указан, то регион будет отмечен для загрузки. // ПараметрыОткрытия - Структура - параметры открытия формы: // * Владелец - Произвольный - форма или элемент управления другой формы. // * Уникальность - Произвольный - ключ, значение которого будет использоваться для поиска уже открытых форм. -// * Окно - ОкноКлиентскогоПриложения, ВариантОткрытияОкна - окно приложения, в котором будет открыта форма. +// * Окно - ОкноКлиентскогоПриложения +// - ВариантОткрытияОкна - окно приложения, в котором будет открыта форма. // * НавигационнаяСсылка - Строка - задает навигационную ссылку, возвращаемую формой. // Процедура ПоказатьФормуЗагрузкиАдресногоКлассификатора(ОповещениеОЗакрытие = Неопределено, ПараметрыФормы = Неопределено, ПараметрыОткрытия = Неопределено) Экспорт @@ -96,7 +99,7 @@ // ПутьКДанным - Строка - полное имя реквизита формы, содержащего текущее значение каталога. // Например. // "РабочийКаталог" или "Объект.КаталогИзображений". -// Заголовок - Строка - Заголовок для диалога. +// Заголовок - Строка - заголовок для диалога. // СтандартнаяОбработка - Булево - для использования в обработчике "ПриНачалаВыбора". Будет заполнено // значением Ложь. // ОповещениеЗавершения - ОписаниеОповещения - вызывается после успешного помещения нового значения в реквизит. @@ -139,13 +142,13 @@ // КодыРегионов - Массив - содержит числовые значения - коды регионов-субъектов РФ (для последующей // загрузки). // Каталог - Строка - каталог с проверяемыми файлами. -// ПараметрыЗагрузки - Структура - содержит поля. +// ПараметрыЗагрузки - Структура: // * КодИсточникаЗагрузки - Строка - описывает набор анализируемых файлов. Возможные значения: "КАТАЛОГ", // "САЙТ", "ИТС". // * ПолеОшибки - Строка - имя реквизита для привязки сообщений об ошибке. // // Возвращаемое значение: -// Структура - описание результата. Содержит поля. +// Структура: // * КодыРегионов - Массив - содержит числовые значения кодов регионов-субъектов для которых доступны // все файлы. // * ЕстьВсеФайлы - Булево - флаг того, что можно загружать все регионы. @@ -182,19 +185,19 @@ // Параметры загрузки файлов. // // Возвращаемое значение: -// Структура - Содержит: +// Структура: // * ИндексРегиона - Неопределено - индекс региона; -// * ИмяФайла - Строка - Имя файла региона; +// * ИмяФайла - Строка - имя файла региона; // * КодРегиона - Неопределено -цифровой код региона; // * ПолеОшибки - Строка - элементы формы с ошибкой; // * РабочийКаталог - Строка - каталог загрузки файлов адресных сведений; -// * Результат - Структура - Содержит: +// * Результат - Структура: // ** КодыРегионов - Массив -коды регионов; // ** ЕстьВсеФайлы - Булево - признак наличия файлов; // ** Ошибки - Массив - список ошибок; // ** ФайлыПоРегионам - Соответствие - имя файла и путь к нему. // * ОписаниеЗавершения - Строка - описание завершения; -// * ОтсутствующиеФайлы - Соответствие - Список отсутствующих файлов. +// * ОтсутствующиеФайлы - Соответствие - список отсутствующих файлов. // Функция ПараметрыЗагрузки() @@ -240,7 +243,7 @@ Для каждого ОтсутствующийФайл Из ДополнительныеПараметры.ОтсутствующиеФайлы Цикл Представление = ДополнительныеПараметры.Результат.КодыРегионов.НайтиПоЗначению(ОтсутствующийФайл.Ключ); - СообщениеОбОшибке = НСтр("ru = 'Для региона ""%1"" не найден файл данных ""%2""'") + Символы.ПС; + СообщениеОбОшибке = НСтр("ru = 'Для региона ""%1"" не существует файл данных ""%2""'") + Символы.ПС; СообщениеОбОшибке = СообщениеОбОшибке + НСтр("ru = 'Актуальные адресные сведения можно загрузить по адресу http://its.1c.ru/download/fias2'"); ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ДополнительныеПараметры.Результат.Ошибки, ДополнительныеПараметры.ПолеОшибки, @@ -270,7 +273,8 @@ КонецЕсли; Если СтруктураФайла.Существует Тогда - ДополнительныеПараметры.Результат.ФайлыПоРегионам[ДополнительныеПараметры.КодРегиона].Добавить(СтруктураФайла.ПолноеИмя); + СписокПутей = ДополнительныеПараметры.Результат.ФайлыПоРегионам[ДополнительныеПараметры.КодРегиона]; // Массив + СписокПутей.Добавить(СтруктураФайла.ПолноеИмя); Иначе ДополнительныеПараметры.Результат.ЕстьВсеФайлы = Ложь; ДополнительныеПараметры.ОтсутствующиеФайлы.Вставить(ДополнительныеПараметры.КодРегиона, ДополнительныеПараметры.ИмяФайла); diff --git a/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl index aaf2d16d0..f3a6f8b03 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl @@ -73,7 +73,7 @@ Исключение ШаблонЗапроса = "%1:%2%3ping"; - URL = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, ИмяСервера, Порт, + СсылкаНаРесурс = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, ИмяСервера, Порт, АдресныйКлассификаторСлужебный.ПрефиксВерсииЗапроса()); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -85,7 +85,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); - РезультатДиагностики = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(URL); + РезультатДиагностики = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(СсылкаНаРесурс); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 @@ -108,12 +108,8 @@ Результат = Новый Соответствие; // Веб-сервис 1С - Если НЕ ОбщегоНазначения.РазделениеВключено() Тогда - СервисРезультат = АдресныйКлассификаторСлужебный.ВерсияПоставщикаДанных(); - КлассификаторДоступен = (СервисРезультат.Данные = Истина); - Иначе - КлассификаторДоступен = Ложь; - КонецЕсли; + СервисРезультат = АдресныйКлассификаторСлужебный.ВерсияПоставщикаДанных(); + КлассификаторДоступен = (СервисРезультат.Данные = Истина); Результат.Вставить("КлассификаторДоступен", КлассификаторДоступен); ИспользоватьЗагруженные = Ложь; @@ -153,7 +149,7 @@ // Возвращает является ли источником данных веб сервис. // // Возвращаемое значение: -// Булево - Если веб сервис является источником адресных сведений, то возвращает Истина. +// Булево - если веб сервис является источником адресных сведений, то возвращает Истина. // Функция ИсточникДанныхАдресногоКлассификатораВебСервис() Экспорт @@ -196,17 +192,17 @@ КонецФункции // Параметры: -// НаименованиеРегиона - Строка - Полное наименование региона +// НаименованиеРегиона - Строка - полное наименование региона // // Возвращаемое значение: -// ФиксированнаяСтруктура - где: -// * Загружен - Булево - -// * Устарел - Булево - -// * КодСубъектаРФ - Число - +// ФиксированнаяСтруктура: +// * Загружен - Булево +// * Устарел - Булево +// * КодСубъектаРФ - Число // Функция СведенияОРегионе(Знач НаименованиеРегиона) Экспорт - Результат = Новый Структура("Загружен, Устарел, КодСубъектаРФ", Ложь, Ложь, Неопределено); + Результат = АдресныйКлассификаторСлужебный.СведенияОЗагруженномРегионе(); СведенияОРегионе = АдресныйКлассификаторСлужебный.НаименованиеИСокращение(НаименованиеРегиона); РезультатЗапроса = АдресныйКлассификаторСлужебный.АктуальныеДанныеОРегионе(СведенияОРегионе); @@ -232,7 +228,7 @@ КонецЕсли; Возврат Новый ФиксированнаяСтруктура(Результат); - + КонецФункции Функция СписокРегионов() Экспорт diff --git a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl index 562940ac5..841f9457b 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl @@ -11,7 +11,7 @@ // Возвращает информацию о доступности адресных сведений. // // Возвращаемое значение: -// ФиксированноеСоответствие - с полями: +// ФиксированноеСоответствие: // * КлассификаторДоступен - Булево - классификатор доступен через веб-сервис. // * ИспользоватьЗагруженные - Булево - в программу загружен классификатор. // @@ -22,13 +22,13 @@ // Проверка доступности поставщика - локальной базы или сервиса. // // Возвращаемое значение: -// Структура - описание состояния. -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// Структура: +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Данные - Строка - Описание версии поставщика. +// * Данные - Строка - описание версии поставщика. // Функция ВерсияПоставщикаДанных() Экспорт @@ -56,11 +56,11 @@ // Возвращает описание последней загрузки классификатора. // // Возвращаемое значение: -// Структура - содержит поля: -// * ДатаПоследнейЗагрузки - Дата - Дата последней загрузки (часовой пояс сеанса). -// * УниверсальнаяДатаПоследнейЗагрузки - Дата - Дата последней загрузки (UTC). -// * ДнейНазад - Число - Количество дней от последней загрузки. -// * Представление - Строка - Описание, например "Адресный классификатор был загружен +// Структура: +// * ДатаПоследнейЗагрузки - Дата - дата последней загрузки (часовой пояс сеанса). +// * УниверсальнаяДатаПоследнейЗагрузки - Дата - дата последней загрузки (UTC). +// * ДнейНазад - Число - количество дней от последней загрузки. +// * Представление - Строка - описание, например "Адресный классификатор был загружен // сегодня."; // * НеобходимоОбновление - Булево - Истина, если количество дней от последней загрузки превышает // период актуальности. @@ -135,22 +135,22 @@ // Возвращает данные классификатора по почтовому индексу. // // Параметры: -// Индекс - Число - Почтовый индекс, для которого необходимо получать данные. -// ДополнительныеПараметры - Структура - Описание настроек поиска. Поля: +// Индекс - Число - почтовый индекс, для которого необходимо получать данные. +// ДополнительныеПараметры - Структура - описание настроек поиска. Поля: // * ФорматАдреса - Строка - тип используемого классификатора. // // Возвращаемое значение: // Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * ОбщаяЧастьПредставления - Строка - Общая часть представлений адреса. -// * Данные - ТаблицаЗначений - Содержит данные для выбора. Колонки: -// ** Неактуален - Булево - Флаг неактуальности строки данных. -// ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска вариантов по индексу. -// ** Представление - Строка - Представление варианта. +// * ОбщаяЧастьПредставления - Строка - общая часть представлений адреса. +// * Данные - ТаблицаЗначений - содержит данные для выбора. Колонки: +// ** Неактуален - Булево - флаг неактуальности строки данных. +// ** Идентификатор - УникальныйИдентификатор - код классификатора для поиска вариантов по индексу. +// ** Представление - Строка - представление варианта. // Функция АдресаПоПочтовомуИндексуКлассификатора(Индекс, ДополнительныеПараметры) Экспорт @@ -176,10 +176,10 @@ // Определить регион по индексу. // // Параметры: -// Индекс - Строка - Почтовый индекс определимого региона. +// Индекс - Строка - почтовый индекс определимого региона. // // Возвращаемое значение: -// Структура - Код и наименование региона, Неопределенно - если регион не найден. +// Структура - код и наименование региона, Неопределенно - если регион не найден: // * КодСубъектаРФ - Число - код субъекта РФ. // * Представление - Строка - представление субъекта РФ. // @@ -259,7 +259,7 @@ Процедура УстановитьМуниципальныеСведения(Адрес, ОКТМО) Экспорт - Если Не ЭтоГородФедеральногоЗначения(Адрес) Тогда + Если Не ЭтоГородФедеральногоЗначения(ПолноеНаименованиеРегиона(Адрес.Area, Адрес.AreaType)) Тогда Возврат; КонецЕсли; @@ -327,58 +327,53 @@ // Проверка адрес на соответствие ФИАС // // Параметры: -// Адреса - Соответствие - где: +// Адреса - Соответствие: // * Ключ - Число - уникальный ключ адреса, -// * Значение - Строка - Строка в формате JSON с адресом. +// * Значение - Строка - строка в формате JSON с адресом. +// ПроверятьУстареваниеАдресов - Булево // // Возвращаемое значение: -// Соответствие - где: -// * Ключ - Число - уникальный ключ адреса, -// * Значение - Структура - где: -// * Ошибки - Массив из Строка - список ошибок -// * Варианты - Массив Из Строка - варианты нового адреса, если адрес устарел -// * АдресПроверен - Булево - признак, что адрес был проверен -// * АдресКорректный - Булево - признак, что адрес корректный +// см. РезультатПроверкиАдресов // -Функция АнализАдресовПоКлассификатору(Знач Адреса) Экспорт +Функция АнализАдресовПоКлассификатору(Знач Адреса, ПроверятьУстареваниеАдресов = Ложь) Экспорт АдресаJSON = Новый Соответствие; Для каждого Адрес Из Адреса Цикл АдресаJSON.Вставить(Адрес.Ключ, JSONВКонтактнуюИнформациюПоПолям(Адрес.Значение)); КонецЦикла; - Возврат РезультатПроверкиАдресов(АдресаJSON); + Возврат РезультатПроверкиАдресов(АдресаJSON, ПроверятьУстареваниеАдресов); КонецФункции // Возвращает данные классификатора поля выбора по уровню. // // Параметры: -// Родитель - УникальныйИдентификатор - Родительский объект. -// Уровень - Число - Требуемый уровень данных. 1-7, 90, 91 - адресные объекты, -1 +// Родитель - УникальныйИдентификатор - родительский объект. +// Уровень - Число - требуемый уровень данных. 1-7, 90, 91 - адресные объекты, -1 // - ориентиры. -// ДополнительныеПараметры - Структура - Описание настройке поиска. Поля: -// * ФорматАдреса - Строка - тип используемого классификатора. -// -// * РазмерПорции - Число - Необязательный размер порции возвращаемых данных. Если не указано -// или 0, то возвращает все элементы. -// * ПерваяЗапись - УникальныйИдентификатор - Элемент, с которого начинается порция данных. Сам элемент не -// входит в выборку. -// * Сортировка - Строка - Направление сортировки для порции. +// ТипАдреса - Строка +// ДополнительныеПараметры - Структура - описание настройке поиска. Поля: +// * ФорматАдреса - Строка - тип используемого классификатора. +// * РазмерПорции - Число - необязательный размер порции возвращаемых данных. Если не указано +// или 0, то возвращает все элементы. +// * ПерваяЗапись - УникальныйИдентификатор - элемент, с которого начинается порция данных. Сам элемент не +// входит в выборку. +// * Сортировка - Строка - направление сортировки для порции. // // Возвращаемое значение: // Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Заголовок - Строка - Строка с предложением выбора. -// * Данные - ТаблицаЗначений - Содержит данные для выбора. Колонки: -// ** Неактуален - Булево - Флаг неактуальности строки данных. -// ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска вариантов по индексу. -// ** Представление - Строка - Представление варианта. -// ** РегионЗагружен - Булево - Имеет смысл только для регионов. Истина, если есть записи. +// * Заголовок - Строка - строка с предложением выбора. +// * Данные - ТаблицаЗначений - содержит данные для выбора. Колонки: +// ** Неактуален - Булево - флаг неактуальности строки данных. +// ** Идентификатор - УникальныйИдентификатор - код классификатора для поиска вариантов по индексу. +// ** Представление - Строка - представление варианта. +// ** РегионЗагружен - Булево - имеет смысл только для регионов. Истина, если есть записи. // Функция АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ТипАдреса, ДополнительныеПараметры) Экспорт @@ -469,31 +464,31 @@ // Возвращает данные классификатора поля выбора по уровню. // // Параметры: -// Родитель - УникальныйИдентификатор - Родительский объект. -// Уровень - Число - Требуемый уровень данных. 1-7, 90, 91 - адресные объекты, -1 +// Родитель - УникальныйИдентификатор - родительский объект. +// Уровень - Число - требуемый уровень данных. 1-7, 90, 91 - адресные объекты, -1 // - ориентиры. -// ДополнительныеПараметры - Структура - Описание настройке поиска. Поля: +// ДополнительныеПараметры - Структура - описание настройке поиска. Поля: // * ФорматАдреса - Строка - тип используемого классификатора. // -// * РазмерПорции - Число - Необязательный размер порции возвращаемых данных. Если не указано +// * РазмерПорции - Число - необязательный размер порции возвращаемых данных. Если не указано // или 0, то возвращает все элементы. -// * ПерваяЗапись - УникальныйИдентификатор - Элемент, с которого начинается порция данных. Сам элемент не +// * ПерваяЗапись - УникальныйИдентификатор - элемент, с которого начинается порция данных. Сам элемент не // входит в выборку. -// * Сортировка - Строка - Направление сортировки для порции. +// * Сортировка - Строка - направление сортировки для порции. // // Возвращаемое значение: // Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Заголовок - Строка - Строка с предложением выбора. -// * Данные - ТаблицаЗначений - Содержит данные для выбора. Колонки: -// ** Неактуален - Булево - Флаг неактуальности строки данных. -// ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска вариантов по индексу. -// ** Представление - Строка - Представление варианта. -// ** РегионЗагружен - Булево - Имеет смысл только для регионов. Истина, если есть записи. +// * Заголовок - Строка - строка с предложением выбора. +// * Данные - ТаблицаЗначений - содержит данные для выбора. Колонки: +// ** Неактуален - Булево - флаг неактуальности строки данных. +// ** Идентификатор - УникальныйИдентификатор - код классификатора для поиска вариантов по индексу. +// ** Представление - Строка - представление варианта. +// ** РегионЗагружен - Булево - имеет смысл только для регионов. Истина, если есть записи. // Функция АдресныеОбъектыУровня(Родитель, Уровень, ТипАдреса, Знач СтрокаПоиска = "") Экспорт @@ -522,6 +517,7 @@ Сведения.Вставить("Родитель", Родитель); Сведения.Вставить("Представление", СведенияОбАдресе.Представление); Сведения.Вставить("Отказ", Ложь); + Сведения.Вставить("ЗагруженныеДанные", Истина); Если ПредлагатьЗагрузкуСведений Тогда Сведения.Вставить("ПредлагатьЗагрузкуКлассификатора", @@ -550,7 +546,7 @@ СтрокаЗапроса = СтрокаЗапроса + "&text=" + СокрЛП(СтрокаПоиска); КонецЕсли; - ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапроса, Строка(Уровень)); + ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапроса, XMLСтрока(Уровень)); РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); ИмяПоля = ?(ЭтоМуниципальныйАдрес(ТипАдреса), "munName", "name"); @@ -587,23 +583,24 @@ // Возвращает список для автоподбора элемента адреса, поиск по подобию. // // Параметры: -// Текст - Строка - Текст, введенный в поле. -// Родитель - УникальныйИдентификатор - Родительский объект. -// Уровни - Массив, ФиксированныйМассив - Набор требуемых уровней данных. 1-7, 90, 91 - адресные +// Текст - Строка - текст, введенный в поле. +// Родитель - УникальныйИдентификатор - родительский объект. +// Уровни - Массив +// - ФиксированныйМассив - набор требуемых уровней данных. 1-7, 90, 91 - адресные // объекты, -1 - ориентиры. -// ДополнительныеПараметры - Структура - Описание настройке поиска. Поля: -// * ТолькоВебСервис - Булево - Автоподбор только через веб-сервис. -// * ТипАдреса - Строка - Тип используемого классификатора. +// ДополнительныеПараметры - Структура - описание настройке поиска. Поля: +// * ТолькоВебСервис - Булево - автоподбор только через веб-сервис. +// * ТипАдреса - Строка - тип используемого классификатора. // // Возвращаемое значение: // Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Данные - СписокЗначение - Содержит данные для выбора. Колонки: -// ** Представление - Строка - Представление варианта. +// * Данные - СписокЗначение - содержит данные для выбора. Колонки: +// ** Представление - Строка - представление варианта. // ** Значение - Структура - с полями Идентификатор, Муниципальный, ЗагруженныеДанные. // Функция ВариантыАвтоподбора(Текст, ДополнительныеПараметры) Экспорт @@ -651,11 +648,11 @@ // Возвращает список домов по идентификатору адресного объекта, поиск по подобию. // // Параметры: -// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Родительский объект. -// СтрокаПоиска - Строка - Текст, отбора в списке домов. +// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - родительский объект. +// СтрокаПоиска - Строка - текст, отбора в списке домов. // // Возвращаемое значение: -// ТаблицаЗначений - найденные варианты. +// см. КонструкторСпискаДомов // Функция СписокДомов(ИдентификаторАдресногоОбъекта, Знач СтрокаПоиска, ПорцияПриПоиске = 20) Экспорт @@ -732,7 +729,7 @@ // Возвращает есть ли список домов по идентификатору адресного объекта, поиск по подобию. // // Параметры: -// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Родительский объект. +// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - родительский объект. // // Возвращаемое значение: // Булево - Истина, если есть информация о домах. @@ -786,8 +783,8 @@ // Возвращает список номеров земельных участков по идентификатору адресного объекта, поиск по подобию. // // Параметры: -// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Родительский объект. -// СтрокаПоиска - Строка - Текст, отбора в списке земельных участков. +// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - родительский объект. +// СтрокаПоиска - Строка - текст, отбора в списке земельных участков. // // Возвращаемое значение: // ТаблицаЗначений - найденные варианты. @@ -861,16 +858,16 @@ // Возвращает актуальные данные адресного объекта или ориентира с точностью доя подчиненного (без домов). // // Параметры: -// Идентификатор - УникальныйИдентификатор - Идентификатор адресного объекта или ориентира. +// Идентификатор - УникальныйИдентификатор - идентификатор адресного объекта или ориентира. // // Возвращаемое значение: // Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Данные - Структура - Адрес. +// * Данные - Структура - адрес. // Функция АктуальныеАдресныеСведения(СведенияОбАдресномОбъекте) Экспорт @@ -911,36 +908,35 @@ // Проверяет данные на соответствие классификатору. // // Параметры: -// Адреса - Массив - Проверяемые адреса. Содержит структуры с полями: -// * Адрес - ОбъектXDTO, Строка - Проверяемый адрес +// Адреса - Массив - проверяемые адреса. Содержит структуры с полями: +// * Адрес - ОбъектXDTO +// - Строка - проверяемый адрес // ((http://www.v8.1c.ru/ssl/AddressSystem) АдресРФ) или его // XML-сериализация. -// * ФорматАдреса - Строка - Тип используемого классификатора для проверки. +// * ФорматАдреса - Строка - тип используемого классификатора для проверки. // // Возвращаемое значение: // Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Данные - Массив - Результаты проверки. Индекс результата совпадает с индексом -// параметра Адреса. -// Каждый элемент массива - структура, содержащая поля: -// ** Ошибки - Массив - Описание ошибок поиска в классификаторе. Состоит из структур с полями. -// *** Ключ - Строка - Служебный идентификатор места ошибки - путь XPath в объекте XDTO. -// *** Текст - Строка - Текст ошибки. -// *** Подсказка - Строка - Текст возможного исправления ошибки. -// ** Варианты - Массив - Содержит описание найденных вариантов. Каждый элемент - структура с полями: -// *** Идентификатор - УникальныйИдентификатор - Код классификатора объекта - варианта. -// *** Индекс - Число - Почтовый индекс объекта - варианта. -// *** КодКЛАДР - Число - Код КЛАДР ближайшего объекта. -// *** OKATO - Число - Данные ФНС. -// *** ОКТМО - Число - Данные ФНС. -// *** КодИФНСФЛ - Число - Данные ФНС. -// *** КодИФНСЮЛ - Число - Данные ФНС. -// *** КодУчасткаИФНСФЛ - Число - Данные ФНС. -// *** КодУчасткаИФНСЮЛ - Число - Данные ФНС. +// * Данные - Массив из Структура - результаты проверки. Индекс результата совпадает с индексом параметра Адреса: +// ** Ошибки - Массив из Структура - описание ошибок поиска в классификаторе. Состоит из структур с полями: +// *** Ключ - Строка - служебный идентификатор места ошибки - путь XPath в объекте XDTO. +// *** Текст - Строка - текст ошибки. +// *** Подсказка - Строка - текст возможного исправления ошибки. +// ** Варианты - Массив из Структура - содержит описание найденных вариантов. Каждый элемент - структура с полями: +// *** Идентификатор - УникальныйИдентификатор - код классификатора объекта - варианта. +// *** Индекс - Число - почтовый индекс объекта - варианта. +// *** КодКЛАДР - Число - код КЛАДР ближайшего объекта. +// *** OKATO - Число - данные ФНС. +// *** ОКТМО - Число - данные ФНС. +// *** КодИФНСФЛ - Число - данные ФНС. +// *** КодИФНСЮЛ - Число - данные ФНС. +// *** КодУчасткаИФНСФЛ - Число - данные ФНС. +// *** КодУчасткаИФНСЮЛ - Число - данные ФНС. // Функция РезультатПроверкиАдресовПоКлассификатору(Адреса) Экспорт @@ -991,7 +987,7 @@ РезультатВебСервис = Новый Соответствие; Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] И АдресаЗагруженныеДанные.Количество() > 0 Тогда - РезультатЗагруженныеДанные = ПроверитьАдресаПоКлассификатору(АдресаЗагруженныеДанные); + РезультатЗагруженныеДанные = ПроверитьАдресаПоКлассификатору(АдресаЗагруженныеДанные, Истина); КонецЕсли; Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина И АдресаВебСервис.Количество() > 0 Тогда @@ -1034,41 +1030,269 @@ КонецФункции -// Проверяет данные на соответствие классификатору. -// // Параметры: -// Адреса - Массив - Проверяемые адреса. Содержит структуры с полями: -// * Адрес - ОбъектXDTO, Строка - Проверяемый адрес -// ((http://www.v8.1c.ru/ssl/AddressSystem) АдресРФ) или его -// XML-сериализация. -// * ФорматАдреса - Строка - Тип используемого классификатора для проверки. -// +// НаборАдресов - Соответствие +// ПроверятьУстареваниеАдресов - Булево // Возвращаемое значение: -// Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ -// = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ -// = Ложь. -// * Данные - Массив - Результаты проверки. Индекс результата совпадает с индексом -// параметра Адреса. -// Каждый элемент массива - структура, содержащая поля: -// ** Ошибки - Массив - Описание ошибок поиска в классификаторе. Состоит из структур с полями. -// *** Ключ - Строка - Служебный идентификатор места ошибки - путь XPath в объекте XDTO. -// *** Текст - Строка - Текст ошибки. -// *** Подсказка - Строка - Текст возможного исправления ошибки. -// ** Варианты - Массив - Содержит описание найденных вариантов. Каждый элемент - структура с полями: -// *** Идентификатор - УникальныйИдентификатор - Код классификатора объекта - варианта. -// *** Индекс - Число - Почтовый индекс объекта - варианта. -// *** КодКЛАДР - Число - Код КЛАДР ближайшего объекта. -// *** OKATO - Число - Данные ФНС. -// *** ОКТМО - Число - Данные ФНС. -// *** КодИФНСФЛ - Число - Данные ФНС. -// *** КодИФНСЮЛ - Число - Данные ФНС. -// *** КодУчасткаИФНСФЛ - Число - Данные ФНС. -// *** КодУчасткаИФНСЮЛ - Число - Данные ФНС. +// Соответствие из КлючИЗначение - где: +// * Ключ - Число +// * Значение - см. РезультатПроверкиАдреса +// +Функция ПроверкаАдресов(Знач НаборАдресов, ПроверятьУстареваниеАдресов = Ложь) Экспорт + + Результат = Новый Соответствие; + + РезультатыЗагруженныеДанные = Новый Соответствие; + РезультатыВебСервис = Новый Соответствие; + + АдресаВебСервис = Новый Соответствие; + АдресаЗагруженныеДанные = Новый Соответствие; + + ПервичнаяПроверка = ПервичнаяПроверкаАдресов(НаборАдресов); + + Для каждого АдресПроверки Из ПервичнаяПроверка.Адреса Цикл + УникальныйКлюч = АдресПроверки.Ключ; + СведенияОАдресе = АдресПроверки.Значение; + Адрес = НаборАдресов[УникальныйКлюч]; + + Если СведенияОАдресе.АдресПроверен И Не СведенияОАдресе.АдресКорректный Тогда + Результат.Вставить(УникальныйКлюч, СведенияОАдресе); + Продолжить; + КонецЕсли; + + ЗагруженныеСведения = СведенияОРегионе(Адрес.Area + " " + Адрес.AreaType); + + Если ЗагруженныеСведения.Загружен Тогда + АдресаЗагруженныеДанные.Вставить(УникальныйКлюч, Адрес); + Иначе + АдресаВебСервис.Вставить(УникальныйКлюч, Адрес); + КонецЕсли; + КонецЦикла; + + ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); + + Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] И АдресаЗагруженныеДанные.Количество() > 0 Тогда + РезультатыЗагруженныеДанные = ПроверитьАдресаПоКлассификатору(АдресаЗагруженныеДанные, ПроверятьУстареваниеАдресов); + + Для Каждого РезультатЗагруженныеДанные Из РезультатыЗагруженныеДанные Цикл + Результат.Вставить(РезультатЗагруженныеДанные.Ключ, РезультатЗагруженныеДанные.Значение); + КонецЦикла; + + КонецЕсли; + + Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина И АдресаВебСервис.Количество() > 0 Тогда + ДанныеИзВебСервиса = ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(АдресаВебСервис); + Если Не ДанныеИзВебСервиса.Отказ Тогда + РезультатыВебСервис = ДанныеИзВебСервиса.Данные; + КонецЕсли; + + Для Каждого РезультатВебСервис Из РезультатыВебСервис Цикл + Результат.Вставить(РезультатВебСервис.Ключ, РезультатВебСервис.Значение); + КонецЦикла; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Преобразует формат из XML в JSON // -Функция РезультатПроверкиАдресов(НаборАдресов) Экспорт +Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Представление = "") Экспорт + + Результат = ОписаниеНовойКонтактнойИнформации(); + + НаименованиеСтраны = ""; + + Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда + Если ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + XDTOАдрес = ДесериализацияАдресаXDTO(КонтактнаяИнформация); + Если XDTOАдрес.Свойства().Получить("Представление") <> Неопределено Тогда + Результат.Value = XDTOАдрес.Представление; + КонецЕсли; + Если XDTOАдрес.Свойства().Получить("Комментарий") <> Неопределено И ТипЗнч(XDTOАдрес.Комментарий) = Тип("Строка") Тогда + Результат.Comment = XDTOАдрес.Комментарий; + КонецЕсли; + ИначеЕсли ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + АдресИзJSON = JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация); + ЗаполнитьЗначенияСвойств(Результат, АдресИзJSON); + УстановитьИдентификаторыАдреса(Результат); + Возврат Результат; + Иначе + Возврат Результат; + КонецЕсли; + Иначе + Возврат Результат; + КонецЕсли; + + ПространствоИмен = ПространствоИмен(); + Состав = XDTOАдрес.Состав; + + Если Состав = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + XDTOТип = Состав.Тип(); + + Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") + Или XDTOТип = ФабрикаXDTO.Тип("http://www.v8.1c.ru/ssl/contactinfo", "Адрес") Тогда + + Если Состав.Свойства().Получить("Страна") <> Неопределено И ЗначениеЗаполнено(Состав.Страна) Тогда + НаименованиеСтраны = Состав.Страна; + Иначе + НаименованиеСтраны = ОсновнаяСтрана(); + КонецЕсли; + + АдресРФ = Состав.Состав; + + ИначеЕсли XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ") Тогда + АдресРФ = Состав; + Иначе + Возврат Результат; + КонецЕсли; + + Если АдресРФ = Неопределено Тогда + Возврат Результат; + ИначеЕсли ТипЗнч(АдресРФ) = Тип("Строка") Тогда + + Если СтрЧислоВхождений(АдресРФ, ",") = 9 Тогда + + Результат.AddressType = АдминистративноТерриториальныйАдрес(); + + ЧастиАдреса = СтрРазделить(АдресРФ, ","); + Результат.ZIPCode = ЧастиАдреса[1]; + + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[2]); + Результат.Area = НаименованиеИСокращение.Наименование; + Результат.AreaType = НаименованиеИСокращение.Сокращение; + + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[3]); + Результат.District = НаименованиеИСокращение.Наименование; + Результат.DistrictType = НаименованиеИСокращение.Сокращение; + + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[4]); + Результат.City = НаименованиеИСокращение.Наименование; + Результат.CityType = НаименованиеИСокращение.Сокращение; + + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[5]); + Результат.Locality = НаименованиеИСокращение.Наименование; + Результат.LocalityType = НаименованиеИСокращение.Сокращение; + + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[6]); + Результат.Street = НаименованиеИСокращение.Наименование; + Результат.StreetType = НаименованиеИСокращение.Сокращение; + + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[7]); + Результат.HouseNumber = НаименованиеИСокращение.Сокращение; + Результат.HouseType = НаименованиеИСокращение.Наименование; + + Если ЗначениеЗаполнено(ЧастиАдреса[8]) Тогда + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[8]); + Результат.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование)); + КонецЕсли; + + Если ЗначениеЗаполнено(ЧастиАдреса[9]) Тогда + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[9]); + Результат.Apartments.Добавить(ЗначениеСтроенияИлиПомещения( + НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование)); + КонецЕсли; + КонецЕсли; + Иначе + + Если ЗначениеЗаполнено(АдресРФ.Адрес_по_документу) Тогда + Результат.AddressType = АдресВСвободнойФорме(); + Иначе + Результат.AddressType = АдминистративноТерриториальныйАдрес(); + КонецЕсли; + + Результат.Country = НаименованиеСтраны; + Результат.ZIPCode = ПочтовыйИндексАдреса(АдресРФ); + Результат.OKTMO = Формат(АдресРФ.ОКТМО, "ЧГ=0"); + Результат.OKATO = Формат(АдресРФ.ОКАТО, "ЧГ=0"); + + СубъектРФ = НаименованиеИСокращение(АдресРФ.СубъектРФ); + Результат.Area = Строка(СубъектРФ.Наименование); + Результат.AreaType = Строка(СубъектРФ.Сокращение); + + РайонАдреса = НаименованиеИСокращение(РайонАдреса(АдресРФ)); + Результат.District = Строка(РайонАдреса.Наименование); + Результат.DistrictType = Строка(РайонАдреса.Сокращение); + + Город = НаименованиеИСокращение(АдресРФ.Город); + Результат.City = Строка(Город.Наименование); + Результат.CityType = Строка(Город.Сокращение); + + НаселПункт = НаименованиеИСокращение(АдресРФ.НаселПункт); + Результат.Locality = Строка(НаселПункт.Наименование); + Результат.LocalityType = Строка(НаселПункт.Сокращение); + + Улица = НаименованиеИСокращение(АдресРФ.Улица); + Результат.Street = Строка(Улица.Наименование); + Результат.StreetType = Строка(Улица.Сокращение); + + ВнутригРайон = НаименованиеИСокращение(АдресРФ.ВнутригРайон); + Результат.CityDistrict = Строка(ВнутригРайон.Наименование); + Результат.CityDistrictType = Строка(ВнутригРайон.Сокращение); + + ЗначениеДополнительныхЭлементов = ЗначениеДополнительныхЭлементов(АдресРФ); + Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент) Тогда + ДополнительныйЭлемент = НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент); + Результат.Territory = Строка(ДополнительныйЭлемент.Наименование); + Результат.TerritoryType = Строка(ДополнительныйЭлемент.Сокращение); + КонецЕсли; + Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент) Тогда + ПодчиненныйЭлемент = НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент); + Результат.Street = Строка(ПодчиненныйЭлемент.Наименование); + Результат.StreetType = Строка(ПодчиненныйЭлемент.Сокращение); + КонецЕсли; + + ЗданияИПомещения = ЗданияИПомещенияАдреса(АдресРФ); + Для каждого Здание Из ЗданияИПомещения.Здания Цикл + Если Здание.Вид = 1 Тогда + Результат.HouseType = Здание.Тип; + Результат.HouseNumber = Здание.Значение; + Иначе + Результат.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(Здание.Тип, Здание.Значение)); + КонецЕсли; + КонецЦикла; + + Для каждого Помещение Из ЗданияИПомещения.Помещения Цикл + Результат.Apartments.Добавить(ЗначениеСтроенияИлиПомещения(Помещение.Тип, Помещение.Значение)); + КонецЦикла; + + + КонецЕсли; + + УстановитьИдентификаторыАдреса(Результат); + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - где: +// * Ключ - Число +// * Значение - Структура: +// ** Отказ - Булево - поставщик не доступен. +// ** ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ=Ложь. +// ** КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ=Ложь. +// ** Данные - Массив из Структура - результаты проверки. где: +// *** Ошибки - Массив из Структура - описание ошибок поиска в классификаторе. Состоит из структур с полями: +// **** Ключ - Строка - служебный идентификатор места ошибки - путь XPath в объекте XDTO. +// **** Текст - Строка - текст ошибки. +// **** Подсказка - Строка - текст возможного исправления ошибки. +// *** Варианты - Массив из Структура - содержит описание найденных вариантов. Каждый элемент структура с полями: +// **** Идентификатор - УникальныйИдентификатор - код классификатора объекта - варианта. +// **** Индекс - Число - почтовый индекс объекта - варианта. +// **** КодКЛАДР - Число - код КЛАДР ближайшего объекта. +// **** OKATO - Число - данные ФНС. +// **** ОКТМО - Число - данные ФНС. +// **** КодИФНСФЛ - Число - данные ФНС. +// **** КодИФНСЮЛ - Число - данные ФНС. +// **** КодУчасткаИФНСФЛ - Число - данные ФНС. +// **** КодУчасткаИФНСЮЛ - Число - данные ФНС. +// +Функция РезультатПроверкиАдресов(НаборАдресов, ПроверятьУстареваниеАдресов = Ложь) Экспорт АдресаВебСервис = Новый Соответствие; АдресаЗагруженныеДанные = Новый Соответствие; @@ -1100,11 +1324,11 @@ ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] И АдресаЗагруженныеДанные.Количество() > 0 Тогда - РезультатЗагруженныеДанные = ПроверитьАдресаПоКлассификатору(АдресаЗагруженныеДанные); + РезультатЗагруженныеДанные = ПроверитьАдресаПоКлассификатору(АдресаЗагруженныеДанные, ПроверятьУстареваниеАдресов); КонецЕсли; Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина И АдресаВебСервис.Количество() > 0 Тогда - ДанныеИзВебСервиса = ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(АдресаВебСервис); + ДанныеИзВебСервиса = ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(АдресаВебСервис, Ложь); Если Не ДанныеИзВебСервиса.Отказ Тогда РезультатыВебСервис = ДанныеИзВебСервиса.Данные; КонецЕсли; @@ -1121,11 +1345,11 @@ // Возвращает соответствие полных наименований адресных объектов и их сокращения. // // Параметры: -// НаименованияАдресныхОбъектов - Массив - Полные наименования адресных объектов. Если передан пустой массив, +// НаименованияАдресныхОбъектов - Массив - полные наименования адресных объектов. Если передан пустой массив, // то будут возвращен полный список наименований и сокращений. // // Возвращаемое значение: -// Соответствие - Соответствие найденных полных наименований адресных объектов их сокращениям. +// Соответствие - соответствие найденных полных наименований адресных объектов их сокращениям. // Функция СокращенияАдресныхОбъектов(НаименованияАдресныхОбъектов) Экспорт @@ -1168,11 +1392,11 @@ // Определение кодов ОКАТО, ОКТМО, налоговых инспекций ФНС и др. адреса // // Параметры: -// Адрес - Строка - Адрес в формате JSON или XML -// Источник - Строка - Устарело. Код сначала ищется в загруженных данных и если не найден, то в веб-сервисе. +// Адрес - Строка - адрес в формате JSON или XML +// Источник - Строка - устарело. Код сначала ищется в загруженных данных и если не найден, то в веб-сервисе. // // Возвращаемое значение: -// Структура - Коды адреса. +// Структура - коды адреса. // Функция КодыАдреса(Знач Адрес, Источник = Неопределено) Экспорт @@ -1201,11 +1425,11 @@ // Определение кодов КЛАДР и ОКАТО, ОКТМО, налоговых инспекций ФНС и др. адреса. // // Параметры: -// Адрес - Строка - Адрес в формате XML или структура с полями адреса. +// Адрес - Строка - адрес в формате XML или структура с полями адреса. // ИдентификаторАдресногоОбъекта - Строка - идентификатор адреса. -// Источник - Строка - Источник получения кодов адреса, Варианты: "Сервис1С", "ЗагруженныеДанные". +// Источник - Строка - источник получения кодов адреса, Варианты: "Сервис1С", "ЗагруженныеДанные". // Возвращаемое значение: -// Структура - Содержит 2 структуры: Коды адреса и Коды КЛАДР. +// Структура - содержит 2 структуры: Коды адреса и Коды КЛАДР. // Функция КодыАдресаИКодыКЛАДР(Знач Адрес, Знач ИдентификаторАдресногоОбъекта = "", Источник = Неопределено) Экспорт @@ -1269,16 +1493,9 @@ Если НЕ РезультатЗапроса.Пустой() Тогда - КодКЛАДР = Формат(РезультатЗапроса.Выгрузить()[0].КодКЛАДР, "ЧГ=0"); - - Если СтрДлина(КодКЛАДР) = 14 Тогда - КодКЛАДР = "0" + КодКЛАДР + "00"; - ИначеЕсли СтрДлина(КодКЛАДР) = 15 Тогда - КодКЛАДР = КодКЛАДР + "00"; // добавляем признак актуальности - ИначеЕсли СтрДлина(КодКЛАДР) = 16 Тогда - КодКЛАДР = "0" + КодКЛАДР; - КонецЕсли; + КодКЛАДР = КодКЛАДРСтрокой(РезультатЗапроса.Выгрузить()[0].КодКЛАДР); Результат.КодыАдреса.КодКЛАДР = КодКЛАДР; + СформироватьКодыКЛАДР(КодКЛАДР, Адрес, Результат.КодыКЛАДР); КодКЛАДРЗаполнены = Истина; @@ -1296,34 +1513,34 @@ // Получаем коды из веб-сервиса. Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] Или Источник = "Сервис1С" Тогда - ИдентификаторОбъекта = ?(ЗначениеЗаполнено(Адрес.houseId), Адрес.houseId, ИдентификаторАдресногоОбъекта); + Адреса = Новый Соответствие; + Адреса.Вставить(1, Адрес); - Если ЗаполненыВсеИдентификаторыОбъекта(Адрес) И ЗначениеЗаполнено(ИдентификаторОбъекта) Тогда + РезультатВебСервис = ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(Адреса); + + Если НЕ РезультатВебСервис.Отказ Тогда - ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("selectByCode?code=%1&codeType=ID", - Строка(ИдентификаторОбъекта)); - - РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса, 20); - - Если НЕ РезультатВебСервис.Отказ И РезультатВебСервис.Данные.Количество() > 0 Тогда - - Сведения = РезультатВебСервис.Данные[0]; - Если Не КодКЛАДРЗаполнены Тогда - Результат.КодыАдреса.КодКЛАДР = Сведения.codeKLADR; - СформироватьКодыКЛАДР(Результат.КодыАдреса.КодКЛАДР, Адрес, Результат.КодыКЛАДР); - КонецЕсли; - - Результат.КодыАдреса.КодКЛАДР = Сведения.codeKLADR; - Результат.КодыАдреса.Идентификатор = ИдентификаторАдресногоОбъекта(Сведения, Адрес.addressType); - Результат.КодыАдреса.ИдентификаторДома = ?(ЗначениеЗаполнено(Сведения.houseId), Сведения.houseId, ""); - Результат.КодыАдреса.ОКАТО = Сведения.okato; - Результат.КодыАдреса.ОКТМО = Сведения.oktmo; - Результат.КодыАдреса.КодИФНСФЛ = Сведения.ifnsFlCode; - Результат.КодыАдреса.КодИФНСЮЛ = Сведения.ifnsUlCode; - Результат.КодыАдреса.КодУчасткаИФНСФЛ = Сведения.ifnsFlAreaCode; - Результат.КодыАдреса.КодУчасткаИФНСЮЛ = Сведения.ifnsUlAreaCode; - + АдресПослеПроверки = РезультатВебСервис.Данные.Получить(1); + Если Не АдресПослеПроверки.АдресКорректный Или АдресПослеПроверки.Варианты.Количество() = 0 Тогда + Возврат Результат; КонецЕсли; + + Сведения = АдресПослеПроверки.Варианты[0]; + Если Не КодКЛАДРЗаполнены Тогда + Результат.КодыАдреса.КодКЛАДР = Сведения.codeKLADR; + СформироватьКодыКЛАДР(Результат.КодыАдреса.КодКЛАДР, Адрес, Результат.КодыКЛАДР); + КонецЕсли; + + Результат.КодыАдреса.КодКЛАДР = Сведения.codeKLADR; + Результат.КодыАдреса.Идентификатор = ИдентификаторАдресногоОбъекта(Сведения, Адрес.addressType); + Результат.КодыАдреса.ИдентификаторДома = ?(ЗначениеЗаполнено(Сведения.houseId), Сведения.houseId, ""); + Результат.КодыАдреса.ОКАТО = Сведения.okato; + Результат.КодыАдреса.ОКТМО = Сведения.oktmo; + Результат.КодыАдреса.КодИФНСФЛ = Сведения.ifnsFlCode; + Результат.КодыАдреса.КодИФНСЮЛ = Сведения.ifnsUlCode; + Результат.КодыАдреса.КодУчасткаИФНСФЛ = Сведения.ifnsFlAreaCode; + Результат.КодыАдреса.КодУчасткаИФНСЮЛ = Сведения.ifnsUlAreaCode; + КонецЕсли; КонецЕсли; @@ -1388,10 +1605,10 @@ // Возвращает информацию о состоянии загруженности регионов. // // Возвращаемое значение: -// ТаблицаЗначений - описание состояния. Содержит колонки. -// * КодСубъектаРФ - Число - Код региона. -// * Идентификатор - УникальныйИдентификатор - Идентификатор региона. -// * Представление - Строка - Наименование и сокращение региона. +// ТаблицаЗначений - описание состояния. Содержит колонки: +// * КодСубъектаРФ - Число - код региона. +// * Идентификатор - УникальныйИдентификатор - идентификатор региона. +// * Представление - Строка - наименование и сокращение региона. // * Загружено - Булево - Истина, если классификатор по данному региону сейчас загружен. // * ДатаВерсии - Дата - UTC версия загруженных данных. // @@ -1406,6 +1623,7 @@ Запрос = Новый Запрос("ВЫБРАТЬ | Параметр.Наименование КАК Наименование, | Параметр.Сокращение КАК Сокращение, + | Параметр.ОКТМО КАК ОКТМО, | Параметр.КодСубъектаРФ КАК КодСубъектаРФ |ПОМЕСТИТЬ Классификатор |ИЗ @@ -1416,6 +1634,7 @@ |ВЫБРАТЬ | Классификатор.Наименование + "" "" + Классификатор.Сокращение КАК Представление, | Классификатор.КодСубъектаРФ КАК КодСубъектаРФ, + | Классификатор.ОКТМО КАК ОКТМО, | ЗагруженныеВерсииАдресныхСведений.Версия КАК Версия, | ЕСТЬNULL(ЗагруженныеВерсииАдресныхСведений.ДатаВерсии, ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1)) КАК ДатаВерсии, | ЕСТЬNULL(ЗагруженныеВерсииАдресныхСведений.ДатаЗагрузки, ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1)) КАК ДатаЗагрузки, @@ -1447,6 +1666,7 @@ ЗагруженныеСведения.Индексы.Добавить("Идентификатор"); ЗагруженныеСведения.Индексы.Добавить("КодСубъектаРФ"); ЗагруженныеСведения.Индексы.Добавить("Загружено"); + ЗагруженныеСведения.Индексы.Добавить("ОКТМО"); // Корректируем идентификаторы из-за особенностей платформы по передаче уникального // идентификатора в таблицу-параметр запроса. @@ -1460,13 +1680,14 @@ КонецЦикла; Возврат ЗагруженныеСведения; + КонецФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. // Параметры: -// НазначениеРолей - См. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей.НазначениеРолей +// НазначениеРолей - см. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей.НазначениеРолей // Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт @@ -1484,6 +1705,10 @@ КонецПроцедуры // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. +// +// Параметры: +// ЗапросыРазрешений - см. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам.ЗапросыРазрешений +// Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -1654,7 +1879,7 @@ // и если да - установить флажок Загружать. // // Параметры: -// Дескриптор - ОбъектXDTO - Дескриптор. +// Дескриптор - ОбъектXDTO - дескриптор. // Загружать - Булево - Истина, если загружать, Ложь - иначе. // Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт @@ -1670,7 +1895,7 @@ // Вызывается после вызова ДоступныНовыеДанные, позволяет разобрать данные. // // Параметры: -// Дескриптор - ОбъектXDTO - Дескриптор. +// Дескриптор - ОбъектXDTO - дескриптор. // ПутьКФайлу - Строка - полное имя извлеченного файла. Файл будет автоматически удален // после завершения процедуры. Если в менеджере сервиса не был // указан файл - значение аргумента равно Неопределено. @@ -1686,7 +1911,7 @@ // Вызывается при отмене обработки данных в случае сбоя. // // Параметры: -// Дескриптор - ОбъектXDTO - Дескриптор. +// Дескриптор - ОбъектXDTO - дескриптор. // Процедура ОбработкаДанныхОтменена(Знач Дескриптор) Экспорт @@ -1699,11 +1924,11 @@ #Область СлужебныеПроцедурыИФункции // Параметры: -// НаименованияАдресныхОбъектов - Массив - +// НаименованияАдресныхОбъектов - Массив // Возвращаемое значение: -// ТаблицаЗначений - Описание: -// * Наименование - Строка - -// * Сокращение - Строка - +// ТаблицаЗначений: +// * Наименование - Строка +// * Сокращение - Строка // Функция ТаблицаАдресныхСокращений(НаименованияАдресныхОбъектов) @@ -1878,6 +2103,48 @@ КонецФункции +// Параметры: +// ЧастиАдреса - см. УправлениеКонтактнойИнформациейСлужебный.ЧастиАдреса +// Возвращаемое значение: +// Структура: +// * Country - Строка +// * ID - Строка +// * AddressType - Строка +// * AreaCode - Строка +// * AreaID - Строка +// * District - Строка +// * DistrictType - Строка +// * DistrictID - Строка +// * MunDistrict - Строка +// * MunDistrictType - Строка +// * MunDistrictID - Строка +// * CityID - Строка +// * Settlement - Строка +// * SettlementType - Строка +// * SettlementID - Строка +// * CityDistrict - Строка +// * CityDistrictType - Строка +// * CityDistrictID - Строка +// * Territory - Строка +// * TerritoryType - Строка +// * TerritoryID - Строка +// * Locality - Строка +// * LocalityType - Строка +// * LocalityID - Строка +// * StreetID - Строка +// * HouseType - Строка +// * HouseNumber - Строка +// * HouseID - Строка +// * Buildings - Массив +// * Apartments - Массив +// * CodeKLADR - Строка +// * OKTMO - Строка +// * OKATO - Строка +// * IFNSFLCode - Строка +// * IFNSULCode - Строка +// * IFNSFLAreaCode - Строка +// * IFNSULAreaCode - Строка +// Функция РаспознатьАдресЗагруженныеДанные(ЧастиАдреса) ОбработатьОбщепринятыеСокращения(ЧастиАдреса); @@ -1893,7 +2160,7 @@ |ПОМЕСТИТЬ ДанныеАдреса |ИЗ | &ДанныеАдреса КАК ДанныеАдреса - |ГДЕ ДанныеАдреса.Уровень >= 0 + |ГДЕ ДанныеАдреса.Уровень >= 0 | |ИНДЕКСИРОВАТЬ ПО | Уровень, @@ -1945,8 +2212,8 @@ Запрос.УстановитьПараметр("ДанныеАдреса", ЧастиАдреса); РезультатЗапроса = Запрос.ВыполнитьПакет(); - СопоставленныеЧастиАдреса = РезультатЗапроса[1].Выгрузить(); - ДомаЗдания = РезультатЗапроса[2].Выгрузить(); + СопоставленныеЧастиАдреса = СопоставленныеЧастиАдреса(РезультатЗапроса); + ДомаЗдания = ДомаЗдания(РезультатЗапроса); // дома здания КодыДомовВладенийИСтроений = КодыДомовВладенийИСтроений(); @@ -2104,7 +2371,7 @@ Индекс = ?(СтрокаИндекс <> Неопределено, СтрокаИндекс.Значение, ""); Сведения = Новый Структура("ЗагруженныеДанные", Истина); - ВариантыАдресов = НайденныеАдреса.Выгрузить(); + ВариантыАдресов = ДополнительныеСведенияНайденныхАдресов(НайденныеАдреса); Если ВариантыАдресов.Количество() = 1 Тогда Сведения.Вставить("Идентификатор", ВариантыАдресов[0].Идентификатор); @@ -2183,6 +2450,58 @@ КонецФункции +// Параметры: +// РезультатЗапроса - Массив +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Позиция - Число +// * Значение - Строка +// * Наименование - Строка +// * Сокращение - Строка +// +Функция ДомаЗдания(Знач РезультатЗапроса) + + ДомаЗдания = РезультатЗапроса[2].Выгрузить(); + Возврат ДомаЗдания + +КонецФункции + +// Параметры: +// РезультатЗапроса - Массив +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Уровень - Число +// * Позиция - Число +// * Наименование - Строка +// * Сокращение - Строка +// +Функция СопоставленныеЧастиАдреса(Знач РезультатЗапроса) + + СопоставленныеЧастиАдреса = РезультатЗапроса[1].Выгрузить(); + Возврат СопоставленныеЧастиАдреса + +КонецФункции + +// Параметры: +// НайденныеАдреса - РезультатЗапроса +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Идентификатор - Строка +// * Представление - Строка +// * Муниципальный - Булево +// * ДополнительныеАдресныеСведения - Строка +// * ПочтовыйИндекс - Строка +// * Уровень - Число +// +Функция ДополнительныеСведенияНайденныхАдресов(НайденныеАдреса) + + Возврат НайденныеАдреса.Выгрузить(); + +КонецФункции + Функция АдминистративноТерриториальныйАдрес() Возврат "Административно-территориальный"; КонецФункции @@ -2405,8 +2724,8 @@ Если ЗначениеЗаполнено(Адрес[УровеньАдреса]) Тогда - Запрос.УстановитьПараметр("Наименование" + Строка(Счетчик), Адрес[УровеньАдреса]); - Запрос.УстановитьПараметр("Сокращение" + Строка(Счетчик), Адрес[УровеньАдреса + "Type"]); + Запрос.УстановитьПараметр("Наименование" + XMLСтрока(Счетчик), Адрес[УровеньАдреса]); + Запрос.УстановитьПараметр("Сокращение" + XMLСтрока(Счетчик), Адрес[УровеньАдреса + "Type"]); КакиеУровниПроверять.Вставить(УровеньАдреса, Счетчик); Счетчик = Счетчик + 1; Если Счетчик = 6 Тогда @@ -2419,8 +2738,8 @@ // Заполняем пустые адресные сведения Для ИндексСчетчик = Счетчик По 5 Цикл - Запрос.УстановитьПараметр("Наименование" + Строка(ИндексСчетчик), ""); - Запрос.УстановитьПараметр("Сокращение" + Строка(ИндексСчетчик), ""); + Запрос.УстановитьПараметр("Наименование" + XMLСтрока(ИндексСчетчик), ""); + Запрос.УстановитьПараметр("Сокращение" + XMLСтрока(ИндексСчетчик), ""); КонецЦикла; @@ -2491,7 +2810,7 @@ Для каждого АдресДляПроверки Из АдресаДляПроверки Цикл - АдресИзСервиса = Результат.Данные[АдресДляПроверки.Ключ]; + АдресИзСервиса = Результат.Данные[АдресДляПроверки.Ключ]; // см. РезультатПроверкиАдреса Если АдресИзСервиса.Варианты.Количество() > 0 Тогда ВариантИзСервиса = АдресИзСервиса.Варианты[0]; @@ -2564,7 +2883,7 @@ Продолжить; КонецЕсли; - Если ЭтоГородФедеральногоЗначения(Адрес) = Истина + Если ЭтоГородФедеральногоЗначения(ПолноеНаименованиеРегиона(Адрес.Area, Адрес.AreaType)) = Истина И ЭтоМуниципальныйАдрес(Адрес.addressType) Тогда УстановитьИдентификаторыДляМуниципальногоАдреса(Адрес); КонецЕсли; @@ -2607,6 +2926,14 @@ // Конструктор таблицы - результата выбора по почтовому индексу. // +// Возвращаемое значение: +// ТаблицаЗначений: +// * Неактуален - Булево +// * Идентификатор - УникальныйИдентификатор +// * Представление - Строка +// * Уровень - Число +// * ТипАдресногоЭлемента - Строка +// Функция ТаблицаДанныхДляВыбораПоПочтовомуИндексу() Данные = Новый ТаблицаЗначений; @@ -3052,8 +3379,8 @@ Если Адрес.Свойство(УровеньАдреса) И ЗначениеЗаполнено(Адрес[УровеньАдреса]) Тогда - Запрос.УстановитьПараметр("Наименование" + Строка(Счетчик), Адрес[УровеньАдреса]); - Запрос.УстановитьПараметр("Сокращение" + Строка(Счетчик), Адрес[УровеньАдреса + "Type"]); + Запрос.УстановитьПараметр("Наименование" + XMLСтрока(Счетчик), Адрес[УровеньАдреса]); + Запрос.УстановитьПараметр("Сокращение" + XMLСтрока(Счетчик), Адрес[УровеньАдреса + "Type"]); КакиеУровниПроверять.Вставить(УровеньАдреса, Счетчик); Если Счетчик > 0 Тогда @@ -3113,6 +3440,10 @@ КонецФункции +// Параметры: +// Результат - см. СведенияОЗагруженномРегионе +// СведенияОРегионе - см. АдресныйКлассификаторСлужебный.НаименованиеИСокращение +// Процедура ПроверкаНаУстаревшийРегион(Результат, СведенияОРегионе) Экспорт Запрос = Новый Запрос; @@ -3141,9 +3472,27 @@ КонецПроцедуры -Функция АктуальныеДанныеОРегионе(Знач СведенияОРегионе) Экспорт +// Возвращаемое значение: +// Структура: +// * Загружен - Булево +// * Устарел - Булево +// * КодСубъектаРФ - Неопределено +// +Функция СведенияОЗагруженномРегионе() Экспорт - Перем Запрос, РезультатЗапроса; + Результат = Новый Структура("Загружен, Устарел, КодСубъектаРФ", Ложь, Ложь, Неопределено); + Возврат Результат; + +КонецФункции + +// Параметры: +// СведенияОРегионе - см. АдресныйКлассификаторСлужебный.НаименованиеИСокращение +// +// Возвращаемое значение: +// РезультатЗапроса +// Неопределено +// +Функция АктуальныеДанныеОРегионе(Знач СведенияОРегионе) Экспорт Запрос = Новый Запрос; Запрос.Текст = @@ -3424,7 +3773,7 @@ КонецЕсли; Если Порция > 0 Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Порция%", "ПЕРВЫЕ " + Строка(Порция)); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Порция%", "ПЕРВЫЕ " + XMLСтрока(Порция)); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Порция%", ""); КонецЕсли; @@ -3868,6 +4217,14 @@ // Конструктор таблицы - результата выбора. // +// Возвращаемое значение: +// ТаблицаЗначений: +// * Неактуален - Булево +// * Идентификатор - УникальныйИдентификатор +// * Представление - Строка +// * РегионЗагружен - Булево +// * ЭтоМуниципальный - Булево +// Функция ТаблицаДанныхДляИнтерактивногоВыбора() ТипБулево = Новый ОписаниеТипов("Булево"); @@ -3958,13 +4315,12 @@ ПолноеИмяФайла = КаталогФайлов + ВРег(Файл.Имя); Данные = ОписаниеФайла.Хранение; - ТипДанных = ТипЗнч(Данные); - Если ТипДанных = Тип("ДвоичныеДанные") Тогда + Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда Данные.Записать(ПолноеИмяФайла); ИначеЕсли ЭтоАдресВременногоХранилища(Данные) Тогда - Данные = ПолучитьИзВременногоХранилища(Данные); + Данные = ПолучитьИзВременногоХранилища(Данные); // ДвоичныеДанные Данные.Записать(ПолноеИмяФайла); Иначе @@ -4054,7 +4410,7 @@ КонецЕсли; - Результат = Сведения.Адреса[КлючЗначение.Ключ]; + Результат = Сведения.Адреса[КлючЗначение.Ключ]; // см. РезультатПроверкиАдреса Если СтрСравнить("ВСвободнойФорме", Адрес.AddressType) = 0 Тогда ДобавитьОшибкуПроверкиАдресаПоКлассификатору(Результат.Ошибки, "СубъектРФ", НСтр("ru = 'Адрес не может быть проверен, так как он введен в свободной форме'")); @@ -4108,18 +4464,27 @@ КонецФункции -Функция РезультатПроверкиАдреса() +// Возвращаемое значение: +// Структура: +// * АдресКорректный - Булево +// * АдресУстарел - Булево +// * АдресПроверен - Булево +// * Варианты - Массив +// * Ошибки - Массив +// +Функция РезультатПроверкиАдреса() Экспорт Результат = Новый Структура; Результат.Вставить("Ошибки", Новый Массив); Результат.Вставить("Варианты", Новый Массив); Результат.Вставить("АдресПроверен", Ложь); + Результат.Вставить("АдресУстарел", Ложь); Результат.Вставить("АдресКорректный", Ложь); Возврат Результат; КонецФункции -Функция ПроверитьАдресаПоЗагруженнымДанным(Адреса) +Функция ПроверитьАдресаПоЗагруженнымДанным(Адреса, ПроверятьУстареваниеАдресов = Ложь) ПодготовленныеДанные = ПервичнаяПроверкаАдресов(Адреса); Результаты = ПодготовленныеДанные.Адреса; @@ -4141,7 +4506,7 @@ Дома = РезультатЗапроса[9]; ДополнительныеСведения = РезультатЗапроса[11]; - АнализАдресныхОбъектов(Результаты, Адреса, ДанныеДляПроверкиАдресов.ПроверяемыеУровни, ВариантыАдресов); + АнализАдресныхОбъектов(Результаты, Адреса, ДанныеДляПроверкиАдресов.ПроверяемыеУровни, ВариантыАдресов, ПроверятьУстареваниеАдресов); АнализДомовИДополнительныхСведений(Результаты, Адреса, Дома, ДополнительныеСведения); Возврат Результаты; @@ -4151,30 +4516,30 @@ // Проверка адрес на соответствие ФИАС // // Параметры: -// Адреса - Соответствие - где: +// Адреса - Соответствие: // * Ключ - Число - уникальный ключ адреса, -// * Значение - Строка - Строка в формате JSON с адресом. +// * Значение - Строка - строка в формате JSON с адресом. // // Возвращаемое значение: -// Соответствие - где: +// Соответствие Из КлючИЗначение- где: // * Ключ - Число - уникальный ключ адреса, -// * Значение - Структура - где: +// * Значение - Структура: // * Ошибки - Массив из Строка - список ошибок // * Варианты - Массив Из Строка - варианты нового адреса, если адрес устарел // * АдресПроверен - Булево - признак, что адрес был проверен // * АдресКорректный - Булево - признак, что адрес корректный // -Функция ПроверитьАдресаПоКлассификатору(Адреса) +Функция ПроверитьАдресаПоКлассификатору(Адреса, ПроверятьУстареваниеАдресов = Ложь) ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("АнализАдресовПоКлассификатору", "Адреса", Адреса, Тип("Соответствие")); - Результаты = ПроверитьАдресаПоЗагруженнымДанным(Адреса); + Результаты = ПроверитьАдресаПоЗагруженнымДанным(Адреса, ПроверятьУстареваниеАдресов); АдресГородовФедеральногоЗначения = Новый Соответствие; Для Каждого ЭлементПроверки Из Адреса Цикл Если Результаты[ЭлементПроверки.Ключ].АдресПроверен = Ложь И Результаты[ЭлементПроверки.Ключ].Ошибки.Количество() > 0 - И ЭтоГородФедеральногоЗначения(ЭлементПроверки.Значение) + И ЭтоГородФедеральногоЗначения(ПолноеНаименованиеРегиона(ЭлементПроверки.Значение.Area, ЭлементПроверки.Значение.AreaType)) И ЭтоМуниципальныйАдрес(ЭлементПроверки.Значение.addressType) Тогда Адрес = ОбщегоНазначения.СкопироватьРекурсивно(ЭлементПроверки.Значение); @@ -4188,7 +4553,7 @@ КонецЦикла; Если АдресГородовФедеральногоЗначения.Количество() > 0 Тогда - РезультатыПовторнойПроверки = ПроверитьАдресаПоЗагруженнымДанным(АдресГородовФедеральногоЗначения); + РезультатыПовторнойПроверки = ПроверитьАдресаПоЗагруженнымДанным(АдресГородовФедеральногоЗначения, ПроверятьУстареваниеАдресов); Для каждого РезультатПовторнойПроверки Из РезультатыПовторнойПроверки Цикл Результаты[РезультатПовторнойПроверки.Ключ] = РезультатПовторнойПроверки.Значение; КонецЦикла; @@ -4250,8 +4615,8 @@ Продолжить; КонецЕсли; - АдресПоПолям["Наименование" + Строка(Счетчик)] = Наименование; - АдресПоПолям["Сокращение" + Строка(Счетчик)] = Сокращение; + АдресПоПолям["Наименование" + XMLСтрока(Счетчик)] = Наименование; + АдресПоПолям["Сокращение" + XMLСтрока(Счетчик)] = Сокращение; ПроверяемыеУровниАдреса.Вставить(УровеньАдреса, Счетчик); Счетчик = Счетчик + 1; @@ -4985,13 +5350,13 @@ КонецПроцедуры -Процедура АнализАдресныхОбъектов(Результаты, Адреса, Знач СписокПроверяемыхУровней, ВариантыАдресов) +Процедура АнализАдресныхОбъектов(Результаты, Адреса, Знач СписокПроверяемыхУровней, ВариантыАдресов, ПроверятьУстареваниеАдресов) ТаблицаАдресов = ВариантыАдресов.Выгрузить(); Для Каждого КлючЗначение Из Адреса Цикл - Результат = Результаты[КлючЗначение.Ключ]; + Результат = Результаты[КлючЗначение.Ключ]; // см. РезультатПроверкиАдреса Если Результаты[КлючЗначение.Ключ].АдресПроверен Тогда Продолжить; @@ -5054,13 +5419,16 @@ Если СписокКорректныхАдресов.Количество() = 0 Тогда Результат.АдресКорректный = Ложь; - НовыеАдреса = АктуальныеАдресДляИсторического(Адрес); - Если НовыеАдреса.АдресНайден Тогда - Результат.Варианты = НовыеАдреса.Варианты; - ОшибкиПроверки.Очистить(); - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Представление", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес некорректный, т.к. он устарел - |Актуальный: %1'"), НовыеАдреса.Представление)); + Результат.АдресПроверен = ?(ЭтоГородФедеральногоЗначения(ПолноеНаименованиеРегиона(Адрес.Area, Адрес.AreaType)), Ложь, Истина); // Для городов федерального значения выполняется дополнительная проверка. + Если ПроверятьУстареваниеАдресов Тогда + НовыеАдреса = АктуальныеАдресДляИсторического(Адрес); + Если НовыеАдреса.АдресНайден Тогда + Результат.Варианты = НовыеАдреса.Варианты; + ОшибкиПроверки.Очистить(); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Представление", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес некорректный, т.к. он устарел + |Актуальный: %1'"), НовыеАдреса.Представление)); + КонецЕсли; КонецЕсли; Иначе ОшибкиПроверки.Очистить(); @@ -5081,7 +5449,7 @@ Если Не Результат.АдресКорректный Тогда Продолжить; КонецЕсли; - + Если Результаты[КлючЗначение.Ключ].АдресПроверен Тогда Продолжить; КонецЕсли; @@ -5432,6 +5800,526 @@ #КонецОбласти +// ОКТМО + +Функция СведенияПоСпискуОКМТО(СписокОКТМО) Экспорт + + Результат = Новый Соответствие; + + СведенияОЗагрузкеСубъектовРФ = СведенияОЗагрузкеСубъектовРФ(); + + ТипЧисло = ОбщегоНазначения.ОписаниеТипаЧисло(11); + + ТаблицаОКТМО = Новый ТаблицаЗначений; + ТаблицаОКТМО.Колонки.Добавить("ОКТМО", ТипЧисло); + ТаблицаОКТМО.Колонки.Добавить("КлючЗаписиОКТМО", ОбщегоНазначения.ОписаниеТипаЧисло(3)); + + ТаблицаОКТМОВебСервис = ТаблицаОКТМО.Скопировать(); + + Для каждого ЗаписьОКТМО Из СписокОКТМО Цикл + ОКТМОЧислом = ТипЧисло.ПривестиЗначение(ЗаписьОКТМО.Значение); + + Если СтрНачинаетсяС(ЗаписьОКТМО.Значение, "118") + Или СтрНачинаетсяС(ЗаписьОКТМО.Значение, "718") + Или СтрНачинаетсяС(ЗаписьОКТМО.Значение, "719") Тогда + КодОКТМОРегиона = Лев(ЗаписьОКТМО.Значение, 3); + Иначе + КодОКТМОРегиона = Лев(ЗаписьОКТМО.Значение, 2); + КонецЕсли; + НайденныеСтроки = СведенияОЗагрузкеСубъектовРФ.НайтиСтроки(Новый Структура("ОКТМО", КодОКТМОРегиона)); + Если НайденныеСтроки.Количество() = 0 Тогда + Результат.Вставить(ЗаписьОКТМО.Ключ, Неопределено); + Продолжить; + КонецЕсли; + СведенияОРегионе = НайденныеСтроки[0]; + + + Если ОКТМОЧислом > 0 Тогда + + Если СведенияОРегионе.Загружено И Не СведенияОРегионе.Устарело Тогда + НоваяСтрокаОКТМО = ТаблицаОКТМО.Добавить(); + Иначе + НоваяСтрокаОКТМО = ТаблицаОКТМОВебСервис.Добавить(); + КонецЕсли; + + НоваяСтрокаОКТМО.ОКТМО = ОКТМОЧислом; + НоваяСтрокаОКТМО.КлючЗаписиОКТМО = ЗаписьОКТМО.Ключ; + Иначе + Результат.Вставить(ЗаписьОКТМО.Ключ, Неопределено); + КонецЕсли; + КонецЦикла; + + Если ТаблицаОКТМО.Количество() > 0 Тогда + СведенияПоСпискуОКМТОЗагруженныеДанные(ТаблицаОКТМО, Результат); + КонецЕсли; + + Если ТаблицаОКТМОВебСервис.Количество() > 0 Тогда + СведенияПоСпискуОКМТОВебСервис(ТаблицаОКТМОВебСервис, Результат); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция СведенияПоСпискуОКМТОЗагруженныеДанные(ТаблицаОКТМО, Результат) + + Запрос = Новый Запрос; + Запрос.Параметры.Вставить("СписокОКТМО", ТаблицаОКТМО); + Запрос.Текст = + "ВЫБРАТЬ + | СписокОКТМО.ОКТМО КАК ОКТМО, + | СписокОКТМО.КлючЗаписиОКТМО КАК КлючЗаписиОКТМО + |ПОМЕСТИТЬ СписокОКТМО + |ИЗ + | &СписокОКТМО КАК СписокОКТМО + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СписокОКТМО.КлючЗаписиОКТМО КАК КлючЗаписиОКТМО, + | ДополнительныеСведения.КодСубъектаРФ КАК КодСубъектаРФ, + | ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс, + | ДополнительныеСведения.ОКТМО КАК ОКТМО, + | ДополнительныеСведения.OKATO КАК OKATO, + | ДополнительныеСведения.КодУчасткаИФНСЮЛ КАК КодУчасткаИФНСЮЛ, + | ДополнительныеСведения.КодУчасткаИФНСФЛ КАК КодУчасткаИФНСФЛ, + | ДополнительныеСведения.КодИФНСЮЛ КАК КодИФНСЮЛ, + | ДополнительныеСведения.КодИФНСФЛ КАК КодИФНСФЛ, + | АдресныеОбъекты.Наименование КАК НаименованиеУровень0, + | АдресныеОбъекты.Сокращение КАК СокращениеУровень0, + | АдресныеОбъекты.Идентификатор КАК ИдентификаторУровень0, + | АдресныеОбъекты.Уровень КАК Уровень0, + | АдресныеОбъекты.КодКЛАДР КАК КодКЛАДР, + | АдресныеОбъекты.МуниципальныйРодительскийИдентификатор КАК РодительскийИдентификаторСвязи + |ПОМЕСТИТЬ АдресныеОбъекты0 + |ИЗ + | СписокОКТМО КАК СписокОКТМО + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО (ДополнительныеСведения.ОКТМО = СписокОКТМО.ОКТМО) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО (ДополнительныеСведения.Идентификатор = АдресныеОбъекты.ДополнительныеАдресныеСведения) + |ГДЕ + | ВЫБОР + | КОГДА АдресныеОбъекты.Уровень < 10 + | ТОГДА АдресныеОбъекты.Уровень * 10 + | ИНАЧЕ АдресныеОбъекты.Уровень + | КОНЕЦ < 70 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | АдресныеОбъекты0.КлючЗаписиОКТМО КАК КлючЗаписиОКТМО, + | ЕСТЬNULL(СвязиАдресныхОбъектов.МуниципальныйРодительскийИдентификатор, АдресныеОбъекты.МуниципальныйРодительскийИдентификатор) КАК РодительскийИдентификаторСвязи, + | ЕСТЬNULL(АдресныеОбъекты.Наименование, """") КАК НаименованиеУровень1, + | ЕСТЬNULL(АдресныеОбъекты.Сокращение, """") КАК СокращениеУровень1, + | АдресныеОбъекты.Идентификатор КАК ИдентификаторУровень1, + | АдресныеОбъекты.Уровень КАК Уровень1, + | АдресныеОбъекты0.НаименованиеУровень0 КАК НаименованиеУровень0, + | АдресныеОбъекты0.СокращениеУровень0 КАК СокращениеУровень0, + | АдресныеОбъекты0.ИдентификаторУровень0 КАК ИдентификаторУровень0, + | АдресныеОбъекты0.Уровень0 КАК Уровень0 + |ПОМЕСТИТЬ АдресныеОбъекты1 + |ИЗ + | АдресныеОбъекты0 КАК АдресныеОбъекты0 + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО АдресныеОбъекты0.РодительскийИдентификаторСвязи = АдресныеОбъекты.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СвязиАдресныхОбъектов КАК СвязиАдресныхОбъектов + | ПО АдресныеОбъекты0.РодительскийИдентификаторСвязи = СвязиАдресныхОбъектов.Идентификатор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | АдресныеОбъекты0.КлючЗаписиОКТМО КАК КлючЗаписиОКТМО, + | ЕСТЬNULL(СвязиАдресныхОбъектов.МуниципальныйРодительскийИдентификатор, АдресныеОбъекты.МуниципальныйРодительскийИдентификатор) КАК РодительскийИдентификаторСвязи, + | ЕСТЬNULL(АдресныеОбъекты.Наименование, """") КАК НаименованиеУровень2, + | ЕСТЬNULL(АдресныеОбъекты.Сокращение, """") КАК СокращениеУровень2, + | АдресныеОбъекты.Идентификатор КАК ИдентификаторУровень2, + | АдресныеОбъекты.Уровень КАК Уровень2, + | АдресныеОбъекты0.НаименованиеУровень1 КАК НаименованиеУровень1, + | АдресныеОбъекты0.СокращениеУровень1 КАК СокращениеУровень1, + | АдресныеОбъекты0.ИдентификаторУровень1 КАК ИдентификаторУровень1, + | АдресныеОбъекты0.Уровень1 КАК Уровень1, + | АдресныеОбъекты0.НаименованиеУровень0 КАК НаименованиеУровень0, + | АдресныеОбъекты0.СокращениеУровень0 КАК СокращениеУровень0, + | АдресныеОбъекты0.ИдентификаторУровень0 КАК ИдентификаторУровень0, + | АдресныеОбъекты0.Уровень0 КАК Уровень0 + |ПОМЕСТИТЬ АдресныеОбъекты2 + |ИЗ + | АдресныеОбъекты1 КАК АдресныеОбъекты0 + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО АдресныеОбъекты0.РодительскийИдентификаторСвязи = АдресныеОбъекты.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СвязиАдресныхОбъектов КАК СвязиАдресныхОбъектов + | ПО АдресныеОбъекты0.РодительскийИдентификаторСвязи = СвязиАдресныхОбъектов.Идентификатор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | АдресныеОбъекты0.КлючЗаписиОКТМО КАК КлючЗаписиОКТМО, + | ЕСТЬNULL(СвязиАдресныхОбъектов.МуниципальныйРодительскийИдентификатор, АдресныеОбъекты.МуниципальныйРодительскийИдентификатор) КАК РодительскийИдентификаторСвязи, + | ЕСТЬNULL(АдресныеОбъекты.Наименование, """") КАК НаименованиеУровень3, + | ЕСТЬNULL(АдресныеОбъекты.Сокращение, """") КАК СокращениеУровень3, + | АдресныеОбъекты.Идентификатор КАК ИдентификаторУровень3, + | АдресныеОбъекты.Уровень КАК Уровень3, + | АдресныеОбъекты0.НаименованиеУровень2 КАК НаименованиеУровень2, + | АдресныеОбъекты0.СокращениеУровень2 КАК СокращениеУровень2, + | АдресныеОбъекты0.ИдентификаторУровень2 КАК ИдентификаторУровень2, + | АдресныеОбъекты0.Уровень2 КАК Уровень2, + | АдресныеОбъекты0.НаименованиеУровень1 КАК НаименованиеУровень1, + | АдресныеОбъекты0.СокращениеУровень1 КАК СокращениеУровень1, + | АдресныеОбъекты0.ИдентификаторУровень1 КАК ИдентификаторУровень1, + | АдресныеОбъекты0.Уровень1 КАК Уровень1, + | АдресныеОбъекты0.НаименованиеУровень0 КАК НаименованиеУровень0, + | АдресныеОбъекты0.СокращениеУровень0 КАК СокращениеУровень0, + | АдресныеОбъекты0.ИдентификаторУровень0 КАК ИдентификаторУровень0, + | АдресныеОбъекты0.Уровень0 КАК Уровень0 + |ПОМЕСТИТЬ АдресныеОбъекты3 + |ИЗ + | АдресныеОбъекты2 КАК АдресныеОбъекты0 + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО АдресныеОбъекты0.РодительскийИдентификаторСвязи = АдресныеОбъекты.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СвязиАдресныхОбъектов КАК СвязиАдресныхОбъектов + | ПО АдресныеОбъекты0.РодительскийИдентификаторСвязи = СвязиАдресныхОбъектов.Идентификатор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | АдресныеОбъекты0.КлючЗаписиОКТМО КАК КлючЗаписиОКТМО, + | ЕСТЬNULL(СвязиАдресныхОбъектов.МуниципальныйРодительскийИдентификатор, АдресныеОбъекты.МуниципальныйРодительскийИдентификатор) КАК РодительскийИдентификаторСвязи, + | ЕСТЬNULL(АдресныеОбъекты.Наименование, """") КАК НаименованиеУровень4, + | ЕСТЬNULL(АдресныеОбъекты.Сокращение, """") КАК СокращениеУровень4, + | АдресныеОбъекты.Идентификатор КАК ИдентификаторУровень4, + | АдресныеОбъекты.Уровень КАК Уровень4, + | АдресныеОбъекты0.НаименованиеУровень3 КАК НаименованиеУровень3, + | АдресныеОбъекты0.СокращениеУровень3 КАК СокращениеУровень3, + | АдресныеОбъекты0.ИдентификаторУровень3 КАК ИдентификаторУровень3, + | АдресныеОбъекты0.Уровень3 КАК Уровень3, + | АдресныеОбъекты0.НаименованиеУровень2 КАК НаименованиеУровень2, + | АдресныеОбъекты0.СокращениеУровень2 КАК СокращениеУровень2, + | АдресныеОбъекты0.ИдентификаторУровень2 КАК ИдентификаторУровень2, + | АдресныеОбъекты0.Уровень2 КАК Уровень2, + | АдресныеОбъекты0.НаименованиеУровень1 КАК НаименованиеУровень1, + | АдресныеОбъекты0.СокращениеУровень1 КАК СокращениеУровень1, + | АдресныеОбъекты0.ИдентификаторУровень1 КАК ИдентификаторУровень1, + | АдресныеОбъекты0.Уровень1 КАК Уровень1, + | АдресныеОбъекты0.НаименованиеУровень0 КАК НаименованиеУровень0, + | АдресныеОбъекты0.СокращениеУровень0 КАК СокращениеУровень0, + | АдресныеОбъекты0.ИдентификаторУровень0 КАК ИдентификаторУровень0, + | АдресныеОбъекты0.Уровень0 КАК Уровень0 + |ПОМЕСТИТЬ АдресныеОбъекты4 + |ИЗ + | АдресныеОбъекты3 КАК АдресныеОбъекты0 + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО АдресныеОбъекты0.РодительскийИдентификаторСвязи = АдресныеОбъекты.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СвязиАдресныхОбъектов КАК СвязиАдресныхОбъектов + | ПО АдресныеОбъекты0.РодительскийИдентификаторСвязи = СвязиАдресныхОбъектов.Идентификатор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | АдресныеОбъекты0.КлючЗаписиОКТМО КАК КлючЗаписиОКТМО, + | ЕСТЬNULL(АдресныеОбъекты.Наименование, """") КАК НаименованиеУровень5, + | ЕСТЬNULL(АдресныеОбъекты.Сокращение, """") КАК СокращениеУровень5, + | АдресныеОбъекты.Идентификатор КАК ИдентификаторУровень5, + | АдресныеОбъекты.Уровень КАК Уровень5, + | АдресныеОбъектыИтог.НаименованиеУровень4 КАК НаименованиеУровень4, + | АдресныеОбъектыИтог.СокращениеУровень4 КАК СокращениеУровень4, + | АдресныеОбъектыИтог.ИдентификаторУровень4 КАК ИдентификаторУровень4, + | АдресныеОбъектыИтог.Уровень4 КАК Уровень4, + | АдресныеОбъектыИтог.НаименованиеУровень3 КАК НаименованиеУровень3, + | АдресныеОбъектыИтог.СокращениеУровень3 КАК СокращениеУровень3, + | АдресныеОбъектыИтог.ИдентификаторУровень3 КАК ИдентификаторУровень3, + | АдресныеОбъектыИтог.Уровень3 КАК Уровень3, + | АдресныеОбъектыИтог.НаименованиеУровень2 КАК НаименованиеУровень2, + | АдресныеОбъектыИтог.СокращениеУровень2 КАК СокращениеУровень2, + | АдресныеОбъектыИтог.ИдентификаторУровень2 КАК ИдентификаторУровень2, + | АдресныеОбъектыИтог.Уровень2 КАК Уровень2, + | АдресныеОбъектыИтог.НаименованиеУровень1 КАК НаименованиеУровень1, + | АдресныеОбъектыИтог.СокращениеУровень1 КАК СокращениеУровень1, + | АдресныеОбъектыИтог.ИдентификаторУровень1 КАК ИдентификаторУровень1, + | АдресныеОбъектыИтог.Уровень1 КАК Уровень1, + | АдресныеОбъектыИтог.НаименованиеУровень0 КАК НаименованиеУровень0, + | АдресныеОбъектыИтог.СокращениеУровень0 КАК СокращениеУровень0, + | АдресныеОбъектыИтог.ИдентификаторУровень0 КАК ИдентификаторУровень0, + | АдресныеОбъектыИтог.Уровень0 КАК Уровень0, + | АдресныеОбъекты0.OKATO КАК OKATO, + | АдресныеОбъекты0.ОКТМО КАК ОКТМО, + | АдресныеОбъекты0.КодУчасткаИФНСЮЛ КАК КодУчасткаИФНСЮЛ, + | АдресныеОбъекты0.КодУчасткаИФНСФЛ КАК КодУчасткаИФНСФЛ, + | АдресныеОбъекты0.КодИФНСЮЛ КАК КодИФНСЮЛ, + | АдресныеОбъекты0.КодИФНСФЛ КАК КодИФНСФЛ, + | АдресныеОбъекты0.КодКЛАДР КАК КодКЛАДР, + | АдресныеОбъекты0.ПочтовыйИндекс КАК ПочтовыйИндекс, + | АдресныеОбъекты0.КодСубъектаРФ КАК КодРегиона + |ИЗ + | АдресныеОбъекты4 КАК АдресныеОбъектыИтог + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО АдресныеОбъектыИтог.РодительскийИдентификаторСвязи = АдресныеОбъекты.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СвязиАдресныхОбъектов КАК СвязиАдресныхОбъектов + | ПО АдресныеОбъектыИтог.РодительскийИдентификаторСвязи = СвязиАдресныхОбъектов.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ АдресныеОбъекты0 КАК АдресныеОбъекты0 + | ПО АдресныеОбъектыИтог.КлючЗаписиОКТМО = АдресныеОбъекты0.КлючЗаписиОКТМО"; + + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + СписокСокращений = АдресныйКлассификаторПовтИсп.СписокСокращений(); + ИменаУровней = ИменаУровнейАдресаПоКодуУровня(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + + СведенияПоОКТМО = НовыйСведенияПоОКТМО(); + + ЗаполнитьЗначенияСвойств(СведенияПоОКТМО, ВыборкаДетальныеЗаписи, "КодУчасткаИФНСЮЛ, + |КодУчасткаИФНСФЛ, КодИФНСЮЛ, КодИФНСФЛ, ПочтовыйИндекс, КодРегиона"); + СведенияПоОКТМО.ОКТМО = ОКТМОИлиОКАТОСтрокой(ВыборкаДетальныеЗаписи.ОКТМО); + СведенияПоОКТМО.OKATO = ОКТМОИлиОКАТОСтрокой(ВыборкаДетальныеЗаписи.OKATO); + СведенияПоОКТМО.КодКЛАДР = КодКЛАДРСтрокой(ВыборкаДетальныеЗаписи.КодКЛАДР); + + Для НомерСегмента = 0 По 5 Цикл + + НомерСегментаСтрокой = XMLСтрока(НомерСегмента); + Уровень = ВыборкаДетальныеЗаписи["Уровень" + НомерСегментаСтрокой]; + + Если ЗначениеЗаполнено(Уровень) Тогда + ИмяПоля = ИменаУровней[Уровень]; + + СведенияПоОКТМО[ИмяПоля] = ВыборкаДетальныеЗаписи["НаименованиеУровень" + НомерСегментаСтрокой]; + СведенияПоОКТМО[ИмяПоля + "ТипКраткий"] = ВыборкаДетальныеЗаписи["СокращениеУровень" + НомерСегментаСтрокой]; + СведенияПоОКТМО[ИмяПоля + "Идентификатор"] = ВыборкаДетальныеЗаписи["ИдентификаторУровень" + НомерСегментаСтрокой]; + ПолныеНаименованияСокращений = СписокСокращений.Получить(Строка(Уровень) + СведенияПоОКТМО[ИмяПоля + "ТипКраткий"]); + СведенияПоОКТМО[ИмяПоля + "ТипПолный"] = ПолныеНаименованияСокращений; + + КонецЕсли; + + КонецЦикла; + + НаименованиеРегиона = ПолноеНаименованиеРегиона(СведенияПоОКТМО["Регион"], СведенияПоОКТМО["РегионТипКраткий"]); + СведенияПоОКТМО.КодМуниципальногоРайона = КодМуниципальногоРайона(СведенияПоОКТМО["МуниципальныйРайонТипКраткий"], + СведенияПоОКТМО.ОКТМО, ЭтоГородФедеральногоЗначения(НаименованиеРегиона)); + СведенияПоОКТМО.КодПоселения = КодПоселения(СведенияПоОКТМО["ПоселениеТипКраткий"]); + + Результат.Вставить(ВыборкаДетальныеЗаписи.КлючЗаписиОКТМО, СведенияПоОКТМО); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура СведенияПоСпискуОКМТОВебСервис(СписокОКТМО, Результат) + + СписокСокращений = АдресныйКлассификаторПовтИсп.СписокСокращений(); + + Для каждого ЗаписьОКТМО Из СписокОКТМО Цикл + + ТекстGETЗапроса = "selectByCode?code=%OKTMO%&codeType=OKTMO"; + ТекстGETЗапроса = СтрЗаменить(ТекстGETЗапроса, "%OKTMO%", Формат(ЗаписьОКТМО.ОКТМО, "ЧГ=0")); + + РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); + + Если РезультатВебСервис.Отказ Тогда + Результат.Вставить(ЗаписьОКТМО.КлючЗаписиОКТМО, Неопределено); + Продолжить; + КонецЕсли; + + СведенияПоОКТМО = НовыйСведенияПоОКТМО(); + + Для каждого СтрокаДанных Из РезультатВебСервис.Данные Цикл + + СведенияПоОКТМО.OKATO = СокрЛП(СтрокаДанных.okato); + СведенияПоОКТМО.ОКТМО = СокрЛП(СтрокаДанных.oktmo); + СведенияПоОКТМО.КодИФНСФЛ = СокрЛП(СтрокаДанных.ifnsFlCode); + СведенияПоОКТМО.КодИФНСЮЛ = СокрЛП(СтрокаДанных.ifnsUlCode); + СведенияПоОКТМО.КодКЛАДР = СокрЛП(СтрокаДанных.codeKLADR); + СведенияПоОКТМО.КодУчасткаИФНСФЛ = СокрЛП(СтрокаДанных.ifnsFlAreaCode); + СведенияПоОКТМО.КодУчасткаИФНСЮЛ = СокрЛП(СтрокаДанных.ifnsUlAreaCode); + СведенияПоОКТМО.ПочтовыйИндекс = СокрЛП(СтрокаДанных.ZIPcode); + + СведенияПоОКТМО.Регион = СокрЛП(СтрокаДанных.area); + СведенияПоОКТМО.РегионИдентификатор = ?(ПустаяСтрока(СтрокаДанных.areaId), + Неопределено, Новый УникальныйИдентификатор(СокрЛП(СтрокаДанных.areaId))); + СведенияПоОКТМО.РегионТипКраткий = СокрЛП(СтрокаДанных.areaType); + СведенияПоОКТМО.РегионТипПолный = СокрЛП(СписокСокращений.Получить("1" + СведенияПоОКТМО.РегионТипКраткий)); + НаименованиеРегиона = ПолноеНаименованиеРегиона(СведенияПоОКТМО.Регион, СведенияПоОКТМО.РегионТипКраткий); + СведенияПоОКТМО.КодРегиона = АдресныйКлассификатор.КодРегионаПоНаименованию(НаименованиеРегиона); + + СведенияПоОКТМО.МуниципальныйРайон = СокрЛП(СтрокаДанных.munDistrict); + СведенияПоОКТМО.МуниципальныйРайонИдентификатор = ?(ПустаяСтрока(СтрокаДанных.munDistrictId), + Неопределено, Новый УникальныйИдентификатор(СокрЛП(СтрокаДанных.munDistrictId))); + СведенияПоОКТМО.МуниципальныйРайонТипКраткий = СокрЛП(СтрокаДанных.munDistrictType); + СведенияПоОКТМО.МуниципальныйРайонТипПолный = СокрЛП(СписокСокращений.Получить("31" + СведенияПоОКТМО.МуниципальныйРайонТипКраткий)); + СведенияПоОКТМО.КодМуниципальногоРайона = КодМуниципальногоРайона(СведенияПоОКТМО.МуниципальныйРайонТипКраткий, + СведенияПоОКТМО.ОКТМО, ЭтоГородФедеральногоЗначения(НаименованиеРегиона)); + + СведенияПоОКТМО.НаселенныйПункт = СокрЛП(СтрокаДанных.locality); + СведенияПоОКТМО.НаселенныйПунктИдентификатор = ?(ПустаяСтрока(СтрокаДанных.localityId), + Неопределено, Новый УникальныйИдентификатор(СокрЛП(СтрокаДанных.localityId))); + СведенияПоОКТМО.НаселенныйПунктТипКраткий = СокрЛП(СтрокаДанных.localityType); + СведенияПоОКТМО.НаселенныйПунктТипПолный = СокрЛП(СписокСокращений.Получить("6" + СведенияПоОКТМО.НаселенныйПунктТипКраткий)); + + СведенияПоОКТМО.Поселение = СокрЛП(СтрокаДанных.settlement); + СведенияПоОКТМО.ПоселениеИдентификатор = ?(ПустаяСтрока(СтрокаДанных.settlementId), + Неопределено, Новый УникальныйИдентификатор(СокрЛП(СтрокаДанных.settlementId))); + СведенияПоОКТМО.ПоселениеТипКраткий = СокрЛП(СтрокаДанных.settlementType); + СведенияПоОКТМО.ПоселениеТипПолный = СокрЛП(СписокСокращений.Получить("41" + СведенияПоОКТМО.ПоселениеТипКраткий)); + СведенияПоОКТМО.КодПоселения = КодПоселения(СведенияПоОКТМО.ПоселениеТипКраткий); + + СведенияПоОКТМО.Территория = СокрЛП(СтрокаДанных.territory); + СведенияПоОКТМО.ТерриторияИдентификатор = ?(ПустаяСтрока(СтрокаДанных.territoryId), + Неопределено, Новый УникальныйИдентификатор(СокрЛП(СтрокаДанных.territoryId))); + СведенияПоОКТМО.ТерриторияТипКраткий = СокрЛП(СтрокаДанных.territoryType); + СведенияПоОКТМО.ТерриторияТипПолный = СокрЛП(СписокСокращений.Получить("65" + СведенияПоОКТМО.ТерриторияТипКраткий)); + + Результат.Вставить(ЗаписьОКТМО.КлючЗаписиОКТМО, СведенияПоОКТМО); + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +Функция ОКТМОИлиОКАТОСтрокой(ОКТМОИлиОКАТО) + + Результат = ""; + Результат = Формат(ОКТМОИлиОКАТО,"ЧРГ=' '; ЧГ=0"); + Если СтрДлина(Результат) = 7 Или СтрДлина(Результат) = 10 Тогда + Возврат "0" + Результат; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПолноеНаименованиеРегиона(НаименованиеРегиона, ТипРегиона) + Возврат СокрЛП(НаименованиеРегиона + " " + ТипРегиона); +КонецФункции + +Функция ИменаУровнейАдресаПоКодуУровня() + Уровни = Новый Соответствие; + + Уровни.Вставить(1, "Регион"); + Уровни.Вставить(31, "МуниципальныйРайон"); + Уровни.Вставить(41, "Поселение"); + Уровни.Вставить(3, "МуниципальныйРайон"); + Уровни.Вставить(4, "НаселенныйПункт"); + Уровни.Вставить(5, "Территория"); + Уровни.Вставить(6, "НаселенныйПункт"); + Уровни.Вставить(65, "Территория"); + + Возврат Уровни; +КонецФункции + +Функция НовыйСведенияПоОКТМО() + + Результат = Новый Структура; + Результат.Вставить("КодРегиона", ""); + Результат.Вставить("Регион", ""); + Результат.Вставить("РегионТипПолный", ""); + Результат.Вставить("РегионТипКраткий", ""); + Результат.Вставить("РегионИдентификатор", Неопределено); + Результат.Вставить("МуниципальныйРайон", ""); + Результат.Вставить("МуниципальныйРайонТипПолный ", ""); + Результат.Вставить("МуниципальныйРайонТипКраткий", ""); + Результат.Вставить("МуниципальныйРайонИдентификатор", Неопределено); + Результат.Вставить("КодМуниципальногоРайона", ""); + Результат.Вставить("Поселение", ""); + Результат.Вставить("ПоселениеТипПолный", ""); + Результат.Вставить("ПоселениеТипКраткий", ""); + Результат.Вставить("ПоселениеИдентификатор", Неопределено); + Результат.Вставить("КодПоселения", ""); + Результат.Вставить("НаселенныйПункт", ""); + Результат.Вставить("НаселенныйПунктТипПолный", ""); + Результат.Вставить("НаселенныйПунктТипКраткий", ""); + Результат.Вставить("НаселенныйПунктИдентификатор", Неопределено); + Результат.Вставить("Территория", ""); + Результат.Вставить("ТерриторияТипПолный", ""); + Результат.Вставить("ТерриторияТипКраткий", ""); + Результат.Вставить("ТерриторияИдентификатор", Неопределено); + Результат.Вставить("ПочтовыйИндекс", 0); + Результат.Вставить("OKATO", ""); + Результат.Вставить("ОКТМО", ""); + Результат.Вставить("КодКЛАДР", ""); + Результат.Вставить("КодИФНСФЛ", ""); + Результат.Вставить("КодИФНСЮЛ", ""); + Результат.Вставить("КодУчасткаИФНСФЛ", ""); + Результат.Вставить("КодУчасткаИФНСЮЛ", ""); + + Возврат Результат; + +КонецФункции + +Функция КодКЛАДРСтрокой(Знач КодКЛАДР) + + КодКЛАДР = Формат(КодКЛАДР, "ЧГ=0"); + + Если СтрДлина(КодКЛАДР) = 14 Тогда + КодКЛАДР = "0" + КодКЛАДР + "00"; + ИначеЕсли СтрДлина(КодКЛАДР) = 15 Тогда + КодКЛАДР = КодКЛАДР + "00"; // добавляем признак актуальности + ИначеЕсли СтрДлина(КодКЛАДР) = 16 Тогда + КодКЛАДР = "0" + КодКЛАДР; + КонецЕсли; + + Возврат КодКЛАДР; + +КонецФункции + +Функция КодМуниципальногоРайона(Знач ТипМуниципальногоРайона, ОКТМО, ЭтоГородФедеральногоЗначения) + + КодМуниципальногоРайона = ""; + + Если СтрДлина(ОКТМО) > 3 Тогда + + КодВторойСтупениКлассификации = Сред(ОКТМО, 3, 1); + Если КодВторойСтупениКлассификации = "3" + ИЛИ ЭтоГородФедеральногоЗначения И КодВторойСтупениКлассификации = "9" Тогда + КодМуниципальногоРайона = "3"; + ИначеЕсли КодВторойСтупениКлассификации = "6" Тогда + КодМуниципальногоРайона = "1"; + ИначеЕсли КодВторойСтупениКлассификации = "7" Тогда + КодМуниципальногоРайона = "2"; + ИначеЕсли КодВторойСтупениКлассификации = "9" И НЕ ЭтоГородФедеральногоЗначения Тогда + КодМуниципальногоРайона = "4"; + ИначеЕсли КодВторойСтупениКлассификации = "8" Тогда + КодМуниципальногоРайона = "4"; + КонецЕсли; + + Иначе + + Если СтрСравнить(ТипМуниципальногоРайона, НСтр("ru = 'м.р-н'")) = 0 Тогда + КодМуниципальногоРайона = "1"; + ИначеЕсли СтрСравнить(ТипМуниципальногоРайона, НСтр("ru = 'г.о.'")) = 0 Тогда + КодМуниципальногоРайона = "2"; + ИначеЕсли СтрСравнить(ТипМуниципальногоРайона, НСтр("ru = 'вн.тер.'")) = 0 + Или СтрСравнить(ТипМуниципальногоРайона, НСтр("ru = 'вн.тер. г.'")) = 0 Тогда + КодМуниципальногоРайона = "3"; + ИначеЕсли СтрСравнить(ТипМуниципальногоРайона, НСтр("ru = 'мун. окр.'")) = 0 Тогда + КодМуниципальногоРайона = "4"; + КонецЕсли; + + КонецЕсли; + + Возврат КодМуниципальногоРайона; + +КонецФункции + +Функция КодПоселения(Знач ТипПоселения) + + КодПоселения = ""; + + Если СтрСравнить(ТипПоселения, НСтр("ru = 'г. п.'")) = 0 Тогда + КодПоселения = "1"; + ИначеЕсли СтрСравнить(ТипПоселения, НСтр("ru = 'с.п.'")) = 0 Тогда + КодПоселения = "2"; + ИначеЕсли СтрСравнить(ТипПоселения, НСтр("ru = 'меж.тер.'")) = 0 Тогда + КодПоселения = "3"; + ИначеЕсли СтрСравнить(ТипПоселения, НСтр("ru = 'вн.р-н'")) = 0 Тогда + КодПоселения = "4"; + КонецЕсли; + + Возврат КодПоселения; + +КонецФункции + +// Прочие + // Заполнение адреса по данным сервиса 1С. // Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораСервис1С(Результат, Индекс) @@ -5594,15 +6482,15 @@ // Получает идентификаторы адреса через веб-сервис. // // Параметры: -// АдресДляПроверки - Строка - Строка XML контактной информации содержащая адрес. +// АдресДляПроверки - Строка - строка XML контактной информации содержащая адрес. // // Возвращаемое значение: -// Структура - набор пар ключ-значение. -// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Идентификатор адресного объекта (улицы, нас. пункта). -// * ИдентификаторДома - УникальныйИдентификатор - Идентификатор дома адресного объекта. -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен иначе Неопределено. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен иначе Неопределено. +// Структура: +// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - идентификатор адресного объекта (улицы, нас. пункта). +// * ИдентификаторДома - УникальныйИдентификатор - идентификатор дома адресного объекта. +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен иначе Неопределено. +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен иначе Неопределено. // Процедура ОпределитьИдентификаторыАдресаСервис1С(Результат, АдресДляПроверки) @@ -5645,13 +6533,9 @@ // Заполнение результата проверки адресного объекта по данным сервиса. // Выполнение запроса может занимать 20 секунд. // -Функция ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(Знач АдресаДляПроверки) +Функция ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(Знач АдресаДляПроверки, ЭтоУстановкаИдентификаторов = Истина) - Результат = Новый Структура; - Результат.Вставить("Отказ", Ложь); - Результат.Вставить("ПодробноеПредставлениеОшибки", ""); - Результат.Вставить("КраткоеПредставлениеОшибки", ""); - Результат.Вставить("Данные", Новый Соответствие); + Результат = РезультатИзВебСервиса(); Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(20); @@ -5682,7 +6566,6 @@ Попытка РезультатПроверки = Сервис.ОтправитьДляОбработки(HTTPЗапрос); Исключение - РезультатПроверкиАдреса = РезультатПроверкиАдреса(); Результат.Отказ = Истина; Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -5692,7 +6575,7 @@ КонецПопытки; Результат.Отказ = Ложь; - АдресПроверен = Ложь; + ПолученныеДанные = РезультатПроверки.ПолучитьТелоКакСтроку("UTF-8"); Если РезультатПроверки.КодСостояния = 200 Тогда @@ -5736,12 +6619,18 @@ Для Каждого Проверка Из ДанныеПроверки Цикл РезультатПроверки = РезультатПроверкиАдреса(); - ЭлементПроверки = Проверка.Значение; - УникальныйКлюч = ОписаниеТипаЧисло.ПривестиЗначение(Сред(Проверка.Ключ, 2)); + ЭлементПроверки = Проверка.Значение; + УникальныйКлюч = ОписаниеТипаЧисло.ПривестиЗначение(Сред(Проверка.Ключ, 2)); Если ЭлементПроверки.Свойство("status") Тогда - РезультатПроверки.АдресПроверен = Истина; + + РезультатПроверки.АдресПроверен = Истина; РезультатПроверки.АдресКорректный = (СтрСравнить(ЭлементПроверки.status, "COMPLETELY_VERIFIED") = 0); + + Если СтрСравнить(ЭлементПроверки.status, "HISTORIC") = 0 Тогда + РезультатПроверки.АдресУстарел = Истина; + КонецЕсли; + КонецЕсли; Если ЭлементПроверки.Свойство("errorMessage") И ЗначениеЗаполнено(ЭлементПроверки.errorMessage) Тогда @@ -5751,8 +6640,10 @@ РезультатПроверки.Ошибки.Добавить(ОписаниеОшибки); КонецЕсли; - Если ЭлементПроверки.Свойство("value") И ЗначениеЗаполнено(ЭлементПроверки.value) Тогда - РезультатПроверки.Варианты.Добавить(ЭлементПроверки.value); + Если ЭтоУстановкаИдентификаторов Или РезультатПроверки.АдресУстарел Тогда + Если ЭлементПроверки.Свойство("value") И ЗначениеЗаполнено(ЭлементПроверки.value) Тогда + РезультатПроверки.Варианты.Добавить(ЭлементПроверки.value); + КонецЕсли; КонецЕсли; Результат.Данные.Вставить(УникальныйКлюч, РезультатПроверки); @@ -5763,6 +6654,27 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * Данные - соответствие из КлючИЗначение - где: +// ** Ключ - Число - идентификатор адреса +// ** Значение - см. РезультатПроверкиАдреса +// * КраткоеПредставлениеОшибки - Строка +// * ПодробноеПредставлениеОшибки - Строка +// * Отказ - Булево +// +Функция РезультатИзВебСервиса() + + Результат = Новый Структура; + Результат.Вставить("Отказ", Ложь); + Результат.Вставить("ПодробноеПредставлениеОшибки", ""); + Результат.Вставить("КраткоеПредставлениеОшибки", ""); + Результат.Вставить("Данные", Новый Соответствие); + + Возврат Результат; + +КонецФункции + Функция ПредставлениеДомаИСтроений(Знач НазваниеВладения, Знач Дом, Знач Корпус, Знач НазваниеСтроения, Знач Строение) СписокСтроений = Новый Массив; @@ -6119,10 +7031,10 @@ // Преобразует строку base64 в УникальныйИдентификатор. // // Параметры: -// Строка - Строка - Регистрозависимые исходные данные. +// Строка - Строка - регистрозависимые исходные данные. // // Возвращаемое значение: -// Идентификатор - Результат преобразования. +// Идентификатор - результат преобразования. // Возвращаемый идентификатор зависит от регистра букв, передавай строки. // Функция УникальныйИдентификаторИзСтроки64(Строка) @@ -6199,13 +7111,12 @@ // Сокращением считается последнее слово, отделенное пробельным символом. // // Параметры: -// Название - Строка - Полное название, например "Москва г". +// Название - Строка - полное название, например "Москва г". // // Возвращаемое значение: -// Структура - содержит поля. -// * Наименование - Строка - Наименование, например "Москва". Если сокращение выделить не удалось, то исходное -// название. -// * Сокращение - Строка - Сокращение, например "г". Если сокращение выделить не удалось, то пустая строка. +// Структура: +// * Наименование - Строка - наименование, например "Москва". Если сокращение выделить не удалось, то исходное название. +// * Сокращение - Строка - сокращение, например "г". Если сокращение выделить не удалось, то пустая строка. // Функция НаименованиеИСокращение(Название) Экспорт ТекстПоиска = СокрП(Название); @@ -6337,8 +7248,8 @@ // // Параметры: // СтрокаСоСпискомДомов - Строка - описание списка домов из регистра сведения. -// СтрокаПоиска - Строка - Строка отбора. -// ВариантыДомов - Список значений - Список домов. +// СтрокаПоиска - Строка - строка отбора. +// ВариантыДомов - Список значений - список домов. // Процедура ИзвлечьСписокДомов(СтрокаСоСпискомДомов, СтрокаПоиска, ВариантыДомов, Запись, ТочноеСовпадение) @@ -6509,17 +7420,17 @@ КонецПроцедуры // Возвращаемое значение: -// Структура - Описание: -// * КодКЛАДР - Строка - -// * КодУчасткаИФНСЮЛ - Строка - -// * КодУчасткаИФНСФЛ - Строка - -// * КодИФНСЮЛ - Строка - -// * КодИФНСФЛ - Строка - -// * ОКАТО - Строка - -// * ОКТМО - Строка - -// * Индекс - Строка - -// * Идентификатор - Строка - -// * Дом - Структура - +// Структура: +// * КодКЛАДР - Строка +// * КодУчасткаИФНСЮЛ - Строка +// * КодУчасткаИФНСФЛ - Строка +// * КодИФНСЮЛ - Строка +// * КодИФНСФЛ - Строка +// * ОКАТО - Строка +// * ОКТМО - Строка +// * Индекс - Строка +// * Идентификатор - Строка +// * Дом - Структура // Функция ОписаниеДомаИСтроения() Экспорт @@ -6603,9 +7514,9 @@ // Загрузка всех данных классификатора адресов с сайта. // // Параметры: -// КодыСубъектовРФ - Массив - Содержит числовые коды регионов-субъектов для загрузки. Если не указано, то будут +// КодыСубъектовРФ - Массив - содержит числовые коды регионов-субъектов для загрузки. Если не указано, то будут // загружены все регионы, по которым когда-либо загружались данные. -// ПараметрыЗагрузки - см. ПараметрыЗагрузкиКлассификатораАдресов(). +// ПараметрыЗагрузки - см. ПараметрыЗагрузкиКлассификатораАдресов // Процедура ЗагрузитьКлассификаторАдресовССайта(ПараметрыЗагрузки, КодыСубъектовРФ = Неопределено) @@ -6668,10 +7579,10 @@ // Возвращает описание параметров загрузки классификатора адресов // // Возвращаемое значение: -// Структура - с полями: -// * ЗагружатьИсториюАдресов - Булево - Если Истина, то будет загружена история адресных сведений. По умолчанию, Ложь. -// * ЗагружатьПорциями - Булево - Если Истина, то загрузка будет осуществляться порциями. По умолчанию, Ложь. -// * ОповещатьОПрогрессе - Булево - Если Истина, то передаваться сообщение о статусе загрузки. По умолчанию, Истина. +// Структура: +// * ЗагружатьИсториюАдресов - Булево - если Истина, то будет загружена история адресных сведений. По умолчанию, Ложь. +// * ЗагружатьПорциями - Булево - если Истина, то загрузка будет осуществляться порциями. По умолчанию, Ложь. +// * ОповещатьОПрогрессе - Булево - если Истина, то передаваться сообщение о статусе загрузки. По умолчанию, Истина. // Функция ПараметрыЗагрузкиКлассификатораАдресов() Экспорт @@ -6698,7 +7609,7 @@ // Очистка данных классификатора адресов. // // Параметры: -// КодыСубъектовРФ - Массив - Содержит числовые коды регионов-субъектов для очистки. +// КодыСубъектовРФ - Массив - содержит числовые коды регионов-субъектов для очистки. // Процедура ОчиститьКлассификаторАдресов(КодыСубъектовРФ) @@ -6760,11 +7671,10 @@ КонецФункции - // Пространство имен для операций XDTO. // // Возвращаемое значение: -// Строка - +// Строка // Функция ПространствоИмен() @@ -6782,16 +7692,16 @@ // Проверяет наличие обновлений адресного классификатора на веб сервере // для тех объектов, которые ранее уже загружались. // -// Возвращаемое значение - ТаблицаЗначений - Описание добавленных и измененных субъектов. Содержит Колонки. -// * КодСубъектаРФ - Число - Код субъекта РФ. -// * Наименование - Строка - Наименование субъекта РФ. -// * Сокращение - Строка - Сокращение субъекта РФ. -// * Индекс - Число - Почтовый индекс. -// * Идентификатор - УникальныйИдентификатор - Идентификатор субъекта. -// * Адрес - Строка - Адрес для скачивания файла данных региона. -// * ДоступноОбновление - Булево - Флаг доступности обновления для данного региона. -// * Загружено - Булево - Флаг того, что данные хоть раз загружались. -// * ДатаОбновления - Дата - Дата обновления адресных сведений. +// Возвращаемое значение - ТаблицаЗначений - описание добавленных и измененных субъектов. Содержит Колонки: +// * КодСубъектаРФ - Число - код субъекта РФ. +// * Наименование - Строка - наименование субъекта РФ. +// * Сокращение - Строка - сокращение субъекта РФ. +// * Индекс - Число - почтовый индекс. +// * Идентификатор - УникальныйИдентификатор - идентификатор субъекта. +// * Адрес - Строка - адрес для скачивания файла данных региона. +// * ДоступноОбновление - Булево - флаг доступности обновления для данного региона. +// * Загружено - Булево - флаг того, что данные хоть раз загружались. +// * ДатаОбновления - Дата - дата обновления адресных сведений. // Функция ДоступныеВерсииАдресныхСведений(ПараметрыВыгрузки = Неопределено, АдресВоВременномХранилище = Неопределено) Экспорт @@ -6956,7 +7866,7 @@ // Возвращает признак того, является ли строка данных контактной информации XML данными. // // Параметры: -// Текст - Строка - Проверяемая строка. +// Текст - Строка - проверяемая строка. // // Возвращаемое значение: // Булево - результат проверки. @@ -7807,7 +8717,6 @@ Для каждого КлючЗначение Из Результат Цикл Если СтрСравнить(КлючЗначение.Ключ, "Идентификатор") <> 0 Тогда - Результат[КлючЗначение.Ключ] = Формат(КлючЗначение.Значение, "ЧГ=0"); Если СтрСравнить(КлючЗначение.Ключ, "ОКТМО") = 0 И СтрДлина(Результат[КлючЗначение.Ключ]) <> 8 @@ -7959,9 +8868,9 @@ // Тип контактной информации, определяющий состав полей контактной информации. // // Возвращаемое значение: -// Структура - Поля контактной информации добавленные к основным полям: +// Структура - поля контактной информации добавленные к основным полям: // Для типа контактной информации адрес: -// * ID - Строка - Идентификационный код последнего адресного объекта в иерархи адреса. +// * ID - Строка - идентификационный код последнего адресного объекта в иерархи адреса. // * AddressType - Строка - установленный пользователем тип адреса(только для адресов РФ). // Варианты: "Муниципальный", "Административно-территориальный". // * AreaCode - Строка - код региона РФ. @@ -7991,13 +8900,13 @@ // * HouseID - Строка - идентификатор дома. // * Buildings - Массив - содержит структуры(поля структуры: type, number) с перечнем корпусов (строений) адреса. // * Apartments - Массив - содержит структуры(поля структуры: type, number) с перечнем помещений адреса. -// * CodeKLADR - Строка - Код КЛАДР. -// * OKTMO - Строка - Код ОКТМО. -// * OKATO - Строка - Код ОКАТО. -// * IFNSFLCode - Строка - Код ИФНСФЛ. -// * IFNSULCode - Строка - Код ИФНСЮЛ. -// * IFNSFLAreaCode - Строка - Код участка ИФНСФЛ. -// * IFNSULAreaCode - Строка - Код участка ИФНСЮЛ. +// * CodeKLADR - Строка - код КЛАДР. +// * OKTMO - Строка - код ОКТМО. +// * OKATO - Строка - код ОКАТО. +// * IFNSFLCode - Строка - код ИФНСФЛ. +// * IFNSULCode - Строка - код ИФНСЮЛ. +// * IFNSFLAreaCode - Строка - код участка ИФНСФЛ. +// * IFNSULAreaCode - Строка - код участка ИФНСЮЛ. // Функция ОписаниеНовойКонтактнойИнформации() @@ -8095,7 +9004,17 @@ КонецПроцедуры -Функция КонструкторСпискаДомов() +// Возвращаемое значение: +// ТаблицаЗначений: +// * ДомЧислом - Число +// * Дом - Строка +// * Корпус - Строка +// * Строение - Строка +// * Значение - см. ОписаниеДомаИСтроения +// * Представление - Строка +// * Идентификатор - Строка +// +Функция КонструкторСпискаДомов() Экспорт ВариантыДомов = Новый ТаблицаЗначений; ВариантыДомов.Колонки.Добавить("ДомЧислом", ОбщегоНазначения.ОписаниеТипаЧисло(12)); @@ -8139,9 +9058,9 @@ // классификатора. // // Параметры: -// Идентификатор - УникальныйИдентификатор - Идентификатор объекта. Если указан, то структура +// Идентификатор - УникальныйИдентификатор - идентификатор объекта. Если указан, то структура // заполняется данными для этого объекта. -// ВариантКлассификатора - Строка - Требуемый вид классификатора. +// ВариантКлассификатора - Строка - требуемый вид классификатора. // // Возвращаемое значение: // Структура - описание населенного пункта. @@ -8183,7 +9102,7 @@ // Возвращает признак того, является ли строка данных контактной информации XML данными. // // Параметры: -// Текст - Строка - Проверяемая строка. +// Текст - Строка - проверяемая строка. // // Возвращаемое значение: // Булево - результат проверки. @@ -8194,179 +9113,6 @@ КонецФункции -// Преобразует формат из XML в JSON -// -Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Представление = "") Экспорт - - Результат = ОписаниеНовойКонтактнойИнформации(); - - НаименованиеСтраны = ""; - - Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда - Если ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда - XDTOАдрес = ДесериализацияАдресаXDTO(КонтактнаяИнформация); - Если XDTOАдрес.Свойства().Получить("Представление") <> Неопределено Тогда - Результат.Value = XDTOАдрес.Представление; - КонецЕсли; - Если XDTOАдрес.Свойства().Получить("Комментарий") <> Неопределено И ТипЗнч(XDTOАдрес.Комментарий) = Тип("Строка") Тогда - Результат.Comment = XDTOАдрес.Комментарий; - КонецЕсли; - ИначеЕсли ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда - АдресИзJSON = JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация); - ЗаполнитьЗначенияСвойств(Результат, АдресИзJSON); - УстановитьИдентификаторыАдреса(Результат); - Возврат Результат; - Иначе - Возврат Результат; - КонецЕсли; - Иначе - Возврат Результат; - КонецЕсли; - - ПространствоИмен = ПространствоИмен(); - Состав = XDTOАдрес.Состав; - - Если Состав = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - XDTOТип = Состав.Тип(); - - Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") - Или XDTOТип = ФабрикаXDTO.Тип("http://www.v8.1c.ru/ssl/contactinfo", "Адрес") Тогда - - Если Состав.Свойства().Получить("Страна") <> Неопределено И ЗначениеЗаполнено(Состав.Страна) Тогда - НаименованиеСтраны = Состав.Страна; - Иначе - НаименованиеСтраны = ОсновнаяСтрана(); - КонецЕсли; - - АдресРФ = Состав.Состав; - - ИначеЕсли XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ") Тогда - АдресРФ = Состав; - Иначе - Возврат Результат; - КонецЕсли; - - Если АдресРФ = Неопределено Тогда - Возврат Результат; - ИначеЕсли ТипЗнч(АдресРФ) = Тип("Строка") Тогда - - Если СтрЧислоВхождений(АдресРФ, ",") = 9 Тогда - - Результат.AddressType = АдминистративноТерриториальныйАдрес(); - - ЧастиАдреса = СтрРазделить(АдресРФ, ","); - Результат.ZIPCode = ЧастиАдреса[1]; - - НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[2]); - Результат.Area = НаименованиеИСокращение.Наименование; - Результат.AreaType = НаименованиеИСокращение.Сокращение; - - НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[3]); - Результат.District = НаименованиеИСокращение.Наименование; - Результат.DistrictType = НаименованиеИСокращение.Сокращение; - - НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[4]); - Результат.City = НаименованиеИСокращение.Наименование; - Результат.CityType = НаименованиеИСокращение.Сокращение; - - НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[5]); - Результат.Locality = НаименованиеИСокращение.Наименование; - Результат.LocalityType = НаименованиеИСокращение.Сокращение; - - НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[6]); - Результат.Street = НаименованиеИСокращение.Наименование; - Результат.StreetType = НаименованиеИСокращение.Сокращение; - - НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[7]); - Результат.HouseNumber = НаименованиеИСокращение.Сокращение; - Результат.HouseType = НаименованиеИСокращение.Наименование; - - Если ЗначениеЗаполнено(ЧастиАдреса[8]) Тогда - НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[8]); - Результат.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование)); - КонецЕсли; - - Если ЗначениеЗаполнено(ЧастиАдреса[9]) Тогда - НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[9]); - Результат.Apartments.Добавить(ЗначениеСтроенияИлиПомещения( - НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование)); - КонецЕсли; - КонецЕсли; - Иначе - - Если ЗначениеЗаполнено(АдресРФ.Адрес_по_документу) Тогда - Результат.AddressType = АдресВСвободнойФорме(); - Иначе - Результат.AddressType = АдминистративноТерриториальныйАдрес(); - КонецЕсли; - - Результат.Country = НаименованиеСтраны; - Результат.ZIPCode = ПочтовыйИндексАдреса(АдресРФ); - Результат.OKTMO = Формат(АдресРФ.ОКТМО, "ЧГ=0"); - Результат.OKATO = Формат(АдресРФ.ОКАТО, "ЧГ=0"); - - СубъектРФ = НаименованиеИСокращение(АдресРФ.СубъектРФ); - Результат.Area = Строка(СубъектРФ.Наименование); - Результат.AreaType = Строка(СубъектРФ.Сокращение); - - РайонАдреса = НаименованиеИСокращение(РайонАдреса(АдресРФ)); - Результат.District = Строка(РайонАдреса.Наименование); - Результат.DistrictType = Строка(РайонАдреса.Сокращение); - - Город = НаименованиеИСокращение(АдресРФ.Город); - Результат.City = Строка(Город.Наименование); - Результат.CityType = Строка(Город.Сокращение); - - НаселПункт = НаименованиеИСокращение(АдресРФ.НаселПункт); - Результат.Locality = Строка(НаселПункт.Наименование); - Результат.LocalityType = Строка(НаселПункт.Сокращение); - - Улица = НаименованиеИСокращение(АдресРФ.Улица); - Результат.Street = Строка(Улица.Наименование); - Результат.StreetType = Строка(Улица.Сокращение); - - ВнутригРайон = НаименованиеИСокращение(АдресРФ.ВнутригРайон); - Результат.CityDistrict = Строка(ВнутригРайон.Наименование); - Результат.CityDistrictType = Строка(ВнутригРайон.Сокращение); - - ЗначениеДополнительныхЭлементов = ЗначениеДополнительныхЭлементов(АдресРФ); - Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент) Тогда - ДополнительныйЭлемент = НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент); - Результат.Territory = Строка(ДополнительныйЭлемент.Наименование); - Результат.TerritoryType = Строка(ДополнительныйЭлемент.Сокращение); - КонецЕсли; - Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент) Тогда - ПодчиненныйЭлемент = НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент); - Результат.Street = Строка(ПодчиненныйЭлемент.Наименование); - Результат.StreetType = Строка(ПодчиненныйЭлемент.Сокращение); - КонецЕсли; - - ЗданияИПомещения = ЗданияИПомещенияАдреса(АдресРФ); - Для каждого Здание Из ЗданияИПомещения.Здания Цикл - Если Здание.Вид = 1 Тогда - Результат.HouseType = Здание.Тип; - Результат.HouseNumber = Здание.Значение; - Иначе - Результат.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(Здание.Тип, Здание.Значение)); - КонецЕсли; - КонецЦикла; - - Для каждого Помещение Из ЗданияИПомещения.Помещения Цикл - Результат.Apartments.Добавить(ЗначениеСтроенияИлиПомещения(Помещение.Тип, Помещение.Значение)); - КонецЦикла; - - - КонецЕсли; - - УстановитьИдентификаторыАдреса(Результат); - - Возврат Результат; - -КонецФункции - Функция АдресВСвободнойФорме() Возврат "ВСвободнойФорме"; КонецФункции @@ -8394,23 +9140,23 @@ // Читает и устанавливает здания и помещения адреса. // // Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// XDTOАдрес - ОбъектXDTO - контактная информация или XDTO адреса. // НовоеЗначение - Структура - устанавливаемое значение. Ожидаются поля: -// * Здания - ТаблицаЗначений с колонками: +// * Здания - ТаблицаЗначений: // ** Тип - Строка - тип внутреннего классификатора дополнительных адресных // объектов. Например "Корпус". // ** Значение - Строка - значение номера дома, квартиры и т.п. -// * Помещения - ТаблицаЗначений с колонками, аналогично полю Здание. +// * Помещения - ТаблицаЗначений - с колонками, аналогично полю Здание. // // Возвращаемое значение: // Структура - текущие данные. Содержит поля: -// * Здания - ТаблицаЗначений с колонками: +// * Здания - ТаблицаЗначений: // ** Тип - Строка - тип внутреннего классификатора дополнительных адресных объектов. // Например "Корпус". // ** Сокращение - Строка - сокращение названия для использования в представлении. // ** Значение - Строка - значение номера дома, квартиры и т.п. // ** ПутьXPath - Строка - путь к значению объекта. -// * Помещения - ТаблицаЗначений с колонками, аналогично полю Здание. +// * Помещения - ТаблицаЗначений - с колонками, аналогично полю Здание. // Функция ЗданияИПомещенияАдреса(XDTOАдрес, НовоеЗначение = Неопределено) @@ -8573,7 +9319,8 @@ ЗаписьИндекса = АдресРФ.Получить(XPathПочтовогоИндекса()); Если ЗаписьИндекса = Неопределено Тогда - ЗаписьИндекса = АдресРФ.ДопАдрЭл.Добавить(ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); + ДопАдрЭл = АдресРФ.ДопАдрЭл; // СписокXDTO + ЗаписьИндекса = ДопАдрЭл.Добавить(ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); ЗаписьИндекса.ТипАдрЭл = КодИндекса; КонецЕсли; @@ -8596,7 +9343,7 @@ // Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. // // Возвращаемое значение: -// Массив - содержит структуры - описания. +// Массив из см. СтрокаОбъектаАдресации // Функция ТипыОбъектовАдресацииАдресаРФ() @@ -8643,6 +9390,22 @@ Возврат Результат; КонецФункции +// Параметры: +// Код - Строка +// Наименование - Строка +// Тип - Число +// Порядок - Число +// КодФИАС - Число +// Возвращаемое значение: +// Структура: +// * Ключ - Строка +// * Сокращение - Строка +// * КодФИАС - Число +// * Порядок - Число +// * Тип - Число +// * Наименование - Строка +// * Код - Строка +// Функция СтрокаОбъектаАдресации(Код, Наименование, Тип = 0, Порядок = 0, КодФИАС = 0) СтруктураОбъектаАдресации = Новый Структура; @@ -8671,7 +9434,7 @@ // Читает и устанавливает район адреса. // // Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// XDTOАдрес - ОбъектXDTO - контактная информация или XDTO адреса. // НовоеЗначение - Строка - устанавливаемое значение. // // Возвращаемое значение: @@ -8727,7 +9490,7 @@ // Возвращает извлеченный XDTO российского адреса или Неопределено для адреса иностранного. // // Параметры: -// ОбъектИнформации - ОбъектXDTO - Контактная информация или XDTO адреса. +// ОбъектИнформации - ОбъектXDTO - контактная информация или XDTO адреса. // // Возвращаемое значение: // ОбъектXDTO - российский адрес. @@ -8768,17 +9531,17 @@ ВариантыДополнительногоЭлементаАдреса = ВариантыДополнительногоЭлементаАдреса(); - XPath = ""; + ПутьXPath = ""; ДополнительныйЭлементАдреса = Неопределено; Для каждого ВариантДополнительныйЭлементАдреса Из ВариантыДополнительногоЭлементаАдреса Цикл - XPath = XPathДополнительногоОбъектаАдресации(90, ВариантДополнительныйЭлементАдреса); - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, XPath); + ПутьXPath = XPathДополнительногоОбъектаАдресации(90, ВариантДополнительныйЭлементАдреса); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, ПутьXPath); Если ДополнительныйЭлементАдреса <> Неопределено Тогда Прервать; КонецЕсли; КонецЦикла; - Возврат Новый Структура("Значение, XPath", ДополнительныйЭлементАдреса, XPath); + Возврат Новый Структура("Значение, XPath", ДополнительныйЭлементАдреса, ПутьXPath); КонецФункции @@ -8796,11 +9559,12 @@ // Читает дополнительные элемент адреса по его пути. // // Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. -// XPathЭлемента - Строка - Путь к элементу. +// XDTOАдрес - ОбъектXDTO - контактная информация или XDTO адреса. +// XPathЭлемента - Строка - путь к элементу. // // Возвращаемое значение: // Строка - значение элемента. +// Функция ДополнительныйЭлементАдреса(XDTOАдрес, XPathЭлемента) АдресРФ = НациональныйАдрес(XDTOАдрес); @@ -8881,10 +9645,10 @@ // Противоположность функции "КодСериализацииОбъектаАдресации". // // Параметры: -// Код - Строка - код +// Код - Строка - код // // Возвращаемое значение: -// Число - Тип +// Число - тип // Функция ТипОбъектаПоКодуСериализации(Код) Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл @@ -8980,9 +9744,8 @@ Возврат 3000; КонецФункции -Функция ЭтоГородФедеральногоЗначения(Адрес) +Функция ЭтоГородФедеральногоЗначения(Город) - Город = СокрЛП(Адрес.Area + " " + Адрес.AreaType); НазванияГородовФедеральногоЗначения = НазванияГородовФедеральногоЗначения(); Возврат НазванияГородовФедеральногоЗначения.Получить(ВРег(Город)) = Истина; @@ -9119,16 +9882,18 @@ // Загрузка всех данных классификатора адресов. // // Параметры: -// КодыСубъектовРФ - Массив - Содержит числовые коды регионов-субъектов для загрузки. +// КодыСубъектовРФ - Массив - содержит числовые коды регионов-субъектов для загрузки. // -// ОписаниеФайлов - Строка, Массив - Каталог на сервере, в котором находятся файлы данных. Ожидается, что имена +// ОписаниеФайлов - Строка +// - Массив - каталог на сервере, в котором находятся файлы данных. Ожидается, что имена // файлов будут в верхнем регистре. -// Массив элементов типа ОписаниеПередаваемогоФайла или структур с полями. -// * Имя - Строка - Имя или полное имя передаваемого файла. -// * Хранение - ДвоичныеДанные, Строка - Описание хранения файла. Строка +// Массив элементов типа ОписаниеПередаваемогоФайла или структур с полями: +// * Имя - Строка - имя или полное имя передаваемого файла. +// * Хранение - ДвоичныеДанные +// - Строка - описание хранения файла. Строка // может быть путем на файловой системе или адресом во временном // хранилище. -// ОповещатьОПрогрессе - Булево - Флаг оповещения о прогрессе (см ДлительныеОперации.СообщитьПрогресс). +// ОповещатьОПрогрессе - Булево - флаг оповещения о прогрессе (см ДлительныеОперации.СообщитьПрогресс). // Процедура ЗагрузитьКлассификаторАдресов(КодыСубъектовРФ, ОписаниеФайлов, ПараметрыЗагрузки) @@ -9177,7 +9942,7 @@ ОчиститьКлассификаторАдресов(КодыСубъектаРФ); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось загрузить адресные сведения субъекта РФ: %1 %2 - |по причине: %3'"), СубъектРФ, НаименованиеРегиона, ОписаниеОшибки())); + |по причине: %3'"), СубъектРФ, НаименованиеРегиона, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); ВызватьИсключение; КонецПопытки; @@ -9207,7 +9972,7 @@ // Регистрирует обработчики поставляемых данных за день и за все время. // // Параметры: -// Обработчики - ТаблицаЗначений - таблица для добавления обработчиков. Содержит колонки. +// Обработчики - ТаблицаЗначений - таблица для добавления обработчиков. Содержит колонки: // * ВидДанных - Строка - код вида данных, обрабатываемый обработчиком. // * КодОбработчика - Строка - будет использоваться при восстановлении обработки данных после сбоя. // * Обработчик - ОбщийМодуль - модуль, содержащий экспортные процедуры: diff --git a/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl index 3ad64cc99..31d6b9b11 100644 --- a/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl @@ -14,10 +14,12 @@ // Обработчик расшифровки табличного документа формы отчета. // // Параметры: -// ФормаОтчета - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - Форма отчета. -// Элемент - ПолеФормы, РасширениеПоляФормыДляПоляТабличногоДокумента - Табличный документ. -// Расшифровка - ИдентификаторРасшифровкиКомпоновкиДанных - Передается из параметров обработчика "как есть". -// СтандартнаяОбработка - Булево - Передается из параметров обработчика "как есть". +// ФормаОтчета - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета - форма отчета. +// Элемент - ПолеФормы +// - РасширениеПоляФормыДляПоляТабличногоДокумента - табличный документ. +// Расшифровка - ИдентификаторРасшифровкиКомпоновкиДанных - передается из параметров обработчика "как есть". +// СтандартнаяОбработка - Булево - передается из параметров обработчика "как есть". // Процедура ФормаОтчетаОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт Если Расшифровка = Неопределено Тогда @@ -66,10 +68,12 @@ // Обработчик дополнительной расшифровки (меню табличного документа формы отчета). // // Параметры: -// ФормаОтчета - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - Форма отчета. -// Элемент - ПолеФормы, РасширениеПоляФормыДляПоляТабличногоДокумента - Табличный документ. -// Расшифровка - ИдентификаторРасшифровкиКомпоновкиДанных - Передается из параметров обработчика "как есть". -// СтандартнаяОбработка - Булево - Передается из параметров обработчика "как есть". +// ФормаОтчета - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета - форма отчета. +// Элемент - ПолеФормы +// - РасширениеПоляФормыДляПоляТабличногоДокумента - табличный документ. +// Расшифровка - ИдентификаторРасшифровкиКомпоновкиДанных - передается из параметров обработчика "как есть". +// СтандартнаяОбработка - Булево - передается из параметров обработчика "как есть". // Процедура ФормаОтчетаОбработкаДополнительнойРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт Если ФормаОтчета.НастройкиОтчета.ПолноеИмя <> "Отчет.АнализЖурналаРегистрации" Тогда @@ -88,12 +92,13 @@ #Область СлужебныеПроцедурыИФункции // Параметры: -// ВыбранныйВариант - СписокЗначений - где: -// * Значение - Строка - -// ПараметрыОбработчика - Структура - где: -// * Расшифровка - ИдентификаторРасшифровкиКомпоновкиДанных - -// * ФормаОтчета - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - где: -// ** ОтчетТабличныйДокумент - ТабличныйДокумент - +// ВыбранныйВариант - СписокЗначений: +// * Значение - Строка +// ПараметрыОбработчика - Структура: +// * Расшифровка - ИдентификаторРасшифровкиКомпоновкиДанных +// * ФормаОтчета - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета: +// ** ОтчетТабличныйДокумент - ТабличныйДокумент // Процедура РезультатОбработкаРасшифровкиЗавершение(ВыбранныйВариант, ПараметрыОбработчика) Экспорт Если ВыбранныйВариант = Неопределено Тогда diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index 01bf699bb..7d8092c7a 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -117,7 +117,7 @@ // Обновляет превью табличного вопроса. // // Параметры: -// Вопросы - ТаблицаЗначений -. +// Вопросы - ТаблицаЗначений // Процедура ОбновитьПревьюТабличныйВопрос(Вопросы,Ответы,ТипТабличногоВопроса,Форма,ИмяТаблицыПревью,Ключ) Экспорт @@ -191,8 +191,8 @@ Пока ВыборкаВопросы.Следующий() Цикл СчетчикКолонок = СчетчикКолонок + 1; - РезультирующаяТаблицаСервер.Колонки.Добавить(ИмяКолонкиБезНомера + Строка(СчетчикКолонок),ВыборкаВопросы.ТипЗначения,ВыборкаВопросы.Формулировка); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + Строка(СчетчикКолонок),ВыборкаВопросы.ТипЗначения,ИмяТаблицыПревью)); + РезультирующаяТаблицаСервер.Колонки.Добавить(ИмяКолонкиБезНомера + XMLСтрока(СчетчикКолонок),ВыборкаВопросы.ТипЗначения,ВыборкаВопросы.Формулировка); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + XMLСтрока(СчетчикКолонок),ВыборкаВопросы.ТипЗначения,ИмяТаблицыПревью)); КонецЦикла; @@ -202,8 +202,8 @@ Пока ВыборкаВопросы.Следующий() Цикл СчетчикКолонок = СчетчикКолонок + 1; - РезультирующаяТаблицаСервер.Колонки.Добавить(ИмяКолонкиБезНомера + Строка(СчетчикКолонок),ВыборкаВопросы.ТипЗначения,ВыборкаВопросы.Формулировка); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + Строка(СчетчикКолонок),ВыборкаВопросы.ТипЗначения,ИмяТаблицыПревью)); + РезультирующаяТаблицаСервер.Колонки.Добавить(ИмяКолонкиБезНомера + XMLСтрока(СчетчикКолонок),ВыборкаВопросы.ТипЗначения,ВыборкаВопросы.Формулировка); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + XMLСтрока(СчетчикКолонок),ВыборкаВопросы.ТипЗначения,ИмяТаблицыПревью)); КонецЦикла; @@ -227,8 +227,8 @@ Для инд = 1 По Ответы.Количество() Цикл - РезультирующаяТаблицаСервер.Колонки.Добавить(ИмяКолонкиБезНомера + Строка(инд + 1),ОписаниеТиповСтрока,Ответы[инд-1].Ответ); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + Строка(инд + 1),ОписаниеТиповСтрока,ИмяТаблицыПревью)); + РезультирующаяТаблицаСервер.Колонки.Добавить(ИмяКолонкиБезНомера + XMLСтрока(инд + 1),ОписаниеТиповСтрока,Ответы[инд-1].Ответ); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + XMLСтрока(инд + 1),ОписаниеТиповСтрока,ИмяТаблицыПревью)); КонецЦикла; @@ -249,8 +249,8 @@ ОтветыВКолонках = Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",МассивВопросы[1])); Для инд = 1 По ОтветыВКолонках.Количество() Цикл - РезультирующаяТаблицаСервер.Колонки.Добавить(ИмяКолонкиБезНомера + Строка(инд + 1),ТаблицаВопросы[2].ТипЗначения,ОтветыВКолонках[инд-1].Ответ); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + Строка(инд + 1),ТаблицаВопросы[2].ТипЗначения,ИмяТаблицыПревью)); + РезультирующаяТаблицаСервер.Колонки.Добавить(ИмяКолонкиБезНомера + XMLСтрока(инд + 1),ТаблицаВопросы[2].ТипЗначения,ОтветыВКолонках[инд-1].Ответ); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + XMLСтрока(инд + 1),ТаблицаВопросы[2].ТипЗначения,ИмяТаблицыПревью)); КонецЦикла; @@ -269,14 +269,14 @@ Для инд = 1 По ДобавляемыеРеквизиты.Количество() Цикл - Элемент = Форма.Элементы.Добавить(ИмяКолонкиБезНомера + Строка(инд),Тип("ПолеФормы"), Форма.Элементы[ИмяТаблицыПревью]); + Элемент = Форма.Элементы.Добавить(ИмяКолонкиБезНомера + XMLСтрока(инд), Тип("ПолеФормы"), Форма.Элементы[ИмяТаблицыПревью]); Если ДобавляемыеРеквизиты[инд-1].ТипЗначения = Новый ОписаниеТипов("Булево") Тогда Элемент.Вид = ВидПоляФормы.ПолеФлажка; Иначе Элемент.Вид = ВидПоляФормы.ПолеВвода; КонецЕсли; - Элемент.ПутьКДанным = ИмяТаблицыПревью + "." + ИмяКолонкиБезНомера + Строка(инд); + Элемент.ПутьКДанным = ИмяТаблицыПревью + "." + ИмяКолонкиБезНомера + XMLСтрока(инд); Если (ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.Составной Или ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках) Или (инд > 1) Тогда @@ -292,6 +292,7 @@ // Процедура устанавливает корневой элемент в дерево шаблона анкеты. // Вызывается при создании форм, в которых отражается шаблон анкеты. +// Процедура УстановитьКорневойЭлементДереваАнкеты(ДеревоАнкеты) Экспорт ЭлементыДерева = ДеревоАнкеты.ПолучитьЭлементы(); // КоллекцияСтрокДереваЗначений @@ -306,7 +307,7 @@ // Устанавливает для дерева разделов элементы вступление и заключение. // // Параметры: -// ДеревоАнкеты - ДанныеФормыДерево - Дерево, в которое добавляется элемент вступления или заключения. +// ДеревоАнкеты - ДанныеФормыДерево - дерево, в которое добавляется элемент вступления или заключения. // Формулировка - Строка - локализуемое представление элемента дерева - либо "вступление", либо "заключение". // ТипСтроки - Строка - тип элемента дерева - либо "вступление", либо "заключение". // @@ -356,8 +357,9 @@ // Вызывается рекурсивно и добавляет строки в дерево анкеты. // // Параметры: -// Выборка - Выборка из запроса - текущая выборка результата запроса. -// СтрокаРодитель - СтрокаДереваЗначений - родительская строка дерева значений. +// Выборка - ВыборкаИзРезультатаЗапроса - текущая выборка результата запроса. +// СтрокаРодитель - СтрокаДереваЗначений - родительская строка дерева значений: +// * Наименование - Строка // Процедура ДобавитьСтрокиДереваАнкеты(Выборка,СтрокаРодитель,УровеньРекурсии,Форма) @@ -488,7 +490,8 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма для которой получается информация. -// ТекущиеДанныеДеревоРазделов - ДанныеФормыЭлементДерева - текущий раздел, для которого строится форма заполнения. +// ТекущиеДанныеДеревоРазделов - ДанныеФормыЭлементДерева - текущий раздел, для которого строится форма заполнения, где: +// * Ссылка - СправочникСсылка.ВопросыШаблонаАнкеты // Процедура ПостроениеФормыЗаполненияПоРазделу(Форма,ТекущиеДанныеДеревоРазделов) Экспорт @@ -673,7 +676,8 @@ Продолжить; КонецЕсли; - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + Строка(инд),ПредставлениеТипВопроса.Тип,ИмяТаблицы,ПредставлениеТипВопроса.Формулировка)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + XMLСтрока(инд), + ПредставлениеТипВопроса.Тип,ИмяТаблицы,ПредставлениеТипВопроса.Формулировка)); КонецЦикла; @@ -687,7 +691,8 @@ // Добавим остальные колонки МассивОтветы = СтрокаДерева.ПредопределенныеОтветы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ВопросДляКолонок)); Для инд=1 По МассивОтветы.Количество() Цикл - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + Строка(инд+1),ОписаниеТиповПВХ,ИмяТаблицы,МассивОтветы[инд-1].Ответ)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + XMLСтрока(инд+1), + ОписаниеТиповПВХ, ИмяТаблицы, МассивОтветы[инд-1].Ответ)); КонецЦикла; ИначеЕсли ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках Тогда @@ -718,7 +723,8 @@ // Добавим остальные колонки МассивОтветы = СтрокаДерева.ПредопределенныеОтветы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ВопросДляКолонок)); Для инд=1 По МассивОтветы.Количество() Цикл - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + Строка(инд+1),ПредставлениеТипВопросаДляЯчеек.Тип,ИмяТаблицы,МассивОтветы[инд-1].Ответ)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонкиБезНомера + XMLСтрока(инд+1), + ПредставлениеТипВопросаДляЯчеек.Тип, ИмяТаблицы, МассивОтветы[инд-1].Ответ)); КонецЦикла; КонецЕсли; @@ -1072,7 +1078,8 @@ Счетчик = Счетчик + 1; - ЭлементГруппаВариантОтвета = Форма.Элементы.Добавить(ИмяВопроса + "_Группа_ВариантОтвета_" + Строка(Счетчик),Тип("ГруппаФормы"),ЭлементГруппаВариантыОтветов); + ЭлементГруппаВариантОтвета = Форма.Элементы.Добавить(ИмяВопроса + "_Группа_ВариантОтвета_" + XMLСтрока(Счетчик), + Тип("ГруппаФормы"), ЭлементГруппаВариантыОтветов); ЭлементГруппаВариантОтвета.Вид = ВидГруппыФормы.ОбычнаяГруппа; ЭлементГруппаВариантОтвета.Отображение = ОтображениеОбычнойГруппы.Нет; @@ -1302,7 +1309,8 @@ КонецПроцедуры // Параметры: -// Форма - ФормаКлиентскогоПриложения - . +// Форма - ФормаКлиентскогоПриложения +// Процедура ДобавитьЭлементыКомплексныйВопрос(СтрокаТаблицы,ЭлементГруппа,Форма) ИмяВопроса = АнкетированиеКлиентСервер.ПолучитьИмяВопроса(СтрокаТаблицы.КлючСтроки); @@ -1466,7 +1474,8 @@ Счетчик = Счетчик + 1; ЭлементГруппаВариантОтвета = Форма.Элементы.Добавить(ИмяВопроса + "_Ответ_" - + Формат(СтрокаКомплексногоВопроса.НомерСтроки, "ЧГ=") + "_Группа_ВариантОтвета_" + Строка(Счетчик),Тип("ГруппаФормы"),ЭлементГруппаВариантыОтветов); + + Формат(СтрокаКомплексногоВопроса.НомерСтроки, "ЧГ=") + "_Группа_ВариантОтвета_" + XMLСтрока(Счетчик), + Тип("ГруппаФормы"),ЭлементГруппаВариантыОтветов); ЭлементГруппаВариантОтвета.Вид = ВидГруппыФормы.ОбычнаяГруппа; ЭлементГруппаВариантОтвета.Отображение = ОтображениеОбычнойГруппы.Нет; @@ -1531,7 +1540,8 @@ // Формирует строки из формулировки и полного кода строки. // // Параметры: -// СтрокаТаблицы - ДанныеФормыЭлементКоллекции - строка таблицы вопросов раздела. +// СтрокаТаблицы - ДанныеФормыЭлементКоллекции - строка таблицы вопросов раздела: +// * Наименование - Строка // // Возвращаемое значение: // Строка - строка содержащая полный код и формулировку. @@ -1692,7 +1702,7 @@ // Форма - ФормаКлиентскогоПриложения - форма, для которой получается информация. // ШаблонАнкеты - СправочникСсылка.ШаблоныАнкет - шаблон анкеты, по которому получается информация. // Раздел - СправочникСсылка.ВопросыШаблонаАнкеты - раздел анкеты, по которому получается информация. -// ПолныйКодРаздела - Строка - Полный код раздела, по которому получается информация. +// ПолныйКодРаздела - Строка - полный код раздела, по которому получается информация. // Процедура ПолучитьИнформациюПоВопросамАнкеты(Форма, ШаблонАнкеты, Раздел,ПолныйКодРаздела) @@ -1865,7 +1875,7 @@ НоваяСтрока.СоставКомплексногоВопроса.Загрузить(ВыборкаВопросыПоРазделуАнкеты.СоставКомплексногоВопроса.Выгрузить()); НоваяСтрока.СоставКомплексногоВопроса.Сортировать("НомерСтроки Возр"); НоваяСтрока.КлючСтроки = Новый УникальныйИдентификатор; - НоваяСтрока.ПолныйКод = ПолныйКодРаздела + "." + Строка(СчетчикВопросов); + НоваяСтрока.ПолныйКод = ПолныйКодРаздела + "." + XMLСтрока(СчетчикВопросов); КонецЦикла; @@ -2140,11 +2150,12 @@ // // Возвращаемое значение: // ТаблицаЗначений - таблица, содержащая информацию о доступных респонденту анкетах. Колонки: -// * Статус - Строка - . -// * АнкетаОпрос - ДокументСсылка.Анкета, ДокументСсылка.НазначениеОпросов -. -// * ДатаОкончания - Дата -. -// * Наименование - Строка -. -// * ДатаАнкеты - Дата -. +// * Статус - Строка +// * АнкетаОпрос - ДокументСсылка.Анкета +// - ДокументСсылка.НазначениеОпросов +// * ДатаОкончания - Дата +// * Наименование - Строка +// * ДатаАнкеты - Дата // Неопределено - в случае если для респондента нет доступных анкет. // Функция ТаблицаДоступныхРеспондентуАнкет(Респондент) Экспорт diff --git a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl index f235a7714..e87869b59 100644 --- a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl @@ -149,8 +149,8 @@ // Параметры: // -// Форма - ФормаКлиентскогоПриложения - . -// ВидимостьТелаАнкеты - Булево - . +// Форма - ФормаКлиентскогоПриложения +// ВидимостьТелаАнкеты - Булево // Процедура ПереключитьВидимостьГруппТелаАнкеты(Форма, ВидимостьТелаАнкеты) Экспорт diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl index 644ddd522..022946790 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl @@ -46,11 +46,12 @@ // // Параметры: // Расшифровка - Строка - имя ячейки. -// ДанныеРасшифровкиОтчета - Строка - Адрес во временном хранилище. -// ЗначениеРасшифровки - ЗадачаСсылка.ЗадачаИсполнителя, Произвольный - Значение расшифровки из ячейки. +// ДанныеРасшифровкиОтчета - Строка - адрес во временном хранилище. +// ЗначениеРасшифровки - ЗадачаСсылка.ЗадачаИсполнителя +// - Произвольный - значение расшифровки из ячейки. // // Возвращаемое значение: -// Булево -Если Истина, то это задача исполнителю. +// Булево -если Истина, то это задача исполнителю. // Функция ЭтоЗадачаИсполнителю(Знач Расшифровка, Знач ДанныеРасшифровкиОтчета, ЗначениеРасшифровки) Экспорт @@ -66,7 +67,7 @@ // // Параметры: // ЗадачаСсылка - ЗадачаСсылка - ссылка на задачу. -// ДействиеПоУмолчанию - Булево -Признак необходимости вызова процедуры +// ДействиеПоУмолчанию - Булево -признак необходимости вызова процедуры // ОбработкаВыполненияПоУмолчанию у бизнес-процесса задачи. // Процедура ВыполнитьЗадачу(ЗадачаСсылка, ДействиеПоУмолчанию = Ложь) Экспорт @@ -430,7 +431,7 @@ // ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - задача. // // Возвращаемое значение: -// Булево - Если Истина, то задача является ведущей. +// Булево - если Истина, то задача является ведущей. // Функция ЭтоВедущаяЗадача(ЗадачаСсылка) Экспорт @@ -444,10 +445,10 @@ // ввода составного типа (Пользователь и Роль). // // Параметры: -// Текст - Строка - Фрагмент текста для поиска возможных исполнителей. +// Текст - Строка - фрагмент текста для поиска возможных исполнителей. // // Возвращаемое значение: -// СписокЗначений - Список подбора, содержащий возможных исполнителей. +// СписокЗначений - список подбора, содержащий возможных исполнителей. // Функция СформироватьДанныеВыбораИсполнителя(Текст) Экспорт diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl index 7a869655f..d5b823664 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl @@ -14,7 +14,8 @@ // Отмечает указанный бизнес-процесс как остановленный. // // Параметры: -// ПараметрКоманды - Массив, БизнесПроцессСсылка - массив ссылок на бизнес процессы или ссылка на бизнес-процесс. +// ПараметрКоманды - Массив +// - БизнесПроцессСсылка - массив ссылок на бизнес процессы или ссылка на бизнес-процесс. // Процедура Остановить(Знач ПараметрКоманды) Экспорт @@ -79,7 +80,8 @@ // Предназначена для вызова из формы бизнес-процесса. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - форма бизнес-процесса, где: +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов - форма бизнес-процесса, где: // * Объект - БизнесПроцессОбъект - бизнес-процесс. // Процедура ОстановитьБизнесПроцессИзФормыОбъекта(Форма) Экспорт @@ -98,7 +100,9 @@ // Отмечает указанный бизнес-процесс как активный. // // Параметры: -// ПараметрКоманды - Массив, СтрокаГруппировкиДинамическогоСписка, БизнесПроцессСсылка - Бизнес процесс. +// ПараметрКоманды - Массив +// - СтрокаГруппировкиДинамическогоСписка +// - БизнесПроцессСсылка - бизнес процесс. // Процедура СделатьАктивным(Знач ПараметрКоманды) Экспорт @@ -151,7 +155,8 @@ // Предназначена для вызова из формы бизнес-процесса. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - форма бизнес-процесса, где: +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов - форма бизнес-процесса, где: // * Объект - БизнесПроцессОбъект - бизнес-процесс. // Процедура ПродолжитьБизнесПроцессИзФормыОбъекта(Форма) Экспорт @@ -197,10 +202,12 @@ // Отмечает указанную задачу как принятую к исполнению. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - Форма задачи, где: +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов - форма задачи, где: // * Объект - ЗадачаОбъект - задача. -// ТекущийПользователь - СправочникСсылка.ВнешниеПользователи, СправочникСсылка.Пользователи - ссылка на текущего -// пользователя программы. +// ТекущийПользователь - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.Пользователи - ссылка на текущего +// пользователя программы. // Процедура ПринятьЗадачуКИсполнению(Форма, ТекущийПользователь) Экспорт @@ -251,7 +258,8 @@ // Отмечает указанную задачу как не принятую к исполнению. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - Форма задачи, где: +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов - форма задачи, где: // * Объект - ЗадачаОбъект - задача. // Процедура ОтменитьПринятиеЗадачиКИсполнению(Форма) Экспорт @@ -272,7 +280,7 @@ // Устанавливает доступность команд принятия к исполнению. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма задачи, где: +// Форма - ФормаКлиентскогоПриложения - форма задачи, где: // * Элементы - ВсеЭлементыФормы - элементы формы. Содержит: // ** ФормаПринятьКИсполнению - ПолеВвода - кнопка команды на форме. // ** ФормаОтменитьПринятиеКИсполнению - ПолеВвода - кнопка команды на форме. @@ -329,11 +337,11 @@ // Для вызова из обработчика события формы ОбработкаОповещения. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма выполнения задачи, где: +// Форма - ФормаКлиентскогоПриложения - форма выполнения задачи, где: // * Объект - ЗадачаОбъект - задача объект. -// ИмяСобытия - Строка - Имя события. -// Параметр - Произвольный - Параметр события. -// Источник - Произвольный - Источник события. +// ИмяСобытия - Строка - имя события. +// Параметр - Произвольный - параметр события. +// Источник - Произвольный - источник события. // Процедура ФормаЗадачиОбработкаОповещения(Форма, ИмяСобытия, Параметр, Источник) Экспорт @@ -354,14 +362,16 @@ // Для вызова из обработчика события таблицы формы ПередНачаломДобавления. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма задачи. -// Элемент - ТаблицаФормы - Элементы таблицы формы. -// Отказ - Булево - Признак отказа от добавления объекта. Если в теле процедуры-обработчика установить данному +// Форма - ФормаКлиентскогоПриложения - форма задачи. +// Элемент - ТаблицаФормы - элементы таблицы формы. +// Отказ - Булево - признак отказа от добавления объекта. Если в теле процедуры-обработчика установить данному // параметру значение Истина, то добавление объекта выполнено не будет. -// Копирование - Булево - Определяет режим копирования. Если установлено Истина, то происходит копирование строки. -// Родитель - Неопределено, СправочникСсылка, ПланСчетовСсылка - Ссылка на элемент, который будет использован при -// добавлении в качестве родителя. -// Группа - Булево - Признак добавления группы. Истина - будет добавлена группа. +// Копирование - Булево - определяет режим копирования. Если установлено Истина, то происходит копирование строки. +// Родитель - Неопределено +// - СправочникСсылка +// - ПланСчетовСсылка - ссылка на элемент, который будет использован при +// добавлении в качестве родителя. +// Группа - Булево - признак добавления группы. Истина - будет добавлена группа. // Процедура СписокЗадачПередНачаломДобавления(Форма, Элемент, Отказ, Копирование, Родитель, Группа) Экспорт @@ -465,7 +475,7 @@ // Открыть форму с дополнительной информацией о задаче. // // Параметры: -// ЗадачаСсылка - ЗадачаСсылка - Ссылка на задачу. +// ЗадачаСсылка - ЗадачаСсылка - ссылка на задачу. // // Возвращаемое значение: // ФормаКлиентскогоПриложения - форма дополнительной задачи исполнителя. @@ -540,9 +550,9 @@ // который будет указан как владелец формы выбора исполнителя. // РеквизитИсполнитель - выбранное ранее значение исполнителя. // Используется для установки текущей строки в форме выбора исполнителя. -// ТолькоПростыеРоли - Булево, если Истина, то указывает что для выбора нужно +// ТолькоПростыеРоли - Булево - если Истина, то указывает что для выбора нужно // использовать только роли без объектов адресации. -// БезВнешнихРолей - Булево, если Истина, то указывает, что для выбора надо +// БезВнешнихРолей - Булево - если Истина, то указывает, что для выбора надо // использовать только роли, у которых не установлен признак ВнешняяРоль. // Процедура ВыбратьИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, ТолькоПростыеРоли = Ложь, БезВнешнихРолей = Ложь) Экспорт diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl index a323ef424..a0c663162 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl @@ -12,15 +12,14 @@ // Позволяет переопределить стандартную форму выбора. // // Параметры: -// ЭлементИсполнитель - ЭлементФормы - элемент формы, в которой выполняется выбора исполнителя, -// который будет указан как владелец формы выбора исполнителя. -// РеквизитИсполнитель - СправочникСсылка.Пользователи - выбранное ранее значение исполнителя. Используется -// для установки текущей строки в форме выбора исполнителя. -// ТолькоПростыеРоли - Булево - Если Истина, то указывает что для выбора нужно +// ЭлементИсполнитель - ЭлементФормы - элемент формы, в которой выбирается исполнитель. +// РеквизитИсполнитель - СправочникСсылка.Пользователи - выбранный ранее исполнитель. +// Используется для установки текущей строки в форме выбора исполнителя. +// ТолькоПростыеРоли - Булево - если Истина, то указывает что для выбора нужно // использовать только роли без объектов адресации. -// БезВнешнихРолей - Булево - Если Истина, то указывает, что для выбора надо использовать только роли, +// БезВнешнихРолей - Булево - если Истина, то указывает, что для выбора надо использовать только роли, // у которых не установлен признак ВнешняяРоль. -// СтандартнаяОбработка - Булево - Если Ложь, то не требуется выводить стандартную форму выбора исполнителя. +// СтандартнаяОбработка - Булево - если Ложь, то не требуется выводить стандартную форму выбора исполнителя. // Процедура ПриВыбореИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, ТолькоПростыеРоли, БезВнешнихРолей, СтандартнаяОбработка) Экспорт diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl index 97644d23d..896713848 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl @@ -14,8 +14,8 @@ // Добавление полей, на основании которых будет формироваться представление бизнес-процесса. // // Параметры: -// МенеджерОбъекта - БизнесПроцессМенеджер - Менеджер бизнес процесса. -// Поля - Массив - Поля, из которых формируется представление бизнес-процесса. +// МенеджерОбъекта - БизнесПроцессМенеджер - менеджер бизнес процесса. +// Поля - Массив - поля, из которых формируется представление бизнес-процесса. // СтандартнаяОбработка - Булево - если установить Ложь, то стандартная обработка заполнения не будет // выполнена. // @@ -34,10 +34,10 @@ // Обработка получения представления бизнес-процесса на основании полей данных. // // Параметры: -// МенеджерОбъекта - БизнесПроцессМенеджер - Менеджер бизнес процесса. -// Данные - Структура - Поля, из которых формируется представление бизнес процесса: -// Представление - Строка - Представление бизнес процесса. -// СтандартнаяОбработка - Булево - Если установить Ложь, то стандартная обработка заполнения не будет +// МенеджерОбъекта - БизнесПроцессМенеджер - менеджер бизнес процесса. +// Данные - Структура - поля, из которых формируется представление бизнес процесса: +// Представление - Строка - представление бизнес процесса. +// СтандартнаяОбработка - Булево - если установить Ложь, то стандартная обработка заполнения не будет // выполнена. // Процедура ОбработкаПолученияПредставленияБизнесПроцесса(МенеджерОбъекта, Данные, Представление, СтандартнаяОбработка) Экспорт @@ -63,12 +63,12 @@ // Обработка получения представления бизнес процесса на основание полей данных. // // Параметры: -// МенеджерОбъекта - БизнесПроцессМенеджер - Менеджер бизнес процесса. -// Данные - Структура - Поля, из которых формируется представление бизнес процесса, где: -// * Наименование - Строка - Наименование бизнес-процесса. -// Дата - Дата - Дата создания бизнес процесса. -// Представление - Строка - Представление бизнес процесса. -// СтандартнаяОбработка - Булево - Если установить Ложь, то стандартная обработка заполнения не будет +// МенеджерОбъекта - БизнесПроцессМенеджер - менеджер бизнес процесса. +// Данные - Структура - поля, из которых формируется представление бизнес процесса, где: +// * Наименование - Строка - наименование бизнес-процесса. +// Дата - Дата - дата создания бизнес процесса. +// Представление - Строка - представление бизнес процесса. +// СтандартнаяОбработка - Булево - если установить Ложь, то стандартная обработка заполнения не будет // выполнена. // Процедура ПолученияПредставленияБизнесПроцесса(МенеджерОбъекта, Данные, Дата, Представление, СтандартнаяОбработка) diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl index ba7637fff..1988278be 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl @@ -11,7 +11,7 @@ // Вызывается для обновления данных бизнес-процесса в регистре сведений ДанныеБизнесПроцессов. // // Параметры: -// Запись - РегистрСведенийЗапись.ДанныеБизнесПроцессов - Запись данных бизнес-процесса. +// Запись - РегистрСведенийЗапись.ДанныеБизнесПроцессов - запись данных бизнес-процесса. // Процедура ПриЗаписиСпискаБизнесПроцессов(Запись) Экспорт @@ -125,7 +125,7 @@ // Параметры: // Объект - СправочникОбъект.РолиИсполнителей - заполняемый объект. // Данные - СтрокаТаблицыЗначений - данные заполнения. -// ДополнительныеПараметры - Структура - Дополнительные параметры. +// ДополнительныеПараметры - Структура // Процедура ПриНачальномЗаполненииРолиИсполнителя(Объект, Данные, ДополнительныеПараметры) Экспорт @@ -160,7 +160,7 @@ // Параметры: // Объект - ПланВидовХарактеристикОбъект.ОбъектыАдресацииЗадач - заполняемый объект. // Данные - СтрокаТаблицыЗначений - данные заполнения. -// ДополнительныеПараметры - Структура - Дополнительные параметры. +// ДополнительныеПараметры - Структура // Процедура ПриНачальномЗаполненииЭлементаОбъектаАдресацииЗадачи(Объект, Данные, ДополнительныеПараметры) Экспорт @@ -168,4 +168,4 @@ КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index 23ea496da..1cb3d1cf7 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -76,7 +76,8 @@ // Вызывается при создании формы списка задач на сервере. // // Параметры: -// СписокЗадачИлиЕгоУсловноеОформление - ДинамическийСписок, УсловноеОформлениеКомпоновкиДанных - условное +// СписокЗадачИлиЕгоУсловноеОформление - ДинамическийСписок +// - УсловноеОформлениеКомпоновкиДанных - условное // оформление списка задач. // Процедура УстановитьОформлениеЗадач(Знач СписокЗадачИлиЕгоУсловноеОформление) Экспорт @@ -371,10 +372,10 @@ // полученную как максимальная дата исполнения задач бизнес-процесса. // // Параметры: -// БизнесПроцессСсылка - БизнесПроцессСсылка - Ссылка на бизнес- процесс. +// БизнесПроцессСсылка - БизнесПроцессСсылка - ссылка на бизнес- процесс. // // Возвращаемое значение: -// Дата - Дата завершения указанного бизнес-процесса. +// Дата - дата завершения указанного бизнес-процесса. // Функция ДатаЗавершенияБизнесПроцесса(БизнесПроцессСсылка) Экспорт @@ -552,7 +553,8 @@ // Строки группировки динамического списка игнорируются. // // Параметры: -// Задачи - Массив, ЗадачаСсылка.ЗадачаИсполнителя - ссылки на задачи, или одна ссылка. +// Задачи - Массив +// - ЗадачаСсылка.ЗадачаИсполнителя - ссылки на задачи, или одна ссылка. // Процедура ЗаблокироватьЗадачи(Задачи) Экспорт @@ -583,7 +585,8 @@ // // Параметры: // БизнесПроцессОбъект - БизнесПроцессОбъект - бизнес-процесс, который требуется заполнить. -// ДанныеЗаполнения - ЗадачаСсылка, Произвольный - данные заполнения, которые передаются в обработчик заполнения. +// ДанныеЗаполнения - ЗадачаСсылка +// - Произвольный - данные заполнения, которые передаются в обработчик заполнения. // Процедура ЗаполнитьГлавнуюЗадачу(БизнесПроцессОбъект, ДанныеЗаполнения) Экспорт @@ -612,7 +615,7 @@ // ДополнительныйОбъектАдресации - ЛюбаяСсылка - ссылка на дополнительный объект адресации. // // Возвращаемое значение: -// СправочникСсылка.ГруппыИсполнителейЗадач - Найденная по роли группа исполнителей задач. +// СправочникСсылка.ГруппыИсполнителейЗадач - найденная по роли группа исполнителей задач. // Функция ГруппаИсполнителейЗадач(РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации) Экспорт @@ -664,8 +667,8 @@ // Добавляет процесс в очередь для отложенного старта. // // Параметры: -// Процесс - БизнесПроцессСсылка - Бизнес процесс для отложенного старта. -// ДатаСтарта - Дата - Дата отложенного старта. +// Процесс - БизнесПроцессСсылка - бизнес процесс для отложенного старта. +// ДатаСтарта - Дата - дата отложенного старта. // Процедура ДобавитьПроцессДляОтложенногоСтарта(Процесс, ДатаСтарта) Экспорт @@ -688,7 +691,7 @@ // Отключает отложенный старт процесса. // // Параметры: -// Процесс - БизнесПроцессСсылка -Бизнес-процесс, у которого требуется отключить отложенный старт. +// Процесс - БизнесПроцессСсылка -бизнес-процесс, у которого требуется отключить отложенный старт. // Процедура ОтключитьОтложенныйСтартПроцесса(Процесс) Экспорт @@ -751,11 +754,11 @@ // Возвращает сведения о запуске для процесса. // // Параметры: -// Процесс - БизнесПроцессСсылка -Бизнес процесс у которого требуется получить сведения о запуске. +// Процесс - БизнесПроцессСсылка -бизнес процесс у которого требуется получить сведения о запуске. // // Возвращаемое значение: // - Неопределено - возвращается, если сведений нет. -// - Структура - Если есть: +// - Структура: // * БизнесПроцесс - БизнесПроцессСсылка. // * ДатаОтложенногоСтарта - ДатаИВремя. // * Состояние - ПеречислениеСсылка.СостоянияПроцессовДляЗапуска. @@ -799,10 +802,10 @@ // ожидает отложенного старта. В противном случае возвращает пустую дату. // // Параметры: -// БизнесПроцесс - БизнесПроцессСсылка -Бизнес процесс для которого требуется получить дату отложенного старта. +// БизнесПроцесс - БизнесПроцессСсылка -бизнес процесс для которого требуется получить дату отложенного старта. // // Возвращаемое значение: -// Дата - Дата отложенного старта. +// Дата - дата отложенного старта. // Функция ДатаОтложенногоСтартаПроцесса(БизнесПроцесс) Экспорт @@ -1173,7 +1176,7 @@ КонецПроцедуры // Параметры: -// ЗависимостиПрав - См. УправлениеДоступомПереопределяемый.ПриЗаполненииЗависимостейПравДоступа.ЗависимостиПрав +// ЗависимостиПрав - см. УправлениеДоступомПереопределяемый.ПриЗаполненииЗависимостейПравДоступа.ЗависимостиПрав // Процедура ПриЗаполненииЗависимостейПравДоступа(ЗависимостиПрав) Экспорт @@ -1318,7 +1321,7 @@ // См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек // // Параметры: -// Объекты - Массив - +// Объекты - Массив // Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт @@ -1519,15 +1522,17 @@ КонецФункции // Возвращаемое значение: -// ТаблицаЗначений - Описание: -// * Ссылка - ЗадачаСсылка.ЗадачаИсполнителя - -// * СрокИсполнения - Дата - -// * Исполнитель - СправочникСсылка.ВнешниеПользователи, СправочникСсылка.Пользователи - -// * РольИсполнителя - СправочникСсылка.РолиИсполнителей - -// * ОсновнойОбъектАдресации - Характеристика.ОбъектыАдресацииЗадач - -// * ДополнительныйОбъектАдресации - Характеристика.ОбъектыАдресацииЗадач - -// * Автор - СправочникСсылка.ВнешниеПользователи, СправочникСсылка.Пользователи - -// * Описание - Строка - +// ТаблицаЗначений: +// * Ссылка - ЗадачаСсылка.ЗадачаИсполнителя +// * СрокИсполнения - Дата +// * Исполнитель - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.Пользователи +// * РольИсполнителя - СправочникСсылка.РолиИсполнителей +// * ОсновнойОбъектАдресации - Характеристика.ОбъектыАдресацииЗадач +// * ДополнительныйОбъектАдресации - Характеристика.ОбъектыАдресацииЗадач +// * Автор - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.Пользователи +// * Описание - Строка // Функция СписокПросроченныхЗадач() @@ -1996,8 +2001,8 @@ // бизнес-процесса. // // Параметры: -// БизнесПроцессОбъект - БизнесПроцессОбъект - -// СтароеСостояние - ПеречислениеСсылка.СостоянияБизнесПроцессов - +// БизнесПроцессОбъект - БизнесПроцессОбъект +// СтароеСостояние - ПеречислениеСсылка.СостоянияБизнесПроцессов // Процедура ПриИзмененииСостоянияБизнесПроцесса(БизнесПроцессОбъект, СтароеСостояние) Экспорт @@ -2181,8 +2186,8 @@ // Пометить на удаление вложенные и подчиненные бизнес-процессы задачи ЗадачаСсылка. // // Параметры: -// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - -// НовоеЗначениеПометкиУдаления - Булево - +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя +// НовоеЗначениеПометкиУдаления - Булево // Процедура ПриПометкеУдаленияЗадачи(ЗадачаСсылка, НовоеЗначениеПометкиУдаления) Экспорт @@ -2256,7 +2261,7 @@ КонецФункции // Параметры: -// Список - ДинамическийСписок - +// Список - ДинамическийСписок // Процедура УстановитьПараметрыСпискаМоихЗадач(Список) Экспорт @@ -2383,7 +2388,8 @@ // Возвращает адрес электронной почты пользователя Получатель для рассылки уведомлений о задачах. // // Параметры: -// Получатель - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - исполнитель задачи. +// Получатель - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - исполнитель задачи. // Адрес - Строка - возвращаемый адрес электронной почты. // // diff --git a/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl b/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl index 4bf3b99dd..f62bc8a62 100644 --- a/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl +++ b/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl @@ -130,8 +130,9 @@ // Параметры: -// ИмяПараметра - Строка - +// ИмяПараметра - Строка // УстановленныеПараметры - см. СтандартныеПодсистемыСервер.УстановкаПараметровСеанса +// Процедура ПриУстановкеПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт Если ИмяПараметра = "РаботаСВнешнимиРесурсамиЗаблокирована" Тогда @@ -468,7 +469,7 @@ |Одновременное использование двух копий информационной базы с одинаковым идентификатором может привести к конфликтам |при синхронизации данных, отправке почты и другой работе с внешними ресурсами. | - |Если файл отсутствует в каталоге с информационной базой, то программа запросит администратора, разрешено + |Если файл отсутствует в папке с информационной базой, то программа запросит администратора, разрешено |ли ей работать с внешними ресурсами.'"), ИдентификаторБазы, Метаданные.Синоним); @@ -553,7 +554,7 @@ // поэтому проверку перемещения базы осуществляем через файл проверки. Если Не ФайлПроверкиИдентификатораФайловойБазыСуществует() Тогда - ТекстСообщения = НСтр("ru = 'В каталоге информационной базы отсутствует файл проверки DoNotCopy.txt.'"); + ТекстСообщения = НСтр("ru = 'В папке информационной базы отсутствует файл проверки DoNotCopy.txt.'"); УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); Возврат Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 036be015f..131555374 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -11,10 +11,10 @@ // Возвращает ссылку на вариант отчета. // // Параметры: -// Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений, -// СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Строка - ссылка на отчет или полное имя внешнего отчета. +// Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - Строка - ссылка на отчет или полное имя внешнего отчета. // КлючВарианта - Строка - имя варианта отчета. // // Возвращаемое значение: @@ -98,14 +98,16 @@ // // Параметры: // КлючОтчета - Строка - полное имя отчета с точкой. -// Пользователь - Строка, УникальныйИдентификатор, -// ПользовательИнформационнойБазы, Неопределено, -// СправочникСсылка.Пользователи - имя, идентификатор или ссылка на пользователя, +// Пользователь - Строка +// - УникальныйИдентификатор +// - ПользовательИнформационнойБазы +// - Неопределено +// - СправочникСсылка.Пользователи - имя, идентификатор или ссылка на пользователя, // настройки которого требуется получить. // Если Неопределено, то текущий пользователь. // // Возвращаемое значение: -// СписокЗначений - список вариантов отчета, где +// СписокЗначений - список вариантов отчета, где: // * Значение - Строка - ключ варианта отчета. // * Представление - Строка - представление варианта отчета. // @@ -120,13 +122,17 @@ // См. также СтандартноеХранилищеНастроекМенеджер.Удалить в синтакс-помощнике. // // Параметры: -// КлючОтчета - Строка, Неопределено - полное имя отчета с точкой. -// Если Неопределено, то удаляются настройки всех отчетов. -// КлючВарианта - Строка, Неопределено - ключ удаляемого варианта отчета. -// Если Неопределено, то удаляются все варианты отчета. -// Пользователь - Строка, УникальныйИдентификатор, -// ПользовательИнформационнойБазы, Неопределено, -// СправочникСсылка.Пользователи - имя, идентификатор или ссылка на пользователя, +// КлючОтчета - Строка +// - Неопределено - полное имя отчета с точкой. +// Если Неопределено, то удаляются настройки всех отчетов. +// КлючВарианта - Строка +// - Неопределено - ключ удаляемого варианта отчета. +// Если Неопределено, то удаляются все варианты отчета. +// Пользователь - Строка +// - УникальныйИдентификатор +// - ПользовательИнформационнойБазы +// - Неопределено +// - СправочникСсылка.Пользователи - имя, идентификатор или ссылка на пользователя, // настройки которого удаляются. // Если Неопределено, то удаляются настройки всех пользователей. // @@ -167,7 +173,8 @@ // // Параметры: // Настройки - см. КоллекцияПредопределенныхВариантовОтчетов -// Отчет - ОбъектМетаданныхОтчет, СправочникСсылка.ИдентификаторыОбъектовМетаданных - метаданные или ссылка отчета. +// Отчет - ОбъектМетаданныхОтчет +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - метаданные или ссылка отчета. // // Возвращаемое значение: // СтрокаДереваЗначений - настройки отчета и настройки "по умолчанию" для вариантов этого отчета, где: @@ -233,7 +240,7 @@ Строка(Отчет), НаименованиеПодсистемы("")); КонецЕсли; - Возврат Результат.Получить(0); + Возврат Результат[0]; КонецФункции // Находит настройки варианта отчета. Используется для настройки размещения. @@ -241,7 +248,8 @@ // // Параметры: // Настройки - см. ВариантыОтчетов.КоллекцияПредопределенныхВариантовОтчетов -// Отчет - СтрокаДерева, ОбъектМетаданных - описание настроек, метаданные или ссылка отчета. +// Отчет - СтрокаДерева +// - ОбъектМетаданных - описание настроек, метаданные или ссылка отчета. // КлючВарианта - Строка - имя варианта отчета как оно задано в схеме компоновки данных. // // Возвращаемое значение: @@ -277,7 +285,7 @@ // // Параметры: // // Форма - ФормаКлиентскогоПриложения, Неопределено - // // КлючВарианта - Строка, Неопределено - -// // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию +// // Настройки - см. значение ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию // // // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт // // Код процедуры. @@ -316,9 +324,9 @@ КлючВариантаОтчета, МетаданныеОтчета.Имя); КонецЕсли; - ЗаполнитьОписаниеСтрокиВарианта(Результат.Получить(0), ОписаниеОтчета); + ЗаполнитьОписаниеСтрокиВарианта(Результат[0], ОписаниеОтчета); - Возврат Результат.Получить(0); + Возврат Результат[0]; КонецФункции // Устанавливает режим вывода Отчетов и Вариантов в панелях отчетов. @@ -327,21 +335,22 @@ // // Параметры: // Настройки - см. ВариантыОтчетов.КоллекцияПредопределенныхВариантовОтчетов -// ОтчетИлиПодсистема - СтрокаДереваЗначений, ОбъектМетаданныхОтчет, ОбъектМетаданныхПодсистема - Описание отчета -// или подсистемы, для которой устанавливается режим вывода. -// Когда передана подсистема режим устанавливается рекурсивно для всех отчетов из ее состава. -// ГруппироватьПоОтчетам - Булево, Строка - режим вывода гиперссылок этого отчета в панели отчетов: -// * Истина - варианты группируются по отчету. -// По умолчанию в панелях отчетов выводится только основной вариант отчета, -// а все прочие варианты этого отчета выводятся "под" основным и по умолчанию скрыты -// (но могут быть найдены поиском или включены при помощи флажков в режиме настройки). -// Основным вариантом считается первый предопределенный вариант в схеме отчета. -// Этот режим появился в версии 2.2.2 и позволяет уменьшить количество гиперссылок, выводимых в панелях отчетов. -// * Ложь - все варианты отчета считаются самостоятельными, -// по умолчанию видны и выводятся независимо в панелях отчетов. -// Этот режим использовался в версии 2.2.1 и ранее. -// * "ПоОтчетам" - см. описание к значению Истина. -// * "ПоВариантам" - см. описание к значению Ложь. +// ОтчетИлиПодсистема - СтрокаДереваЗначений +// - ОбъектМетаданныхОтчет +// - ОбъектМетаданныхПодсистема - описание отчета или +// подсистемы, для которой устанавливается режим вывода. Когда передана подсистема режим +// устанавливается рекурсивно для всех отчетов из ее состава. +// ГруппироватьПоОтчетам - Булево +// - Строка - режим вывода гиперссылок этого отчета в панели отчетов: +// * Истина, "ПоОтчетам" - варианты группируются по отчету. +// По умолчанию в панелях отчетов выводится только основной вариант отчета, +// а все прочие варианты этого отчета выводятся "под" основным и по умолчанию скрыты +// (но могут быть найдены поиском или включены при помощи флажков в режиме настройки). +// Основным вариантом считается первый предопределенный вариант в схеме отчета. +// Этот режим появился в версии 2.2.2 и позволяет уменьшить количество гиперссылок, выводимых в панелях отчетов. +// * Ложь, "ПоВариантам" - все варианты отчета считаются самостоятельными, +// по умолчанию видны и выводятся независимо в панелях отчетов. +// Этот режим использовался в версии 2.2.1 и ранее. // Процедура УстановитьРежимВыводаВПанеляхОтчетов(Настройки, ОтчетИлиПодсистема, ГруппироватьПоОтчетам) Экспорт @@ -465,11 +474,12 @@ КонецПроцедуры -// Извлекает информация о таблицах, используемых в схеме или запросе. +// Извлекает информацию о таблицах, используемых в схеме или запросе. // Обработка исключений (например, в случае передачи некорректного текста запроса) выполняется вызывающим кодом. // // Параметры: -// Объект - СхемаКомпоновкиДанных, Строка - схема отчета или текст запроса. +// Объект - СхемаКомпоновкиДанных +// - Строка - схема отчета или текст запроса. // // Возвращаемое значение: // Массив - имена таблиц, используемые в схеме или запросе. @@ -487,14 +497,39 @@ // Функция ИспользуемыеТаблицы(Объект) Экспорт Таблицы = Новый Массив; + Если ТипЗнч(Объект) = Тип("СхемаКомпоновкиДанных") Тогда ЗарегистрироватьТаблицыНаборовДанных(Таблицы, Объект.НаборыДанных); ИначеЕсли ТипЗнч(Объект) = Тип("Строка") Тогда ЗарегистрироватьТаблицыЗапроса(Таблицы, Объект); КонецЕсли; + Возврат Таблицы; КонецФункции +// Извлекает информацию о таблицах, используемых в схеме или запросе. +// +// Параметры: +// Отчет - ОбъектМетаданныхОтчет +// +// Возвращаемое значение: +// Массив из см. ИспользуемыеТаблицы +// +Функция ИспользуемыеТаблицыОтчета(Отчет) Экспорт + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(Отчет.ПолноеИмя()); + + ИспользуемыеТаблицы = ИспользуемыеТаблицы(ОтчетОбъект.СхемаКомпоновкиДанных); + + НастройкиОтчета = НастройкиФормыОтчета( + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Отчет), Неопределено, ОтчетОбъект); + + Если НастройкиОтчета.События.ПриОпределенииИспользуемыхТаблиц Тогда + ОтчетОбъект.ПриОпределенииИспользуемыхТаблиц(Неопределено, ИспользуемыеТаблицы); + КонецЕсли; + + Возврат ИспользуемыеТаблицы; +КонецФункции + // Проверяет что таблицы, используемые в схеме или запросе, еще обновляются, и сообщает об этом пользователю. // Проверка выполняется методом ОбновлениеИнформационнойБазы.ОбъектОбработан(). // Обработка исключений (например, в случае передачи некорректного текста запроса) выполняется вызывающим кодом. @@ -502,7 +537,7 @@ // Параметры: // Объект - СхемаКомпоновкиДанных - схема отчета. // - Строка - текст запроса. -// - Массив - Имена таблиц, используемые отчетом. +// - Массив - имена таблиц, используемые отчетом: // * Строка - имя таблицы. // Сообщать - Булево - когда Истина и таблицы, используемые отчетом, еще не обновлены, // то будет выведено сообщение вида "Отчет может содержать некорректные данные". @@ -548,15 +583,13 @@ // Заполняется в формате "<ИмяОтчета>/<ИмяВарианта>". // Если передать "*", то будут сброшены настройки всех отчетов конфигурации. // ТипыНастроек - Структура - необязательный. Типы пользовательских настроек, которые требуется сбросить. -// Ключи структуры тоже являются необязательными. Значение по умолчанию указано в скобках. -// * ЭлементОтбора - Булево - если Ложь, то сбрасывается настройка "ЭлементОтбораКомпоновкиДанных". -// * ЗначениеПараметраНастроек - Булево - если Ложь, то сбрасывается настройка "ЗначениеПараметраНастроекКомпоновкиДанных". -// * ВыбранныеПоля - Булево - признак необходимости сброса настройки "ВыбранныеПоляКомпоновкиДанных" (возвращается -// из ключа Прочие). -// * Порядок - Булево - признак необходимости сброса настройки "ПорядокКомпоновкиДанных" (возвращается из ключа Прочие). -// * ЭлементУсловногоОформления - Булево - признак необходимости сброса настройки -// "ЭлементУсловногоОформленияКомпоновкиДанных" (возвращается из ключа Прочие). -// * Прочие - Булево - если Истина, то сбрасываются прочие настройки, не описанные в структуре явно. +// Ключи структуры тоже являются необязательными. Значение по умолчанию указано в скобках: +// * ЭлементОтбора - Булево - (Ложь) сбрасывать настройку "ЭлементОтбораКомпоновкиДанных". +// * ЗначениеПараметраНастроек - Булево - (Ложь) сбрасывать настройку "ЗначениеПараметраНастроекКомпоновкиДанных". +// * ВыбранныеПоля - Булево - (берется из ключа Прочие) сбрасывать настройку "ВыбранныеПоляКомпоновкиДанных". +// * Порядок - Булево - (берется из ключа Прочие) сбрасывать настройку "ПорядокКомпоновкиДанных". +// * ЭлементУсловногоОформления - Булево - (берется из ключа Прочие) сбрасывать настройку "ЭлементУсловногоОформленияКомпоновкиДанных". +// * Прочие - Булево - (Истина) сбрасывать прочие настройки, не описанные в структуре явно. // Процедура СброситьПользовательскиеНастройки(Ключ, ТипыНастроек = Неопределено) Экспорт ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( @@ -826,7 +859,8 @@ // Рекомендуется использовать в обработчиках обновления на конкретную версию. // // Параметры: -// ПользовательскиеВарианты - ТаблицаЗначений, Неопределено - необязательный. Используется в служебных сценариях. +// ПользовательскиеВарианты - ТаблицаЗначений +// - Неопределено - необязательный. Используется в служебных сценариях: // * Отчет - Строка - полное имя отчета в формате "Отчет.<ИмяОтчета>". // * Вариант - Строка - имя варианта отчета. // * Автор - Строка - имя пользователя. @@ -935,16 +969,6 @@ ХранилищеВарианта.Настройки = Новый ХранилищеЗначения(ОписаниеВарианта.Настройки); КонецЕсли; - Если Не ЗначениеЗаполнено(ОписаниеВарианта.Автор) Тогда - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вариант ""%1"" отчета ""%2"": не найден автор ""%3""'"), - ОписаниеВарианта.Наименование, - ОписаниеВарианта.ПредставлениеОтчета, - ОписаниеВарианта.ПредставлениеАвтора); - - ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, Сообщение, ХранилищеВарианта.Ссылка); - КонецЕсли; - // Поскольку переносятся пользовательские варианты отчетов, // то настройки размещения можно взять только из метаданных отчета. НайденныеПодсистемы = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетПолноеИмя", ОписаниеВарианта.ОтчетПолноеИмя)); @@ -974,24 +998,26 @@ // Получает объект отчета по ссылке на вариант отчета. // // Параметры: -// Параметры - Структура - Параметры подключения и формирования отчета. -// * СсылкаВарианта - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. -// * СсылкаОтчета - Произвольный - Ссылка отчета. -// * КлючВарианта - Строка - Имя предопределенного или идентификатор пользовательского варианта отчета. -// * ИдентификаторФормы - Неопределено, УникальныйИдентификатор - Идентификатор формы, из которой подключается отчет. +// Параметры - Структура - параметры подключения и формирования отчета: +// * СсылкаВарианта - СправочникСсылка.ВариантыОтчетов - ссылка варианта отчета. +// * СсылкаОтчета - Произвольный - ссылка отчета. +// * КлючВарианта - Строка - имя предопределенного или идентификатор пользовательского варианта отчета. +// * ИдентификаторФормы - Неопределено +// - УникальныйИдентификатор - идентификатор формы, из которой подключается отчет. // // Возвращаемое значение: -// Структура - Параметры отчета, в том числе Объект отчета. -// * СсылкаОтчета - Произвольный - Ссылка отчета. -// * ПолноеИмя - Строка - Полное имя отчета. -// * Метаданные - ОбъектМетаданных - Метаданные отчета. -// * Объект - ОтчетОбъект.<Имя отчета>, ВнешнийОтчет - Объект отчета. -// ** КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - Настройки отчета. -// ** СхемаКомпоновкиДанных - СхемаКомпоновкиДанных - Схема отчета. -// * КлючВарианта - Строка - Имя предопределенного или идентификатор пользовательского варианта отчета. -// * АдресСхемы - Строка - Адрес временного хранилища, по которому размещена схема отчета. +// Структура - параметры отчета, в том числе Объект отчета: +// * СсылкаОтчета - Произвольный - ссылка отчета. +// * ПолноеИмя - Строка - полное имя отчета. +// * Метаданные - ОбъектМетаданных - метаданные отчета. +// * Объект - ОтчетОбъект.<Имя отчета> +// - ВнешнийОтчет - объект отчета: +// ** КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - настройки отчета. +// ** СхемаКомпоновкиДанных - СхемаКомпоновкиДанных - схема отчета. +// * КлючВарианта - Строка - имя предопределенного или идентификатор пользовательского варианта отчета. +// * АдресСхемы - Строка - адрес временного хранилища, по которому размещена схема отчета. // * Успех - Булево - Истина, если удалось подключить отчет. -// * ТекстОшибки - Строка - Текст ошибки. +// * ТекстОшибки - Строка - текст ошибки. // // Места использования: // РассылкаОтчетов.ИнициализироватьОтчет(). @@ -1024,7 +1050,7 @@ Результат.Успех = Истина; Возврат Результат; КонецЕсли; - ВариантНастроекКД = Результат.Объект.СхемаКомпоновкиДанных.ВариантыНастроек.Получить(0); + ВариантНастроекКД = Результат.Объект.СхемаКомпоновкиДанных.ВариантыНастроек[0]; Результат.КлючВарианта = ВариантНастроекКД.Имя; Результат.НастройкиКД = ВариантНастроекКД.Настройки; Результат.СсылкаВарианта = ВариантОтчета(Результат.СсылкаОтчета, Результат.КлючВарианта); @@ -1088,7 +1114,7 @@ ВариантНастроекКД = ВариантыНастроекКД.Найти(Результат.КлючВарианта); Если ВариантНастроекКД = Неопределено Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вариант ""%1"" (ключ ""%2"") не найден в схеме отчета ""%3"".'"), + НСтр("ru = 'Вариант ""%1"" (ключ ""%2"") не существует в схеме отчета ""%3"".'"), Строка(Результат.СсылкаВарианта), Результат.КлючВарианта, Строка(Результат.СсылкаОтчета)); @@ -1222,7 +1248,7 @@ ПометкаУдаленияВарианта = ПометкаУдаления; Представление = ПредопределенныеВарианты[ВариантОтчета.КлючВарианта]; Если Не ПометкаУдаленияВарианта И Не ВариантОтчета.Пользовательский И Представление = Неопределено Тогда - // Предопределенный вариант, который не найден в списке предопределенных для данного отчета. + // Предопределенный вариант, который не существует в списке предопределенных для данного отчета. ПометкаУдаленияВарианта = Истина; КонецЕсли; @@ -1271,7 +1297,7 @@ // Параметры: // ПолноеИмяОтчета - см. ОбъектМетаданныхОтчет.ПолноеИмя() // ПользовательИнформационнойБазы - Строка - имя пользователя информационной базы. -// ТаблицаВариантовОтчетов - ТаблицаЗначений - таблица, в которую сохраняется информация о варианте отчета. +// ТаблицаВариантовОтчетов - ТаблицаЗначений - таблица, в которую сохраняется информация о варианте отчета: // * КлючОбъекта - Строка - ключ отчета вида "Отчет.НазваниеОтчета". // * КлючВарианта - Строка - ключ варианта отчета. // * Представление - Строка - представление варианта отчета. @@ -1446,14 +1472,14 @@ // Пример использования: после очистки хранилищ настроек. // // Параметры: -// Настройки - Структура - со свойствами: -// * Конфигурация - Булево - Обновить неразделенный справочник ПредопределенныеВариантыОтчетов. -// * Расширения - Булево - Обновить разделенный справочник ПредопределенныеВариантыОтчетовРасширений. -// * ОбщиеДанные - Булево - Обновить неразделенный справочник ПредопределенныеВариантыОтчетов. -// * РазделенныеДанные - Булево - Обновить разделенный справочник ВариантыОтчетов. -// * Оперативное - Булево - Актуализировать список вариантов отчетов, их наименования и описания. -// * Отложенное - Булево - Заполнить наименований полей, параметров, отборов и ключевых слов для поиска. -// * ИндексироватьСхему - Булево - Всегда индексировать схемы (не учитывать хеш-суммы). +// Настройки - Структура: +// * Конфигурация - Булево - обновить неразделенный справочник ПредопределенныеВариантыОтчетов. +// * Расширения - Булево - обновить разделенный справочник ПредопределенныеВариантыОтчетовРасширений. +// * ОбщиеДанные - Булево - обновить неразделенный справочник ПредопределенныеВариантыОтчетов. +// * РазделенныеДанные - Булево - обновить разделенный справочник ВариантыОтчетов. +// * Оперативное - Булево - актуализировать список вариантов отчетов, их наименования и описания. +// * Отложенное - Булево - заполнить наименований полей, параметров, отборов и ключевых слов для поиска. +// * ИндексироватьСхему - Булево - всегда индексировать схемы (не учитывать хеш-суммы). // Функция Обновить(Знач Настройки = Неопределено) Экспорт @@ -1565,16 +1591,17 @@ // Формирует отчет с указанными параметрами. // // Параметры: -// Параметры - Структура - Параметры подключения и формирования отчета. -// * СсылкаВарианта - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. -// * СсылкаОтчета - Произвольный - Ссылка отчета. -// * КлючВарианта - Строка - Имя предопределенного или идентификатор пользовательского варианта отчета. -// * ИдентификаторФормы - Неопределено, УникальныйИдентификатор - Идентификатор формы, из которой подключается отчет. -// ПроверятьЗаполнение - Булево - Если Истина то перед формированием будет проведена проверка заполнения. -// ПолучатьФлажокПустой - Булево - Если Истина то после формирования будет проведен анализ заполненности. +// Параметры - Структура - параметры подключения и формирования отчета: +// * СсылкаВарианта - СправочникСсылка.ВариантыОтчетов - ссылка варианта отчета. +// * СсылкаОтчета - Произвольный - ссылка отчета. +// * КлючВарианта - Строка - имя предопределенного или идентификатор пользовательского варианта отчета. +// * ИдентификаторФормы - Неопределено +// - УникальныйИдентификатор - идентификатор формы, из которой подключается отчет. +// ПроверятьЗаполнение - Булево - если Истина то перед формированием будет проведена проверка заполнения. +// ПолучатьФлажокПустой - Булево - если Истина то после формирования будет проведен анализ заполненности. // // Возвращаемое значение: -// Структура - Результат формирования. +// Структура - результат формирования. // // Места использования: // РассылкаОтчетов.СформироватьОтчет(). @@ -1830,9 +1857,11 @@ // Неизвестный тип отчета. // // Возвращаемое значение: -// Структура - со свойствами: -// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений, Строка, -// СправочникСсылка.ДополнительныеОтчетыИОбработки, СправочникСсылка.ИдентификаторыОбъектовМетаданных +// Структура: +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - Строка +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных // * ТипОтчета - Перечисления.ТипыОтчетов // * ОтчетИмя - Строка - например, "ДинамикаИзмененийФайлов". // * ОтчетПолноеИмя - Строка - например, "Отчет.ДинамикаИзмененийФайлов". @@ -1860,7 +1889,7 @@ Результат.ОтчетПолноеИмя = "ВнешнийОтчет." + Результат.ОтчетИмя; ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Предупреждение, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчет ""%1"" не найден в программе, он будет значиться как внешний.'"), + НСтр("ru = 'Отчет ""%1"" не существует в программе, он будет значиться как внешний.'"), ОтчетПолноеИмя)); ИначеЕсли Не ПравоДоступа("Просмотр", Результат.ОтчетМетаданные) Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -1913,13 +1942,13 @@ // Проверяет значение свойства отчета Хранилище вариантов. // // Параметры: -// МетаданныеОтчета - ОбъектМетаданных - Метаданные отчета, свойство которого проверяется. -// ТекстПредупреждения - Строка - Описание результата проверки. +// МетаданныеОтчета - ОбъектМетаданных - метаданные отчета, свойство которого проверяется. +// ТекстПредупреждения - Строка - описание результата проверки. // // Возвращаемое значение: -// Булево - -// * Истина - Значение свойства отчета Хранилище вариантов равно ХранилищеВариантовОтчетов; -// * Ложь - Значение свойства не установлено или установлено, но ссылается +// Булево: +// * Истина - значение свойства отчета Хранилище вариантов равно ХранилищеВариантовОтчетов; +// * Ложь - значение свойства не установлено или установлено, но ссылается // на Хранилище вариантов, не предусмотренное подсистемой. // Функция ХранилищеВариантовДополнительногоОтчетаКорректное(МетаданныеОтчета, ТекстПредупреждения = "") Экспорт @@ -2104,7 +2133,7 @@ ПоискОписания.Вставить("ЭтоВариант", Истина); НайденныеОписания = Результат.НайтиСтроки(ПоискОписания); - Описание = НайденныеОписания.Получить(0); // см. ОписаниеОтчетаПоУмолчанию + Описание = НайденныеОписания[0]; // см. ОписаниеОтчетаПоУмолчанию ОсновойВариантВключен = Описание.Включен; КонецЕсли; @@ -2178,7 +2207,7 @@ // Список объектов, в которых используются команды отчетов. // // Возвращаемое значение: -// Массив из ОбъектМетаданных - Объекты метаданных с командами отчетов. +// Массив из ОбъектМетаданных - объекты метаданных с командами отчетов. // Функция ОбъектыСКомандамиОтчетов() Экспорт @@ -2377,7 +2406,7 @@ // См. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей. // // Параметры: -// НазначениеРолей - Структура - где: +// НазначениеРолей - Структура: // * СовместноДляПользователейИВнешнихПользователей - Массив - имена ролей. // Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт @@ -2544,7 +2573,6 @@ Команда.ПараметрыФормы.Вставить("КлючВарианта", КомандаОтчетов.КлючВарианта); Если ПустаяСтрока(Команда.Обработчик) Тогда Команда.ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина); - Команда.ПараметрыФормы.Вставить("ВидимостьКомандВариантовОтчетов", Ложь); КонецЕсли; КонецЦикла; КонецПроцедуры @@ -2597,20 +2625,21 @@ // Получает объект отчета по ссылке варианта отчета. // // Параметры: -// СсылкаОтчета - -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка отчета конфигурации. -// - СправочникСсылка.ИдентификаторыОбъектовРасширений - Ссылка отчета расширения. -// - Произвольный - Ссылка дополнительного или внешнего отчета. +// СсылкаОтчета +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - ссылка отчета конфигурации. +// - СправочникСсылка.ИдентификаторыОбъектовРасширений - ссылка отчета расширения. +// - Произвольный - ссылка дополнительного или внешнего отчета. // // Возвращаемое значение: -// Структура - Параметры отчета, в том числе Объект отчета. -// * Объект - ОтчетОбъект.<Имя отчета>, ВнешнийОтчет - Объект отчета. -// * Имя - Строка - Имя объекта отчета. -// * ПолноеИмя - Строка - Полное имя объекта отчета. -// * Метаданные - ОбъектМетаданных - Объект метаданных отчета. -// * Ссылка - Произвольный - Ссылка отчета. +// Структура - параметры отчета, в том числе Объект отчета: +// * Объект - ОтчетОбъект.<Имя отчета> +// - ВнешнийОтчет - объект отчета. +// * Имя - Строка - имя объекта отчета. +// * ПолноеИмя - Строка - полное имя объекта отчета. +// * Метаданные - ОбъектМетаданных - объект метаданных отчета. +// * Ссылка - Произвольный - ссылка отчета. // * Успех - Булево - Истина если удалось подключить отчет. -// * ТекстОшибки - Строка - Текст ошибки. +// * ТекстОшибки - Строка - текст ошибки. // // Места использования: // РассылкаОтчетов.ИнициализироватьОтчет(). @@ -2644,7 +2673,7 @@ Если ТипЗнч(Результат.Метаданные) <> Тип("ОбъектМетаданных") Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчет ""%1"" не найден в программе'"), + НСтр("ru = 'Отчет ""%1"" не существует в программе'"), Результат.Имя); Возврат Результат; КонецЕсли; @@ -2742,7 +2771,7 @@ // Формирует список разделов, в которых размещены команды вызова панели отчетов. // // Возвращаемое значение: -// СписокЗначений - См. описание 1 параметра процедуры ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов() +// СписокЗначений - см. описание 1 параметра процедуры ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов() // Функция СписокРазделов() Экспорт СписокРазделов = Новый СписокЗначений; @@ -2761,9 +2790,10 @@ // Устанавливает режим вывода вариантов отчета в панелях отчетов. // // Параметры: -// Настройки - ТаблицаЗначений - Передается "как есть" из процедуры НастроитьВариантыОтчетов. -// Отчет - СтрокаТаблицыЗначений, ОбъектМетаданныхОтчет - Описание настроек или метаданные отчета. -// ГруппироватьПоОтчетам - Булево - Режим вывода в панели отчетов: +// Настройки - ТаблицаЗначений - передается "как есть" из процедуры НастроитьВариантыОтчетов. +// Отчет - СтрокаТаблицыЗначений +// - ОбъектМетаданныхОтчет - описание настроек или метаданные отчета. +// ГруппироватьПоОтчетам - Булево - режим вывода в панели отчетов: // - Истина - По отчетам (варианты скрыты, а отчет включен и видим). // - Ложь - По вариантам (варианты видимы, а отчет отключен). // @@ -2786,11 +2816,12 @@ // Формирует таблицу замен старых ключей вариантов на актуальные. // // Возвращаемое значение: -// ТаблицаЗначений - Таблица изменений имен вариантов. Колонки: -// * ОтчетМетаданные - ОбъектМетаданных: Отчет - Метаданные отчета, в схеме которого изменилось имя варианта. -// * СтароеИмяВарианта - Строка - Старое имя варианта, до изменения. -// * АктуальноеИмяВарианта - Строка - Текущее (последнее актуальное) имя варианта. -// * Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных, Строка - Ссылка или имя отчета, +// ТаблицаЗначений - таблица изменений имен вариантов. Колонки: +// * ОтчетМетаданные - ОбъектМетаданных: Отчет - метаданные отчета, в схеме которого изменилось имя варианта. +// * СтароеИмяВарианта - Строка - старое имя варианта, до изменения. +// * АктуальноеИмяВарианта - Строка - текущее (последнее актуальное) имя варианта. +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - Строка - ссылка или имя отчета, // использующееся для хранения. // // См. также: @@ -2851,11 +2882,11 @@ // Формирует таблицу размещения отчетов по подсистемам конфигурации. // // Параметры: -// Результат - Неопределено - Используется для рекурсии. -// ПодсистемаРодитель - Неопределено - Используется для рекурсии. +// Результат - Неопределено - используется для рекурсии. +// ПодсистемаРодитель - Неопределено - используется для рекурсии. // // Возвращаемое значение: -// ТаблицаЗначений - Результат - ТаблицаЗначений - Настройки размещения отчетов по подсистемам. +// ТаблицаЗначений - результат - ТаблицаЗначений - Настройки размещения отчетов по подсистемам: // * ОтчетМетаданные - ОбъектМетаданных: Отчет. // * ОтчетПолноеИмя - Строка. // * ПодсистемаМетаданные - ОбъектМетаданных: Подсистема. @@ -2905,7 +2936,8 @@ // связанного с элементом справочника "Варианты отчетов". // // Параметры: -// ВариантОбъект - СправочникОбъект.ВариантыОтчетов, ДанныеФормыСтруктура - Вариант отчета. +// ВариантОбъект - СправочникОбъект.ВариантыОтчетов +// - ДанныеФормыСтруктура - вариант отчета. // Функция СброситьНастройкиВариантаОтчета(ВариантОбъект) Экспорт Если ВариантОбъект.Пользовательский @@ -3107,13 +3139,13 @@ // Заполняет наименование варианта отчета, если оно было очищено при применении настроек. // // Параметры: -// СвойстваВариантовОтчетов - ТаблицаЗначений - см. КоллекцияПредопределенныхВариантовОтчетов. +// СвойстваВариантовОтчетов - см. КоллекцияПредопределенныхВариантовОтчетов. // КэшСвойствВариантовОтчетов - ТаблицаЗначений - копия таблицы СвойстваВариантовОтчетов - до применения настроек, где: // * Наименование - Строка - наименование варианта отчета до применения настроек. -// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений, -// СправочникСсылка.ДополнительныеОтчетыИОбработки, -// СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// Строка - ссылка на идентификатор метаданных отчета. +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - Строка - ссылка на идентификатор метаданных отчета. // Процедура ЗаполнитьОчищенныеНаименования(СвойстваВариантовОтчетов, КэшСвойствВариантовОтчетов) НайденныеСвойства = СвойстваВариантовОтчетов.НайтиСтроки(Новый Структура("Наименование", "")); // см. КоллекцияПредопределенныхВариантовОтчетов @@ -3263,6 +3295,7 @@ // [*] Актуализирует кэш метаданных конфигурации: справочник ПредопределенныеВариантыОтчетов // и параметры вариантов отчетов в регистре. +// Процедура ОперативноеОбновлениеОбщихДанныхКонфигурации(ПараметрыОбновления) Экспорт Режим = "ОбщиеДанныеКонфигурации"; @@ -3481,7 +3514,7 @@ Найденные = ПредопределенныеВарианты.НайтиСтроки(Поиск); Если Найденные.Количество() = 0 Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вариант ""%1"" не найден для отчета ""%2""'"), + НСтр("ru = 'Вариант ""%1"" не существует для отчета ""%2""'"), ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки, ВариантОбъект.Ссылка); ОтменитьТранзакцию(); @@ -3772,8 +3805,8 @@ // Режим - Строка - вид обновления данных. // ОписаниеВарианта - СтрокаТаблицыЗначений - свойства варианта отчета, где: // * ВариантИзБазы - СтрокаТаблицыЗначений - свойства основного варианта отчета, где: -// * Ссылка - СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений, -// СправочникСсылка.ПредопределенныеВариантыОтчетов - ссылка на предопределенный вариант отчета. +// * Ссылка - СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений +// - СправочникСсылка.ПредопределенныеВариантыОтчетов - ссылка на предопределенный вариант отчета. // * Наименование - Строка - наименование варианта отчета. // * Описание - Строка - краткая справка по варианту отчета. // Результат - см. РезультатОбновленияОбщихДанных @@ -4261,7 +4294,7 @@ Если ВариантОбъект = Неопределено Тогда ОтменитьТранзакцию(); Продолжить; - КонецЕсли; + КонецЕсли; ВариантОбъект.Заблокировать(); ВариантОбъект.ПометкаУдаления = Истина; ЗаписатьПредопределенный(ВариантОбъект); @@ -4270,7 +4303,7 @@ Исключение ОтменитьТранзакцию(); ВызватьИсключение; - КонецПопытки; + КонецПопытки; КонецЦикла; ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); @@ -4281,7 +4314,7 @@ // Параметры: // СтарыйВариант - Структура - значения реквизитов варианта отчета, где: // * Ссылка - СправочникСсылка.ВариантыОтчетов - ссылка на вариант отчета. -// АктуальныйВариант - СтрокаТаблицыЗначений - +// АктуальныйВариант - СтрокаТаблицыЗначений // Процедура ЗаменитьКлючиПользовательскихНастроек(СтарыйВариант, АктуальныйВариант) Если СтарыйВариант.КлючВарианта = АктуальныйВариант.КлючВарианта @@ -4353,8 +4386,7 @@ // СтарыйКлюч - Строка - не актуальный ключ замеров. // АктуальныйКлюч - Строка - текущий ключ замеров. // АктуальноеНаименование - Строка - текущее наименование отчета. -// Результат - см. РезультатОбновленияОбщихДанных, где: -// * ТаблицаЗамеров - см. ТаблицаЗамеров +// Результат - см. РезультатОбновленияОбщихДанных // Процедура ЗарегистрироватьЗамерыВариантаКОбновлению(Знач СтарыйКлюч, Знач АктуальныйКлюч, Знач АктуальноеНаименование, Результат) Если ПустаяСтрока(СтарыйКлюч) Тогда @@ -4798,7 +4830,7 @@ Возврат; КонецЕсли; - СтрокаДерева = Найденные.Получить(0); // СтрокаДереваЗначений + СтрокаДерева = Найденные[0]; Если СтрокаРазмещения.Важный Тогда СтрокаДерева.Важность = ПредставлениеВажный(); @@ -4813,10 +4845,9 @@ // Сохраняет настройки размещения, измененные пользователем в табличную часть варианта отчета. // // Параметры: -// ВариантОбъект - СправочникОбъект.ВариантыОтчетов - Объект варианта отчета, где: -// ИзмененныеПодсистемы - Массив из СтрокаДереваЗначений - строки дерева значений, содержащий измененные настройки -// размещения, где: -// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовРасширений - +// ВариантОбъект - СправочникОбъект.ВариантыОтчетов - объект варианта отчета, где: +// ИзмененныеПодсистемы - Массив из СтрокаДереваЗначений - строки дерева значений, с измененным размещением, где: +// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовРасширений // - СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор метаданных подсистемы. // * Важность - Строка - степень важности отчета для соответствующей подсистемы. // @@ -4920,7 +4951,7 @@ // Обработчик установки условного оформления списка пользователей варианта отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - форма сохранения варианта отчета, форма элемента справочника варианта отчета, где +// Форма - ФормаКлиентскогоПриложения - форма сохранения варианта отчета, форма элемента справочника варианта отчета, где: // * Элементы - ВсеЭлементыФормы - элементы соответствующей формы. // Процедура УстановитьУсловноеОформлениеСпискаПользователейВариантаОтчета(Форма) Экспорт @@ -4962,10 +4993,12 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения - форма сохранения варианта отчета, форма элемента справочника варианта отчета, где: // * Элементы - ВсеЭлементыФормы - элементы соответствующей формы. -// * ИспользоватьГруппыПользователей - РеквизитФормы, Булево - признак использования в информационной базе -// справочника ГруппыПользователей. -// * ИспользоватьВнешнихПользователей - РеквизитФормы, Булево - признак использования в информационной базе -// справочника ГруппыВнешнихПользователей. +// * ИспользоватьГруппыПользователей - РеквизитФормы +// - Булево - признак использования в информационной базе +// справочника ГруппыПользователей. +// * ИспользоватьВнешнихПользователей - РеквизитФормы +// - Булево - признак использования в информационной базе +// справочника ГруппыВнешнихПользователей. // Процедура ОпределитьПоведениеСпискаПользователейВариантаОтчета(Форма) Экспорт @@ -4979,7 +5012,7 @@ И ПравоДоступа("Чтение", Метаданные.Справочники.Пользователи); ПодменюПодбора.Видимость = Форма.ИспользоватьГруппыПользователей - И Форма.ИспользоватьВнешнихПользователей; + Или Форма.ИспользоватьВнешнихПользователей; Элементы.ПользователиВариантаПодобратьПользователей.Видимость = Форма.ИспользоватьГруппыПользователей И Не Форма.ИспользоватьВнешнихПользователей; @@ -5017,13 +5050,17 @@ // // Параметры: // ВариантОтчета - СправочникСсылка.ВариантыОтчетов - ссылка на вариант отчета. -// Пользователь - СправочникСсылка.ВнешниеПользователи, СправочникСсылка.Пользователи - ссылка на пользователя настроек. -// КлючНастройки - Строка, Неопределено - идентификатор пользовательских настроек. +// Пользователь - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.Пользователи - ссылка на пользователя настроек. +// КлючНастройки - Строка +// - Неопределено - идентификатор пользовательских настроек. // // Возвращаемое значение: -// ТаблицаЗначений, Неопределено - коллекция ключей пользовательских настроек, где +// ТаблицаЗначений, Неопределено - коллекция ключей пользовательских настроек, где: +// * Наименование - Строка - наименование настроек. // * Вариант - СправочникСсылка.ВариантыОтчетов - ссылка на вариант отчета. -// * Пользователь - СправочникСсылка.ВнешниеПользователи, СправочникСсылка.Пользователи - ссылка на пользователя настроек. +// * Пользователь - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.Пользователи - ссылка на пользователя настроек. // * КлючПользовательскойНастройки - Строка - идентификатор пользовательских настроек. // Функция ПользовательскиеНастройкиВариантаОтчета(ВариантОтчета, Пользователь, КлючНастройки = Неопределено) @@ -5225,20 +5262,20 @@ КонецЕсли; ВариантОбъект.ХешНастроек = ХешНовыхНастроек; - КомпоновщикНастроекКД = ОтчетОбъект.КомпоновщикНастроек; - КомпоновщикНастроекКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКД)); - ОтчетыКлиентСервер.ЗагрузитьНастройки(КомпоновщикНастроекКД, НастройкиКД); + ОтчетОбъект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКД)); + ОтчетыКлиентСервер.ЗагрузитьНастройки(ОтчетОбъект.КомпоновщикНастроек, НастройкиКД); Если ЗаполнитьПоля Тогда // Преобразование всех настроек автоматической группировки в наборы полей. // См. "АвтоВыбранноеПолеКомпоновкиДанных", "АвтоПолеГруппировкиКомпоновкиДанных", // "АвтоЭлементПорядкаКомпоновкиДанных" в синтакс-помощнике. - КомпоновщикНастроекКД.РазвернутьАвтоПоля(); - ПоляДляПоиска.НаименованияПолей = СформироватьПредставленияПолей(КомпоновщикНастроекКД); + ОтчетОбъект.КомпоновщикНастроек.РазвернутьАвтоПоля(); + ПоляДляПоиска.НаименованияПолей = СформироватьПредставленияПолей(ОтчетОбъект.КомпоновщикНастроек); КонецЕсли; Если ЗаполнитьПараметрыИОтборы Тогда - ПоляДляПоиска.НаименованияПараметровИОтборов = СформироватьПредставленияПараметровИОтборов(КомпоновщикНастроекКД); + ПоляДляПоиска.НаименованияПараметровИОтборов = СформироватьПредставленияПараметровИОтборов( + ОтчетОбъект.КомпоновщикНастроек); КонецЕсли; УстановитьПоляДляПоиска(ВариантОбъект, ПоляДляПоиска); @@ -5519,6 +5556,65 @@ //////////////////////////////////////////////////////////////////////////////// // Уменьшение количества пользовательских настроек. +// Параметры: +// ОтчетСсылка - СправочникСсылка.ВариантыОтчетов +// КлючВарианта - Строка +// ОтчетОбъект - ОтчетОбъект +// +// Возвращаемое значение: +// Структура: +// * ФормироватьСразу - Булево +// * ВыводитьСуммуВыделенныхЯчеек - Булево +// * РазрешеноИзменятьСтруктуру - Булево +// * РазрешеноИзменятьВарианты - Булево +// * РазрешеноВыбиратьИНастраиватьВариантыБезСохранения - Булево +// * ЗагрузитьНастройкиПриИзмененииПараметров - Массив +// * СкрытьКомандыРассылки - Булево +// * РазрешеноВыбиратьВарианты - Булево +// * СхемаМодифицирована - Булево +// * АдресСхемы - Строка +// * КлючСхемы - Строка +// * Контекстный - Булево +// * Внешний - Булево +// * ПолноеИмя - Строка +// * Наименование - Строка +// * ОтчетСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - Строка +// * Подсистема - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * Безопасный - Булево +// * ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек - Булево +// * Печать - Структура: +// ** ПолеСверху - Число +// ** ПолеСлева - Число +// ** ПолеСнизу - Число +// ** ПолеСправа - Число +// ** ОриентацияСтраницы - ОриентацияСтраницы +// ** АвтоМасштаб - Булево +// ** МасштабПечати - Число +// * События - Структура: +// ** ПриСозданииНаСервере - Булево +// ** ПередЗагрузкойНастроекВКомпоновщик - Булево +// ** ПередЗагрузкойВариантаНаСервере - Булево +// ** ПриЗагрузкеВариантаНаСервере - Булево +// ** ПриЗагрузкеПользовательскихНастроекНаСервере - Булево +// ** ПередЗаполнениемПанелиБыстрыхНастроек - Булево +// ** ПослеЗаполненияПанелиБыстрыхНастроек - Булево +// ** ПриОпределенииПараметровВыбора - Булево +// ** ПриОпределенииИспользуемыхТаблиц - Булево +// ** ДополнитьСвязиОбъектовМетаданных - Булево +// * ПредопределенныеВарианты - СписокЗначений: +// ** Значение - Строка +// * ПараметрыРасположенияЭлементовУправления - Структура: +// ** Отбор - Массив +// ** ПараметрыДанных - Структура: +// *** Поле - Строка +// *** РастягиватьПоГоризонтали - Булево +// *** АвтоМаксимальнаяШирина - Булево +// *** Ширина - Число +// Функция НастройкиФормыОтчета(ОтчетСсылка, КлючВарианта, ОтчетОбъект) Экспорт НастройкиОтчета = ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию(); @@ -5562,6 +5658,12 @@ Возврат Не ОбщегоНазначения.РазделениеВключено(); КонецФункции +// Параметры: +// ПараметрыПоиска - Структура +// +// Возвращаемое значение: +// см. НайтиВариантыОтчетов +// Функция ТаблицаВариантовОтчетов(Знач ПараметрыПоиска) Экспорт Возврат НайтиВариантыОтчетов(ПараметрыПоиска, Истина).ТаблицаЗначений; @@ -5572,82 +5674,84 @@ // При поиске по подстроке СтрокаПоиска также подсвечивает найденные места в названиях и описаниях отчетов. // // Параметры: -// ПараметрыПоиска - Структура - со свойствами: -// * СтрокаПоиска - Строка - Необязательный. Одно или несколько слов, которые содержатся в названиях и описаниях +// ПараметрыПоиска - Структура: +// * СтрокаПоиска - Строка - необязательный. Одно или несколько слов, которые содержатся в названиях и описаниях // искомых вариантов отчетов. -// * Подсистемы - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Необязательный. +// * Подсистемы - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - необязательный. // Искать только среди вариантов отчетов, относящихся к указанным подсистемам. -// * ЖесткийОтборПоПодсистемам - Булево - Необязательный. Если Истина, выдавать результаты только из указанных подсистем. +// * ЖесткийОтборПоПодсистемам - Булево - необязательный. Если Истина, выдавать результаты только из указанных подсистем. // Иначе предлагать также релевантные результаты поиска из других подсистем. -// * Отчеты - Массив из СправочникСсылка.ВариантыОтчетов - Необязательный. Искать только среди указанных отчетов. -// * ТипыОтчетов - Массив из ПеречислениеСсылка.ТипыОтчетов - Необязательный. Искать только среди указанных +// * Отчеты - Массив из СправочникСсылка.ВариантыОтчетов - необязательный. Искать только среди указанных отчетов. +// * ТипыОтчетов - Массив из ПеречислениеСсылка.ТипыОтчетов - необязательный. Искать только среди указанных // типов отчетов. -// * ПометкаУдаления - Булево - Необязательный. Если Ложь, то возвращаются все варианты отчетов. +// * ПометкаУдаления - Булево - необязательный. Если Ложь, то возвращаются все варианты отчетов. // Если Истина или не задано, то возвращаются только варианты отчетов, не помеченные на удаление. -// * ТолькоЛичные - Булево - Необязательный. Если Ложь или не задано, то администратору возвращаются все варианты отчетов, +// * ТолькоЛичные - Булево - необязательный. Если Ложь или не задано, то администратору возвращаются все варианты отчетов, // а пользователю только доступные ему варианты отчетов. // Если Истина, то администратору также возвращаются только личные варианты отчетов как и для // неполноправного пользователя. -// ПолучатьИтоговуюТаблицу - Булево - Необязательный. Если Истина, то в возвращаемом значении заполняется свойство ТаблицаЗначений. -// ПолучатьПодсветку - Булево - Необязательный. Если Истина, то в возвращаемом значении заполняются свойства +// ПолучатьИтоговуюТаблицу - Булево - необязательный. Если Истина, то в возвращаемом значении заполняется свойство ТаблицаЗначений. +// ПолучатьПодсветку - Булево - необязательный. Если Истина, то в возвращаемом значении заполняются свойства // ПодсветкаВариантов, Подсистемы, ПодсветкаПодсистем, ВариантыСвязанныеСПодсистемами, РодителиСвязанныеСВариантами. // // Возвращаемое значение: -// Структура - со свойствами: -// * Ссылки - Массив из СправочникСсылка.ВариантыОтчетов - Вариантами отчетов, в названиях и описаниях которых, +// Структура: +// * Ссылки - Массив из СправочникСсылка.ВариантыОтчетов - вариантами отчетов, в названиях и описаниях которых, // найдены все искомые слова. -// * ПодсветкаВариантов - Соответствие - Подсветка найденных слов (если задана СтрокаПоиска), где: +// * ПодсветкаВариантов - Соответствие - подсветка найденных слов (если задана СтрокаПоиска), где: // ** Ключ - СправочникСсылка.ВариантыОтчетов. -// ** Значение - Структура - со свойствами: -// *** Ссылка - СправочникСсылка.ВариантыОтчетов - . -// *** НаименованияПолей - Строка - -// *** НаименованияПараметровИОтборов - Строка - -// *** КлючевыеСлова - Строка - -// *** Описание - Строка - -// *** НаименованияПользовательскихНастроек - Строка - -// *** ГдеНайдены - Структура - где: -// **** НаименованияПолей - Число - -// **** НаименованияПараметровИОтборов - Число - -// **** КлючевыеСлова - Число - -// **** Описание - Число - -// **** НаименованияПользовательскихНастроек - Число - -// * Подсистемы - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Заполняется подсистемами, +// ** Значение - Структура: +// *** Ссылка - СправочникСсылка.ВариантыОтчетов +// *** НаименованияПолей - Строка +// *** НаименованияПараметровИОтборов - Строка +// *** КлючевыеСлова - Строка +// *** Описание - Строка +// *** НаименованияПользовательскихНастроек - Строка +// *** ГдеНайдены - Структура: +// **** НаименованияПолей - Число +// **** НаименованияПараметровИОтборов - Число +// **** КлючевыеСлова - Число +// **** Описание - Число +// **** НаименованияПользовательскихНастроек - Число +// * Подсистемы - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - заполняется подсистемами, // в наименованиях которых найдены все искомые слова. // Для таких подсистем должны выводиться все вложенные варианты отчетов. -// * ПодсветкаПодсистем - Соответствие - Подсветка найденных слов (если задана СтрокаПоиска), где: -// ** Ключ - СправочникСсылка.ВариантыОтчетов - -// ** Значение - Структура - со свойствами: -// *** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// *** НаименованиеПодсистемы - Строка - -// * ВариантыСвязанныеСПодсистемами - Соответствие - Варианты отчетов и их подсистемы, где: -// ** Ключ - СправочникСсылка.ВариантыОтчетов - Вариант. -// ** Значение - Массив Из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Подсистемы. +// * ПодсветкаПодсистем - Соответствие - подсветка найденных слов (если задана СтрокаПоиска), где: +// ** Ключ - СправочникСсылка.ВариантыОтчетов +// ** Значение - Структура: +// *** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// *** НаименованиеПодсистемы - Строка +// * ВариантыСвязанныеСПодсистемами - Соответствие - варианты отчетов и их подсистемы, где: +// ** Ключ - СправочникСсылка.ВариантыОтчетов - вариант. +// ** Значение - Массив Из СправочникСсылка.ИдентификаторыОбъектовМетаданных - подсистемы. // * ТаблицаЗначений - ТаблицаЗначений - заполняется, если задан ПараметрыПоиска.ПолучатьИтоговуюТаблицу: -// ** Ссылка - СправочникСсылка.ВариантыОтчетов - -// ** Родитель - СправочникСсылка.ВариантыОтчетов - -// ** Наименование - Строка - -// ** ТолькоДляАвтора - Булево - -// ** Автор - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - -// ** АвторПредставление - Строка - -// ** Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// - Строка, СправочникСсылка.ДополнительныеОтчетыИОбработки - -// ** ИмяОтчета - Строка - -// ** КлючВарианта - Строка - -// ** ТипОтчета - ПеречислениеСсылка.ТипыОтчетов - -// ** Пользовательский - Булево - -// ** ПредопределенныйВариант - СправочникСсылка.ПредопределенныеВариантыОтчетов - -// - СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений - -// ** НаименованияПараметровИОтборов - Строка - -// ** НаименованияПолей - Строка - -// ** КлючевыеСлова - Строка - -// ** Описание - Строка - -// ** Подсистема - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// ** НаименованиеПодсистемы - Строка - -// ** КлючПользовательскойНастройки - Строка - -// ** ПредставлениеПользовательскойНастройки - Строка - -// ** ПометкаУдаления - Булево - +// ** Ссылка - СправочникСсылка.ВариантыОтчетов +// ** Родитель - СправочникСсылка.ВариантыОтчетов +// ** Наименование - Строка +// ** ТолькоДляАвтора - Булево +// ** Автор - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// ** АвторПредставление - Строка +// ** Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - Строка +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// ** ИмяОтчета - Строка +// ** КлючВарианта - Строка +// ** ТипОтчета - ПеречислениеСсылка.ТипыОтчетов +// ** Пользовательский - Булево +// ** ПредопределенныйВариант - СправочникСсылка.ПредопределенныеВариантыОтчетов +// - СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений +// ** НаименованияПараметровИОтборов - Строка +// ** НаименованияПолей - Строка +// ** КлючевыеСлова - Строка +// ** Описание - Строка +// ** Подсистема - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// ** НаименованиеПодсистемы - Строка +// ** КлючПользовательскойНастройки - Строка +// ** ПредставлениеПользовательскойНастройки - Строка +// ** ПометкаУдаления - Булево // Функция НайтиВариантыОтчетов(Знач ПараметрыПоиска, Знач ПолучатьИтоговуюТаблицу = Ложь, Знач ПолучатьПодсветку = Ложь) Экспорт @@ -5660,6 +5764,8 @@ ЕстьСтрокаПоиска = ПараметрыПоиска.Свойство("СтрокаПоиска") И ЗначениеЗаполнено(ПараметрыПоиска.СтрокаПоиска); ЕстьОтборПоОтчетам = ПараметрыПоиска.Свойство("Отчеты") И ЗначениеЗаполнено(ПараметрыПоиска.Отчеты); ЕстьОтборПоПодсистемам = ПараметрыПоиска.Свойство("Подсистемы") И ЗначениеЗаполнено(ПараметрыПоиска.Подсистемы); + ЕстьОтборПоКонтексту = ПараметрыПоиска.Свойство("Контекст"); + ЖесткийОтборПоПодсистемам = ЕстьОтборПоПодсистемам И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "ЖесткийОтборПоПодсистемам", Истина); ЕстьОтборПоТипамОтчетов = ПараметрыПоиска.Свойство("ТипыОтчетов") И ЗначениеЗаполнено(ПараметрыПоиска.ТипыОтчетов); @@ -5680,8 +5786,10 @@ Возврат Результат; КонецЕсли; - ЕстьОтборПоВидимости = ЕстьОтборПоПодсистемам И ПараметрыПоиска.Свойство("ТолькоВидимыеВПанелиОтчетов") + ЕстьОтборПоВидимости = ЕстьОтборПоПодсистемам + И ПараметрыПоиска.Свойство("ТолькоВидимыеВПанелиОтчетов") И ПараметрыПоиска.ТолькоВидимыеВПанелиОтчетов = Истина; + ТолькоНепомеченныеДляУдаления = ?(ПараметрыПоиска.Свойство("ПометкаУдаления"), ПараметрыПоиска.ПометкаУдаления, Истина); Если ЕстьОтборПоОтчетам Тогда @@ -5710,6 +5818,7 @@ Запрос.УстановитьПараметр("ЕстьПравоЧтенияАвторов", ЕстьПравоЧтенияАвторов); Запрос.УстановитьПараметр("ЕстьОтборПоТипамОтчетов", ЕстьОтборПоТипамОтчетов); Запрос.УстановитьПараметр("ЕстьОтборПоПодсистемам", ЕстьОтборПоПодсистемам); + Запрос.УстановитьПараметр("ЕстьОтборПоКонтексту", ЕстьОтборПоКонтексту); Запрос.УстановитьПараметр("ТипыОтчетов", ?(ЕстьОтборПоТипамОтчетов, ПараметрыПоиска.ТипыОтчетов, Новый Массив)); Запрос.УстановитьПараметр("НеПолучатьОписания", Не ЕстьСтрокаПоиска И Не ПолучатьИтоговуюТаблицу); Запрос.УстановитьПараметр("ПолучатьИтоговуюТаблицу", ПолучатьИтоговуюТаблицу); @@ -5717,6 +5826,7 @@ Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); Запрос.УстановитьПараметр("ПредставленияПодсистем", ВариантыОтчетовПовтИсп.ПредставленияПодсистем()); + Запрос.УстановитьПараметр("Контекст", ?(ЕстьОтборПоКонтексту, ПараметрыПоиска.Контекст, "")); Если ЕстьОтборПоПодсистемам Или ЕстьСтрокаПоиска Тогда @@ -5738,328 +5848,12 @@ Запрос.УстановитьПараметр("ЕстьОтборПоВидимости", ЕстьОтборПоВидимости); Запрос.УстановитьПараметр("ПодсистемыОтчетов", ПодсистемыОтчетов); - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка КАК Ссылка, - | ВариантыОтчетов.Родитель КАК Родитель, - | ВЫБОР - | КОГДА &ЕстьПравоЧтенияАвторов - | ТОГДА ВариантыОтчетов.Автор - | ИНАЧЕ НЕОПРЕДЕЛЕНО - | КОНЕЦ КАК Автор, - | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, - | ВариантыОтчетов.Отчет КАК Отчет, - | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, - | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, - | ВариантыОтчетов.Пользовательский КАК Пользовательский, - | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант, - | ВЫБОР - | КОГДА ВариантыОтчетов.Пользовательский - | ТОГДА ВариантыОтчетов.ИнтерактивнаяПометкаУдаления - | КОГДА ВариантыОтчетов.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение) - | ТОГДА ДоступныеВариантыРасширений.Вариант ЕСТЬ 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)) - | КОНЕЦ КАК КлючевыеСлова, - | ВЫБОР - | КОГДА &ЭтоОсновнойЯзык И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) <> """" - | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) - | КОГДА &ЭтоОсновнойЯзык И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) - | КОГДА НЕ &ЭтоОсновнойЯзык И ПОДСТРОКА(ПредставленияВариантов.Описание, 1, 1) <> """" - | ТОГДА ВЫРАЗИТЬ(ПредставленияВариантов.Описание КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияИзКонфигурации.Описание, ПредставленияИзРасширений.Описание), ВариантыОтчетов.Описание) КАК СТРОКА(1000)) - | КОНЕЦ КАК Описание - |ПОМЕСТИТЬ ВариантыОтчетов - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВариантыРасширений - | ПО ВариантыОтчетов.ПредопределенныйВариант = ДоступныеВариантыРасширений.Вариант - | И ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации - | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений - | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов - | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка - | И ПредставленияВариантов.КодЯзыка = &КодЯзыка - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации - | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка - | И ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений - | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка - | И ПредставленияИзРасширений.КодЯзыка = &КодЯзыка - |ГДЕ - | (НЕ &ЕстьОтборПоТипамОтчетов - | ИЛИ ВариантыОтчетов.ТипОтчета В (&ТипыОтчетов)) - | И ВариантыОтчетов.Отчет В(&ОтчетыПользователя) - | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - | И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов - | ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) - | - |ИНДЕКСИРОВАТЬ ПО - | Ссылка - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ПредставленияПодсистем.Ссылка КАК Ссылка, - | ПредставленияПодсистем.Представление КАК Представление - |ПОМЕСТИТЬ ПредставленияПодсистем - |ИЗ - | &ПредставленияПодсистем КАК ПредставленияПодсистем - |ГДЕ - | НЕ &ЭтоОсновнойЯзык - | - |ИНДЕКСИРОВАТЬ ПО - | Ссылка - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка КАК Ссылка, - | ВЫБОР - | КОГДА ВариантыОтчетов.Пользовательский - | ИЛИ ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема) ЕСТЬ NULL - | ТОГДА РазмещениеОтчетов.Подсистема - | ИНАЧЕ ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема) - | КОНЕЦ КАК Подсистема - |ПОМЕСТИТЬ РазмещениеВариантовОтчетов - |ИЗ - | ВариантыОтчетов КАК ВариантыОтчетов - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВариантыРасширений - | ПО ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений - | И ДоступныеВариантыРасширений.Вариант = ВариантыОтчетов.ПредопределенныйВариант - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК РазмещениеОтчетов - | ПО РазмещениеОтчетов.Ссылка = ВариантыОтчетов.Ссылка - | И (НЕ &ЕстьОтборПоПодсистемам - | ИЛИ РазмещениеОтчетов.Подсистема В (&ПодсистемыОтчетов)) - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеОтчетовКонфигурации - | ПО РазмещениеОтчетовКонфигурации.Ссылка = ВариантыОтчетов.ПредопределенныйВариант - | И (НЕ &ЕстьОтборПоПодсистемам - | ИЛИ РазмещениеОтчетовКонфигурации.Подсистема В (&ПодсистемыОтчетов)) - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеОтчетовРасширений - | ПО РазмещениеОтчетовРасширений.Ссылка = ВариантыОтчетов.ПредопределенныйВариант - | И (НЕ &ЕстьОтборПоПодсистемам - | ИЛИ РазмещениеОтчетовРасширений.Подсистема В (&ПодсистемыОтчетов)) - |ГДЕ - | (&НетОтбораПоПометкеУдаления - | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления - | ИЛИ НЕ ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL) - | И ЕСТЬNULL(РазмещениеОтчетов.Использование, ИСТИНА) - | И НЕ ЕСТЬNULL(РазмещениеОтчетов.Подсистема, - | ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема)) ЕСТЬ NULL - | И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов - | ИЛИ НЕ ВариантыОтчетов.ТолькоДляАвтора - | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) - | - |ИНДЕКСИРОВАТЬ ПО - | Ссылка - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | РазмещениеВариантовОтчетов.Ссылка КАК Ссылка, - | РазмещениеВариантовОтчетов.Подсистема, - | ДоступныеВариантыОтчетов.Видимость - |ПОМЕСТИТЬ НастройкиВариантовОтчетов - |ИЗ - | РазмещениеВариантовОтчетов КАК РазмещениеВариантовОтчетов - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ПО СоставыГруппПользователей.Пользователь = &ТекущийПользователь - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ДоступныеВариантыОтчетов - | ПО ДоступныеВариантыОтчетов.Вариант = РазмещениеВариантовОтчетов.Ссылка - | И ДоступныеВариантыОтчетов.Подсистема В ( - | РазмещениеВариантовОтчетов.Подсистема, - | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК НедоступныеВариантыОтчетов - | ПО НедоступныеВариантыОтчетов.Вариант = РазмещениеВариантовОтчетов.Ссылка - | И НедоступныеВариантыОтчетов.Подсистема = РазмещениеВариантовОтчетов.Подсистема - | И (НедоступныеВариантыОтчетов.Пользователь В (&ТекущийПользователь, НЕОПРЕДЕЛЕНО) - | ИЛИ ТИПЗНАЧЕНИЯ(&ТекущийПользователь) = ТИП(Справочник.Пользователи) - | И НедоступныеВариантыОтчетов.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(&ТекущийПользователь) = ТИП(Справочник.ВнешниеПользователи) - | И НедоступныеВариантыОтчетов.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи)) - | И НЕ НедоступныеВариантыОтчетов.Видимость - |ГДЕ - | &ЕстьОтборПоВидимости - | И ДоступныеВариантыОтчетов.Пользователь В (СоставыГруппПользователей.ГруппаПользователей, НЕОПРЕДЕЛЕНО) - | И ДоступныеВариантыОтчетов.Подсистема В (&ПодсистемыОтчетов) - | И ДоступныеВариантыОтчетов.Видимость - | И НедоступныеВариантыОтчетов.Вариант ЕСТЬ NULL - | - |ИНДЕКСИРОВАТЬ ПО - | Ссылка - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | РазмещениеВариантовОтчетов.Ссылка КАК Ссылка, - | РазмещениеВариантовОтчетов.Подсистема, - | ЕСТЬNULL(ИдентификаторыМетаданных.Синоним, ЕСТЬNULL(ИдентификаторыРасширений.Синоним, ЕСТЬNULL(ПредставленияПодсистем.Представление, """"))) КАК НаименованиеПодсистемы - |ПОМЕСТИТЬ РазмещениеСУчетомНастроек - |ИЗ - | РазмещениеВариантовОтчетов КАК РазмещениеВариантовОтчетов - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыМетаданных - | ПО ИдентификаторыМетаданных.Ссылка = РазмещениеВариантовОтчетов.Подсистема - | И &ЭтоОсновнойЯзык - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовРасширений КАК ИдентификаторыРасширений - | ПО ИдентификаторыРасширений.Ссылка = РазмещениеВариантовОтчетов.Подсистема - | И &ЭтоОсновнойЯзык - | ЛЕВОЕ СОЕДИНЕНИЕ ПредставленияПодсистем КАК ПредставленияПодсистем - | ПО ПредставленияПодсистем.Ссылка = РазмещениеВариантовОтчетов.Подсистема - | И НЕ &ЭтоОсновнойЯзык - | ЛЕВОЕ СОЕДИНЕНИЕ НастройкиВариантовОтчетов КАК НастройкиВариантовОтчетов - | ПО НастройкиВариантовОтчетов.Ссылка = РазмещениеВариантовОтчетов.Ссылка - | И НастройкиВариантовОтчетов.Подсистема В ( - | РазмещениеВариантовОтчетов.Подсистема, - | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) - |ГДЕ - | НЕ &ЕстьОтборПоВидимости - | ИЛИ НастройкиВариантовОтчетов.Видимость = ИСТИНА - | - |ИНДЕКСИРОВАТЬ ПО - | Ссылка - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка КАК Ссылка, - | ВариантыОтчетов.Родитель КАК Родитель, - | ВариантыОтчетов.НаименованиеВарианта КАК НаименованиеВарианта, - | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, - | ВЫБОР - | КОГДА &ЕстьПравоЧтенияАвторов - | ТОГДА ВариантыОтчетов.Автор - | ИНАЧЕ НЕОПРЕДЕЛЕНО - | КОНЕЦ КАК Автор, - | ВЫБОР - | КОГДА &ЕстьПравоЧтенияАвторов - | ТОГДА ЕСТЬNULL(ВариантыОтчетов.Автор.Наименование, """") - | ИНАЧЕ """" - | КОНЕЦ КАК АвторПредставление, - | ВариантыОтчетов.Отчет КАК Отчет, - | ВЫБОР - | КОГДА &ПолучатьИтоговуюТаблицу - | ТОГДА ВариантыОтчетов.Отчет.Имя - | ИНАЧЕ НЕОПРЕДЕЛЕНО - | КОНЕЦ КАК ИмяОтчета, - | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, - | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, - | ВариантыОтчетов.Пользовательский КАК Пользовательский, - | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант, - | ВариантыОтчетов.НаименованияПараметровИОтборов КАК НаименованияПараметровИОтборов, - | ВариантыОтчетов.НаименованияПолей КАК НаименованияПолей, - | ВариантыОтчетов.КлючевыеСлова КАК КлючевыеСлова, - | ВариантыОтчетов.Описание КАК Описание, - | Размещение.Подсистема КАК Подсистема, - | Размещение.НаименованиеПодсистемы КАК НаименованиеПодсистемы, - | НЕОПРЕДЕЛЕНО КАК КлючПользовательскойНастройки, - | НЕОПРЕДЕЛЕНО КАК ПредставлениеПользовательскойНастройки, - | ВариантыОтчетов.ПометкаУдаления КАК ПометкаУдаления - |ИЗ - | ВариантыОтчетов КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеСУчетомНастроек КАК Размещение - | ПО ВариантыОтчетов.Ссылка = Размещение.Ссылка - |ГДЕ - | (&НетОтбораПоПометкеУдаления - | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) - | И &ВариантыИПодсистемыПоСтрокеПоиска - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | Пользовательские.Вариант, - | ВариантыОтчетов.Родитель, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | НЕОПРЕДЕЛЕНО, - | Пользовательские.КлючПользовательскойНастройки, - | Пользовательские.Наименование, - | НЕОПРЕДЕЛЕНО - |ИЗ - | ВариантыОтчетов КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПользовательскиеНастройкиОтчетов КАК Пользовательские - | ПО ВариантыОтчетов.Ссылка = Пользовательские.Вариант - |ГДЕ - | (&НетОтбораПоПометкеУдаления - | ИЛИ ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) - | И (&НетОтбораПоПометкеУдаления - | ИЛИ Пользовательские.ПометкаУдаления = ЛОЖЬ) - | И Пользовательские.Пользователь = &ТекущийПользователь - | И &ПользовательскиеНастройкиПоСтрокеПоиска"; + ТекстЗапроса = ТекстЗапросаОтчетовСУточненнымиОтборами(); СловаПоиска = ПодготовитьУсловиеПоискаПоСтроке(Запрос, ТекстЗапроса, ЕстьСтрокаПоиска, ПараметрыПоиска, ЕстьПравоЧтенияАвторов); Иначе - ПодготовитьЗапросОтчетовСПростымиОтборами(Запрос, ТекстЗапроса, ЕстьОтборПоТипамОтчетов, ПараметрыПоиска); + ТекстЗапроса = ТекстЗапросаОтчетовСПростымиОтборами(); КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -6134,28 +5928,342 @@ КонецФункции -Процедура ПодготовитьЗапросОтчетовСПростымиОтборами(Знач Запрос, ТекстЗапроса, Знач ЕстьОтборПоТипамОтчетов, Знач ПараметрыПоиска) +Функция ТекстЗапросаОтчетовСУточненнымиОтборами() - ТекстЗапроса = " - |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + Возврат "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВариантыОтчетов.Ссылка КАК Ссылка, | ВариантыОтчетов.Родитель КАК Родитель, | ВЫБОР + | КОГДА &ЕстьПравоЧтенияАвторов + | ТОГДА ВариантыОтчетов.Автор + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК Автор, + | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, + | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, + | ВариантыОтчетов.Пользовательский КАК Пользовательский, + | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант, + | ВЫБОР + | КОГДА ВариантыОтчетов.Пользовательский + | ТОГДА ВариантыОтчетов.ИнтерактивнаяПометкаУдаления + | КОГДА ВариантыОтчетов.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение) + | ТОГДА ДоступныеВариантыРасширений.Вариант ЕСТЬ 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)) + | КОНЕЦ КАК КлючевыеСлова, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) <> """" + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) + | КОГДА &ЭтоОсновнойЯзык И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) + | КОГДА НЕ &ЭтоОсновнойЯзык И ПОДСТРОКА(ПредставленияВариантов.Описание, 1, 1) <> """" + | ТОГДА ВЫРАЗИТЬ(ПредставленияВариантов.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияИзКонфигурации.Описание, ПредставленияИзРасширений.Описание), ВариантыОтчетов.Описание) КАК СТРОКА(1000)) + | КОНЕЦ КАК Описание + |ПОМЕСТИТЬ ВариантыОтчетов + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВариантыРасширений + | ПО ВариантыОтчетов.ПредопределенныйВариант = ДоступныеВариантыРасширений.Вариант + | И ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов + | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка + | И ПредставленияВариантов.КодЯзыка = &КодЯзыка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка + | И ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка + | И ПредставленияИзРасширений.КодЯзыка = &КодЯзыка + |ГДЕ + | (НЕ &ЕстьОтборПоТипамОтчетов + | ИЛИ ВариантыОтчетов.ТипОтчета В (&ТипыОтчетов)) + | И ВариантыОтчетов.Отчет В (&ОтчетыПользователя) + | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) + | И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов + | ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + | И ВариантыОтчетов.Контекст = &Контекст + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПредставленияПодсистем.Ссылка КАК Ссылка, + | ПредставленияПодсистем.Представление КАК Представление + |ПОМЕСТИТЬ ПредставленияПодсистем + |ИЗ + | &ПредставленияПодсистем КАК ПредставленияПодсистем + |ГДЕ + | НЕ &ЭтоОсновнойЯзык + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ВЫБОР + | КОГДА ВариантыОтчетов.Пользовательский + | ИЛИ ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема) ЕСТЬ NULL + | ТОГДА РазмещениеОтчетов.Подсистема + | ИНАЧЕ ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема) + | КОНЕЦ КАК Подсистема + |ПОМЕСТИТЬ РазмещениеВариантовОтчетов + |ИЗ + | ВариантыОтчетов КАК ВариантыОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВариантыРасширений + | ПО ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений + | И ДоступныеВариантыРасширений.Вариант = ВариантыОтчетов.ПредопределенныйВариант + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК РазмещениеОтчетов + | ПО РазмещениеОтчетов.Ссылка = ВариантыОтчетов.Ссылка + | И (НЕ &ЕстьОтборПоПодсистемам + | ИЛИ РазмещениеОтчетов.Подсистема В (&ПодсистемыОтчетов)) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеОтчетовКонфигурации + | ПО РазмещениеОтчетовКонфигурации.Ссылка = ВариантыОтчетов.ПредопределенныйВариант + | И (НЕ &ЕстьОтборПоПодсистемам + | ИЛИ РазмещениеОтчетовКонфигурации.Подсистема В (&ПодсистемыОтчетов)) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеОтчетовРасширений + | ПО РазмещениеОтчетовРасширений.Ссылка = ВариантыОтчетов.ПредопределенныйВариант + | И (НЕ &ЕстьОтборПоПодсистемам + | ИЛИ РазмещениеОтчетовРасширений.Подсистема В (&ПодсистемыОтчетов)) + |ГДЕ + | (&НетОтбораПоПометкеУдаления + | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления + | ИЛИ НЕ ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL) + | И ЕСТЬNULL(РазмещениеОтчетов.Использование, ИСТИНА) + | И НЕ ЕСТЬNULL(РазмещениеОтчетов.Подсистема, + | ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема)) ЕСТЬ NULL + | И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов + | ИЛИ НЕ ВариантыОтчетов.ТолькоДляАвтора + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | РазмещениеВариантовОтчетов.Ссылка КАК Ссылка, + | РазмещениеВариантовОтчетов.Подсистема, + | ДоступныеВариантыОтчетов.Видимость + |ПОМЕСТИТЬ НастройкиВариантовОтчетов + |ИЗ + | РазмещениеВариантовОтчетов КАК РазмещениеВариантовОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО СоставыГруппПользователей.Пользователь = &ТекущийПользователь + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ДоступныеВариантыОтчетов + | ПО ДоступныеВариантыОтчетов.Вариант = РазмещениеВариантовОтчетов.Ссылка + | И ДоступныеВариантыОтчетов.Подсистема В ( + | РазмещениеВариантовОтчетов.Подсистема, + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК НедоступныеВариантыОтчетов + | ПО НедоступныеВариантыОтчетов.Вариант = РазмещениеВариантовОтчетов.Ссылка + | И НедоступныеВариантыОтчетов.Подсистема = РазмещениеВариантовОтчетов.Подсистема + | И (НедоступныеВариантыОтчетов.Пользователь В (&ТекущийПользователь, НЕОПРЕДЕЛЕНО) + | ИЛИ ТИПЗНАЧЕНИЯ(&ТекущийПользователь) = ТИП(Справочник.Пользователи) + | И НедоступныеВариантыОтчетов.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(&ТекущийПользователь) = ТИП(Справочник.ВнешниеПользователи) + | И НедоступныеВариантыОтчетов.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи)) + | И НЕ НедоступныеВариантыОтчетов.Видимость + |ГДЕ + | &ЕстьОтборПоВидимости + | И ДоступныеВариантыОтчетов.Пользователь В (СоставыГруппПользователей.ГруппаПользователей, НЕОПРЕДЕЛЕНО) + | И ДоступныеВариантыОтчетов.Подсистема В (&ПодсистемыОтчетов) + | И ДоступныеВариантыОтчетов.Видимость + | И НедоступныеВариантыОтчетов.Вариант ЕСТЬ NULL + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | РазмещениеВариантовОтчетов.Ссылка КАК Ссылка, + | РазмещениеВариантовОтчетов.Подсистема, + | ЕСТЬNULL(ИдентификаторыМетаданных.Синоним, ЕСТЬNULL(ИдентификаторыРасширений.Синоним, ЕСТЬNULL(ПредставленияПодсистем.Представление, """"))) КАК НаименованиеПодсистемы + |ПОМЕСТИТЬ РазмещениеСУчетомНастроек + |ИЗ + | РазмещениеВариантовОтчетов КАК РазмещениеВариантовОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыМетаданных + | ПО ИдентификаторыМетаданных.Ссылка = РазмещениеВариантовОтчетов.Подсистема + | И &ЭтоОсновнойЯзык + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовРасширений КАК ИдентификаторыРасширений + | ПО ИдентификаторыРасширений.Ссылка = РазмещениеВариантовОтчетов.Подсистема + | И &ЭтоОсновнойЯзык + | ЛЕВОЕ СОЕДИНЕНИЕ ПредставленияПодсистем КАК ПредставленияПодсистем + | ПО ПредставленияПодсистем.Ссылка = РазмещениеВариантовОтчетов.Подсистема + | И НЕ &ЭтоОсновнойЯзык + | ЛЕВОЕ СОЕДИНЕНИЕ НастройкиВариантовОтчетов КАК НастройкиВариантовОтчетов + | ПО НастройкиВариантовОтчетов.Ссылка = РазмещениеВариантовОтчетов.Ссылка + | И НастройкиВариантовОтчетов.Подсистема В ( + | РазмещениеВариантовОтчетов.Подсистема, + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)) + |ГДЕ + | НЕ &ЕстьОтборПоВидимости + | ИЛИ НастройкиВариантовОтчетов.Видимость = ИСТИНА + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ВариантыОтчетов.Родитель КАК Родитель, + | ВариантыОтчетов.НаименованиеВарианта КАК НаименованиеВарианта, + | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, + | ВЫБОР + | КОГДА &ЕстьПравоЧтенияАвторов + | ТОГДА ВариантыОтчетов.Автор + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК Автор, + | ВЫБОР + | КОГДА &ЕстьПравоЧтенияАвторов + | ТОГДА ЕСТЬNULL(ВариантыОтчетов.Автор.Наименование, """") + | ИНАЧЕ """" + | КОНЕЦ КАК АвторПредставление, + | ВариантыОтчетов.Отчет КАК Отчет, + | ВЫБОР + | КОГДА &ПолучатьИтоговуюТаблицу + | ТОГДА ВариантыОтчетов.Отчет.Имя + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК ИмяОтчета, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, + | ВариантыОтчетов.Пользовательский КАК Пользовательский, + | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант, + | ВариантыОтчетов.НаименованияПараметровИОтборов КАК НаименованияПараметровИОтборов, + | ВариантыОтчетов.НаименованияПолей КАК НаименованияПолей, + | ВариантыОтчетов.КлючевыеСлова КАК КлючевыеСлова, + | ВариантыОтчетов.Описание КАК Описание, + | Размещение.Подсистема КАК Подсистема, + | Размещение.НаименованиеПодсистемы КАК НаименованиеПодсистемы, + | НЕОПРЕДЕЛЕНО КАК КлючПользовательскойНастройки, + | НЕОПРЕДЕЛЕНО КАК ПредставлениеПользовательскойНастройки, + | ВариантыОтчетов.ПометкаУдаления КАК ПометкаУдаления + |ИЗ + | ВариантыОтчетов КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеСУчетомНастроек КАК Размещение + | ПО ВариантыОтчетов.Ссылка = Размещение.Ссылка + |ГДЕ + | (&НетОтбораПоПометкеУдаления + | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) + | И &ВариантыИПодсистемыПоСтрокеПоиска + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Пользовательские.Вариант, + | ВариантыОтчетов.Родитель, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | Пользовательские.КлючПользовательскойНастройки, + | Пользовательские.Наименование, + | НЕОПРЕДЕЛЕНО + |ИЗ + | ВариантыОтчетов КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПользовательскиеНастройкиОтчетов КАК Пользовательские + | ПО ВариантыОтчетов.Ссылка = Пользовательские.Вариант + |ГДЕ + | (&НетОтбораПоПометкеУдаления + | ИЛИ ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) + | И (&НетОтбораПоПометкеУдаления + | ИЛИ Пользовательские.ПометкаУдаления = ЛОЖЬ) + | И Пользовательские.Пользователь = &ТекущийПользователь + | И &ПользовательскиеНастройкиПоСтрокеПоиска"; + +КонецФункции + +Функция ТекстЗапросаОтчетовСПростымиОтборами() + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ВариантыОтчетов.Родитель КАК Родитель, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА &ЭтоОсновнойЯзык + | И НЕ ПользовательскиеВариантыОтчетов.Ссылка ЕСТЬ NULL + | ТОГДА ВариантыОтчетов.Наименование + | КОГДА НЕ &ЭтоОсновнойЯзык + | И НЕ ПользовательскиеВариантыОтчетов.Ссылка ЕСТЬ NULL | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Наименование, ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) | КОГДА &ЭтоОсновнойЯзык | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ВариантыКонфигурации.Наименование, ВариантыРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) @@ -6214,6 +6322,13 @@ | ПО СоставыГруппПользователей.Пользователь = &ТекущийПользователь | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ДоступныеВариантыОтчетов | ПО ДоступныеВариантыОтчетов.Вариант = ВариантыОтчетов.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ПользовательскиеВариантыОтчетов + | ПО ПользовательскиеВариантыОтчетов.Ссылка = ВариантыОтчетов.Ссылка + | И (ПользовательскиеВариантыОтчетов.Пользовательский + | ИЛИ ПользовательскиеВариантыОтчетов.ПредопределенныйВариант В ( + | НЕОПРЕДЕЛЕНО, + | ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка), + | ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка))) |ГДЕ | ВариантыОтчетов.Отчет В (&ОтчетыПользователя) | И (НЕ &ЕстьОтборПоТипамОтчетов @@ -6229,7 +6344,12 @@ | ИЛИ НЕ ВариантыОтчетов.ТолькоДляАвтора | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) | И ЕСТЬNULL(ДоступныеВариантыОтчетов.Пользователь, НЕОПРЕДЕЛЕНО) В (СоставыГруппПользователей.ГруппаПользователей, НЕОПРЕДЕЛЕНО) - | И ЕСТЬNULL(ДоступныеВариантыОтчетов.Видимость, ИСТИНА)"; + | И ЕСТЬNULL(ДоступныеВариантыОтчетов.Видимость, ИСТИНА) + | И (&ЕстьОтборПоКонтексту + | И (ПользовательскиеВариантыОтчетов.Ссылка ЕСТЬ NULL + | ИЛИ НЕ ПользовательскиеВариантыОтчетов.Ссылка ЕСТЬ NULL + | И ВариантыОтчетов.Контекст = &Контекст) + | ИЛИ НЕ &ЕстьОтборПоКонтексту)"; ИмяОтчета = "ВЫБОР | КОГДА &ПолучатьИтоговуюТаблицу И ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) @@ -6257,9 +6377,9 @@ КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяОтчета", ИмяОтчета); + Возврат СтрЗаменить(ТекстЗапроса, "&ИмяОтчета", ИмяОтчета); -КонецПроцедуры +КонецФункции // Визуализирует результат поиска вариантов отчетов. // @@ -6275,8 +6395,8 @@ // * АвторПредставление - Строка - представление автора отчета. // * ПредставлениеПользовательскойНастройки - Строка - наименование пользовательской настройки, которое // отображается в списке настроек. -// * Подсистема - СправочникСсылка.ИдентификаторыОбъектовРасширений, -// СправочникСсылка.ИдентификаторыОбъектовМетаданных - ссылка на идентификатор метаданных +// * Подсистема - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - ссылка на идентификатор метаданных // подсистемы, в которой размещается отчет. // * НаименованиеПодсистемы - Строка - представление подсистемы, в которой размещается отчет. // * Ссылка - СправочникСсылка.ВариантыОтчетов - ссылка на вариант отчета. @@ -6285,7 +6405,7 @@ Процедура СформироватьРезультатыПоиска(Знач МассивСлов, Знач ИсходнаяТаблица, Результат) ИсходнаяТаблица.Сортировать("Ссылка"); - СтрокаТаблицы = ИсходнаяТаблица.Получить(0); + СтрокаТаблицы = ИсходнаяТаблица[0]; ШаблонОбластиПоиска = Новый ФиксированнаяСтруктура("Значение, КоличествоНайденныхСлов, ПодсветкаСлов", "", 0, Новый СписокЗначений); Вариант = СведенияОВариантеОтчета(СтрокаТаблицы.Ссылка, СтрокаТаблицы.Родитель, ШаблонОбластиПоиска); @@ -6484,19 +6604,15 @@ ОтключенныеПоФункциональнымОпциям = ТаблицаОтключенных.ВыгрузитьКолонку("ПредопределенныйВариант"); // Добавить варианты, отключенные разработчиком. - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ОтчетыПользователя", ОтчетыПользователя); - Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); - - Запрос.Текст = + Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВариантыКонфигурации.Ссылка |ИЗ | Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации |ГДЕ - | (ВариантыКонфигурации.Включен = ЛОЖЬ - | ИЛИ ВариантыКонфигурации.ПометкаУдаления = ИСТИНА) - | И ВариантыКонфигурации.Отчет В (&ОтчетыПользователя) + | ВариантыКонфигурации.Отчет В (&ОтчетыПользователя) + | И (НЕ ВариантыКонфигурации.Включен + | ИЛИ ВариантыКонфигурации.ПометкаУдаления) | |ОБЪЕДИНИТЬ ВСЕ | @@ -6504,14 +6620,17 @@ | ВариантыРасширений.Ссылка |ИЗ | Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК Версии + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК Версии | ПО ВариантыРасширений.Ссылка = Версии.Вариант - | И ВариантыРасширений.Отчет = Версии.Отчет - | И (Версии.ВерсияРасширений = &ВерсияРасширений) + | И ВариантыРасширений.Отчет = Версии.Отчет + | И Версии.ВерсияРасширений = &ВерсияРасширений |ГДЕ - | (ВариантыРасширений.Включен = ЛОЖЬ - | ИЛИ Версии.Вариант ЕСТЬ NULL) - | И ВариантыРасширений.Отчет В (&ОтчетыПользователя)"; + | ВариантыРасширений.Отчет В (&ОтчетыПользователя) + | И (НЕ ВариантыРасширений.Включен + | ИЛИ Версии.Вариант ЕСТЬ NULL)"); + + Запрос.УстановитьПараметр("ОтчетыПользователя", ОтчетыПользователя); + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); ОтключенныеПринудительно = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОтключенныеПоФункциональнымОпциям, ОтключенныеПринудительно); @@ -6523,7 +6642,7 @@ // Находит слово и отмечает место, где оно найдено. // // Параметры: -// СтруктураГде - Структура - исходное значение, где: +// СтруктураГде - Структура: // * Значение - Строка - исходная строка. // * КоличествоНайденныхСлов - Число - статистика поиска. // * ПодсветкаСлов - СписокЗначений - фрагменты слова, которые подсвечиваются. @@ -6594,8 +6713,9 @@ // Возвращает сведения о доступных вариантах отчетов. // // Параметры: -// ПараметрыЗаполнения - Структура - -// АдресРезультата - УникальныйИдентификатор, Строка - +// ПараметрыЗаполнения - Структура +// АдресРезультата - УникальныйИдентификатор +// - Строка // Процедура НайтиВариантыОтчетовДляВывода(ПараметрыЗаполнения, АдресРезультата) Экспорт @@ -7010,14 +7130,14 @@ ВариантыОтчетовКлиентСервер.РазложитьСтрокуПоискаВМассивСлов(ВРег(СокрЛП(ПараметрыЗаполнения.СтрокаПоиска))), Неопределено); - Результат = Новый Структура; - Результат.Вставить("ТолькоТекущийРаздел", ТолькоТекущийРаздел); - Результат.Вставить("ТаблицаПодсистем", ТаблицаПодсистем); - Результат.Вставить("ДругиеРазделы", ДругиеРазделы); - Результат.Вставить("Варианты", ТаблицаРезультат); - Результат.Вставить("ИспользоватьПодсветку", ПоискПоСтроке); - Результат.Вставить("РезультатПоиска", РезультатПоиска); - Результат.Вставить("МассивСлов", МассивСлов); + Результат = ВариантыОтчетовДляВывода(); + Результат.ТолькоТекущийРаздел = ТолькоТекущийРаздел; + Результат.ТаблицаПодсистем = ТаблицаПодсистем; + Результат.ДругиеРазделы = ДругиеРазделы; + Результат.Варианты = ТаблицаРезультат; + Результат.ИспользоватьПодсветку = ПоискПоСтроке; + Результат.РезультатПоиска = РезультатПоиска; + Результат.МассивСлов = МассивСлов; ПоместитьВоВременноеХранилище(Результат, АдресРезультата); КонецПроцедуры @@ -7028,9 +7148,9 @@ // ТаблицаРезультат - ТаблицаЗначений - коллекция найденных вариантов отчетов, где: // * ИмяОтчета - Строка - имя отчета, как оно указано в метаданных. // * Наименование - Строка - наименование варианта отчета. -// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// - СправочникСсылка.ДополнительныеОтчетыИОбработки - -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных // - Строка - ссылка на идентификатор метаданных отчета. // * ТипОтчета - ПеречислениеСсылка.ТипыОтчетов - категория отчета. // @@ -7177,7 +7297,7 @@ СтрокаТаблицы.Представление = НСтр("ru = '<Недостаточно прав для работы с вариантом отчета>'"); ИначеЕсли Не НайденВПрограмме Тогда СтрокаТаблицы.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '<Отчет ""%1"" не найден в программе>'"), + НСтр("ru = '<Отчет ""%1"" не существует в программе>'"), ИмяОтчета); ИначеЕсли Не ДоступенПоПравам Тогда СтрокаТаблицы.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -7216,10 +7336,13 @@ // Возвращает признак предопределенности варианта отчета. // // Параметры: -// ВариантОтчета - СправочникОбъект.ВариантыОтчетов - -// - СправочникОбъект.ПредопределенныеВариантыОтчетов - -// - СправочникОбъект.ПредопределенныеВариантыОтчетовРасширений - -// - Структура - +// ВариантОтчета - СправочникОбъект.ВариантыОтчетов +// - СправочникОбъект.ПредопределенныеВариантыОтчетов +// - СправочникОбъект.ПредопределенныеВариантыОтчетовРасширений +// - СправочникСсылка.ВариантыОтчетов +// - СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений +// - СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений +// - Структура // // Возвращаемое значение: // Булево - если Истина, то вариант отчета является предопределенным. @@ -7229,7 +7352,9 @@ ТипВариантаОтчета = ТипЗнч(ВариантОтчета); Если ТипВариантаОтчета = Тип("СправочникОбъект.ПредопределенныеВариантыОтчетов") - Или ТипВариантаОтчета = Тип("СправочникОбъект.ПредопределенныеВариантыОтчетовРасширений") Тогда + Или ТипВариантаОтчета = Тип("СправочникОбъект.ПредопределенныеВариантыОтчетовРасширений") + Или ТипВариантаОтчета = Тип("СправочникСсылка.ПредопределенныеВариантыОтчетов") + Или ТипВариантаОтчета = Тип("СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений") Тогда Возврат Истина; КонецЕсли; @@ -7481,7 +7606,9 @@ // Возвращаемое значение: // Структура - описание настроек отчета, где: // * ИмяОтчета - Строка - полное имя объекта метаданных отчета. -// * Настройки - НастройкиКомпоновкиДанных, ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - переданные настройки. +// * Настройки - НастройкиКомпоновкиДанных +// - ПользовательскиеНастройкиКомпоновкиДанных +// - Неопределено - переданные настройки. // * КлючВарианта - Строка - идентификатор варианта отчета. // * ПредставлениеВарианта - Строка - представление варианта отчета. // * КлючТекущихПользовательскихНастроек - Строка - идентификатор текущих пользовательских настроек. @@ -8005,7 +8132,7 @@ Если ПользовательскиеНастройки <> Неопределено И ПользовательскиеНастройки.Количество() > 0 Тогда - ОписаниеНастройки = ПользовательскиеНастройки.Получить(0); // см. ПользовательскиеНастройкиВариантаОтчета + ОписаниеНастройки = ПользовательскиеНастройки[0]; // см. ПользовательскиеНастройкиВариантаОтчета ШаблонОписанияНастроек.Представление = ОписаниеНастройки.Наименование; Возврат; @@ -8045,7 +8172,7 @@ КонецЕсли; - Элемент = Элементы.Получить(0); + Элемент = Элементы[0]; Если Не Элемент.ПометкаУдаления И Элемент.Наименование = ОписаниеНастроек.Представление Тогда @@ -8168,9 +8295,9 @@ // // Возвращаемое значение: // ТаблицаЗначений - коллекция предопределенных вариантов отчетов, где: -// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// - СправочникСсылка.ДополнительныеОтчетыИОбработки - -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных // - Строка - полное имя или ссылка на идентификатор отчета. // * Метаданные - ОбъектМетаданныхОтчет - метаданные отчета. // * ИспользуетСКД - Булево - признак использования в отчете основной СКД. @@ -8206,7 +8333,7 @@ // // Параметры: // // Форма - ФормаКлиентскогоПриложения, Неопределено - // // КлючВарианта - Строка, Неопределено - -// // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию +// // Настройки - см. значение ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию // // // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт // // Код процедуры. @@ -8269,10 +8396,11 @@ // // Параметры: // ОписанияОтчетов - см. КоллекцияПредопределенныхВариантовОтчетов -// МетаданныеОтчета - ОбъектМетаданныхОтчет - -// СсылкаОтчета - СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений - -// ТипОтчета - Строка - см. ТипОтчетаСтрокой -// ГруппироватьПоОтчетам - Строка - см. ГлобальныеНастройки +// МетаданныеОтчета - ОбъектМетаданныхОтчет +// СсылкаОтчета - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ТипОтчета - см. ТипОтчетаСтрокой +// ГруппироватьПоОтчетам - см. ГлобальныеНастройки // // Возвращаемое значение: // СтрокаТаблицыЗначений - см. КоллекцияПредопределенныхВариантовОтчетов @@ -8313,10 +8441,11 @@ // Возвращает массив с одним элементом - описание по умолчанию указанного отчета. // // Параметры: -// Отчет - ОбъектМетаданныхОтчет, СправочникСсылка.ИдентификаторыОбъектовМетаданных - метаданные или ссылка отчета. +// Отчет - ОбъектМетаданныхОтчет +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - метаданные или ссылка отчета. // // Возвращаемое значение: -// Массив из СтрокаТаблицыЗначений - см. КоллекцияПредопределенныхВариантовОтчетов +// Массив из см. КоллекцияПредопределенныхВариантовОтчетов // Функция НайденныеОписанияОтчета(Отчет) @@ -8372,10 +8501,10 @@ // // Возвращаемое значение: // ТаблицаЗначений - коллекция основных вариантов отчетов, где: -// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений, -// СправочникСсылка.ДополнительныеОтчетыИОбработки, -// СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// Строка - ссылка на идентификатор метаданных отчета. +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - Строка - ссылка на идентификатор метаданных отчета. // * Вариант - СправочникСсылка.ВариантыОтчетов - ссылка на вариант отчета. // Функция КоллекцияОсновныхВариантовОтчетов() @@ -8393,16 +8522,16 @@ // // Параметры: // Режим - Строка - вид обновления данных. -// РазделенныеОбработчики - Структура - +// РазделенныеОбработчики - Структура // // Возвращаемое значение: // Структура - свойства результата обновления общих данных, где: // * ОбновлятьКонфигурацию - Булево - признак необходимости обновления данных конфигурации. // * ОбновлятьРасширения - Булево - признак необходимости обновления данных расширений. -// * РазделенныеОбработчики - Структура - +// * РазделенныеОбработчики - Структура // * ЕстьИзменения - Булево - признак наличия изменений в вариантах отчетов. // * ЕстьВажныеИзменения - Булево - признак наличия важных изменений в вариантах отчетов. -// * ВариантыОтчетов - ТаблицаЗначений - +// * ВариантыОтчетов - ТаблицаЗначений // * ОбновлятьЗамеры - Булево - признак наличия подсистемы ОценкаПроизводительности. // * ТаблицаЗамеров - см. ТаблицаЗамеров // * МодельСервиса - Булево - признак работы в модели сервиса. @@ -8428,7 +8557,7 @@ // Конструктор таблицы замеров. // // Возвращаемое значение: -// ТаблицаЗначений - коллекция замеров, где: +// ТаблицаЗначений: // * СтароеИмя - Строка - не актуальный ключ замеров. // * АктуальноеИмя - Строка - текущий ключ замеров. // * АктуальноеНаименование - Строка - текущее наименование отчета. @@ -8445,6 +8574,164 @@ КонецФункции +// Конструктор структуры, содержащей результат поиск доступных вариантов отчетов. +// +// Возвращаемое значение: +// Структура: +// * ТолькоТекущийРаздел - Булево +// * ТаблицаПодсистем - ТаблицаЗначений: +// ** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** Представление - Строка +// ** Имя - Строка +// ** ПолноеИмя - Строка +// ** Приоритет - Строка +// ** НомерЭлемента - Число +// ** ИмяЭлемента - Строка +// ** РодительСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** ВидимыхВариантов - Число +// * ДругиеРазделы - Массив +// * Варианты - ТаблицаЗначений: +// ** Ссылка - СправочникСсылка.ВариантыОтчетов +// ** Подсистема - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** ПодсистемаПредставление - Строка +// ** ПодсистемаПриоритет - Строка +// ** РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** БезГруппы - Булево +// ** Важный - Булево +// ** СмТакже - Булево +// ** Дополнительный - Булево +// ** Видимость - Булево +// ** БыстрыйДоступ - Булево +// ** ИмяОтчета - Строка +// ** Наименование - Строка +// ** Описание - Строка +// ** Автор - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// ** Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - Строка +// ** ТипОтчета - ПеречислениеСсылка.ТипыОтчетов +// ** КлючВарианта - Строка +// ** Родитель - СправочникСсылка.ВариантыОтчетов +// ** ВерхнийУровень - Булево +// ** КлючЗамеров - Строка +// * ВариантыРаздела - см. ВариантыОтчетовДляВывода.Варианты +// * ИспользоватьПодсветку - Булево +// * РезультатПоиска - см. НайтиВариантыОтчетов +// * МассивСлов - Массив +// * ИмяГруппы - Строка +// * ДобавляемыеРеквизиты - Массив из РеквизитФормы +// * ДобавленоПустыхДекораций - Число +// * ПределВывода - Число +// * ОсталосьВывести - Число +// * НеВыведено - Число +// * ВыведеноЭлементовВариантов - Число +// * ПоискВариантов - Соответствие +// * Шаблоны - Структура: +// ** ГруппаВарианта - Структура: +// *** Вид - ВидГруппыФормы +// *** РастягиватьПоГоризонтали - Булево +// *** Отображение - ОтображениеОбычнойГруппы +// *** Группировка - ГруппировкаПодчиненныхЭлементовФормы +// *** ОтображатьЗаголовок - Булево +// ** КартинкаБыстрогоДоступа - Структура: +// *** Вид - ВидДекорацииФормы +// *** Ширина - Число +// *** Высота - Число +// *** Картинка - Картинка +// *** РастягиватьПоГоризонтали - Булево +// *** РастягиватьПоВертикали - Булево +// ** КартинкаОтступа - Структура: +// *** Вид - ВидДекорацииФормы +// *** Ширина - Число +// *** Высота - Число +// *** РастягиватьПоГоризонтали - Булево +// *** РастягиватьПоВертикали - Булево +// ** НадписьВарианта - Структура: +// *** Вид - ВидДекорацииФормы +// *** Гиперссылка - Булево +// *** ЦветТекста - Цвет +// *** РастягиватьПоВертикали - Булево +// *** Высота - Число +// *** РастягиватьПоГоризонтали - Булево +// *** АвтоМаксимальнаяШирина - Булево +// *** МаксимальнаяШирина - Число +// * КонтекстноеМеню - Структура: +// ** УбратьИзБыстрогоДоступа - Структура: +// *** Видимость - Булево +// ** ПереместитьВБыстрыйДоступ - Структура: +// *** Видимость - Булево +// ** Изменить - Структура: +// *** Видимость - Булево +// * ГруппыВажности - Массив из Строка +// * БыстрыйДоступ - Структура: +// ** Отбор - Структура: +// *** БыстрыйДоступ - Булево +// ** Варианты - см. ВариантыОтчетовДляВывода.Варианты +// - Массив из СтрокаТаблицыЗначений +// ** Количество - Число +// * БезГруппы - Структура: +// ** Отбор - Структура: +// *** БыстрыйДоступ - Булево +// *** БезГруппы - Булево +// ** Варианты - см. ВариантыОтчетовДляВывода.Варианты +// - Массив из СтрокаТаблицыЗначений +// ** Количество - Число +// * СГруппой - Структура: +// ** Отбор - Структура: +// *** БыстрыйДоступ - Булево +// *** БезГруппы - Булево +// *** СмТакже - Булево +// ** Варианты - см. ВариантыОтчетовДляВывода.Варианты +// - Массив из СтрокаТаблицыЗначений +// ** Количество - Число +// * СмТакже - Структура: +// ** Отбор - Структура: +// *** БыстрыйДоступ - Булево +// *** БезГруппы - Булево +// *** СмТакже - Булево +// ** Варианты - см. ВариантыОтчетовДляВывода.Варианты +// - Массив из СтрокаТаблицыЗначений +// ** Количество - Число +// * ВыводятсяВариантыТекущегоРаздела - Булево +// * ВариантыКоличество - Число +// * ПодсистемыРаздела - ТаблицаЗначений: +// ** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** Представление - Строка +// ** Имя - Строка +// ** ПолноеИмя - Строка +// ** Приоритет - Строка +// ** НомерЭлемента - Число +// ** ИмяЭлемента - Строка +// ** РодительСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** ВидимыхВариантов - Число +// +Функция ВариантыОтчетовДляВывода() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ТолькоТекущийРаздел", Ложь); + Результат.Вставить("ТаблицаПодсистем", Неопределено); + Результат.Вставить("ДругиеРазделы", Новый Массив); + Результат.Вставить("Варианты", Неопределено); + Результат.Вставить("ИспользоватьПодсветку", Ложь); + Результат.Вставить("РезультатПоиска", Новый Структура); + Результат.Вставить("МассивСлов", Новый Массив); + + Возврат Результат; + +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl index 13e446533..2b6c8ac7a 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl @@ -11,8 +11,8 @@ // Открывает форму дополнительного отчета с заданным вариантом. // // Параметры: -// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка дополнительного отчета. -// КлючВарианта - Строка - Имя варианта дополнительного отчета. +// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка дополнительного отчета. +// КлючВарианта - Строка - имя варианта дополнительного отчета. // Процедура ПриПодключенииОтчета(ПараметрыОткрытия) Экспорт @@ -23,12 +23,12 @@ // Получает тип субконто счета по его номеру. // // Параметры: -// Счет - ПланСчетовСсылка - Ссылка счета. -// НомерСубконто - Число - Номер субконто. +// Счет - ПланСчетовСсылка - ссылка счета. +// НомерСубконто - Число - номер субконто. // // Возвращаемое значение: -// ОписаниеТипов - Тип субконто. -// Неопределено - Если не удалось получить тип субконто (нет такого субконто или нет прав). +// ОписаниеТипов - тип субконто. +// Неопределено - если не удалось получить тип субконто (нет такого субконто или нет прав). // Функция ТипСубконто(Счет, НомерСубконто) Экспорт diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index f96de88c8..4b8ae55b3 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -11,8 +11,10 @@ // Открывает форму указанного отчета. // // Параметры: -// ФормаВладелец - ФормаКлиентскогоПриложения, Неопределено - форма, из которой открывается отчет. -// Вариант - СправочникСсылка.ВариантыОтчетов, СправочникСсылка.ДополнительныеОтчетыИОбработки - вариант +// ФормаВладелец - ФормаКлиентскогоПриложения +// - Неопределено - форма, из которой открывается отчет. +// Вариант - СправочникСсылка.ВариантыОтчетов +// - СправочникСсылка.ДополнительныеОтчетыИОбработки - вариант // отчета, форму которого требуется открыть. Если передан тип СправочникСсылка.ДополнительныеОтчетыИОбработки, // то открывается дополнительный отчет, подключенный к программе. // ДополнительныеПараметры - Структура - служебный параметр, не предназначен для использования. @@ -163,7 +165,7 @@ // Открывает карточку варианта отчета с настройками размещения в программе. // // Параметры: -// Вариант - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// Вариант - СправочникСсылка.ВариантыОтчетов - ссылка варианта отчета. // Процедура ПоказатьНастройкиОтчета(Вариант) Экспорт ПараметрыФормы = Новый Структура; @@ -232,12 +234,12 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма, в которой редактируется дерево подсистем, где: -// * Элементы - ВсеЭлементыФормы - коллекция элементов формы, где: -// ** ДеревоПодсистем - ТаблицаФормы - иерархическая коллекция подсистем, в которых отображается отчет, где: -// *** СтрокаДерева - ДанныеФормыЭлементДерева - данные текущей строки дерева подсистем, где: -// **** Важность - Строка - степени важности, принимающее значение - "", "Важный", "См. также". -// **** Приоритет - Строка - код-счетчик. -// **** Использование - Число - признак размещения отчета в данной подсистеме. +// * Элементы - ВсеЭлементыФормы - коллекция элементов формы, где: +// ** ДеревоПодсистем - ТаблицаФормы - иерархическая коллекция подсистем, в которых отображается отчет, где: +// *** ТекущиеДанные - ДанныеФормыЭлементДерева - данные текущей строки дерева подсистем, где: +// **** Важность - Строка - степени важности, принимающее значение - "", "Важный", "См. также". +// **** Приоритет - Строка - код-счетчик. +// **** Использование - Число - признак размещения отчета в данной подсистеме. // Элемент - ПолеФормы - поле для редактирования признака важности. // Процедура ДеревоПодсистемВажностьПриИзменении(Форма, Элемент) Экспорт @@ -300,9 +302,10 @@ // * Элементы - ВсеЭлементыФормы - коллекция элементов формы. // ПодборГруппВнешнихПользователей - Булево - признак подбора групп внешних пользователей. // -Процедура ПодобратьПользователейВариантаОтчета(Форма, ПодборГруппВнешнихПользователей = Ложь) Экспорт +Процедура ПодобратьПользователейВариантаОтчета(Форма, ПодборГруппПользователей = Ложь, ПодборГруппВнешнихПользователей = Ложь) Экспорт - ПараметрыПодбора = ПараметрыПодбораПользователейВариантаОтчета(Форма, ПодборГруппВнешнихПользователей); + ПараметрыПодбора = ПараметрыПодбораПользователейВариантаОтчета( + Форма, ПодборГруппПользователей, ПодборГруппВнешнихПользователей); Если ПодборГруппВнешнихПользователей Тогда @@ -328,17 +331,17 @@ // Возвращаемое значение: // Структура - параметры открытия формы подбора, где: // * РежимВыбора - Булево - признак режима выбора (см. Синтакс-помощник - Расширение справочника). -// * ТекущаяСтрока - СправочникСсылка.Пользователи, -// СправочникСсылка.ГруппыПользователей, -// СправочникСсылка.ГруппыВнешнихПользователей, -// Неопределено - текущий пользователь или группа (внешних) пользователей. +// * ТекущаяСтрока - СправочникСсылка.Пользователи +// - СправочникСсылка.ГруппыПользователей +// - СправочникСсылка.ГруппыВнешнихПользователей +// - Неопределено - текущий пользователь или группа (внешних) пользователей. // * ЗакрыватьПриВыборе - Булево - признак необходимости закрытия формы выбора (см. Синтакс-помощник - Расширение справочника). // * МножественныйВыбор - Булево - признак выбора двух строк и более. // * РасширенныйПодбор - Булево - признак использования расширенных параметров подбора. // * ЗаголовокФормыПодбора - Строка - заголовок формы подбора, соответствующий контексту. // * ВыбранныеПользователи - СписокЗначений - коллекция выбранных пользователей или групп (внешних) пользователей. // -Функция ПараметрыПодбораПользователейВариантаОтчета(Форма, ПодборГруппВнешнихПользователей = Ложь) +Функция ПараметрыПодбораПользователейВариантаОтчета(Форма, ПодборГруппПользователей, ПодборГруппВнешнихПользователей = Ложь) ТекущиеДанные = Форма.Элементы.ПользователиВарианта.ТекущиеДанные; ВыбранныеПользователи = ВыбранныеПользователиВарианта(Форма.ПользователиВарианта, ПодборГруппВнешнихПользователей); @@ -350,6 +353,7 @@ ПараметрыПодбора.Вставить("МножественныйВыбор", Истина); ПараметрыПодбора.Вставить("РасширенныйПодбор", Истина); ПараметрыПодбора.Вставить("ЗаголовокФормыПодбора", НСтр("ru = 'Подбор пользователей варианта отчета'")); + ПараметрыПодбора.Вставить("ВыборГруппПользователей", ПодборГруппПользователей); ПараметрыПодбора.Вставить("ВыбранныеПользователи", ВыбранныеПользователи); Возврат ПараметрыПодбора; @@ -625,10 +629,10 @@ // Конструктор описания свойств варианта отчета. // // Возвращаемое значение: -// Структура - где: -// * Ссылка - СправочникСсылка.ВариантыОтчетов - -// * ИмяОтчета - Строка - -// * ПредставлениеВарианта - Строка - +// Структура: +// * Ссылка - СправочникСсылка.ВариантыОтчетов +// * ИмяОтчета - Строка +// * ПредставлениеВарианта - Строка // Функция СвойстваВариантаОтчетаОснования() Экспорт @@ -639,8 +643,8 @@ // Обработчик оповещения. // // Параметры: -// Ответ - КодВозвратаДиалога - -// ВариантОтчета - СправочникСсылка.ВариантыОтчетов - +// Ответ - КодВозвратаДиалога +// ВариантОтчета - СправочникСсылка.ВариантыОтчетов // Процедура ОткрытьФормуВыбранногоВариантаОтчета(Ответ, ВариантОтчета) Экспорт diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl index 52c486b0d..4d5cd3cbc 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl @@ -11,7 +11,7 @@ // Идентификатор, который используется для начальной страницы в модуле ВариантыОтчетовПереопределяемый. // // Возвращаемое значение: -// Строка - Идентификатор, который используется для начальной страницы в модуле ВариантыОтчетовПереопределяемый. +// Строка - идентификатор, который используется для начальной страницы в модуле ВариантыОтчетовПереопределяемый. // Функция ИдентификаторНачальнойСтраницы() Экспорт @@ -26,9 +26,9 @@ // Добавляет Ключ в Структуру если его нет. // // Параметры: -// Структура - Структура - Дополняемая структура. -// Ключ - Строка - Имя свойства. -// Значение - Произвольный - Необязательный. Значение свойства если оно отсутствует в структуре. +// Структура - Структура - дополняемая структура. +// Ключ - Строка - имя свойства. +// Значение - Произвольный - необязательный. Значение свойства если оно отсутствует в структуре. // Процедура ДополнитьСтруктуруКлючом(Структура, Ключ, Значение = Неопределено) Экспорт Если Не Структура.Свойство(Ключ) Тогда diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl index 3b5537367..bde2f49f5 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl @@ -20,7 +20,7 @@ // Истина - значение по умолчанию. Выводить описания в виде подписей под гиперссылками вариантов // Ложь - выводить описания в виде всплывающих подсказок // Значение по умолчанию: Истина. -// * Поиск - Структура - настройки поиска вариантов отчетов. +// * Поиск - Структура - настройки поиска вариантов отчетов: // ** ПодсказкаВвода - Строка - текст подсказки выводится в поле поиска когда поиск не задан. // В качестве примера рекомендуется указывать часто используемые термины прикладной конфигурации. // * ДругиеОтчеты - Структура - настройки формы "Другие отчеты": @@ -55,8 +55,9 @@ // в которых размещены команды вызова панелей отчетов. // // Параметры: -// Разделы - СписокЗначений - разделы, в которые выведены команды открытия панели отчетов. -// * Значение - ОбъектМетаданных: Подсистема, Строка - подсистема раздела глобального командного интерфейса, +// Разделы - СписокЗначений - разделы, в которые выведены команды открытия панели отчетов: +// * Значение - ОбъектМетаданных: Подсистема +// - Строка - подсистема раздела глобального командного интерфейса, // либо ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы для начальной страницы. // * Представление - Строка - заголовок панели отчетов в этом разделе. // @@ -210,9 +211,10 @@ // когда у пользователя нет прав на изменение объекта. // Если Истина, то в описанной выше ситуации кнопка будет недоступна. // Необязательный. Значение по умолчанию: Ложь. -// * МножественныйВыбор - Булево, Неопределено - если Истина, то команда поддерживает множественный выбор. -// В этом случае в параметре выполнения будет передан список ссылок. -// Необязательный. Значение по умолчанию: Истина. +// * МножественныйВыбор - Булево +// - Неопределено - если Истина, то команда поддерживает множественный выбор. +// В этом случае в параметре выполнения будет передан список ссылок. +// Необязательный. Значение по умолчанию: Истина. // * РежимЗаписи - Строка - действия, связанные с записью объекта, которые выполняются перед обработчиком команды, где: // "НеЗаписывать" - объект не записывается, а в параметрах обработчика вместо ссылок передается // вся форма. В этом режиме рекомендуется работать напрямую с формой, @@ -231,7 +233,8 @@ // Если Обработчик не указан, то у формы вызывается метод "Открыть". // * КлючВарианта - Строка - имя варианта отчета, открываемого при выполнении команды. // * ИмяПараметраФормы - Строка - имя параметра формы, в который следует передать ссылку или массив ссылок. -// * ПараметрыФормы - Неопределено, Структура - параметры формы, указанной в ИмяФормы. +// * ПараметрыФормы - Неопределено +// - Структура - параметры формы, указанной в ИмяФормы. // * Обработчик - Строка - описание процедуры, обрабатывающей основное действие команды. // Формат "<ИмяОбщегоМодуля>.<ИмяПроцедуры>" используется когда процедура размещена в общем модуле. // Формат "<ИмяПроцедуры>" используется в следующих случаях: diff --git a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl index d028501d1..dfa0644c0 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl @@ -65,13 +65,13 @@ // Формирует дерево подсистем, доступных текущему пользователю. // // Возвращаемое значение: -// ДеревоЗначений - ДеревоЗначений - где: -// * РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка раздела. -// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка подсистемы. -// * Имя - Строка - Имя подсистемы. -// * ПолноеИмя - Строка - Полное имя подсистемы. -// * Представление - Строка - Представление подсистемы. -// * Приоритет - Строка - Приоритет подсистемы. +// ДеревоЗначений: +// * РазделСсылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - ссылка раздела. +// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - ссылка подсистемы. +// * Имя - Строка - имя подсистемы. +// * ПолноеИмя - Строка - полное имя подсистемы. +// * Представление - Строка - представление подсистемы. +// * Приоритет - Строка - приоритет подсистемы. // Функция ПодсистемыТекущегоПользователя() Экспорт @@ -310,7 +310,7 @@ // Параметры подсистемы, закэшированные при обновлении (см. ВариантыОтчетов.ЗаписатьПараметрыВариантовОтчетов). // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ТаблицаФункциональныхОпций - ТаблицаЗначений - связь функциональных опций и предопределенных вариантов отчетов: // ** Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных // ** ПредопределенныйВариант - СправочникСсылка.ПредопределенныеВариантыОтчетов diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index 9adef2321..cb4c14caf 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -11,7 +11,10 @@ // Записывает настройку версионирования объекта. // // Параметры: -// ТипОбъекта - Строка, Тип, ОбъектМетаданных, СправочникСсылка.ИдентификаторыОбъектовМетаданных - объект метаданных; +// ТипОбъекта - Строка +// - Тип +// - ОбъектМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - объект метаданных; // ВариантВерсионирования - ПеречислениеСсылка.ВариантыВерсионированияОбъектов - условие записи версий; // СрокХраненияВерсий - ПеречислениеСсылка.СрокиХраненияВерсий - срок, после которого версии подлежат очистке. // @@ -81,7 +84,7 @@ // СписокОбъектов - Массив - список имен объектов метаданных. // // Возвращаемое значение: -// Соответствие - результат проверки: +// Соответствие: // * Ключ - Строка - имя объекта метаданных. // * Значение - Булево - включено или выключено версионирование. // @@ -241,6 +244,7 @@ // Объект - Объект - записываемый объект. // СведенияОВерсииОбъекта - Структура - содержит информацию о версии объекта. // СсылкаСуществует - Булево - признак наличия объекта по ссылке в информационной базе. +// Процедура СоздатьВерсиюОбъектаПоОбменуДанными(Объект, СведенияОВерсииОбъекта, СсылкаСуществует, Отправитель) Экспорт Ссылка = Объект.Ссылка; @@ -275,9 +279,9 @@ // Устанавливает признак игнорирования версии объекта. // // Параметры: -// Ссылка - Ссылка на игнорируемый объект. -// НомерВерсии - Число - Номер версии игнорируемого объекта. -// Игнорировать - Булево Признак игнорирования версии. +// Ссылка - ссылка на игнорируемый объект. +// НомерВерсии - Число - номер версии игнорируемого объекта. +// Игнорировать - Булево - признак игнорирования версии. // Процедура ИгнорироватьВерсиюОбъекта(Ссылка, НомерВерсии, Игнорировать) Экспорт @@ -313,7 +317,10 @@ // Возвращает количество коллизий или непринятых объектов. // // Параметры: -// УзлыОбмена - ПланОбменаСсылка, Массив, СписокЗначений, Неопределено - отбор для получения количества коллизий. +// УзлыОбмена - ПланОбменаСсылка +// - Массив +// - СписокЗначений +// - Неопределено - отбор для получения количества коллизий. // ЭтоКоличествоКоллизий - Булево - если Истина, то возвращает количество коллизий, иначе количество непринятых. // ПоказыватьПроигнорированные - Булево - признак необходимости учета проигнорированных. // УзелИнформационнойБазы - ПланОбменаСсылка - отбор по конкретному узлу. @@ -329,16 +336,17 @@ Возврат Количество; КонецЕсли; - ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КОЛИЧЕСТВО(ВерсииОбъектов.Объект) КАК Количество - |ИЗ - | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов - |ГДЕ - | ВерсииОбъектов.ВерсияПроигнорирована <> &ОтборПоПропущенным - | И (ВерсииОбъектов.ТипВерсииОбъекта В (&ТипыВерсий)) - | [ОтборПоУзлу] - | [ОтборПоПериоду] - | [ОтборПоПричине]"; + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(ВерсииОбъектов.Объект) КАК Количество + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов + |ГДЕ + | ВерсииОбъектов.ВерсияПроигнорирована <> &ОтборПоПропущенным + | И ВерсииОбъектов.ТипВерсииОбъекта В(&ТипыВерсий) + | И &ОтборПоУзлу + | И &ОтборПоПериоду + | И &ОтборПоПричине"; Запрос = Новый Запрос; @@ -346,29 +354,25 @@ Запрос.УстановитьПараметр("ОтборПоПропущенным", ОтборПоПропущенным); Если УзлыОбмена = Неопределено Тогда - СтрокаОтбора = ""; + СтрокаОтбора = "ИСТИНА"; ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(УзлыОбмена)) Тогда - СтрокаОтбора = "И ВерсииОбъектов.АвторВерсии = &УзлыОбмена"; + СтрокаОтбора = "ВерсииОбъектов.АвторВерсии = &УзлыОбмена"; Запрос.УстановитьПараметр("УзлыОбмена", УзлыОбмена); Иначе - СтрокаОтбора = "И ВерсииОбъектов.АвторВерсии В (&УзлыОбмена)"; + СтрокаОтбора = "ВерсииОбъектов.АвторВерсии В (&УзлыОбмена)"; Запрос.УстановитьПараметр("УзлыОбмена", УзлыОбмена); КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОтборПоУзлу]", СтрокаОтбора); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоУзлу", СтрокаОтбора); Если ЗначениеЗаполнено(Период) Тогда - - СтрокаОтбора = "И (ВерсииОбъектов.ДатаВерсии >= &ДатаНачала + СтрокаОтбора = "(ВерсииОбъектов.ДатаВерсии >= &ДатаНачала | И ВерсииОбъектов.ДатаВерсии <= &ДатаОкончания)"; Запрос.УстановитьПараметр("ДатаНачала", Период.ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", Период.ДатаОкончания); - Иначе - - СтрокаОтбора = ""; - + СтрокаОтбора = "ИСТИНА"; КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОтборПоПериоду]", СтрокаОтбора); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоПериоду", СтрокаОтбора); ТипыВерсий = Новый СписокЗначений; Если ЗначениеЗаполнено(ЭтоКоличествоКоллизий) Тогда @@ -378,7 +382,7 @@ ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии); ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии); - СтрокаОтбора = ""; + СтрокаОтбора = "ИСТИНА"; Иначе @@ -386,14 +390,10 @@ ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе); Если ЗначениеЗаполнено(СтрокаПоиска) Тогда - - СтрокаОтбора = "И ВерсииОбъектов.Комментарий ПОДОБНО &Комментарий"; + СтрокаОтбора = "ВерсииОбъектов.Комментарий ПОДОБНО &Комментарий"; Запрос.УстановитьПараметр("Комментарий", "%" + СтрокаПоиска + "%"); - Иначе - - СтрокаОтбора = ""; - + СтрокаОтбора = "ИСТИНА"; КонецЕсли; КонецЕсли; @@ -406,7 +406,7 @@ ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе); КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОтборПоПричине]", СтрокаОтбора); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоПричине", СтрокаОтбора); Запрос.УстановитьПараметр("ТипыВерсий", ТипыВерсий); Запрос.Текст = ТекстЗапроса; @@ -437,7 +437,7 @@ // // Параметры: // Список - ДинамическийСписок - инициализируемый динамический список. -// ВидПроблемы - Строка - Коллизии - происходит инициализация списка коллизий, +// ВидПроблемы - Строка - коллизии - происходит инициализация списка коллизий, // НепринятыеПоДате - непринятых по дате. // Процедура ИнициализацияДинамическогоСпискаПроблемныхВерсий(Список, ВидПроблемы = "Коллизии") Экспорт @@ -502,7 +502,7 @@ // Возвращает описание команды для добавления в отчете "Результаты проверки учета". // // Параметры: -// Форма - ФормаКлиентскогоПриложения - +// Форма - ФормаКлиентскогоПриложения // Функция КомандаИсторияИзменений(Форма) Экспорт @@ -910,10 +910,10 @@ // Обработчик перехода на версию объекта. // // Параметры: -// ОбъектСсылка - Ссылка - Ссылка на объект, для которого имеется версия. -// НомерВерсииДляПерехода - Число - Номер версии, на которую необходимо выполнить переход. -// НомерИгнорируемойВерсии - Число - Номер версии, на которую необходимо проигнорировать. -// ПропуститьПроверкуЗапретаИзменения - Булево - Признак пропуска проверки даты запрета загрузки. +// ОбъектСсылка - Ссылка - ссылка на объект, для которого имеется версия. +// НомерВерсииДляПерехода - Число - номер версии, на которую необходимо выполнить переход. +// НомерИгнорируемойВерсии - Число - номер версии, на которую необходимо проигнорировать. +// ПропуститьПроверкуЗапретаИзменения - Булево - признак пропуска проверки даты запрета загрузки. // Процедура ПриПереходеНаВерсиюОбъекта(СсылкаНаОбъект, Знач НомерВерсии) Экспорт @@ -973,7 +973,8 @@ Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); - Если Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.НастройкиВерсионированияОбъектов) + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов") + Или Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.НастройкиВерсионированияОбъектов) Или МодульТекущиеДелаСервер.ДелоОтключено("УстаревшиеВерсииОбъектов") Тогда Возврат; КонецЕсли; @@ -1072,6 +1073,11 @@ #Область СлужебныеПроцедурыИФункции // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. +// +// Параметры: +// ИмяПараметра - Строка - имя параметра сеанса, который требуется установить. +// УстановленныеПараметры - Массив из Строка - имена параметров, которые уже установлены +// Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт Если ИмяПараметра = "ВыполняетсяЗаписьОбъекта" Тогда @@ -1426,7 +1432,7 @@ // АдресВоВременномХранилище - Строка - адрес двоичных данных во временном хранилище. // ТекстСообщенияОбОшибке - Строка - текст ошибки (возвращаемый параметр), если восстановить объект не удалось. // -// Возвращаемое значение - Объект или Неопределено. +// Возвращаемое значение - объект или Неопределено. // Функция ВосстановитьОбъектПоXML(ДанныеОбъекта, ТекстСообщенияОбОшибке = "") @@ -1464,7 +1470,8 @@ // // Возвращаемое значение - Структура: // ВерсияОбъекта - ДвоичныеДанные - сохраненная версия объекта информационной базы; -// АвторВерсии - Справочник.Пользователи, Справочник.ВнешниеПользователи - +// АвторВерсии - Справочник.Пользователи +// - Справочник.ВнешниеПользователи - // пользователь, записавший версию объекта. // ДатаВерсии - Дата - дата записи версии объекта. // @@ -1725,6 +1732,11 @@ КонецЕсли; КонецФункции +// Параметры: +// ЭлементДанных +// ОтправкаЭлемента - ОтправкаЭлементаДанных +// Получатель - ПланОбменаОбъект +// Процедура ПриОтправкеДанныхПолучателю(ЭлементДанных, ОтправкаЭлемента, Получатель) Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ВерсииОбъектов") И ЭлементДанных.Количество() > 0 Тогда @@ -1781,6 +1793,7 @@ // Только для служебного использования. // Комментарий записывается, если пользователь является либо автором версии, либо администратором. +// Процедура ДобавитьКомментарийКВерсии(СсылкаНаОбъект, НомерВерсии, Комментарий) Экспорт Если Не ЕстьПравоЧтенияДанныхВерсийОбъектов() Тогда @@ -1922,6 +1935,7 @@ // // Возвращаемое значение: // ДвоичныеДанные - сериализованный объект. +// Функция СериализоватьОбъект(Объект) Экспорт ЗаписьXML = Новый ЗаписьFastInfoset; @@ -1937,22 +1951,23 @@ // Процедура считывает данные XML из файла и заполняет структуры данных. // // Параметры: -// ДанныеВерсии - ДвоичныеДанные, Структура - -// Ссылка - ЛюбаяСсылка - +// ДанныеВерсии - ДвоичныеДанные +// - Структура +// Ссылка - ЛюбаяСсылка // // Возвращаемое значение: -// Структура - описание объекта: -// * Реквизиты - ТаблицаЗначений - : -// ** НаименованиеРеквизита - Строка - -// ** ЗначениеРеквизита - Произвольный - -// ** ТипРеквизита - Строка - -// ** Тип - Тип - -// * ТабличныеЧасти - Соответствие - : -// ** Ключ - Строка - -// ** Значение - ТаблицаЗначений - +// Структура: +// * Реквизиты - ТаблицаЗначений: +// ** НаименованиеРеквизита - Строка +// ** ЗначениеРеквизита - Произвольный +// ** ТипРеквизита - Строка +// ** Тип - Тип +// * ТабличныеЧасти - Соответствие: +// ** Ключ - Строка +// ** Значение - ТаблицаЗначений // * ТабличныеДокументы - см. ВерсионированиеОбъектовПереопределяемый.ПриПолученииТабличныхДокументовОбъекта.ТабличныеДокументы // * ДополнительныеРеквизиты - см. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта.ДополнительныеРеквизиты -// * СкрываемыеРеквизиты - Массив - +// * СкрываемыеРеквизиты - Массив // Функция РазборПредставленияОбъектаXML(ДанныеВерсии, Ссылка) Экспорт @@ -2051,7 +2066,7 @@ Иначе // Указатель на поле табличной части. ТипЗначенияПоляТЧ = ""; ИмяПоляТЧ = ЧтениеXML.Имя; - Таблица = ТабличныеЧасти[ИмяТабличнойЧасти]; + Таблица = ТабличныеЧасти[ИмяТабличнойЧасти];// ТаблицаЗначений Если Таблица.Колонки.Найти(ИмяПоляТЧ)= Неопределено Тогда Таблица.Колонки.Добавить(ИмяПоляТЧ); КонецЕсли; @@ -2181,10 +2196,11 @@ КонецФункции // Параметры: -// МетаданныеОбъекта - ОбъектМетаданных - -// ИмяРеквизита - Строка - +// МетаданныеОбъекта - ОбъектМетаданных +// ИмяРеквизита - Строка // Возвращаемое значение: -// ОписаниеСтандартногоРеквизита, ОбъектМетаданныхРеквизит, Неопределено - +// ОписаниеСтандартногоРеквизита, ОбъектМетаданныхРеквизит, Неопределено +// Функция МетаданныеРеквизита(МетаданныеОбъекта, ИмяРеквизита) Результат = МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита); Если Результат = Неопределено Тогда @@ -2234,10 +2250,11 @@ КонецФункции // Параметры: -// МетаданныеТабличнойЧасти - ОписаниеСтандартнойТабличнойЧасти, ОбъектМетаданныхТабличнаяЧасть - +// МетаданныеТабличнойЧасти - ОписаниеСтандартнойТабличнойЧасти +// - ОбъектМетаданныхТабличнаяЧасть // // Возвращаемое значение: -// ОписанияСтандартныхРеквизитов, КоллекцияОбъектовМетаданных - +// ОписанияСтандартныхРеквизитов, КоллекцияОбъектовМетаданных // Функция РеквизитыТабличнойЧасти(МетаданныеТабличнойЧасти) Если ТипЗнч(МетаданныеТабличнойЧасти) = Тип("ОписаниеСтандартнойТабличнойЧасти") Тогда @@ -2334,7 +2351,7 @@ Продолжить; КонецЕсли; - ТабличнаяЧасть = ВерсияОбъекта.ТабличныеЧасти[ИмяТабличнойЧасти].Скопировать(); + ТабличнаяЧасть = ВерсияОбъекта.ТабличныеЧасти[ИмяТабличнойЧасти].Скопировать();// ТаблицаЗначений ТабличнаяЧасть.Колонки.Добавить("НомерСтроки"); ИмяОбласти = ИмяТабличнойЧасти + "Шапка"; @@ -2361,7 +2378,7 @@ КонецЦикла; Если ВерсияОбъекта.Свойство("ТабличныеДокументы") Тогда - ТабличныеДокументы = ВерсияОбъекта.ТабличныеДокументы; + ТабличныеДокументы = ВерсияОбъекта.ТабличныеДокументы;// см. ТабличныеДокументыОбъекта Если ТабличныеДокументы <> Неопределено Тогда Если Макет.Области.Найти("ШапкаТабличныхДокументов") <> Неопределено Тогда ШапкаТабличныхДокументов = Макет.ПолучитьОбласть("ШапкаТабличныхДокументов"); @@ -2471,7 +2488,7 @@ Для Каждого СтрокаТабличнаяЧасть Из ВерсияОбъекта.ТабличныеЧасти Цикл НаименованиеТабличнойЧасти = СтрокаТабличнаяЧасть.Ключ; - ТабличнаяЧасть = СтрокаТабличнаяЧасть.Значение; + ТабличнаяЧасть = СтрокаТабличнаяЧасть.Значение;// ТаблицаЗначений Если ТабличнаяЧасть.Количество() = 0 Тогда Продолжить; КонецЕсли; @@ -2482,7 +2499,7 @@ СинонимТЧ = МетаданныеТЧ.Представление(); КонецЕсли; - Секция = ТЧОтчета.ПолучитьОбласть("R" + Строка(НомерСтрокиВывода)); + Секция = ТЧОтчета.ПолучитьОбласть("R" + XMLСтрока(НомерСтрокиВывода)); ВывестиТекстВОтчет(ТЧОтчета, Секция, "R1C1:R1C100", " "); ОбластьВывода = ВывестиТекстВОтчет(ТЧОтчета, Секция, "R1C2", СинонимТЧ, 11, Истина); ТЧОтчета.Область("R" + Формат(ОбластьВывода.Верх, "ЧГ=0") + "C2").СоздатьФорматСтрок(); @@ -2628,6 +2645,7 @@ // "д" - добавление // "у" - удаление // "" - обычный вывод. +// Функция СформироватьСекторСтрокиТЧ(Знач ЗначениеЗаполнения,Знач ТипВывода = "") ОбщийШаблон = РегистрыСведений.ВерсииОбъектов.ПолучитьМакет("СтандартныйМакетПредставленияОбъекта"); @@ -2690,7 +2708,7 @@ // Выводит табличные документы по разобранному объекту, при выводе единственного объекта. Процедура ВывестиТабличныеДокументыПоРазобранномуОбъекту(ТабличныйДокумент, ОписаниеОбъекта) - ТабличныеДокументы = ОписаниеОбъекта.ТабличныеДокументы; + ТабличныеДокументы = ОписаниеОбъекта.ТабличныеДокументы;// см. ТабличныеДокументыОбъекта Если ТабличныеДокументы = Неопределено Тогда Возврат; @@ -2835,7 +2853,12 @@ Возврат Новый Массив; КонецФункции -Функция ТабличныеДокументыОбъекта(Ссылка) +// Возвращаемое значение: +// Массив из Структура: +// * Значение - Структура: +// ** Наименование - Строка +// +Функция ТабличныеДокументыОбъекта(Ссылка) Экспорт Результат = Новый Структура; ВерсионированиеОбъектовПереопределяемый.ПриПолученииТабличныхДокументовОбъекта(Ссылка, Результат); Возврат Результат; @@ -3205,6 +3228,10 @@ КонецПроцедуры // Для вызова из ПриПолученииДанныхОтГлавного и ПриПолученииДанныхОтПодчиненного. +// +// Параметры: +// Отправитель +// Процедура ЗаписатьВерсиюСИзменениемНомера(ЭлементДанных, ПолучениеЭлемента, Отправитель, НомерВерсии) Объект = ЭлементДанных.Отбор.Объект.Значение; diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl index b607b5d1d..c1bb62762 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl @@ -14,11 +14,12 @@ // // Параметры: // Ссылка - ЛюбаяСсылка - версионируемый объект конфигурации. -// ТабличныеДокументы - Структура - содержит данные: +// ТабличныеДокументы - Структура: // * Ключ - Строка - имя табличного документа; -// * Значение - Структура - содержит поля: +// * Значение - Структура: // ** Наименование - Строка - наименование табличного документа; // ** Данные - ТабличныйДокумент - версионируемый табличный документ. +// Процедура ПриПолученииТабличныхДокументовОбъекта(Ссылка, ТабличныеДокументы) Экспорт КонецПроцедуры @@ -61,13 +62,19 @@ // не предназначенной для вывода в отчетах. // // Параметры: -// Объект - Объект - версионируемый объект. +// Объект - СправочникОбъект +// - ДокументОбъект +// - ПланВидовРасчетаОбъект +// - ПланСчетовОбъект +// - ПланВидовХарактеристикОбъект - +// версионируемый объект. // ДополнительныеРеквизиты - ТаблицаЗначений - коллекция дополнительных реквизитов, которые требуется сохранить вместе // с версией объекта: // * Идентификатор - Произвольный - уникальный идентификатор реквизита. Требуется при восстановлении из версии // объекта в случае, когда значение реквизита хранится отдельно от объекта. // * Наименование - Строка - название реквизита. // * Значение - Произвольный - значение реквизита. +// Процедура ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты) Экспорт @@ -77,12 +84,19 @@ // Восстанавливает значения реквизитов объекта, хранящихся отдельно от объекта. // // Параметры: -// Объект - Объект - версионируемый объект. +// Объект - СправочникОбъект +// - ДокументОбъект +// - ПланВидовРасчетаОбъект +// - ПланСчетовОбъект +// - ПланВидовХарактеристикОбъект - +// версионируемый объект: +// * Ссылка - ЛюбаяСсылка // ДополнительныеРеквизиты - ТаблицаЗначений - коллекция дополнительных реквизитов, которые были сохранены вместе с // версией объекта: // * Идентификатор - Произвольный - уникальный идентификатор реквизита. // * Наименование - Строка - название реквизита. // * Значение - Произвольный - значение реквизита. +// Процедура ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты) Экспорт diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl index f9aa16ee8..0397f3591 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl @@ -31,6 +31,7 @@ // Изменение значения параметра позволяет изменить режим записи. // РежимПроведения - РежимПроведенияДокумента - позволяет определить, выполняется оперативное проведение или нет. // Изменение значения параметра позволяет изменить режим проведения. +// Процедура ЗаписатьВерсиюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт // Безусловная проверка на ОбменДанными.Загрузка не требуется, т.к. в момент записи diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index c6f9164e0..bda705c57 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -191,7 +191,8 @@ // Устанавливает признак активности предмета. // // Параметры: -// Предмет - ДокументСсылка, СправочникСсылка - предмет, для которого выполняется запись. +// Предмет - ДокументСсылка +// - СправочникСсылка - предмет, для которого выполняется запись. // Активен - Булево - признак активности предмета. // Процедура УстановитьПризнакАктивен(Предмет, Активен) Экспорт @@ -244,14 +245,17 @@ КонецПроцедуры -// Заполняет наборы значений доступа значениями по умолчанию. +// Заполняет наборы значений доступа к документам подсистемы значениями по умолчанию. +// Для использования в процедуре ВзаимодействияПереопределяемый.ПриЗаполненииНаборовЗначенийДоступа. +// С ее помощью можно объединять прикладной набор значений доступа к документам подсистемы +// со стандартным заполнением по умолчанию. // // Параметры: -// Объект - ДокументОбъект.Встреча - -// - ДокументОбъект.ЗапланированноеВзаимодействие - -// - ДокументОбъект.СообщениеSMS - -// - ДокументОбъект.ТелефонныйЗвонок - -// - ДокументОбъект.ЭлектронноеПисьмоВходящее - +// Объект - ДокументОбъект.Встреча +// - ДокументОбъект.ЗапланированноеВзаимодействие +// - ДокументОбъект.СообщениеSMS +// - ДокументОбъект.ТелефонныйЗвонок +// - ДокументОбъект.ЭлектронноеПисьмоВходящее // - ДокументОбъект.ЭлектронноеПисьмоИсходящее - объект, для которого заполняются наборы. // Таблица - см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа // @@ -323,7 +327,7 @@ КонецПроцедуры -// Предназначен для получения предмета взаимодействия. +// Возвращает предмет взаимодействия. // // Параметры: // Взаимодействие - ДокументСсылка.Встреча, @@ -332,8 +336,9 @@ // - ДокументСсылка.СообщениеSMS, // - ДокументСсылка.ЭлектронноеПисьмоВходящее, // - ДокументСсылка.ЭлектронноеПисьмоИсходящее - ссылка на взаимодействие. +// // Возвращаемое значение: -// ОпределяемыйТип.ПредметВзаимодействия, Неопределено - Описание +// ОпределяемыйТип.ПредметВзаимодействия, Неопределено // Функция ПредметВзаимодействия(Взаимодействие) Экспорт @@ -416,7 +421,7 @@ ТекстЗапроса = "ВЫБРАТЬ - | УчетныеЗаписиЭлектроннойПочты.Ссылка + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗаписьЭлектроннойПочты |ИЗ | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты @@ -428,10 +433,16 @@ Запрос = Новый Запрос(ТекстЗапроса); Результат = Запрос.Выполнить().Выгрузить(); - МассивСсылок = Результат.ВыгрузитьКолонку("Ссылка"); + МассивСсылок = Результат.ВыгрузитьКолонку("УчетнаяЗаписьЭлектроннойПочты"); ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); + ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); + ДополнительныеПараметры.ПолноеИмяРегистра = "РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты"; + ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений = Истина; + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Результат, ДополнительныеПараметры); + КонецПроцедуры Функция ВладельцыУчетныхЗаписейЭлектроннойПочты(УчетныеЗаписи) Экспорт @@ -460,6 +471,20 @@ КонецФункции +Процедура ОчиститьПризнакПерсональнаяУчетнаяЗапись(УчетнаяЗапись) Экспорт + + НаборЗаписей = РегистрыСведений.НастройкиУчетныхЗаписейЭлектроннойПочты.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.УчетнаяЗаписьЭлектроннойПочты.Установить(УчетнаяЗапись); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() > 0 Тогда + Для Каждого Запись Из НаборЗаписей Цикл + Запись.УдалитьПерсональнаяУчетнаяЗапись = Ложь; + КонецЦикла; + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); // АПК:1327 - процедура вызывается в транзакции с установленной блокировкой. + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Шаблоны сообщений. @@ -469,7 +494,7 @@ // Сообщение - см. ШаблоныСообщенийСлужебный.СформироватьСообщение // УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись, с которой будет отправлено письмо. // Возвращаемое значение: -// Структура - Описание: +// Структура: // * Отправлено - Булево - признак того, что письмо отправлено. // * ОписаниеОшибки - Строка - содержит описание ошибки, в случае если письмо отправить не удалось. // @@ -779,9 +804,9 @@ // Вызывается после удаления помеченных объектов. // // Параметры: -// ПараметрыВыполнения - Структура - Контекст удаления помеченных объектов. -// * Удаленные - Массив - Ссылки удаленных объектов. -// * НеУдаленные - Массив - Ссылки объектов, которые не получилось удалить. +// ПараметрыВыполнения - Структура - контекст удаления помеченных объектов: +// * Удаленные - Массив - ссылки удаленных объектов. +// * НеУдаленные - Массив - ссылки объектов, которые не получилось удалить. // Процедура ПослеУдаленияПомеченных(ПараметрыВыполнения) Экспорт @@ -807,7 +832,7 @@ // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. // // Параметры: -// Зависимости - См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий.Настройки +// Зависимости - см. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий.Настройки // Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт @@ -948,7 +973,7 @@ // См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов. // // Параметры: -// ШаблоныЗаданий - См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов.ШаблоныЗаданий +// ШаблоныЗаданий - см. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов.ШаблоныЗаданий // Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт @@ -966,7 +991,8 @@ Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); - Если (Не Пользователи.ЭтоПолноправныйПользователь() + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент") + Или (Не Пользователи.ЭтоПолноправныйПользователь() И Не (ПравоДоступа("Чтение", Метаданные.ЖурналыДокументов.Взаимодействия) И ПравоДоступа("Чтение", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты))) Или МодульТекущиеДелаСервер.ДелоОтключено("ВзаимодействияПочта") Тогда @@ -1063,10 +1089,22 @@ КонецПроцедуры +// Получает изменяемые объекты при выполнении обработчика обновления учетных записей. +// +// Параметры: +// ИзменяемыеОбъекты - Массив - объекты, читаемые при выполнении обработчика. +// +Процедура ПриПолученииИзменяемыхОбъектовОбработчикаОбновленияУчетныхЗаписейЭлектроннойПочты(ИзменяемыеОбъекты) Экспорт + + ИзменяемыеОбъекты.Добавить("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты"); + +КонецПроцедуры + // Выполняет подготовку параметров блокировки. // // Параметры: // Блокировка - БлокировкаДанных - устанавливаемая блокировка. +// Процедура ПередУстановкойБлокировкиВОбработчикеОбновленияУчетныхЗаписейЭлектроннойПочты(Блокировка) Экспорт Блокировка.Добавить("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты"); @@ -1120,6 +1158,80 @@ КонецПроцедуры +// Параметры: +// ПодчиненныеОбъекты - см. ОбщегоНазначения.ПодчиненныеОбъекты +// +Процедура ПриОпределенииПодчиненныхОбъектов(ПодчиненныеОбъекты) Экспорт + + ПодчиненныйОбъект = ПодчиненныеОбъекты.Добавить(); + ПодчиненныйОбъект.ПодчиненныйОбъект = Метаданные.Справочники.ПапкиЭлектронныхПисем; + ПодчиненныйОбъект.ПоляСвязей = "Владелец, Наименование"; + ПодчиненныйОбъект.ПриПоискеЗаменыСсылок = "Взаимодействия.ПриПоискеЗаменыСсылок"; + ПодчиненныйОбъект.ВыполнятьАвтоматическийПоискЗаменСсылок = Истина; + +КонецПроцедуры + +// Вызывается при замене дублей в реквизитах элементов. +// +// Параметры: +// ПарыЗамен - Соответствие - содержит пары значений оригинал и дубль. +// НеобработанныеЗначенияОригиналов - Массив из Структура: +// * ЗаменяемоеЗначение - ЛюбаяСсылка - оригинальное значение заменяемого объекта. +// * ИспользуемыеСвязи - см. ПоискИУдалениеДублей.СвязиПодчиненныхОбъектовПоТипам. +// * ЗначениеКлючевыхРеквизитов - Структура - Ключ - имя реквизита, значение - значение реквизита. +// +Процедура ПриПоискеЗаменыСсылок(ПарыЗамен, НеобработанныеЗначенияОригиналов) Экспорт + + Для каждого НеобработанныйДубль Из НеобработанныеЗначенияОригиналов Цикл + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить(НеобработанныйДубль.ЗаменяемоеЗначение.Метаданные().ПолноеИмя()); + Элемент.УстановитьЗначение("Ссылка", НеобработанныйДубль.ЗаменяемоеЗначение); + Блокировка.Заблокировать(); + + ПапкаОбъект = НеобработанныйДубль.ЗаменяемоеЗначение.ПолучитьОбъект(); + ПапкаОбъект.ОбменДанными.Загрузка = Истина; + ПапкаОбъект.Владелец = НеобработанныйДубль.ЗначениеКлючевыхРеквизитов.Владелец; + ПапкаОбъект.Записать(); + ЗафиксироватьТранзакцию(); + + Исключение + + Если ТранзакцияАктивна() Тогда + ОтменитьТранзакцию(); + КонецЕсли; + ЗаписьЖурналаРегистрации(НСтр("ru='Поиск и замена ссылок'", ОбщегоНазначения.КодОсновногоЯзыка()) + ,УровеньЖурналаРегистрации.Ошибка + ,НеобработанныйДубль.ЗаменяемоеЗначение.Метаданные + ,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +// Проверяет, выполняется ли фоновое задание по отправке и получению писем. +// +// Возвращаемое значение: +// Булево - Истина, если выполняется, Ложь в обратном случае. +// +Функция ФоновоеЗаданиеПолучениеОтправкаПочтыВыполняется() Экспорт + + РегламентноеЗадание = Метаданные.РегламентныеЗадания.ПолучениеИОтправкаЭлектронныхПисем; + + Отбор = Новый Структура; + Отбор.Вставить("ИмяМетода", РегламентноеЗадание.ИмяМетода); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ТекущиеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Возврат ТекущиеФоновыеЗадания.Количество() > 0; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1127,7 +1239,7 @@ // Возвращает поля для получения наименования владельца, если такой имеется. // // Параметры: -// ИмяТаблицы - Строка - Имя основной таблицы, для которой формируется запрос. +// ИмяТаблицы - Строка - имя основной таблицы, для которой формируется запрос. // // Возвращаемое значение: // Строка - строка, которая будет вставлена в запрос. @@ -1203,9 +1315,9 @@ // Параметры: // ВсеСпискиПоиска - Структура - в нее происходит добавление варианта поиска и значения в этом варианте. // ПолеФормы - ПолеВвода - ЭлементФормы, для списка выбора которого добавляется вариант. -// ИмяВарианта - Строка - Имя варианта поиска. -// Представление - Строка - Представление варианта поиска. -// Значение - Строка - Значение для поиска в данном варианте поиска. +// ИмяВарианта - Строка - имя варианта поиска. +// Представление - Строка - представление варианта поиска. +// Значение - Строка - значение для поиска в данном варианте поиска. // Процедура ДобавитьВариантПоиска(ВсеСпискиПоиска, ПолеФормы, ИмяВарианта, Представление, Значение) @@ -1263,10 +1375,11 @@ // Получает таблицу форму по имени. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма, для которой определяется таблица. -// ИмяЭлемента - Строка - Имя элемента форма. +// Форма - ФормаКлиентскогоПриложения - форма, для которой определяется таблица. +// ИмяЭлемента - Строка - имя элемента форма. // Возвращаемое значение: -// ТаблицаФормы - +// ТаблицаФормы +// Функция ТаблицаФормыПоИмени(Форма, ИмяЭлемента) Возврат Форма.Элементы[ИмяЭлемента]; @@ -1296,7 +1409,7 @@ // Адрес - Строка - адрес контакта. // // Возвращаемое значение: -// СписокЗначений - +// СписокЗначений // Функция ПолучитьВариантыПоискаПоСтроке(Представление, Адрес) @@ -1375,10 +1488,11 @@ Для Каждого Стр Из ТаблицаКонтакты Цикл НоваяСтрока = НайденныеКонтакты.Добавить(); - НоваяСтрока.Ссылка = Стр.Контакт; - НоваяСтрока.Представление = Стр.Представление; - НоваяСтрока.НаименованиеКонтакта = Стр.Наименование + ?(ПустаяСтрока(Стр.НаименованиеВладельца), "", " (" + Стр.НаименованиеВладельца + ")"); - НоваяСтрока.ИмяСправочника = Стр.Контакт.Метаданные().Имя; + НоваяСтрока.Ссылка = Стр.Контакт; + НоваяСтрока.Представление = Стр.Представление; + НоваяСтрока.НаименованиеКонтакта = Стр.Наименование + ?(ПустаяСтрока(Стр.НаименованиеВладельца), "", " (" + Стр.НаименованиеВладельца + ")"); + НоваяСтрока.ИмяСправочника = Стр.Контакт.Метаданные().Имя; + НоваяСтрока.ПредставлениеЗаполнено = ?(ПустаяСтрока(Стр.Представление), Ложь, Истина); КонецЦикла; КонецПроцедуры @@ -1460,11 +1574,11 @@ // Для типизации строки таблицы контактов // // Параметры: -// СтрокаТаблицы - ДанныеФормыЭлементКоллекции - +// СтрокаТаблицы - ДанныеФормыЭлементКоллекции // Возвращаемое значение: -// Структура - содержит: -// * Наименование - Строка - -// * НаименованиеВладельца - Строка - +// Структура: +// * Наименование - Строка +// * НаименованиеВладельца - Строка // Функция СтрокаТаблицыКонтакты(СтрокаТаблицы) @@ -1770,137 +1884,6 @@ КонецФункции -// Формирует текст запроса для поиска контактов по телефону и выполняет его. -// -// Параметры: -// Телефон - Строка - строка, содержащая телефон. -// НайденныеКонтакты - ТаблицаЗначений. -// -// Возвращаемое значение: -// Булево - Истина, если найден хотя бы один контакт. -// -Функция НайтиКонтактыПоТелефону(Знач Телефон, НайденныеКонтакты) Экспорт - - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); - - ТекстЗапроса = - "ВЫБРАТЬ - | ТаблицаКонтактнойИнформации.Ссылка КАК Контакт, - | ПОДСТРОКА(ТаблицаКонтактнойИнформации.Представление, 1, 1000)КАК Представление, - | ТаблицаКонтактнойИнформации.Ссылка.Наименование КАК Наименование, - | """" КАК НаименованиеВладельца - |ИЗ - | Справочник.Пользователи.КонтактнаяИнформация КАК ТаблицаКонтактнойИнформации - |ГДЕ - | ПОДСТРОКА(ТаблицаКонтактнойИнформации.Представление, 1, 100) = &Телефон - | И (ТаблицаКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон) - | ИЛИ ТаблицаКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Факс)) - | И (НЕ ТаблицаКонтактнойИнформации.Ссылка.ПометкаУдаления) - |"; - - Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл - - Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда - Продолжить; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + " - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ТаблицаКонтактнойИнформации.Ссылка, - | ПОДСТРОКА(ТаблицаКонтактнойИнформации.Представление, 1, 1000), - | ТаблицаКонтактнойИнформации.Ссылка." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование, - | " + ?(ЭлементМассиваОписания.ЕстьВладелец," ТаблицаКонтактнойИнформации.Ссылка.Владелец.Наименование","""""") + " - |ИЗ - | Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК ТаблицаКонтактнойИнформации - |ГДЕ - | ПОДСТРОКА(ТаблицаКонтактнойИнформации.Представление, 1, 100) = &Телефон - | И (ТаблицаКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон) - | ИЛИ ТаблицаКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Факс)) - | И (НЕ ТаблицаКонтактнойИнформации.Ссылка.ПометкаУдаления) - | " + ?(ЭлементМассиваОписания.Иерархический," И (НЕ ТаблицаКонтактнойИнформации.Ссылка.ЭтоГруппа)",""); - - КонецЦикла; - - ТекстЗапроса = ТекстЗапроса + " - |УПОРЯДОЧИТЬ ПО - | Наименование"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Телефон", Телефон); - ТаблицаКонтакты = Запрос.Выполнить().Выгрузить(); - - Если ТаблицаКонтакты = Неопределено ИЛИ ТаблицаКонтакты.Количество() = 0 Тогда - Возврат Ложь; - КонецЕсли; - - ЗаполнитьНайденныеКонтакты(ТаблицаКонтакты, НайденныеКонтакты); - Возврат Истина; - -КонецФункции - -// Формирует текст запроса для поиска контактов по началу наименования и выполняет его. -// -// Параметры: -// Наименование - Строка - строка, содержащая начало наименования контакта. -// -// Возвращаемое значение: -// ТаблицаЗначений - Результат выполненного запроса выгруженный в таблицу значений. -// -Функция НайтиКонтактыПоНачалуНаименования(Знач СтрокаПоиска) Экспорт - - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); - - ТекстЗапроса = - "ВЫБРАТЬ - | СправочникКонтакт.Ссылка КАК Контакт, - | СправочникКонтакт.Наименование КАК Наименование, - | """" КАК НаименованиеВладельца, - | """" КАК Представление - |ИЗ - | Справочник.Пользователи КАК СправочникКонтакт - |ГДЕ - | СправочникКонтакт.Наименование ПОДОБНО &Наименование - | И (НЕ СправочникКонтакт.ПометкаУдаления) - |"; - - Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл - - Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда - Продолжить; - Иначе - - ТекстЗапроса =ТекстЗапроса + " - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ТаблицаСправочника.Ссылка, - | ТаблицаСправочника." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование, - | " + ?(ЭлементМассиваОписания.ЕстьВладелец," ТаблицаСправочника.Владелец.Наименование","""""") + ", - | """" - |ИЗ - | Справочник." +ЭлементМассиваОписания.Имя +" КАК ТаблицаСправочника - |ГДЕ - | ТаблицаСправочника.Наименование ПОДОБНО &Наименование "+?(ЭлементМассиваОписания.Иерархический, " И (НЕ ТаблицаСправочника.ЭтоГруппа)","")+" - | И (НЕ ТаблицаСправочника.ПометкаУдаления)"; - - КонецЕсли; - - КонецЦикла; - - ТекстЗапроса = ТекстЗапроса + " - |УПОРЯДОЧИТЬ ПО - | Наименование"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Запрос.УстановитьПараметр("Наименование", СтрокаПоиска + "%"); - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции - // Поиск по наименованию контактов, содержащих адреса электронной почты. // // Параметры: @@ -1927,7 +1910,7 @@ // Параметры: // СтрокаПоиска // Возвращаемое значение: -// ТаблицаЗначений - содержит колонки: +// ТаблицаЗначений: // * Контакт - ОпределяемыйТип.КонтактВзаимодействия - найденный контакт. // * Наименование - Строка - наименование контакта. // * НаименованиеВладельца - Строка - наименование владельца контакта. @@ -2210,36 +2193,13 @@ НоваяСтрока.Представление = ?(ДляАдреснойКниги, Выборка.Представление, СоответствиеОписаний[Выборка.Контакт]); НоваяСтрока.НаименованиеКонтакта = Выборка.Наименование + ?(ПустаяСтрока(Выборка.НаименованиеВладельца), "", " (" + Выборка.НаименованиеВладельца + ")"); + НоваяСтрока.ПредставлениеЗаполнено = ?(ПустаяСтрока(НоваяСтрока.Представление), Ложь, Истина); КонецЦикла; Возврат ?(КоличествоНайденныхЭлементов < 101, "", НСтр("ru = 'Уточните параметры поиска. В списке отображены не все найденные контакты.'")); КонецФункции -Функция АвтоПодборКонтактов(Знач СтрокаПоиска) Экспорт - - Результат = Новый СписокЗначений; - НайденныеКонтакты = Новый ТаблицаЗначений; - НайденныеКонтакты.Колонки.Добавить("Ссылка", Метаданные.ОпределяемыеТипы.КонтактВзаимодействия.Тип); - НайденныеКонтакты.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - НайденныеКонтакты.Колонки.Добавить("ИмяСправочника", Новый ОписаниеТипов("Строка")); - НайденныеКонтакты.Колонки.Добавить("НаименованиеКонтакта", Новый ОписаниеТипов("Строка")); - - РезультатПоиска = НайтиКонтакты(СтрокаПоиска, Ложь, НайденныеКонтакты); - Если Не ПустаяСтрока(РезультатПоиска) Тогда - Возврат Результат; - КонецЕсли; - - Для каждого Выборка Из НайденныеКонтакты Цикл - ЗначениеВыбора = Новый Структура; - ЗначениеВыбора.Вставить("Контакт", Выборка.Ссылка); - ЗначениеВыбора.Вставить("ПредставлениеКонтакта", Выборка.НаименованиеКонтакта); - Результат.Добавить(ЗначениеВыбора, Выборка.НаименованиеКонтакта + " [" + Выборка.Представление + "]"); - КонецЦикла; - Возврат Результат; - -КонецФункции - // Формирует текст запроса для поиска контактов по строке. // // Возвращаемое значение: @@ -2355,7 +2315,8 @@ // // Параметры: // ЭлементыФормы - КоллекцияЭлементовУправляемойФормы - предоставляет доступ к элементам формы. -// Предмет - СправочникСсылка, ДокументСсылка - предмет взаимодействия. +// Предмет - СправочникСсылка +// - ДокументСсылка - предмет взаимодействия. // КонтактыПоПредмету - ТаблицаЗначений - реквизит формы, в который помещаются найденные контакты. // ВключатьEmail - Булево - признак необходимости получения данных о электронном адресе контакта. // @@ -2380,6 +2341,9 @@ НоваяСтрока.ПредставлениеНаименования = СтрокаТаблицы.ПредставлениеНаименования; Если ВключатьEmail Тогда НоваяСтрока.Адрес = СтрокаТаблицы.АдресЭП; + Если Не ПустаяСтрока(НоваяСтрока.Адрес) Тогда + НоваяСтрока.АдресЗаполнен = Истина; + КонецЕсли; КонецЕсли; КонецЦикла; @@ -2474,11 +2438,11 @@ // устанавливает их в соответствующие реквизиты формы. // Параметры: // Форма - ФормаКлиентскогоПриложения - форма документа взаимодействия, содержит: -// * Объект - ДокументОбъект.ТелефонныйЗвонок - -// - ДокументОбъект.ЗапланированноеВзаимодействие - -// - ДокументОбъект.СообщениеSMS - -// - ДокументОбъект.Встреча - -// - ДокументОбъект.ЭлектронноеПисьмоВходящее - +// * Объект - ДокументОбъект.ТелефонныйЗвонок +// - ДокументОбъект.ЗапланированноеВзаимодействие +// - ДокументОбъект.СообщениеSMS +// - ДокументОбъект.Встреча +// - ДокументОбъект.ЭлектронноеПисьмоВходящее // - ДокументОбъект.ЭлектронноеПисьмоИсходящее - ссылка на записываемый объект. // Процедура УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(Форма) Экспорт @@ -2520,7 +2484,8 @@ // // Параметры: // Параметры - Структура - параметры, переданные при создании документа взаимодействия. -// Предмет - ДокументСсылка, СправочникСсылка - в данную процедуру устанавливается предмет +// Предмет - ДокументСсылка +// - СправочникСсылка - в данную процедуру устанавливается предмет // взаимодействия согласно данным заполнения. // Процедура УстановитьПредметПоДаннымЗаполнения(Параметры,Предмет) Экспорт @@ -2627,7 +2592,7 @@ // на основании массива. // ТипКонтактнойИнформации - Перечисления.ТипыКонтактнойИнформации - если указано, // то будет наложен отбор по данном типу контактной информации. -// РазбиватьПоКоличествуАдресов - Булево - Если истина, то для контакта будет создано столько строк в ТЧ "Участники", +// РазбиватьПоКоличествуАдресов - Булево - если истина, то для контакта будет создано столько строк в ТЧ "Участники", // сколько для него получено различных видов заполненной контактной информации. // Процедура ЗаполнитьКонтактыДляВстречи(Контакты, Участники, ТипКонтактнойИнформации = Неопределено, РазбиватьПоКоличествуАдресов = Ложь) Экспорт @@ -3122,84 +3087,17 @@ // Возвращаемое значение: // Строка - идентификатор почтового сообщения. // -Функция ВыполнитьОтправкуПисьма(Объект, Соединение = Неопределено, ПараметрыПисьма = Неопределено, ПротоколПочты = "") Экспорт +Функция ВыполнитьОтправкуПисьма(Объект, Соединение = Неопределено, ПараметрыПисьма = Неопределено, ПротоколПочты = "") - Если ПротоколПочты <> "" И ПротоколПочты <> "Все" И ПротоколПочты <> "IMAP" Тогда - Возврат Неопределено; - КонецЕсли; + ПараметрыПисьма = ПараметрыПисьмаДляОтправки(Объект); + Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(Объект.УчетнаяЗапись, ПараметрыПисьма); + РезультатОтправки = РаботаСПочтовымиСообщениями.ОтправитьПисьмо(Объект.УчетнаяЗапись, Письмо); + Объект.ИдентификаторСообщения = РезультатОтправки.ИдентификаторПисьмаSMTP; + Объект.ИдентификаторСообщенияОтправкаIMAP = РезультатОтправки.ИдентификаторПисьмаIMAP; + ПараметрыПисьма.Вставить("ИдентификаторСообщения", РезультатОтправки.ИдентификаторПисьмаSMTP); + ПараметрыПисьма.Вставить("ОшибочныеПолучатели", РезультатОтправки.ОшибочныеПолучатели); - Если ПараметрыПисьма = Неопределено Тогда - ПараметрыПисьма = ПараметрыПисьмаДляОтправки(Объект); - КонецЕсли; - - Если Соединение = Неопределено Тогда - - Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(Объект.УчетнаяЗапись); - - Попытка - - Соединение = Новый ИнтернетПочта; - ПротоколПодключения = ?(ПустаяСтрока(Профиль.АдресСервераIMAP),ПротоколИнтернетПочты.POP3, ПротоколИнтернетПочты.IMAP); - Соединение.Подключиться(Профиль, ПротоколПодключения); - - ПротоколПочты = ""; - - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда - - Если Не (Объект.УдалятьПослеОтправки - Или УправлениеЭлектроннойПочтой.СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(Профиль.АдресСервераSMTP)) Тогда - - ПочтовыеЯщики = Соединение.ПолучитьПочтовыеЯщики(); - Для Каждого ПочтовыйЯщик Из ПочтовыеЯщики Цикл - Если НРег(ПочтовыйЯщик) = "отправленные" - Или НРег(ПочтовыйЯщик) = "inbox.sent" - Или НРег(ПочтовыйЯщик) = "sent" Тогда - - Соединение.ТекущийПочтовыйЯщик = ПочтовыйЯщик; - ПротоколПочты = "Все"; - Прервать; - - КонецЕсли; - КонецЦикла; - - КонецЕсли; - - КонецЕсли; - - Исключение - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), - Объект.УчетнаяЗапись, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, Объект.УчетнаяЗапись); - - КонецПопытки; - - КонецЕсли; - - ПараметрыПисьма.Вставить("Соединение", Соединение); - - ПараметрыПисьма.Вставить("ПротоколПочты", ПротоколПочты); - - ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма); // АПК:223 - - Если Не Объект.УдалятьПослеОтправки Тогда - - Если ПротоколПочты = "" Тогда - Объект.ИдентификаторСообщения = ПараметрыПисьма.ИдентификаторСообщения; - ИначеЕсли ПротоколПочты = "IMAP" Тогда - Объект.ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщенияОтправкаIMAP; - ИначеЕсли ПротоколПочты = "Все" Тогда - Объект.ИдентификаторСообщения = ПараметрыПисьма.ИдентификаторСообщения; - Объект.ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщенияОтправкаIMAP; - КонецЕсли; - - КонецЕсли; - - Возврат ИдентификаторПисьма; + Возврат Объект.ИдентификаторСообщения; КонецФункции @@ -3243,7 +3141,7 @@ КонецФункции -Функция ПараметрыПисьмаДляОтправки(Объект) +Функция ПараметрыПисьмаДляОтправки(Объект) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); @@ -3791,11 +3689,11 @@ // Получает данные вложений-писем. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоИсходящее - +// Письмо - ДокументСсылка.ЭлектронноеПисьмоИсходящее // - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо, информацию о вложениях которого требуется получить. // Возвращаемое значение: -// ТаблицаЗначений - содержит следующие колонки: -// * Письмо - ДокументСсылка.ЭлектронноеПисьмоИсходящее - +// ТаблицаЗначений: +// * Письмо - ДокументСсылка.ЭлектронноеПисьмоИсходящее // - ДокументСсылка.ЭлектронноеПисьмоИсходящее - вложение-письмо. // * Размер - Число - размер вложения. // * Тема - Строка - тема письма вложения. @@ -3844,7 +3742,7 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма для которой выполняется процедура: -// * Объект - ДокументОбъект.ЭлектронноеПисьмоВходящее - +// * Объект - ДокументОбъект.ЭлектронноеПисьмоВходящее // - ДокументОбъект.ЭлектронноеПисьмоИсходящее - письмо, для которого устанавливается заголовок. // Процедура УстановитьЗаголовокФормыЭлектронногоПисьма(Форма) Экспорт @@ -3865,247 +3763,6 @@ КонецПроцедуры -////////////////////////////////////////////////////////////////////////////////// -// Работа с элементами и реквизитами форм взаимодействий. - -// Устанавливает условное оформление в форме взаимодействия. -// -// Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма, для которой устанавливается условное оформление. -// -Процедура УстановитьУсловноеОформлениеВзаимодействия(Форма) Экспорт - - Элемент = Форма.УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ПредставлениеКонтакта"); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Участники.Контакт"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветФонаВыделенияПоля); - -КонецПроцедуры - -// Заполняет список выбора для поля "Рассмотреть после". -// -// Параметры: -// СписокВыбора - СписокЗначений - список, который будет заполнен значения выбора. -// -Процедура ЗаполнитьСписокВыбораДляРассмотретьПосле(СписокВыбора) Экспорт - - СписокВыбора.Очистить(); - СписокВыбора.Добавить(15*60, НСтр("ru = 'Через 15 мин.'")); - СписокВыбора.Добавить(30*60, НСтр("ru = 'Через 30 мин.'")); - СписокВыбора.Добавить(60*60, НСтр("ru = 'Через 1 час'")); - СписокВыбора.Добавить(3*60*60, НСтр("ru = 'Через 3 часа'")); - СписокВыбора.Добавить(24*60*60, НСтр("ru = 'Завтра'")); - -КонецПроцедуры - -// Обработчик события при записи, возникающих в формах документов взаимодействий. -// -// Параметры: -// ТекущийОбъект - ДокументОбъект - документ, в котором возникло событие. -// Форма - ФормаКлиентскогоПриложения - форма, в которой выполняется запись: -// * Объект - ДокументОбъект.ТелефонныйЗвонок - -// - ДокументОбъект.ЗапланированноеВзаимодействие - -// - ДокументОбъект.СообщениеSMS - -// - ДокументОбъект.Встреча - -// - ДокументОбъект.ЭлектронноеПисьмоВходящее - -// - ДокументОбъект.ЭлектронноеПисьмоИсходящее - ссылка на записываемый объект. -// -Процедура ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, Форма) Экспорт - - Если Форма.Рассмотрено Тогда - Форма.РассмотретьПосле = Дата(1,1,1); - КонецЕсли; - - ВзаимодействиеСсылка = ТекущийОбъект.Ссылка; - - Блокировка = Новый БлокировкаДанных(); - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, ВзаимодействиеСсылка); - Блокировка.Заблокировать(); - - СтарыеЗначенияРеквизитов = СтруктураРеквизитовВзаимодействия(ВзаимодействиеСсылка); - Если СтарыеЗначенияРеквизитов.Предмет = Форма.Предмет И ЗначениеЗаполнено(Форма.Предмет) - И СтарыеЗначенияРеквизитов.Рассмотрено = Форма.Рассмотрено - И СтарыеЗначенияРеквизитов.РассмотретьПосле = Форма.РассмотретьПосле Тогда - Возврат; - КонецЕсли; - - РассчитыватьРассмотрено = (СтарыеЗначенияРеквизитов.Рассмотрено <> Форма.Рассмотрено) - ИЛИ (СтарыеЗначенияРеквизитов.Предмет <> Форма.Предмет И ЗначениеЗаполнено(Форма.Предмет)); - - СтруктураДляЗаписи = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); - СтруктураДляЗаписи.Предмет = Форма.Предмет; - СтруктураДляЗаписи.Рассмотрено = Форма.Рассмотрено; - СтруктураДляЗаписи.РассмотретьПосле = Форма.РассмотретьПосле; - СтруктураДляЗаписи.РассчитыватьРассмотрено = РассчитыватьРассмотрено; - - // Если в качестве предмета устанавливается само взаимодействие, то делать ничего не нужно. - Если Форма.Предмет = ВзаимодействиеСсылка Тогда - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); - РассчитатьРассмотреноПоКонтактамПриЗаписиИзФормы(ТекущийОбъект, Форма.Рассмотрено, Форма.Объект.Ссылка, СтарыеЗначенияРеквизитов); - Возврат; - КонецЕсли; - - // Если в качестве нового предмета установлено взаимодействие, то надо проверить предмет у нового предмета. - Если ЗначениеЗаполнено(Форма.Предмет) Тогда - - Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Форма.Предмет) Тогда - - ПредметПредмета = ПолучитьЗначениеПредмета(Форма.Предмет); - Если Не ЗначениеЗаполнено(ПредметПредмета) Тогда - // У предмета установим в качестве предмета ссылку на самого себя. - СтруктураДляЗаписи.Предмет = Форма.Предмет; - СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); - Иначе - СтруктураДляЗаписи.Предмет = ПредметПредмета; - СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; - Форма.Предмет = ПредметПредмета; - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); - КонецЕсли; - - Иначе - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); - КонецЕсли; - - Иначе - - СтруктураДляЗаписи.Предмет = ВзаимодействиеСсылка; - СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; - Форма.Предмет = ВзаимодействиеСсылка; - РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); - - КонецЕсли; - - // Если предыдущим предметом было взаимодействие, то возможно нужно поменять предмет у всей цепочки. - Если ЗначениеЗаполнено(СтарыеЗначенияРеквизитов.Предмет) И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтарыеЗначенияРеквизитов.Предмет) Тогда - - Если НЕ (ВзаимодействиеСсылка <> СтарыеЗначенияРеквизитов.Предмет - И (Не ЗначениеЗаполнено(Форма.Предмет) - ИЛИ ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Форма.Предмет))) Тогда - - ЗаменитьПредметВЦепочкеВзаимодействий(СтарыеЗначенияРеквизитов.Предмет, Форма.Предмет, ВзаимодействиеСсылка); - - КонецЕсли; - - КонецЕсли; - - РассчитатьРассмотреноПоКонтактамПриЗаписиИзФормы(ТекущийОбъект, Форма.Рассмотрено, Форма.Объект.Ссылка, СтарыеЗначенияРеквизитов); - -КонецПроцедуры - -// Вызывает расчет признака рассмотрено по контактам при записи из формы. -// -// Параметры: -// ТекущийОбъект - ДокументОбъект - объект, в форме которого выполнялась запись. -// Рассмотрено - Булево - признак рассмотрения взаимодействия. -// Ссылка - ДокументСсылка - ссылка на документ взаимодействия. -// СтарыеЗначенияРеквизитов - Структура - содержит предыдущие сохраненные значения. -// -Процедура РассчитатьРассмотреноПоКонтактамПриЗаписиИзФормы(ТекущийОбъект, Рассмотрено, Ссылка, СтарыеЗначенияРеквизитов) - - Если (НеЗаписыватьКонтакты(ТекущийОбъект.ДополнительныеСвойства) - И СтарыеЗначенияРеквизитов.Рассмотрено <> Рассмотрено) - ИЛИ Ссылка.Пустая() Тогда - - МассивВзаимодействий = Новый Массив; - МассивВзаимодействий.Добавить(ТекущийОбъект.Ссылка); - РассчитатьРассмотреноПоКонтактам(МассивВзаимодействий); - - КонецЕсли; - -КонецПроцедуры - -// Обработчик события перед записью, возникающих в формах документов взаимодействий. -// -// Параметры: -// Форма - ФормаКлиентскогоПриложения - форма в которой произошло событие. -// ТекущийОбъект - ДокументОбъект - документ, в котором возникло событие. -// -Процедура ПередЗаписьюВзаимодействияИзФормы(Форма, ТекущийОбъект, ИзменилисьКонтакты = Ложь) Экспорт - - ТекущийОбъект.ДополнительныеСвойства.Вставить("Предмет", Форма.Предмет); - - Если НЕ ИзменилисьКонтакты Тогда - ТекущийОбъект.ДополнительныеСвойства.Вставить("НеЗаписыватьКонтакты", Истина); - КонецЕсли; - - Если ТекущийОбъект.Ссылка.Пустая() Тогда - ТекущийОбъект.ВзаимодействиеОснование = Форма.ВзаимодействиеОснование; - КонецЕсли; - -КонецПроцедуры - -// Заполняет список доступных для создания взаимодействий. -// -// Параметры: -// ДокументыДоступныеДляСоздания - СписокЗначений - заполняемый список значений. -// -Процедура ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания) Экспорт - - Для каждого РегистрируемыйДокумент Из Метаданные.ЖурналыДокументов.Взаимодействия.РегистрируемыеДокументы Цикл - - Если Не РегистрируемыйДокумент.Имя = "ЭлектронноеПисьмоВходящее" Тогда - - ДокументыДоступныеДляСоздания.Добавить(РегистрируемыйДокумент.Имя,РегистрируемыйДокумент.Синоним); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Выполняется при загрузке сохраненных пользовательских настроек быстрого отбора ТипВзаимодействия -// в формах списков документов взаимодействий. -// -// Параметры: -// Форма - ФормаКлиентскогоПриложения - форма для которой выполняется процедура. -// Настройки - Соответствие - загружаемые настройки. -// -Процедура ПриЗагрузкеТипаВзаимодействийИзНастроек(Форма, Настройки) Экспорт - - ТипВзаимодействия = Настройки.Получить("ТипВзаимодействия"); - Если ТипВзаимодействия <> Неопределено Тогда - Настройки.Удалить("ТипВзаимодействия"); - КонецЕсли; - - Если Форма.ТолькоПочта Тогда - Если ТипВзаимодействия = Неопределено - ИЛИ Форма.Элементы.ТипВзаимодействия.СписокВыбора.НайтиПоЗначению(ТипВзаимодействия) = Неопределено Тогда - ТипВзаимодействия = "ВсеПисьма"; - Настройки.Удалить("ТипВзаимодействия"); - КонецЕсли; - Иначе - Если ТипВзаимодействия = Неопределено Тогда - ТипВзаимодействия = "Все"; - Настройки.Удалить("ТипВзаимодействия"); - КонецЕсли; - КонецЕсли; - - Форма.ТипВзаимодействия = ТипВзаимодействия; - -КонецПроцедуры - -// Заменяет предмет в цепочке взаимодействий. -// -// Параметры: -// Цепочка - Ссылка - предмет взаимодействий, который будет заменен. -// Предмет - Ссылка - предмет, на который будет выполнена замена. -// Исключать - Ссылка - взаимодействие, в котором операция замены выполнена не будет. -// -Процедура ЗаменитьПредметВЦепочкеВзаимодействий(Цепочка, Предмет, Исключать = Неопределено) - - УстановитьПривилегированныйРежим(Истина); - МассивВзаимодействий = ВзаимодействияИзЦепочки(Цепочка, Исключать); - ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(МассивВзаимодействий, Предмет); - -КонецПроцедуры - #Область ОбработчикиОбновления Процедура ОтключитьПодсистемуВМоделиСервиса() Экспорт @@ -4141,8 +3798,11 @@ Продолжить; КонецЕсли; + ИмяСписка = "Список_" + ОписаниеКонтакта.Имя; + ДобавляемыеРеквизиты.Добавить( - Новый РеквизитФормы("Список_" + ОписаниеКонтакта.Имя, ОписаниеТипаДинамическийСписок)); + Новый РеквизитФормы(ИмяСписка, ОписаниеТипаДинамическийСписок)); + КонецЦикла; Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); @@ -4154,8 +3814,14 @@ Продолжить; КонецЕсли; - ЕстьКолонкаАдрес = УстановитьТекстЗапросаКонтакта(Форма["Список_" + ОписаниеКонтакта.Имя], ОписаниеКонтакта); + ИмяСписка = "Список_" + ОписаниеКонтакта.Имя; + + ЕстьКолонкаАдрес = УстановитьТекстЗапросаКонтакта(Форма[ИмяСписка], ОписаниеКонтакта); ЕстьКолонкиАдрес[ОписаниеКонтакта.Имя] = ЕстьКолонкаАдрес; + + Если ЕстьКолонкаАдрес Тогда + Форма.ИменаДобавленныхТаблиц.Добавить(ИмяСписка); + КонецЕсли; КонецЦикла; Для каждого ОписаниеКонтакта Из ОписанияКонтактов Цикл @@ -4354,18 +4020,19 @@ КонецЕсли; КонецПроцедуры + ////////////////////////////////////////////////////////////////////////////////// // Работа с предметами взаимодействий. // Устанавливает предмет для документа взаимодействия. // // Параметры: -// Ссылка - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее, -// ДокументСсылка.Встреча, -// ДокументСсылка.ЗапланированноеВзаимодействие, -// ДокументСсылка.ТелефонныйЗвонок - взаимодействие для которого будет установлен предмет. -// Предмет - ПроизвольнаяСсылка - ссылка на устанавливаемый предмет. +// Ссылка - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее +// - ДокументСсылка.Встреча +// - ДокументСсылка.ЗапланированноеВзаимодействие +// - ДокументСсылка.ТелефонныйЗвонок - взаимодействие для которого будет установлен предмет. +// Предмет - ЛюбаяСсылка - ссылка на устанавливаемый предмет. // Процедура УстановитьПредмет(Ссылка, Предмет, РассчитыватьРассмотрено = Истина) Экспорт @@ -4540,58 +4207,12 @@ КонецФункции -Функция ОбъединитьПисьма(ПервоеПисьмоДокументHTML, ВтороеПисьмоДокументHTML, ШапкаВторогоПисьма) Экспорт - - ТелоВторогоПисьма = ВтороеПисьмоДокументHTML.Тело; - УзлыHTMLВторогоПисьма = ДочерниеУзлыСодержащиеHTML(ТелоВторогоПисьма); - - ЭлементDIV = ДобавитьЭлементСАтрибутами(ТелоВторогоПисьма, "div", - Новый Структура("style", "border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt")); - - Для каждого ДочернийУзел Из УзлыHTMLВторогоПисьма Цикл - ЭлементDIV.ДобавитьДочерний(ДочернийУзел); - КонецЦикла; - - АтрибутыРазделителя = Новый Структура; - АтрибутыРазделителя.Вставить("size", "2"); - АтрибутыРазделителя.Вставить("width", "100%"); - АтрибутыРазделителя.Вставить("align", "center"); - АтрибутыРазделителя.Вставить("tabindex", "-1"); - - ЭлементРазделитель = ДобавитьЭлементСАтрибутами(ЭлементDIV, "hr", АтрибутыРазделителя); - ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементDIV, ЭлементРазделитель, УзлыHTMLВторогоПисьма); - - ШапкаПисьма = СформироватьЭлементДанныхШапкиПисьма(ЭлементDIV, ШапкаВторогоПисьма, - ШапкаВторогоПисьма.ИмяОбъектаМетаданных = "ЭлектронноеПисьмоИсходящее"); - ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементDIV, ШапкаПисьма, УзлыHTMLВторогоПисьма); - - УзлыТелаПисьма = ДочерниеУзлыСодержащиеHTML(ПервоеПисьмоДокументHTML.Тело); - Для Каждого ДочернийУзел Из УзлыТелаПисьма Цикл - ТелоВторогоПисьма.ВставитьПеред(ВтороеПисьмоДокументHTML.ИмпортироватьУзел(ДочернийУзел, Истина), ЭлементDIV); - КонецЦикла; - - СтилиCSS = ПервоеПисьмоДокументHTML.ПолучитьЭлементыПоИмени("style"); - Для каждого СтильCSS Из СтилиCSS Цикл - ЭлементыЗаголовка = ВтороеПисьмоДокументHTML.ПолучитьЭлементыПоИмени("head"); - Если ЭлементыЗаголовка.Количество() = 0 Тогда - ЭлементЗаголовка = ВтороеПисьмоДокументHTML.СоздатьЭлемент("head"); - ВтороеПисьмоДокументHTML.ПолучитьЭлементыПоИмени("html")[0].ВставитьПеред(ЭлементЗаголовка, ТелоВторогоПисьма); - Иначе - ЭлементЗаголовка = ЭлементыЗаголовка[0]; - КонецЕсли; - ЭлементЗаголовка.ДобавитьДочерний(ВтороеПисьмоДокументHTML.ИмпортироватьУзел(СтильCSS, Истина)); - КонецЦикла; - - Возврат ВтороеПисьмоДокументHTML; - -КонецФункции - // Формирует документ HTML на основании электронного письма. // // Параметры: // ПараметрыФормирования - Структура - параметры формирования документа HTML: -// * Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого будет проведена оценка. +// * Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого будет проведена оценка. // * ТипТекста - ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем - тип текста письма. // * Текст - Строка - текста письма. // * ТекстHTML - Строка - текста письма в формате HTML. @@ -4686,8 +4307,8 @@ // Обрабатывает текст HTML электронного письма. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого будет проведена оценка. +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого будет проведена оценка. // // Возвращаемое значение: // Строка - обработанный текст электронного письма. @@ -4887,16 +4508,16 @@ // Получает вложения письма с непустым ИД. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее - +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее // - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого будет проведена оценка. // // Возвращаемое значение: // ТаблицаЗначений - ТаблицаЗначений - таблица с колонками: -// * Ссылка - СправочникСсылка.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы - +// * Ссылка - СправочникСсылка.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы // - СправочникСсылка.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы - // ссылка на присоединенный файл. -// * Наименование - Строка - Имя файла. -// * Размер - Число - Размер файла. +// * Наименование - Строка - имя файла. +// * Размер - Число - размер файла. // * ИДФайлаЭлектронногоПисьма - Строка - идентификатор картинки, которая отображается в тексте письма. // Функция ПолучитьВложенияПисьмаСНеПустымИД(Письмо) Экспорт @@ -4929,7 +4550,7 @@ // Получает данные письма основания. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее - +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее // - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого будет проведена оценка. // // Возвращаемое значение: @@ -4981,8 +4602,8 @@ // Обрабатывает текст HTML для помещения в форматированный документ. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого будет проведена оценка. +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого будет проведена оценка. // ТекстHTML - Строка - обрабатываемый текст HTML. // СтруктураВложений - Структура - структура в которую помещаются картинки - вложения письма. // @@ -5143,20 +4764,15 @@ Процедура ЗаменитьИменаКартинокНаИдентификаторыПочтовыхВложенийВHTML(ДокументHTML, ТаблицаСоответствий) Экспорт ТаблицаСоответствий.Индексы.Добавить("ИмяФайла"); - Для каждого Картинка Из ДокументHTML.Картинки Цикл - АтрибутИсточникКартинки = Картинка.Атрибуты.ПолучитьИменованныйЭлемент("src"); НайденнаяСтрока = ТаблицаСоответствий.Найти(АтрибутИсточникКартинки.ТекстовоеСодержимое,"ИмяФайла"); Если НайденнаяСтрока <> Неопределено Тогда - НовыйАтрибутКартинки = АтрибутИсточникКартинки.КлонироватьУзел(Ложь); - НовыйАтрибутКартинки.ТекстовоеСодержимое = Строка("cid:"+НайденнаяСтрока.ИдентификаторФайлаДляHTML); + НовыйАтрибутКартинки.ТекстовоеСодержимое = "cid:" + НайденнаяСтрока.ИдентификаторФайлаДляHTML; Картинка.Атрибуты.УстановитьИменованныйЭлемент(НовыйАтрибутКартинки); - КонецЕсли; - КонецЦикла; КонецПроцедуры @@ -5202,8 +4818,8 @@ // Оценивает размер электронного письма. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого будет проведена оценка. +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого будет проведена оценка. // // Возвращаемое значение: // Число - оценка размера письма в байтах. @@ -5255,42 +4871,14 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////////// -// Работа с объектом Документ HTML. - -// Получает массив дочерних узлов элемента HTML, содержащих HTML. -// -// Параметры: -// Элемент - ЭлементHTML -// -// Возвращаемое значение: -// Массив -// -Функция ДочерниеУзлыСодержащиеHTML(Элемент) - - Результат = Новый Массив; - Для каждого ДочернийУзел Из Элемент.ДочерниеУзлы Цикл - Если ТипЗнч(ДочернийУзел) = Тип("ЭлементБлокHTML") - ИЛИ ТипЗнч(ДочернийУзел) = Тип("ЭлементHTML") - ИЛИ ТипЗнч(ДочернийУзел) = Тип("ТекстDOM") - ИЛИ ТипЗнч(ДочернийУзел) = Тип("КомментарийDOM") - ИЛИ ТипЗнч(ДочернийУзел) = Тип("ЭлементТаблицаHTML") - ИЛИ ТипЗнч(ДочернийУзел) = Тип("ЭлементФорматированногоТекстаHTML") Тогда - - Результат.Добавить(ДочернийУзел); - КонецЕсли; - КонецЦикла; - Возврат Результат; - -КонецФункции - // Получает объект ДокументHTML из текста HTML. // // Параметры: -// ТекстHTML - Строка - +// ТекстHTML - Строка // // Возвращаемое значение: // ДокументHTML - созданный документ HTML. +// Функция ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекстHTML,Кодировка = Неопределено) Экспорт Построитель = Новый ПостроительDOM; @@ -5339,6 +4927,7 @@ // // Возвращаемое значение: // ДокументHTML - созданный документ HTML. +// Функция ПолучитьДокументHTMLИзОбычногоТекста(Текст) Экспорт ДокументHTML = Новый ДокументHTML; @@ -6473,8 +6062,8 @@ // Определяет папку для электронного письма. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого определяется папка. +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого определяется папка. // // Возвращаемое значение: // СправочникСсылка.ПапкиЭлектронныхПисем - папка, определенная для письма. @@ -6554,8 +6143,8 @@ // Определяет папку для электронного письма по умолчанию. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого определяется папка. +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо для которого определяется папка. // ВключаяПроверкиПисьмаОснования - Булево - признак необходимости проверки на определение папки в папку письма // основания. // @@ -6762,6 +6351,10 @@ ПапкиДляРасчета = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Папка"); ТаблицаПапок = ОпределитьПапкиДляМассиваПисем(МассивПисем); + Если ТаблицаПапок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; @@ -6973,8 +6566,9 @@ // Определяет признак изменения пометки удаления при записи письма. // // Параметры: -// ПисьмоОбъект - ДокументОбъект.ЭлектронноеПисьмоИсходящее, -// ДокументОбъект.ЭлектронноеПисьмоВходящее - письмо для которого выполняется процедура. +// ПисьмоОбъект - ДокументОбъект.ЭлектронноеПисьмоИсходящее +// - ДокументОбъект.ЭлектронноеПисьмоВходящее - письмо для которого выполняется процедура. +// Процедура ОтработатьПризнакИзмененияПометкиУдаленияПриЗаписиПисьма(ПисьмоОбъект) Экспорт Если ПисьмоОбъект.ПометкаУдаления = ПисьмоОбъект.ДополнительныеСвойства.ПометкаУдаления Тогда @@ -7013,7 +6607,8 @@ // Рассчитывает состояния предметов взаимодействий. // // Параметры: -// ТаблицаПапок - ТаблицаЗначений, Неопределено - таблица папок, которые необходимо рассчитать. +// ТаблицаПапок - ТаблицаЗначений +// - Неопределено - таблица папок, которые необходимо рассчитать. // Если Неопределено, то рассчитываются состояния всех папок. // Процедура РассчитатьРассмотреноПоПапкам(ТаблицаПапок) Экспорт @@ -7125,7 +6720,8 @@ // Рассчитывает состояния контактов взаимодействий. // // Параметры: -// ТаблицаПредметов - ТаблицаЗначений, Неопределено - таблица контактов, которые необходимо рассчитать. +// ТаблицаПредметов - ТаблицаЗначений +// - Неопределено - таблица контактов, которые необходимо рассчитать. // Если Неопределено, то рассчитываются состояния всех контактов. // Процедура РассчитатьРассмотреноПоКонтактам(ДанныеДляРасчета) Экспорт @@ -7313,7 +6909,8 @@ // Рассчитывает состояния предметов взаимодействий. // // Параметры: -// ТаблицаПредметов - ТаблицаЗначений, Неопределено - таблица предметов, которые необходимо рассчитать. +// ТаблицаПредметов - ТаблицаЗначений +// - Неопределено - таблица предметов, которые необходимо рассчитать. // Если Неопределено, то рассчитываются состояния всех предметов. // Процедура РассчитатьРассмотреноПоПредметам(ДанныеДляРасчета) Экспорт @@ -7473,7 +7070,9 @@ // Формирует таблицу данных для расчета состояний папок и предметов взаимодействий. // // Параметры: -// ДанныеДляРасчета - Структура, ВыборкаИзРезультатовЗапроса, Массив - данные, на основании +// ДанныеДляРасчета - Структура +// - ВыборкаИзРезультатовЗапроса +// - Массив - данные, на основании // которых будет формироваться таблица. // ИмяРеквизита - Строка - может принимать значения "Предмет" или "Папка". // @@ -7665,6 +7264,7 @@ // Параметры: // ПолеВводаФормы - элемент-владелец списка, // Интервал - интервал, с которым необходимо заполнить список, по умолчанию час. +// Процедура ЗаполнитьСписокВыбораВремени(ПолеВводаФормы, Интервал = 3600) Экспорт НачалоРабочегоДня = '00010101000000'; @@ -7692,7 +7292,8 @@ // и типа переданного параметра. // // Параметры: -// ЗначениеОтбора - СправочникСсылка, ДокументСсылка - значение отбора панели навигации. +// ЗначениеОтбора - СправочникСсылка +// - ДокументСсылка - значение отбора панели навигации. // // Возвращаемое значение: // Строка - текст запроса динамического списка. @@ -7818,8 +7419,8 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&РеквизитПредмет", ТекстПредмет); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&ОтборКонтакт", ТекстОтборКонтакт); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ТекстСоединенияТаблицаКонтактов", ТекстСоединениеТаблицаКонтактов); - - Возврат ТекстЗапроса; + + Возврат ТекстЗапроса; КонецФункции @@ -8229,7 +7830,7 @@ УжеВМассиве[ИДЭлемента] = Истина; КонецЕсли; - КонецЦикла; + КонецЦикла; КонецЕсли; @@ -8361,7 +7962,6 @@ КонецЕсли; ЯвляетсяВзаимодействием = ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ТипПредмета); - СписокВыбораТипаПредмета.Добавить(Метаданные.НайтиПоТипу(ТипПредмета).ПолноеИмя(), Строка(ТипПредмета), ЯвляетсяВзаимодействием); КонецЦикла; @@ -8718,4 +8318,547 @@ КонецПроцедуры +// Формирует текст запроса для поиска контактов по телефону и выполняет его. +// +// Параметры: +// Телефон - Строка - строка, содержащая телефон. +// НайденныеКонтакты - ТаблицаЗначений. +// +// Возвращаемое значение: +// Булево - Истина, если найден хотя бы один контакт. +// +Функция НайтиКонтактыПоТелефону(Знач Телефон, НайденныеКонтакты) Экспорт + + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); + + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаКонтактнойИнформации.Ссылка КАК Контакт, + | ПОДСТРОКА(ТаблицаКонтактнойИнформации.Представление, 1, 1000)КАК Представление, + | ТаблицаКонтактнойИнформации.Ссылка.Наименование КАК Наименование, + | """" КАК НаименованиеВладельца + |ИЗ + | Справочник.Пользователи.КонтактнаяИнформация КАК ТаблицаКонтактнойИнформации + |ГДЕ + | ПОДСТРОКА(ТаблицаКонтактнойИнформации.Представление, 1, 100) = &Телефон + | И (ТаблицаКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон) + | ИЛИ ТаблицаКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Факс)) + | И (НЕ ТаблицаКонтактнойИнформации.Ссылка.ПометкаУдаления) + |"; + + Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл + + Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда + Продолжить; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ТаблицаКонтактнойИнформации.Ссылка, + | ПОДСТРОКА(ТаблицаКонтактнойИнформации.Представление, 1, 1000), + | ТаблицаКонтактнойИнформации.Ссылка." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование, + | " + ?(ЭлементМассиваОписания.ЕстьВладелец," ТаблицаКонтактнойИнформации.Ссылка.Владелец.Наименование","""""") + " + |ИЗ + | Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК ТаблицаКонтактнойИнформации + |ГДЕ + | ПОДСТРОКА(ТаблицаКонтактнойИнформации.Представление, 1, 100) = &Телефон + | И (ТаблицаКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон) + | ИЛИ ТаблицаКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Факс)) + | И (НЕ ТаблицаКонтактнойИнформации.Ссылка.ПометкаУдаления) + | " + ?(ЭлементМассиваОписания.Иерархический," И (НЕ ТаблицаКонтактнойИнформации.Ссылка.ЭтоГруппа)",""); + + КонецЦикла; + + ТекстЗапроса = ТекстЗапроса + " + |УПОРЯДОЧИТЬ ПО + | Наименование"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Телефон", Телефон); + ТаблицаКонтакты = Запрос.Выполнить().Выгрузить(); + + Если ТаблицаКонтакты = Неопределено ИЛИ ТаблицаКонтакты.Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; + + ЗаполнитьНайденныеКонтакты(ТаблицаКонтакты, НайденныеКонтакты); + Возврат Истина; + +КонецФункции + +// Формирует текст запроса для поиска контактов по началу наименования и выполняет его. +// +// Параметры: +// Наименование - Строка - строка, содержащая начало наименования контакта. +// +// Возвращаемое значение: +// ТаблицаЗначений - результат выполненного запроса выгруженный в таблицу значений. +// +Функция НайтиКонтактыПоНачалуНаименования(Знач СтрокаПоиска) Экспорт + + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); + + ТекстЗапроса = + "ВЫБРАТЬ + | СправочникКонтакт.Ссылка КАК Контакт, + | СправочникКонтакт.Наименование КАК Наименование, + | """" КАК НаименованиеВладельца, + | """" КАК Представление + |ИЗ + | Справочник.Пользователи КАК СправочникКонтакт + |ГДЕ + | СправочникКонтакт.Наименование ПОДОБНО &Наименование + | И (НЕ СправочникКонтакт.ПометкаУдаления) + |"; + + Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл + + Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда + Продолжить; + Иначе + + ТекстЗапроса =ТекстЗапроса + " + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ТаблицаСправочника.Ссылка, + | ТаблицаСправочника." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование, + | " + ?(ЭлементМассиваОписания.ЕстьВладелец," ТаблицаСправочника.Владелец.Наименование","""""") + ", + | """" + |ИЗ + | Справочник." +ЭлементМассиваОписания.Имя +" КАК ТаблицаСправочника + |ГДЕ + | ТаблицаСправочника.Наименование ПОДОБНО &Наименование "+?(ЭлементМассиваОписания.Иерархический, " И (НЕ ТаблицаСправочника.ЭтоГруппа)","")+" + | И (НЕ ТаблицаСправочника.ПометкаУдаления)"; + + КонецЕсли; + + КонецЦикла; + + ТекстЗапроса = ТекстЗапроса + " + |УПОРЯДОЧИТЬ ПО + | Наименование"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Запрос.УстановитьПараметр("Наименование", СтрокаПоиска + "%"); + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +Функция АвтоПодборКонтактов(Знач СтрокаПоиска) Экспорт + + Результат = Новый СписокЗначений; + НайденныеКонтакты = Новый ТаблицаЗначений; + НайденныеКонтакты.Колонки.Добавить("Ссылка", Метаданные.ОпределяемыеТипы.КонтактВзаимодействия.Тип); + НайденныеКонтакты.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + НайденныеКонтакты.Колонки.Добавить("ИмяСправочника", Новый ОписаниеТипов("Строка")); + НайденныеКонтакты.Колонки.Добавить("НаименованиеКонтакта", Новый ОписаниеТипов("Строка")); + + РезультатПоиска = НайтиКонтакты(СтрокаПоиска, Ложь, НайденныеКонтакты); + Если Не ПустаяСтрока(РезультатПоиска) Тогда + Возврат Результат; + КонецЕсли; + + Для каждого Выборка Из НайденныеКонтакты Цикл + ЗначениеВыбора = Новый Структура; + ЗначениеВыбора.Вставить("Контакт", Выборка.Ссылка); + ЗначениеВыбора.Вставить("ПредставлениеКонтакта", Выборка.НаименованиеКонтакта); + Результат.Добавить(ЗначениеВыбора, Выборка.НаименованиеКонтакта + " [" + Выборка.Представление + "]"); + КонецЦикла; + Возврат Результат; + +КонецФункции + +Функция ОтправкаПисемПриостановлена() Экспорт + + Возврат Не ОбщегоНазначения.РазделениеВключено() И Не ОбщегоНазначения.ИнформационнаяБазаФайловая() + И (Не ВключеноРегламентноеЗаданиеПолученияИОтправкиПисем() Или ЕстьЗадержкаВыполненияЗаданияПолученияИОтправкиПисем()); + +КонецФункции + +Функция ТекстПредупрежденияОПриостановкеОтправкиПисем() Экспорт + + Если Не ОтправкаПисемПриостановлена() Тогда + Возврат ""; + КонецЕсли; + + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат НСтр("ru = 'Получение и отправка писем приостановлены. Обратитесь к администратору.'"); + КонецЕсли; + + Если ВключеноРегламентноеЗаданиеПолученияИОтправкиПисем() Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + Возврат СтроковыеФункции.ФорматированнаяСтрока(НСтр( + "ru = 'Регламентное задание Получение и отправка писем не было выполнено по расписанию. Подробнее'")); + Иначе + Возврат СтроковыеФункции.ФорматированнаяСтрока(НСтр( + "ru = 'Регламентное задание Получение и отправка писем не было выполнено по расписанию.'")); + КонецЕсли; + Иначе + Возврат СтроковыеФункции.ФорматированнаяСтрока(НСтр( + "ru = 'Регламентное задание Получение и отправка писем отключено, доставка писем не выполняется. Включить'")); + КонецЕсли; + +КонецФункции + +Функция ВключеноРегламентноеЗаданиеПолученияИОтправкиПисем() + + Возврат РегламентныеЗаданияСервер.ПараметрРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ПолучениеИОтправкаЭлектронныхПисем, "Использование", Ложь); + +КонецФункции + +Процедура ВключитьОтправкуИПолучениеПисем() Экспорт + + РегламентныеЗаданияСервер.УстановитьПараметрыРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ПолучениеИОтправкаЭлектронныхПисем, Новый Структура("Использование", Истина)); + +КонецПроцедуры + +Функция ЕстьЗадержкаВыполненияЗаданияПолученияИОтправкиПисем() + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат Ложь; + КонецЕсли; + + СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Метаданные", + Метаданные.РегламентныеЗадания.ПолучениеИОтправкаЭлектронныхПисем)); + + Если СписокЗаданий.Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; + + РегламентноеЗадание = СписокЗаданий[0]; + ФоновоеЗадание = РегламентноеЗадание.ПоследнееЗадание; + Если ФоновоеЗадание = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Расписание = РегламентноеЗадание.Расписание; + + Возврат Расписание.ТребуетсяВыполнение(ТекущаяДата() - Расписание.ПериодПовтораВТечениеДня, // АПК:143 - Не локализуется. + ФоновоеЗадание.Начало, ФоновоеЗадание.Конец); + +КонецФункции + +////////////////////////////////////////////////////////////////////////////////// +// Работа с элементами и реквизитами форм взаимодействий. + +// Устанавливает условное оформление в форме взаимодействия. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма, для которой устанавливается условное оформление. +// +Процедура УстановитьУсловноеОформлениеВзаимодействия(Форма) Экспорт + + Элемент = Форма.УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ПредставлениеКонтакта"); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Участники.Контакт"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветФонаВыделенияПоля); + +КонецПроцедуры + +// Заполняет список выбора для поля "Рассмотреть после". +// +// Параметры: +// СписокВыбора - СписокЗначений - список, который будет заполнен значения выбора. +// +Процедура ЗаполнитьСписокВыбораДляРассмотретьПосле(СписокВыбора) Экспорт + + СписокВыбора.Очистить(); + СписокВыбора.Добавить(15*60, НСтр("ru = 'Через 15 мин.'")); + СписокВыбора.Добавить(30*60, НСтр("ru = 'Через 30 мин.'")); + СписокВыбора.Добавить(60*60, НСтр("ru = 'Через 1 час'")); + СписокВыбора.Добавить(3*60*60, НСтр("ru = 'Через 3 часа'")); + СписокВыбора.Добавить(24*60*60, НСтр("ru = 'Завтра'")); + +КонецПроцедуры + +// Обработчик события при записи, возникающих в формах документов взаимодействий. +// +// Параметры: +// ТекущийОбъект - ДокументОбъект - документ, в котором возникло событие. +// Форма - ФормаКлиентскогоПриложения - форма, в которой выполняется запись: +// * Объект - ДокументОбъект.ТелефонныйЗвонок +// - ДокументОбъект.ЗапланированноеВзаимодействие +// - ДокументОбъект.СообщениеSMS +// - ДокументОбъект.Встреча +// - ДокументОбъект.ЭлектронноеПисьмоВходящее +// - ДокументОбъект.ЭлектронноеПисьмоИсходящее - ссылка на записываемый объект. +// +Процедура ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, Форма) Экспорт + + Если Форма.Рассмотрено Тогда + Форма.РассмотретьПосле = Дата(1,1,1); + КонецЕсли; + + ВзаимодействиеСсылка = ТекущийОбъект.Ссылка; + + Блокировка = Новый БлокировкаДанных(); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, ВзаимодействиеСсылка); + Блокировка.Заблокировать(); + + СтарыеЗначенияРеквизитов = СтруктураРеквизитовВзаимодействия(ВзаимодействиеСсылка); + Если СтарыеЗначенияРеквизитов.Предмет = Форма.Предмет И ЗначениеЗаполнено(Форма.Предмет) + И СтарыеЗначенияРеквизитов.Рассмотрено = Форма.Рассмотрено + И СтарыеЗначенияРеквизитов.РассмотретьПосле = Форма.РассмотретьПосле Тогда + Возврат; + КонецЕсли; + + РассчитыватьРассмотрено = (СтарыеЗначенияРеквизитов.Рассмотрено <> Форма.Рассмотрено) + ИЛИ (СтарыеЗначенияРеквизитов.Предмет <> Форма.Предмет И ЗначениеЗаполнено(Форма.Предмет)); + + СтруктураДляЗаписи = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); + СтруктураДляЗаписи.Предмет = Форма.Предмет; + СтруктураДляЗаписи.Рассмотрено = Форма.Рассмотрено; + СтруктураДляЗаписи.РассмотретьПосле = Форма.РассмотретьПосле; + СтруктураДляЗаписи.РассчитыватьРассмотрено = РассчитыватьРассмотрено; + + // Если в качестве предмета устанавливается само взаимодействие, то делать ничего не нужно. + Если Форма.Предмет = ВзаимодействиеСсылка Тогда + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); + РассчитатьРассмотреноПоКонтактамПриЗаписиИзФормы(ТекущийОбъект, Форма.Рассмотрено, Форма.Объект.Ссылка, СтарыеЗначенияРеквизитов); + Возврат; + КонецЕсли; + + // Если в качестве нового предмета установлено взаимодействие, то надо проверить предмет у нового предмета. + Если ЗначениеЗаполнено(Форма.Предмет) Тогда + + Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Форма.Предмет) Тогда + + ПредметПредмета = ПолучитьЗначениеПредмета(Форма.Предмет); + Если Не ЗначениеЗаполнено(ПредметПредмета) Тогда + // У предмета установим в качестве предмета ссылку на самого себя. + СтруктураДляЗаписи.Предмет = Форма.Предмет; + СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); + Иначе + СтруктураДляЗаписи.Предмет = ПредметПредмета; + СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; + Форма.Предмет = ПредметПредмета; + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); + КонецЕсли; + + Иначе + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); + КонецЕсли; + + Иначе + + СтруктураДляЗаписи.Предмет = ВзаимодействиеСсылка; + СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; + Форма.Предмет = ВзаимодействиеСсылка; + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ВзаимодействиеСсылка, СтруктураДляЗаписи); + + КонецЕсли; + + // Если предыдущим предметом было взаимодействие, то возможно нужно поменять предмет у всей цепочки. + Если ЗначениеЗаполнено(СтарыеЗначенияРеквизитов.Предмет) И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтарыеЗначенияРеквизитов.Предмет) Тогда + + Если НЕ (ВзаимодействиеСсылка <> СтарыеЗначенияРеквизитов.Предмет + И (Не ЗначениеЗаполнено(Форма.Предмет) + ИЛИ ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Форма.Предмет))) Тогда + + ЗаменитьПредметВЦепочкеВзаимодействий(СтарыеЗначенияРеквизитов.Предмет, Форма.Предмет, ВзаимодействиеСсылка); + + КонецЕсли; + + КонецЕсли; + + РассчитатьРассмотреноПоКонтактамПриЗаписиИзФормы(ТекущийОбъект, Форма.Рассмотрено, Форма.Объект.Ссылка, СтарыеЗначенияРеквизитов); + +КонецПроцедуры + +// Вызывает расчет признака рассмотрено по контактам при записи из формы. +// +// Параметры: +// ТекущийОбъект - ДокументОбъект - объект, в форме которого выполнялась запись. +// Рассмотрено - Булево - признак рассмотрения взаимодействия. +// Ссылка - ДокументСсылка - ссылка на документ взаимодействия. +// СтарыеЗначенияРеквизитов - Структура - содержит предыдущие сохраненные значения. +// +Процедура РассчитатьРассмотреноПоКонтактамПриЗаписиИзФормы(ТекущийОбъект, Рассмотрено, Ссылка, СтарыеЗначенияРеквизитов) + + Если (НеЗаписыватьКонтакты(ТекущийОбъект.ДополнительныеСвойства) + И СтарыеЗначенияРеквизитов.Рассмотрено <> Рассмотрено) + ИЛИ Ссылка.Пустая() Тогда + + МассивВзаимодействий = Новый Массив; + МассивВзаимодействий.Добавить(ТекущийОбъект.Ссылка); + РассчитатьРассмотреноПоКонтактам(МассивВзаимодействий); + + КонецЕсли; + +КонецПроцедуры + +// Обработчик события перед записью, возникающих в формах документов взаимодействий. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма в которой произошло событие. +// ТекущийОбъект - ДокументОбъект - документ, в котором возникло событие. +// +Процедура ПередЗаписьюВзаимодействияИзФормы(Форма, ТекущийОбъект, ИзменилисьКонтакты = Ложь) Экспорт + + ТекущийОбъект.ДополнительныеСвойства.Вставить("Предмет", Форма.Предмет); + + Если НЕ ИзменилисьКонтакты Тогда + ТекущийОбъект.ДополнительныеСвойства.Вставить("НеЗаписыватьКонтакты", Истина); + КонецЕсли; + + Если ТекущийОбъект.Ссылка.Пустая() Тогда + ТекущийОбъект.ВзаимодействиеОснование = Форма.ВзаимодействиеОснование; + КонецЕсли; + +КонецПроцедуры + +// Заполняет список доступных для создания взаимодействий. +// +// Параметры: +// ДокументыДоступныеДляСоздания - СписокЗначений - заполняемый список значений. +// +Процедура ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания) Экспорт + + Для каждого РегистрируемыйДокумент Из Метаданные.ЖурналыДокументов.Взаимодействия.РегистрируемыеДокументы Цикл + + Если Не РегистрируемыйДокумент.Имя = "ЭлектронноеПисьмоВходящее" Тогда + + ДокументыДоступныеДляСоздания.Добавить(РегистрируемыйДокумент.Имя,РегистрируемыйДокумент.Синоним); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Выполняется при загрузке сохраненных пользовательских настроек быстрого отбора ТипВзаимодействия +// в формах списков документов взаимодействий. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма для которой выполняется процедура. +// Настройки - Соответствие - загружаемые настройки. +// +Процедура ПриЗагрузкеТипаВзаимодействийИзНастроек(Форма, Настройки) Экспорт + + ТипВзаимодействия = Настройки.Получить("ТипВзаимодействия"); + Если ТипВзаимодействия <> Неопределено Тогда + Настройки.Удалить("ТипВзаимодействия"); + КонецЕсли; + + Если Форма.ТолькоПочта Тогда + Если ТипВзаимодействия = Неопределено + ИЛИ Форма.Элементы.ТипВзаимодействия.СписокВыбора.НайтиПоЗначению(ТипВзаимодействия) = Неопределено Тогда + ТипВзаимодействия = "ВсеПисьма"; + Настройки.Удалить("ТипВзаимодействия"); + КонецЕсли; + Иначе + Если ТипВзаимодействия = Неопределено Тогда + ТипВзаимодействия = "Все"; + Настройки.Удалить("ТипВзаимодействия"); + КонецЕсли; + КонецЕсли; + + Форма.ТипВзаимодействия = ТипВзаимодействия; + +КонецПроцедуры + +// Заменяет предмет в цепочке взаимодействий. +// +// Параметры: +// Цепочка - Ссылка - предмет взаимодействий, который будет заменен. +// Предмет - Ссылка - предмет, на который будет выполнена замена. +// Исключать - Ссылка - взаимодействие, в котором операция замены выполнена не будет. +// +Процедура ЗаменитьПредметВЦепочкеВзаимодействий(Цепочка, Предмет, Исключать = Неопределено) + + УстановитьПривилегированныйРежим(Истина); + МассивВзаимодействий = ВзаимодействияИзЦепочки(Цепочка, Исключать); + ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(МассивВзаимодействий, Предмет); + +КонецПроцедуры + +Функция ОбъединитьПисьма(ПервоеПисьмоДокументHTML, ВтороеПисьмоДокументHTML, ШапкаВторогоПисьма) Экспорт + + ТелоВторогоПисьма = ВтороеПисьмоДокументHTML.Тело; + УзлыHTMLВторогоПисьма = ДочерниеУзлыСодержащиеHTML(ТелоВторогоПисьма); + + ЭлементDIV = ДобавитьЭлементСАтрибутами(ТелоВторогоПисьма, "div", + Новый Структура("style", "border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt")); + + Для каждого ДочернийУзел Из УзлыHTMLВторогоПисьма Цикл + ЭлементDIV.ДобавитьДочерний(ДочернийУзел); + КонецЦикла; + + АтрибутыРазделителя = Новый Структура; + АтрибутыРазделителя.Вставить("size", "2"); + АтрибутыРазделителя.Вставить("width", "100%"); + АтрибутыРазделителя.Вставить("align", "center"); + АтрибутыРазделителя.Вставить("tabindex", "-1"); + + ЭлементРазделитель = ДобавитьЭлементСАтрибутами(ЭлементDIV, "hr", АтрибутыРазделителя); + ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементDIV, ЭлементРазделитель, УзлыHTMLВторогоПисьма); + + ШапкаПисьма = СформироватьЭлементДанныхШапкиПисьма(ЭлементDIV, ШапкаВторогоПисьма, + ШапкаВторогоПисьма.ИмяОбъектаМетаданных = "ЭлектронноеПисьмоИсходящее"); + ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементDIV, ШапкаПисьма, УзлыHTMLВторогоПисьма); + + УзлыТелаПисьма = ДочерниеУзлыСодержащиеHTML(ПервоеПисьмоДокументHTML.Тело); + Для Каждого ДочернийУзел Из УзлыТелаПисьма Цикл + ТелоВторогоПисьма.ВставитьПеред(ВтороеПисьмоДокументHTML.ИмпортироватьУзел(ДочернийУзел, Истина), ЭлементDIV); + КонецЦикла; + + СтилиCSS = ПервоеПисьмоДокументHTML.ПолучитьЭлементыПоИмени("style"); + Для каждого СтильCSS Из СтилиCSS Цикл + ЭлементыЗаголовка = ВтороеПисьмоДокументHTML.ПолучитьЭлементыПоИмени("head"); + Если ЭлементыЗаголовка.Количество() = 0 Тогда + ЭлементЗаголовка = ВтороеПисьмоДокументHTML.СоздатьЭлемент("head"); + ВтороеПисьмоДокументHTML.ПолучитьЭлементыПоИмени("html")[0].ВставитьПеред(ЭлементЗаголовка, ТелоВторогоПисьма); + Иначе + ЭлементЗаголовка = ЭлементыЗаголовка[0]; + КонецЕсли; + ЭлементЗаголовка.ДобавитьДочерний(ВтороеПисьмоДокументHTML.ИмпортироватьУзел(СтильCSS, Истина)); + КонецЦикла; + + Возврат ВтороеПисьмоДокументHTML; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////// +// Работа с объектом Документ HTML. + +// Получает массив дочерних узлов элемента HTML, содержащих HTML. +// +// Параметры: +// Элемент - ЭлементHTML +// +// Возвращаемое значение: +// Массив +// +Функция ДочерниеУзлыСодержащиеHTML(Элемент) + + Результат = Новый Массив; + Для каждого ДочернийУзел Из Элемент.ДочерниеУзлы Цикл + Если ТипЗнч(ДочернийУзел) = Тип("ЭлементБлокHTML") + ИЛИ ТипЗнч(ДочернийУзел) = Тип("ЭлементHTML") + ИЛИ ТипЗнч(ДочернийУзел) = Тип("ТекстDOM") + ИЛИ ТипЗнч(ДочернийУзел) = Тип("КомментарийDOM") + ИЛИ ТипЗнч(ДочернийУзел) = Тип("ЭлементТаблицаHTML") + ИЛИ ТипЗнч(ДочернийУзел) = Тип("ЭлементФорматированногоТекстаHTML") Тогда + + Результат.Добавить(ДочернийУзел); + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index e7ff9ae30..254edcc94 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -228,6 +228,11 @@ Функция ОтправитьПолучитьПочтуПользователяВФоне(УникальныйИдентификатор) Экспорт + Если Взаимодействия.ФоновоеЗаданиеПолучениеОтправкаПочтыВыполняется() Тогда + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Интерактивная отправка и получение почты не выполнено, так как в данный момент выполняется периодическая отправка и получение писем.'")); + Возврат Неопределено; + КонецЕсли; + ПараметрыПроцедуры = Новый Структура; ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); @@ -312,8 +317,8 @@ // Преобразует письмо в двоичные данные и подготавливает к сохранению на диск. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо, которое подготавливается к сохранению. +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо, которое подготавливается к сохранению. // УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы, из которой была вызвана команда сохранения. // // Возвращаемое значение: @@ -367,4 +372,10 @@ КонецФункции +Процедура ВключитьОтправкуИПолучениеПисем() Экспорт + + Взаимодействия.ВключитьОтправкуИПолучениеПисем(); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index 3d1c50518..4888a32e2 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -11,7 +11,7 @@ // Открывает форму нового документа "Сообщение SMS" с переданными параметрами. // // Параметры: -// ПараметрыФормы - Структура - см. ВзаимодействияКлиент.ПараметрыФормыОтправкиSMS. +// ПараметрыФормы - см. ВзаимодействияКлиент.ПараметрыФормыОтправкиSMS. // УдалитьТекст - Строка - не используется. // УдалитьПредмет - Ссылка - не используется. // УдалитьОтправлятьВТранслите - Булево - не используется. @@ -34,12 +34,15 @@ // Возвращает параметры для передачи в ВзаимодействияКлиент.ОткрытьФормуОтправкиSMS. // // Возвращаемое значение: -// Структура - со свойствами: -// * Адресаты - Строка, СписокЗначений, Массив - список получателей письма. +// Структура: +// * Адресаты - Строка +// - СписокЗначений +// - Массив - список получателей письма. // * Текст - Строка - текст письма. // * Предмет - Ссылка - предмет письма. // * ОтправлятьВТранслите - Булево - признак того, что сообщение при отправке должно быть преобразовано в латинские // символы. +// Функция ПараметрыФормыОтправкиSMS() Экспорт Результат = Новый Структура; @@ -173,8 +176,8 @@ // Сохраняет письмо на диск. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо, которое будет сохранено. +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо, которое будет сохранено. // УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы, из которой была вызвана команда сохранения. // Процедура СохранитьПисьмоНаДиск(Письмо, УникальныйИдентификатор) Экспорт @@ -213,7 +216,7 @@ // Создает взаимодействие или предмет взаимодействия. // Параметры: // ИмяФормыОбъекта - Строка - имя формы элемента создаваемого объекта. -// Основание - ОпределяемыйТип.КонтактВзаимодействия - +// Основание - ОпределяемыйТип.КонтактВзаимодействия // - ОпределяемыйТип.ПредметВзаимодействия - объект-основание. // Источник - ФормаКлиентскогоПриложения - форма объекта-основания, содержит: // * Элементы - ВсеЭлементыФормы - содержит: @@ -307,19 +310,19 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - содержит: -// * Объект - ДокументОбъект.ТелефонныйЗвонок - -// - ДокументОбъект.ЗапланированноеВзаимодействие - -// - ДокументОбъект.СообщениеSMS - -// - ДокументОбъект.Встреча - -// - ДокументОбъект.ЭлектронноеПисьмоВходящее - +// * Объект - ДокументОбъект.ТелефонныйЗвонок +// - ДокументОбъект.ЗапланированноеВзаимодействие +// - ДокументОбъект.СообщениеSMS +// - ДокументОбъект.Встреча +// - ДокументОбъект.ЭлектронноеПисьмоВходящее // - ДокументОбъект.ЭлектронноеПисьмоИсходящее - объект, который содержит форма. // * Элементы - ВсеЭлементыФормы - содержит: // ** Участники - ТаблицаФормы - информация о контактах взаимодействия. // ** СоздатьКонтакт - КнопкаФормы - элемент, выполняющий команду создания взаимодействия. // ИмяСобытия - Строка - имя события. -// Параметр - Структура - содержит: +// Параметр - Структура: // * ТипОповещения - строка - информация о типе оповещения. -// * Основание - ОпределяемыйТип.КонтактВзаимодействия - +// * Основание - ОпределяемыйТип.КонтактВзаимодействия // // Источник - Произвольный - источник события. // @@ -553,7 +556,8 @@ // // Параметры: // ЗначениеПоля - Дата - значение поля "Отработать после". -// ВыбранноеЗначение - Дата, число - либо выбранная дата, либо числовой инкремент от текущей даты. +// ВыбранноеЗначение - Дата +// - число - либо выбранная дата, либо числовой инкремент от текущей даты. // СтандартнаяОбработка - Булево - признак стандартной обработки обработчика события формы. // Модифицированность - Булево - признак модифицированности формы. // @@ -608,11 +612,11 @@ // Параметры: // Элемент - ТаблицаФормы - список в который происходит добавление, содержит: // * ТекущиеДанные - СтрокаТаблицыЗначений - содержит: -// ** Ссылка - ДокументСсылка.ТелефонныйЗвонок - -// - ДокументСсылка.ЗапланированноеВзаимодействие - -// - ДокументСсылка.СообщениеSMS - -// - ДокументСсылка.Встреча - -// - ДокументСсылка.ЭлектронноеПисьмоВходящее - +// ** Ссылка - ДокументСсылка.ТелефонныйЗвонок +// - ДокументСсылка.ЗапланированноеВзаимодействие +// - ДокументСсылка.СообщениеSMS +// - ДокументСсылка.Встреча +// - ДокументСсылка.ЭлектронноеПисьмоВходящее // - ДокументСсылка.ЭлектронноеПисьмоИсходящее - ссылка взаимодействие. // Отказ - Булево - признак отказа от добавления. // Копирование - Булево - признак копирования. @@ -744,9 +748,9 @@ // Параметры: // // Возвращаемое значение: -// Структура - содержит следующие параметры -// *ДатаПисьмаОснования - Дата - Дата письма основания. -// *ИмяПользователяУчетнойЗаписи - Строка - Имя пользователя учетной записи, которая приняла письмо-основание. +// Структура: +// *ДатаПисьмаОснования - Дата - дата письма основания. +// *ИмяПользователяУчетнойЗаписи - Строка - имя пользователя учетной записи, которая приняла письмо-основание. // *НеВызыватьКомандуПечати - Булево - признак того, что при открытии формы печати не нужно вызывать команду // печати ОС. // *ПисьмоОснование - Неопределено, @@ -754,7 +758,7 @@ // - ДокументСсылка.ЭлектронноеПисьмоВходящее, // - ДокументСсылка.ЭлектронноеПисьмоИсходящее - ссылка на письмо основание или // представление письма. -// *ТемаПисьмаОснования - Строка - Тема письма-основания. +// *ТемаПисьмаОснования - Строка - тема письма-основания. // Функция ПустаяСтруктураПараметровПисьмаВложения() Экспорт @@ -770,6 +774,22 @@ КонецФункции +Процедура ОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт + + Если НавигационнаяСсылкаФорматированнойСтроки = "ВключитьПолучениеИОтправкуПисем" Тогда + СтандартнаяОбработка = Ложь; + ВзаимодействияВызовСервера.ВключитьОтправкуИПолучениеПисем(); + Элемент.Родитель.Видимость = Ложь; + ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ПерейтиКНастройкеРегламентныхЗаданий" Тогда + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РегламентныеЗаданияКлиент"); + МодульРегламентныеЗаданияКлиент.ПерейтиКНастройкеРегламентныхЗаданий(); + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Определение типа ссылки diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl index 15317facb..0871974cd 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl @@ -19,8 +19,8 @@ // Например, это может быть форма помощника создания нового элемента справочника. // // Параметры: -// ТипКонтакта - Строка - Имя справочника контакта. -// ПараметрФормы - Структура - Параметр, который передается при открытии. +// ТипКонтакта - Строка - имя справочника контакта. +// ПараметрФормы - Структура - параметр, который передается при открытии. // // Возвращаемое значение: // Булево - Ложь, если открытие нестандартной формы не выполнено, Истина в обратном случае. diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index 7480a9cff..5e168d213 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -32,6 +32,7 @@ // * ИмяФормыНовогоКонтакта - Строка - полное имя формы для создания нового контакта, // например, "Справочник.Партнеры.Форма.ПомощникНового". // Если не заполнено, то открывается форма элемента по умолчанию. +// Функция НовоеОписаниеКонтакта() Экспорт Результат = Новый Структура; @@ -332,7 +333,7 @@ // Обрабатывает изменение быстрого отбора по типу взаимодействий динамического списка документов взаимодействий. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Содержит динамический список, в котором расположен изменяемый отбор. +// Форма - ФормаКлиентскогоПриложения - содержит динамический список, в котором расположен изменяемый отбор. // ТипВзаимодействия - Строка - имя накладываемого отбора. // Процедура ПриИзмененииОтбораТипВзаимодействий(Форма,ТипВзаимодействия) Экспорт @@ -587,13 +588,13 @@ // Формирует представление взаимодействия. // // Параметры: -// МенеджерОбъекта - ДокументОбъект.ТелефонныйЗвонок - -// - ДокументОбъект.ЗапланированноеВзаимодействие - -// - ДокументОбъект.СообщениеSMS - -// - ДокументОбъект.Встреча - -// - ДокументОбъект.ЭлектронноеПисьмоВходящее - +// МенеджерОбъекта - ДокументОбъект.ТелефонныйЗвонок +// - ДокументОбъект.ЗапланированноеВзаимодействие +// - ДокументОбъект.СообщениеSMS +// - ДокументОбъект.Встреча +// - ДокументОбъект.ЭлектронноеПисьмоВходящее // - ДокументОбъект.ЭлектронноеПисьмоИсходящее - взаимодействие, для которого получается представление. -// Данные - Структура - содержит: +// Данные - Структура: // * ДатаНачала - Дата - начало запланированного взаимодействия. // Представление - Строка - формируемое представление. // СтандартнаяОбработка - Булево - признак необходимости стандартной обработки. @@ -628,11 +629,11 @@ // Получает поля, необходимые для формирования представления для взаимодействий. // // Параметры: -// МенеджерОбъекта - ДокументОбъект.ТелефонныйЗвонок - -// - ДокументОбъект.ЗапланированноеВзаимодействие - -// - ДокументОбъект.СообщениеSMS - -// - ДокументОбъект.Встреча - -// - ДокументОбъект.ЭлектронноеПисьмоВходящее - +// МенеджерОбъекта - ДокументОбъект.ТелефонныйЗвонок +// - ДокументОбъект.ЗапланированноеВзаимодействие +// - ДокументОбъект.СообщениеSMS +// - ДокументОбъект.Встреча +// - ДокументОбъект.ЭлектронноеПисьмоВходящее // - ДокументОбъект.ЭлектронноеПисьмоИсходящее - взаимодействие, для которого получается представление. // Поля - Массив - имена полей, которые нужны для формирования представления объекта или ссылки. // СтандартнаяОбработка - Булево - признак необходимости выполнения стандартной обработки. diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl index 7dd64502e..274da3684 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl @@ -11,8 +11,7 @@ // Формирует массив описаний возможных типов контактов // // Возвращаемое значение: -// ФиксированныйМассив из Структура - содержит: -// см. ВзаимодействияКлиентСервер.НовоеОписаниеКонтакта +// ФиксированныйМассив из см. ВзаимодействияКлиентСервер.НовоеОписаниеКонтакта // Функция КонтактыВзаимодействий() Экспорт diff --git a/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl index 6469af924..9c72511a2 100644 --- a/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl @@ -28,7 +28,8 @@ // хранить одни и те же присоединенные файлы в одном месте, а не тиражировать их на все письма рассылки. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее, ДокументСсылка.ЭлектронноеПисьмоИсходящее - электронное письмо, +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее - электронное письмо, // для которого необходимо получить вложения. // ПрисоединенныеФайлы - Структура - задать сведения о файлах, присоединенных к письму: // * ВладелецФайлов - ОпределяемыйТип.ПрисоединенныйФайл - владелец присоединенных файлов. @@ -43,11 +44,11 @@ // к процедуре УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. // // Параметры: -// Объект - ДокументОбъект.Встреча - -// - ДокументОбъект.ЗапланированноеВзаимодействие - -// - ДокументОбъект.СообщениеSMS - -// - ДокументОбъект.ТелефонныйЗвонок - -// - ДокументОбъект.ЭлектронноеПисьмоВходящее - +// Объект - ДокументОбъект.Встреча +// - ДокументОбъект.ЗапланированноеВзаимодействие +// - ДокументОбъект.СообщениеSMS +// - ДокументОбъект.ТелефонныйЗвонок +// - ДокументОбъект.ЭлектронноеПисьмоВходящее // - ДокументОбъект.ЭлектронноеПисьмоИсходящее - объект, для которого нужно заполнить наборы. // Таблица - см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа // @@ -83,7 +84,8 @@ // хранить одни и те же присоединенные файлы в одном месте, а не тиражировать их на все письма рассылки. // // Параметры: -// Письмо - ДокументСсылка, ДокументОбъект - документ электронное письмо, для которого необходимо получить вложения. +// Письмо - ДокументСсылка +// - ДокументОбъект - документ электронное письмо, для которого необходимо получить вложения. // // Возвращаемое значение: // Структура, Неопределено - Неопределено, если присоединенные файлы хранятся при письме. @@ -99,4 +101,4 @@ #КонецОбласти -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl b/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl index db2edefff..cf60b1ab7 100644 --- a/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl @@ -44,14 +44,14 @@ // указанной подписки не существует, если для указанной цели наборы не применяются. // // Параметры: -// Источник - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. +// Источник - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl index 4ac73a9c8..4030f92c4 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl @@ -90,6 +90,53 @@ КонецФункции +// Параметры: +// Результат - см. ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка +// - Неопределено - версия компоненты. +// +Процедура ЗаполнитьИнформациюОКомпоненте(Результат, Версия, Идентификатор) Экспорт + + СсылкаИзОбщегоХранилища = Справочники.ОбщиеВнешниеКомпоненты.НайтиПоИдентификатору(Идентификатор, Версия); + СсылкаИзХранилища = Справочники.ВнешниеКомпоненты.НайтиПоИдентификатору(Идентификатор, Версия); + + Если СсылкаИзХранилища.Пустая() Тогда + Если СсылкаИзОбщегоХранилища.Пустая() Тогда + Результат.Состояние = "НеНайдена"; + Иначе + Результат.Состояние = "НайденаВОбщемХранилище"; + Результат.Ссылка = СсылкаИзОбщегоХранилища; + КонецЕсли; + Иначе + Если СсылкаИзОбщегоХранилища.Пустая() Тогда + Результат.Состояние = "НайденаВХранилище"; + Результат.Ссылка = СсылкаИзХранилища; + Иначе + Если ЗначениеЗаполнено(Версия) Тогда + // Компонента одной и той же версии есть и в общем хранилище, и в хранилище области. + // Приоритет компоненте области. + Результат.Состояние = "НайденаВХранилище"; + Результат.Ссылка = СсылкаИзХранилища; + Иначе + ВерсияХранилища = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаИзХранилища, "ДатаВерсии"); + ВерсияОбщегоХранилища = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаИзОбщегоХранилища, "ДатаВерсии"); + + Если ВерсияОбщегоХранилища > ВерсияХранилища Тогда + Результат.Состояние = "НайденаВОбщемХранилище"; + Результат.Ссылка = СсылкаИзОбщегоХранилища; + Иначе + // Компонента есть и в общем хранилище, и в хранилище области, + // Приоритет компоненте области. + Результат.Состояние = "НайденаВХранилище"; + Результат.Ссылка = СсылкаИзХранилища; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #Область ОбработчикиСобытийПодсистемКонфигурации // См. ГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами. diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl index 80387ce67..6e47902e7 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl @@ -12,10 +12,10 @@ // // Параметры: // Идентификатор - Строка - идентификатор объекта внешней компоненты. -// Версия - Строка - (необязательный) версия компоненты. +// Версия - Строка - версия компоненты. // // Возвращаемое значение: -// Структура - информация о компоненте +// Структура: // * Существует - Булево - признак отсутствия компоненты. // * ДоступноРедактирование - Булево - признак того, что компоненту может изменить администратор области. // * ОписаниеОшибки - Строка - краткое описание ошибки. @@ -43,7 +43,7 @@ Информация = ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия); Если Информация.Состояние = "НеНайдена" Тогда - Результат.ОписаниеОшибки = НСтр("ru = 'Внешняя компонента не найдена'"); + Результат.ОписаниеОшибки = НСтр("ru = 'Внешняя компонента не существует'"); Возврат Результат; КонецЕсли; diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl index d2cf16ad9..145824e36 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl @@ -11,7 +11,7 @@ // Параметры для вызова процедуры ВнешниеКомпонентыКлиент.ПодключитьКомпоненту. // // Возвращаемое значение: -// Структура - коллекция параметров: +// Структура: // * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте. // * ПредложитьУстановить - Булево - (по умолчанию Истина) предлагать устанавливать и обновлять компоненту. // * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. @@ -54,7 +54,7 @@ // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. // Идентификатор - Строка - идентификатор объекта внешней компоненты. // Версия - Строка - версия компоненты. -// ПараметрыПодключения - см. функцию ВнешниеКомпонентыКлиент.ПараметрыПодключения. +// ПараметрыПодключения - см. ВнешниеКомпонентыКлиент.ПараметрыПодключения. // // Пример: // @@ -155,7 +155,7 @@ // Структура параметров для см. процедуру УстановитьКомпоненту. // // Возвращаемое значение: -// Структура - коллекция параметров: +// Структура: // * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. // // Пример: @@ -185,7 +185,7 @@ // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. // Идентификатор - Строка - идентификатор объекта внешней компоненты. // Версия - Строка - (необязательный) версия компоненты. -// ПараметрыУстановки - Структура - (необязательный) см. функцию ПараметрыУстановки. +// ПараметрыУстановки - см. ПараметрыУстановки. // // Пример: // @@ -229,7 +229,7 @@ // см. процедуру ЗагрузитьКомпонентуИзФайла. // // Возвращаемое значение: -// Структура - коллекция параметров: +// Структура: // * ИмяФайлаXML - Строка - (необязательный) имя файла в составе компоненты, из которого будет извлечена информация. // * ВыражениеXPath - Строка - (необязательный) XPath путь до информации в файле. // @@ -252,12 +252,12 @@ // Структура параметров для см. процедуру ЗагрузитьКомпонентуИзФайла. // // Возвращаемое значение: -// Структура - коллекция параметров: +// Структура: // * Идентификатор - Строка -(необязательный) идентификатор объекта внешней компоненты. // * Версия - Строка - (необязательный) версия компоненты. -// * ПараметрыПоискаДополнительнойИнформации - Соответствие - (необязательный) параметры. +// * ПараметрыПоискаДополнительнойИнформации - Соответствие - (необязательный) параметры: // ** Ключ - Строка - идентификатор дополнительной запрошенной информации. -// ** Значение - Строка - см. функцию ПараметрыПоискаДополнительнойИнформации. +// ** Значение - см. ПараметрыПоискаДополнительнойИнформации. // Пример: // // ПараметрыЗагрузки = ВнешниеКомпонентыКлиент.ПараметрыЗагрузки(); @@ -285,11 +285,11 @@ // ** Версия - Строка - версия загруженной компоненты. // ** Наименование - Строка - наименование загруженной компоненты. // ** ДополнительнаяИнформация - Соответствие - дополнительная информация о компоненте, -// если не запрашивалась - пустое соответствие. -// *** Ключ - Строка - см. функцию ПараметрыПоискаДополнительнойИнформации. -// *** Значение - Строка - см. функцию ПараметрыПоискаДополнительнойИнформации. +// если не запрашивалась - пустое соответствие: +// *** Ключ - см. ПараметрыПоискаДополнительнойИнформации. +// *** Значение - см. ПараметрыПоискаДополнительнойИнформации. // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. -// ПараметрыЗагрузки - Структура - (необязательный) см. функцию ПараметрыЗагрузки. +// ПараметрыЗагрузки - см. ПараметрыЗагрузки. // // Пример: // @@ -333,21 +333,21 @@ #Область СлужебныеПроцедурыИФункции // Параметры: -// Оповещение - ОписаниеОповещения - -// Идентификатор - Строка - -// Версия - Строка - +// Оповещение - ОписаниеОповещения +// Идентификатор - Строка +// Версия - Строка // ПараметрыПодключения - см. ПараметрыПодключения // // Возвращаемое значение: -// Структура - где: -// * Оповещение - ОписаниеОповещения - -// * Идентификатор - Строка - -// * Версия - Строка - -// * Кэшировать - Булево - -// * ПредложитьУстановить - Булево - -// * ПредложитьЗагрузить - Булево - -// * ТекстПояснения - Строка - -// * ИдентификаторыСозданияОбъектов - Массив - +// Структура: +// * Оповещение - ОписаниеОповещения +// * Идентификатор - Строка +// * Версия - Строка +// * Кэшировать - Булево +// * ПредложитьУстановить - Булево +// * ПредложитьЗагрузить - Булево +// * ТекстПояснения - Строка +// * ИдентификаторыСозданияОбъектов - Массив // Функция КонтекстПодключенияКомпоненты(Оповещение, Идентификатор, Версия, ПараметрыПодключения) Экспорт diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl index 718783a0e..fb48578f1 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl @@ -11,7 +11,7 @@ // Параметры для вызова ВнешниеКомпонентыСервер.ПодключитьКомпоненту. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ИдентификаторыСозданияОбъектов - Массив Из Строка - идентификаторы экземпляров модуля объекта, // используется только для компонент, у которых есть несколько идентификаторов создания объектов. // При задании параметр Идентификатор будет использоваться только для определения компоненты. @@ -39,7 +39,7 @@ // * Подключено - Булево - признак подключения; // * ПодключаемыйМодуль - AddIn - экземпляр объекта внешней компоненты; // - ФиксированноеСоответствие - экземпляры объектов внешней компоненты, -// указанные в ПараметрыПодключения.ИдентификаторыСозданияОбъектов; +// указанные в ПараметрыПодключения.ИдентификаторыСозданияОбъектов: // ** Ключ - Строка - идентификатор, // ** Значение - AddIn - экземпляр объекта внешней компоненты. // * ОписаниеОшибки - Строка - краткое описание ошибки. @@ -66,7 +66,6 @@ // // Возвращаемое значение: // см. ПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент -// подсистемы ПолучениеВнешнихКомпонент Библиотеки интернет-поддержки пользователей (БИП). // Функция АвтоматическиОбновляемыеКомпоненты() Экспорт @@ -106,7 +105,7 @@ // Выполняет обновление внешних компонент. // // Параметры: -// ДанныеВнешнихКомпонент - ТаблицаЗначений - таблица обновляемых компонент. +// ДанныеВнешнихКомпонент - ТаблицаЗначений - таблица обновляемых компонент: // ** Идентификатор - Строка - идентификатор. // ** Версия - Строка - версия. // ** ДатаВерсии - Строка - дата версии. @@ -255,7 +254,7 @@ // Структура параметров для см. процедуру ОбновитьОбщуюКомпоненту. // // Возвращаемое значение: -// Структура - коллекция параметров: +// Структура: // * Идентификатор - Строка - идентификатор. // * Версия - Строка - версия. // * ДатаВерсии - Дата - дата версии. @@ -279,7 +278,7 @@ // Выполняет обновление общих внешних компонент. // // Параметры: -// ОписаниеКомпоненты - см. функцию ОписаниеПоставляемойОбщейКомпоненты. +// ОписаниеКомпоненты - см. ОписаниеПоставляемойОбщейКомпоненты. // Процедура ОбновитьОбщуюКомпоненту(ОписаниеКомпоненты) Экспорт diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl index 7b853b0b0..8582b2332 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl @@ -38,96 +38,82 @@ КонецФункции -// Разбирает файл компоненты для получения служебной информации о компоненте +// Возвращает информацию о компоненте из файла внешней компоненты. // // Параметры: // ДвоичныеДанные - ДвоичныеДанные - двоичные данные файла компоненты. -// ВыполнятьРазборИнфоФайла - Булево - (необязательный) требуется ли дополнительно анализировать +// ВыполнятьРазборИнфоФайла - Булево - требуется ли дополнительно анализировать // данные файла INFO.XML, если он есть. -// ПараметрыПоискаДополнительнойИнформации - Соответствие - (необязательный) -// См. ВнешниеКомпонентыКлиент.ПараметрыЗагрузки. +// ПараметрыПоискаДополнительнойИнформации - см. ВнешниеКомпонентыКлиент.ПараметрыЗагрузки. // // Возвращаемое значение: -// Структура - состав информации. -// * Разобрано - Булево - признак успешного разбора компоненты. +// Структура: +// * Разобрано - Булево - Истина, если информация о компоненте успешно извлечена. // * Реквизиты - см. РеквизитыКомпоненты // * ДвоичныеДанные - ДвоичныеДанные - выгрузка файла компоненты. // * ДополнительнаяИнформация - Соответствие - информация, полученная по переданным параметрам поиска. -// * ОписаниеОшибки - Строка - текст ошибки, в случае, если не разобрано. +// * ОписаниеОшибки - Строка - текст ошибки в случае, если Разобрано = Ложь. // -Функция ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, - ВыполнятьРазборИнфоФайла = Истина, - Знач ПараметрыПоискаДополнительнойИнформации = Неопределено) Экспорт +Функция ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, ВыполнятьРазборИнфоФайла = Истина, + Знач ПараметрыПоискаДополнительнойИнформации = Неопределено) Экспорт + Результат = Новый Структура; + Результат.Вставить("Разобрано", Ложь); + Результат.Вставить("Реквизиты", Новый Структура); + Результат.Вставить("ДвоичныеДанные", Неопределено); + Результат.Вставить("ДополнительнаяИнформация", Новый Соответствие); + Результат.Вставить("ОписаниеОшибки", ""); + + Реквизиты = РеквизитыКомпоненты(); Если ПараметрыПоискаДополнительнойИнформации = Неопределено Тогда ПараметрыПоискаДополнительнойИнформации = Новый Соответствие; КонецЕсли; - - // Значения заполнения по умолчанию. - Реквизиты = РеквизитыКомпоненты(); - - // Дополнительная запрашиваемая информация. ДополнительнаяИнформация = Новый Соответствие; - - // Контроль соответствия компоненты. НайденМанифест = Ложь; - // Разбор данных архива компоненты. Попытка Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения(); ЧтениеАрхива = Новый ЧтениеZipФайла(Поток); Исключение - ТекстОшибки = НСтр("ru = 'В файле отсутствует информация о компоненте.'"); - - Результат = РезультатРазбораКомпоненты(); - Результат.ОписаниеОшибки = ТекстОшибки; - + Результат.ОписаниеОшибки = НСтр("ru = 'В файле отсутствует информация о компоненте.'"); Возврат Результат; КонецПопытки; ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог("ExtComp"); - Для Каждого ЭлементАрхива Из ЧтениеАрхива.Элементы Цикл Если ЭлементАрхива.Зашифрован Тогда - // Очищаем временные файлы и освобождаем память. + // Очищаем временные файлы и освобождаем память. ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); ЧтениеАрхива.Закрыть(); Поток.Закрыть(); - ТекстОшибки = НСтр("ru = 'ZIP-архив не должен быть зашифрован.'"); - - Результат = РезультатРазбораКомпоненты(); - Результат.ОписаниеОшибки = ТекстОшибки; - + Результат.ОписаниеОшибки = НСтр("ru = 'ZIP-архив не должен быть зашифрован.'"); Возврат Результат; КонецЕсли; Попытка - // Поиск и разбор манифеста. + // Поиск и разбор манифеста. Если НРег(ЭлементАрхива.ИсходноеПолноеИмя) = "manifest.xml" Тогда Реквизиты.ДатаВерсии = ЭлементАрхива.ВремяИзменения; ЧтениеАрхива.Извлечь(ЭлементАрхива, ВременныйКаталог); - ВременныйФайлXML = ВременныйКаталог + ПолучитьРазделительПути() - + ЭлементАрхива.ПолноеИмя; - РазобратьМанифестКомпоненты(ВременныйФайлXML, Реквизиты); + ФайлManifestXML = ВременныйКаталог + ПолучитьРазделительПути() + ЭлементАрхива.ПолноеИмя; + ЗаполнитьРеквизитыПоManifestXML(ФайлManifestXML, Реквизиты); НайденМанифест = Истина; КонецЕсли; - Если НРег(ЭлементАрхива.ИсходноеПолноеИмя) = "info.xml" - И ВыполнятьРазборИнфоФайла Тогда + Если НРег(ЭлементАрхива.ИсходноеПолноеИмя) = "info.xml" И ВыполнятьРазборИнфоФайла Тогда ЧтениеАрхива.Извлечь(ЭлементАрхива, ВременныйКаталог); - ВременныйФайлXML = ВременныйКаталог + ПолучитьРазделительПути() - + ЭлементАрхива.ПолноеИмя; - РазобратьИнфоКомпоненты(ВременныйФайлXML, Реквизиты); + ФайлInfoXML = ВременныйКаталог + ПолучитьРазделительПути() + ЭлементАрхива.ПолноеИмя; + ЗаполнитьРеквизитыПоInfoXML(ФайлInfoXML, Реквизиты); КонецЕсли; @@ -141,10 +127,9 @@ ВыражениеXPath = ПараметрПоиска.Значение.ВыражениеXPath; ЧтениеАрхива.Извлечь(ЭлементАрхива, ВременныйКаталог); - ВременныйФайлXML = ВременныйКаталог + ПолучитьРазделительПути() - + ЭлементАрхива.ПолноеИмя; + ФайлManifestXML = ВременныйКаталог + ПолучитьРазделительПути() + ЭлементАрхива.ПолноеИмя; - ДокументDOM = ДокументDOM(ВременныйФайлXML); + ДокументDOM = ДокументDOM(ФайлManifestXML); ЗначениеXPath = ВычислитьВыражениеXPath(ВыражениеXPath, ДокументDOM); ДополнительнаяИнформация.Вставить(КлючДополнительнойИнформации, ЗначениеXPath); @@ -154,10 +139,8 @@ КонецЦикла; Исключение - Результат = РезультатРазбораКомпоненты(); Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при разборе файла %1 |%2'"), ЭлементАрхива.ИсходноеПолноеИмя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат Результат; КонецПопытки; КонецЦикла; @@ -171,13 +154,10 @@ Если Не НайденМанифест Тогда ТекстОшибки = НСтр("ru = 'В архиве компоненты отсутствует обязательный файл MANIFEST.XML.'"); - Результат = РезультатРазбораКомпоненты(); Результат.ОписаниеОшибки = ТекстОшибки; - Возврат Результат; КонецЕсли; - Результат = РезультатРазбораКомпоненты(); Результат.Разобрано = Истина; Результат.Реквизиты = Реквизиты; Результат.ДвоичныеДанные = ДвоичныеДанные; @@ -220,7 +200,7 @@ // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки. // // Параметры: -// Типы - Массив из ОбъектМетаданных - +// Типы - Массив из ОбъектМетаданных // Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт @@ -357,63 +337,36 @@ КонецФункции // Параметры: -// Параметры - Структура - параметры подготовки, где: -// * Идентификатор - Строка - идентификатор объекта внешнего компонента. -// * Версия - Строка, Неопределено - версия компоненты. +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка +// - Неопределено - версия компоненты. // // Возвращаемое значение: -// см. РезультатИнформацииОСохраненнойКомпоненте +// Структура: +// * ДоступнаЗагрузкаСПортала - Булево +// * ДоступнаЗагрузкаИзФайла - Булево +// * Состояние - Строка - "НеНайдена", "НайденаВХранилище", "НайденаВОбщемХранилище", "ОтключенаАдминистратором" +// * Местоположение - Строка +// * Ссылка - ЛюбаяСсылка +// * Реквизиты - см. РеквизитыКомпоненты // -Функция ИнформацияОСохраненнойКомпоненте(Идентификатор, - Версия = Неопределено) Экспорт +Функция ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия = Неопределено) Экспорт - Результат = РезультатИнформацииОСохраненнойКомпоненте(); - - // Шаг поиска компоненты. - СсылкаИзХранилища = Справочники.ВнешниеКомпоненты.НайтиПоИдентификатору(Идентификатор, Версия); + Результат = Новый Структура; + Результат.Вставить("Ссылка"); + Результат.Вставить("Реквизиты", РеквизитыКомпоненты()); + Результат.Вставить("Местоположение"); + Результат.Вставить("Состояние"); + Результат.Вставить("ДоступнаЗагрузкаИзФайла", ДоступнаЗагрузкаИзФайла()); + Результат.Вставить("ДоступнаЗагрузкаСПортала", ДоступнаЗагрузкаСПортала()); Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда - - МодульСправочникиОбщиеВнешниеКомпоненты = ОбщегоНазначения.ОбщийМодуль("Справочники.ОбщиеВнешниеКомпоненты"); - СсылкаИзОбщегоХранилища = МодульСправочникиОбщиеВнешниеКомпоненты.НайтиПоИдентификатору(Идентификатор, Версия); - - Если СсылкаИзХранилища.Пустая() Тогда - Если СсылкаИзОбщегоХранилища.Пустая() Тогда - Результат.Состояние = "НеНайдена"; - Иначе - Результат.Состояние = "НайденаВОбщемХранилище"; - Результат.Ссылка = СсылкаИзОбщегоХранилища; - КонецЕсли; - Иначе - Если СсылкаИзОбщегоХранилища.Пустая() Тогда - Результат.Состояние = "НайденаВХранилище"; - Результат.Ссылка = СсылкаИзХранилища; - Иначе - Если ЗначениеЗаполнено(Версия) Тогда - // Особый случай: компонента есть и в общем хранилище и в хранилище области, - // При этом одной и той же версии. Приоритет компоненте области. - Результат.Состояние = "НайденаВХранилище"; - Результат.Ссылка = СсылкаИзХранилища; - Иначе - ВерсияХранилища = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаИзХранилища, "ДатаВерсии"); - ВерсияОбщегоХранилища = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаИзОбщегоХранилища, "ДатаВерсии"); - - Если ВерсияОбщегоХранилища > ВерсияХранилища Тогда - Результат.Состояние = "НайденаВОбщемХранилище"; - Результат.Ссылка = СсылкаИзОбщегоХранилища; - Иначе - // Особый случай: компонента есть и в общем хранилище и в хранилище области, - // При этом если они оказались одной и той же версии. Приоритет компоненте области. - Результат.Состояние = "НайденаВХранилище"; - Результат.Ссылка = СсылкаИзХранилища; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Иначе - + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда + + МодульВнешниеКомпонентыВМоделиСервисаСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебный"); + МодульВнешниеКомпонентыВМоделиСервисаСлужебный.ЗаполнитьИнформациюОКомпоненте(Результат, Версия, Идентификатор); + Иначе + СсылкаИзХранилища = Справочники.ВнешниеКомпоненты.НайтиПоИдентификатору(Идентификатор, Версия); Если СсылкаИзХранилища.Пустая() Тогда Результат.Состояние = "НеНайдена"; Иначе @@ -422,7 +375,6 @@ КонецЕсли КонецЕсли; - // Шаг анализа используемой компоненты Если Результат.Состояние = "НеНайдена" Тогда Возврат Результат; КонецЕсли; @@ -430,12 +382,9 @@ Реквизиты = РеквизитыКомпоненты(); Если Результат.Состояние = "НайденаВХранилище" Тогда Реквизиты.Вставить("Использование"); - // Требуется для определения статуса ОтключенаАдминистратором. - // Есть только у компонент областей. КонецЕсли; Если Результат.Состояние = "НайденаВОбщемХранилище" Тогда Реквизиты.Удалить("ИмяФайла"); - // У общих компонент нет признака. КонецЕсли; РеквизитыОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Результат.Ссылка, Реквизиты); @@ -454,53 +403,25 @@ КонецФункции // Возвращаемое значение: -// Структура - Описание: -// * ДоступнаЗагрузкаСПортала - Булево - -// * ДоступнаЗагрузкаИзФайла - Булево - -// * Состояние - Строка - -// * Местоположение - Строка - -// * Ссылка - ЛюбаяСсылка - -// * Реквизиты - см. РеквизитыКомпоненты -// -Функция РезультатИнформацииОСохраненнойКомпоненте() - - Результат = Новый Структура; - Результат.Вставить("Ссылка"); - Результат.Вставить("Реквизиты", РеквизитыКомпоненты()); - Результат.Вставить("Местоположение"); - Результат.Вставить("Состояние"); - // Варианты: - // * НеНайдена - // * НайденаВХранилище - // * НайденаВОбщемХранилище - // * ОтключенаАдминистратором - Результат.Вставить("ДоступнаЗагрузкаИзФайла", ДоступнаЗагрузкаИзФайла()); - Результат.Вставить("ДоступнаЗагрузкаСПортала", ДоступнаЗагрузкаСПортала()); - - Возврат Результат; - -КонецФункции - -// Возвращаемое значение: -// Структура - разобранные реквизиты компоненты, где: -// * Windows_x86 - Булево - -// * Windows_x86_64 - Булево - -// * Linux_x86 - Булево - -// * Linux_x86_64 - Булево - -// * Windows_x86_Firefox - Булево - -// * Linux_x86_Firefox - Булево - -// * Linux_x86_64_Firefox - Булево - -// * Windows_x86_MSIE - Булево - -// * Windows_x86_64_MSIE - Булево - -// * Windows_x86_Chrome - Булево - -// * Linux_x86_Chrome - Булево - -// * Linux_x86_64_Chrome - Булево - -// * MacOS_x86_64_Safari - Булево - -// * Идентификатор - Строка - -// * Наименование - Строка - -// * Версия - Строка - -// * ДатаВерсии - Дата - -// * ИмяФайла - Строка - +// Структура: +// * Windows_x86 - Булево +// * Windows_x86_64 - Булево +// * Linux_x86 - Булево +// * Linux_x86_64 - Булево +// * Windows_x86_Firefox - Булево +// * Linux_x86_Firefox - Булево +// * Linux_x86_64_Firefox - Булево +// * Windows_x86_MSIE - Булево +// * Windows_x86_64_MSIE - Булево +// * Windows_x86_Chrome - Булево +// * Linux_x86_Chrome - Булево +// * Linux_x86_64_Chrome - Булево +// * MacOS_x86_64_Safari - Булево +// * Идентификатор - Строка +// * Наименование - Строка +// * Версия - Строка +// * ДатаВерсии - Дата +// * ИмяФайла - Строка // Функция РеквизитыКомпоненты() @@ -531,32 +452,17 @@ #КонецОбласти -#Область РазборКомпонентыИзФайла +#Область ПолучениеИнформацииИзФайлаКомпоненты -Функция РезультатРазбораКомпоненты() - - Результат = Новый Структура; - Результат.Вставить("Разобрано", Ложь); - Результат.Вставить("Реквизиты", Новый Структура); - Результат.Вставить("ДвоичныеДанные", Неопределено); - Результат.Вставить("ДополнительнаяИнформация", Новый Соответствие); - Результат.Вставить("ОписаниеОшибки", ""); - - Возврат Результат; - -КонецФункции - -Процедура РазобратьМанифестКомпоненты(ФайлXML, Реквизиты) +Процедура ЗаполнитьРеквизитыПоManifestXML(ИмяФайлаManifestXML, Реквизиты) ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ФайлXML); + ЧтениеXML.ОткрытьФайл(ИмяФайлаManifestXML); ЧтениеXML.ПерейтиКСодержимому(); - Если ЧтениеXML.Имя = "bundle" - И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ЧтениеXML.Имя = "bundle" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Пока ЧтениеXML.Прочитать() Цикл - Если ЧтениеXML.Имя = "component" - И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ЧтениеXML.Имя = "component" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ОперационнаяСистема = НРег(ЧтениеXML.ЗначениеАтрибута("os")); ТипКомпоненты = НРег(ЧтениеXML.ЗначениеАтрибута("type")); @@ -669,49 +575,46 @@ КонецПроцедуры -Процедура РазобратьИнфоКомпоненты(ФайлXML, Реквизиты) +Процедура ЗаполнитьРеквизитыПоInfoXML(ИмяФайлаInfoXML, Реквизиты) - ИнфоРазобран = Ложь; + ФайлПрочитан = Ложь; // Пытаемся разобрать по формату БПО. ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ФайлXML); + ЧтениеXML.ОткрытьФайл(ИмяФайлаInfoXML); ЧтениеXML.ПерейтиКСодержимому(); - Если ЧтениеXML.Имя = "drivers" - И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ЧтениеXML.Имя = "drivers" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Пока ЧтениеXML.Прочитать() Цикл - Если ЧтениеXML.Имя = "component" - И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + Если ЧтениеXML.Имя = "component" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Идентификатор = ЧтениеXML.ЗначениеАтрибута("progid"); - - Реквизиты.Идентификатор = Сред(Идентификатор, СтрНайти(Идентификатор, ".") - + 1); + + Реквизиты.Идентификатор = Сред(Идентификатор, СтрНайти(Идентификатор, ".") + 1); Реквизиты.Наименование = ЧтениеXML.ЗначениеАтрибута("name"); Реквизиты.Версия = ЧтениеXML.ЗначениеАтрибута("version"); - ИнфоРазобран = Истина; + ФайлПрочитан = Истина; КонецЕсли; КонецЦикла; КонецЕсли; ЧтениеXML.Закрыть(); - Если Не ИнфоРазобран Тогда + Если ФайлПрочитан Тогда + Возврат; + КонецЕсли; // Пытаемся разобрать по формату БЭД. - ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ФайлXML); + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьФайл(ИмяФайлаInfoXML); - info = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); - Реквизиты.Идентификатор = info.progid; - Реквизиты.Наименование = info.name; - Реквизиты.Версия = info.version; + ИнформацияКомпоненты = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + Реквизиты.Идентификатор = ИнформацияКомпоненты.progid; + Реквизиты.Наименование = ИнформацияКомпоненты.name; + Реквизиты.Версия = ИнформацияКомпоненты.version; - ЧтениеXML.Закрыть(); - - КонецЕсли; + ЧтениеXML.Закрыть(); КонецПроцедуры @@ -749,8 +652,7 @@ Процедура ПроверитьДоступностьЗагрузкиСПортала() Если Не ДоступнаЗагрузкаСПортала() Тогда - ВызватьИсключение НСтр("ru = 'Обновление внешних компонент не доступно. - |Требуется подсистема обновления внешних компонент библиотеки интернет поддержки.'"); + ВызватьИсключение НСтр("ru = 'Обновление внешних компонент с портала 1С:ИТС не доступно.'"); КонецЕсли; КонецПроцедуры @@ -783,33 +685,29 @@ КонецЕсли; Если РезультатОперации.ДанныеВнешнихКомпонент.Количество() = 0 Тогда - ТекстИсключения = НСтр("ru = 'На Портале 1С:ИТС внешняя компонента не обнаружена.'"); + ТекстИсключения = НСтр("ru = 'На портале 1С:ИТС внешняя компонента отсутствует.'"); ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ТекстИсключения); ВызватьИсключение ТекстИсключения; КонецЕсли; - СтрокаРезультата = РезультатОперации.ДанныеВнешнихКомпонент[0]; // Фокусировка на первой строке результата. + СтрокаРезультата = РезультатОперации.ДанныеВнешнихКомпонент[0]; КодОшибки = СтрокаРезультата.КодОшибки; Если ЗначениеЗаполнено(КодОшибки) Тогда ИнформацияОбОшибке = ""; Если КодОшибки = "ОтсутствуетКомпонента" Тогда - ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена внешняя компонента'"); + ИнформацияОбОшибке = НСтр("ru = 'На портале 1С:ИТС нет требуемой внешней компоненты %1.'"); ИначеЕсли КодОшибки = "ОтсутствуетВерсия" Тогда - ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена требуемая версия внешней компоненты'"); + ИнформацияОбОшибке = НСтр("ru = 'На портале 1С:ИТС нет требуемой версии внешней компоненты %1.'"); ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда - ИнформацияОбОшибке = НСтр("ru = 'При попытке загрузить файл внешней компоненты из сервиса, возникла ошибка'"); + ИнформацияОбОшибке = НСтр("ru = 'При загрузке внешней компоненты %1 произошла непредвиденная ошибка (код ФайлНеЗагружен).'"); ИначеЕсли КодОшибки = "АктуальнаяВерсия" Тогда - ИнформацияОбОшибке = НСтр("ru = 'Скорее всего произошла ошибка сервера при загрузке компоненты. - |Получен код ошибки: АктуальнаяВерсия, однако в ИБ компоненты не обнаружено.'"); + ИнформацияОбОшибке = НСтр("ru = 'При загрузке внешней компоненты %1 произошла непредвиденная ошибка (код АктуальнаяВерсия).'"); КонецЕсли; - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'При загрузке внешней компоненты %1 возникала ошибка: - |%2'"), ПредставлениеКомпоненты(Идентификатор, Версия), ИнформацияОбОшибке); - + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИнформацияОбОшибке, ПредставлениеКомпоненты(Идентификатор, Версия)); ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); - ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -825,7 +723,7 @@ НачатьТранзакцию(); Попытка - // Создание экземпляра компоненты. + // Создание экземпляра компоненты. Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент(); Объект.Заполнить(Неопределено); // Конструктор по умолчанию. ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. @@ -847,32 +745,29 @@ КонецПопытки; Иначе - ВызватьИсключение НСтр("ru = 'Ожидается существование подсистемы ""ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент""'"); + ВызватьИсключение НСтр("ru = 'Подсистема ""ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"" не внедрена в конфигурацию.'"); КонецЕсли; КонецПроцедуры -Процедура ОбновитьКомпонентыСПортала(ПараметрыПроцедуры, - АдресРезультата) Экспорт +Процедура ОбновитьКомпонентыСПортала(ПараметрыПроцедуры, АдресРезультата) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда - МассивСсылок = ПараметрыПроцедуры.МассивСсылок; - ПроверитьДоступностьЗагрузкиСПортала(); МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); - Для Каждого Ссылка Из МассивСсылок Цикл - Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Идентификатор, Версия"); + ОбновляемыеКомпоненты = ПараметрыПроцедуры.ОбновляемыеКомпоненты; + Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ОбновляемыеКомпоненты, "Идентификатор, Версия"); + Для Каждого ОбновляемаяКомпонента Из ОбновляемыеКомпоненты Цикл ОписаниеКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); - ОписаниеКомпоненты.Идентификатор = Реквизиты.Идентификатор; - ОписаниеКомпоненты.Версия = Реквизиты.Версия; + ОписаниеКомпоненты.Идентификатор = Реквизиты[ОбновляемаяКомпонента].Идентификатор; + ОписаниеКомпоненты.Версия = Реквизиты[ОбновляемаяКомпонента].Версия; КонецЦикла; РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); - Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), РезультатОперации.ИнформацияОбОшибке, РезультатОперации.СообщениеОбОшибке); ВызватьИсключение ТекстИсключения; @@ -881,7 +776,7 @@ ВнешниеКомпонентыСервер.ОбновитьВнешниеКомпоненты(РезультатОперации.ДанныеВнешнихКомпонент, АдресРезультата); Иначе - ВызватьИсключение НСтр("ru = 'Ожидается существование подсистемы ""ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент""'"); + ВызватьИсключение НСтр("ru = 'Подсистема ""ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"" не внедрена в конфигурацию.'"); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl index d75d3a0af..010295798 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl @@ -9,8 +9,9 @@ #Область СлужебныеПроцедурыИФункции // Параметры: -// Идентификатор - Строка - -// Версия - Строка, Неопределено - +// Идентификатор - Строка +// Версия - Строка +// - Неопределено // // Возвращаемое значение: // см. ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl index 5aa4a0db4..4668d1b16 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl @@ -32,7 +32,7 @@ #Область ПроверитьДоступностьКомпоненты // Параметры: -// Оповещение - ОписаниеОповещения - +// Оповещение - ОписаниеОповещения // Контекст - см. ВнешниеКомпонентыКлиент.КонтекстПодключенияКомпоненты // Процедура ПроверитьДоступностьКомпоненты(Оповещение, Контекст) @@ -312,7 +312,7 @@ // Продолжение процедуры ПодключитьКомпонентуИзРеестраWindows. // // Параметры: -// Подключено - Булево - +// Подключено - Булево // Контекст - см. ВнешниеКомпонентыКлиент.КонтекстПодключенияКомпоненты // Процедура ПодключитьКомпонентуИзРеестраWindowsПослеПопыткиПодключения(Подключено, Контекст) Экспорт @@ -369,8 +369,8 @@ // Продолжение процедуры ПодключитьКомпонентуИзРеестраWindows. // // Параметры: -// ИнформацияОбОшибке - ИнформацияОбОшибке - -// СтандартнаяОбработка - Булево - +// ИнформацияОбОшибке - ИнформацияОбОшибке +// СтандартнаяОбработка - Булево // Контекст - см. ВнешниеКомпонентыКлиент.КонтекстПодключенияКомпоненты // Процедура ПодключитьКомпонентуИзРеестраWindowsПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт @@ -532,11 +532,12 @@ #Область ПоискКомпонентыНаПортале // Параметры: -// Оповещение - ОписаниеОповещения - . -// Контекст - Структура - контекст процедуры: -// * ТекстПояснения - Строка - . -// * Идентификатор - Строка - . -// * Версия - Строка, Неопределено - . +// Оповещение - ОписаниеОповещения +// Контекст - Структура: +// * ТекстПояснения - Строка +// * Идентификатор - Строка +// * Версия - Строка +// - Неопределено // Процедура ПоискКомпонентыНаПортале(Оповещение, Контекст) @@ -564,15 +565,13 @@ #Область ОбновитьКомпонентыСПортала // Параметры: -// МассивСсылок - Массив - . +// ОбновляемыеКомпоненты - Массив из СправочникСсылка.ВнешниеКомпоненты // -Процедура ОбновитьКомпонентыСПортала(Оповещение, МассивСсылок) Экспорт +Процедура ОбновитьКомпонентыСПортала(Оповещение, ОбновляемыеКомпоненты) Экспорт ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("МассивСсылок", МассивСсылок); - + ПараметрыФормы.Вставить("ОбновляемыеКомпоненты", ОбновляемыеКомпоненты); ОповещениеФормы = Новый ОписаниеОповещения("ОбновитьКомпонентыСПорталаПриФормированииРезультата", ЭтотОбъект, Оповещение); - ОткрытьФорму("Справочник.ВнешниеКомпоненты.Форма.ОбновлениеКомпонентСПортала1СИТС", ПараметрыФормы,,,,, ОповещениеФормы); @@ -589,22 +588,21 @@ #Область СохранитьКомпонентуВФайл // Параметры: -// Ссылка - СправочникСсылка.ВнешниеКомпоненты - контейнер внешней компоненты в информационной базе. +// ВнешняяКомпонентаСсылка - СправочникСсылка.ВнешниеКомпоненты // -Процедура СохранитьКомпонентуВФайл(Ссылка) Экспорт +Процедура СохранитьКомпонентуВФайл(ВнешняяКомпонентаСсылка) Экспорт - Местоположение = ПолучитьНавигационнуюСсылку(Ссылка, "ХранилищеКомпоненты"); - ИмяФайла = ВнешниеКомпонентыСлужебныйВызовСервера.ИмяФайлаКомпоненты(Ссылка); + Местоположение = ПолучитьНавигационнуюСсылку(ВнешняяКомпонентаСсылка, "ХранилищеКомпоненты"); + ИмяФайла = ВнешниеКомпонентыСлужебныйВызовСервера.ИмяФайлаКомпоненты(ВнешняяКомпонентаСсылка); ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения внешней компоненты'"); ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы внешних компонент (*.zip)|*.zip|Все файлы (*.*)|*.*'"); Контекст = Новый Структура; - Контекст.Вставить("Ссылка", Ссылка); + Контекст.Вставить("Ссылка", ВнешняяКомпонентаСсылка); Оповещение = Новый ОписаниеОповещения("СохранитьКомпонентуВФайлПослеПолученияФайлов", ЭтотОбъект, Контекст); - ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, Местоположение, ИмяФайла, ПараметрыСохранения); КонецПроцедуры diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержки/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержки/Module.bsl index 737585f98..e538ce8ab 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержки/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержки/Module.bsl @@ -61,8 +61,9 @@ // т.к. невозможно использование функции ИмяКомпьютера в веб клиенте. // // Параметры: -// ИдентификаторКлиента - УникальныйИдентификатор - Идентификатор клиента (программы) 1С. -// НовоеРасположениеФайла - Строка - Расположение исполняемого файла для ПК на котором запущен клиент 1С. +// ИдентификаторКлиента - УникальныйИдентификатор - идентификатор клиента (программы) 1С. +// НовоеРасположениеФайла - Строка - расположение исполняемого файла для ПК на котором запущен клиент 1С. +// Процедура СохранитьРасположениеИсполняемогоФайлаВызовОнлайнПоддержки(ИдентификаторКлиента, НовоеРасположениеФайла) Экспорт ТекущееРасположениеФайла = ВызовОнлайнПоддержкиВызовСервера.РасположениеИсполняемогоФайла(ИдентификаторКлиента); @@ -78,11 +79,11 @@ // Записывает в регистр сведений настройки учетных записей пользователей для запуска приложения. // // Параметры: -// Пользователь - УникальныйИдентификатор - Текущий пользователь информационной базы. -// Логин - Строка - Данные учетной записи приложения. -// Пароль - Строка - Данные учетной записи приложения. -// ИспользоватьЛП - Булево - Если значение Ложь, параметры Логин, Пароль не доступны. -// ВидимостьКнопкиВызовОнлайнПоддержки - Булево - Отображение Кнопки запуска приложения на начальной странице. +// Пользователь - УникальныйИдентификатор - текущий пользователь информационной базы. +// Логин - Строка - данные учетной записи приложения. +// Пароль - Строка - данные учетной записи приложения. +// ИспользоватьЛП - Булево - если значение Ложь, параметры Логин, Пароль не доступны. +// ВидимостьКнопкиВызовОнлайнПоддержки - Булево - отображение Кнопки запуска приложения на начальной странице. // Процедура СохранитьНастройкиПользователяВХранилище(Логин, Пароль, diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержкиВызовСервера/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержкиВызовСервера/Module.bsl index f523058a0..332a800b0 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержкиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержкиВызовСервера/Module.bsl @@ -11,10 +11,10 @@ // Получает из регистра сведений путь к исполняемому файлу. // // Параметры: -// ИдентификаторКлиента - УникальныйИдентификатор - Идентификатор клиента (программы) 1С. +// ИдентификаторКлиента - УникальныйИдентификатор - идентификатор клиента (программы) 1С. // // ВозвращаемоеЗначение: -// Строка - Путь к исполняемому файлу на ПК текущего пользователя. +// Строка - путь к исполняемому файлу на ПК текущего пользователя. // Функция РасположениеИсполняемогоФайла(ИдентификаторКлиента) Экспорт @@ -25,10 +25,10 @@ // Получает из регистра сведений параметры для запуска приложения. // // Параметры: -// Пользователь - УникальныйИдентификатор - Текущий пользователь информационной базы. +// Пользователь - УникальныйИдентификатор - текущий пользователь информационной базы. // // ВозвращаемоеЗначение: -// Структура - Настройки пользователя для запуска приложения. +// Структура - настройки пользователя для запуска приложения. // Функция НастройкиУчетнойЗаписиПользователя() Экспорт diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl index 352c3e6eb..d4b12479a 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl @@ -59,8 +59,8 @@ Значение = ""; - RegProv = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"); - RegProv.GetStringValue("2147483649","Software\Buhphone","ProgramPath", Значение); + Объект = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"); + Объект.GetStringValue("2147483649","Software\Buhphone","ProgramPath", Значение); Если Значение = "" Или Значение = NULL Тогда ЗначениеИзРеестра = ""; @@ -77,7 +77,8 @@ // Диалоговое окно для выбора файла. // // Возвращаемое значение: -// Строка - Путь к исполняемому файлу. +// Строка - путь к исполняемому файлу. +// Процедура ВыбратьФайлВызовОнлайнПоддержки(ОповещениеОЗакрытии, ПутьКФайлу = "") Экспорт Каталог = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПутьКФайлу); @@ -110,7 +111,7 @@ // Проверяет наличие исполняемого файла по указанному пути. // // Возвращаемое значение: -// Булево - При значении Истина файл запустится по указанному пути. +// Булево - при значении Истина файл запустится по указанному пути. // Процедура НаличиеФайлаВызовОнлайнПоддержки(ОповещениеОЗакрытии, Путь) ПроверяемыйФайл = Новый Файл(Путь); diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl index 79587c54c..19b9c0e38 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl @@ -11,6 +11,7 @@ // Вызывается при изменении настроек кнопки запуска онлайн-поддержки. // Процедуру можно использовать для настройки видимости формы, // на которой расположена кнопка запуска онлайн-поддержки. +// Процедура ПриИзмененииНастроек() Экспорт КонецПроцедуры diff --git a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl index 99e462432..c43fa413a 100644 --- a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl @@ -159,10 +159,10 @@ // * ПолучатьПредшествующие - Булево - способ получения ближайшей даты: // если Истина - определяются рабочие даты, предшествующие переданным в параметре НачальныеДаты, // если Ложь - получаются ближайшие рабочие даты, следующие за начальными датами. -// Значение по умолчанию - Ложь. +// Значение по умолчанию - Ложь: // * ИгнорироватьНезаполненностьГрафика - Булево - если Истина, то в любом случае будет возвращено соответствие. // Начальные даты, для которых не будет значений из-за незаполненности графика, включены не будут. -// Значение по умолчанию - Ложь. +// Значение по умолчанию - Ложь: // * ВызыватьИсключение - Булево - вызов исключения в случае не заполненного графика // если Истина, вызвать исключение, если график не заполнен. // если Ложь - даты, по которым не удалось определить ближайшую дату, будут просто пропущены. @@ -184,10 +184,10 @@ // Параметры: // ГрафикРаботы - Справочник.Календари. // НачальныеДаты - Массив Из Дата - даты, относительно которых нужно найти ближайшие. -// ПараметрыПолучения - Структура - см. ПараметрыПолученияБлижайшихДатПоГрафику. +// ПараметрыПолучения - см. ПараметрыПолученияБлижайшихДатПоГрафику. // // Возвращаемое значение: -// Соответствие Из КлючИЗначение +// Соответствие Из КлючИЗначение: // * Ключ - Дата - начальная дата, // * Значение - Дата - ближайшая к ней дата, включенная в график. // @@ -293,7 +293,7 @@ // ДатаОкончания - Дата - дата окончания периода. // // Возвращаемое значение: -// ТаблицаЗначений - таблица с колонками: +// ТаблицаЗначений: // * ГрафикРаботы - СправочникСсылка.Календари - график работы. // * ДатаГрафика - Дата - дата в графике работы ГрафикРаботы. // * ВремяНачала - Дата - время начала работы в день ДатаГрафика. @@ -617,7 +617,7 @@ Приоритет.Порядок = "После"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.1.2.341"; + Обработчик.Версия = "3.1.3.94"; Обработчик.Процедура = "Справочники.Календари.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.ОчередьОтложеннойОбработки = 1; Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.Календари.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; @@ -647,4 +647,12 @@ КонецПроцедуры +// См. ПоискИУдалениеДублей.ТипыИсключаемыеИзВозможныхДублей +Процедура ПриДобавленииТиповИсключаемыхИзВозможныхДублей(ИсключаемыеТипы) Экспорт + + ОбщегоНазначенияКлиентСервер.ДополнитьМассив( + ИсключаемыеТипы, Метаданные.ОпределяемыеТипы.ВладелецГрафикаРаботы.Тип.Типы()); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ГрафикиРаботыКлиент/Module.bsl b/SSL/src/CommonModules/ГрафикиРаботыКлиент/Module.bsl index 0dc73ce26..dd27e9151 100644 --- a/SSL/src/CommonModules/ГрафикиРаботыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботыКлиент/Module.bsl @@ -12,7 +12,9 @@ // таким образом, чтобы строки коллекции оставались упорядоченными. // // Параметры: -// КоллекцияСтрок - Массив, ДанныеФормыКоллекция, ТаблицаЗначений - +// КоллекцияСтрок - Массив +// - ДанныеФормыКоллекция +// - ТаблицаЗначений // ПолеУпорядочивания - имя поля элемента коллекции, // по которому производится упорядочивание. // ТекущаяСтрока - отредактированная строка коллекции. diff --git a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектов/Module.bsl b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектов/Module.bsl new file mode 100644 index 000000000..24655ca15 --- /dev/null +++ b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектов/Module.bsl @@ -0,0 +1,76 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд. +// +// Параметры: +// ВидыПодключаемыхКоманд - ТаблицаЗначений - поддерживаемые виды команд, где: +// * Имя - Строка - имя вида команд. +// * ИмяПодменю - Строка - имя подменю для размещения команд этого вида на формах объектов. +// * Заголовок - Строка - наименование подменю, выводимое пользователю. +// * Картинка - Картинка - картинка подменю. +// * Отображение - ОтображениеКнопки - режим отображения подменю. +// * Порядок - Число - порядок подменю в командной панели формы. +// +Процедура ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд) Экспорт + + Если ВидыПодключаемыхКоманд.Найти("Администрирование", "Имя") = Неопределено Тогда + + Вид = ВидыПодключаемыхКоманд.Добавить(); + Вид.Имя = "Администрирование"; + Вид.ИмяПодменю = "Сервис"; + Вид.Заголовок = НСтр("ru = 'Сервис'"); + Вид.Порядок = 80; + Вид.Картинка = БиблиотекаКартинок.ПодменюСервис; + Вид.Отображение = ОтображениеКнопки.КартинкаИТекст; + + КонецЕсли; + +КонецПроцедуры + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. +// +// Параметры: +// НастройкиФормы - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.НастройкиФормы +// Источники - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Источники +// ПодключенныеОтчетыИОбработки - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.ПодключенныеОтчетыИОбработки +// Команды - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Команды +// +Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт + + ПодключенныеОбъекты = Новый Массив; + ГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСКомандойГрупповогоИзмененияОбъектов(ПодключенныеОбъекты); + Для каждого ПодключенныйОбъект Из ПодключенныеОбъекты Цикл + + Если ПравоДоступа("Изменение", ПодключенныйОбъект) + И Источники.Строки.Найти(ПодключенныйОбъект, "Метаданные") <> Неопределено Тогда + + Команда = Команды.Добавить(); + Команда.Вид = "Администрирование"; + Команда.Важность = "СмТакже"; + Команда.Представление = НСтр("ru = 'Изменить выделенные...'"); + Команда.РежимЗаписи = "НеЗаписывать"; + Команда.ВидимостьВФормах = "ФормаСписка"; + Команда.МножественныйВыбор = Истина; + Команда.Обработчик = "ГрупповоеИзменениеОбъектовКлиент.ОбработчикКоманды"; + Команда.ТолькоВоВсехДействиях = Истина; + Команда.Порядок = 20; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo new file mode 100644 index 000000000..995fc3e26 --- /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 4409c1762..9f98edbf2 100644 --- a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl @@ -11,11 +11,14 @@ // Открывает диалог группового изменения реквизитов для выбранных в списке объектов. // // Параметры: -// СписокЭлемент - ТаблицаФормы - элемент формы со списком; +// СписокЭлемент - ТаблицаФормы +// - Массив из ЛюбаяСсылка - элемент формы со списком. // СписокРеквизит - ДинамическийСписок - реквизит формы со списком. // Процедура ИзменитьВыделенные(СписокЭлемент, Знач СписокРеквизит = Неопределено) Экспорт + ПараметрыФормы = Новый Структура("МассивОбъектов", Новый Массив); + Если СписокРеквизит = Неопределено Тогда Форма = СписокЭлемент.Родитель; Пока ТипЗнч(Форма) <> Тип("ФормаКлиентскогоПриложения") Цикл @@ -31,7 +34,6 @@ ВыделенныеСтроки = СписокЭлемент.ВыделенныеСтроки; - ПараметрыФормы = Новый Структура("МассивОбъектов", Новый Массив); Если ТипЗнч(СписокРеквизит) = Тип("ДинамическийСписок") Тогда ПараметрыФормы.Вставить("КомпоновщикНастроек", СписокРеквизит.КомпоновщикНастроек); КонецЕсли; @@ -47,12 +49,40 @@ КонецЕсли; КонецЦикла; - Если ПараметрыФормы.МассивОбъектов.Количество() = 0 Тогда + НачатьИзменениеВыделенных(ПараметрыФормы); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Параметры: +// МассивСсылок - Массив Из ЛюбаяСсылка - ссылки выбранных объектов, для которых выполняется команда. +// ПараметрыВыполнения - см. ПодключаемыеКомандыКлиент.ПараметрыВыполненияКоманды +// +Процедура ОбработчикКоманды(Знач МассивСсылок, Знач ПараметрыВыполнения) Экспорт + ПараметрыКоманды = Новый Структура; + ПараметрыКоманды.Вставить("МассивОбъектов", МассивСсылок); + НачатьИзменениеВыделенных(ПараметрыКоманды); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Параметры: +// ПараметрыИзменения - Структура: +// * МассивОбъектов - Массив Из ЛюбаяСсылка +// * КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных +// +Процедура НачатьИзменениеВыделенных(ПараметрыГрупповогоИзменения) + + Если ПараметрыГрупповогоИзменения.МассивОбъектов.Количество() = 0 Тогда ПоказатьПредупреждение(, НСтр("ru = 'Команда не может быть выполнена для указанного объекта.'")); - Возврат; + Иначе + ОткрытьФорму("Обработка.ГрупповоеИзменениеРеквизитов.Форма", ПараметрыГрупповогоИзменения); КонецЕсли; - - ОткрытьФорму("Обработка.ГрупповоеИзменениеРеквизитов.Форма", ПараметрыФормы); КонецПроцедуры diff --git a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовПереопределяемый/Module.bsl index ef295f8ba..8611001c6 100644 --- a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовПереопределяемый/Module.bsl @@ -8,6 +8,23 @@ #Область ПрограммныйИнтерфейс +// Определить объекты метаданных, в формах списков которых +// будут выведены команды объединения дублей и замены ссылок +// см. ПоискИУдалениеДублейКлиент.ОбъединитьВыделенные и ПоискИУдалениеДублейКлиент.ЗаменитьВыделенные +// +// Параметры: +// Объекты - Массив из ОбъектМетаданных +// +// Пример: +// Объекты.Добавить(Метаданные.Справочники._ДемоНоменклатура); +// Объекты.Добавить(Метаданные.Справочники._ДемоКонтрагенты); +// +Процедура ПриОпределенииОбъектовСКомандойГрупповогоИзмененияОбъектов(Объекты) Экспорт + + + +КонецПроцедуры + // Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность // редактирования реквизитов при групповом изменении. // diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index 06c5028c9..c3ea82439 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -12,33 +12,33 @@ // или при программной загрузке данных из узла плана обмена УзелПроверкиЗапретаЗагрузки. // // Параметры: -// ДанныеИлиПолноеИмя - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект, -// РегистрСведенийНаборЗаписей, -// РегистрНакопленияНаборЗаписей, -// РегистрБухгалтерииНаборЗаписей, -// РегистрРасчетаНаборЗаписей - проверяемый элемент данных или набор записей. +// ДанныеИлиПолноеИмя - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - проверяемый элемент данных или набор записей. // - Строка - полное имя объекта метаданных, данные которого следует проверить в базе данных. // Например: "Документ.ПриходнаяНакладная". // В этом случае следует указать в параметре ИдентификаторДанных, // какие именно данные требуется прочитать из базы и проверить. // -// ИдентификаторДанных - СправочникСсылка, -// ДокументСсылка, -// ПланВидовХарактеристикСсылка, -// ПланСчетовСсылка, -// ПланВидовРасчетаСсылка, -// БизнесПроцессСсылка, -// ЗадачаСсылка, -// ПланОбменаСсылка, -// Отбор - ссылка на элемент данных или отбор набора записей, который нужно проверить. -// При этом значение для проверки будет получено из базы данных. +// ИдентификаторДанных - СправочникСсылка +// - ДокументСсылка +// - ПланВидовХарактеристикСсылка +// - ПланСчетовСсылка +// - ПланВидовРасчетаСсылка +// - БизнесПроцессСсылка +// - ЗадачаСсылка +// - ПланОбменаСсылка +// - Отбор - ссылка на элемент данных или отбор набора записей, который нужно проверить. +// При этом значение для проверки будет получено из базы данных. // - Неопределено - если не требуется получать значение для проверки из базы данных, // а нужно проверить только данные самого объекта в ДанныеИлиПолноеИмя. // @@ -47,7 +47,8 @@ // - Структура - (возвращаемое значение) - вернуть структурное описание найденных запретов, // подробнее см. функцию ДатыЗапретаИзменения.НайденЗапретИзмененияДанных. // -// УзелПроверкиЗапретаЗагрузки - Неопределено, ПланыОбменаСсылка - если Неопределено, то проверить запрет +// УзелПроверкиЗапретаЗагрузки - Неопределено +// - ПланыОбменаСсылка - если Неопределено, то проверить запрет // изменения данных; иначе - загрузку данных из указанного узла плана обмена. // // Возвращаемое значение: @@ -114,19 +115,19 @@ // При этом выполняется проверка старой и новой версии данных. // // Параметры: -// Данные - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект, -// УдалениеОбъекта, -// РегистрСведенийНаборЗаписей, -// РегистрНакопленияНаборЗаписей, -// РегистрБухгалтерииНаборЗаписей, -// РегистрРасчетаНаборЗаписей - элемент данных или набор записей. +// Данные - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект +// - УдалениеОбъекта +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - элемент данных или набор записей. // // УзелПроверкиЗапретаЗагрузки - ПланОбменаСсылка - узел, для которого требуется проверка. // @@ -150,19 +151,19 @@ Возврат; // Для текущего типа объекта не определены запреты по датам. КонецЕсли; - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ПроверкаЗапретаИзменения", Ложь); - ДополнительныеПараметры.Вставить("УзелПроверкиЗапретаЗагрузки", УзелПроверкиЗапретаЗагрузки); - ДополнительныеПараметры.Вставить("ОписаниеОшибки", ОписаниеОшибки); - ДополнительныеПараметры.Вставить("СообщитьОЗапрете", Ложь); - + ДополнительныеПараметры = ДатыЗапретаИзмененияСлужебный.ПараметрыПроверкиДатЗапрета(); + ДополнительныеПараметры.УзелПроверкиЗапретаЗагрузки = УзелПроверкиЗапретаЗагрузки; + ДополнительныеПараметры.ОписаниеОшибки = ОписаниеОшибки; ЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); - ДатыЗапретаИзмененияСлужебный.ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Данные, - Отказ, ЭтоРегистр, ЭтоРегистр, ТипЗнч(Данные) = Тип("УдалениеОбъекта"), ДополнительныеПараметры); - - ОписаниеОшибки = ДополнительныеПараметры.ОписаниеОшибки; + Результат = ДатыЗапретаИзмененияСлужебный.ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Данные, + ЭтоРегистр, ЭтоРегистр, ТипЗнч(Данные) = Тип("УдалениеОбъекта"), ДополнительныеПараметры); + ОписаниеОшибки = Результат.ОписаниеОшибки; + Если Результат.ИзменениеЗапрещено Тогда + Отказ = Истина; + КонецЕсли; + КонецПроцедуры // Обработчик события формы ПриЧтенииНаСервере, который встраивается в формы элементов справочников, @@ -171,18 +172,18 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения - форма элемента объекта или записи регистра. // -// ТекущийОбъект - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект, -// РегистрСведенийМенеджерЗаписи, -// РегистрНакопленияМенеджерЗаписи, -// РегистрБухгалтерииМенеджерЗаписи, -// РегистрРасчетаМенеджерЗаписи - менеджер записи. +// ТекущийОбъект - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект +// - РегистрСведенийМенеджерЗаписи +// - РегистрНакопленияМенеджерЗаписи +// - РегистрБухгалтерииМенеджерЗаписи +// - РегистрРасчетаМенеджерЗаписи - менеджер записи. // // Возвращаемое значение: // Булево - Истина, если проверка запрета изменения была пропущена программно. @@ -244,30 +245,13 @@ КонецПроцедуры -// Найти даты запрета по проверяемым данным -// для указанного пользователя и/или узла плана обмена. +// Найти даты запрета по проверяемым данным для указанного пользователя или узла плана обмена. // // Параметры: -// ДанныеДляПроверки - ТаблицаЗначений - возвращается функцией ШаблонДанныхДляПроверки общего модуля ДатыЗапретаИзменения. -// - Структура - где: -// * ДанныеДляПроверки - ТаблицаЗначений - возвращается функцией ШаблонДанныхДляПроверки общего -// модуля ДатыЗапретаИзменения. -// * ДействующиеДаты - см. ДатыЗапретаИзмененияСлужебный.ЗначениеПараметраСеансаДействующиеДатыЗапретаИзменения +// ДанныеДляПроверки - см. ДатыЗапретаИзменения.ШаблонДанныхДляПроверки // -// ОписаниеДанных - Неопределено - текст сообщения о запрете не формируется. -// - Структура - со свойствами: -// * НоваяВерсия - Булево - если Истина, то сообщение о запрете -// формировать для новой версии, иначе для старой версии. -// * Данные - Ссылка, Объект - ссылка или объект данных для получения -// представления, которое будет использовано в сообщении о запрете. -// - НаборЗаписей - набор записей регистра для получения -// представления, которое будет использовано в сообщении о запрете. -// - Структура - со свойствами для сообщения о запрете: -// * Регистр - Строка - полное имя регистра. -// * - НаборЗаписей - набор записей регистра. -// * Отбор - Отбор - отбор набора записей. -// - Строка - подготовленное представление данных, -// которое будет использовано в сообщении о запрете. +// ПараметрыСообщенияОЗапрете - см. ДатыЗапретаИзменения.ПараметрыСообщенияОЗапрете +// - Неопределено - формировать текст сообщения о запрете не требуется. // // ОписаниеОшибки - Null - (значение по умолчанию) - сведения о запретах не требуются. // - Строка - (возвращаемое значение) - вернуть текстовое описание найденных запретов. @@ -297,10 +281,10 @@ // загрузки данных для указанного узла. // // Возвращаемое значение: -// Булево - если Истина, значит, найден хотя бы один запрет изменения. +// Булево - если Истина, то найден хотя бы один запрет изменения. // Функция НайденЗапретИзмененияДанных(Знач ДанныеДляПроверки, - ОписаниеДанных = Неопределено, + ПараметрыСообщенияОЗапрете = Неопределено, ОписаниеОшибки = Null, УзелПроверкиЗапретаЗагрузки = Неопределено) Экспорт @@ -310,26 +294,48 @@ КонецЕсли; Возврат ДатыЗапретаИзмененияСлужебный.НайденЗапретИзмененияДанных(ДанныеДляПроверки, - ОписаниеДанных, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки); + ПараметрыСообщенияОЗапрете, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки); КонецФункции -// Возвращает готовую пустую таблицу значений (с колонками Дата, Раздел, Объект) -// для заполнения и последующей передачи в функцию НайденЗапретИзмененияДанных -// общего модуля ДатыЗапретаИзменения. +// Возвращает параметры для формирования сообщение о запрете записи или загрузки данных. +// Для использования в функции ДатыЗапретаИзменения.НайденЗапретИзмененияДанных. // // Возвращаемое значение: -// ТаблицаЗначений - таблица с колонками: -// * Дата - Дата - дата без времени, которую нужно проверить на принадлежность -// установленным запретам. +// Структура: +// * НоваяВерсия - Булево - если Истина, то сообщение о запрете необходимо +// сформировать для новой версии, иначе для старой версии. +// * Данные - ЛюбаяСсылка +// - СправочникОбъект +// - ДокументОбъект +// - НаборЗаписей - ссылка, объект данных, +// или набор записей регистра, представление которого будет выведено в сообщении о запрете. +// - Структура: +// ** Регистр - Строка - полное имя регистра. +// - НаборЗаписей - набор записей регистра. +// ** Отбор - Отбор - отбор набора записей. +// - Строка - подготовленное представление данных, +// которое будет выведено в сообщении о запрете. +// +Функция ПараметрыСообщенияОЗапрете() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Данные", ""); + Результат.Вставить("НоваяВерсия", Ложь); + Возврат Результат; + +КонецФункции + +// Возвращает новую таблицу значений с колонками Дата, Раздел и Объект +// для заполнения и последующей передачи в функцию ДатыЗапретаИзменения.НайденЗапретИзмененияДанных. // -// * Раздел - Строка - одно из имен разделов, указанных -// в процедуре ПриЗаполненииРазделовДатЗапретаИзменения -// общего модуля ДатыЗапретаИзмененияПереопределяемый. -// -// * Объект - Ссылка - один из типов объектов, указанных для раздела -// в процедуре ПриЗаполненииРазделовДатЗапретаИзменения -// общего модуля ДатыЗапретаИзмененияПереопределяемый. +// Возвращаемое значение: +// ТаблицаЗначений: +// * Дата - Дата - дата без времени, которую нужно проверить на принадлежность установленным запретам. +// * Раздел - Строка - одно из имен разделов, указанных в процедуре +// ДатыЗапретаИзмененияПереопределяемый.ПриЗаполненииРазделовДатЗапретаИзменения +// * Объект - Ссылка - один из типов объектов, указанных для раздела в процедуре +// ДатыЗапретаИзмененияПереопределяемый.ПриЗаполненииРазделовДатЗапретаИзменения. // Функция ШаблонДанныхДляПроверки() Экспорт @@ -359,19 +365,93 @@ КонецПроцедуры +// В текущем сеансе отключает и включает проверку дат запрета изменения и загрузки данных. +// Требуется для реализации специальной логики работы и ускорения пакетной обработки данных +// при записи объекта или набора записей, когда признак ОбменДанными.Загрузка не установлен. +// +// Для использования требуются полные права или привилегированный режим. +// +// Рекомендуется: +// - массовой загрузке данных из файла (если данные не попадают в запрещенный период); +// - массовой загрузке данных при обмене данными (если данные не попадают в запрещенный период); +// - в случае, когда требуется отключить проверку дат запрета не для одного объекта, +// путем вставки свойства ПропуститьПроверкуЗапретаИзменения в ДополнительныеСвойства объекта, +// а для всех объектов, которые будут записываться в рамках записи этого объекта. +// +// Параметры: +// Отключить - Булево - Истина - отключает проверку дат запрета изменения и загрузки данных. +// Ложь - включает проверку дат запрета изменения и загрузки данных. +// +// Пример: +// +// Вариант 1. Запись набора объектов вне транзакции (ТранзакцияАктивна() = Ложь). +// +// ПроверкаДатЗапретаОтключена = ДатыЗапретаИзменения.ПроверкаДатЗапретаОтключена(); +// ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Истина); +// Попытка +// // Запись набора объектов. +// // ... +// Исключение +// ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(ПроверкаДатЗапретаОтключена); +// //... +// ВызватьИсключение; +// КонецПопытки; +// ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(ПроверкаДатЗапретаОтключена); +// +// Вариант 2. Запись набора объектов в транзакции (ТранзакцияАктивна() = Истина). +// +// ПроверкаДатЗапретаОтключена = ДатыЗапретаИзменения.ПроверкаДатЗапретаОтключена(); +// ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Истина); +// НачатьТранзакцию(); +// Попытка +// БлокировкаДанных.Заблокировать(); +// // ... +// // Запись набора объектов. +// // ... +// ЗафиксироватьТранзакцию(); +// Исключение +// ОтменитьТранзакцию(); +// ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(ПроверкаДатЗапретаОтключена); +// //... +// ВызватьИсключение; +// КонецПопытки; +// ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(ПроверкаДатЗапретаОтключена); +// +Процедура ОтключитьПроверкуДатЗапрета(Отключить) Экспорт + + ПараметрыСеанса.ПропуститьПроверкуЗапретаИзменения = Отключить; + +КонецПроцедуры + +// Возвращает состояние отключения дат запрета, выполняемое +// процедурой ОтключитьПроверкуДатЗапрета. +// +// Возвращаемое значение: +// Булево +// +Функция ПроверкаДатЗапретаОтключена() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ПроверкаДатЗапретаОтключена = ПараметрыСеанса.ПропуститьПроверкуЗапретаИзменения; + УстановитьПривилегированныйРежим(Ложь); + + Возврат ПроверкаДатЗапретаОтключена; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. // Обработчик подписки на событие ПередЗаписью для проверки запрета изменения. // // Параметры: -// Источник - СправочникОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. +// Источник - СправочникОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // @@ -408,7 +488,8 @@ // Обработчик подписки на событие ПередЗаписью для проверки запрета изменения. // // Параметры: -// Источник - РегистрСведенийНаборЗаписей, РегистрНакопленияНаборЗаписей - набор записей, +// Источник - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей - набор записей, // передаваемый в подписку на событие ПередЗаписью. // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // Замещение - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. @@ -472,14 +553,14 @@ // Обработчик подписки на событие ПередУдалением для проверки запрета изменения. // // Параметры: -// Источник - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. +// Источник - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // @@ -505,8 +586,11 @@ Процедура ПроверитьДатыЗапретаИзмененияДанных( Источник, Отказ, ИсточникРегистр = Ложь, Замещение = Истина, Удаление = Ложь) - ДатыЗапретаИзмененияСлужебный.ПроверитьДатыЗапретаИзмененияЗагрузкиДанных( - Источник, Отказ, ИсточникРегистр, Замещение, Удаление); + Результат = ДатыЗапретаИзмененияСлужебный.ПроверитьДатыЗапретаИзмененияЗагрузкиДанных( + Источник, ИсточникРегистр, Замещение, Удаление); + Если Результат.ИзменениеЗапрещено Тогда + ВызватьИсключение Результат.ОписаниеОшибки; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl index 06f0d0ff6..7208c0c75 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl @@ -11,7 +11,7 @@ // Позволяет изменить работу интерфейса при встраивании. // // Параметры: -// НастройкиРаботыИнтерфейса - Структура - содержит свойство: +// НастройкиРаботыИнтерфейса - Структура: // * ИспользоватьВнешнихПользователей - Булево - начальное значение Ложь, // если установить Истина, тогда даты запрета можно будет настраивать для внешних пользователей. // @@ -25,7 +25,7 @@ // Если не указать ни одного раздела, тогда будет доступна только настройка общей даты запрета. // // Параметры: -// Разделы - ТаблицаЗначений - с колонками: +// Разделы - ТаблицаЗначений: // * Имя - Строка - имя, используемое в описании источников данных в // процедуре ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения. // @@ -55,7 +55,7 @@ // запретов и отказа от изменений запрещенного объекта. // // Параметры: -// ИсточникиДанных - ТаблицаЗначений - с колонками: +// ИсточникиДанных - ТаблицаЗначений: // * Таблица - Строка - полное имя объекта метаданных, // например Метаданные.Документы.ПриходнаяНакладная.ПолноеИмя(). // * ПолеДаты - Строка - имя реквизита объекта или табличной части, @@ -77,22 +77,23 @@ // имеется свойство РежимЗаписи. // // Параметры: -// Объект - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект, -// РегистрСведенийНаборЗаписей, -// РегистрНакопленияНаборЗаписей, -// РегистрБухгалтерииНаборЗаписей, -// РегистрРасчетаНаборЗаписей - проверяемый элемент данных или набор записей +// Объект - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - проверяемый элемент данных или набор записей // (который передается из обработчиков ПередЗаписью и ПриЧтенииНаСервере). // // ПроверкаЗапретаИзменения - Булево - установить в Ложь, чтобы пропустить проверку запрета изменения данных. -// УзелПроверкиЗапретаЗагрузки - ПланыОбменаСсылка, Неопределено - установить в Неопределено, чтобы +// УзелПроверкиЗапретаЗагрузки - ПланыОбменаСсылка +// - Неопределено - установить в Неопределено, чтобы // пропустить проверку запрета загрузки данных. // ВерсияОбъекта - Строка - установить "СтараяВерсия" или "НоваяВерсия", чтобы // выполнить проверку только старой (в базе данных) @@ -112,23 +113,22 @@ // // Параметры: // ОбъектМетаданных - ОбъектМетаданных - объект метаданных получаемых данных. -// ИдентификаторДанных - СправочникСсылка, -// ДокументСсылка, -// ПланВидовХарактеристикСсылка, -// ПланСчетовСсылка, -// ПланВидовРасчетаСсылка, -// БизнесПроцессСсылка, -// ЗадачаСсылка, -// ПланОбменаСсылка, -// Отбор - ссылка на элемент данных или отбор набора записей, который нужно проверить. -// При этом значение для проверки будет получено из базы данных. +// ИдентификаторДанных - СправочникСсылка +// - ДокументСсылка +// - ПланВидовХарактеристикСсылка +// - ПланСчетовСсылка +// - ПланВидовРасчетаСсылка +// - БизнесПроцессСсылка +// - ЗадачаСсылка +// - ПланОбменаСсылка +// - Отбор - ссылка на элемент данных или отбор набора записей, который нужно проверить. +// При этом значение для проверки будет получено из базы данных. // -// УзелПроверкиЗапретаЗагрузки - Неопределено, ПланыОбменаСсылка - если Неопределено, то проверить запрет +// УзелПроверкиЗапретаЗагрузки - Неопределено +// - ПланыОбменаСсылка - если Неопределено, то проверить запрет // изменения данных; иначе - загрузку данных из указанного узла плана обмена. // -// ДанныеДляПроверки - ТаблицаЗначений - таблица для заполнения правил проверок и последующей передачи в -// функцию НайденЗапретИзмененияДанных общего модуля ДатыЗапретаИзменения. -// см. ДатыЗапретаИзменения.ШаблонДанныхДляПроверки. +// ДанныеДляПроверки - см. ДатыЗапретаИзменения.ШаблонДанныхДляПроверки. // // Пример: // Если ТипЗнч(ИдентификаторДанных) = Тип("ДокументСсылка.Заказ") Тогда @@ -149,25 +149,24 @@ // // Параметры: // ОбъектМетаданных - ОбъектМетаданных - объект метаданных получаемых данных. -// Данные - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект, -// РегистрСведенийНаборЗаписей, -// РегистрНакопленияНаборЗаписей, -// РегистрБухгалтерииНаборЗаписей, -// РегистрРасчетаНаборЗаписей - проверяемый элемент данных или набор записей. +// Данные - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - проверяемый элемент данных или набор записей. // -// УзелПроверкиЗапретаЗагрузки - Неопределено, ПланыОбменаСсылка - если Неопределено, то проверить запрет +// УзелПроверкиЗапретаЗагрузки - Неопределено +// - ПланыОбменаСсылка - если Неопределено, то проверить запрет // изменения данных; иначе - загрузку данных из указанного узла плана обмена. // -// ДанныеДляПроверки - ТаблицаЗначений - таблица для заполнения правил проверок и последующей передачи в -// функцию НайденЗапретИзмененияДанных общего модуля ДатыЗапретаИзменения. -// см. ДатыЗапретаИзменения.ШаблонДанныхДляПроверки. +// ДанныеДляПроверки - см. ДатыЗапретаИзменения.ШаблонДанныхДляПроверки. // // Пример: // Если ТипЗнч(Данные) = Тип("ДокументОбъект.Заказ") И Данные.ЗаказНаряд Тогда diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index 1d3dcc3e0..f97001d41 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -22,21 +22,14 @@ КонецФункции -// Отключает или включает проверку запрета изменения на текущий сеанс. -// -Процедура ПропуститьПроверкуЗапретаИзменения(Пропустить = Истина) Экспорт - - ПараметрыСеанса.ПропуститьПроверкуЗапретаИзменения = Пропустить; - -КонецПроцедуры - // Устанавливает необходимость обновления версии дат запрета изменения после изменения данных // в режиме загрузки или непосредственно обновляет версию (загрузка в рамках обновления ИБ). // // Вызывается из события ПриЗаписи регистров ДатыЗапретаИзменения и СоставыГруппПользователей. // // Параметры: -// Объект - РегистрСведенийНаборЗаписей.ДатыЗапретаИзменения, РегистрСведенийНаборЗаписей.СоставыГруппПользователей - +// Объект - РегистрСведенийНаборЗаписей.ДатыЗапретаИзменения +// - РегистрСведенийНаборЗаписей.СоставыГруппПользователей // Процедура ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных(Объект) Экспорт @@ -176,7 +169,7 @@ // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке // // Параметры: -// Типы - См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке.Типы +// Типы - см. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке.Типы // Процедура ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт @@ -197,8 +190,8 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса // // Параметры: -// ИмяПараметра - Строка - -// УстановленныеПараметры - Массив - +// ИмяПараметра - Строка +// УстановленныеПараметры - Массив // Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт @@ -315,26 +308,46 @@ КонецФункции -// Ищет даты запрета изменения/загрузки данных для объекта. +// Возвращаемое значение: +// Структура: +// * ПроверкаЗапретаИзменения - Булево - если установить Ложь, проверка запрета изменения для пользователей +// будет пропущена. По умолчанию Истина. +// * УзелПроверкиЗапретаЗагрузки - Неопределено - (начальное значение) выполнить проверку изменения данных. +// - ПланыОбменаСсылка.<Имя плана обмена> - выполнить проверку +// загрузки данных для указанного узла. +// * ОписаниеОшибки - Null - если возвращать описание найденных запретов не требуются (по умолчанию). +// - Строка - если нужно вернуть текстовое описание. +// - Структура - если нужно вернуть структурное описание найденных запретов, +// подробнее см. функцию ДатыЗапретаИзменения.НайденЗапретИзмененияДанных. +// +Функция ПараметрыПроверкиДатЗапрета() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ПроверкаЗапретаИзменения", Ложь); + Результат.Вставить("УзелПроверкиЗапретаЗагрузки", Неопределено); + Результат.Вставить("ОписаниеОшибки", Null); + Возврат Результат; + +КонецФункции + +// Проверяет даты запрета изменения/загрузки данных для объекта. +// В случае если изменение/загрузка невозможно, устанавливает параметр Отказ в Истина. // // Параметры: -// Источник - СправочникОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект, -// ДокументОбъект - объект данных. -// - РегистрСведенийНаборЗаписей, -// РегистрНакопленияНаборЗаписей, -// РегистрБухгалтерииНаборЗаписей, -// РегистрРасчетаНаборЗаписей - набор записей. +// Источник - СправочникОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект +// - ДокументОбъект - объект данных. +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - набор записей. // - УдалениеОбъекта - удаление объекта при загрузке. // -// Отказ - Булево - (возвращаемое значение), будет установлено Истина, -// если объект не проходит проверки дат запрета. -// // ИсточникРегистр - Булево - Ложь - Источник является регистром, иначе объектом. // // Замещение - Булево - если источник является регистром и выполняется добавление, @@ -343,55 +356,47 @@ // Удаление - Булево - если источник является объектом и выполняется удаление объекта, // нужно указать Истина. // -// ДополнительныеПараметры - Неопределено - указанные ниже параметры имеют начальные значения. -// - Структура - со свойствами: -// * ПроверкаЗапретаИзменения - Булево - начальное значение Истина, если установить Ложь, -// проверка запрета изменения для пользователей) будет пропущена. -// * УзелПроверкиЗапретаЗагрузки - Неопределено - (начальное значение) выполнить проверку изменения данных. -// - ПланыОбменаСсылка.<Имя плана обмена> - выполнить проверку -// загрузки данных для указанного узла. -// * ОписаниеОшибки - Null - (значение по умолчанию) - сведения о запретах не требуются. -// - Строка - (возвращаемое значение) - вернуть текстовое описание найденных запретов. -// - Структура - (возвращаемое значение) - вернуть структурное описание найденных запретов, -// подробнее см. функцию ДатыЗапретаИзменения.НайденЗапретИзмененияДанных. -// * СообщитьОЗапрете - Булево - начальное значение Истина. Если указать Ложь, тогда -// непустое ОписаниеОшибки не будет отправлено пользователю и -// записано в журнал регистрации. +// ДополнительныеПараметры - Неопределено - параметры имеют начальные значения. +// - см. ПараметрыПроверкиДатЗапрета // -Процедура ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Источник, - Отказ, ИсточникРегистр, Замещение, Удаление, ДополнительныеПараметры = Неопределено) Экспорт +// Возвращаемое значение: +// Структура: +// * ИзменениеЗапрещено - Булево - Истина, если объект не проходит проверки дат запрета. +// * ОписаниеОшибки - Null +// - Строка +// - Структура - результат зависит от ДополнительныеПараметры.ОписаниеОшибки. +// +Функция ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Источник, ИсточникРегистр, Замещение, Удаление, + ДополнительныеПараметры = Неопределено) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ИзменениеЗапрещено", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); ПроверкаЗапретаИзменения = Истина; УзелПроверкиЗапретаЗагрузки = Неопределено; - ОписаниеОшибки = ""; - СообщитьОЗапрете = Истина; Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда ДополнительныеПараметры.Свойство("ПроверкаЗапретаИзменения", ПроверкаЗапретаИзменения); ДополнительныеПараметры.Свойство("УзелПроверкиЗапретаЗагрузки", УзелПроверкиЗапретаЗагрузки); - ДополнительныеПараметры.Свойство("ОписаниеОшибки", ОписаниеОшибки); - ДополнительныеПараметры.Свойство("СообщитьОЗапрете", СообщитьОЗапрете); + ДополнительныеПараметры.Свойство("ОписаниеОшибки", Результат.ОписаниеОшибки); КонецЕсли; ВерсияОбъекта = ""; Если ПропуститьПроверкуДатЗапрета(Источник, ПроверкаЗапретаИзменения, УзелПроверкиЗапретаЗагрузки, ВерсияОбъекта) Тогда - Возврат; + Возврат Результат; КонецЕсли; - ИзменениеЗапрещено = Ложь; - - Если НЕ ИсточникРегистр - И НЕ Удаление - И НЕ Источник.ЭтоНовый() Тогда + Если НЕ ИсточникРегистр И НЕ Удаление И НЕ Источник.ЭтоНовый() Тогда Если ИзменениеЗапрещено( ?(ВерсияОбъекта <> "СтараяВерсия", Источник, Источник.Метаданные().ПолноеИмя()), ?(ВерсияОбъекта <> "НоваяВерсия", Источник.Ссылка, Неопределено), - ОписаниеОшибки, + Результат.ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда - ИзменениеЗапрещено = Истина; + Результат.ИзменениеЗапрещено = Истина; КонецЕсли; ИначеЕсли ИсточникРегистр И Замещение Тогда @@ -399,22 +404,19 @@ Если ИзменениеЗапрещено( ?(ВерсияОбъекта <> "СтараяВерсия", Источник, Источник.Метаданные().ПолноеИмя()), ?(ВерсияОбъекта <> "НоваяВерсия", Источник.Отбор, Неопределено), - ОписаниеОшибки, + Результат.ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда - ИзменениеЗапрещено = Истина; + Результат.ИзменениеЗапрещено = Истина; КонецЕсли; ИначеЕсли ТипЗнч(Источник) = Тип("УдалениеОбъекта") Тогда Если ВерсияОбъекта <> "НоваяВерсия" - И ИзменениеЗапрещено( - Источник.Ссылка.Метаданные().ПолноеИмя(), - Источник.Ссылка, - ОписаниеОшибки, - УзелПроверкиЗапретаЗагрузки) Тогда + И ИзменениеЗапрещено(Источник.Ссылка.Метаданные().ПолноеИмя(), Источник.Ссылка, + Результат.ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда - ИзменениеЗапрещено = Истина; + Результат.ИзменениеЗапрещено = Истина; КонецЕсли; Иначе @@ -423,46 +425,15 @@ // ИЛИ ИсточникРегистр И НЕ Замещение // ИЛИ НЕ ИсточникРегистр И Удаление. Если ВерсияОбъекта <> "СтараяВерсия" - И ИзменениеЗапрещено( - Источник, - Неопределено, - ОписаниеОшибки, - УзелПроверкиЗапретаЗагрузки) Тогда + И ИзменениеЗапрещено(Источник, Неопределено, Результат.ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда - ИзменениеЗапрещено = Истина; + Результат.ИзменениеЗапрещено = Истина; КонецЕсли; КонецЕсли; - Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда - ДополнительныеПараметры.Вставить("ПроверкаЗапретаИзменения", ПроверкаЗапретаИзменения); - ДополнительныеПараметры.Вставить("УзелПроверкиЗапретаЗагрузки", УзелПроверкиЗапретаЗагрузки); - ДополнительныеПараметры.Вставить("ОписаниеОшибки", ОписаниеОшибки); - ДополнительныеПараметры.Вставить("СообщитьОЗапрете", СообщитьОЗапрете); - КонецЕсли; + Возврат Результат; - Если ИзменениеЗапрещено Тогда - Отказ = Истина; - КонецЕсли; - - Если Не (ИзменениеЗапрещено И СообщитьОЗапрете) Тогда - Возврат; - КонецЕсли; - - ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки); - - ЗаписьЖурналаРегистрации( - ?(УзелПроверкиЗапретаЗагрузки <> Неопределено, - НСтр("ru = 'Даты запрета изменения.Найдены запреты загрузки'", - ОбщегоНазначения.КодОсновногоЯзыка()), - НСтр("ru = 'Даты запрета изменения.Найдены запреты изменения'", - ОбщегоНазначения.КодОсновногоЯзыка())), - УровеньЖурналаРегистрации.Ошибка, - , - , - ОписаниеОшибки, - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - -КонецПроцедуры +КонецФункции // Проверяет необходимость проверки запрета изменения или загрузки данных. Функция ПропуститьПроверкуДатЗапрета(Объект, @@ -520,18 +491,19 @@ // Проверка старой версии объекта или набора записей. Если ИдентификаторДанных <> Неопределено Тогда - ОписаниеДанных = Новый Структура; - ОписаниеДанных.Вставить("НоваяВерсия", Ложь); + ПараметрыСообщенияОЗапрете = ДатыЗапретаИзменения.ПараметрыСообщенияОЗапрете(); + ПараметрыСообщенияОЗапрете.НоваяВерсия = Ложь; // Данные - это имя таблицы, требуемое для свойства ИдентификаторДанных типа Отбор, // а также когда исходные данные имеют тип УдалениеОбъекта. Если ТипЗнч(ИдентификаторДанных) = Тип("Отбор") Тогда - ОписаниеДанных.Вставить("Данные", Новый Структура); - ОписаниеДанных.Данные.Вставить("Регистр", Данные); - ОписаниеДанных.Данные.Вставить("Отбор", ИдентификаторДанных); + ОтборСтруктура = Новый Структура; + ОтборСтруктура.Вставить("Регистр", Данные); + ОтборСтруктура.Вставить("Отбор", ИдентификаторДанных); + ПараметрыСообщенияОЗапрете.Данные = ОтборСтруктура; Иначе - ОписаниеДанных.Вставить("Данные", ИдентификаторДанных); + ПараметрыСообщенияОЗапрете.Данные = ИдентификаторДанных; КонецЕсли; ДанныеДляПроверки = ДанныеДляПроверкиИзБазыДанных(Данные, @@ -542,34 +514,50 @@ ДанныеИДаты.Вставить("ДанныеДляПроверки", ДанныеДляПроверки); ЗапретНайден = НайденЗапретИзмененияДанных(ДанныеИДаты, - ОписаниеДанных, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки); + ПараметрыСообщенияОЗапрете, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки); КонецЕсли; // Проверка новой версии объекта или набора записей. Если Не ЗапретНайден И ТипЗнч(Данные) <> Тип("Строка") Тогда - ОписаниеДанных = Новый Структура; - ОписаниеДанных.Вставить("НоваяВерсия", Истина); - ОписаниеДанных.Вставить("Данные", Данные); + ПараметрыСообщенияОЗапрете = ДатыЗапретаИзменения.ПараметрыСообщенияОЗапрете(); + ПараметрыСообщенияОЗапрете.НоваяВерсия = Истина; + ПараметрыСообщенияОЗапрете.Данные = Данные; - ДанныеДляПроверки = ДанныеДляПроверкиИзОбъекта(Данные, - ДействующиеДаты, УзелПроверкиЗапретаЗагрузки); + ДанныеДляПроверки = ДанныеДляПроверкиИзОбъекта(Данные, ДействующиеДаты, УзелПроверкиЗапретаЗагрузки); ДанныеИДаты = Новый Структура; ДанныеИДаты.Вставить("ДействующиеДаты", ДействующиеДаты); ДанныеИДаты.Вставить("ДанныеДляПроверки", ДанныеДляПроверки); ЗапретНайден = НайденЗапретИзмененияДанных(ДанныеИДаты, - ОписаниеДанных, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки); + ПараметрыСообщенияОЗапрете, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки); КонецЕсли; Возврат ЗапретНайден; КонецФункции +// Найти даты запрета по проверяемым данным для указанного пользователя или узла плана обмена. // См. ДатыЗапретаИзменения.НайденЗапретИзмененияДанных. +// +// Параметры: +// ДанныеДляПроверки - см. ДатыЗапретаИзменения.НайденЗапретИзменения.ДанныеДляПроверки +// - Структура: +// * ДанныеДляПроверки - см. ДатыЗапретаИзменения.ШаблонДанныхДляПроверки +// * ДействующиеДаты - см. ДатыЗапретаИзмененияСлужебный.ЗначениеПараметраСеансаДействующиеДатыЗапретаИзменения +// +// ПараметрыСообщенияОЗапрете - см. ДатыЗапретаИзменения.НайденЗапретИзмененияДанных.ПараметрыСообщенияОЗапрете +// +// ОписаниеОшибки - см. ДатыЗапретаИзменения.НайденЗапретИзмененияДанных.ОписаниеОшибки +// +// УзелПроверкиЗапретаЗагрузки - см. ДатыЗапретаИзменения.НайденЗапретИзмененияДанных.УзелПроверкиЗапретаЗагрузки +// +// Возвращаемое значение: +// Булево - если Истина, то найден хотя бы один запрет изменения. +// Функция НайденЗапретИзмененияДанных(Знач ДанныеДляПроверки, - ОписаниеДанных = Неопределено, + ПараметрыСообщенияОЗапрете = Неопределено, ОписаниеОшибки = Null, УзелПроверкиЗапретаЗагрузки = Неопределено) Экспорт @@ -756,11 +744,11 @@ Строка.Дата = ДатаЗапрета; КонецЦикла; - Если ТипЗнч(ОписаниеДанных) = Тип("Структура") + Если ТипЗнч(ПараметрыСообщенияОЗапрете) = Тип("Структура") И ТипЗнч(ОписаниеОшибки) <> Тип("Null") И ЗапретыИзменения.Количество() > 0 Тогда - ОписаниеОшибки = СообщениеОЗапретах(ЗапретыИзменения, ОписаниеДанных, СвойстваРазделов, + ОписаниеОшибки = СообщениеОЗапретах(ЗапретыИзменения, ПараметрыСообщенияОЗапрете, СвойстваРазделов, УзелПроверкиЗапретаЗагрузки <> Неопределено, ТипЗнч(ОписаниеОшибки) = Тип("Структура")); КонецЕсли; @@ -1332,14 +1320,14 @@ // Для процедур ДанныеДляПроверкиИзБазыДанных, ДанныеДляПроверкиИзОбъекта. // // Параметры: -// ДействующиеДаты - ФиксированнаяСтруктура - -// Таблица - Строка - +// ДействующиеДаты - ФиксированнаяСтруктура +// Таблица - Строка // Возвращаемое значение: -// ФиксированнаяСтруктура - где: -// * Состав - ФиксированныйМассив из см. ОписаниеИсточникаДанных - -// * ТекстЗапроса - Строка - -// * ТекстЗапросаТолькоДаты - Строка - -// * ЭтоРегистр - Булево - +// ФиксированнаяСтруктура: +// * Состав - ФиксированныйМассив из см. ОписаниеИсточникаДанных +// * ТекстЗапроса - Строка +// * ТекстЗапросаТолькоДаты - Строка +// * ЭтоРегистр - Булево // Функция ПолучитьИсточникиДанных(ДействующиеДаты, Таблица) @@ -1439,35 +1427,35 @@ // Для процедуры УстановкаПараметровСеанса. // // Возвращаемое значение: -// ФиксированнаяСтруктура - где: -// * Версия - УникальныйИдентификатор - -// * ГруппыПользователей - ФиксированноеСоответствие - -// * ДляИнформационныхБаз - ФиксированнаяСтруктура - где: -// ** ДатыЗапретаПоОбъектамНеУказаны - Булево - -// ** Разделы - ФиксированноеСоответствие - -// * ДляПользователей - ФиксированнаяСтруктура - где: -// ** ДатыЗапретаПоОбъектамНеУказаны - Булево - -// ** Разделы - ФиксированноеСоответствие - -// * ЗапретЗагрузкиИспользуется - Булево - -// * ЗапретИзмененияИспользуется - Булево - -// * ИсточникиДанных - ФиксированноеСоответствие - -// * НачалоДня - Дата - -// * СвойстваРазделов - ФиксированнаяСтруктура - где: -// ** БезРазделовИОбъектов - Булево - -// ** ВсеРазделыБезОбъектов - Булево - -// ** ДатыЗапретаЗагрузкиВнедрены - Булево - -// ** ЕдинственныйРаздел - ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения - -// ** ИспользоватьВнешнихПользователей - Булево - -// ** ПоказыватьРазделы - Булево - -// ** ПустыеСсылкиУзловПлановОбмена - ФиксированныйМассив - -// ** Разделы - ФиксированноеСоответствие - где: -// *** Ключ - Строка - -// *** Значение - ФиксированнаяСтруктура - где: -// **** Имя - Строка - -// **** Представление - Строка - -// **** Ссылка - ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения - -// **** ТипыОбъектов- ФиксированныйМассив - -// ** РазделыБезОбъектов- ФиксированныйМассив - +// ФиксированнаяСтруктура: +// * Версия - УникальныйИдентификатор +// * ГруппыПользователей - ФиксированноеСоответствие +// * ДляИнформационныхБаз - ФиксированнаяСтруктура: +// ** ДатыЗапретаПоОбъектамНеУказаны - Булево +// ** Разделы - ФиксированноеСоответствие +// * ДляПользователей - ФиксированнаяСтруктура: +// ** ДатыЗапретаПоОбъектамНеУказаны - Булево +// ** Разделы - ФиксированноеСоответствие +// * ЗапретЗагрузкиИспользуется - Булево +// * ЗапретИзмененияИспользуется - Булево +// * ИсточникиДанных - ФиксированноеСоответствие +// * НачалоДня - Дата +// * СвойстваРазделов - ФиксированнаяСтруктура: +// ** БезРазделовИОбъектов - Булево +// ** ВсеРазделыБезОбъектов - Булево +// ** ДатыЗапретаЗагрузкиВнедрены - Булево +// ** ЕдинственныйРаздел - ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения +// ** ИспользоватьВнешнихПользователей - Булево +// ** ПоказыватьРазделы - Булево +// ** ПустыеСсылкиУзловПлановОбмена - ФиксированныйМассив +// ** Разделы - ФиксированноеСоответствие: +// *** Ключ - Строка +// *** Значение - ФиксированнаяСтруктура: +// **** Имя - Строка +// **** Представление - Строка +// **** Ссылка - ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения +// **** ТипыОбъектов- ФиксированныйМассив +// ** РазделыБезОбъектов- ФиксированныйМассив // Функция ЗначениеПараметраСеансаДействующиеДатыЗапретаИзменения() Экспорт @@ -1598,14 +1586,10 @@ КонецФункции -Функция СообщениеОЗапретах(Запреты, - ОписаниеДанных, - СвойстваРазделов, - ПоискЗапретовЗагрузки, - СтруктурноеОписание) +Функция СообщениеОЗапретах(Запреты, ПараметрыСообщенияОЗапрете, СвойстваРазделов, ПоискЗапретовЗагрузки, СтруктурноеОписание) - НоваяВерсия = ОписаниеДанных.НоваяВерсия; - Текст = ПредставлениеДанных(ОписаниеДанных.Данные); + НоваяВерсия = ПараметрыСообщенияОЗапрете.НоваяВерсия; + Текст = ПредставлениеДанных(ПараметрыСообщенияОЗапрете.Данные); Если СтруктурноеОписание Тогда ОписаниеОшибки = Новый Структура; @@ -1632,8 +1616,10 @@ Иначе Если НоваяВерсия Тогда Шаблон = НСтр("ru = '%1 невозможно поместить в запрещенный период.'"); + ИначеЕсли ЭтоУдалениеНабораДанных(ПараметрыСообщенияОЗапрете.Данные) Тогда + Шаблон = НСтр("ru = '%1 невозможно удалить в запрещенном периоде.'"); Иначе - Шаблон = НСтр("ru = '%1 в запрещенном периоде невозможно изменить.'"); + Шаблон = НСтр("ru = '%1 невозможно изменить в запрещенном периоде.'"); КонецЕсли; КонецЕсли; Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Текст) + Символы.ПС + Символы.ПС; @@ -1643,86 +1629,32 @@ Если СтруктурноеОписание Тогда ОписаниеОшибки.Вставить("ЗаголовокОшибки", СокрЛП(Текст)); + Иначе + ТекстОшибки = Текст; КонецЕсли; - ТекстОшибки = Текст; + ДобавленныеТексты = Новый Соответствие; Для Каждого Запрет Из Запреты Цикл - Текст = ""; - Проверка = Запрет.Данные; - Если Запрет.Раздел = Запрет.Объект Тогда - Если Запрет.Раздел = ПустойРаздел Тогда - Текст = Текст + НСтр("ru = 'Дате %1'"); - Иначе - Текст = Текст + НСтр("ru = 'Дате %1 по разделу ""%2""'"); - КонецЕсли; - ИначеЕсли ЗначениеЗаполнено(СвойстваРазделов.ЕдинственныйРаздел) Тогда - Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3""'"); - Иначе - Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2""'"); - КонецЕсли; - Если ПоискЗапретовЗагрузки Тогда - Текст = Текст + " " + НСтр("ru = 'соответствует запрет загрузки данных'") + " "; - Иначе - Текст = Текст + " " + НСтр("ru = 'соответствует запрет изменения данных'") + " "; - КонецЕсли; - Если Запрет.Адресат = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей Тогда - Текст = Текст + НСтр("ru = 'для всех пользователей'"); - - ИначеЕсли Запрет.Адресат = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз Тогда - Текст = Текст + НСтр("ru = 'для всех информационных баз'"); - - ИначеЕсли ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.ГруппыПользователей") - ИЛИ ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда - Текст = Текст + НСтр("ru = 'для группы пользователей ""%4""'"); - - ИначеЕсли ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.Пользователи") - ИЛИ ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - Текст = Текст + НСтр("ru = 'для пользователя ""%4""'"); - - ИначеЕсли ЗначениеЗаполнено(Запрет.Адресат) Тогда - Текст = Текст + НСтр("ru = 'для информационной базы ""%4""'"); - Иначе - Текст = Текст + НСтр("ru = 'для всех информационных баз ""%6""'"); - КонецЕсли; - Текст = Текст + " " + НСтр("ru = 'по %5'"); - Если Не СвойстваРазделов.БезРазделовИОбъектов Тогда - Если ЗначениеЗаполнено(Запрет.Раздел) Тогда - Если Запрет.Объект = Запрет.Раздел Тогда - Текст = Текст + " " + НСтр("ru = '(запрет установлен на раздел ""%2"")'"); - ИначеЕсли ЗначениеЗаполнено(СвойстваРазделов.ЕдинственныйРаздел) Тогда - Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"")'"); - Иначе - Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"" раздела ""%2"")'"); - КонецЕсли; - Иначе - Текст = Текст + " " + НСтр("ru = '(установлена общая дата запрета)'"); - КонецЕсли; - КонецЕсли; - Текст = СтрЗаменить(Текст, "%1", Формат(Проверка.Дата, "ДЛФ=Д")); - Текст = СтрЗаменить(Текст, "%2", Проверка.Раздел); - Текст = СтрЗаменить(Текст, "%3", Проверка.Объект); - Текст = СтрЗаменить(Текст, "%4", Запрет.Адресат); - Текст = СтрЗаменить(Текст, "%5", Формат(Запрет.Дата, "ДЛФ=Д")); - Текст = СтрЗаменить(Текст, "%6", Запрет.Адресат.Метаданные().Представление()); - - ТекстОшибки = ТекстОшибки + Текст + Символы.ПС + Символы.ПС; + Текст = СообщениеОЗапрете(Запрет, ПоискЗапретовЗагрузки, СвойстваРазделов, ПустойРаздел); Если СтруктурноеОписание Тогда + Проверка = Запрет.Данные; + СвойстваРаздела = СвойстваРазделов.Разделы.Получить(Проверка.Раздел); // см. ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.СвойстваРаздела + СтрокаОписанияОшибки = ОписаниеОшибки.Запреты.Добавить(); СтрокаОписанияОшибки.Дата = Проверка.Дата; - СвойстваРаздела = СвойстваРазделов.Разделы.Получить(Проверка.Раздел); // см. ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.СвойстваРаздела СтрокаОписанияОшибки.Раздел = СвойстваРаздела.Имя; СтрокаОписанияОшибки.Объект = ?(Проверка.Объект = Проверка.Раздел, Неопределено, Проверка.Объект); СтрокаОписанияОшибки.ДатаЗапрета = Запрет.Дата; СтрокаОписанияОшибки.ОбщаяДата = ?(ЗначениеЗаполнено(Запрет.Раздел), Ложь, Истина); - Если Запрет.Раздел = Запрет.Объект Тогда - СтрокаОписанияОшибки.ДляВсехОбъектов = Истина; - Иначе - СтрокаОписанияОшибки.ДляВсехОбъектов = Ложь; - КонецЕсли; + СтрокаОписанияОшибки.ДляВсехОбъектов = (Запрет.Раздел = Запрет.Объект); СтрокаОписанияОшибки.Адресат = Запрет.Адресат; СтрокаОписанияОшибки.Описание = Текст; КонецЕсли; + Если ДобавленныеТексты.Получить(Текст) = Неопределено Тогда + ДобавленныеТексты.Вставить(Текст, Истина); + ТекстОшибки = ТекстОшибки + Текст + Символы.ПС + Символы.ПС; + КонецЕсли; КонецЦикла; Если Не СтруктурноеОписание Тогда @@ -1733,6 +1665,144 @@ КонецФункции +Функция СообщениеОЗапрете(Знач Запрет, Знач ПоискЗапретовЗагрузки, Знач СвойстваРазделов, Знач ПустойРаздел) + + Если Запрет.Раздел = Запрет.Объект Тогда + ПоОбъекту = Ложь; + ПоРазделу = Запрет.Раздел <> ПустойРаздел; + Иначе + ПоОбъекту = Истина; + ПоРазделу = Не ЗначениеЗаполнено(СвойстваРазделов.ЕдинственныйРаздел); + КонецЕсли; + + ДляНеуказанного = Ложь; + ДляПользователя = Ложь; + ДляГруппыПользователей = Ложь; + ДляВсехПользователей = Ложь; + ДляИнформационнойБазы = Ложь; + ДляВсехИБПлана = Ложь; + ДляВсехИБ = Ложь; + + Если Запрет.Адресат = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей Тогда + ДляВсехПользователей = Истина; + + ИначеЕсли Запрет.Адресат = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз Тогда + ДляВсехИБ = Истина; + + ИначеЕсли ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.ГруппыПользователей") + ИЛИ ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + ДляГруппыПользователей = Истина; + + ИначеЕсли ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.Пользователи") Тогда + + Если Запрет.Адресат = Пользователи.СсылкаНеуказанногоПользователя() Тогда + ДляНеуказанного = Истина; + Иначе + ДляПользователя = Истина; + КонецЕсли; + + ИначеЕсли ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ДляПользователя = Истина; + + ИначеЕсли ЗначениеЗаполнено(Запрет.Адресат) Тогда + ДляИнформационнойБазы = Истина; + Иначе + ДляВсехИБПлана = Истина; + КонецЕсли; + + Если Не ПоискЗапретовЗагрузки Тогда + Если Не ПоРазделу И Не ПоОбъекту И ДляНеуказанного Тогда + Текст = НСтр("ru = 'Дате %1 соответствует запрет изменения данных по %5'"); + ИначеЕсли ПоРазделу И Не ПоОбъекту И ДляНеуказанного Тогда + Текст = НСтр("ru = 'Дате %1 по разделу ""%2"" соответствует запрет изменения данных по %5'"); + ИначеЕсли Не ПоРазделу И ПоОбъекту И ДляНеуказанного Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" соответствует запрет изменения данных по %5'"); + ИначеЕсли ПоРазделу И ПоОбъекту И ДляНеуказанного Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2"" соответствует запрет изменения данных по %5'"); + + ИначеЕсли Не ПоРазделу И Не ПоОбъекту И ДляПользователя Тогда + Текст = НСтр("ru = 'Дате %1 соответствует запрет изменения данных для пользователя ""%4"" по %5'"); + ИначеЕсли ПоРазделу И Не ПоОбъекту И ДляПользователя Тогда + Текст = НСтр("ru = 'Дате %1 по разделу ""%2"" соответствует запрет изменения данных для пользователя ""%4"" по %5'"); + ИначеЕсли Не ПоРазделу И ПоОбъекту И ДляПользователя Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" соответствует запрет изменения данных для пользователя ""%4"" по %5'"); + ИначеЕсли ПоРазделу И ПоОбъекту И ДляПользователя Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2"" соответствует запрет изменения данных для пользователя ""%4"" по %5'"); + + ИначеЕсли Не ПоРазделу И Не ПоОбъекту И ДляГруппыПользователей Тогда + Текст = НСтр("ru = 'Дате %1 соответствует запрет изменения данных для группы пользователей ""%4"" по %5'"); + ИначеЕсли ПоРазделу И Не ПоОбъекту И ДляГруппыПользователей Тогда + Текст = НСтр("ru = 'Дате %1 по разделу ""%2"" соответствует запрет изменения данных для группы пользователей ""%4"" по %5'"); + ИначеЕсли Не ПоРазделу И ПоОбъекту И ДляГруппыПользователей Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" соответствует запрет изменения данных для группы пользователей ""%4"" по %5'"); + ИначеЕсли ПоРазделу И ПоОбъекту И ДляГруппыПользователей Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2"" соответствует запрет изменения данных для группы пользователей ""%4"" по %5'"); + + ИначеЕсли Не ПоРазделу И Не ПоОбъекту И ДляВсехПользователей Тогда + Текст = НСтр("ru = 'Дате %1 соответствует запрет изменения данных для всех пользователей по %5'"); + ИначеЕсли ПоРазделу И Не ПоОбъекту И ДляВсехПользователей Тогда + Текст = НСтр("ru = 'Дате %1 по разделу ""%2"" соответствует запрет изменения данных для всех пользователей по %5'"); + ИначеЕсли Не ПоРазделу И ПоОбъекту И ДляВсехПользователей Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" соответствует запрет изменения данных для всех пользователей по %5'"); + ИначеЕсли ПоРазделу И ПоОбъекту И ДляВсехПользователей Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2"" соответствует запрет изменения данных для всех пользователей по %5'"); + КонецЕсли; + Иначе + Если Не ПоРазделу И Не ПоОбъекту И ДляИнформационнойБазы Тогда + Текст = НСтр("ru = 'Дате %1 соответствует запрет загрузки данных для информационной базы ""%4"" по %5'"); + ИначеЕсли ПоРазделу И Не ПоОбъекту И ДляИнформационнойБазы Тогда + Текст = НСтр("ru = 'Дате %1 по разделу ""%2"" соответствует запрет загрузки данных для информационной базы ""%4"" по %5'"); + ИначеЕсли Не ПоРазделу И ПоОбъекту И ДляИнформационнойБазы Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" соответствует запрет загрузки данных для информационной базы ""%4"" по %5'"); + ИначеЕсли ПоРазделу И ПоОбъекту И ДляИнформационнойБазы Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2"" соответствует запрет загрузки данных для информационной базы ""%4"" по %5'"); + + ИначеЕсли Не ПоРазделу И Не ПоОбъекту И ДляВсехИБПлана Тогда + Текст = НСтр("ru = 'Дате %1 соответствует запрет загрузки данных для всех информационных баз ""%6"" по %5'"); + ИначеЕсли ПоРазделу И Не ПоОбъекту И ДляВсехИБПлана Тогда + Текст = НСтр("ru = 'Дате %1 по разделу ""%2"" соответствует запрет загрузки данных для всех информационных баз ""%6"" по %5'"); + ИначеЕсли Не ПоРазделу И ПоОбъекту И ДляВсехИБПлана Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" соответствует запрет загрузки данных для всех информационных баз ""%6"" по %5'"); + ИначеЕсли ПоРазделу И ПоОбъекту И ДляВсехИБПлана Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2"" соответствует запрет загрузки данных для всех информационных баз ""%6"" по %5'"); + + ИначеЕсли Не ПоРазделу И Не ПоОбъекту И ДляВсехИБ Тогда + Текст = НСтр("ru = 'Дате %1 соответствует запрет загрузки данных для всех информационных баз по %5'"); + ИначеЕсли ПоРазделу И Не ПоОбъекту И ДляВсехИБ Тогда + Текст = НСтр("ru = 'Дате %1 по разделу ""%2"" соответствует запрет загрузки данных для всех информационных баз по %5'"); + ИначеЕсли Не ПоРазделу И ПоОбъекту И ДляВсехИБ Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" соответствует запрет загрузки данных для всех информационных баз по %5'"); + ИначеЕсли ПоРазделу И ПоОбъекту И ДляВсехИБ Тогда + Текст = НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2"" соответствует запрет загрузки данных для всех информационных баз по %5'"); + КонецЕсли; + КонецЕсли; + + Если Не СвойстваРазделов.БезРазделовИОбъектов Тогда + Если ЗначениеЗаполнено(Запрет.Раздел) Тогда + Если Запрет.Объект = Запрет.Раздел Тогда + Текст = Текст + " " + НСтр("ru = '(запрет установлен на раздел ""%2"")'"); + ИначеЕсли ЗначениеЗаполнено(СвойстваРазделов.ЕдинственныйРаздел) Тогда + Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"")'"); + Иначе + Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"" раздела ""%2"")'"); + КонецЕсли; + Иначе + Текст = Текст + " " + НСтр("ru = '(установлена общая дата запрета)'"); + КонецЕсли; + КонецЕсли; + + Проверка = Запрет.Данные; + Текст = СтрЗаменить(Текст, "%1", Формат(Проверка.Дата, "ДЛФ=Д")); + Текст = СтрЗаменить(Текст, "%2", Проверка.Раздел); + Текст = СтрЗаменить(Текст, "%3", Проверка.Объект); + Текст = СтрЗаменить(Текст, "%4", Запрет.Адресат); + Текст = СтрЗаменить(Текст, "%5", Формат(Запрет.Дата, "ДЛФ=Д")); + Текст = СтрЗаменить(Текст, "%6", Запрет.Адресат.Метаданные().Представление()); + Возврат Текст; + +КонецФункции + // Для функции СообщениеОЗапретах. Функция ПредставлениеДанных(Данные) @@ -1767,23 +1837,33 @@ КонецЦикла; Если КоличествоПолей = 1 Тогда - ПредставлениеДанных = ПредставлениеДанных - + " " + НСтр("ru = 'с полем'") + " " + Строка(Данные.Отбор); + ПредставлениеДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 с полем %2'"), + ПредставлениеДанных, Строка(Данные.Отбор)); ИначеЕсли КоличествоПолей > 1 Тогда - ПредставлениеДанных = ПредставлениеДанных - + " " + НСтр("ru = 'с полями'") + " " + Строка(Данные.Отбор); + ПредставлениеДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 с полями %2'"), + ПредставлениеДанных, Строка(Данные.Отбор)); КонецЕсли; - ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = Строка(Данные); Иначе - ПредставлениеДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)", Строка(Данные), ОбъектМетаданных.Представление()); + ПредставлениеДанных = ОбщегоНазначения.ПредметСтрокой(Данные); КонецЕсли; Возврат ПредставлениеДанных; КонецФункции +// Для функции СообщениеОЗапретах. +Функция ЭтоУдалениеНабораДанных(Данные) + + Если ТипЗнч(Данные) = Тип("Структура") И ТипЗнч(Данные.Регистр) <> Тип("Строка") Тогда + Возврат Данные.Регистр.Количество() = 0; // нет записей в записываемым наборе данных регистра + КонецЕсли; + Возврат Ложь; + +КонецФункции + // Для процедуры ЗначениеПараметраСеансаДействующиеДатыЗапретаИзменения. Функция ЗапросДатЗапретаИзменения() diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиентСервер/Module.bsl index fe1b354d0..34367adad 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиентСервер/Module.bsl @@ -102,11 +102,11 @@ КонецПроцедуры // Параметры: -// Контекст - ФормаКлиентскогоПриложения - где: -// * Элементы - ВсеЭлементыФормы - где: -// ** РазрешитьИзменениеДанныхДоДатыЗапрета - ПолеФормы - -// ** КоличествоДнейРазрешения - ПолеФормы - -// ** ПояснениеНепроизвольнойДаты - ПолеФормы - +// Контекст - ФормаКлиентскогоПриложения: +// * Элементы - ВсеЭлементыФормы: +// ** РазрешитьИзменениеДанныхДоДатыЗапрета - ПолеФормы +// ** КоличествоДнейРазрешения - ПолеФормы +// ** ПояснениеНепроизвольнойДаты - ПолеФормы // Процедура ОбновитьОтображениеДатыЗапретаПриИзменении(Контекст) Экспорт diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl index 60c3a0a2b..2731bd52d 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl @@ -11,7 +11,7 @@ // Возвращает сведения о последней проверке версии действующих дат запрета изменения. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Дата - Дата - дата и время последней проверки действующих дат. // Функция ПоследняяПроверкаВерсииДействующихДатЗапрета() Экспорт diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index 40726def9..4abaad858 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -34,15 +34,15 @@ // или "Обработки.ЗагрузкаДанных.МодульОбъекта.Загрузить". // // Параметр1 - Произвольный - произвольные параметры вызова функции. Количество параметров может быть от 0 до 7. -// Параметр2 - Произвольный - -// Параметр3 - Произвольный - -// Параметр4 - Произвольный - -// Параметр5 - Произвольный - -// Параметр6 - Произвольный - -// Параметр7 - Произвольный - +// Параметр2 - Произвольный +// Параметр3 - Произвольный +// Параметр4 - Произвольный +// Параметр5 - Произвольный +// Параметр6 - Произвольный +// Параметр7 - Произвольный // // Возвращаемое значение: -// Структура - параметры выполнения задания: +// Структура: // * Статус - Строка - "Выполняется", если задание еще не завершилось; // "Выполнено", если задание было успешно выполнено; // "Ошибка", если задание завершено с ошибкой; @@ -53,6 +53,8 @@ // помещен результат работы функции. // * КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка". // * ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка". +// * Сообщения - ФиксированныйМассив - если Статус <> "Выполняется", то массив объектов СообщениеПользователю, +// которые были сформированы в фоновом задании. // // Пример: // В общем виде процесс запуска и обработки результата длительной операции в модуле формы выглядит следующим образом: @@ -126,12 +128,12 @@ // или "Обработки.ЗагрузкаДанных.МодульОбъекта.Загрузить". // // Параметр1 - Произвольный - произвольные параметры вызова процедуры. Количество параметров может быть от 0 до 7. -// Параметр2 - Произвольный - -// Параметр3 - Произвольный - -// Параметр4 - Произвольный - -// Параметр5 - Произвольный - -// Параметр6 - Произвольный - -// Параметр7 - Произвольный - +// Параметр2 - Произвольный +// Параметр3 - Произвольный +// Параметр4 - Произвольный +// Параметр5 - Произвольный +// Параметр6 - Произвольный +// Параметр7 - Произвольный // // Возвращаемое значение: // Структура - параметры выполнения задания: @@ -143,6 +145,8 @@ // идентификатор запущенного фонового задания. // * КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка". // * ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка". +// * Сообщения - ФиксированныйМассив - если Статус <> "Выполняется", то массив объектов СообщениеПользователю, +// которые были сформированы в фоновом задании. // // Пример: // В общем виде процесс запуска и обработки результата длительной операции в модуле формы выглядит следующим образом: @@ -283,20 +287,22 @@ // ПараметрыВыполнения - см. ДлительныеОперации.ПараметрыВыполненияВФоне // // Возвращаемое значение: -// Структура - параметры выполнения задания: +// Структура: // * Статус - Строка - "Выполняется", если задание еще не завершилось; // "Выполнено", если задание было успешно выполнено; // "Ошибка", если задание завершено с ошибкой; // "Отменено", если задание отменено пользователем или администратором. -// * ИдентификаторЗадания - УникальныйИдентификатор - если Статус = "Выполняется", то содержит +// * ИдентификаторЗадания - УникальныйИдентификатор - если Статус = "Выполняется", то содержит // идентификатор запущенного фонового задания. // * АдресРезультата - Строка - адрес временного хранилища, в которое будет -// помещен (или уже помещен) результат работы процедуры. +// помещен (или уже помещен) результат работы процедуры. // * АдресДополнительногоРезультата - Строка - если установлен параметр ДополнительныйРезультат, -// содержит адрес дополнительного временного хранилища, -// в которое будет помещен (или уже помещен) результат работы процедуры. +// содержит адрес дополнительного временного хранилища, +// в которое будет помещен (или уже помещен) результат работы процедуры. // * КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка". // * ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка". +// * Сообщения - ФиксированныйМассив - если Статус <> "Выполняется", то массив объектов СообщениеПользователю, +// которые были сформированы в фоновом задании. // // Пример: // В общем виде процесс запуска и обработки результата длительной операции выглядит следующим образом: @@ -469,12 +475,13 @@ // во временное хранилище которой надо поместить результат выполнения процедуры. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, // во временное хранилище которой надо поместить результат выполнения процедуры. // * ДополнительныйРезультат - Булево - признак использования дополнительного временного хранилища для передачи // результата из фонового задания в родительский сеанс. По умолчанию - Ложь. -// * ОжидатьЗавершение - Число, Неопределено - таймаут в секундах ожидания завершения фонового задания. +// * ОжидатьЗавершение - Число +// - Неопределено - таймаут в секундах ожидания завершения фонового задания. // Если задано Неопределено, то ждать до момента завершения задания. // Если задано 0, то ждать завершения задания не требуется. // По умолчанию - 2 секунды; а для низкой скорости соединения - 4. @@ -567,8 +574,7 @@ // то, напротив, открывать одну длинную транзакцию не требуется. // // Параметры: -// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания, полученный при запуске -// длительной операции. См. ДлительныеОперации.ВыполнитьВФоне. +// ИдентификаторЗадания - см. ДлительныеОперации.ВыполнитьВФоне. // Процедура ОтменитьВыполнениеЗадания(Знач ИдентификаторЗадания) Экспорт @@ -802,7 +808,7 @@ Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания); Если Задание = Неопределено Тогда Пояснение = НСтр("ru = 'Операция не выполнена из-за аварийного завершения фонового задания. - |Фоновое задание не найдено'") + ": " + Строка(ИдентификаторЗадания); + |Фоновое задание не существует'") + ": " + Строка(ИдентификаторЗадания); ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Пояснение); Если ИсключениеПриОшибке Тогда @@ -1105,12 +1111,13 @@ // Режим - Строка - "ПрогрессИСообщения", "Прогресс" или "Сообщения". // // Возвращаемое значение: -// Структура - со свойствами: -// * Прогресс - Неопределено, Структура - Информация о ходе выполнения фонового задания, записанная процедурой СообщитьПрогресс: -// ** Процент - Число - Необязательный. Процент выполнения. -// ** Текст - Строка - Необязательный. Информация о текущей операции. -// ** ДополнительныеПараметры - Произвольный - Необязательный. Любая дополнительная информация. -// * Сообщения - ФиксированныйМассив - Массив объектов СообщениеПользователю, которые были сформированы в фоновом задании. +// Структура: +// * Прогресс - Неопределено +// - Структура - информация о ходе выполнения фонового задания, записанная процедурой СообщитьПрогресс: +// ** Процент - Число - необязательный. Процент выполнения. +// ** Текст - Строка - необязательный. Информация о текущей операции. +// ** ДополнительныеПараметры - Произвольный - необязательный. Любая дополнительная информация. +// * Сообщения - ФиксированныйМассив - массив объектов СообщениеПользователю, которые были сформированы в фоновом задании. // Функция ПрочитатьПрогрессИСообщения(Знач ИдентификаторЗадания, Знач Режим = "ПрогрессИСообщения") diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl index d7c39b542..b5341ee73 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl @@ -16,7 +16,8 @@ // ДлительнаяОперация - см. ДлительныеОперации.ВыполнитьВФоне // ОповещениеОЗавершении - ОписаниеОповещения - оповещение, которое вызывается при завершении фонового задания. // Параметры процедуры-обработчика оповещения: -// * Результат - Структура, Неопределено - структура со свойствами или Неопределено, если задание было отменено: +// * Результат - Структура +// - Неопределено - структура со свойствами или Неопределено, если задание было отменено: // ** Статус - Строка - "Выполнено", если задание было успешно выполнено; // "Ошибка", если задание завершено с ошибкой. // ** АдресРезультата - Строка - адрес временного хранилища, в которое будет @@ -26,8 +27,9 @@ // в которое будет помещен (или уже помещен) результат работы процедуры. // ** КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка". // ** ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка". -// ** Сообщения - ФиксированныйМассив, Неопределено - массив объектов СообщениеПользователю, -// сформированных в процедуре-обработчике длительной операции. +// ** Сообщения - ФиксированныйМассив +// - Неопределено - массив объектов СообщениеПользователю, +// сформированных в процедуре-обработчике длительной операции. // * ДополнительныеПараметры - Произвольный - произвольные данные, переданные в описании оповещения. // ПараметрыОжидания - см. ДлительныеОперацииКлиент.ПараметрыОжидания // @@ -97,11 +99,13 @@ // Возвращает пустую структуру для параметра ПараметрыОжидания процедуры ДлительныеОперацииКлиент.ОжидатьЗавершение. // // Параметры: -// ФормаВладелец - ФормаКлиентскогоПриложения, Неопределено - форма, из которой вызывается длительная операция. +// ФормаВладелец - ФормаКлиентскогоПриложения +// - Неопределено - форма, из которой вызывается длительная операция. // // Возвращаемое значение: // Структура - параметры выполнения задания: -// * ФормаВладелец - ФормаКлиентскогоПриложения, Неопределено - форма, из которой вызывается длительная операция. +// * ФормаВладелец - ФормаКлиентскогоПриложения +// - Неопределено - форма, из которой вызывается длительная операция. // * ТекстСообщения - Строка - текст сообщения, выводимый на форме ожидания. // Если не задан, то выводится "Пожалуйста, подождите...". // * ВыводитьОкноОжидания - Булево - если Истина, то открыть окно ожидания с визуальной индикацией длительной операции. @@ -128,13 +132,13 @@ // * Интервал - Число - интервал в секундах между проверками готовности длительной операции. // По умолчанию 0 - после каждой проверки интервал увеличивается с 1 до 15 секунд // с коэффициентом 1.4. -// * ОповещениеПользователя - Структура - содержит свойства: +// * ОповещениеПользователя - Структура: // ** Показать - Булево - если Истина, то по завершении длительной операции вывести оповещение пользователя. // ** Текст - Строка - текст оповещения пользователя. // ** НавигационнаяСсылка - Строка - навигационная ссылка оповещения пользователя. // ** Пояснение - Строка - пояснение оповещения пользователя. // -// * ПолучатьРезультат - Булево - Служебный параметр. Не предназначен для использования. +// * ПолучатьРезультат - Булево - служебный параметр. Не предназначен для использования. // Функция ПараметрыОжидания(ФормаВладелец) Экспорт @@ -236,9 +240,10 @@ #Область СлужебныеПроцедурыИФункции // Возвращаемое значение: -// Структура -: -// * Обработка - Булево - -// * Список - Соответствие - +// Структура: +// * Обработка - Булево +// * Список - Соответствие +// Функция АктивныеДлительныеОперации() Экспорт ИмяПараметра = "СтандартныеПодсистемы.АктивныеДлительныеОперации"; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index 41ae091ed..2f761775a 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -154,7 +154,7 @@ // // Параметры: // ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - внешняя обработка. -// ПараметрыИсточника - Структура - структура со свойствами: +// ПараметрыИсточника - Структура: // * ИдентификаторКоманды - Строка - список макетов, перечисленных через запятую. // * ОбъектыНазначения - Массив // КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы (возвращаемый параметр). @@ -182,8 +182,7 @@ // Формирует шаблон сведений о внешнем отчете или обработке для последующего заполнения. // // Параметры: -// ВерсияБСП - Строка - версия Библиотеки стандартных подсистем, на которую рассчитывают механизмы внешней обработки -// или отчета. См. СтандартныеПодсистемыСервер.ВерсияБиблиотеки. +// ВерсияБСП - см. СтандартныеПодсистемыСервер.ВерсияБиблиотеки. // // Возвращаемое значение: // Структура - параметры внешнего отчета или обработки: @@ -220,8 +219,8 @@ // доступ к Интернету. // Необязательное свойство. // -// * Разрешения - Массив - дополнительные разрешения, необходимые внешней обработке при работе в безопасном режиме. -// Элемент массива - ОбъектXDTO - разрешение типа +// * Разрешения - Массив из ОбъектXDTO - дополнительные разрешения, необходимые внешней обработке при работе в +// безопасном режиме. Элемент массива - ОбъектXDTO - разрешение типа // {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}PermissionBase. // Для формирования описания разрешения рекомендуется использовать функции // РаботаВБезопасномРежиме.Разрешение<ВидРазрешения>(<ПараметрыРазрешения>). @@ -231,9 +230,7 @@ // В этом параметре для администратора рекомендуется дать описание ее возможностей. // Если не заполнено, то берется комментарий объекта метаданных внешней обработки. // -// * ВерсияБСП - Строка - необязательный. Версия библиотеки, на которую рассчитывают механизмы внешней обработки. -// См. СтандартныеПодсистемыСервер.ВерсияБиблиотеки. -// Необязательное свойство. +// * ВерсияБСП - см. СтандартныеПодсистемыСервер.ВерсияБиблиотеки. // // * ОпределитьНастройкиФормы - Булево - только для дополнительных отчетов, подключенных к общей форме ФормаОтчета. // Позволяет переопределять некоторые настройки общей формы отчета и @@ -255,10 +252,10 @@ // Необязательное свойство. // // * Команды - ТаблицаЗначений - настройки команд, поставляемых внешней обработкой (необязательно для отчетов): -// ** Идентификатор - Строка - Внутреннее имя команды. Для внешних печатных форм (когда Вид = "ПечатнаяФорма"): +// ** Идентификатор - Строка - внутреннее имя команды. Для внешних печатных форм (когда Вид = "ПечатнаяФорма"): // Идентификатор может содержать имена одной или нескольких команд печати, // разделенные запятыми. Подробнее см. описание колонки Идентификатор -// в функции СоздатьКоллекциюКомандПечати() общего модуля УправлениеПечатью. +// в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати. // ** Представление - Строка - пользовательское представление команды. // ** Использование - Строка - тип команды: // "ВызовКлиентскогоМетода", @@ -316,7 +313,7 @@ // должна выполняться вызывающим кодом. // // Параметры: -// ПараметрыКоманды - Структура - параметры, с которыми выполняется команда. +// ПараметрыКоманды - Структура - параметры, с которыми выполняется команда: // * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - элемент справочника. // * ИдентификаторКоманды - Строка - имя выполняемой команды. // * ОбъектыНазначения - Массив - ссылки объектов, для которых выполняется обработка. Обязательный для @@ -411,17 +408,17 @@ // Определяет список объектов метаданных, к которым может быть применена назначаемая обработка переданного вида. // // Параметры: -// Вид - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - Вид внешней обработки. +// Вид - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - вид внешней обработки. // // Возвращаемое значение: -// ТаблицаЗначений - Описание объектов метаданных. -// * Метаданные - ОбъектМетаданных - Объект метаданных, подключенный к данному виду. -// * ПолноеИмя - Строка - Полное имя объекта метаданных, например "Справочник.Валюты". -// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка объекта метаданных. -// * Вид - Строка - Вид объекта метаданных. -// * Представление - Строка - Представление объекта метаданных. -// * ПолноеПредставление - Строка - Представление имени и вида объекта метаданных. -// Неопределено - Если передан некорректный Вид. +// ТаблицаЗначений - описание объектов метаданных: +// * Метаданные - ОбъектМетаданных - объект метаданных, подключенный к данному виду. +// * ПолноеИмя - Строка - полное имя объекта метаданных, например "Справочник.Валюты". +// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - ссылка объекта метаданных. +// * Вид - Строка - вид объекта метаданных. +// * Представление - Строка - представление объекта метаданных. +// * ПолноеПредставление - Строка - представление имени и вида объекта метаданных. +// Неопределено - если передан некорректный Вид. // Функция ПодключенныеОбъектыМетаданных(Вид) Экспорт Результат = Новый ТаблицаЗначений; @@ -510,31 +507,32 @@ // Формирует запрос для получения таблицы команд дополнительных отчетов или обработок. // // Параметры: -// ВидОбработок - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - Вид обработки. -// Размещение - СправочникСсылка.ИдентификаторыОбъектовМетаданных, Строка - Ссылка или полное имя объекта метаданных, +// ВидОбработок - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - вид обработки. +// Размещение - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - Строка - ссылка или полное имя объекта метаданных, // к которому привязаны искомые дополнительные отчеты и обработки. // Глобальные обработки размещаются в разделах, контекстные - в справочниках и документах. -// ЭтоФормаОбъекта - Булево - Необязательный. +// ЭтоФормаОбъекта - Булево - необязательный. // Тип форм, в которых размещены контекстные дополнительные отчеты и обработки. // Истина - только отчеты и обработки, привязанные к формам объектов. // Ложь - только отчеты и обработки, привязанные к формам списков. -// ТипыКоманд - ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок - Тип получаемых команд. -// - Массив - Типы команд, которые необходимо получить. +// ТипыКоманд - ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок - тип получаемых команд. +// - Массив - типы команд, которые необходимо получить: // * ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок -// ТолькоВключенные - Булево - Необязательный. +// ТолькоВключенные - Булево - необязательный. // Тип форм, в которых размещены контекстные дополнительные отчеты и обработки. // Истина - только отчеты и обработки, привязанные к формам объектов. // Ложь - только отчеты и обработки, привязанные к формам списков. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: -// * Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка дополнительного отчета или обработки. -// * Идентификатор - Строка - Идентификатор команды, как он задан разработчиком дополнительного объекта. +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка дополнительного отчета или обработки. +// * Идентификатор - Строка - идентификатор команды, как он задан разработчиком дополнительного объекта. // * ВариантЗапуска - ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок - // Способ вызова команды дополнительного объекта. -// * Представление - Строка - Наименование команды в пользовательском интерфейсе. -// * ПоказыватьОповещение - Булево - Показывать оповещение пользователю после выполнения команды. -// * Модификатор - Строка - Модификатор команды. +// * Представление - Строка - наименование команды в пользовательском интерфейсе. +// * ПоказыватьОповещение - Булево - показывать оповещение пользователю после выполнения команды. +// * Модификатор - Строка - модификатор команды. // Функция НовыйЗапросПоДоступнымКомандам(ВидОбработок, Размещение, ЭтоФормаОбъекта = Неопределено, ТипыКоманд = Неопределено, ТолькоВключенные = Истина) Экспорт Запрос = Новый Запрос; @@ -728,20 +726,20 @@ Возврат Запрос; КонецФункции -// Обработчик подключенной команды заполнения. -// // Параметры: -// МассивСсылок - Массив - Массив ссылок выбранных объектов, для которых выполняется команда. -// ПараметрыВыполнения - Структура - контекст команды со свойствами: -// * ОписаниеКоманды - Структура - Сведения о выполняемой команде со свойствами: -// ** Идентификатор - Строка - Идентификатор команды. -// ** Представление - Строка - Представление команды в форме. -// ** Имя - Строка - Имя команды в форме. -// * Форма - ФормаКлиентскогоПриложения - Форма, из которой была вызвана команда. -// * Источник - ДанныеФормыСтруктура, ТаблицаФормы - Объект или список формы с полем "Ссылка". +// МассивСсылок - Массив Из ЛюбаяСсылка - ссылки выбранных объектов, для которых выполняется команда. +// ПараметрыВыполнения - Структура: +// * ОписаниеКоманды - Структура: +// ** Идентификатор - Строка - идентификатор команды. +// ** Представление - Строка - представление команды в форме. +// ** Имя - Строка - имя команды в форме. +// ** ДополнительныеПараметры - см. ДополнительныеПараметрыКомандыЗаполнения +// * Форма - ФормаКлиентскогоПриложения - форма, из которой была вызвана команда. +// * Источник - ДанныеФормыСтруктура +// - ТаблицаФормы - объект или список формы с полем "Ссылка". // Процедура ОбработчикКомандыЗаполнения(Знач МассивСсылок, Знач ПараметрыВыполнения) Экспорт - ВыполняемаяКоманда = ПараметрыВыполнения.ОписаниеКоманды.ДополнительныеПараметры; + ВыполняемаяКоманда = ПараметрыВыполнения.ОписаниеКоманды.ДополнительныеПараметры; ВнешнийОбъект = ОбъектВнешнейОбработки(ВыполняемаяКоманда.Ссылка); @@ -832,12 +830,12 @@ // Обновляет отчеты и обработки в справочнике из общих макетов. // // Параметры: -// ОтчетыИОбработки - ТаблицаЗначений - Таблица отчетов и обработок в общих макетах. -// * ОбъектМетаданных - ОбъектМетаданных - Отчет или обработка из конфигурации. -// * СтарыеИменаОбъектов - Массив - Старые имена объектов для поиска старых версий этого отчета или обработки. -// ** Строка - Старое имя объекта. -// * СтарыеИменаФайлов - Массив - Старые имена файлов для поиска старых версий этого отчета или обработки. -// ** Строка - Старое имя файла. +// ОтчетыИОбработки - ТаблицаЗначений - таблица отчетов и обработок в общих макетах: +// * ОбъектМетаданных - ОбъектМетаданных - отчет или обработка из конфигурации. +// * СтарыеИменаОбъектов - Массив - старые имена объектов для поиска старых версий этого отчета или обработки. +// * СтарыеИменаФайлов - Массив - старые имена файлов для поиска старых версий этого отчета или обработки. +// * Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки +// * Имя - Строка // Процедура ЗагрузитьДополнительныеОтчетыИОбработкиИзМетаданных(ОтчетыИОбработки) Экспорт Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда @@ -965,6 +963,9 @@ КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа. +// Параметры: +// ВидыДоступа - см. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа.ВидыДоступа +// Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт ВидДоступа = ВидыДоступа.Добавить(); @@ -1011,6 +1012,10 @@ КонецПроцедуры // См. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей. +// +// Параметры: +// НазначениеРолей - см. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей.НазначениеРолей +// Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт // СовместноДляПользователейИВнешнихПользователей. @@ -1168,15 +1173,15 @@ Возврат; КонецЕсли; - ИОМы = Новый Массив; - БыстрыйПоискПоИОМам = Новый Соответствие; + ИдентификаторыОбъектов = Новый Массив; + ИсточникиКоманд = Новый Соответствие; Для Каждого Источник Из Источники.Строки Цикл Для Каждого ДокументРегистратор Из Источник.Строки Цикл - ИОМы.Добавить(ДокументРегистратор.СсылкаМетаданных); - БыстрыйПоискПоИОМам.Вставить(ДокументРегистратор.СсылкаМетаданных, ДокументРегистратор); + ИдентификаторыОбъектов.Добавить(ДокументРегистратор.СсылкаМетаданных); + ИсточникиКоманд.Вставить(ДокументРегистратор.СсылкаМетаданных, ДокументРегистратор); КонецЦикла; - ИОМы.Добавить(Источник.СсылкаМетаданных); - БыстрыйПоискПоИОМам.Вставить(Источник.СсылкаМетаданных, Источник); + ИдентификаторыОбъектов.Добавить(Источник.СсылкаМетаданных); + ИсточникиКоманд.Вставить(Источник.СсылкаМетаданных, Источник); КонецЦикла; Запрос = Новый Запрос; @@ -1191,7 +1196,7 @@ |ГДЕ | Назначение.ОбъектНазначения В(&ИОМы) | И Назначение.ТипФормы = &ТипФормы"; - Запрос.УстановитьПараметр("ИОМы", ИОМы); + Запрос.УстановитьПараметр("ИОМы", ИдентификаторыОбъектов); Если ТипФормы = Неопределено Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Назначение.ТипФормы = &ТипФормы", ""); Иначе @@ -1204,7 +1209,7 @@ ТаблицаРегистра = Запрос.Выполнить().Выгрузить(); Для Каждого СтрокаТаблицы Из ТаблицаРегистра Цикл - Источник = БыстрыйПоискПоИОМам[СтрокаТаблицы.ОбъектНазначения]; + Источник = ИсточникиКоманд[СтрокаТаблицы.ОбъектНазначения]; Если Источник = Неопределено Тогда Продолжить; КонецЕсли; @@ -1235,9 +1240,9 @@ Команда.РежимЗаписи = "Записывать"; Команда.МножественныйВыбор = Истина; Команда.ТипПараметра = Новый ОписаниеТипов(ТипыЗаполнениеОбъекта); - Команда.ДополнительныеПараметры = Новый Структура("Вид, ЭтоОтчет", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта(), Ложь); + Команда.ДополнительныеПараметры = ДополнительныеПараметрыКоманды(ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта(), Ложь); ИначеЕсли НастройкиФормы.ЭтоФормаОбъекта Тогда - ПриОпределенииКомандЗаполненияПодключенныхКОбъекту(Команды, ИОМы, БыстрыйПоискПоИОМам); + ПриОпределенииКомандЗаполненияПодключенныхКОбъекту(Команды, ИдентификаторыОбъектов, ИсточникиКоманд); КонецЕсли; Если ТипыОтчетов.Количество() > 0 Тогда @@ -1255,12 +1260,12 @@ Команда.РежимЗаписи = "Записывать"; Команда.МножественныйВыбор = Истина; Команда.ТипПараметра = Новый ОписаниеТипов(ТипыОтчетов); - Команда.ДополнительныеПараметры = Новый Структура("Вид, ЭтоОтчет", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет(), Истина); + Команда.ДополнительныеПараметры = ДополнительныеПараметрыКоманды(ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет(), Истина); КонецЕсли; Если ТипыСозданияСвязанныхОбъектов.Количество() > 0 Тогда - Если УстанавливатьПараметрыФО И ИОМы.Количество() = 1 Тогда - НастройкиФормы.ФункциональныеОпции.Вставить("ДополнительныеОтчетыИОбработкиОбъектНазначения", ИОМы[0]); + Если УстанавливатьПараметрыФО И ИдентификаторыОбъектов.Количество() = 1 Тогда + НастройкиФормы.ФункциональныеОпции.Вставить("ДополнительныеОтчетыИОбработкиОбъектНазначения", ИдентификаторыОбъектов[0]); Иначе Команда = Команды.Добавить(); Команда.Вид = ?(УстанавливатьПараметрыФО, "КоманднаяПанель", "СозданиеНаОсновании"); @@ -1271,7 +1276,7 @@ Команда.РежимЗаписи = "Записывать"; Команда.МножественныйВыбор = Истина; Команда.ТипПараметра = Новый ОписаниеТипов(ТипыСозданияСвязанныхОбъектов); - Команда.ДополнительныеПараметры = Новый Структура("Вид, ЭтоОтчет", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиСозданиеСвязанныхОбъектов(), Ложь); + Команда.ДополнительныеПараметры = ДополнительныеПараметрыКоманды(ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиСозданиеСвязанныхОбъектов(), Ложь); КонецЕсли; КонецЕсли; @@ -1282,7 +1287,7 @@ // Вызывается из ВариантыОтчетовПовтИсп.Параметры. // // Параметры: -// ОтчетыСНастройками - Массив - Ссылки отчетов, в модулях объектов которых есть процедура ОпределитьНастройкиФормы. +// ОтчетыСНастройками - Массив - ссылки отчетов, в модулях объектов которых есть процедура ОпределитьНастройкиФормы(). // Процедура ПриОпределенииОтчетовСНастройками(ОтчетыСНастройками) Экспорт @@ -1367,8 +1372,7 @@ // Дополняет массив ссылкам дополнительных отчетов, доступных текущему пользователю. // // Параметры: -// Результат - Массив из <см. Справочники.ВариантыОтчетов.Реквизиты.Отчет> - -// Ссылки отчетов, доступных текущему пользователю. +// ДоступныеОтчеты - Массив - ссылки отчетов, доступных текущему пользователю. // // Места использования: // ВариантыОтчетов.ОтчетыТекущегоПользователя(). @@ -1410,7 +1414,9 @@ // Дополняет массив ссылкам дополнительных отчетов, доступных текущему пользователю. // // Параметры: -// Результат - Массив - полные имена отчетов, доступные указанному пользователю. +// ДоступныеОтчеты - Массив - полные имена отчетов, доступные указанному пользователю. +// ПользовательИБ - ПользовательИнформационнойБазы +// ПользовательСсылка - СправочникСсылка.Пользователи // // Места использования: // Обработка.НастройкиПользователей.ОтчетыДоступныеПользователю(). @@ -1456,10 +1462,10 @@ // Обработка исключений производится управляющим кодом. // // Параметры: -// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Отчет, который необходимо инициализировать. -// ПараметрыОтчета - Структура - Набор параметров, получаемый в процессе проверки и подключения отчета. -// См. РассылкаОтчетов.ИнициализироватьОтчет(). -// Результат - Булево, Неопределено - Результат подключения. +// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - отчет, который необходимо инициализировать. +// ПараметрыОтчета - см. РассылкаОтчетов.ИнициализироватьОтчет +// Результат - Булево +// - Неопределено - результат подключения. // Истина - Удалось подключить дополнительный отчет. // Ложь - Не удалось подключить дополнительный отчет. // @@ -1509,7 +1515,7 @@ // Обработка исключений производится управляющим кодом. // // Параметры: -// Контекст - Структура - Набор параметров, получаемый в процессе проверки и подключения отчета. +// Контекст - Структура - набор параметров, получаемый в процессе проверки и подключения отчета. // См. ВариантыОтчетов.ПриПодключенииОтчета(). // // Места использования: @@ -1575,8 +1581,8 @@ // Дополняет список команд печати внешними печатными формами. // // Параметры: -// КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати(). -// ИмяОбъекта - Строка - Полное имя объекта метаданных, для которого необходимо получить список +// КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати +// ИмяОбъекта - Строка - полное имя объекта метаданных, для которого необходимо получить список // команд печати. // // Места использования: @@ -1592,8 +1598,7 @@ КонецЕсли; Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ИмяОбъекта); - ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); - + ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); // см. ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам Если ТаблицаКоманд.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -1619,10 +1624,10 @@ // Заполняет список печатных форм из внешних источников. // // Параметры: -// ВнешниеПечатныеФормы - СписокЗначений - Печатные формы. -// Значение - Строка - Идентификатор печатной формы. -// Представление - Строка - Название печатной формы. -// ПолноеИмяОбъектаМетаданных - Строка - Полное имя объекта метаданных, +// ВнешниеПечатныеФормы - СписокЗначений: +// Значение - Строка - идентификатор печатной формы. +// Представление - Строка - название печатной формы. +// ПолноеИмяОбъектаМетаданных - Строка - полное имя объекта метаданных, // для которого требуется получить список печатных форм. // // Места использования: @@ -1638,7 +1643,7 @@ КонецЕсли; Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ПолноеИмяОбъектаМетаданных); - ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); + ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); // см. ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам Для Каждого Команда Из ТаблицаКоманд Цикл Если Не ЭтоПоставляемаяОбработка(Команда.Ссылка) Тогда @@ -1654,7 +1659,7 @@ // Возвращает ссылку на объект внешней печатной формы. // // Места использования: -// УправлениеПечатью.ПриПолученииВнешнейПечатнойФормы(). +// УправлениеПечатью.ПриПолученииВнешнейПечатнойФормы // Процедура ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка) Экспорт Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда @@ -1665,8 +1670,7 @@ КонецЕсли; Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ПолноеИмяОбъектаМетаданных); - - ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); + ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); // см. ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам Команда = ТаблицаКоманд.Найти(Идентификатор, "Идентификатор"); Если Команда <> Неопределено Тогда @@ -1676,6 +1680,10 @@ КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. +// +// Параметры: +// Массив - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.ИсключенияПоискаСсылок +// Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт Массив.Добавить("Справочник.ДополнительныеОтчетыИОбработки.ТабличнаяЧасть.Разделы.Реквизит.Раздел"); @@ -1695,8 +1703,8 @@ // с указанным идентификатором команды. // // Параметры: -// ВнешняяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка выполняемой обработки. -// ИдентификаторКоманды - Строка - Идентификатор выполняемой команды. +// ВнешняяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка выполняемой обработки. +// ИдентификаторКоманды - Строка - идентификатор выполняемой команды. // Процедура ВыполнитьОбработкуПоРегламентномуЗаданию(ВнешняяОбработка, ИдентификаторКоманды) Экспорт @@ -1729,7 +1737,7 @@ // Возвращает Истина если вид относится к категории глобальных дополнительных отчетов или обработок. // // Параметры: -// Вид - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - Вид внешней обработки. +// Вид - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - вид внешней обработки. // // Возвращаемое значение: // Булево - Истина - обработка относится к категории глобальных. @@ -1745,10 +1753,10 @@ // Преобразует вид дополнительных отчетов или обработок из строковой константы в ссылку перечисления. // // Параметры: -// СтроковоеПредставление - Строка - Строковое представление вида. +// СтроковоеПредставление - Строка - строковое представление вида. // // Возвращаемое значение: -// ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - Ссылка вида. +// ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - ссылка вида. // Функция ПолучитьВидОбработкиПоСтроковомуПредставлениюВида(СтроковоеПредставление) Экспорт @@ -1845,7 +1853,7 @@ // Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: -// Булево - +// Булево // Функция ВозможнаВыгрузкаОбработкиВФайл(Знач Обработка) Экспорт @@ -1867,7 +1875,7 @@ // Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: -// Булево - +// Булево // Функция ВозможнаЗагрузкаОбработкиИзФайла(Знач Обработка) Экспорт @@ -1889,7 +1897,7 @@ // Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: -// Булево - +// Булево // Функция ОтображатьРасширеннуюИнформацию(Знач Обработка) Экспорт @@ -1921,6 +1929,7 @@ // Вызывается при создании запроса для получения таблицы команд дополнительных отчетов или обработок. // Запись ошибки в журнал регистрации по дополнительному отчету или обработке. +// Процедура ЗаписатьОшибку(Ссылка, ТекстСообщения) Экспорт ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, Ссылка, ТекстСообщения); КонецПроцедуры @@ -2134,18 +2143,13 @@ //////////////////////////////////////////////////////////////////////////////// // Сопоставление элементов справочника объектам метаданных конфигурации. + +// Параметры: +// ОтчетыИОбработки - см. ЗагрузитьДополнительныеОтчетыИОбработкиИзМетаданных.ОтчетыИОбработки +// Процедура СопоставитьОбработкиКонфигурацииСОбработкамиСправочника(ОтчетыИОбработки) - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДополнительныеОтчетыИОбработки.Ссылка, - | ДополнительныеОтчетыИОбработки.Версия, - | ДополнительныеОтчетыИОбработки.ИмяОбъекта, - | ДополнительныеОтчетыИОбработки.ИмяФайла - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки"; + ОбработкиИзКонфигурации = ОбработкиИзКонфигурации(); - ОбработкиИзКонфигурации = Запрос.Выполнить().Выгрузить(); Для Каждого ОбработкаКонфигурации Из ОбработкиИзКонфигурации Цикл ОбработкаКонфигурации.ИмяОбъекта = ВРег(ОбработкаКонфигурации.ИмяОбъекта); ОбработкаКонфигурации.ИмяФайла = ВРег(ОбработкаКонфигурации.ИмяФайла); @@ -2165,7 +2169,7 @@ ОбратныйИндекс = ОтчетыИОбработки.Количество(); Пока ОбратныйИндекс > 0 Цикл ОбратныйИндекс = ОбратныйИндекс - 1; - СтрокаТаблицы = ОтчетыИОбработки[ОбратныйИндекс]; + СтрокаТаблицы = ОтчетыИОбработки.Получить(ОбратныйИндекс); СтрокаТаблицы.Имя = СтрокаТаблицы.ОбъектМетаданных.Имя; СтрокаТаблицы.ПолноеИмя = СтрокаТаблицы.ОбъектМетаданных.ПолноеИмя(); @@ -2223,9 +2227,36 @@ ОтчетыИОбработки.Колонки.Удалить("СтарыеИменаОбъектов"); КонецПроцедуры +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки +// * Версия - Строка +// * ИмяОбъекта - Строка +// * ИмяФайла - Строка +// +Функция ОбработкиИзКонфигурации() + Перем ОбработкиИзКонфигурации; + Перем Запрос; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДополнительныеОтчетыИОбработки.Ссылка, + | ДополнительныеОтчетыИОбработки.Версия, + | ДополнительныеОтчетыИОбработки.ИмяОбъекта, + | ДополнительныеОтчетыИОбработки.ИмяФайла + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки"; + + ОбработкиИзКонфигурации = Запрос.Выполнить().Выгрузить(); + Возврат ОбработкиИзКонфигурации +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Выгрузка отчетов и обработок конфигурации в файлы внешних отчетов и обработок. +// Параметры: +// ОтчетыИОбработки - см. ЗагрузитьДополнительныеОтчетыИОбработкиИзМетаданных.ОтчетыИОбработки +// Процедура ВыгрузитьОтчетыИОбработкиВФайлы(ОтчетыИОбработки) ОтчетыИОбработки.Колонки.Добавить("ДвоичныеДанные"); @@ -2247,7 +2278,7 @@ ОбратныйИндекс = ОтчетыИОбработки.Количество(); Пока ОбратныйИндекс > 0 Цикл ОбратныйИндекс = ОбратныйИндекс - 1; - СтрокаТаблицы = ОтчетыИОбработки[ОбратныйИндекс]; + СтрокаТаблицы = ОтчетыИОбработки.Получить(ОбратныйИндекс); Если СтрокаТаблицы.Вид = "ОТЧЕТ" Тогда КаталогВида = Параметры.РабочийКаталог + "Reports" + ПолучитьРазделительПути(); @@ -2630,7 +2661,7 @@ ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭлементСписка.Значение); Блокировка.Заблокировать(); - КонфликтующийОбъект = ЭлементСписка.Значение.ПолучитьОбъект(); + КонфликтующийОбъект = ЭлементСписка.Значение.ПолучитьОбъект(); // СправочникОбъект.ДополнительныеОтчетыИОбработки ОтключитьКонфликтующую(КонфликтующийОбъект); КонфликтующийОбъект.Записать(); @@ -2644,7 +2675,14 @@ ОтключитьКонфликтующую(Объект); КонецЕсли; - Результат = Новый Структура("ИмяОбъекта, СтароеИмяОбъекта, Успех, ИмяОбъектаЗанято, Конфликтующие, ТекстОшибки, КраткоеПредставлениеОшибки"); + Результат = Новый Структура; + Результат.Вставить("ИмяОбъекта", ""); + Результат.Вставить("СтароеИмяОбъекта", ""); + Результат.Вставить("Успех", Ложь); + Результат.Вставить("ИмяОбъектаЗанято", ложь); + Результат.Вставить("Конфликтующие", Новый СписокЗначений); + Результат.Вставить("ТекстОшибки", ""); + Результат.Вставить("КраткоеПредставлениеОшибки", ""); Результат.ИмяОбъектаЗанято = Ложь; Результат.Успех = Ложь; Если Объект.ЭтоНовый() Тогда @@ -2671,41 +2709,10 @@ // под которым дополнительный отчет регистрируется в системе. Если Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется Тогда // Проверка имени - ТекстЗапроса = - "ВЫБРАТЬ - | ТаблицаСправочника.Ссылка КАК Ссылка, - | ТаблицаСправочника.Представление КАК Представление - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки КАК ТаблицаСправочника - |ГДЕ - | ТаблицаСправочника.ИмяОбъекта = &ИмяОбъекта - | И ТаблицаСправочника.Вид В(&ВидыДополнительныхОтчетовИОбработок) - | И ТаблицаСправочника.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется) - | И ТаблицаСправочника.ПометкаУдаления = ЛОЖЬ - | И ТаблицаСправочника.Ссылка <> &Ссылка"; - - ВидыДополнительныхОтчетовИОбработок = Новый Массив; - ВидыДополнительныхОтчетовИОбработок.Добавить(ВидДополнительныйОтчет); - ВидыДополнительныхОтчетовИОбработок.Добавить(ВидОтчет); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ИмяОбъекта", Результат.ИмяОбъекта); - Запрос.УстановитьПараметр("ВидыДополнительныхОтчетовИОбработок", ВидыДополнительныхОтчетовИОбработок); - Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); - - Если Не ПараметрыРегистрации.ЭтоОтчет Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТаблицаСправочника.Вид", "НЕ ТаблицаСправочника.Вид"); // не локализуется - КонецЕсли; - - Запрос.Текст = ТекстЗапроса; - - УстановитьПривилегированныйРежим(Истина); - Конфликтующие = Запрос.Выполнить().Выгрузить(); - УстановитьПривилегированныйРежим(Ложь); + Конфликтующие = КонфликтующиеДополнительныеОтчетыИОбработки(Объект, ПараметрыРегистрации.ЭтоОтчет, Результат.ИмяОбъекта); Если Конфликтующие.Количество() > 0 Тогда Результат.ИмяОбъектаЗанято = Истина; - Результат.Конфликтующие = Новый СписокЗначений; Для Каждого СтрокаТаблицы Из Конфликтующие Цикл Результат.Конфликтующие.Добавить(СтрокаТаблицы.Ссылка, СтрокаТаблицы.Представление); КонецЦикла; @@ -2749,9 +2756,10 @@ Объект.ИспользуетХранилищеВариантов = Ложь; Если ЭтоВнешнийОтчет Тогда + Хранилище = Метаданные.ХранилищеВариантовОтчетов; // ОбъектМетаданныхХранилищеНастроек Объект.ИспользуетХранилищеВариантов = (РегистрационныеДанные.ХранилищеВариантов = "ХранилищеВариантовОтчетов" - ИЛИ (Метаданные.ХранилищеВариантовОтчетов <> Неопределено - И Метаданные.ХранилищеВариантовОтчетов.Имя = "ХранилищеВариантовОтчетов")); + ИЛИ (Хранилище <> Неопределено + И Хранилище.Имя = "ХранилищеВариантовОтчетов")); РегистрационныеДанные.Свойство("ОпределитьНастройкиФормы", Объект.ТеснаяИнтеграцияСФормойОтчета); КонецЕсли; @@ -2763,7 +2771,9 @@ КонецЕсли; // Если не заполнено назначение - устанавливаем назначение из обработки. - Если Объект.Назначение.Количество() = 0 И НЕ ЭтоВнешнийОтчет Тогда + Если Объект.Назначение.Количество() = 0 + И Объект.Вид <> ВидДополнительныйОтчет + И Объект.Вид <> ВидДополнительнаяОбработка Тогда Если РегистрационныеДанные.Свойство("Назначение") Тогда ТаблицаОбъектовМетаданных = ПодключенныеОбъектыМетаданных(Объект.Вид); @@ -2775,7 +2785,6 @@ Иначе Поиск = Новый Структура("ПолноеИмя", ПолноеИмяОбъектаМетаданных); КонецЕсли; - Найденные = ТаблицаОбъектовМетаданных.НайтиСтроки(Поиск); Для Каждого СтрокаТаблицы Из Найденные Цикл СтрокаНазначение = Объект.Назначение.Добавить(); @@ -2804,12 +2813,11 @@ // Чтение разрешений, запрашиваемых дополнительной обработкой. Объект.Разрешения.Очистить(); - Разрешения = Неопределено; - Если РегистрационныеДанные.Свойство("Разрешения", Разрешения) Тогда - + Если РегистрационныеДанные.Свойство("Разрешения") Тогда + Разрешения = РегистрационныеДанные.Разрешения; Для Каждого Разрешение Из Разрешения Цикл - ТипXDTO = Разрешение.Тип(); + ТипXDTO = Разрешение.Тип();// ТипОбъектаXDTO СтрокаТЧ = Объект.Разрешения.Добавить(); СтрокаТЧ.ВидРазрешения = ТипXDTO.Имя; @@ -2840,7 +2848,55 @@ КонецФункции +// Параметры: +// Объект - СправочникСсылка.ДополнительныеОтчетыИОбработки +// ЭтоОтчет - Булево +// ИмяОбъекта - Строка +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки +// * Представление - Строка +// +Функция КонфликтующиеДополнительныеОтчетыИОбработки(Объект, ЭтоОтчет, ИмяОбъекта) + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаСправочника.Ссылка КАК Ссылка, + | ТаблицаСправочника.Представление КАК Представление + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ТаблицаСправочника + |ГДЕ + | ТаблицаСправочника.ИмяОбъекта = &ИмяОбъекта + | И ТаблицаСправочника.Вид В(&ВидыДополнительныхОтчетовИОбработок) + | И ТаблицаСправочника.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется) + | И ТаблицаСправочника.ПометкаУдаления = ЛОЖЬ + | И ТаблицаСправочника.Ссылка <> &Ссылка"; + + ВидыДополнительныхОтчетовИОбработок = Новый Массив; + ВидыДополнительныхОтчетовИОбработок.Добавить(Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет); + ВидыДополнительныхОтчетовИОбработок.Добавить(Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяОбъекта", ИмяОбъекта); + Запрос.УстановитьПараметр("ВидыДополнительныхОтчетовИОбработок", ВидыДополнительныхОтчетовИОбработок); + Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); + + Если Не ЭтоОтчет Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТаблицаСправочника.Вид", "НЕ ТаблицаСправочника.Вид"); // не локализуется + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; + + Конфликтующие = Запрос.Выполнить().Выгрузить(); + Возврат Конфликтующие; +КонецФункции + // Для внутреннего использования. +// +// Возвращаемое значение: +// см. СведенияОВнешнейОбработке +// Функция ПолучитьРегистрационныеДанные(Знач Объект, Знач ПараметрыРегистрации, Знач РезультатРегистрации) РегистрационныеДанные = Новый Структура; @@ -2855,6 +2911,12 @@ КонецФункции // Для внутреннего использования. +// +// Параметры: +// Объект - СправочникОбъект.ДополнительныеОтчетыИОбработки +// - Неопределено +// РегистрационныеДанные - см. СведенияОВнешнейОбработке +// Процедура ПриПолученииРегистрационныхДанных(Объект, РегистрационныеДанные, ПараметрыРегистрации, РезультатРегистрации) // Подключение и получение имени, под которым объект будет подключаться. @@ -2874,7 +2936,7 @@ // Получение сведений о внешней обработке. ВнешнийОбъект = Менеджер.Создать(РезультатРегистрации.ИмяОбъекта); - ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные(); + ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные(); // ОбъектМетаданныхОтчет СведенияОВнешнейОбработке = ВнешнийОбъект.СведенияОВнешнейОбработке(); ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(РегистрационныеДанные, СведенияОВнешнейОбработке, Истина); @@ -2953,42 +3015,11 @@ КонецПроцедуры // Вывод команд заполнения в формах объектов. -Процедура ПриОпределенииКомандЗаполненияПодключенныхКОбъекту(Команды, ИОМы, БыстрыйПоискПоИОМам) - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Таблица.Ссылка, - | Таблица.Команды.( - | Идентификатор, - | ВариантЗапуска, - | Представление, - | ПоказыватьОповещение, - | Скрыть - | ), - | Таблица.Назначение.( - | ОбъектНазначения - | ) - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки КАК Таблица - |ГДЕ - | Таблица.Назначение.ОбъектНазначения В(&ИОМы) - | И Таблица.Вид = &Вид - | И Таблица.ИспользоватьДляФормыОбъекта = ИСТИНА - | И Таблица.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется) - | И Таблица.Публикация <> ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена) - | И Таблица.ПометкаУдаления = ЛОЖЬ"; - Запрос.УстановитьПараметр("ИОМы", ИОМы); - Запрос.УстановитьПараметр("Вид", Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта); - Если ПравоДоступа("Изменение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Таблица.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)", ""); - Иначе - Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Таблица.Публикация <> ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена)", ""); - КонецЕсли; +Процедура ПриОпределенииКомандЗаполненияПодключенныхКОбъекту(Команды, ИдентификаторыОбъектов, ИсточникиКоманд) - КлючиПараметровОбработчика = "Ссылка, Идентификатор, ВариантЗапуска, Представление, ПоказыватьОповещение, ЭтоОтчет"; + Таблица = ТаблицаОтчетовИОбработок(ИдентификаторыОбъектов); ЗаполнениеФормы = Перечисления.СпособыВызоваДополнительныхОбработок.ЗаполнениеФормы; - Таблица = Запрос.Выполнить().Выгрузить(); Для Каждого ОтчетИлиОбработка Из Таблица Цикл Если Не ЭтоПоставляемаяОбработка(ОтчетИлиОбработка.Ссылка) Тогда Продолжить; @@ -2996,7 +3027,7 @@ ТипыЗаполнениеОбъекта = Новый Массив; Для Каждого СтрокаТаблицыНазначение Из ОтчетИлиОбработка.Назначение Цикл - Источник = БыстрыйПоискПоИОМам[СтрокаТаблицыНазначение.ОбъектНазначения]; + Источник = ИсточникиКоманд[СтрокаТаблицыНазначение.ОбъектНазначения]; Если Источник = Неопределено Тогда Продолжить; КонецЕсли; @@ -3021,7 +3052,7 @@ Команда.РежимЗаписи = "Записывать"; КонецЕсли; Команда.ТипПараметра = Новый ОписаниеТипов(ТипыЗаполнениеОбъекта); - Команда.ДополнительныеПараметры = Новый Структура(КлючиПараметровОбработчика); + Команда.ДополнительныеПараметры = ДополнительныеПараметрыКомандыЗаполнения(); ЗаполнитьЗначенияСвойств(Команда.ДополнительныеПараметры, СтрокаТаблицы); Команда.ДополнительныеПараметры.Ссылка = ОтчетИлиОбработка.Ссылка; Команда.ДополнительныеПараметры.ЭтоОтчет = Ложь; @@ -3029,6 +3060,86 @@ КонецЦикла; КонецПроцедуры +// Возвращаемое значение: +// +// Структура: +// * Вид - Строка - вид обработки, который можно получить с помощью функций +// ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<...>. +// * ЭтоОтчет - Булево +// +Функция ДополнительныеПараметрыКоманды(Вид, ЭтоОтчет) Экспорт + Результат = Новый Структура(); + Результат.Вставить("Вид", Вид); + Результат.Вставить("ЭтоОтчет", ЭтоОтчет); + Возврат Результат; +КонецФункции + +// Возвращаемое значение: +// +// Структура: +// * Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки +// * Вид - Строка +// * ВариантЗапуска - Строка +// * Идентификатор - Строка +// * ПоказыватьОповещение - Строка +// * Представление - Строка +// * ЭтоОтчет - Булево +// +Функция ДополнительныеПараметрыКомандыЗаполнения() + КлючиПараметровОбработчика = "Ссылка, Идентификатор, ВариантЗапуска, Представление, ПоказыватьОповещение, ЭтоОтчет"; + Возврат Новый Структура(КлючиПараметровОбработчика); +КонецФункции + +// Параметры: +// ИдентификаторыОбъектов - Массив +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки +// * Команды - ТаблицаЗначений: +// ** Идентификатор - Строка +// ** ВариантЗапуска - ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок +// ** Представление - Строка +// ** ПоказыватьОповещение - Булево +// ** Скрыть - Булево +// * Назначение - ТаблицаЗначений: +// ** ОбъектНазначения - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// +Функция ТаблицаОтчетовИОбработок(Знач ИдентификаторыОбъектов) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Таблица.Ссылка, + | Таблица.Команды.( + | Идентификатор, + | ВариантЗапуска, + | Представление, + | ПоказыватьОповещение, + | Скрыть + | ), + | Таблица.Назначение.( + | ОбъектНазначения + | ) + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК Таблица + |ГДЕ + | Таблица.Назначение.ОбъектНазначения В(&ИОМы) + | И Таблица.Вид = &Вид + | И Таблица.ИспользоватьДляФормыОбъекта = ИСТИНА + | И Таблица.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется) + | И Таблица.Публикация <> ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена) + | И Таблица.ПометкаУдаления = ЛОЖЬ"; + Запрос.УстановитьПараметр("ИОМы", ИдентификаторыОбъектов); + Запрос.УстановитьПараметр("Вид", Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта); + Если ПравоДоступа("Изменение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Таблица.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)", ""); + Иначе + Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Таблица.Публикация <> ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена)", ""); + КонецЕсли; + Таблица = Запрос.Выполнить().Выгрузить(); + Возврат Таблица +КонецФункции + // Преобразует строковое представление версии в числовое. // Функция ВерсияЧислом(ВерсияСтрокой) diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl index e5c3111da..9dcf23aa0 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl @@ -150,8 +150,8 @@ // Параметры: // ДополнительнаяОбработка - СправочникОбъект.ДополнительныеОтчетыИОбработки, элемент справочника, // который записывается пользователем. -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия права, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения +// Результат - Булево - в этот параметр в данной процедуре устанавливается флаг наличия права, +// СтандартнаяОбработка - Булево - в этот параметр в данной процедуре устанавливается флаг выполнения // стандартной обработки проверки права. // Процедура ПриПроверкеПраваДобавления(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт @@ -170,9 +170,9 @@ // // Параметры: // ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности +// Результат - Булево - в этот параметр в данной процедуре устанавливается флаг наличия возможности // загрузки дополнительного отчета или обработки из файла, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения +// СтандартнаяОбработка - Булево - в этот параметр в данной процедуре устанавливается флаг выполнения // стандартной обработки проверки возможности загрузки дополнительного отчета или обработки из файла. // Процедура ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт @@ -192,9 +192,9 @@ // // Параметры: // ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности +// Результат - Булево - в этот параметр в данной процедуре устанавливается флаг наличия возможности // выгрузки дополнительного отчета или обработки в файл, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения +// СтандартнаяОбработка - Булево - в этот параметр в данной процедуре устанавливается флаг выполнения // стандартной обработки проверки возможности выгрузки дополнительного отчета или обработки в файл. // Процедура ПриПроверкеВозможностиВыгрузкиОбработкиВФайл(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт @@ -214,7 +214,7 @@ // в текущей модели информационной базы. // // Параметры: -// НедоступныеВидыПубликации - Массив Из Строка. +// НедоступныеВидыПубликации - Массив Из Строка // Процедура ПриЗаполненииНедоступныхВидовПубликации(Знач НедоступныеВидыПубликации) Экспорт @@ -231,7 +231,7 @@ // // Параметры: // Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, -// Отказ - булево, флаг отказа от выполнения записи элемента справочника. +// Отказ - булево - флаг отказа от выполнения записи элемента справочника. // Процедура ПередЗаписьюДополнительнойОбработки(Источник, Отказ) Экспорт @@ -288,7 +288,7 @@ // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоОбработкаСервиса(Ссылка) diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl index d3f232423..b46f2f35e 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl @@ -56,8 +56,8 @@ // Возвращает словарь представлений для внешних модулей контейнера. // // Возвращаемое значение - Структура: -// * Именительный - Строка, представление типа внешнего модуля в именительном падеже, -// * Родительный - Строка, представление типа внешнего модуля в родительном падеже. +// * Именительный - Строка - представление типа внешнего модуля в именительном падеже, +// * Родительный - Строка - представление типа внешнего модуля в родительном падеже. // Функция СловарьКонтейнераВнешнегоМодуля() Экспорт @@ -86,7 +86,11 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. -// См. ИнтеграцияПодсистемБСП.ПриРегистрацииМенеджеровВнешнихМодулей. +// См. ИнтеграцияПодсистемБСП.ПриРегистрацииМенеджеровВнешнихМодулей +// +// Параметры: +// Менеджеры - см. ИнтеграцияПодсистемБСП.ПриРегистрацииМенеджеровВнешнихМодулей.Менеджеры +// Процедура ПриРегистрацииМенеджеровВнешнихМодулей(Менеджеры) Экспорт Менеджеры.Добавить(ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный); @@ -130,7 +134,7 @@ Пока Выборка.Следующий() Цикл Объект = Выборка.Ссылка.ПолучитьОбъект(); - НовыеЗапросы = ЗапросыРазрешенийДополнительнойОбработки(Объект, Объект.Разрешения.Выгрузить(), ЗначениеФО); + НовыеЗапросы = ЗапросыРазрешенийДополнительнойОбработки(Объект, ЗначениеФО); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, НовыеЗапросы); КонецЦикла; @@ -139,8 +143,17 @@ КонецФункции -Функция ЗапросыРазрешенийДополнительнойОбработки(Знач Объект, Знач РазрешенияВДанных, Знач ЗначениеФО = Неопределено, Знач ПометкаУдаления = Неопределено) +// Параметры: +// Объект - СправочникСсылка.ДополнительныеОтчетыИОбработки +// ЗначениеФО - Булево +// - Неопределено +// ПометкаУдаления - Булево +// Возвращаемое значение: +// Массив +// +Функция ЗапросыРазрешенийДополнительнойОбработки(Знач Объект, Знач ЗначениеФО = Неопределено, Знач ПометкаУдаления = Неопределено) + РазрешенияВДанных = Объект.Разрешения.Выгрузить(); ЗапрашиваемыеРазрешения = Новый Массив(); Если ЗначениеФО = Неопределено Тогда diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl index d5a13242c..5948fc98f 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl @@ -18,7 +18,7 @@ // но при этом эти ссылки не должны учитываться в бизнес-логике приложения. // // Параметры: -// Массив - массив строк, например, "РегистрСведений.ВерсииОбъектов". +// Массив - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.ИсключенияПоискаСсылок // Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт @@ -37,8 +37,8 @@ // Параметры: // ДополнительнаяОбработка - СправочникОбъект.ДополнительныеОтчетыИОбработки, элемент справочника, // который записывается пользователем. -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия права, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения +// Результат - Булево - в этот параметр в данной процедуре устанавливается флаг наличия права, +// СтандартнаяОбработка - Булево - в этот параметр в данной процедуре устанавливается флаг выполнения // стандартной обработки проверки права. // Процедура ПриПроверкеПраваДобавления(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт @@ -70,9 +70,9 @@ // // Параметры: // ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности +// Результат - Булево - в этот параметр в данной процедуре устанавливается флаг наличия возможности // загрузки дополнительного отчета или обработки из файла, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения +// СтандартнаяОбработка - Булево - в этот параметр в данной процедуре устанавливается флаг выполнения // стандартной обработки проверки возможности загрузки дополнительного отчета или обработки из файла. // Процедура ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт @@ -93,9 +93,9 @@ // // Параметры: // ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности +// Результат - Булево - в этот параметр в данной процедуре устанавливается флаг наличия возможности // выгрузки дополнительного отчета или обработки в файл, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения +// СтандартнаяОбработка - Булево - в этот параметр в данной процедуре устанавливается флаг выполнения // стандартной обработки проверки возможности выгрузки дополнительного отчета или обработки в файл. // Процедура ПриПроверкеВозможностиВыгрузкиОбработкиВФайл(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт @@ -115,7 +115,7 @@ // в текущей модели информационной базы. // // Параметры: -// НедоступныеВидыПубликации - Массив Из Строка. +// НедоступныеВидыПубликации - Массив Из Строка // Процедура ПриЗаполненииНедоступныхВидовПубликации(Знач НедоступныеВидыПубликации) Экспорт @@ -131,8 +131,8 @@ // каталога дополнительных обработок менеджера сервиса. // // Параметры: -// Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, -// Отказ - булево, флаг отказа от выполнения записи элемента справочника. +// Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки +// Отказ - Булево - флаг отказа от выполнения записи элемента справочника. // Процедура ПередЗаписьюДополнительнойОбработки(Источник, Отказ) Экспорт @@ -188,8 +188,8 @@ // ДополнительныеОтчетыИОбработки. // // Параметры: -// Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, -// Отказ - булево, флаг отказа от выполнения удаления элемента справочника из информационной базы. +// Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки +// Отказ - Булево - флаг отказа от выполнения удаления элемента справочника из информационной базы. // Процедура ПередУдалениемДополнительнойОбработки(Источник, Отказ) Экспорт @@ -266,7 +266,7 @@ // // Параметры: // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// СтандартнаяОбработка - Булево, флаг необходимости выполнения стандартной обработки подключения +// СтандартнаяОбработка - Булево - флаг необходимости выполнения стандартной обработки подключения // внешней обработки, // Результат - Строка - имя подключенного внешнего отчета или обработки (в том случае, если в обработчике // для параметра СтандартнаяОбработка было установлено значение Ложь). @@ -355,7 +355,8 @@ // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - дополнительный отчет или обработка. // СтандартнаяОбработка - Булево - флаг необходимости выполнения стандартной обработки подключения // внешней обработки. -// Результат - ВнешняяОбработкаОбъект, ВнешнийОтчетОбъект - объект подключенного внешнего отчета или +// Результат - ВнешняяОбработкаОбъект +// - ВнешнийОтчетОбъект - объект подключенного внешнего отчета или // обработки (в том случае, если в обработчике для параметра СтандартнаяОбработка было установлено значение Ложь). // Процедура ПриСозданииВнешнейОбработки(Знач Ссылка, СтандартнаяОбработка, Результат) Экспорт @@ -390,11 +391,12 @@ // Вызывается перед записью изменений регламентного задания дополнительных отчетов и обработок в модели сервиса. // // Параметры: -// Объект - СправочникОбъект.ДополнительныеОтчетыИОбработки - Объект дополнительного отчета или обработки. -// Команда - СправочникТабличнаяЧастьСтрока.ДополнительныеОтчетыИОбработки.Команды - Описание команды. -// Задание - РегламентноеЗадание, СтрокаТаблицыЗначений - Описание регламентного задания. +// Объект - СправочникОбъект.ДополнительныеОтчетыИОбработки - объект дополнительного отчета или обработки. +// Команда - СправочникТабличнаяЧастьСтрока.ДополнительныеОтчетыИОбработки.Команды - описание команды. +// Задание - РегламентноеЗадание +// - СтрокаТаблицыЗначений - описание регламентного задания. // См. РегламентныеЗаданияСервер.Задание. -// Изменения - Структура - Значения реквизитов задания, которые необходимо изменить. +// Изменения - Структура - значения реквизитов задания, которые необходимо изменить. // См. описание 2-го параметра процедуры РегламентныеЗаданияСервер.ИзменитьЗадание. // Если установить Неопределено, то регламентное задание не будет изменено. // @@ -427,8 +429,7 @@ // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. // // Параметры: -// Обработчики - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. +// Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -442,12 +443,6 @@ Обработчик.ОбщиеДанные = Истина; Обработчик.МонопольныйРежим = Ложь; - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "ДополнительныеОтчетыИОбработкиВМоделиСервиса.ЗапроситьОбновлениеДополнительныхОтчетовИОбработок"; - Обработчик.ОбщиеДанные = Истина; - Обработчик.МонопольныйРежим = Ложь; - КонецПроцедуры #КонецОбласти @@ -461,7 +456,7 @@ // ИспользуемаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - дополнительная обработка. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоПоставляемаяОбработка(ИспользуемаяОбработка) Экспорт @@ -475,7 +470,14 @@ // Выполняет установку поставляемой дополнительной обработки в текущую область данных после получения поставляемых данных // и извещает менеджер сервиса в случае неудачи. // -// См. описание параметров УстановитьПоставляемуюОбработкуВОбластьДанных. +// Параметры: +// ОписаниеИнсталляции - см. УстановитьПоставляемуюОбработкуВОбластьДанных.ОписаниеИнсталляции +// БыстрыйДоступ - см. УстановитьПоставляемуюОбработкуВОбластьДанных.БыстрыйДоступ +// Задания - см. УстановитьПоставляемуюОбработкуВОбластьДанных.Задания +// Разделы - см. УстановитьПоставляемуюОбработкуВОбластьДанных.Разделы +// СправочникиИДокументы - см. УстановитьПоставляемуюОбработкуВОбластьДанных.СправочникиИДокументы +// ВариантыДополнительногоОтчета - см. УстановитьПоставляемуюОбработкуВОбластьДанных.ВариантыДополнительногоОтчета +// Ответственный - см. УстановитьПоставляемуюОбработкуВОбластьДанных.Ответственный // Процедура УстановитьПоставляемуюОбработкуПриПолучении(Знач ОписаниеИнсталляции, Знач БыстрыйДоступ, Знач Задания, Знач Разделы, Знач СправочникиИДокументы, Знач НастройкиРасположенияКоманд, Знач ВариантыДополнительногоОтчета, Знач Ответственный) Экспорт @@ -498,14 +500,14 @@ // // Параметры: // ОписаниеИнсталляции - Структура - сведения об установке поставляемой дополнительной обработки: -// * Идентификатор - УникальныйИдентификатор, уникальный идентификатор ссылки -// элемента справочника ПоставляемыеДополнительныеОтчетыИОбработки, +// * Идентификатор - УникальныйИдентификатор - уникальный идентификатор ссылки +// элемента справочника ПоставляемыеДополнительныеОтчетыИОбработки. // * Представление - Строка - представление инсталляции поставляемой дополнительной // обработки (будет использоваться в качестве наименования элемента справочника -// ДополнительныеОтчетыИОбработки), +// ДополнительныеОтчетыИОбработки). // * Инсталляция - УникальныйИдентификатор - уникальный идентификатор инсталляции // поставляемой дополнительной обработки (будет использоваться в качестве -// уникального идентификатора ссылки справочника ДополнительныеОтчетыИОбработки), +// уникального идентификатора ссылки справочника ДополнительныеОтчетыИОбработки). // БыстрыйДоступ - ТаблицаЗначений - настройки включения команд дополнительной // обработки в быстрый доступ пользователей приложения, колонки: // * ИдентификаторКоманды - Строка - идентификатор команды. @@ -513,18 +515,16 @@ // Задания - ТаблицаЗначений - настройки выполнения команд дополнительной обработки // в качестве регламентных заданий, колонки: // * Идентификатор - Строка - идентификатор команды. -// * РегламентноеЗаданиеРасписание - СписокЗначений - содержит один элемент: +// * РегламентноеЗаданиеРасписание - СписокЗначений: // ** Значение - РасписаниеРегламентногоЗадания - расписание. // * РегламентноеЗаданиеИспользование - Булево - признак включения выполнения команды // в качестве регламентного задания. -// Разделы - ТаблицаЗначений - настройки включения команд для инсталляции -// поставляемой дополнительной обработки в разделы командного интерфейса, колонки: -// * Раздел - СправочникСсылка.ИдентификаторыОбъектовМетаданных. -// СправочникиИДокументы - ТаблицаЗначений - настройки включения команд для инсталляции -// поставляемой дополнительной обработки в интерфейс форм список и элементов, колонки: +// Разделы - ТаблицаЗначений - настройки включения команд для инсталляции поставляемой дополнительной обработки, колонки: +// * Раздел - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// СправочникиИДокументы - ТаблицаЗначений: // * ОбъектНазначения - СправочникСсылка.ИдентификаторыОбъектовМетаданных -// ВариантыДополнительногоОтчета - Массив - ключи вариантов отчетов дополнительного отчета (Строка). -// Ответственный - СправочникСсылка.Пользователи. +// ВариантыДополнительногоОтчета - Массив - ключи вариантов отчетов дополнительного отчета. +// Ответственный - СправочникСсылка.Пользователи // Процедура УстановитьПоставляемуюОбработкуВОбластьДанных(Знач ОписаниеИнсталляции, Знач БыстрыйДоступ, Знач Задания, Знач Разделы, Знач СправочникиИДокументы, Знач НастройкиРасположенияКоманд, Знач ВариантыДополнительногоОтчета, Знач Ответственный) Экспорт @@ -717,7 +717,7 @@ // // Параметры: // ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки, -// ИдентификаторИспользуемойОбработки - УникальныйИдентификатор, GUID существующего в области +// ИдентификаторИспользуемойОбработки - УникальныйИдентификатор - GUID существующего в области // данных элемента справочника ДополнительныеОтчетыИОбработки. // Процедура УдалитьПоставляемуюОбработкуИзОбластиДанных(Знач ПоставляемаяОбработка, Знач ИдентификаторИспользуемойОбработки) Экспорт @@ -847,7 +847,7 @@ // Параметры: // ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки, // ИдентификаторИнсталляции - УникальныйИдентификатор, -// ТекстИсключения - Строка, текст исключения. +// ТекстИсключения - Строка - текст исключения. // Процедура ОбработатьОшибкуУстановкиДополнительнойОбработкиВОбластьДанных(Знач ПоставляемаяОбработка, Знач ИдентификаторИнсталляции, Знач ТекстИсключения) Экспорт @@ -903,7 +903,7 @@ // Возвращаемое значение - Структура: // * ХранилищеОбработки - ХранилищеЗначения, содержащее ДвоичныеДанные дополнительного отчета // или обработки, -// * БезопасныйРежим - Булево, флаг подключения обработки в безопасном режиме. +// * БезопасныйРежим - Булево - флаг подключения обработки в безопасном режиме. // Функция ПараметрыПодключенияИспользуемойОбработки(Знач ИспользуемаяОбработка) Экспорт @@ -1006,8 +1006,8 @@ // Заполняет соответствие имен методов их псевдонимам для вызова из очереди заданий // // Параметры: -// СоответствиеИменПсевдонимам - Соответствие -// Ключ - Псевдоним метода, например ОчиститьОбластьДанных +// СоответствиеИменПсевдонимам - Соответствие: +// Ключ - псевдоним метода, например ОчиститьОбластьДанных // Значение - Имя метода для вызова, например РаботаВМоделиСервиса.ОчиститьОбластьДанных // В качестве значения можно указать Неопределено, в этом случае считается что имя // совпадает с псевдонимом. @@ -1036,14 +1036,7 @@ // Если в менеджере сервиса не был указан файл - значение аргумента равно Неопределено. // // Параметры: -// Обработчики, ТаблицаЗначений - таблица для добавления обработчиков. -// Колонки: -// ВидДанных, строка - код вида данных, обрабатываемый обработчиком -// КодОбработчика, строка(20) - будет использоваться при восстановлении обработки данных после сбоя -// Обработчик, ОбщийМодуль - модуль, содержащий следующие процедуры: -// ДоступныНовыеДанные(Дескриптор, Загружать) Экспорт -// ОбработатьНовыеДанные(Дескриптор, ПутьКФайлу) Экспорт -// ОбработкаДанныхОтменена(Дескриптор) Экспорт +// Обработчики - см. ПоставляемыеДанныеПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных.Обработчики // Процедура ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики) Экспорт @@ -1058,7 +1051,7 @@ // принимаемых сообщений. // // Параметры: -// МассивОбработчиков - массив +// МассивОбработчиков - Массив // Процедура РегистрацияИнтерфейсовПринимаемыхСообщений(МассивОбработчиков) Экспорт @@ -1070,7 +1063,7 @@ // отправляемых сообщений. // // Параметры: -// МассивОбработчиков - массив +// МассивОбработчиков - Массив // Процедура РегистрацияИнтерфейсовОтправляемыхСообщений(МассивОбработчиков) Экспорт @@ -1083,10 +1076,10 @@ // со старыми версиями ИБ-корреспондентов. // // Параметры: -// ИнтерфейсСообщения - строка, название программного интерфейса сообщения, для которого определяется версия -// ПараметрыПодключения - структура, параметры подключения к ИБ-корреспонденту -// ПредставлениеПолучателя - строка, представление ИБ-корреспондента -// Результат - строка, определяемая версия. Значение данного параметра может быть изменено в данной процедуре. +// ИнтерфейсСообщения - строка - название программного интерфейса сообщения, для которого определяется версия +// ПараметрыПодключения - структура - параметры подключения к ИБ-корреспонденту +// ПредставлениеПолучателя - строка - представление ИБ-корреспондента +// Результат - строка - определяемая версия. Значение данного параметра может быть изменено в данной процедуре. // Процедура ПриОпределенииВерсииИнтерфейсаКорреспондента(Знач ИнтерфейсСообщения, Знач ПараметрыПодключения, Знач ПредставлениеПолучателя, Результат) Экспорт @@ -1121,7 +1114,7 @@ // Заполняет массив типов, исключаемых из выгрузки и загрузки данных. // // Параметры: -// Типы - Массив Из Типы. +// Типы - см. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки.Типы // Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт @@ -1142,7 +1135,7 @@ // обработки из каталога дополнительных отчетов и обработок менеджера сервиса. // // Параметры: -// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки. +// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки // Процедура АктуализацияНастроекИспользуемойОбработки(Знач Ссылка) Экспорт @@ -1184,7 +1177,7 @@ // // Параметры: // Дескриптор - ОбъектXDTO Descriptor. -// Загружать - булево, возвращаемое. +// Загружать - булево - возвращаемое. // Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт @@ -1224,7 +1217,7 @@ // // Параметры: // Дескриптор - ОбъектXDTO Дескриптор. -// ПутьКФайлу - Строка или Неопределено. Полное имя извлеченного файла. Файл будет автоматически удален +// ПутьКФайлу - Строка или Неопределено - полное имя извлеченного файла. Файл будет автоматически удален // после завершения процедуры. Если в менеджере сервиса не был // указан файл - значение аргумента равно Неопределено. // @@ -1283,7 +1276,7 @@ БлокируемыеОбработки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Для Каждого БлокируемаяОбработка Из БлокируемыеОбработки Цикл - ПоставляемаяОбработка = БлокируемаяОбработка.ПолучитьОбъект(); + ПоставляемаяОбработка = БлокируемаяОбработка.ПолучитьОбъект(); // СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки - ПоставляемаяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; ПоставляемаяОбработка.ПричинаОтключения = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.ОбновлениеВерсииКонфигурации; ПоставляемаяОбработка.Записать(); @@ -1297,31 +1290,6 @@ КонецПроцедуры -// Запрашивает обновления поставляемых дополнительных отчетов и обработок из -// менеджера сервиса. -// -Процедура ЗапроситьОбновлениеДополнительныхОтчетовИОбработок() Экспорт - - Если Не ОбщегоНазначения.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - МодульПоставляемыеДанные = ОбщегоНазначения.ОбщийМодуль("ПоставляемыеДанные"); - МодульПоставляемыеДанные.ЗапроситьВсеДанные(); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Запрос обновлений дополнительных отчетов и обработок'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - -КонецПроцедуры - #КонецОбласти #КонецОбласти @@ -1403,7 +1371,7 @@ // ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки - поставляемая обработка. // // Возвращаемое значение: -// ТаблицаЗначений - перечень инсталляций: +// ТаблицаЗначений: // * ОбластьДанных - Число (7,0) - номер области данных. // * ИспользуемаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - дополнительная обработка. // @@ -1429,7 +1397,7 @@ // ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки - поставляемая обработка. // // Возвращаемое значение: -// ТаблицаЗначений - перечень инсталляций: +// ТаблицаЗначений: // * ОбластьДанных - Число (7,0) - номер области данных. // * ПараметрыУстановки - ХранилищеЗначения - очередь инсталляций. // @@ -1455,7 +1423,8 @@ // и обработок. // // Возвращаемое значение: -// Строка - . +// Строка +// Функция ИдентификаторВидаПоставляемыхДанных() Возврат "ДОиО"; // Не локализуется @@ -1691,6 +1660,10 @@ // Процедура выполняет перезаполнение элемента справочника ДополнительныеОтчетыИОбработки // по элементу справочника ПоставляемыеДополнительныеОтчетыИОбработки. // +// Параметры: +// ИспользуемаяОбработка - СправочникОбъект.ДополнительныеОтчетыИОбработки +// ПоставляемаяОбработка - СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки +// Процедура ЗаполнитьНастройкиИспользуемойОбработки(ИспользуемаяОбработка, ПоставляемаяОбработка) ЗаполнитьЗначенияСвойств(ИспользуемаяОбработка, ПоставляемаяОбработка, , "ХранилищеОбработки, Владелец, Родитель, ИспользоватьДляФормыСписка, ИспользоватьДляФормыОбъекта"); @@ -1775,9 +1748,9 @@ // ТаблицаСовместимости - ОбъектXDTO - ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Compatibility/1.0.0.1}CompatibilityList. // // Возвращаемое значение: -// ТаблицаЗначений - , колонки: -// ConfigarationName - строка, имя конфигурации, -// VersionNumber - строка, версия конфигурации. +// ТаблицаЗначений: +// ConfigarationName - строка - имя конфигурации, +// VersionNumber - строка - версия конфигурации. // Функция ПрочитатьТаблицуСовместимости(Знач ТаблицаСовместимости) Экспорт @@ -1806,8 +1779,8 @@ // использование дополнительных отчетов и обработок. // // Параметры: -// Константа - строка, имя измененной константы, как оно задано в метаданных, -// Значение - булево, новое значение измененной константы. +// Константа - строка - имя измененной константы, как оно задано в метаданных, +// Значение - булево - новое значение измененной константы. // Процедура СинхронизацияЗначенийРегулирующихКонстант(Знач Константа, Знач Значение) Экспорт diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl index 7385bc38c..9341ac892 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl @@ -15,10 +15,10 @@ // Параметры: // ОбъектОбработки - СправочникОбъект.ДополнительныеОтчетыИОбработки - дополнительная обработка. // ОбъектВерсии - СправочникОбъект.ДополнительныеОтчетыИОбработки - дополнительная обработка. -// ВариантыОтчета - ТаблицаЗначений - колонки: +// ВариантыОтчета - ТаблицаЗначений: // * КлючВарианта - Строка - ключ варианта дополнительного отчета. // * Представление - Строка - представление варианта дополнительного отчета. -// * Назначение - ТаблицаЗначений - колонки: +// * Назначение - ТаблицаЗначений: // ** РазделИлиГруппа - Строка - для сопоставления с элементом справочника ИдентификаторыОбъектовМетаданных. // ** Важный - Булево - Истина, если выводится в группе важных. // ** СмТакже - Булево - Истина, если выводится в группе "См. также". @@ -290,7 +290,7 @@ // ВариантыОтчета - ТаблицаЗначений - сведения о вариантах отчета: // * КлючВарианта - Строка - ключ варианта дополнительного отчета. // * Представление - Строка - представление варианта дополнительного отчета. -// * Назначение - ТаблицаЗначений - колонки: +// * Назначение - ТаблицаЗначений: // ** РазделИлиГруппа - Строка - для сопоставления с элементом справочника ИдентификаторыОбъектовМетаданных, // ** Важный - Булево - Истина, если выводится в группе важных. // ** СмТакже - Булево - Истина, если выводится в группе "См. также". diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl index 6b7e5cf14..88fc976ab 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl @@ -14,7 +14,7 @@ // Версия - Строка - если параметр задан, то в пространство имен включается указанная версия вместо текущей. // // Возвращаемое значение: -// Строка - +// Строка // Функция Пакет(Знач Версия = "") Экспорт @@ -29,7 +29,7 @@ // Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений // // Возвращаемое значение: -// Строка - +// Строка // Функция Версия() Экспорт @@ -40,7 +40,7 @@ // Возвращает название программного интерфейса сообщений // // Возвращаемое значение: -// Строка - +// Строка // Функция ПрограммныйИнтерфейс() Экспорт @@ -60,11 +60,11 @@ // Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionAssignmentObject // // Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: -// ОбъектXDTO - +// ОбъектXDTO // Функция ТипОбъектНазначения(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -79,7 +79,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция ТипНазначениеРазделам(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -94,7 +94,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция ТипНазначениеСправочникамИДокументам(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -109,7 +109,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция ТипКоманда(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -124,7 +124,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция ТипНазначениеВариантаОтчета(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -139,7 +139,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция ТипВариантОтчета(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -154,7 +154,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция ТипНастройкиКоманды(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -169,7 +169,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция ТипМанифест(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -181,7 +181,7 @@ // значениям XDTO-типа {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionCategory // // Возвращаемое значение: -// Структура - +// Структура // Функция СловарьВидыДополнительныхОтчетовИОбработок() Экспорт @@ -204,7 +204,7 @@ // значениям XDTO-типа {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionStartupType // // Возвращаемое значение: -// Структура - +// Структура // Функция СловарьСпособыВызоваДополнительныхОтчетовИОбработок() Экспорт diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index d43ef86a8..248e82995 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -41,7 +41,7 @@ ФормаСсылка = Неопределено; КонецЕсли; - ОткрытьФорму("ОбщаяФорма.ДополнительныеОтчетыИОбработки", Параметры, + ОткрытьФорму("ОбщаяФорма.ДополнительныеОтчетыИОбработки", Параметры, ПараметрыВыполненияКоманды.Источник,,, ФормаСсылка); КонецПроцедуры @@ -71,7 +71,7 @@ // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка выполняемой дополнительной обработки или отчета. // // Возвращаемое значение: -// Структура - шаблон параметров выполнения команды в фоне. +// Структура - шаблон параметров выполнения команды в фоне: // * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - передается "как есть" из // параметров формы. // * СопровождающийТекст - Строка - текст длительной операции. @@ -107,13 +107,15 @@ // Обработчик - ОписаниеОповещения - описание процедуры, которая принимает результат выполнения фонового задания. // См. описание 2-го параметра (ОповещениеОЗавершении) процедуры ДлительныеОперацииКлиент.ОжидатьЗавершение(). // Параметры процедуры: -// * Задание - Структура, Неопределено - сведения о фоновом задании. +// * Задание - Структура +// - Неопределено - сведения о фоновом задании: // ** Статус - Строка - "Выполнено" (задание завершено) или "Ошибка" (в задании возникло исключение). // ** АдресРезультата - Строка - адрес временного хранилища, по которому размещен результат процедуры. // Результат заполняется в структуре ПараметрыВыполнения.РезультатВыполнения обработчика команды. // ** КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка". // ** ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка". -// ** Сообщения - ФиксированныйМассив, Неопределено - сообщения из фонового задания. +// ** Сообщения - ФиксированныйМассив +// - Неопределено - сообщения из фонового задания. // * ДополнительныеПараметры - значение, которое было указано при создании объекта ОписаниеОповещения. // // Пример: @@ -208,7 +210,7 @@ // Справочник.РассылкиОтчетов.Форма.ФормаЭлемента.ДобавитьДополнительныйОтчет. // // Параметры: -// ЭлементФормы - Произвольный - Элемент формы, в который выполняется подбор элементов. +// ЭлементФормы - Произвольный - элемент формы, в который выполняется подбор элементов. // Процедура РассылкаОтчетовПодборДопОтчета(ЭлементФормы) Экспорт @@ -233,7 +235,7 @@ // Обработчик внешней команды печати. // // Параметры: -// ПараметрыКоманды - Структура - структура из строки таблицы команд, см. +// ВыполняемаяКоманда - Структура - структура из строки таблицы команд, см. // ДополнительныеОтчетыИОбработки.ПриПолученииКомандПечати. // Форма - ФормаКлиентскогоПриложения - форма, в которой выполняется команда печати. // @@ -260,17 +262,19 @@ КонецПроцедуры -// Обработчик команды, открывающей список команд дополнительных отчетов и обработок. +// Открывает список команд дополнительных отчетов и обработок. // // Параметры: -// МассивСсылок - Массив - Массив ссылок выбранных объектов, для которых выполняется команда. -// ПараметрыВыполнения - Структура - Контекст команды. -// * ОписаниеКоманды - Структура - Сведения о выполняемой команде. -// ** Идентификатор - Строка - Идентификатор команды. -// ** Представление - Строка - Представление команды в форме. -// ** Имя - Строка - Имя команды в форме. -// * Форма - ФормаКлиентскогоПриложения - Форма, из которой была вызвана команда. -// * Источник - ДанныеФормыСтруктура, ТаблицаФормы - Объект или список формы с полем "Ссылка". +// МассивСсылок - Массив Из ЛюбаяСсылка - ссылки выбранных объектов, для которых выполняется команда. +// ПараметрыВыполнения - Структура: +// * ОписаниеКоманды - Структура: +// ** Идентификатор - Строка - идентификатор команды. +// ** Представление - Строка - представление команды в форме. +// ** Имя - Строка - имя команды в форме. +// ** ДополнительныеПараметры - см. ДополнительныеОтчетыИОбработки.ДополнительныеПараметрыКоманды +// * Форма - ФормаКлиентскогоПриложения - форма, из которой была вызвана команда. +// * Источник - ДанныеФормыСтруктура +// - ТаблицаФормы - объект или список формы с полем "Ссылка". // Процедура ОткрытьСписокКоманд(Знач МассивСсылок, Знач ПараметрыВыполнения) Экспорт Контекст = Новый Структура; @@ -279,23 +283,13 @@ ОткрытьФормуКомандДополнительныхОтчетовИОбработок(МассивСсылок, Контекст, Вид); КонецПроцедуры -// Обработчик команды заполнения. -// -// Параметры: -// МассивСсылок - Массив - Массив ссылок выбранных объектов, для которых выполняется команда. -// ПараметрыВыполнения - Структура - Контекст команды. -// * ОписаниеКоманды - Структура - Сведения о выполняемой команде. -// ** Идентификатор - Строка - Идентификатор команды. -// ** Представление - Строка - Представление команды в форме. -// ** Имя - Строка - Имя команды в форме. -// * Форма - ФормаКлиентскогоПриложения - Форма, из которой была вызвана команда. -// * Источник - ДанныеФормыСтруктура, ТаблицаФормы - Объект или список формы с полем "Ссылка". -// +// См. ДополнительныеОтчетыИОбработки.ОбработчикКомандыЗаполнения Процедура ОбработчикКомандыЗаполнения(Знач МассивСсылок, Знач ПараметрыВыполнения) Экспорт Форма = ПараметрыВыполнения.Форма; Объект = ПараметрыВыполнения.Источник; ВыполняемаяКоманда = ПараметрыВыполнения.ОписаниеКоманды.ДополнительныеПараметры; + ПараметрыВызоваСервера = Новый Структура; ПараметрыВызоваСервера.Вставить("ИдентификаторКоманды", ВыполняемаяКоманда.Идентификатор); ПараметрыВызоваСервера.Вставить("ДополнительнаяОбработкаСсылка", ВыполняемаяКоманда.Ссылка); @@ -496,6 +490,11 @@ КонецПроцедуры // Показывает диалог установки расширения, затем выгружает данные дополнительного отчета или обработки. +// +// Параметры: +// ПараметрыВыгрузки - Структура: +// * Ссылка - ЛюбаяСсылка +// Процедура ВыгрузитьВФайл(ПараметрыВыгрузки) Экспорт Перем Адрес; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index 73aad27c5..b00de1597 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -431,7 +431,7 @@ // Имя раздела, соответствующего начальной странице. // // Возвращаемое значение: -// Строка - +// Строка // Функция ИдентификаторРабочегоСтола() Экспорт diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl index 01e5068b4..2efdd48f4 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl @@ -14,7 +14,7 @@ // Для начальной страницы указать ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы. // // Параметры: -// Разделы - Массив - разделы, в которых размещены команды вызова дополнительных обработок. +// Разделы - Массив - разделы, в которых размещены команды вызова дополнительных обработок: // * ОбъектМетаданных: Подсистема - метаданные раздела (подсистемы). // * Строка - для начальной страницы. // @@ -30,7 +30,7 @@ // Для начальной страницы указать ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы. // // Параметры: -// Разделы - Массив - разделы, в которых размещены команды вызова дополнительных отчетов. +// Разделы - Массив - разделы, в которых размещены команды вызова дополнительных отчетов: // * ОбъектМетаданных: Подсистема - метаданные раздела (подсистемы). // * Строка - для начальной страницы. // diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl index ba3c7d0e3..b2efa3e4a 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl @@ -13,7 +13,7 @@ // Устарела. Следует использовать РегламентныеЗаданияСервер.ДобавитьЗадание(). // // Возвращаемое значение: -// Неопределено - Следует использовать РегламентныеЗаданияСервер.ДобавитьЗадание(). +// Неопределено - следует использовать РегламентныеЗаданияСервер.ДобавитьЗадание(). // Функция СоздатьНовоеЗадание() Экспорт @@ -24,10 +24,10 @@ // Устарела. Следует использовать РегламентныеЗаданияСервер.УникальныйИдентификатор(). // // Параметры: -// Задание - РегламентноеЗадание - Регламентное задание. +// Задание - РегламентноеЗадание - регламентное задание. // // Возвращаемое значение: -// Неопределено - Следует использовать РегламентныеЗаданияСервер.УникальныйИдентификатор(). +// Неопределено - следует использовать РегламентныеЗаданияСервер.УникальныйИдентификатор(). // Функция ПолучитьИдентификаторЗадания(Знач Задание) Экспорт @@ -38,10 +38,10 @@ // Устарела. Следует использовать РегламентныеЗаданияСервер.ИзменитьЗадание(). // // Параметры: -// Задание - РегламентноеЗадание - Регламентное задание. -// Использование - Булево - Флаг использования регламентного задания. -// Параметры - Массив - Параметры регламентного задания. -// Расписание - РасписаниеРегламентногоЗадания - Расписание регламентного задания. +// Задание - РегламентноеЗадание - регламентное задание. +// Использование - Булево - флаг использования регламентного задания. +// Параметры - Массив - параметры регламентного задания. +// Расписание - РасписаниеРегламентногоЗадания - расписание регламентного задания. // Процедура УстановитьПараметрыЗадания(Задание, Использование, Параметры, Расписание) Экспорт @@ -52,10 +52,10 @@ // Устарела. Следует использовать РегламентныеЗаданияСервер.НайтиЗадания(). // // Параметры: -// Задание - РегламентноеЗадание - Регламентное задание. +// Задание - РегламентноеЗадание - регламентное задание. // // Возвращаемое значение: -// Неопределено - Следует использовать РегламентныеЗаданияСервер.НайтиЗадания(). +// Неопределено - следует использовать РегламентныеЗаданияСервер.НайтиЗадания(). // Функция ПолучитьПараметрыЗадания(Знач Задание) Экспорт @@ -66,10 +66,10 @@ // Устарела. Следует использовать РегламентныеЗаданияСервер.Задание(). // // Параметры: -// Идентификатор - УникальныйИдентификатор - Идентификатор регламентного задания. +// Идентификатор - УникальныйИдентификатор - идентификатор регламентного задания. // // Возвращаемое значение: -// Неопределено - Следует использовать РегламентныеЗаданияСервер.НайтиЗадания(). +// Неопределено - следует использовать РегламентныеЗаданияСервер.НайтиЗадания(). // Функция НайтиЗадание(Знач Идентификатор) Экспорт @@ -80,7 +80,7 @@ // Устарела. Следует использовать РегламентныеЗаданияСервер.УдалитьЗадание(). // // Параметры: -// Задание - РегламентноеЗадание - Регламентное задание. +// Задание - РегламентноеЗадание - регламентное задание. // Процедура УдалитьЗадание(Знач Задание) Экспорт diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index 653ec74d5..47a89ac56 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -54,7 +54,13 @@ // ИмяСобытия - Строка - имя события для журнала регистрации. // Уровень - УровеньЖурналаРегистрации - уровни важности событий журнала регистрации. // ОбъектМетаданных - ОбъектМетаданных - объект метаданных, к которому относится событие. -// Данные - ЛюбаяСсылка, Число, Строка, Дата, Булево, Неопределено, Тип - Данные, с которыми связано событие. +// Данные - ЛюбаяСсылка +// - Число +// - Строка +// - Дата +// - Булево +// - Неопределено +// - Тип - данные, с которыми связано событие. // Рекомендуется указывать ссылки на объекты данных (элементы справочников, документы, к которым // относится событие). // Комментарий - Строка - комментарий для события журнала. @@ -74,17 +80,18 @@ // // Параметры: // -// ПараметрыОтчета - Структура - Содержит параметры для чтения событий журнала регистрации. Содержит поля: -// * Журнал - ТаблицаЗначений - Содержит записи журнала регистрации. -// * ОтборЖурналаНаКлиенте - Структура - Настройки отбора для чтения записей журнала регистрации. -// * КоличествоСобытий - Число - Ограничение числа считываемых событий журнала. -// * УникальныйИдентификатор - УникальныйИдентификатор - Уникальный идентификатор формы. -// * МенеджерВладельца - Произвольный - Менеджер объекта, в форме которого отображается журнал +// ПараметрыОтчета - Структура - содержит параметры для чтения событий журнала регистрации. Содержит поля: +// * Журнал - ТаблицаЗначений - содержит записи журнала регистрации. +// * ОтборЖурналаНаКлиенте - Структура - настройки отбора для чтения записей журнала регистрации. +// * КоличествоСобытий - Число - ограничение числа считываемых событий журнала. +// * УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. +// * МенеджерВладельца - Произвольный - менеджер объекта, в форме которого отображается журнал // регистрации, необходим для обратного вызова функций // оформления. -// * ДобавлятьДополнительныеКолонки - Булево - Определяет необходимость обратного вызова для добавления +// * ДобавлятьДополнительныеКолонки - Булево - определяет необходимость обратного вызова для добавления // дополнительных колонок. -// АдресХранилища - Строка, УникальныйИдентификатор - Адрес временного хранилища для результата. +// АдресХранилища - Строка +// - УникальныйИдентификатор - адрес временного хранилища для результата. // // Результат представляет собой структуру с полями: // СобытияЖурнала - ТаблицаЗначений - Отобранные события. @@ -367,8 +374,9 @@ // Только для внутреннего использования. // -Процедура ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, УникальныйИдентификатор) Экспорт +Процедура ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, ХранилищеДанных) Экспорт + Соответствие = ПолучитьИзВременногоХранилища(ХранилищеДанных); Для Каждого СтрокаСобытие Из СобытияЖурнала Цикл Если ПустаяСтрока(СтрокаСобытие.АдресДанных) Тогда АдресДанных = ""; @@ -379,15 +387,18 @@ ЧтениеXML.УстановитьСтроку(СтрокаСобытие.АдресДанных); АдресДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); КонецЕсли; - СтрокаСобытие.АдресДанных = ПоместитьВоВременноеХранилище(АдресДанных, УникальныйИдентификатор); + ИдентификаторСобытия = Строка(Новый УникальныйИдентификатор); + Соответствие.Вставить(ИдентификаторСобытия, АдресДанных); + СтрокаСобытие.АдресДанных = ИдентификаторСобытия; КонецЦикла; + ПоместитьВоВременноеХранилище(Соответствие, ХранилищеДанных); КонецПроцедуры // Определяет смещение времени сервера относительно времени программы. // // Возвращаемое значение: -// Число - Смещение времени в секундах. +// Число - смещение времени в секундах. // Может использоваться для приведения фильтров, применяемых к журналу, к дате сервера, // а также для приведения дат, полученных из журнала, к датам программы. // @@ -431,7 +442,7 @@ // // Параметры: // Отбор - отбор - передаваемый отбор. -// Отбор - Элемент отбора - элемент передаваемого отбора. +// Отбор - элемент отбора - элемент передаваемого отбора. // Процедура ПреобразованиеЭлементаОтбора(Отбор, ЭлементОтбора) diff --git a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl index 2727516f1..08dc5c8e1 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl @@ -56,10 +56,11 @@ СтруктураСообщения.Вставить("Комментарий", Комментарий); СтруктураСообщения.Вставить("ДатаСобытия", ДатаСобытия); - ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"].Добавить(СтруктураСообщения); + СообщенияДляЖурналаРегистрации = ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]; // СписокЗначений + СообщенияДляЖурналаРегистрации.Добавить(СтруктураСообщения); Если ЗаписатьСобытия Тогда - ЖурналРегистрацииВызовСервера.ЗаписатьСобытияВЖурналРегистрации(ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); + ЖурналРегистрацииВызовСервера.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); КонецЕсли; КонецПроцедуры @@ -67,16 +68,19 @@ // Открывает форму журнала регистрации с установленным отбором. // // Параметры: -// Отбор - Структура - со свойствами: -// * Пользователь - Строка, СписокЗначений - имя или список пользователей -// информационной базы. -// * СобытиеЖурналаРегистрации - Строка, Массив - идентификатор события. +// Отбор - Структура: +// * Пользователь - Строка +// - СписокЗначений - имя или список пользователей +// информационной базы. +// * СобытиеЖурналаРегистрации - Строка +// - Массив - идентификатор события. // * ДатаНачала - Дата - начало интервала отображаемых событий. // * ДатаОкончания - Дата - конец интервала отображаемых событий. // * Данные - Произвольный - данные любого типа. // * Сеанс - СписокЗначений - список выбираемых сеансов. -// * Уровень - Строка, Массив - представление уровня важности -// события журнала регистрации. +// * Уровень - Строка +// - Массив - представление уровня важности +// события журнала регистрации. // * ИмяПриложения - Массив - массив идентификаторов приложения. // Владелец - ФормаКлиентскогоПриложения - форма, из которой открывается журнал регистрации. // @@ -126,14 +130,16 @@ // Параметры: // Данные - СтрокаТаблицыЗначений - строка журнала регистрации. // -Процедура ПросмотрТекущегоСобытияВОтдельномОкне(Данные) Экспорт +Процедура ПросмотрТекущегоСобытияВОтдельномОкне(Данные, ХранилищеДанных) Экспорт Если Данные = Неопределено Тогда Возврат; КонецЕсли; КлючУникальностиФормы = Данные.АдресДанных; - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.Событие", СобытиеЖурналаРегистрацииВСтруктуру(Данные),, КлючУникальностиФормы); + ПараметрыОткрытияФормы = СобытиеЖурналаРегистрацииВСтруктуру(Данные); + ПараметрыОткрытияФормы.Вставить("ХранилищеДанных", ХранилищеДанных); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.Событие", ПараметрыОткрытияФормы,, КлючУникальностиФормы); КонецПроцедуры @@ -142,8 +148,8 @@ // // Параметры: // ИнтервалДат - СтандартныйПериод - интервал дат отбора. -// ОтборЖурналаРегистрации - Структура - отбор журнала регистрации. -// ОбработчикОповещения - ОписаниеОповещения - +// ОтборЖурналаРегистрации - Структура +// ОбработчикОповещения - ОписаниеОповещения // Процедура УстановитьИнтервалДатДляПросмотра(ИнтервалДат, ОтборЖурналаРегистрации, ОбработчикОповещения = Неопределено) Экспорт @@ -180,43 +186,45 @@ // Выполняет обработку выбора отдельного события в таблице событий. // // Параметры: -// ТекущиеДанные - СтрокаТаблицыЗначений - строка журнала регистрации. -// Поле - ПолеФормы - поле таблицы значений. -// ИнтервалДат - СтандартныйПериод - -// ОтборЖурналаРегистрации - Отбор - отбор журнала регистрации. +// Параметры - Структура: +// * ТекущиеДанные - СтрокаТаблицыЗначений - строка журнала регистрации. +// * Поле - ПолеФормы - поле таблицы значений. +// * ИнтервалДат - СтандартныйПериод +// * ОтборЖурналаРегистрации - Отбор - отбор журнала регистрации. +// * ХранилищеДанных - Строка // -Процедура СобытияВыбор(ТекущиеДанные, Поле, ИнтервалДат, ОтборЖурналаРегистрации) Экспорт +Процедура СобытияВыбор(Параметры) Экспорт - Если ТекущиеДанные = Неопределено Тогда + Если Параметры.ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - Если Поле.Имя = "Данные" Или Поле.Имя = "ПредставлениеДанных" Тогда - Если ТекущиеДанные.Данные <> Неопределено - И (ТипЗнч(ТекущиеДанные.Данные) <> Тип("Строка") - И ЗначениеЗаполнено(ТекущиеДанные.Данные)) Тогда + Если Параметры.Поле.Имя = "Данные" Или Параметры.Поле.Имя = "ПредставлениеДанных" Тогда + Если Параметры.ТекущиеДанные.Данные <> Неопределено + И (ТипЗнч(Параметры.ТекущиеДанные.Данные) <> Тип("Строка") + И ЗначениеЗаполнено(Параметры.ТекущиеДанные.Данные)) Тогда - ОткрытьДанныеДляПросмотра(ТекущиеДанные); + ОткрытьДанныеДляПросмотра(Параметры.ТекущиеДанные); Возврат; КонецЕсли; КонецЕсли; - Если Поле.Имя = "Дата" Тогда - УстановитьИнтервалДатДляПросмотра(ИнтервалДат, ОтборЖурналаРегистрации); + Если Параметры.Поле.Имя = "Дата" Тогда + УстановитьИнтервалДатДляПросмотра(Параметры.ИнтервалДат, Параметры.ОтборЖурналаРегистрации); Возврат; КонецЕсли; - ПросмотрТекущегоСобытияВОтдельномОкне(ТекущиеДанные); + ПросмотрТекущегоСобытияВОтдельномОкне(Параметры.ТекущиеДанные, Параметры.ХранилищеДанных); КонецПроцедуры // Заполняет отбор в соответствии с значением в текущей колонке событий. // // Параметры: -// ТекущиеДанные - СтрокаТаблицыЗначений - +// ТекущиеДанные - СтрокаТаблицыЗначений // ТекущийЭлемент - ПолеФормы - текущий элемент строки таблицы значений. -// ОтборЖурналаРегистрации - Структура - отбор журнала регистрации. -// КолонкиИсключения - СписокЗначений - колонки исключения. +// ОтборЖурналаРегистрации - Структура +// КолонкиИсключения - СписокЗначений // // Возвращаемое значение: // Булево - Истина, если отбор установлен, Ложь - Иначе. @@ -317,6 +325,7 @@ ПараметрыФормы.Вставить("РабочийСервер", Данные.РабочийСервер); ПараметрыФормы.Вставить("ОсновнойIPПорт", Данные.ОсновнойIPПорт); ПараметрыФормы.Вставить("ВспомогательныйIPПорт", Данные.ВспомогательныйIPПорт); + ПараметрыФормы.Вставить("Уровень", Данные.Уровень); Если Данные.Свойство("РазделениеДанныхСеанса") Тогда ПараметрыФормы.Вставить("РазделениеДанныхСеанса", Данные.РазделениеДанныхСеанса); @@ -332,8 +341,9 @@ // Только для внутреннего использования. // // Параметры: -// Результат - СтандартныйПериод, Неопределено - -// ДополнительныеПараметры - Структура - +// Результат - СтандартныйПериод +// - Неопределено +// ДополнительныеПараметры - Структура // Процедура УстановитьИнтервалДатДляПросмотраЗавершение(Результат, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl index b17f7971b..1e361866a 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl @@ -12,12 +12,12 @@ // // Параметры: // Таблица - ТаблицаЗначений - ОписаниеТабличнойЧасти с колонками. -// - Строка - Для получения списка колонок табличной части +// - Строка - для получения списка колонок табличной части // необходимо указать его полное имя строкой, как в метаданных, например "Документы.СчетНаОплату.ТабличныеЧасти.Товары". -// Колонки - Строка - Список извлекаемых колонок, разделенный запятыми. Например: "Номер, Товар, Количество". +// Колонки - Строка - список извлекаемых колонок, разделенный запятыми. Например: "Номер, Товар, Количество". // // Возвращаемое значение: -// Массив - Структура с описание колонок для макета. См. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета. +// Массив из см. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета. // Функция СформироватьОписаниеКолонок(Таблица, Колонки = Неопределено) Экспорт @@ -43,7 +43,27 @@ Если ИзвлекатьНеВсеКолонки И СписокКолонокДляИзвлечения.Найти(Колонка.Имя) = Неопределено Тогда Продолжить; КонецЕсли; - НоваяКолонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета(Колонка.Имя, Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина); + Подсказка = ""; + Для каждого ТипКолонки Из Колонка.ТипЗначения.Типы() Цикл + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипКолонки); + + Если ОбъектМетаданных <> Неопределено Тогда + Подсказка = Подсказка + ОбъектМетаданных.Комментарий + Символы.ПС; + + Если ОбщегоНазначения.ЭтоПеречисление(ОбъектМетаданных) Тогда + ПодсказкаНабор = Новый Массив; + ПодсказкаНабор.Добавить(НСтр("ru='Доступные варианты:'")); + Для каждого ВариантПеречисления Из ОбъектМетаданных.ЗначенияПеречисления Цикл + ПодсказкаНабор.Добавить(ВариантПеречисления.Представление()); + КонецЦикла; + Подсказка = СтрСоединить(ПодсказкаНабор, Символы.ПС); + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + НоваяКолонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета(Колонка.Имя, Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина, Подсказка); + НоваяКолонка.Позиция = Позиция; СписокКолонок.Добавить(НоваяКолонка); Позиция = Позиция + 1; @@ -79,4 +99,42 @@ КонецПроцедуры +// Сообщает все требуемые сведения о процедуре загрузки данных из файла. +// +// Возвращаемое значение: +// Структура: +// * Заголовок - Строка - представление в списке вариантов загрузки. +// * ТипДанныхКолонки - Соответствие +// * ИмяМакетаСШаблоном - Строка - название макета со структурой данных(необязательный +// параметр, значение по +// умолчанию - "ЗагрузкаДанныхИзФайла"). +// * ОбязательныеКолонкиМакета - Массив из Строка - содержит список обязательных полей для заполнения. +// * ЗаголовокКолонкиСопоставления - Строка - представление колонки сопоставления в шапке таблицы +// сопоставления данных(необязательный параметр, значение по +// умолчанию формируются - "Справочник: <синоним справочника>"). +// * ПолноеИмяОбъекта - Строка - имя Объекта. +// * ТипЗагрузки - Строка +// +Функция ПараметрыЗагрузкиИзФайла(ИмяОбъектаСопоставления) Экспорт + + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаСопоставления); + + ОбязательныеКолонкиМакета = Новый Массив; + Для каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл + Если Реквизит.ПроверкаЗаполнения=ПроверкаЗаполнения.ВыдаватьОшибку Тогда + ОбязательныеКолонкиМакета.Добавить(Реквизит.Имя); + КонецЕсли; + КонецЦикла; + + ПараметрыПоУмолчанию = Новый Структура; + ПараметрыПоУмолчанию.Вставить("Заголовок", МетаданныеОбъекта.Представление()); + ПараметрыПоУмолчанию.Вставить("ОбязательныеКолонки", ОбязательныеКолонкиМакета); + ПараметрыПоУмолчанию.Вставить("ТипДанныхКолонки", Новый Соответствие); + ПараметрыПоУмолчанию.Вставить("ТипЗагрузки", ""); + ПараметрыПоУмолчанию.Вставить("ПолноеИмяОбъекта", ИмяОбъектаСопоставления); + + Возврат ПараметрыПоУмолчанию; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl index 4087b100e..d06b4e543 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl @@ -17,7 +17,7 @@ // * Заголовок - Строка - заголовок формы загрузки данных из файла. // * ИмяМакетаСШаблоном - Строка - имя макета с шаблоном для ввода данных. // * Представление - Строка - заголовок окна в форме загрузке данных. -// * ДополнительныеПараметры - Произвольный - Любые дополнительные сведения, которые будут переданы +// * ДополнительныеПараметры - Произвольный - любые дополнительные сведения, которые будут переданы // в процедуру сопоставления данных. // Функция ПараметрыЗагрузкиДанных() Экспорт @@ -34,7 +34,7 @@ // Открывает форму загрузки данных для заполнения табличной части. // // Параметры: -// ПараметрыЗагрузки - Структура - см. ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных. +// ПараметрыЗагрузки - см. ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных. // ОповещениеОЗагрузке - ОписаниеОповещения - оповещение, которое будет вызвано для добавления загруженных данных в // табличную часть. // @@ -53,7 +53,7 @@ // Открывает форму загрузки данных для заполнения табличной части сопоставления ссылок в подсистеме "Варианты отчетов". // // Параметры: -// ПараметрыЗагрузки - Структура - см. ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных. +// ПараметрыЗагрузки - см. ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных. // ОповещениеОЗагрузке - ОписаниеОповещения - оповещение, которое будет вызвано для добавления загруженных данных в // табличную часть. // diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/Module.bsl index db7aaf821..6b8842190 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/Module.bsl @@ -18,11 +18,11 @@ // Подсказка - Строка - подсказка, выводимая в заголовке колонки. // // Возвращаемое значение: -// Структура - Структура с описание колонки: +// Структура - структура с описание колонки: // * Имя - Строка - имя колонки. // * Заголовок - Строка - заголовок колонки выводимый в бланке для загрузки. // * Тип - ОписаниеТипов - тип колонки. -// * Ширина - - Число - ширина колонки. +// * Ширина - Число - ширина колонки. // * Подсказка - Строка - подсказка выводимая в заголовке колонки. // * ОбязательнаяДляЗаполнения - Булево - истина, если колонка обязательно должна содержать значения. // * Группа - Строка - имя группы колонок. @@ -45,13 +45,12 @@ // Возвращает колонку макета по имени. // // Параметры: -// Имя - Строка - Имя колонки. -// СписокКолонок - Массив из Структура - где: -// см. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета +// Имя - Строка - имя колонки. +// СписокКолонок - Массив из см. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета // // Возвращаемое значение: -// Структура - см. ОписаниеКолонкиМакета -// - Неопределено - Если колонка не найдена, то Неопределено. +// см. ОписаниеКолонкиМакета +// - Неопределено - если колонка не существует. // Функция КолонкаМакета(Имя, СписокКолонок) Экспорт Для каждого Колонка Из СписокКолонок Цикл @@ -66,9 +65,8 @@ // Удаляет колонку макета из массива. // // Параметры: -// Имя - Строка - Имя колонки. -// СписокКолонок - Массив из Структура - где: -// см. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета +// Имя - Строка - имя колонки. +// СписокКолонок - Массив из см. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета // Процедура УдалитьКолонкуМакета(Имя, СписокКолонок) Экспорт diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаПереопределяемый/Module.bsl index 0f1018903..b1e74ffc2 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаПереопределяемый/Module.bsl @@ -11,7 +11,7 @@ // Определяет список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". // // Параметры: -// ЗагружаемыеСправочники - ТаблицаЗначений - список справочников, в которые возможна загрузка данных. +// ЗагружаемыеСправочники - ТаблицаЗначений - список справочников, в которые возможна загрузка данных: // * ПолноеИмя - Строка - полное имя справочника (как в метаданных). // * Представление - Строка - представление справочника в списке выбора. // * ПрикладнаяЗагрузка - Булево - если Истина, значит справочник использует собственный алгоритм загрузки и diff --git a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl index 52333e7b6..85b9d8597 100644 --- a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl @@ -76,6 +76,13 @@ КонецПроцедуры +// См. ПоискИУдалениеДублей.ТипыИсключаемыеИзВозможныхДублей +Процедура ПриДобавленииТиповИсключаемыхИзВозможныхДублей(ИсключаемыеТипы) Экспорт + + ИсключаемыеТипы.Добавить(Тип("СправочникСсылка.Заметки")); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl b/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl index 07f52aaee..04372557a 100644 --- a/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl @@ -11,7 +11,7 @@ // Список объектов, в которых используются команды заполнения. // // Возвращаемое значение: -// Массив из ОбъектМетаданных - Объекты метаданных с командами заполнения. +// Массив из ОбъектМетаданных - объекты метаданных с командами заполнения. // Функция ОбъектыСКомандамиЗаполнения() Экспорт Массив = Новый Массив; @@ -25,7 +25,7 @@ // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов // // Параметры: -// НастройкиПрограммногоИнтерфейса - См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов.НастройкиПрограммногоИнтерфейса +// НастройкиПрограммногоИнтерфейса - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов.НастройкиПрограммногоИнтерфейса // Процедура ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса) Экспорт Настройка = НастройкиПрограммногоИнтерфейса.Добавить(); diff --git a/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl index 3c8ff1642..561b5ea35 100644 --- a/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl @@ -25,7 +25,7 @@ // Определяет общие команды заполнения. // // Параметры: -// КомандыЗаполнения - ТаблицаЗначений - сформированные команды для вывода в подменю. +// КомандыЗаполнения - ТаблицаЗначений - сформированные команды для вывода в подменю: // // Общие настройки: // * Идентификатор - Строка - идентификатор команды. @@ -52,10 +52,11 @@ // Необязательный. Значение по умолчанию - Истина. // // Настройки процесса выполнения: -// * МножественныйВыбор - Булево, Неопределено - если Истина, то команда поддерживает множественный выбор. +// * МножественныйВыбор - Булево +// - Неопределено - если Истина, то команда поддерживает множественный выбор. // В этом случае в параметре выполнения будет передан список ссылок. // Необязательный. Значение по умолчанию - Истина. -// * РежимЗаписи - Строка - действия, связанные с записью объекта, которые выполняются перед обработчиком команды. +// * РежимЗаписи - Строка - действия, связанные с записью объекта, которые выполняются перед обработчиком команды: // ** "НеЗаписывать" - объект не записывается, а в параметрах обработчика вместо ссылок передается // вся форма. В этом режиме рекомендуется работать напрямую с формой, // которая передается в структуре 2-го параметра обработчика команды. @@ -72,7 +73,8 @@ // * Менеджер - Строка - объект, отвечающий за выполнение команды. // * ИмяФормы - Строка - имя формы, которую требуется получить для выполнения команды. // Если Обработчик не указан, то у формы вызывается метод "Открыть". -// * ПараметрыФормы - Неопределено, ФиксированнаяСтруктура - необязательный. Параметры формы, указанной в ИмяФормы. +// * ПараметрыФормы - Неопределено +// - ФиксированнаяСтруктура - необязательный. Параметры формы, указанной в ИмяФормы. // * Обработчик - Строка - описание процедуры, обрабатывающей основное действие команды. // Формат "<ИмяОбщегоМодуля>.<ИмяПроцедуры>" используется, когда процедура размещена в общем модуле. // Формат "<ИмяПроцедуры>" используется в следующих случаях: @@ -80,7 +82,7 @@ // - если ИмяФормы не заполнено, то в модуле менеджера этого объекта ожидается серверная процедура. // * ДополнительныеПараметры - ФиксированнаяСтруктура - необязательный. Параметры обработчика, указанного в Обработчик. // -// Параметры - Структура - сведения о контексте исполнения. +// Параметры - Структура - сведения о контексте исполнения: // * ИмяФормы - Строка - полное имя формы. // // СтандартнаяОбработка - Булево - если установить в Ложь, то событие "ДобавитьКомандыЗаполнения" менеджера объекта не diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl index 2756b2636..95d5c3c94 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl @@ -13,19 +13,20 @@ // а также добавляет во "Все действия" команду для разрешения их редактирования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - форма объекта, где: -// * Объект - ДанныеФормыСтруктура - -// - СправочникОбъект - -// - ДокументОбъект - -// * Элементы - ВсеЭлементыФормы - где: -// ** РазрешитьРедактированиеРеквизитовОбъекта - КнопкаФормы - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов - форма объекта, где: +// * Объект - ДанныеФормыСтруктура +// - СправочникОбъект +// - ДокументОбъект +// * Элементы - ВсеЭлементыФормы: +// ** РазрешитьРедактированиеРеквизитовОбъекта - КнопкаФормы // ГруппаДляКнопкиЗапрета - ГруппаФормы - переопределяет стандартное размещение // кнопки запрета в форме объекта. // ЗаголовокКнопкиЗапрета - Строка - заголовок кнопки. По умолчанию "Разрешить редактирование реквизитов". // Объект - Неопределено - взять объект из реквизита формы "Объект". // - ДанныеФормыСтруктура - по типу объекта. -// - СправочникОбъект - -// - ДокументОбъект - +// - СправочникОбъект +// - ДокументОбъект // Процедура ЗаблокироватьРеквизиты(Форма, ГруппаДляКнопкиЗапрета = Неопределено, ЗаголовокКнопкиЗапрета = "", Объект = Неопределено) Экспорт @@ -55,16 +56,21 @@ ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено = ОписаниеБлокируемогоРеквизита.ПравоРедактирования И ЭтоНовыйОбъект; + Если ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено Тогда + Продолжить; + КонецЕсли; ЭлементФормы = Форма.Элементы.Найти(ОписаниеЭлементаФормы.Значение); - Если ЭлементФормы <> Неопределено Тогда - Если ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") - И ЭлементФормы.Вид <> ВидПоляФормы.ПолеНадписи - Или ТипЗнч(ЭлементФормы) = Тип("ТаблицаФормы") Тогда - ЭлементФормы.ТолькоПросмотр = НЕ ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено; - Иначе - ЭлементФормы.Доступность = ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено; - КонецЕсли; + Если ЭлементФормы = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") + И ЭлементФормы.Вид <> ВидПоляФормы.ПолеНадписи + Или ТипЗнч(ЭлементФормы) = Тип("ТаблицаФормы") Тогда + ЭлементФормы.ТолькоПросмотр = НЕ ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено; + Иначе + ЭлементФормы.Доступность = ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено; КонецЕсли; КонецЦикла; КонецЦикла; diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl index dc73691ee..a55cac607 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl @@ -11,11 +11,12 @@ // Разрешает редактирование заблокированных элементов формы, связанных с заданными реквизитами. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - форма, в которой требуется разрешить +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов - форма, в которой требуется разрешить // редактирование элементов формы, заданных реквизитов, где: -// * Объект - ДанныеФормыСтруктура - -// - СправочникОбъект - -// - ДокументОбъект - +// * Объект - ДанныеФормыСтруктура +// - СправочникОбъект +// - ДокументОбъект // ОбработкаПродолжения - Неопределено - никаких действий после выполнения процедуры. // - ОписаниеОповещения - оповещение, которое вызывается после выполнения процедуры. // В обработку оповещения передается параметр типа Булево: @@ -177,8 +178,8 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма, в которой требуется разрешить редактирование реквизитов объекта, где: -// * Элементы - ВсеЭлементыФормы - где: -// ** РазрешитьРедактированиеРеквизитовОбъекта - КнопкаФормы - +// * Элементы - ВсеЭлементыФормы: +// ** РазрешитьРедактированиеРеквизитовОбъекта - КнопкаФормы // Реквизиты - Массив из Строка - имена реквизитов, которые нужно пометить как разрешенные для изменения. // РедактированиеРазрешено - Булево - значение разрешенности редактирования реквизитов, которое нужно установить. // Значение не будет установлено в Истина, если нет права редактирования реквизита. diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl index 62e487350..878985608 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl @@ -18,17 +18,17 @@ // - добавляет команду и кнопку РазрешитьРедактированиеРеквизитовОбъекта (если есть права). // // Параметры: -// Форма - ФормаКлиентскогоПриложения - где: -// * ПараметрыЗапретаРедактированияРеквизитов - ТаблицаЗначений - где: -// ** ИмяРеквизита - Строка - -// ** Представление - Строка - -// ** РедактированиеРазрешено - Булево - -// ** БлокируемыеЭлементы - Массив - -// ** ПравоРедактирования - Булево - -// ** ЭтоРеквизитФормы - Булево - -// Ссылка - ЛюбаяСсылка - -// ГруппаДляКнопкиЗапрета - ГруппаФормы - -// ЗаголовокКнопкиЗапрета - ГруппаФормы - +// Форма - ФормаКлиентскогоПриложения: +// * ПараметрыЗапретаРедактированияРеквизитов - ТаблицаЗначений: +// ** ИмяРеквизита - Строка +// ** Представление - Строка +// ** РедактированиеРазрешено - Булево +// ** БлокируемыеЭлементы - Массив +// ** ПравоРедактирования - Булево +// ** ЭтоРеквизитФормы - Булево +// Ссылка - ЛюбаяСсылка +// ГруппаДляКнопкиЗапрета - ГруппаФормы +// ЗаголовокКнопкиЗапрета - ГруппаФормы // Процедура ПодготовитьФорму(Форма, Ссылка, ГруппаДляКнопкиЗапрета, ЗаголовокКнопкиЗапрета) Экспорт diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl index 2a3a25546..afddb087d 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl @@ -311,7 +311,8 @@ // Скрывает персональные данные субъектов. Состав персональных данных определяется программно. // // Параметры: -// Субъекты - Массив, ОпределяемыйТип.СубъектПерсональныхДанных - ссылка или массив ссылок одного типа на субъекты. +// Субъекты - Массив +// - ОпределяемыйТип.СубъектПерсональныхДанных - ссылка или массив ссылок одного типа на субъекты. // СообщатьОбИсключениях - Булево - признак необходимости информирования пользователя о добавленных исключениях. // Процедура СкрытьПерсональныеДанныеСубъектов(Знач Субъекты, СообщатьОбИсключениях = Ложь) Экспорт @@ -493,7 +494,9 @@ // Определяет наличие скрытых персональных данных в объекте. В качестве объекта может быть передан и сам субъект. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект, РегистрСведенийНаборЗаписей - проверяемый объект. Также +// Объект - СправочникОбъект +// - ДокументОбъект +// - РегистрСведенийНаборЗаписей - проверяемый объект. Также // в качестве значения параметра могут быть указаны наборы записей других регистров // или значения типа СправочникСсылка, ДокументСсылка. // @@ -665,8 +668,8 @@ // Вызывается из события ПриПолученииДанныхНаСервере формы списка. // // Параметры: -// Настройки - НастройкиКомпоновкиДанных - Содержит копию полных настроек динамического списка. -// Строки - СтрокиДинамическогоСписка - Коллекция содержит данные и оформление всех строк, +// Настройки - НастройкиКомпоновкиДанных - содержит копию полных настроек динамического списка. +// Строки - СтрокиДинамическогоСписка - коллекция содержит данные и оформление всех строк, // получаемых в списке, кроме строк группировок. // Процедура ПриПолученииДанныхНаСервере(Настройки, Строки) Экспорт @@ -927,10 +930,10 @@ КонецПроцедуры // Параметры: -// ЭлементДанных - см. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного.ЭлементДанных -// ПолучениеЭлемента - см. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного.ПолучениеЭлемента -// ОтправкаНазад - см. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного.ОтправкаНазад -// Отправитель - см. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного.Отправитель +// ЭлементДанных - см. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного.ЭлементДанных +// ПолучениеЭлемента - см. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного.ПолучениеЭлемента +// ОтправкаНазад - см. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного.ОтправкаНазад +// Отправитель - см. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного.Отправитель // Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт @@ -1403,17 +1406,19 @@ НоваяКнопка.ИмяКоманды = НоваяКоманда.Имя; НоваяКнопка.ТолькоВоВсехДействиях = Истина; - УстановитьОтборСписка(Список, НоваяКнопка); + УстановитьОтборСписка(Список, + НоваяКнопка, ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(Форма.ИмяФормы, "ПоказыватьСоСкрытымиПДн", Ложь)); УстановитьУсловноеОформление(Список); КонецПроцедуры -Процедура УстановитьОтборСписка(Список, КнопкаОтбора) +Процедура УстановитьОтборСписка(Список, КнопкаОтбора, ЗначениеОтбора) - ПоказыватьСоСкрытымиПДн = КнопкаОтбора.Пометка; ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( - Список, "ПоказыватьСоСкрытымиПДн", ПоказыватьСоСкрытымиПДн); + Список, "ПоказыватьСоСкрытымиПДн", ЗначениеОтбора); + КнопкаОтбора.Пометка = ЗначениеОтбора; + КонецПроцедуры // Параметры: @@ -1591,7 +1596,8 @@ // Определяет факт наличия среди переданных в параметре субъектов тех, по которым выполнялось скрытие персональных данных. // // Параметры: -// Субъекты - Массив, ОпределяемыйТип.СубъектПерсональныхДанных - ссылка или массив ссылок на субъекты. +// Субъекты - Массив +// - ОпределяемыйТип.СубъектПерсональныхДанных - ссылка или массив ссылок на субъекты. // // Возвращаемое значение: // Булево - признак наличия хотя бы одного субъекта. @@ -1631,7 +1637,8 @@ // был обработан в ходе скрытия персональных данных. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект - объект со ссылкой на субъект в табличной части. +// Объект - СправочникОбъект +// - ДокументОбъект - объект со ссылкой на субъект в табличной части. // ПолныеИменаРеквизитов - Массив - полные имена реквизитов, содержащих ссылку на субъект, разделенные запятой: // Например: "ФизическоеЛицо" или "ФизическиеЛица.ФизическоеЛицо". // @@ -1689,12 +1696,13 @@ // Возвращает существующие настройки скрытия субъектов. // // Параметры: -// Субъекты - Массив, ОпределяемыйТип.СубъектПерсональныхДанных - ссылка или массив ссылок на субъекты. +// Субъекты - Массив +// - ОпределяемыйТип.СубъектПерсональныхДанных - ссылка или массив ссылок на субъекты. // // Возвращаемое значение: -// Соответствие - со свойствами: +// Соответствие: // * Ключ - ОпределяемыйТип.СубъектПерсональныхДанных - субъект. -// * Значение - Структура - структура настроек. Описание см. НастройкиСкрытияСубъектовПоУмолчанию. +// * Значение - см. НастройкиСкрытияСубъектовПоУмолчанию. // Функция ПрочитатьНастройкиСкрытияСубъектов(Знач Субъекты) Экспорт @@ -1744,8 +1752,9 @@ // Записывает настройки скрытия субъектов. // // Параметры: -// Субъекты - Массив, ОпределяемыйТип.СубъектПерсональныхДанных - ссылка или массив ссылок на субъекты. -// НастройкиСкрытия - Структура - структура настроек. Описание см. НастройкиСкрытияСубъектовПоУмолчанию. +// Субъекты - Массив +// - ОпределяемыйТип.СубъектПерсональныхДанных - ссылка или массив ссылок на субъекты. +// НастройкиСкрытия - см. НастройкиСкрытияСубъектовПоУмолчанию. // Процедура ЗаписатьНастройкиСкрытияСубъектов(Знач Субъекты, НастройкиСкрытия = Неопределено) @@ -1781,12 +1790,12 @@ // Настройки скрытия по умолчанию. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ДатаСкрытия - ОпределяемыйТип.СубъектПерсональныхДанных - плановая или фактическая дата скрытия. // * Состояние - ПеречислениеСсылка.СостоянияСубъектовДляСкрытия - определяет требуемое состояние. // * ПричинаОтменыСкрытия - Строка - описание причины отказа в скрытии. -// * Основание - ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных, -// ДокументСсылка.ОтзывСогласияНаОбработкуПерсональныхДанных - основание срока скрытия. +// * Основание - ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных +// - ДокументСсылка.ОтзывСогласияНаОбработкуПерсональныхДанных - основание срока скрытия. // Функция НастройкиСкрытияСубъектовПоУмолчанию() diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхВызовСервера/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхВызовСервера/Module.bsl index 39afaa000..82746b202 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхВызовСервера/Module.bsl @@ -13,10 +13,10 @@ // // Параметры: // УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. -// ПараметрыМетода - Структура - новые настройки (см. функцию НастройкиСкрытияПерсональныхДанныхСистемы). +// ПараметрыМетода - см. НастройкиСкрытияПерсональныхДанныхСистемы // // Возвращаемое значение: -// см. возвращаемое значение функции ДлительныеОперации.ВыполнитьВФоне. +// см. ДлительныеОперации.ВыполнитьВФоне. // Функция ЗапуститьИзменениеНастроекСкрытияПДнВФоновомЗадании(Знач ИдентификаторФормы, Знач ПараметрыМетода) Экспорт @@ -31,9 +31,9 @@ // Возвращает настройки скрытия персональных данных системы. // // Возвращаемое значение: -// Структура - содержит поля: -// * ИспользоватьСкрытиеПерсональныхДанных - Булево - Признак использования скрытия персональных данных субъектов. -// * ДнейДоСкрытияПерсональныхДанных - Число - Дней до скрытия персональных данных субъектов. +// Структура: +// * ИспользоватьСкрытиеПерсональныхДанных - Булево - признак использования скрытия персональных данных субъектов. +// * ДнейДоСкрытияПерсональныхДанных - Число - дней до скрытия персональных данных субъектов. // Функция НастройкиСкрытияПерсональныхДанныхСистемы() Экспорт @@ -151,4 +151,8 @@ КонецПроцедуры -#КонецОбласти +Процедура СохранитьПоложениеОтбораПоказыватьСоСкрытымиПДн(ИмяФормы, ПоложениеОтбора) Экспорт + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ИмяФормы, "ПоказыватьСоСкрытымиПДн", ПоложениеОтбора); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl index fca14c24e..449c8391c 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl @@ -81,6 +81,9 @@ Кнопка.Пометка = ПоказыватьСоСкрытымиПДн; Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьСоСкрытымиПДн", ПоказыватьСоСкрытымиПДн); + ЗащитаПерсональныхДанныхВызовСервера.СохранитьПоложениеОтбораПоказыватьСоСкрытымиПДн( + Форма.ИмяФормы, ПоказыватьСоСкрытымиПДн); + КонецПроцедуры #КонецОбласти @@ -184,9 +187,9 @@ КонецПроцедуры // Возвращаемое значение: -// Структура - Описание: -// * ДоступностьЭлементов - Соответствие - -// * Форма - ФормаКлиентскогоПриложения - +// Структура: +// * ДоступностьЭлементов - Соответствие +// * Форма - ФормаКлиентскогоПриложения // Функция ДополнительныеПараметрыИзмененияНастроекСкрытияПерсональныхДанных(Форма, ДоступностьЭлементов) ДополнительныеПараметры = Новый Структура; diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl index 4fc0a3309..d3a85b046 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl @@ -16,7 +16,7 @@ // процедуру ЗащитаПерсональныхДанных.УстановитьИспользованиеСобытияДоступ. // // Параметры: -// ТаблицаСведений - ТаблицаЗначений - таблица с полями: +// ТаблицаСведений - ТаблицаЗначений: // * Объект - Строка - полное имя объекта метаданных с персональными данными; // * ПоляРегистрации - Строка - имена полей, значения которых выводятся в журнал событий доступа к персональным // данным для идентификации субъекта персональных данных. Для ссылочных типов, @@ -48,7 +48,7 @@ // Обеспечивает составление коллекции областей персональных данных. // // Параметры: -// ОбластиПерсональныхДанных - ТаблицаЗначений - таблица с полями: +// ОбластиПерсональныхДанных - ТаблицаЗначений: // * Имя - Строка - идентификатор области данных. // * Представление - Строка - пользовательское представление области данных. // * Родитель - Строка - идентификатор родительской области данных. diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl index 66548d23c..d63301be2 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl @@ -166,7 +166,7 @@ // ИмяОбъекта - Строка - полное имя объекта метаданных. Например: "Справочник.ФизическиеЛица". // // Возвращаемое значение -// Структура - со свойствами: +// Структура: /// ПоляРегистрации - Массив - массив строк. Например: "ФизическоеЛицо" или "ФизическиеЛица.ФизическоеЛицо". /// ПоляДоступа - Массив - массив строк. Например: "ИНН" или "ФизическиеЛица.ИНН". // @@ -223,9 +223,9 @@ КонецФункции // Возвращаемое значение: -// ФиксированноеСоответствие - Описание: -// * Ключ - Тип - -// * Значение - ОбъектМетаданных - +// ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - ОбъектМетаданных // Функция МетаданныеПоТипамСубъекта() Экспорт diff --git a/SSL/src/CommonModules/ЗаявлениеНаСертификатПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗаявлениеНаСертификатПереопределяемый/Module.bsl index 71e355957..8f171a60b 100644 --- a/SSL/src/CommonModules/ЗаявлениеНаСертификатПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗаявлениеНаСертификатПереопределяемый/Module.bsl @@ -11,12 +11,12 @@ // Вызывается в форме добавления заявления на новый сертификат для заполнения реквизитов организации и при ее выборе. // // Параметры: -// Параметры - Структура - со свойствами: +// Параметры - Структура: // // * Организация - СправочникСсылка.Организации - организация, которую нужно заполнить. // Если организация уже заполнена, требуется перезаполнить ее свойства - например, // при повтором вызове, когда пользователь выбрал другую организацию. -// - Неопределено, если ОпределяемыйТип.Организации не настроен. +// - Неопределено - если ОпределяемыйТип.Организации не настроен. // Пользователю недоступен выбор организации. // // * ЭтоИндивидуальныйПредприниматель - Булево - (возвращаемое значение): @@ -67,9 +67,9 @@ // Вызывается в форме добавления заявления на новый сертификат для заполнении реквизитов владельца и при его выборе. // // Параметры: -// Параметры - Структура - со свойствами: +// Параметры - Структура: // * Организация - СправочникСсылка.Организации - выбранная организация, на которую оформляется сертификат. -// - Неопределено, если ОпределяемыйТип.Организации не настроен. +// - Неопределено - если ОпределяемыйТип.Организации не настроен. // // * ТипВладельца - ОписаниеТипов - (возвращаемое значение) содержит ссылочные типы, из которых можно сделать выбор. // - Неопределено - (возвращаемое значение) выбор владельца не поддерживается. @@ -159,9 +159,9 @@ // Только для юридического лица. Для индивидуального предпринимателя не требуется. // // Параметры: -// Параметры - Структура - со свойствами: +// Параметры - Структура: // * Организация - СправочникСсылка.Организации - выбранная организация, на которую оформляется сертификат. -// - Неопределено, если ОпределяемыйТип.Организации не настроен. +// - Неопределено - если ОпределяемыйТип.Организации не настроен. // // * ТипРуководителя - ОписаниеТипов - (возвращаемое значение) содержит ссылочные типы, из которых можно сделать выбор. // - Неопределено - (возвращаемое значение) выбор партнера не поддерживается. @@ -189,9 +189,9 @@ // Вызывается в форме добавления заявления на новый сертификат для заполнения реквизитов партнера и при его выборе. // // Параметры: -// Параметры - Структура - со свойствами: +// Параметры - Структура: // * Организация - СправочникСсылка.Организации - выбранная организация, на которую оформляется сертификат. -// - Неопределено, если ОпределяемыйТип.Организации не настроен. +// - Неопределено - если ОпределяемыйТип.Организации не настроен. // // * ТипПартнера - ОписаниеТипов - содержит ссылочные типы из которых можно сделать выбор. // - Неопределено - выбор партнера не поддерживается. diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl index f27abd8ff..611942d06 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl @@ -431,11 +431,15 @@ МодульРаботаСФайламиСлужебныйВМоделиСервиса.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + МодульУправлениеКонтактнойИнформациейСлужебный.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); МодульКонтрольВеденияУчетаСлужебный.ПриПолученииСпискаШаблонов(ШаблоныЗаданий); КонецЕсли; - КонецПроцедуры // См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков. @@ -466,6 +470,11 @@ МодульРаботаСКурсамиВалютСлужебный.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КалендарныеГрафики") Тогда МодульКалендарныеГрафикиСлужебный = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафикиСлужебный"); МодульКалендарныеГрафикиСлужебный.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); @@ -543,7 +552,7 @@ // Определяет события, на которые подписана эта библиотека. // // Параметры: -// Подписки - Структура - Ключами свойств структуры являются имена событий, на которые +// Подписки - Структура - ключами свойств структуры являются имена событий, на которые // подписана эта библиотека. // Процедура ПриОпределенииПодписокНаСобытияБИП(Подписки) Экспорт @@ -739,6 +748,11 @@ МодульУправлениеДоступомСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда + МодульУдалениеПомеченныхОбъектовСлужебный = ОбщегоНазначения.ОбщийМодуль("УдалениеПомеченныхОбъектовСлужебный"); + МодульУдалениеПомеченныхОбъектовСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриДобавленииОбработчиковУстановкиПараметровСеанса Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); МодульИнтеграцияПодсистемБТС.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); @@ -808,6 +822,11 @@ МодульУправлениеДоступомСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда + МодульУдалениеПомеченныхОбъектовСлужебный = ОбщегоНазначения.ОбщийМодуль("УдалениеПомеченныхОбъектовСлужебный"); + МодульУдалениеПомеченныхОбъектовСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); + КонецЕсли; + ПользователиСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); ОбновлениеИнформационнойБазыСлужебный.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); СтандартныеПодсистемыСервер.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); @@ -824,6 +843,35 @@ КонецПроцедуры +// См. ОбщегоНазначенияПереопределяемый.ПриОпределенииПодчиненныхОбъектов. +// +// Параметры: +// ПодчиненныеОбъекты - см. ОбщегоНазначенияПереопределяемый.ПриОпределенииПодчиненныхОбъектов +// +Процедура ПриОпределенииПодчиненныхОбъектов(ПодчиненныеОбъекты) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ПриОпределенииПодчиненныхОбъектов(ПодчиненныеОбъекты); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.ПриОпределенииПодчиненныхОбъектов(ПодчиненныеОбъекты); + КонецЕсли; + +КонецПроцедуры + +// См. ОбщегоНазначенияПереопределяемый.ПередПоискомМестИспользования. +Процедура ПередПоискомМестИспользования(ПарыЗамен, ПараметрыВыполнения) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда + МодульПоискИУдалениеДублей = ОбщегоНазначения.ОбщийМодуль("ПоискИУдалениеДублей"); + МодульПоискИУдалениеДублей.ДополнитьДублиСвязаннымиПодчиненнымиОбъектами(ПарыЗамен, ПараметрыВыполнения); + КонецЕсли; + +КонецПроцедуры + // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт @@ -1477,6 +1525,11 @@ МодульРассылкаОтчетов.ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда + МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов"); + МодульУчетОригиналовПервичныхДокументов.ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -1640,6 +1693,11 @@ МодульРезультатыПроверкиУчета.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); + КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПередДобавлениемКомандОтчетов Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); МодульИнтеграцияПодсистемБТС.ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); @@ -1877,15 +1935,10 @@ // Параметры: // ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки - доп отчет // или обработка для которой необходимо установить режим работы. -// РежимПодключения - ОпределяемыйТип.БезопасныйРежим - Режим работы доп. отчета или обработки. +// РежимПодключения - ОпределяемыйТип.БезопасныйРежим - режим работы доп. отчета или обработки. // Процедура ПриУстановкеРежимаПодключенияДополнительногоОтчетаИлиОбработкиВОбластиДанных(ПоставляемаяОбработка, РежимПодключения) Экспорт - Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриУстановкеРежимаПодключенияДополнительногоОтчетаИлиОбработкиВОбластиДанных Тогда - МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); - МодульИнтеграцияПодсистемБТС.ПриУстановкеРежимаПодключенияДополнительногоОтчетаИлиОбработкиВОбластиДанных(ПоставляемаяОбработка, РежимПодключения); - КонецЕсли; - Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриУстановкеРежимаПодключенияДополнительногоОтчетаИлиОбработкиВОбластиДанных Тогда МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриУстановкеРежимаПодключенияДополнительногоОтчетаИлиОбработкиВОбластиДанных(ПоставляемаяОбработка, РежимПодключения); @@ -1901,8 +1954,8 @@ // Параметры: // ДополнительнаяОбработка - СправочникОбъект.ДополнительныеОтчетыИОбработки, элемент справочника, // который записывается пользователем. -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия права, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения +// Результат - Булево - в этот параметр в данной процедуре устанавливается флаг наличия права, +// СтандартнаяОбработка - Булево - в этот параметр в данной процедуре устанавливается флаг выполнения // стандартной обработки проверки права. // Процедура ПриПроверкеПраваДобавления(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт @@ -1925,9 +1978,9 @@ // // Параметры: // ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности +// Результат - Булево - в этот параметр в данной процедуре устанавливается флаг наличия возможности // загрузки дополнительного отчета или обработки из файла, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения +// СтандартнаяОбработка - Булево - в этот параметр в данной процедуре устанавливается флаг выполнения // стандартной обработки проверки возможности загрузки дополнительного отчета или обработки из файла. // Процедура ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт @@ -1950,9 +2003,9 @@ // // Параметры: // ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности +// Результат - Булево - в этот параметр в данной процедуре устанавливается флаг наличия возможности // выгрузки дополнительного отчета или обработки в файл, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения +// СтандартнаяОбработка - Булево - в этот параметр в данной процедуре устанавливается флаг выполнения // стандартной обработки проверки возможности выгрузки дополнительного отчета или обработки в файл. // Процедура ПриПроверкеВозможностиВыгрузкиОбработкиВФайл(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт @@ -1998,7 +2051,7 @@ // // Параметры: // Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, -// Отказ - булево, флаг отказа от выполнения записи элемента справочника. +// Отказ - булево - флаг отказа от выполнения записи элемента справочника. // Процедура ПередЗаписьюДополнительнойОбработки(Источник, Отказ) Экспорт @@ -2018,7 +2071,7 @@ // // Параметры: // Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, -// Отказ - булево, флаг отказа от выполнения удаления элемента справочника из информационной базы. +// Отказ - булево - флаг отказа от выполнения удаления элемента справочника из информационной базы. // Процедура ПередУдалениемДополнительнойОбработки(Источник, Отказ) Экспорт @@ -2045,7 +2098,7 @@ // // Параметры: // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// СтандартнаяОбработка - Булево, флаг необходимости выполнения стандартной обработки подключения +// СтандартнаяОбработка - Булево - флаг необходимости выполнения стандартной обработки подключения // внешней обработки, // Результат - Строка - имя подключенного внешнего отчета или обработки (в том случае, если в обработчике // для параметра СтандартнаяОбработка было установлено значение Ложь). @@ -2063,9 +2116,10 @@ // // Параметры: // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// СтандартнаяОбработка - Булево, флаг необходимости выполнения стандартной обработки подключения +// СтандартнаяОбработка - Булево - флаг необходимости выполнения стандартной обработки подключения // внешней обработки, -// Результат - ВнешняяОбработкаОбъект, ВнешнийОтчетОбъект - объект подключенного внешнего отчета или +// Результат - ВнешняяОбработкаОбъект +// - ВнешнийОтчетОбъект - объект подключенного внешнего отчета или // обработки (в том случае, если в обработчике для параметра СтандартнаяОбработка было установлено значение Ложь). // Процедура ПриСозданииВнешнейОбработки(Знач Ссылка, СтандартнаяОбработка, Результат) Экспорт @@ -2082,7 +2136,8 @@ // Параметры: // Объект - СправочникОбъект.ДополнительныеОтчетыИОбработки - объект дополнительного отчета или обработки. // Команда - СправочникТабличнаяЧастьСтрока.ДополнительныеОтчетыИОбработки.Команды - описание команды. -// Задание - РегламентноеЗадание, СтрокаТаблицыЗначений - описание регламентного задания. +// Задание - РегламентноеЗадание +// - СтрокаТаблицыЗначений - описание регламентного задания. // См. описание возвращаемого значения функции РегламентныеЗаданияСервер.Задание(). // Изменения - Структура - значения реквизитов задания, которые необходимо изменить. // См. описание 2го параметра процедуры РегламентныеЗаданияСервер.ИзменитьЗадание(). @@ -2149,6 +2204,11 @@ МодульВзаимодействия.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда + МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов"); + МодульУчетОригиналовПервичныхДокументов.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); МодульРаботаСФайламиСлужебный.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники); @@ -2477,6 +2537,11 @@ МодульУправлениеИтогамиИАгрегатамиСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда + МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов"); + МодульУчетОригиналовПервичныхДокументов.ПриДобавленииОбработчиковОбновления(Обработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); МодульЦентрМониторингаСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); @@ -2768,6 +2833,16 @@ МодульНастройкаПорядкаЭлементов.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда + МодульПоискИУдалениеДублей = ОбщегоНазначения.ОбщийМодуль("ПоискИУдалениеДублей"); + МодульПоискИУдалениеДублей.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда + МодульГрупповоеИзменениеОбъектов = ОбщегоНазначения.ОбщийМодуль("ГрупповоеИзменениеОбъектов"); + МодульГрупповоеИзменениеОбъектов.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); + КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриОпределенииВидовПодключаемыхКоманд Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); МодульИнтеграцияПодсистемБТС.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); @@ -2778,12 +2853,27 @@ МодульИнтеграцияПодсистемБИП.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда + МодульУдалениеПомеченныхОбъектов = ОбщегоНазначения.ОбщийМодуль("УдалениеПомеченныхОбъектовСлужебный"); + МодульУдалениеПомеченныхОбъектов.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СтруктураПодчиненности") Тогда + МодульСтруктураПодчиненностиСлужебный = ОбщегоНазначения.ОбщийМодуль("СтруктураПодчиненностиСлужебный"); + МодульСтруктураПодчиненностиСлужебный.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда + МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов"); + МодульУчетОригиналовПервичныхДокументов.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); + КонецЕсли; + КонецПроцедуры // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов // // Параметры: -// НастройкиПрограммногоИнтерфейса - См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов.НастройкиПрограммногоИнтерфейса +// НастройкиПрограммногоИнтерфейса - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов.НастройкиПрограммногоИнтерфейса // Процедура ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса) Экспорт @@ -2839,6 +2929,16 @@ МодульНастройкаПорядкаЭлементов.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда + МодульПоискИУдалениеДублей = ОбщегоНазначения.ОбщийМодуль("ПоискИУдалениеДублей"); + МодульПоискИУдалениеДублей.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда + МодульГрупповоеИзменениеОбъектов = ОбщегоНазначения.ОбщийМодуль("ГрупповоеИзменениеОбъектов"); + МодульГрупповоеИзменениеОбъектов.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); + КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриОпределенииКомандПодключенныхКОбъекту Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); МодульИнтеграцияПодсистемБТС.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); @@ -2849,6 +2949,21 @@ МодульИнтеграцияПодсистемБИП.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда + МодульУдалениеПомеченныхОбъектов = ОбщегоНазначения.ОбщийМодуль("УдалениеПомеченныхОбъектовСлужебный"); + МодульУдалениеПомеченныхОбъектов.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СтруктураПодчиненности") Тогда + МодульСтруктураПодчиненностиСлужебный = ОбщегоНазначения.ОбщийМодуль("СтруктураПодчиненностиСлужебный"); + МодульСтруктураПодчиненностиСлужебный.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда + МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов"); + МодульУчетОригиналовПервичныхДокументов.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); + КонецЕсли; + КонецПроцедуры // См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. @@ -2947,6 +3062,26 @@ КонецПроцедуры +// См. ПоискИУдалениеДублей.ПриОпределенииОбъектовСПоискомДублей +Процедура ПриДобавленииТиповИсключаемыхИзВозможныхДублей(ИсключаемыеТипы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗаметкиПользователя") Тогда + МодульЗаметкиПользователяСлужебный = ОбщегоНазначения.ОбщийМодуль("ЗаметкиПользователяСлужебный"); + МодульЗаметкиПользователяСлужебный.ПриДобавленииТиповИсключаемыхИзВозможныхДублей(ИсключаемыеТипы); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриДобавленииТиповИсключаемыхИзВозможныхДублей(ИсключаемыеТипы); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); + МодульГрафикиРаботы.ПриДобавленииТиповИсключаемыхИзВозможныхДублей(ИсключаемыеТипы); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область Пользователи @@ -3175,7 +3310,7 @@ // // Параметры: // ПользовательИБ - ПользовательИнформационнойБазы, текущий пользователь информационной базы, -// СтандартнаяОбработка - Булево, значение может быть установлено внутри обработчика, в этом случае +// СтандартнаяОбработка - Булево - значение может быть установлено внутри обработчика, в этом случае // стандартная обработка авторизации нового пользователя ИБ выполняться не будет. // Процедура ПриАвторизацииНовогоПользователяИБ(ПользовательИБ, СтандартнаяОбработка) Экспорт @@ -3190,8 +3325,8 @@ // Вызывается при начале обработки пользователя информационной базы. // // Параметры: -// ПараметрыОбработки - Структура, см. комментарий к процедуре НачатьОбработкуПользователяИБ(). -// ОписаниеПользователяИБ - Структура, см. комментарий к процедуре НачатьОбработкуПользователяИБ(). +// ПараметрыОбработки - Структура - см. комментарий к процедуре НачатьОбработкуПользователяИБ(). +// ОписаниеПользователяИБ - Структура - см. комментарий к процедуре НачатьОбработкуПользователяИБ(). // Процедура ПриНачалеОбработкиПользователяИБ(ПараметрыОбработки, ОписаниеПользователяИБ) Экспорт @@ -3254,7 +3389,8 @@ // Например, можно обновить роли. // // Параметры: -// Ссылка - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - пользователь. +// Ссылка - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - пользователь. // Процедура ПослеУстановкиПользователяИБ(Ссылка, ПарольПользователяСервиса) Экспорт @@ -3301,12 +3437,12 @@ // группы пользователей, внешнего пользователя, группы внешних пользователей. // // Параметры: -// Ссылка - СправочникСсылка.Пользователи, -// СправочникСсылка.ГруппыПользователей, -// СправочникСсылка.ВнешниеПользователи, -// СправочникСсылка.ГруппыВнешнихПользователей - измененный объект. +// Ссылка - СправочникСсылка.Пользователи +// - СправочникСсылка.ГруппыПользователей +// - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.ГруппыВнешнихПользователей - измененный объект. // -// ЭтоНовый - Булево, если Истина, объект был добавлен, иначе изменен. +// ЭтоНовый - Булево - если Истина, объект был добавлен, иначе изменен. // Процедура ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый) Экспорт @@ -3370,7 +3506,7 @@ // Параметры: // ПолноеИмяОтчета - Строка - отчет, для которого получаются варианты отчета. // ПользовательИнформационнойБазы - Строка - имя пользователя информационной базы. -// СведенияОВариантахОтчетов - ТаблицаЗначений - таблица, в которую сохраняется информация о варианте отчета. +// СведенияОВариантахОтчетов - ТаблицаЗначений - таблица, в которую сохраняется информация о варианте отчета: // * КлючОбъекта - Строка - ключ отчета вида "Отчет.НазваниеОтчета". // * КлючВарианта - Строка - ключ варианта отчета. // * Представление - Строка - представление варианта отчета. @@ -3390,7 +3526,7 @@ // Удаляет переданный вариант отчета из хранилища вариантов отчетов. // // Параметры: -// СведенияОВариантахОтчетов - ТаблицаЗначений - таблица, в которой сохранена информация о варианте отчета. +// СведенияОВариантахОтчетов - ТаблицаЗначений - таблица, в которой сохранена информация о варианте отчета: // * КлючОбъекта - Строка - ключ отчета вида "Отчет.НазваниеОтчета". // * КлючВарианта - Строка - ключ варианта отчета. // * Представление - Строка - представление варианта отчета. @@ -3902,6 +4038,11 @@ МодульИнтеграцияПодсистемБИП.ПриЗаполненииСпискаТекущихДел(ТекущиеДела); КонецЕсли; + Если (ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов")) Тогда + МодульУдалениеПомеченныхОбъектовСлужебный = ОбщегоНазначения.ОбщийМодуль("УдалениеПомеченныхОбъектовСлужебный"); + МодульУдалениеПомеченныхОбъектовСлужебный.ПриЗаполненииСпискаТекущихДел(ТекущиеДела); + КонецЕсли; + КонецПроцедуры // См. ТекущиеДелаПереопределяемый.ПриОпределенииПорядкаРазделовКомандногоИнтерфейса. @@ -4279,8 +4420,8 @@ // ТаблицаГруппИсполнителей с полями: // ГруппаИсполнителей - Например, // СправочникСсылка.ГруппыИсполнителейЗадач. -// Пользователь - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи. +// Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи. // // СодержаниеПараметра - Неопределено - параметр не указан, вернуть все данные. // Строка, когда @@ -4290,15 +4431,15 @@ // только составы групп исполнителей, которые // в которые входят указанные исполнители. // -// ЗначениеПараметра - Неопределено, когда СодержаниеПараметра = Неопределено, -// - Например, СправочникСсылка.ГруппыИсполнителейЗадач, +// ЗначениеПараметра - Неопределено - когда СодержаниеПараметра = Неопределено, +// - например, СправочникСсылка.ГруппыИсполнителейЗадач, // когда СодержаниеПараметра = "ГруппыИсполнителей". -// - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи, +// - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи // когда СодержаниеПараметра = "Исполнители". // Массив указанных выше типов. // -// НетГруппИсполнителей - Булево, если Ложь, МенеджерВременныхТаблиц содержит временную таблицу, иначе нет. +// НетГруппИсполнителей - Булево - если Ложь, МенеджерВременныхТаблиц содержит временную таблицу, иначе нет. // Процедура ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, СодержаниеПараметра, ЗначениеПараметра, НетГруппИсполнителей) Экспорт @@ -4315,7 +4456,7 @@ // // Параметры: // ИдентификаторПользователяИБ - УникальныйИдентификатор, -// Отказ - Булево. При установке значения параметра в значение Ложь внутри обработчика события +// Отказ - Булево - при установке значения параметра в значение Ложь внутри обработчика события // обновление ролей для этого пользователя информационной базы будет пропущено. // Процедура ПриОбновленииРолейПользователяИБ(ИдентификаторПользователяИБ, Отказ) Экспорт @@ -4375,7 +4516,7 @@ // Определяет события, на которые могут подписаться другие библиотеки. // // Возвращаемое значение: -// События - Структура - Ключами свойств структуры являются имена событий, на которые +// События - Структура - ключами свойств структуры являются имена событий, на которые // могут быть подписаны библиотеки. // Функция СобытияБСП() Экспорт diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl index f2793355d..df00822bc 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl @@ -47,7 +47,7 @@ // Определяет события, на которые подписана эта библиотека. // // Параметры: -// Подписки - Структура - Ключами свойств структуры являются имена событий, на которые +// Подписки - Структура - ключами свойств структуры являются имена событий, на которые // подписана эта библиотека. // Процедура ПриОпределенииПодписокНаСобытияБИП(Подписки) Экспорт @@ -359,6 +359,11 @@ МодульКонтрольВеденияУчетаСлужебныйКлиент.ПриОбработкеРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка); КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеДоступомСлужебныйКлиент"); + МодульУправлениеДоступомСлужебныйКлиент.ПриОбработкеРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка); + КонецЕсли; + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиБТС().ПриОбработкеРасшифровки Тогда МодульИнтеграцияПодсистемБТСКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБТСКлиент"); МодульИнтеграцияПодсистемБТСКлиент.ПриОбработкеРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка); @@ -485,7 +490,7 @@ // Параметры: // ФормаВладелец - ФормаКлиентскогоПриложения, из которой выполняется завершение сеанса, // НомераСеансов - Число (8, 0, +) - номер сеанса, который будет завершен, -// СтандартнаяОбработка - Булево, флаг выполнения стандартной обработки завершения сеанса +// СтандартнаяОбработка - Булево - флаг выполнения стандартной обработки завершения сеанса // (подключение к агенту сервера через COM-соединение или сервер администрирования с // запросом параметров подключения к кластеру у текущего пользователя). Может быть // установлен в значение Ложь внутри обработчика события, в этом случае стандартная @@ -643,7 +648,7 @@ // Определяет события, на которые могут подписаться другие библиотеки. // // Возвращаемое значение: -// События - Структура - Ключами свойств структуры являются имена событий, на которые +// События - Структура - ключами свойств структуры являются имена событий, на которые // могут быть подписаны библиотеки. // Функция СобытияБСП() Экспорт diff --git a/SSL/src/CommonModules/ИнтерфейсODataСлужебный/Module.bsl b/SSL/src/CommonModules/ИнтерфейсODataСлужебный/Module.bsl index d8cb7747b..51e89bf4a 100644 --- a/SSL/src/CommonModules/ИнтерфейсODataСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсODataСлужебный/Module.bsl @@ -14,7 +14,7 @@ // ТипСсылки - Тип, // // Возвращаемое значение: -// ОбъектМетаданных - . +// ОбъектМетаданных // Функция ОбъектМетаданныхПоТипуСсылки(Знач ТипСсылки) Экспорт @@ -50,7 +50,7 @@ // ОписаниеТипов - ОписаниеТипов. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоНаборТиповСсылок(Знач ОписаниеТипов) Экспорт @@ -101,7 +101,7 @@ // ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоНаборЗаписейПоследовательности(Знач ОбъектМетаданных) Экспорт @@ -115,7 +115,7 @@ // ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоНаборЗаписейПерерасчета(Знач ОбъектМетаданных) Экспорт @@ -129,7 +129,7 @@ // ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоНаборЗаписей(Знач ОбъектМетаданных) Экспорт @@ -213,7 +213,7 @@ // в конфигурации. // // Возвращаемое значение: -// ОписаниеТипов - . +// ОписаниеТипов // Функция ОписаниеСсылочныхТипов() diff --git a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl index e9512e1ea..abf84c89c 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl @@ -12,12 +12,12 @@ // Пример использования: после очистки хранилищ настроек. // // Параметры: -// Настройки - Структура - Необязательный. Настройки обновления. -// * ОбщиеДанные - Булево - Необязательный. Обновлять неразделенные данные. -// * РазделенныеДанные - Булево - Необязательный. Обновлять разделенные данные. -// * Оперативное - Булево - Необязательный. Оперативное обновление данных. -// * Отложенное - Булево - Необязательный. Отложенное обновление данных. -// * Полное - Булево - Необязательный. Не учитывать хеш-суммы при отложенном обновление данных. +// Настройки - Структура - необязательный. Настройки обновления: +// * ОбщиеДанные - Булево - необязательный. Обновлять неразделенные данные. +// * РазделенныеДанные - Булево - необязательный. Обновлять разделенные данные. +// * Оперативное - Булево - необязательный. Оперативное обновление данных. +// * Отложенное - Булево - необязательный. Отложенное обновление данных. +// * Полное - Булево - необязательный. Не учитывать хеш-суммы при отложенном обновление данных. // Функция Обновить(Настройки = Неопределено) Экспорт diff --git a/SSL/src/CommonModules/ИнформацияПриЗапускеПереопределяемый/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапускеПереопределяемый/Module.bsl index dced1358b..bbdab5c6b 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапускеПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапускеПереопределяемый/Module.bsl @@ -11,8 +11,8 @@ // Определение настроек отображения информации при запуске. // // Параметры: -// Настройки - Структура - Настройки подсистемы. -// * Показывать - Булево - Показывать ли информацию в текущем сеансе. +// Настройки - Структура: +// * Показывать - Булево - показывать ли информацию в текущем сеансе. // Истина - Информация будет показана после входа в программу. // Ложь - Информация не будет показана. // diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index c51364bc9..e9bece67d 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -12,7 +12,8 @@ // входящих в указанный график ГрафикРаботы. // // Параметры: -// ГрафикРаботы - СправочникСсылка.Календари, СправочникСсылка.ПроизводственныеКалендари - график или +// ГрафикРаботы - СправочникСсылка.Календари +// - СправочникСсылка.ПроизводственныеКалендари - график или // производственный календарь, который необходимо использовать для расчета дат. // ДатаОт - Дата - дата, от которой нужно рассчитать количество дней. // МассивДней - Массив - количество дней (Число), на которые нужно увеличить дату начала. @@ -121,7 +122,8 @@ // входящих в указанный график или производственный календарь ГрафикРаботы. // // Параметры: -// ГрафикРаботы - СправочникСсылка.Календари, СправочникСсылка.ПроизводственныеКалендари - график или +// ГрафикРаботы - СправочникСсылка.Календари +// - СправочникСсылка.ПроизводственныеКалендари - график или // производственный календарь, который необходимо использовать для расчета даты. // ДатаОт - Дата - дата, от которой нужно рассчитать количество дней. // КоличествоДней - Число - количество дней, на которые нужно увеличить дату начала. @@ -158,7 +160,8 @@ // Определяет количество дней, входящих в график, для указанного периода. // // Параметры: -// ГрафикРаботы - СправочникСсылка.Календари, СправочникСсылка.ПроизводственныеКалендари - график или +// ГрафикРаботы - СправочникСсылка.Календари +// - СправочникСсылка.ПроизводственныеКалендари - график или // производственный календарь, который необходимо использовать для расчета дней. // ДатаНачала - Дата - дата начала периода. // ДатаОкончания - Дата - дата окончания периода. @@ -340,7 +343,7 @@ // полученных методом ПериодыНерабочихДней. // // Возвращаемое значение: -// Структура - : +// Структура: // * ПолучатьПредшествующие - Булево - способ получения ближайшей даты: // если Истина - определяются рабочие даты, предшествующие переданным в параметре НачальныеДаты, // если Ложь - получаются ближайшие рабочие даты, следующие за начальными датами. @@ -488,7 +491,7 @@ // ДатаОкончания - Дата - дата окончания периода. // // Возвращаемое значение: -// ТаблицаЗначений - таблица с колонками: +// ТаблицаЗначений: // * ГрафикРаботы - СправочникСсылка.Календари - график работы. // * ДатаГрафика - Дата - дата в графике работы ГрафикРаботы. // * ВремяНачала - Дата - время начала работы в день ДатаГрафика. @@ -701,7 +704,7 @@ // // Параметры: // - МенеджерВременныхТаблиц, -// - МассивДней - массив, количество дней, +// - МассивДней - массив - количество дней, // - РассчитыватьСледующуюДатуОтПредыдущей - необязательный, по умолчанию Ложь. // Процедура СоздатьВТПриращениеДней(МенеджерВременныхТаблиц, Знач МассивДней, Знач РассчитыватьСледующуюДатуОтПредыдущей = Ложь) Экспорт @@ -774,6 +777,10 @@ // Процедура ЗаполнитьДанныеЗависимыеОтПроизводственныхКалендарей(ТаблицаИзменений) Экспорт + Если ТаблицаИзменений.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); МодульГрафикиРаботы.ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(ТаблицаИзменений); @@ -834,11 +841,11 @@ // Если подсистема РаботаСКлассификаторами отсутствует или не удалось получить файл классификатора, вызывается исключение. // // Возвращаемое значение: -// Структура - со свойствами: -// * ПроизводственныеКалендари - Структура - со свойствами: +// Структура: +// * ПроизводственныеКалендари - Структура: // * ИмяТаблицы - Строка - имя таблицы. // * Данные - ТаблицаЗначений - преобразованная из XML таблица календарей. -// * ДанныеПроизводственныхКалендарей - Структура - со свойствами: +// * ДанныеПроизводственныхКалендарей - Структура: // * ИмяТаблицы - Строка - имя таблицы. // * Данные - ТаблицаЗначений - преобразованная из XML таблица данных календарей. // @@ -938,7 +945,7 @@ Обработчик.ОбщиеДанные = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.1.2.363"; + Обработчик.Версия = "3.1.3.113"; Обработчик.Процедура = "КалендарныеГрафики.СброситьВерсиюКлассификатора"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.ОбщиеДанные = Истина; @@ -1141,7 +1148,7 @@ Если Метаданные.Обработки.Найти("ЗаполнениеКалендарныхГрафиков") = Неопределено Тогда Возврат "1.0.0.1"; - КонецЕсли; + КонецЕсли; МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков"); Возврат МодульКалендарныеГрафики.ВерсияОбновленияДанныхПроизводственныхКалендарей(); diff --git a/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl index 08505202e..7fa59fe7e 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl @@ -12,7 +12,7 @@ // В случае, если разделение включено, выполняется в не разделенном режиме. // // Параметры: -// УсловияОбновления - ТаблицаЗначений - таблица с колонками: +// УсловияОбновления - ТаблицаЗначений: // * КодПроизводственногоКалендаря - Строка - код производственного календаря, данные которого изменились; // * Год - Число - календарный год, за который изменились данные. // @@ -24,7 +24,7 @@ // В случае, если разделение включено, выполняется в областях данных. // // Параметры: -// УсловияОбновления - ТаблицаЗначений - таблица с колонками: +// УсловияОбновления - ТаблицаЗначений: // * КодПроизводственногоКалендаря - Строка - код производственного календаря, данные которого изменились; // * Год - Число - календарный год, за который изменились данные. // diff --git a/SSL/src/CommonModules/КалендарныеГрафикиСлужебный/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиСлужебный/Module.bsl index 6ec68dcf6..7f532cb3b 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиСлужебный/Module.bsl @@ -75,9 +75,9 @@ // // Параметры: // УсловияОбновления - ТаблицаЗначений - таблица с условиями обновления графиков. -// ОбластиДляОбновления - Массив со списком кодов областей. +// ОбластиДляОбновления - массив со списком кодов областей. // ИдентификаторФайла - УникальныйИдентификатор файла обрабатываемых курсов. -// КодОбработчика - Строка, код обработчика. +// КодОбработчика - Строка - код обработчика. // Процедура РаспространитьДанныеПроизводственныхКалендарейПоЗависимымДанным(Знач УсловияОбновления, Знач ОбластиДляОбновления, Знач ИдентификаторФайла, Знач КодОбработчика) diff --git a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl index 1cdb44674..6e7401865 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl @@ -14,15 +14,29 @@ // Выполняет указанную проверку ведения учета с заданными параметрами. // // Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета, Строка - правило проверки, +// Проверка - СправочникСсылка.ПравилаПроверкиУчета +// - Строка - правило проверки, // которая будет выполняться либо строковый идентификатор указанного правила. -// ПараметрыВыполненияПроверки - Структура, Массив - произвольные дополнительные параметры проверки, +// ПараметрыВыполненияПроверки - Структура +// - Массив - произвольные дополнительные параметры проверки, // которые уточняют, что и как именно проверять. // См. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. -// - Структура - один параметр проверки: -// * Свойство1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - первое значение параметра. -// * Свойство2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - второе значение параметра. -// * Свойство3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - третье значение параметра. +// - Структура: +// * Свойство1 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - первое значение параметра. +// * Свойство2 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - второе значение параметра. +// * Свойство3 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - третье значение параметра. // ... // - Массив - несколько параметров проверки (элементы массива типа Структура, как описано выше). // ПроверяемыеОбъекты - ЛюбаяСсылка - если передано, то проверка будет выполнена только для данного объекта. @@ -70,7 +84,7 @@ // Проверки с флагом Использование, установленным в значение Ложь, пропускаются. // // Параметры: -// КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - Контекст выполняемых проверок. +// КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - контекст выполняемых проверок. // // Пример: // КонтрольВеденияУчета.ВыполнитьПроверкиВКонтексте(Перечисления.ХозяйственныеОперации.ЗакрытиеМесяца); @@ -95,7 +109,7 @@ // ВидПроверок - СправочникСсылка.ВидыПроверок - ссылка на вид проверки. // - Строка - строковый идентификатор вида проверки Свойство1. // - Массив - строковые идентификаторы вида проверки Свойство1...СвойствоN. -// ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется +// ПоискПоТочномуСоответствию - Булево - регулирует возможности точности. Если Истина, то поиск ведется // по переданным свойствам на равенство, остальные свойства должны быть равны // Неопределено (табличная часть дополнительных свойств должна быть пуста). // Если Ложь, то значения остальных свойств могут быть произвольными, главное @@ -105,7 +119,7 @@ // По умолчанию - Ложь. // // Возвращаемое значение: -// Структура - сводка: +// Структура: // * Количество - Число - общее количество найденных проблем. // * ЕстьОшибки - Булево - признак того, имеются ли ошибки среди найденных проблем (с важностью "Ошибка"). // @@ -141,7 +155,7 @@ // и с любыми значениями неуказанных свойств в параметре ВидПроверок (см. пример № 3). // // Возвращаемое значение: -// ТаблицаЗначений - выявленные проблемы: +// ТаблицаЗначений: // * ПроблемныйОбъект - ЛюбаяСсылка - ссылка на объект, с которым связана проблема. // * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - важность проблемы учета // "Информация", "Предупреждение", "Ошибка", "ПолезныйСовет" и "ВажнаяИнформация". @@ -180,7 +194,7 @@ // Возвращает проверку по переданному идентификатору. // // Параметры: -// Идентификатор - Строка - Строковый идентификатор проверки. Например, "ПроверитьСсылочнуюЦелостность". +// Идентификатор - Строка - строковый идентификатор проверки. Например, "ПроверитьСсылочнуюЦелостность". // // Возвращаемое значение: // СправочникСсылка.ПравилаПроверкиУчета - ссылка на проверку или пустая ссылка, @@ -199,7 +213,7 @@ // ПроблемныйОбъект - ЛюбаяСсылка - объект, для которого нужно вычислить количество проблем. // // Возвращаемое значение: -// Число - +// Число // Функция КоличествоПроблемПоОбъекту(ПроблемныйОбъект) Экспорт @@ -229,7 +243,7 @@ // нужно вычислить количество проблем. // // Возвращаемое значение: -// Число - +// Число // Функция КоличествоПроблемПоПравилуПроверки(ПравилоПроверки) Экспорт @@ -265,21 +279,57 @@ // Порядок следования параметров учитывается. // // Параметры: -// Параметр1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - первый параметр проверки. -// Параметр2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - второй параметр проверки. -// Параметр3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - третий параметр проверки. -// Параметр4 - ЛюбаяСсылка, Булево, Число, Строка, Дата - четвертый параметр проверки. -// Параметр5 - ЛюбаяСсылка, Булево, Число, Строка, Дата - пятый параметр проверки. +// Параметр1 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - первый параметр проверки. +// Параметр2 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - второй параметр проверки. +// Параметр3 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - третий параметр проверки. +// Параметр4 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - четвертый параметр проверки. +// Параметр5 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - пятый параметр проверки. // ДругиеПараметры - Массив - другие параметры проверки (элементы типов ЛюбаяСсылка, Булево, Число, Строка, Дата). // // Возвращаемое значение: // Структура - параметры проверки в виде: // * Наименование - Строка - представление вида проверки. -// * Свойство1 - ЛюбаяСсылка, Булево, Число, Строка, Дата - первый параметр проверки. -// * Свойство2 - ЛюбаяСсылка, Булево, Число, Строка, Дата - второй параметр проверки. -// * Свойство3 - ЛюбаяСсылка, Булево, Число, Строка, Дата - третий параметр проверки. +// * Свойство1 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - первый параметр проверки. +// * Свойство2 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - второй параметр проверки. +// * Свойство3 - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - третий параметр проверки. // ... -// * СвойствоN - ЛюбаяСсылка, Булево, Число, Строка, Дата - последний параметр вида проверки. +// * СвойствоN - ЛюбаяСсылка +// - Булево +// - Число +// - Строка +// - Дата - последний параметр вида проверки. // // Пример: // 1. Параметры = ПараметрыВыполненияПроверки("СистемныеПроверки"); @@ -302,7 +352,7 @@ // Параметры: // Проверка - СправочникСсылка.ПравилаПроверкиУчета - проверка, // результаты которой необходимо очистить. -// ПараметрыВыполненияПроверки - см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. +// ПараметрыВыполненияПроверки - см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки // - Массив - несколько параметров проверки (элементы массива типа Структура, // как описано выше). // @@ -324,37 +374,39 @@ // // Параметры: // ПроблемныйОбъект - ЛюбаяСсылка - объект, с которым связана выявленная проблема. -// ПараметрыПроверки - Структура - Параметры выполняемой проверки, значение которых следует взять из одноименного -// параметра процедуры-обработчика проверки. +// ПараметрыПроверки - Структура - параметры выполняемой проверки, значение которых следует взять из одноименного +// параметра процедуры-обработчика проверки: // * Проверка - СправочникСсылка.ПравилаПроверкиУчета - выполненная проверку. // * ВидПроверки - СправочникСсылка.ВидыПроверок - вид проверки, к которому относится выполненная проверка. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность, с которой следует +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - важность, с которой следует // зарегистрировать выявленную проблемы учета: // Информация, Предупреждение, Ошибка, ПолезныйСовет или ВажнаяИнформация. -// * Идентификатор - Строка - Строковый идентификатор проверки. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// * Идентификатор - Строка - строковый идентификатор проверки. +// * ДатаНачалаПроверки - Дата - пороговая дата, обозначающая границу проверяемых // объектов (только для объектов с датой). Объекты, дата которых меньше // указанной, не следует проверять. По умолчанию не заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. +// * ЛимитПроблем - Число - количество проверяемых объектов. // По умолчанию 1000. Если указано 0, то следует проверить все объекты. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к +// * ВидПроверки - СправочникСсылка.ВидыПроверок - ссылка на вид проверки, к // которому относится выполненная проверка. // // Возвращаемое значение: -// Структура - описание проблемы: -// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. -// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. +// Структура: +// * ПроблемныйОбъект - ЛюбаяСсылка - ссылка на объект "Источник" проблем. +// * Проверка - СправочникСсылка.ПравилаПроверкиУчета - ссылка на выполненную проверку. // Взято из переданной структуры ПараметрыПроверки. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому относится +// * ВидПроверки - СправочникСсылка.ВидыПроверок - ссылка на вид проверки, к которому относится // выполненная проверка. Взято из переданной структуры ПараметрыПроверки -// * ВажностьПроблемы - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому относится +// * ВажностьПроблемы - СправочникСсылка.ВидыПроверок - ссылка на вид проверки, к которому относится // выполненная проверка. Взято из переданной структуры ПараметрыПроверки. -// * УточнениеПроблемы - Строка - Строка уточнения проблемы. По умолчанию не заполнена. -// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. -// * Выявлено - Дата - Момент обнаружения проблемы. -// * ДополнительнаяИнформация - ХранилищеЗначений, Неопределено - произвольные дополнительные сведения, связанные +// * УточнениеПроблемы - Строка - строка уточнения проблемы. По умолчанию не заполнена. +// * КлючУникальности - УникальныйИдентификатор - ключ уникальности проблемы. +// * Выявлено - Дата - момент обнаружения проблемы. +// * ДополнительнаяИнформация - ХранилищеЗначений +// - Неопределено - произвольные дополнительные сведения, связанные // с выявленной проблемой. По умолчанию Неопределено. -// * Ответственный - СправочникСсылка.Пользователи, Неопределено - Заполнен, если за проблемный объект +// * Ответственный - СправочникСсылка.Пользователи +// - Неопределено - заполнен, если за проблемный объект // имеется конкретный ответственный. По умолчанию Неопределено. // // Пример: @@ -404,7 +456,7 @@ // При сбросе в значение Ложь проблема вновь становится актуальной. // // Параметры: -// ОписаниеПроблемы - Структура - описание проблемы: +// ОписаниеПроблемы - Структура: // * ПроблемныйОбъект - ЛюбаяСсылка - ссылка на объект, с которым связана проблема. // * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - выполненная проверка с описанием проблемы. // * ВидПроверок - СправочникСсылка.ВидыПроверок - вид проверки. @@ -432,8 +484,9 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма списка. -// ИменаСписков - Строка - Имена динамических списков через запятую. -// ДополнительныеСвойства - Структура, Неопределено - дополнительные свойства. +// ИменаСписков - Строка - имена динамических списков через запятую. +// ДополнительныеСвойства - Структура +// - Неопределено - дополнительные свойства: // * ИмяПоляИндикатораПроблем - Строка - имя поля динамического списка, которое // будет использовано для вывода индикатора // наличия проблем у объекта. @@ -545,11 +598,12 @@ // Вызывается из события ПриПолученииДанныхНаСервере формы списка. // // Параметры: -// Настройки - НастройкиКомпоновкиДанных - Содержит копию полных настроек динамического списка. -// Строки - СтрокиДинамическогоСписка - Коллекция содержит данные и оформление всех строк, +// Настройки - НастройкиКомпоновкиДанных - содержит копию полных настроек динамического списка. +// Строки - СтрокиДинамическогоСписка - коллекция содержит данные и оформление всех строк, // получаемых в списке, кроме строк группировок. // ИмяКлючевогоПоля - Строка - "Ссылка" или заданное имя колонки, содержащую ссылку объекта. -// ДополнительныеСвойства - Структура, Неопределено - Содержит дополнительные свойства в случае +// ДополнительныеСвойства - Структура +// - Неопределено - содержит дополнительные свойства в случае // необходимости их использования. // Процедура ПриПолученииДанныхНаСервере(Настройки, Строки, ИмяКлючевогоПоля = "Ссылка", ДополнительныеСвойства = Неопределено) Экспорт @@ -607,9 +661,14 @@ // Вызывается из события ПриЧтенииНаСервере формы объекта. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма объекта. -// ТекущийОбъект - ДокументОбъект, СправочникОбъект, ПланОбменаОбъект, ПланВидовХарактеристикОбъект, ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, ЗадачаОбъект - Объект, который будет прочитан. +// Форма - ФормаКлиентскогоПриложения - форма объекта. +// ТекущийОбъект - ДокументОбъект - объект, который будет прочитан. +// - СправочникОбъект +// - ПланОбменаОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - ЗадачаОбъект // Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт @@ -679,8 +738,13 @@ // установлено свойство ПоддерживаетВыборочнуюПроверку в значение Истина. // // Параметры: -// ТекущийОбъект - ДокументОбъект, СправочникОбъект, ПланОбменаОбъект, ПланВидовХарактеристикОбъект, ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, ЗадачаОбъект - <ВидОбъектаМетаданных>Объект.<ИмяОбъектаМетаданных>. +// ТекущийОбъект - - ДокументОбъект - <ВидОбъектаМетаданных>Объект.<ИмяОбъектаМетаданных>. +// - СправочникОбъект +// - ПланОбменаОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - ЗадачаОбъект // Процедура ПослеЗаписиНаСервере(ТекущийОбъект) Экспорт Запрос = Новый Запрос; @@ -711,7 +775,7 @@ // Возвращает Истина, если есть права на просмотр проблем ведения учета. // // Возвращаемое значение: -// Булево - +// Булево // Функция ПодсистемаДоступна() Экспорт @@ -722,9 +786,10 @@ // Возвращает виды проверки по переданным параметрам. // // Параметры: -// ВидПроверок - Строка, Массив - строковый идентификатор вида проверки (Свойство1) +// ВидПроверок - Строка +// - Массив - строковый идентификатор вида проверки (Свойство1) // либо массив идентификаторов (Свойство1...СвойствоN), либо ссылка на вид проверки. -// ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется +// ПоискПоТочномуСоответствию - Булево - регулирует возможности точности. Если Истина, то поиск ведется // по переданным свойствам на равенство, остальные свойства должны быть равны // Неопределено (табличная часть дополнительных свойств должна быть пуста). // Если Ложь, то значения остальных свойств могут быть произвольными, главное @@ -748,7 +813,8 @@ // для регистрации или отбора результатов ведения учета. // // Параметры: -// ПараметрыВыполненияПроверки - Строка, Структура - сведения, идентифицирующие вид проверки: +// ПараметрыВыполненияПроверки - Строка +// - Структура - сведения, идентифицирующие вид проверки: // - Строка - строковый идентификатор вида проверки (Свойство1). // - см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. // ТолькоПоиск - Булево - если Истина и вид проверки с заданными параметрами не существует, @@ -797,24 +863,24 @@ // ВидПроверок - СправочникСсылка.ВидыПроверок - ссылка на вид проверки. // - Строка - строковый идентификатор вида проверки Свойство1. // - Массив - строковые идентификаторы вида проверки Свойство1...СвойствоN. -// ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется +// ПоискПоТочномуСоответствию - Булево - регулирует возможности точности. Если Истина, то поиск ведется // по переданным свойствам на равенство, остальные свойства должны быть равны // Неопределено (табличная часть дополнительных свойств должна быть пуста). // Если Ложь, то значения остальных свойств могут быть произвольными, главное // чтобы соответствующие свойства были равны свойствам структуры. По умолчанию Истина. // // Возвращаемое значение: -// ТаблицаЗначений - таблица проблем: -// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. -// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. -// * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// ТаблицаЗначений: +// * ПроблемныйОбъект - ЛюбаяСсылка - ссылка на объект "Источник" проблем. +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - ссылка на выполненную проверку. +// * УточнениеПроблемы - Строка - строка-уточнение найденной проблемы. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - важность проблемы учета // "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". -// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность +// * Ответственный - СправочникСсылка.Пользователи - заполнен если есть возможность // идентифицировать ответственного в проблемном объекте. -// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными +// * ДополнительнаяИнформация - ХранилищеЗначений - служебное свойство с дополнительными // сведениями, связанными с выявленной проблемой -// * Выявлено - Дата - Серверное время идентификации проблемы. +// * Выявлено - Дата - серверное время идентификации проблемы. // // Пример: // 1) Результат = ПодробнаяИнформацияПоВидамПроверок("СистемныеПроверки"); @@ -873,14 +939,14 @@ // ВидПроверок - СправочникСсылка.ВидыПроверок - ссылка на вид проверки. // - Строка - строковый идентификатор вида проверки Свойство1. // - Массив - строковые идентификаторы вида проверки Свойство1...СвойствоN. -// ПоискПоТочномуСоответствию - Булево - Регулирует возможности точности. Если Истина, то поиск ведется +// ПоискПоТочномуСоответствию - Булево - регулирует возможности точности. Если Истина, то поиск ведется // по переданным свойствам на равенство, остальные свойства должны быть равны // Неопределено (табличная часть дополнительных свойств должна быть пуста). // Если Ложь, то значения остальных свойств могут быть произвольными, главное // чтобы соответствующие свойства были равны свойствам структуры. По умолчанию Истина. // // Возвращаемое значение: -// Структура - сводка: +// Структура: // * Количество - Число - общее количество найденных проблем. // * ЕстьОшибки - Булево - признак того, имеются ли ошибки среди найденных проблем (с важностью "Ошибка"). // @@ -1012,20 +1078,20 @@ Процедура ОчиститьРезультатПоВидуПроверки(ПроблемныйОбъект, ВидПроверки) Экспорт + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.РезультатыПроверкиУчета"); + ЭлементБлокировкиДанных.УстановитьЗначение("ПроблемныйОбъект", ПроблемныйОбъект); + ЭлементБлокировкиДанных.УстановитьЗначение("ВидПроверки", ВидПроверки); + НачатьТранзакцию(); Попытка - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.РезультатыПроверкиУчета"); - ЭлементБлокировкиДанных.УстановитьЗначение("ПроблемныйОбъект", ПроблемныйОбъект); - ЭлементБлокировкиДанных.УстановитьЗначение("ВидПроверки", ВидПроверки); БлокировкаДанных.Заблокировать(); Набор = РегистрыСведений.РезультатыПроверкиУчета.СоздатьНаборЗаписей(); Набор.Отбор.ПроблемныйОбъект.Установить(ПроблемныйОбъект); Набор.Отбор.ВидПроверки.Установить(ВидПроверки); - Набор.Очистить(); Набор.Записать(); ЗафиксироватьТранзакцию(); diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаВызовСервера/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаВызовСервера/Module.bsl index 17ad9b415..0854caeab 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаВызовСервера/Module.bsl @@ -11,11 +11,12 @@ // Для вызова из команды отчета РезультатыПроверкиУчета. // // Параметры: -// ОтчетДанныеРасшифровки - ДанныеРасшифровкиКомпоновкиДанных - -// ТабличныйДокумент - ТабличныйДокумент - -// ИндексРасшифровки - Число, Неопределено - +// ОтчетДанныеРасшифровки - ДанныеРасшифровкиКомпоновкиДанных +// ТабличныйДокумент - ТабличныйДокумент +// ИндексРасшифровки - Число +// - Неопределено // Возвращаемое значение: -// Булево - +// Булево // Функция ИгнорироватьПроблему(ОтчетДанныеРасшифровки, ТабличныйДокумент, ИндексРасшифровки) Экспорт Результат = РасшифровкаВыделеннойЯчейки(ОтчетДанныеРасшифровки, ТабличныйДокумент, ИндексРасшифровки); diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl index 2641fd868..712a8866a 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl @@ -30,9 +30,9 @@ // Открывает форму отчета при нажатии на гиперссылку, сигнализирующую о наличии проблем. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Управляемая форма проблемного объекта. -// ПроблемныйОбъект - СсылкаНаОбъект - Ссылка на проблемный объект. -// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения +// Форма - ФормаКлиентскогоПриложения - управляемая форма проблемного объекта. +// ПроблемныйОбъект - СсылкаНаОбъект - ссылка на проблемный объект. +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения // стандартной (системной) обработки события. // // Пример: @@ -56,13 +56,14 @@ // сигнализирующей о наличии проблем с выделенным объектом. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Управляемая форма проблемного объекта. -// ИмяСписка - Строка - Имя целевого динамического списка как реквизита формы. -// Поле - ПолеФормы - Колонка в которой располагается картинка, +// Форма - ФормаКлиентскогоПриложения - управляемая форма проблемного объекта. +// ИмяСписка - Строка - имя целевого динамического списка как реквизита формы. +// Поле - ПолеФормы - колонка в которой располагается картинка, // сигнализирующая о наличии проблем. -// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения // стандартной (системной) обработки события. -// ДополнительныеПараметры - Структура, Неопределено - Содержит дополнительные свойства в случае +// ДополнительныеПараметры - Структура +// - Неопределено - содержит дополнительные свойства в случае // необходимости их использования. // // Пример: diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl index f82b8164c..fe8689ce6 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl @@ -11,12 +11,12 @@ // Позволяет задать общие настройки подсистемы. // // Параметры: -// Настройки - Структура - настройки подсистемы: -// * КартинкаИндикатораПроблем - Картинка, которая будет выводиться в качестве +// Настройки - Структура: +// * КартинкаИндикатораПроблем - картинка, которая будет выводиться в качестве // индикатора ошибки в колонке динамического списка // форм списков и на специальной панели форм объектов. -// * ПояснениеИндикатораПроблем - Строка - Поясняющая строка к ошибке. -// * ГиперссылкаИндикатораПроблем - Строка - Текст гиперссылки, при нажатии на которую, +// * ПояснениеИндикатораПроблем - Строка - поясняющая строка к ошибке. +// * ГиперссылкаИндикатораПроблем - Строка - текст гиперссылки, при нажатии на которую, // будет сформирован и открыт отчет с ошибками. // // Пример: @@ -32,12 +32,12 @@ // Предназначена для подключения собственных правил проверки ведения учета. // // Параметры: -// ГруппыПроверок - ТаблицаЗначений - Таблица, в которую добавляются группы проверок: -// * Наименование - Строка - Наименование группы проверок. -// * ИдентификаторГруппы - Строка - Строковый идентификатор группы проверок, например: +// ГруппыПроверок - ТаблицаЗначений - таблица, в которую добавляются группы проверок: +// * Наименование - Строка - наименование группы проверок. +// * ИдентификаторГруппы - Строка - строковый идентификатор группы проверок, например: // "СистемныеПроверки", "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. // Обязателен для заполнения. -// * Идентификатор - Строка - Строковый идентификатор группы проверок. Обязателен для заполнения. +// * Идентификатор - Строка - строковый идентификатор группы проверок. Обязателен для заполнения. // Для уникальности формат идентификатора следует выбирать следующим: // "<Название программного продукта>.<Идентификатор проверки>". // Например: "СтандартныеПодсистемы.СистемныеПроверки". @@ -46,26 +46,26 @@ // категории. // * Комментарий - Строка - комментарий к группе проверок. // -// Проверки - ТаблицаЗначений - Таблица, в которую добавляются проверки: -// * ИдентификаторГруппы - Строка - Строковый идентификатор группы проверок, например: +// Проверки - ТаблицаЗначений - таблица, в которую добавляются проверки: +// * ИдентификаторГруппы - Строка - строковый идентификатор группы проверок, например: // "СистемныеПроверки", "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. // Обязателен для заполнения. -// * Наименование - Строка - Наименование проверки, выводимое пользователю. -// * Причины - Строка - Описание возможных причин, которые приводят к возникновению проблемы. -// * Рекомендация - Строка - Рекомендация по решению возникшей проблемы. -// * Идентификатор - Строка - Строковый идентификатор элемента. Обязателен для заполнения. +// * Наименование - Строка - наименование проверки, выводимое пользователю. +// * Причины - Строка - описание возможных причин, которые приводят к возникновению проблемы. +// * Рекомендация - Строка - рекомендация по решению возникшей проблемы. +// * Идентификатор - Строка - строковый идентификатор элемента. Обязателен для заполнения. // Формат идентификатора должен быть следующим: // <Название программного продукта>.<Идентификатор проверки>. Например: // СтандартныеПодсистемы.СистемныеПроверки. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых объектов +// * ДатаНачалаПроверки - Дата - пороговая дата, обозначающая границу проверяемых объектов // (только для объектов с датой, например, документов). Объекты, дата // которых меньше указанной, не следует проверять. По умолчанию // не заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. По умолчанию 1000. +// * ЛимитПроблем - Число - количество проверяемых объектов. По умолчанию 1000. // Если указан 0, то следует проверять все объекты. -// * ОбработчикПроверки - Строка - Имя экспортной процедуры-обработчика серверного общего модуля +// * ОбработчикПроверки - Строка - имя экспортной процедуры-обработчика серверного общего модуля // в виде ИмяМодуля.ИмяПроцедуры. -// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной процедуры-обработчика клиентского общего модуля +// * ОбработчикПереходаКИсправлению - Строка - имя экспортной процедуры-обработчика клиентского общего модуля // для перехода к исправлению проблемы в виде "ИмяМодуля.ИмяПроцедуры" // или полное имя формы, которую следует открыть для исправления проблемы. // Процедура-обработчик принимает на вход два параметра: @@ -77,7 +77,7 @@ // При открытии формы в нее передаются такие же параметры, как свойства // указанной выше структуры ПараметрыИсправления. // * БезОбработчикаПроверки - Булево - признак служебной проверки, которая не имеет процедуры-обработчика. -// * ЗапрещеноИзменениеВажности - Булево - Если Истина, то администратор не сможет перенастраивать +// * ЗапрещеноИзменениеВажности - Булево - если Истина, то администратор не сможет перенастраивать // важность данной проверки. // * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - значение, дополнительно // уточняющее принадлежность проверки ведения учета к определенной группе @@ -85,7 +85,7 @@ // * УточнениеКонтекстаПроверокВеденияУчета - ОпределяемыйТип.УточнениеКонтекстаПроверокВеденияУчета - второе значение, // дополнительно уточняющее принадлежность проверки ведения учета // к определенной группе или категории. -// * ДополнительныеПараметры - ХранилищеЗначений - Произвольная дополнительная информация о проверке +// * ДополнительныеПараметры - ХранилищеЗначений - произвольная дополнительная информация о проверке // для программного использования. // * Комментарий - Строка - текстовый комментарий к проверке. // * Отключена - Булево - если Истина, то проверка не будет выполняться в фоне по расписанию. @@ -116,17 +116,17 @@ // // Параметры: // ПараметрыГруппыИндикации - Структура - выходные параметры индикатора: -// * ВыводитьСнизу - Булево - Если указать Истина, то группа индикатора будет выводиться самой последней +// * ВыводитьСнизу - Булево - если указать Истина, то группа индикатора будет выводиться самой последней // в форме или в конце указанной группе элементов ИмяРодителяГруппы. // По умолчанию Ложь - группа выводится в начале указанной группе ИмяРодителяГруппы или // сразу под командной панелью формы объекта. -// * ИмяРодителяГруппы - Строка - Определяет имя группы элементов формы объекта, внутри которой должна +// * ИмяРодителяГруппы - Строка - определяет имя группы элементов формы объекта, внутри которой должна // располагаться группа индикации. // * ДетальныйВид - Булево - если Истина и у объекта найдена только одна проблема, то в карточке будет // сразу выводиться ее описание вместо гиперссылки с переходом к списку проблем. // Значение по умолчанию - Ложь. // -// ТипПроблемногоОбъекта - Тип - Тип ссылки, для которой переопределяются параметры группы индикации. +// ТипПроблемногоОбъекта - Тип - тип ссылки, для которой переопределяются параметры группы индикации. // Например, Тип("ДокументСсылка.НачислениеЗарплаты"). // Процедура ПриОпределенииПараметровГруппыИндикации(ПараметрыГруппыИндикации, Знач ТипПроблемногоОбъекта) Экспорт @@ -138,12 +138,12 @@ // // Параметры: // ПараметрыКолонкиИндикации - Структура - выходные параметры индикатора: -// * ВыводитьПоследней - Булево - Если указать Истина, то колонка-индикатор будет выводиться в конце. +// * ВыводитьПоследней - Булево - если указать Истина, то колонка-индикатор будет выводиться в конце. // По умолчанию Ложь - колонка выводится в начале. -// * ПоложениеЗаголовка - ПоложениеЗаголовкаЭлементаФормы - Задает положение заголовка колонки-индикатора. -// * Ширина - Число - Ширина колонки-индикатора. +// * ПоложениеЗаголовка - ПоложениеЗаголовкаЭлементаФормы - задает положение заголовка колонки-индикатора. +// * Ширина - Число - ширина колонки-индикатора. // -// ПолноеИмя - Строка - Полное имя объекта основной таблицы динамического списка. +// ПолноеИмя - Строка - полное имя объекта основной таблицы динамического списка. // Например, Метаданные.Документы.НачислениеЗарплаты.ПолноеИмя(). // Процедура ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ПолноеИмя) Экспорт @@ -155,27 +155,27 @@ // к списку проблем ведения учета. // // Параметры: -// Проблема - Структура - Сформированная алгоритмом проверки информация о проблеме: +// Проблема - Структура - сформированная алгоритмом проверки информация о проблеме: // * ПроблемныйОбъект - ЛюбаяСсылка - объект, по поводу которого записывается проблема. // Либо ссылка на элемент справочника ИдентификаторыОбъектовМетаданных -// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - ссылка на выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - ссылка на вид проверки, к которому // относится выполненная проверка. -// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. -// * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// * КлючУникальности - УникальныйИдентификатор - ключ уникальности проблемы. +// * УточнениеПроблемы - Строка - строка-уточнение найденной проблемы. +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - важность проблемы учета // Информация, Предупреждение, Ошибка, ПолезныйСовет и ВажнаяИнформация. -// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность +// * Ответственный - СправочникСсылка.Пользователи - заполнен если есть возможность // идентифицировать ответственного в проблемном объекте. -// * ИгнорироватьПроблему - Булево - Флаг игнорирования проблемы. Если имеет значение "Истина", +// * ИгнорироватьПроблему - Булево - флаг игнорирования проблемы. Если имеет значение "Истина", // запись о проблеме игнорируется подсистемой. -// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными +// * ДополнительнаяИнформация - ХранилищеЗначений - служебное свойство с дополнительными // сведениями, связанными с выявленной проблемой. -// * Выявлено - Дата - Серверное время идентификации проблемы. +// * Выявлено - Дата - серверное время идентификации проблемы. // -// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на объект-источник значения для добавляемых +// СсылкаНаОбъект - ЛюбаяСсылка - ссылка на объект-источник значения для добавляемых // дополнительных измерений. -// Реквизиты - КоллекцияОбъектовМетаданных - Коллекция, содержащая реквизиты объекта- +// Реквизиты - КоллекцияОбъектовМетаданных - коллекция, содержащая реквизиты объекта- // источника проблем. // Процедура ПередЗаписьюПроблемы(Проблема, СсылкаНаОбъект, Реквизиты) Экспорт @@ -188,38 +188,38 @@ // Предназначена для подключения собственных правил проверки ведения учета. // // Параметры: -// ГруппыПроверок - ТаблицаЗначений - Таблица, в которую добавляются группы проверок: -// * Наименование - Строка - Наименование группы проверок, например: "Системные проверки". -// * Идентификатор - Строка - Строковый идентификатор группы, например: "СистемныеПроверки". +// ГруппыПроверок - ТаблицаЗначений - таблица, в которую добавляются группы проверок: +// * Наименование - Строка - наименование группы проверок, например: "Системные проверки". +// * Идентификатор - Строка - строковый идентификатор группы, например: "СистемныеПроверки". // -// Проверки - ТаблицаЗначений - Таблица, в которую добавляются проверки: -// * Наименование - Строка - Наименование элемента проверки. Обязательно для заполнения. -// * Причины - Строка - Возможные причины, которые привели к возникновению проблемы. +// Проверки - ТаблицаЗначений - таблица, в которую добавляются проверки: +// * Наименование - Строка - наименование элемента проверки. Обязательно для заполнения. +// * Причины - Строка - возможные причины, которые привели к возникновению проблемы. // Выводятся в отчете о проблемах. Необязательно для заполнения. -// * Рекомендация - Строка - Рекомендация по решению возникшей проблемы. +// * Рекомендация - Строка - рекомендация по решению возникшей проблемы. // Выводятся в отчете о проблемах. Необязательно для заполнения. -// * Идентификатор - Строка - Строковый идентификатор проверки. Обязателен для заполнения. -// * ИдентификаторРодителя - Строка - Строковый идентификатор группы проверок, например: "СистемныеПроверки". +// * Идентификатор - Строка - строковый идентификатор проверки. Обязателен для заполнения. +// * ИдентификаторРодителя - Строка - строковый идентификатор группы проверок, например: "СистемныеПроверки". // Обязательно для заполнения. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// * ДатаНачалаПроверки - Дата - пороговая дата, обозначающая границу проверяемых // объектов (только для объектов с датой). Объекты, дата которых меньше // указанной, не следует проверять. По умолчанию не заполнено (т.е. проверять все). -// * ЛимитПроблем - Число - Максимальное количество проверяемых объектов. +// * ЛимитПроблем - Число - максимальное количество проверяемых объектов. // По умолчанию 0 - следует проверить все объекты. -// * ОбработчикПроверки - Строка - Имя экспортной процедуры-обработчика проверки в серверном общем модуле. +// * ОбработчикПроверки - Строка - имя экспортной процедуры-обработчика проверки в серверном общем модуле. // Предназначен для поиска и регистрации проблем ведения учета. // Параметры обработчика проверки: // * Проверка - СправочникСсылка.ПравилаПроверкиУчета - исполняемая проверка. -// * ПараметрыПроверки - Структура - Параметры проверки, которую необходимо выполнить. +// * ПараметрыПроверки - Структура - параметры проверки, которую необходимо выполнить. // Подробнее см. в документации. -// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной процедуры-обработчика исправления проблемы +// * ОбработчикПереходаКИсправлению - Строка - имя экспортной процедуры-обработчика исправления проблемы // в клиентском общем модуле или полное имя формы, которая будет открыта для // исправления проблемы. Параметры обработчика исправления проблемы или формы: // * ИдентификаторПроверки - Строка - идентификатор проверки, // которая выявила проблему. // * ВидПроверки - СправочникСсылка.ВидыПроверок - вид проверки // с дополнительной информацией о проблеме. -// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация по проверке. +// * ДополнительныеПараметры - ХранилищеЗначений - дополнительная информация по проверке. // // Пример: // Проверка = Проверки.Добавить(); diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl index 73bf57af4..f493793b1 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl @@ -170,7 +170,7 @@ // Обновляет состав системных проверок ведения учета при изменении конфигурации. // // Параметры: -// ЕстьИзменения - Булево - Возвращаемое значение. Если производилась запись, устанавливается Истина, +// ЕстьИзменения - Булево - возвращаемое значение. Если производилась запись, устанавливается Истина, // иначе не изменяется. // Процедура ОбновитьПараметрыПроверокУчета(ЕстьИзменения = Неопределено) Экспорт @@ -470,7 +470,7 @@ // // Параметры: // ПараметрыВыполненияПроверки - см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. -// КоличествоСвойств - Число - Количество свойств, по которым нужно вести поиск. +// КоличествоСвойств - Число - количество свойств, по которым нужно вести поиск. // // Возвращаемое значение: // СправочникСсылка.ВидыПроверок - элемент справочника, либо пустая ссылка, в случае если поиск не дал результата. @@ -599,7 +599,7 @@ // // Параметры: // ПараметрыВыполненияПроверки - см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. -// ПоискПоТочномуСоответствию - Булево - Если Истина, то поиск ведется +// ПоискПоТочномуСоответствию - Булево - если Истина, то поиск ведется // по переданным свойствам на равенство, остальные свойства должны быть равны // Неопределено (табличная часть дополнительных свойств должна быть пуста). // Если Ложь, то значения остальных свойств могут быть произвольными, главное @@ -725,7 +725,7 @@ // Возвращает массив проблемных объектов. Максимально "облегчена" для прироста производительности. // // Параметры: -// КлючиСтрок - Массив - Массив, содержащий все ключи строк динамического списка. +// КлючиСтрок - Массив - массив, содержащий все ключи строк динамического списка. // // Возвращаемое значение - Массив из ЛюбаяСсылка - массив проблемных объектов. // @@ -910,8 +910,8 @@ // Параметры // ИдентификаторРегламентногоЗадания - Строка - Поле для связки с текущим фоновым заданием. // -// Возвращаемое значение - Структура со свойствами, Неопределено: -// * Идентификатор - Строка - Строковый идентификатор проверки. +// Возвращаемое значение - Структура - со свойствами, Неопределено: +// * Идентификатор - Строка - строковый идентификатор проверки. // Функция ПараметрыПроверкиПоИдентификаторуРегламентногоЗадания(ИдентификаторРегламентногоЗадания) @@ -1518,10 +1518,11 @@ #Область ПользовательскаяИндикацияОшибок // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// КлючУникальностиИмен - Строка - -// ИмяРодителяГруппы - Строка, Неопределено - -// ВыводитьСнизу - Булево - +// Форма - ФормаКлиентскогоПриложения +// КлючУникальностиИмен - Строка +// ИмяРодителяГруппы - Строка +// - Неопределено +// ВыводитьСнизу - Булево // Функция РазместитьГруппуИндикатораОшибки(Форма, КлючУникальностиИмен, ИмяРодителяГруппы = Неопределено, ВыводитьСнизу = Ложь) Экспорт @@ -1532,10 +1533,9 @@ Иначе РодительГруппы = ВсеЭлементыФормы.Найти(ИмяРодителяГруппы); Если РодительГруппы = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдена группа формы: ""%1""'"), ИмяРодителяГруппы); - Иначе - КонтекстРазмещения = РодительГруппы; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не существует указанная группа формы: ""%1""'"), ИмяРодителяГруппы); КонецЕсли; + КонтекстРазмещения = РодительГруппы; КонецЕсли; ГруппаИндикатораОшибки = ВсеЭлементыФормы.Добавить("ГруппаИндикатораОшибки_" + КлючУникальностиИмен, Тип("ГруппаФормы"), КонтекстРазмещения); // ТаблицаФормы @@ -1559,11 +1559,12 @@ КонецФункции // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// ГруппаИндикатораОшибки - ГруппаФормы - -// КлючУникальностиИмен - Строка - -// КартинкаИндикатораПроблем - Картинка, Неопределено - -// ОбщаяСтрокаИндикатор - ФорматированнаяСтрока - +// Форма - ФормаКлиентскогоПриложения +// ГруппаИндикатораОшибки - ГруппаФормы +// КлючУникальностиИмен - Строка +// КартинкаИндикатораПроблем - Картинка +// - Неопределено +// ОбщаяСтрокаИндикатор - ФорматированнаяСтрока // Процедура ЗаполнитьГруппуИндикатораОшибки(Форма, ГруппаИндикатораОшибки, КлючУникальностиИмен, ОбщаяСтрокаИндикатор, Настройки) Экспорт @@ -1749,7 +1750,8 @@ // фонового запуска проверок системы. // // Параметры: -// ИдентификаторРегламентногоЗадания - Строка, Неопределено - Строковый идентификатор регламентного задания. +// ИдентификаторРегламентногоЗадания - Строка +// - Неопределено - строковый идентификатор регламентного задания. // Процедура ПроверитьВедениеУчета(ИдентификаторРегламентногоЗадания = Неопределено) Экспорт @@ -2084,7 +2086,7 @@ Если РеквизитыТабличныхЧастейОбъекта.Количество() > 0 Тогда Для Каждого РеквизитыТабличнойЧасти Из РеквизитыТабличныхЧастейОбъекта Цикл - ТабличнаяЧастьОбъекта = СтрокаРезультата[РеквизитыТабличнойЧасти.Ключ]; + ТабличнаяЧастьОбъекта = СтрокаРезультата[РеквизитыТабличнойЧасти.Ключ];// ТаблицаЗначений ТекущийНомерСтроки = 1; Для Каждого СтрокаТЧ Из ТабличнаяЧастьОбъекта Цикл @@ -2142,11 +2144,18 @@ КонецПроцедуры + +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных +// Возвращаемое значение: +// Массив из Строка +// Функция СсылочныеРеквизитыОбъекта(ОбъектМетаданных) Результат = Новый Массив; - Для Каждого СтандартныйРеквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + ОписаниеСтандартныхРеквизитов = ОбъектМетаданных.СтандартныеРеквизиты;// ОписанияСтандартныхРеквизитов + Для Каждого СтандартныйРеквизит Из ОписаниеСтандартныхРеквизитов Цикл Если СтандартныйРеквизит.Имя = "Ссылка" Или СтандартныйРеквизит.Имя = "ТочкаМаршрута" Тогда Продолжить; КонецЕсли; @@ -2156,7 +2165,8 @@ Результат.Добавить(СтандартныйРеквизит.Имя); КонецЦикла; - Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + ОписаниеРеквизитов = ОбъектМетаданных.Реквизиты;// Массив из ОбъектМетаданныхРеквизит + Для Каждого Реквизит Из ОписаниеРеквизитов Цикл Если СодержитСсылочныйТип(Реквизит) Тогда Результат.Добавить(Реквизит.Имя); КонецЕсли; @@ -2164,7 +2174,7 @@ Если ОбщегоНазначения.ЭтоЗадача(ОбъектМетаданных) Тогда - РеквизитыАдресации = ОбъектМетаданных.РеквизитыАдресации; + РеквизитыАдресации = ОбъектМетаданных.РеквизитыАдресации;// Массив из ОбъектМетаданныхРеквизитАдресации Для Каждого РеквизитАдресации Из РеквизитыАдресации Цикл Если СодержитСсылочныйТип(РеквизитАдресации) Тогда Результат.Добавить(РеквизитАдресации.Имя); @@ -2182,7 +2192,8 @@ Результат = Новый Соответствие; Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл Реквизиты = Новый Массив; - Для Каждого РеквизитТабличнойЧасти Из ТабличнаяЧасть.Реквизиты Цикл + ОписаниеРеквизитовТабличнойЧасти = ТабличнаяЧасть.Реквизиты;// Массив из ОбъектМетаданныхРеквизит + Для Каждого РеквизитТабличнойЧасти Из ОписаниеРеквизитовТабличнойЧасти Цикл Если СодержитСсылочныйТип(РеквизитТабличнойЧасти) Тогда Если РеквизитТабличнойЧасти.Имя = "ТочкаМаршрута" Тогда Продолжить; @@ -2312,7 +2323,7 @@ Для Каждого СтрокаРезультата Из Результат Цикл - ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей();// РегистрСведенийНаборЗаписей ТекущийНаборЗаписей.Отбор.Регистратор.Установить(СтрокаРезультата.РегистраторРеквизитСсылка); ТекущийНаборЗаписей.Прочитать(); @@ -2424,7 +2435,7 @@ Для Каждого СтрокаРезультата Из Результат Цикл - ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей();// РегистрСведенийНаборЗаписей ТекущийНаборЗаписей.Отбор.Регистратор.Установить(СтрокаРезультата.РегистраторРеквизитСсылка); ТекущийНаборЗаписей.Прочитать(); @@ -2480,7 +2491,7 @@ УсловиеПоИзмерениям = ""; ПоляУпорядочивания = "Период"; - Измерения = ОбъектМетаданных.Измерения; + Измерения = ОбъектМетаданных.Измерения;// Массив из ОбъектМетаданныхИзмерение Для Каждого Измерение Из Измерения Цикл УсловиеПоИзмерениям = УсловиеПоИзмерениям + ?(ЗначениеЗаполнено(УсловиеПоИзмерениям), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; @@ -2569,6 +2580,11 @@ КонецПроцедуры +// Параметры: +// ОбъектМетаданных - ОбъектМетаданныхРегистрСведений +// ПараметрыПроверки - см. КонтрольВеденияУчета.ОписаниеПроблемы +// ПроверенныеСсылки - Соответствие +// Процедура НайтиБитыеСсылкиВНезависимыхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки) МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); @@ -2579,7 +2595,8 @@ УсловиеПоИзмерениям = ""; ПоляУпорядочивания = ""; - Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл + ОписаниеИзмерений = ОбъектМетаданных.Измерения; + Для Каждого Измерение Из ОписаниеИзмерений Цикл УсловиеПоИзмерениям = УсловиеПоИзмерениям + ?(ЗначениеЗаполнено(УсловиеПоИзмерениям), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; КонецЦикла; @@ -2628,7 +2645,7 @@ КонецЕсли; ДополнительнаяИнформация = Новый Структура; - Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл + Для Каждого Измерение Из ОписаниеИзмерений Цикл ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; ДополнительнаяИнформация.Вставить(Измерение.Имя, ИзмерениеСсылка); КонецЦикла; @@ -2655,7 +2672,7 @@ Запрос.Текст = ТекстЗапросаСУсловием; КонецЕсли; - Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл + Для Каждого Измерение Из ОписаниеИзмерений Цикл Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]); КонецЦикла; @@ -2665,6 +2682,12 @@ КонецПроцедуры +// Параметры: +// ОбъектМетаданных - ОбъектМетаданныхРегистрБухгалтерии +// ПараметрыПроверки - см. КонтрольВеденияУчета.ОписаниеПроблемы +// ВидыСубконто - Массив +// ПроверенныеСсылки - Соответствие +// Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, ВидыСубконто, ПроверенныеСсылки) МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); @@ -2785,6 +2808,11 @@ КонецПроцедуры +// Параметры: +// ОбъектМетаданных - ОбъектМетаданныхРегистрРасчета +// ПараметрыПроверки - см. КонтрольВеденияУчета.ОписаниеПроблемы +// ПроверенныеСсылки - Соответствие +// Процедура НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки) МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); @@ -2998,6 +3026,11 @@ #Область ПроверкаЗаполненностиОбязательныхРеквизитов + +// Параметры: +// ОбъектМетаданных - Произвольный +// ПараметрыПроверки - см. КонтрольВеденияУчета.ОписаниеПроблемы +// Процедура НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки) МодульОценкаПроизводительности = Неопределено; @@ -3126,6 +3159,14 @@ КонецПроцедуры +// Параметры: +// ОбъектМетаданных - ОбъектМетаданныхРегистрБухгалтерии +// - Произвольный +// - ОбъектМетаданныхРегистрСведений +// - ОбъектМетаданныхРегистрНакопления +// - ОбъектМетаданныхРегистрРасчета +// ПараметрыПроверки - см. КонтрольВеденияУчета.ОписаниеПроблемы +// Процедура НайтиНезаполненныеОбязательныеРеквизитыВПодчиненныхПериодическихРегистрах(ОбъектМетаданных, ПараметрыПроверки) МодульОценкаПроизводительности = Неопределено; @@ -3249,6 +3290,15 @@ КонецПроцедуры + +// Параметры: +// ОбъектМетаданных - ОбъектМетаданныхРегистрБухгалтерии +// - Произвольный +// - ОбъектМетаданныхРегистрСведений +// - ОбъектМетаданныхРегистрНакопления +// - ОбъектМетаданныхРегистрРасчета +// ПараметрыПроверки - см. КонтрольВеденияУчета.ОписаниеПроблемы +// Процедура НайтиНезаполненныеОбязательныеРеквизитыВПодчиненныхНепериодическихРегистрах(ОбъектМетаданных, ПараметрыПроверки) МодульОценкаПроизводительности = Неопределено; @@ -3322,6 +3372,15 @@ КонецПроцедуры + +// Параметры: +// ОбъектМетаданных - ОбъектМетаданныхРегистрБухгалтерии +// - Произвольный +// - ОбъектМетаданныхРегистрСведений +// - ОбъектМетаданныхРегистрНакопления +// - ОбъектМетаданныхРегистрРасчета +// ПараметрыПроверки - см. КонтрольВеденияУчета.ОписаниеПроблемы +// Процедура НайтиНезаполненныеОбязательныеРеквизитыВНезависимыхНепериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки) МодульОценкаПроизводительности = Неопределено; @@ -3387,7 +3446,7 @@ Продолжить; КонецЕсли; - ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей();// РегистрСведенийНаборЗаписей ОтборТекущегоНабора = ТекущийНаборЗаписей.Отбор; ПредставлениеОтбораНабораЗаписей = ""; @@ -3399,7 +3458,8 @@ Продолжить; КонецЕсли; - ОтборТекущегоНабора[ИмяИзмерения].Установить(ЗначениеИзмерения); + ОтборПоИзмерению = ОтборТекущегоНабора[ИмяИзмерения];// ЭлементОтбора + ОтборПоИзмерению.Установить(ЗначениеИзмерения); ПредставлениеОтбораНабораЗаписей = ПредставлениеОтбораНабораЗаписей + ?(ЗначениеЗаполнено(ПредставлениеОтбораНабораЗаписей), Символы.ПС, "") + " • " + ИмяИзмерения + " = """ + СтрокаРезультата[ИмяИзмерения + "ИзмерениеПредставление"] + """"; @@ -3448,6 +3508,14 @@ КонецПроцедуры +// Параметры: +// ОбъектМетаданных - ОбъектМетаданныхРегистрБухгалтерии +// - Произвольный +// - ОбъектМетаданныхРегистрСведений +// - ОбъектМетаданныхРегистрНакопления +// - ОбъектМетаданныхРегистрРасчета +// ПараметрыПроверки - см. КонтрольВеденияУчета.ОписаниеПроблемы +// Процедура НайтиНезаполненныеОбязательныеРеквизитыВНезависимыхПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки) МодульОценкаПроизводительности = Неопределено; @@ -3518,7 +3586,8 @@ Продолжить; КонецЕсли; - ОтборТекущегоНабора[ИмяИзмерения].Установить(ЗначениеИзмерения); + ОтборПоИзмерению = ОтборТекущегоНабора[ИмяИзмерения];// ЭлементОтбора + ОтборПоИзмерению.Установить(ЗначениеИзмерения); ПредставлениеОтбораНабораЗаписей = ПредставлениеОтбораНабораЗаписей + Символы.ПС + " • " + ИмяИзмерения + " = """ + СтрокаРезультата[ИмяИзмерения + "ИзмерениеПредставление"] + """"; @@ -3658,6 +3727,11 @@ КонецФункции +// Параметры: +// СтандартныеРеквизиты - ОписанияСтандартныхРеквизитов +// Возвращаемое значение: +// Булево +// Функция ЕстьИерархия(СтандартныеРеквизиты) ЕстьИерархия = Ложь; @@ -3676,7 +3750,7 @@ // тот остается родителем. // // Параметры: -// Проверка - СправочникСсылка.ПравилаПроверкиУчета - Проверка, найденные проблемы которой +// Проверка - СправочникСсылка.ПравилаПроверкиУчета - проверка, найденные проблемы которой // исправляются данным методом. // Процедура ИсправитьПроблемуЦиклическихСсылок(Проверка) @@ -3744,6 +3818,21 @@ КоличествоДетей = НачальноеЗначение; + Выгрузка = ДочерниеЭлементыРодителя(СсылкаНаОбъект, ИсключениеВыборки); + КоличествоДетей = КоличествоДетей + Выгрузка.Количество(); + Для Каждого ЭлементПотомства Из Выгрузка Цикл + КоличествоДетей = КоличествоДочернихЭлементов(ЭлементПотомства.Ссылка, ИсключениеВыборки, КоличествоДетей); + КонецЦикла; + Возврат КоличествоДетей; + +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - ЛюбаяСсылка +// +Функция ДочерниеЭлементыРодителя(СсылкаНаОбъект, Знач ИсключениеВыборки) + Перем Результат; ТекстЗапроса = "ВЫБРАТЬ | ОбъектМетаданных.Ссылка КАК Ссылка @@ -3760,15 +3849,8 @@ Запрос.УстановитьПараметр("ИсключениеВыборки", ИсключениеВыборки); Результат = Запрос.Выполнить(); - Если Не Результат.Пустой() Тогда - Выгрузка = Результат.Выгрузить(); - КоличествоДетей = КоличествоДетей + Выгрузка.Количество(); - Для Каждого ЭлементПотомства Из Выгрузка Цикл - КоличествоДетей = КоличествоДочернихЭлементов(ЭлементПотомства.Ссылка, ИсключениеВыборки, КоличествоДетей); - КонецЦикла; - КонецЕсли; - Возврат КоличествоДетей; - + Выгрузка = Результат.Выгрузить(); + Возврат Выгрузка КонецФункции #КонецОбласти @@ -4112,13 +4194,14 @@ // Параметры: // Проверка - СправочникСсылка.ПравилаПроверкиУчета - проверка, параметры которой // необходимо подготовить. -// ПараметрыВыполненияПроверки - Структура, Массив - произвольные дополнительные параметры проверки, +// ПараметрыВыполненияПроверки - Структура +// - Массив - произвольные дополнительные параметры проверки, // которые уточняют, что и как именно проверять. // - Структура - один параметр проверки. Состав свойств см. КонтрольВеденияУчета.ПараметрыВыполненияПроверки. // - Массив - несколько параметров проверки (элементы массива типа Структура, как описано выше). // // Возвращаемое значение: -// см. параметр ПараметрыПроверки в КонтрольВеденияУчета.ОписаниеПроблемы. +// см. КонтрольВеденияУчета.ОписаниеПроблемы. // Функция ПодготовитьПараметрыПроверки(Знач Проверка, Знач ПараметрыВыполненияПроверки) @@ -4230,7 +4313,7 @@ // ПараметрыПроверки - см. параметр ПараметрыПроверки в КонтрольВеденияУчета.ОписаниеПроблемы. // // Возвращаемое значение: -// Булево - Признак того, достигнута ли последняя итерация. +// Булево - признак того, достигнута ли последняя итерация. // Функция ЭтоПоследняяИтерацияПроверки(ПараметрыПроверки) @@ -4252,7 +4335,7 @@ // Ограничение: не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// СсылкаНаОбъект - ЛюбаяСсылка - Ссылка на проблемный объект. +// СсылкаНаОбъект - ЛюбаяСсылка - ссылка на проблемный объект. // // Возвращаемое значение: // Строка - представление вида объектов метаданных. Например: "Справочник", "Документ". @@ -4358,27 +4441,27 @@ // ПолноеОписаниеПроблемы - Булево - влияет на состав свойств возвращаемого значения. // // Возвращаемое значение: -// Проблема - Структура - типы свойств проблемы: -// * ПроблемныйОбъект - ЛюбаяСсылка - Ссылка на объект "Источник" проблем. -// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - Ссылка на выполненную проверку. -// * ВидПроверки - СправочникСсылка.ВидыПроверок - Ссылка на вид проверки, к которому +// Проблема - Структура: +// * ПроблемныйОбъект - ЛюбаяСсылка - ссылка на объект "Источник" проблем. +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета - ссылка на выполненную проверку. +// * ВидПроверки - СправочникСсылка.ВидыПроверок - ссылка на вид проверки, к которому // относится выполненная проверка. -// * УточнениеПроблемы - Строка - Строка-уточнение найденной проблемы. -// * КлючУникальности - УникальныйИдентификатор - Ключ уникальности проблемы. +// * УточнениеПроблемы - Строка - строка-уточнение найденной проблемы. +// * КлючУникальности - УникальныйИдентификатор - ключ уникальности проблемы. // Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. -// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - Важность проблемы учета +// * ВажностьПроблемы - ПеречислениеСсылка.ВажностьПроблемыУчета - важность проблемы учета // "Информация", "Предупреждение", "Ошибка" и "ПолезныйСовет". // Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. -// * Ответственный - СправочникСсылка.Пользователи - Заполнен если есть возможность +// * Ответственный - СправочникСсылка.Пользователи - заполнен если есть возможность // идентифицировать ответственного в проблемном объекте. // Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. -// * ИгнорироватьПроблему - Булево - Флаг игнорирования проблемы. Если имеет значение "Истина", +// * ИгнорироватьПроблему - Булево - флаг игнорирования проблемы. Если имеет значение "Истина", // запись о проблеме игнорируется подсистемой. // Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. -// * ДополнительнаяИнформация - ХранилищеЗначений - Служебное свойство с дополнительными +// * ДополнительнаяИнформация - ХранилищеЗначений - служебное свойство с дополнительными // сведениями, связанными с выявленной проблемой. // Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. -// * Выявлено - Дата - Серверное время идентификации проблемы. +// * Выявлено - Дата - серверное время идентификации проблемы. // Возвращается, если параметр ПолноеОписаниеПроблемы = Истина. // Функция ОжидаемыеТипыСвойствОписанияПроблемы(Знач ПолноеОписаниеПроблемы = Истина) Экспорт @@ -4405,7 +4488,7 @@ КонецФункции // Возвращаемое значение: -// Массив из ОбъектМетаданныхСправочник - +// Массив из ОбъектМетаданныхСправочник // Функция СсылочныеВидыОбъектовМетаданных() diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl index 79eb0e48d..6a0d60f68 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl @@ -12,10 +12,10 @@ // См. "Расширение поля формы для поля табличного документа.Выбор" в синтакс-помощнике. // // Параметры: -// ФормаОтчета - ФормаКлиентскогоПриложения - Форма отчета. -// Элемент - ПолеФормы - Табличный документ. -// Область - ОбластьЯчеекТабличногоДокумента - Выбранное значение. -// СтандартнаяОбработка - Булево - Признак выполнения стандартной обработки события. +// ФормаОтчета - ФормаКлиентскогоПриложения - форма отчета. +// Элемент - ПолеФормы - табличный документ. +// Область - ОбластьЯчеекТабличногоДокумента - выбранное значение. +// СтандартнаяОбработка - Булево - признак выполнения стандартной обработки события. // Процедура ОбработкаВыбораТабличногоДокумента(ФормаОтчета, Элемент, Область, СтандартнаяОбработка) Экспорт @@ -43,8 +43,8 @@ // информационной базы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Управляемая форма проблемного объекта. -// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения +// Форма - ФормаКлиентскогоПриложения - управляемая форма проблемного объекта. +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения // стандартной (системной) обработки события. // // Пример: @@ -100,10 +100,10 @@ КонецПроцедуры // Параметры: -// ФормаОтчета - ФормаКлиентскогоПриложения - где: -// * ОтчетТабличныйДокумент - ТабличныйДокумент - -// Команда - КомандаФормы - -// Результат - Булево - +// ФормаОтчета - ФормаКлиентскогоПриложения: +// * ОтчетТабличныйДокумент - ТабличныйДокумент +// Команда - КомандаФормы +// Результат - Булево // Процедура ПриОбработкеКоманды(ФормаОтчета, Команда, Результат) Экспорт @@ -149,9 +149,9 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения - форма отчета РезультатыПроверкиУчета. // Расшифровка - Структура - дополнительные сведения для исправления проблемы: -// * Назначение - Строка - Строковый идентификатор назначения расшифровки. -// * ИдентификаторПроверки - Строка - Строковый индикатор проверки. -// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной клиентской процедуры-обработчика исправления +// * Назначение - Строка - строковый идентификатор назначения расшифровки. +// * ИдентификаторПроверки - Строка - строковый индикатор проверки. +// * ОбработчикПереходаКИсправлению - Строка - имя экспортной клиентской процедуры-обработчика исправления // проблемы или полное имя открываемой формы. // * ВидПроверки - СправочникСсылка.ВидыПроверок - вид проверки, // дополнительно уточняющий область исправления проблемы. @@ -179,12 +179,12 @@ // Открывает форму списка (в случае регистра - с проблемным набором записей). // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма отчета. -// Расшифровка - Структура - Структура, содержащая данные по исправлению проблемы -// расшифровки ячейки отчета по результатам проверок учета. -// * Назначение - Строка - Строковый идентификатор назначения расшифровки. -// * ПолноеИмяОбъекта - Строка - Полное имя объекта метаданных. -// * Отбор - Структура - Отбор в форме списка. +// Форма - ФормаКлиентскогоПриложения - форма отчета. +// Расшифровка - Структура - структура, содержащая данные по исправлению проблемы +// расшифровки ячейки отчета по результатам проверок учета: +// * Назначение - Строка - строковый идентификатор назначения расшифровки. +// * ПолноеИмяОбъекта - Строка - полное имя объекта метаданных. +// * Отбор - Структура - отбор в форме списка. // Процедура ОткрытьПроблемныйСписок(Форма, Расшифровка) @@ -222,18 +222,19 @@ // Добавляет отбор в коллекцию отборов компоновщика или группы отборов // // Параметры: -// ЭлементСтруктуры - КомпоновщикНастроекКомпоновкиДанных, НастройкиКомпоновкиДанных - элемент структуры КД -// ПараметрыОтбора - Структура - Содержит параметры отбора компоновки данных. -// * Поле - Строка - Имя поля, по которому добавляется отбор. -// * Значение - Произвольный - Значение отбора КД (по умолчанию: Неопределено). -// * ВидСравнения - ВидСравненияКомпоновкиДанных - Вид сравнений КД (по умолчанию: Неопределено). -// * Использование - Булево - Признак использования отбора (по умолчанию: Истина). -// ДополнительныеПараметры - Структура - Содержит дополнительные параметры, перечисленные ниже: +// ЭлементСтруктуры - КомпоновщикНастроекКомпоновкиДанных +// - НастройкиКомпоновкиДанных - элемент структуры КД +// ПараметрыОтбора - Структура - содержит параметры отбора компоновки данных: +// * Поле - Строка - имя поля, по которому добавляется отбор. +// * Значение - Произвольный - значение отбора КД (по умолчанию: Неопределено). +// * ВидСравнения - ВидСравненияКомпоновкиДанных - вид сравнений КД (по умолчанию: Неопределено). +// * Использование - Булево - признак использования отбора (по умолчанию: Истина). +// ДополнительныеПараметры - Структура - содержит дополнительные параметры, перечисленные ниже: // * ВПользовательскиеНастройки - Булево - признак добавления в пользовательские настройки КД (по умолчанию: Ложь). // * ЗаменятьСуществующий - Булево - признак полной замены существующего отбора по полю (по умолчанию: Истина). // // Возвращаемое значение: -// ЭлементОтбораКомпоновкиДанных - Добавленный отбор. +// ЭлементОтбораКомпоновкиДанных - добавленный отбор. // Функция ДобавитьОтбор(ЭлементСтруктуры, ПараметрыОтбора, ДополнительныеПараметры = Неопределено) diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl index 29636e4f9..ca79ddca8 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl @@ -11,7 +11,7 @@ // Формирует структуру таблиц проверок и групп проверок для дальнейшего использования. // // Возвращаемое значение: -// Структура - со значениями: +// Структура: // * ГруппыПроверок - см. КонтрольВеденияУчетаСлужебныйПовтИсп.НоваяТаблицаГруппПроверок // * Проверки - см. КонтрольВеденияУчетаСлужебныйПовтИсп.НоваяТаблицаПроверок // @@ -36,7 +36,7 @@ // Возвращает массив типов, включающий в себя все возможные объектные типы конфигурации. // // Возвращаемое значение: -// Массив - Массив объектных типов. +// Массив - массив объектных типов. // Функция ОписаниеТипаВсеОбъекты() Экспорт @@ -209,12 +209,12 @@ // Создает таблицу групп проверок // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: -// * Наименование - Строка - Наименование группы проверок. -// * ИдентификаторГруппы - Строка - Строковый идентификатор группы проверок, например: +// ТаблицаЗначений: +// * Наименование - Строка - наименование группы проверок. +// * ИдентификаторГруппы - Строка - строковый идентификатор группы проверок, например: // "СистемныеПроверки", "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. // Обязателен для заполнения. -// * Идентификатор - Строка - Строковый идентификатор группы проверок. Обязателен для заполнения. +// * Идентификатор - Строка - строковый идентификатор группы проверок. Обязателен для заполнения. // Формат идентификатора должен быть следующим: // <Название программного продукта>.<Идентификатор проверки>. Например: // СтандартныеПодсистемы.СистемныеПроверки. @@ -239,30 +239,30 @@ // Создает таблицу проверок. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: -// * ИдентификаторГруппы - Строка - Строковый идентификатор группы проверок, например: +// ТаблицаЗначений: +// * ИдентификаторГруппы - Строка - строковый идентификатор группы проверок, например: // "СистемныеПроверки", "ЗакрытиеМесяца", "ПроверкиНДС" и т.п. // Обязателен для заполнения. -// * Наименование - Строка - Наименование проверки, выводимое пользователю. -// * Причины - Строка - Описание возможных причин, которые приводят к возникновению +// * Наименование - Строка - наименование проверки, выводимое пользователю. +// * Причины - Строка - описание возможных причин, которые приводят к возникновению // проблемы. -// * Рекомендация - Строка - Рекомендация по решению возникшей проблемы. -// * Идентификатор - Строка - Строковый идентификатор элемента. Обязателен для заполнения. +// * Рекомендация - Строка - рекомендация по решению возникшей проблемы. +// * Идентификатор - Строка - строковый идентификатор элемента. Обязателен для заполнения. // Формат идентификатора должен быть следующим: // <Название программного продукта>.<Идентификатор проверки>. Например: // СтандартныеПодсистемы.СистемныеПроверки. -// * ДатаНачалаПроверки - Дата - Пороговая дата, обозначающая границу проверяемых +// * ДатаНачалаПроверки - Дата - пороговая дата, обозначающая границу проверяемых // объектов (только для объектов с датой). Объекты, дата которых меньше // указанной, не следует проверять. По умолчанию не заполнено (т.е. // проверять все). -// * ЛимитПроблем - Число - Количество проверяемых объектов. По умолчанию 1000. +// * ЛимитПроблем - Число - количество проверяемых объектов. По умолчанию 1000. // Если указан 0, то следует проверять все объекты. -// * ОбработчикПроверки - Строка - Имя экспортной процедуры-обработчика серверного общего +// * ОбработчикПроверки - Строка - имя экспортной процедуры-обработчика серверного общего // модуля в виде ИмяМодуля.ИмяПроцедуры. -// * ОбработчикПереходаКИсправлению - Строка - Имя экспортной процедуры-обработчика клиентского общего +// * ОбработчикПереходаКИсправлению - Строка - имя экспортной процедуры-обработчика клиентского общего // модуля для перехода к исправлению проблемы в виде ИмяМодуля.ИмяПроцедуры. // * БезОбработчикаПроверки - Булево - признак служебной проверки, которая не имеет процедуры-обработчика. -// * ЗапрещеноИзменениеВажности - Булево - Если Истина, то администратор не сможет перенастраивать +// * ЗапрещеноИзменениеВажности - Булево - если Истина, то администратор не сможет перенастраивать // важность данной проверки. // * КонтекстПроверокВеденияУчета - ОпределяемыйТип.КонтекстПроверокВеденияУчета - значение, дополнительно // уточняющее принадлежность проверки ведения учета к определенной группе @@ -270,7 +270,7 @@ // * УточнениеКонтекстаПроверокВеденияУчета - ОпределяемыйТип.УточнениеКонтекстаПроверокВеденияУчета - второе значение, // дополнительно уточняющее принадлежность проверки ведения учета // к определенной группе или категории. -// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация о проверке для программного +// * ДополнительныеПараметры - ХранилищеЗначений - дополнительная информация о проверке для программного // использования. // * Комментарий - Строка - комментарий к проверке. // * Отключена - Булево - если Истина, то проверка не будет выполняться в фоне по расписанию. diff --git a/SSL/src/CommonModules/МультиязычностьКлиент/Module.bsl b/SSL/src/CommonModules/МультиязычностьКлиент/Module.bsl index 0b6a9b196..02521dc1d 100644 --- a/SSL/src/CommonModules/МультиязычностьКлиент/Module.bsl +++ b/SSL/src/CommonModules/МультиязычностьКлиент/Module.bsl @@ -13,9 +13,9 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения - форма содержащая мультиязычные реквизиты. // Объект - ДанныеФормыСтруктура - объект на форме: -// * Ссылка - ЛюбаяСсылка - -// Элемент - ПолеФормы - Элемент формы, для которого будет открыта форма ввода на разных языках. -// СтандартнаяОбработка - Булево - Признак выполнения стандартной (системной) обработки события. +// * Ссылка - ЛюбаяСсылка +// Элемент - ПолеФормы - элемент формы, для которого будет открыта форма ввода на разных языках. +// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. // Процедура ПриОткрытии(Форма, Объект, Элемент, СтандартнаяОбработка) Экспорт @@ -43,6 +43,7 @@ КонецЕсли; ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Форма", Форма); ДополнительныеПараметры.Вставить("Объект", Объект); ДополнительныеПараметры.Вставить("ИмяРеквизита", ИмяРеквизита); @@ -94,6 +95,8 @@ Объект[ДополнительныеПараметры.ИмяРеквизита] = Результат.СтрокаНаТекущемЯзыке; КонецЕсли; + Оповестить("ПослеВводаСтрокНаРазныхЯзыках", ДополнительныеПараметры.Форма); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl b/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl index 6f11ba73b..46fb5cf5f 100644 --- a/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl @@ -12,10 +12,10 @@ // используемого при работе пользователя. // // Параметры: -// Данные - Структура - Содержит значения полей, из которых формируется представление. -// Представление - Строка - В данный параметр нужно поместить сформированное представление. -// СтандартнаяОбработка - Булево - В данный параметр передается признак формирования стандартного представления. -// ИмяРеквизита - Строка - Указывает, в каком реквизите хранится представление на основном языке. +// Данные - Структура - содержит значения полей, из которых формируется представление. +// Представление - Строка - в данный параметр нужно поместить сформированное представление. +// СтандартнаяОбработка - Булево - в данный параметр передается признак формирования стандартного представления. +// ИмяРеквизита - Строка - указывает, в каком реквизите хранится представление на основном языке. // Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка, ИмяРеквизита = "Наименование") Экспорт @@ -67,12 +67,12 @@ // Состав полей формируется с учетом текущего языка пользователя. // // Параметры: -// Поля - Массив - Массив, содержащий имена полей, которые нужны для формирования представления объекта +// Поля - Массив - массив, содержащий имена полей, которые нужны для формирования представления объекта // или ссылки. -// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной (системной) обработки события. +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения стандартной (системной) обработки события. // Если в теле процедуры-обработчика установить данному параметру значение Ложь, // стандартная обработка события производиться не будет. -// ИмяРеквизита - Строка - Указывает, в каком реквизите хранится представление на основном языке. +// ИмяРеквизита - Строка - указывает, в каком реквизите хранится представление на основном языке. // Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка, ИмяРеквизита = "Наименование") Экспорт diff --git a/SSL/src/CommonModules/МультиязычностьПереопределяемый/Module.bsl b/SSL/src/CommonModules/МультиязычностьПереопределяемый/Module.bsl index f373450fb..f35573e3a 100644 --- a/SSL/src/CommonModules/МультиязычностьПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/МультиязычностьПереопределяемый/Module.bsl @@ -12,9 +12,9 @@ // // Параметры: // Настройки - Структура - коллекция настроек подсистемы. Реквизиты: -// * КодДополнительногоЯзыка1 - Строка - Код первого дополнительного языка по умолчанию. -// * КодДополнительногоЯзыка2 - Строка - Код второго дополнительного языка по умолчанию. -// * МультиязычныеДанные - Булево - Если Истина, то у реквизитов поддерживающих возможность ввода данных на нескольких +// * КодДополнительногоЯзыка1 - Строка - код первого дополнительного языка по умолчанию. +// * КодДополнительногоЯзыка2 - Строка - код второго дополнительного языка по умолчанию. +// * МультиязычныеДанные - Булево - если Истина, то у реквизитов поддерживающих возможность ввода данных на нескольких // языках будет автоматически добавлен интерфейс ввода мультиязычных данных. // // Пример: diff --git a/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl b/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl index fc0b629ac..cfd969e4d 100644 --- a/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl +++ b/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl @@ -30,15 +30,17 @@ КонецПроцедуры -// Вызывается из обработчика ПриСозданииНаСервере формы объекта для добавления кнопки открытия у поле мультиязычных реквизитов, -// нажатие на которую открывает форму ввода значений реквизита на используемых языках конфигурации. +// Вызывается из обработчика ПриСозданииНаСервере формы объекта. Добавляет кнопку открытия в поля ввода +// мультиязычных реквизитов на этой форме. Нажатие кнопки открывает окно ввода значения реквизита на всех +// имеющихся в конфигурации языках. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - форма содержащая мультиязычные реквизиты. -// Объект - ДанныеФормыСтруктура - Объект-владелец мультиязычных реквизитов: -// * Ссылка - ЛюбаяСсылка - +// Форма - ФормаКлиентскогоПриложения - форма объекта. +// Объект - ДанныеФормыСтруктура: +// * Ссылка - ЛюбаяСсылка +// ИмяСписка - Строка - имя динамического списка на форме. По умолчанию, "Список". // -Процедура ПриСозданииНаСервере(Форма, Объект = Неопределено) Экспорт +Процедура ПриСозданииНаСервере(Форма, Объект = Неопределено, ИмяСписка = "Список") Экспорт Если Объект <> Неопределено И МультиязычностьПовтИсп.КонфигурацияИспользуетТолькоОдинЯзык(Объект.Свойство("Представления")) Тогда Возврат; @@ -48,7 +50,7 @@ Если Объект = Неопределено Тогда Если ТипФормы = "ОсновнаяФормаСписка" Или ТипФормы = "ОсновнаяФормаВыбора" Тогда - ИзменениеТекстаЗапросаСпискаДляТекущегоЯзыка(Форма); + ИзменениеТекстаЗапросаСпискаДляТекущегоЯзыка(Форма, ИмяСписка); КонецЕсли; Возврат; КонецЕсли; @@ -87,8 +89,8 @@ // реквизитов формы на текущем языке пользователя. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма объекта. -// ТекущийОбъект - Произвольный - Объект, который был получен в обработчике формы ПриЧтенииНаСервере. +// Форма - ФормаКлиентскогоПриложения - форма объекта. +// ТекущийОбъект - Произвольный - объект, который был получен в обработчике формы ПриЧтенииНаСервере. // Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт @@ -105,14 +107,14 @@ // для записи значений мультиязычных реквизитов в соответствии с текущим языком пользователя. // // Параметры: -// ТекущийОбъект - БизнесПроцессОбъект - -// - ДокументОбъект - -// - ЗадачаОбъект - -// - ПланВидовРасчетаОбъект - -// - ПланВидовХарактеристикОбъект - -// - ПланОбменаОбъект - -// - ПланСчетовОбъект - -// - СправочникОбъект - Записываемый объект. +// ТекущийОбъект - БизнесПроцессОбъект +// - ДокументОбъект +// - ЗадачаОбъект +// - ПланВидовРасчетаОбъект +// - ПланВидовХарактеристикОбъект +// - ПланОбменаОбъект +// - ПланСчетовОбъект +// - СправочникОбъект - записываемый объект. // Процедура ПередЗаписьюНаСервере(ТекущийОбъект) Экспорт @@ -182,13 +184,13 @@ // реквизитов объекта на текущем языке пользователя. // // Параметры: -// Объект - БизнесПроцессОбъект - -// - ДокументОбъект - -// - ЗадачаОбъект - -// - ПланВидовРасчетаОбъект - -// - ПланВидовХарактеристикОбъект - -// - ПланОбменаОбъект - -// - ПланСчетовОбъект - +// Объект - БизнесПроцессОбъект +// - ДокументОбъект +// - ЗадачаОбъект +// - ПланВидовРасчетаОбъект +// - ПланВидовХарактеристикОбъект +// - ПланОбменаОбъект +// - ПланСчетовОбъект // - СправочникОбъект - объект данных. // Процедура ПриЧтенииПредставленийНаСервере(Объект) Экспорт @@ -264,14 +266,14 @@ // ДанныеВыбора - СписокЗначений - данные для выбора. // Параметры - Структура - содержит параметры выбора. // СтандартнаяОбработка - Булево - данный параметр передается признак выполнения стандартной (системной) обработки события. -// ОбъектМетаданных - ОбъектМетаданныхБизнесПроцесс - -// - ОбъектМетаданныхДокумент - -// - ОбъектМетаданныхЗадача - -// - ОбъектМетаданныхПланВидовРасчета - -// - ОбъектМетаданныхПланВидовХарактеристик - -// - ОбъектМетаданныхПланОбмена - -// - ОбъектМетаданныхПланСчетов - -// - ОбъектМетаданныхСправочник - +// ОбъектМетаданных - ОбъектМетаданныхБизнесПроцесс +// - ОбъектМетаданныхДокумент +// - ОбъектМетаданныхЗадача +// - ОбъектМетаданныхПланВидовРасчета +// - ОбъектМетаданныхПланВидовХарактеристик +// - ОбъектМетаданныхПланОбмена +// - ОбъектМетаданныхПланСчетов +// - ОбъектМетаданныхСправочник // - ОбъектМетаданныхТаблица - объект метаданных, для которого формируется список выбора. // Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Знач Параметры, СтандартнаяОбработка, ОбъектМетаданных) Экспорт @@ -327,11 +329,113 @@ КонецПроцедуры +// Регистрация предопределенных элементов объекта для отложенного обработчика. +// Процедура используется только для отложенных обработчиков обновления. +// +// Параметры: +// Параметры -см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке +// ОбъектМетаданных - ОбъектМетаданных - если указан, то будет зарегистрированы предопределенные +// только этого объекта. +// Иначе будут зарегистрированы предопределенные элементы у объектов, описанных в +// ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек +// +Процедура ЗарегистрироватьПредопределенныеЭлементыДляОбновления(Параметры, ОбъектМетаданных = Неопределено) Экспорт + + Если ОбъектМетаданных <> Неопределено Тогда + ОбъектыСПредопределеннымиЭлементами = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОбъектМетаданных); + Иначе + ОбъектыСПредопределеннымиЭлементами = ОбъектыСНачальнымЗаполнением(); + КонецЕсли; + + ОбъектыКОбработке = Новый Массив; + + Язык1 = КодПервогоДополнительногоЯзыкаИнформационнойБазы(); + Язык2 = КодВторогоДополнительногоЯзыкаИнформационнойБазы(); + ОсновнойЯзык = ОбщегоНазначения.КодОсновногоЯзыка(); + + ШаблонаЗапроса = "ВЫБРАТЬ + | Таблица.Ссылка КАК Ссылка, + | Таблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | %1 + |ИЗ + | %2 КАК Таблица + |ГДЕ + | Таблица.Предопределенный = ИСТИНА"; + + Для каждого ОбъектМетаданныхСЭлементами Из ОбъектыСПредопределеннымиЭлементами Цикл + + ЛокализуемыеРеквизитыОбъекта = НаименованияЛокализуемыхРеквизитыОбъекта(ОбъектМетаданныхСЭлементами); + Если ЛокализуемыеРеквизитыОбъекта.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ИмяРеквизитОбъекта = Новый Массив; + Для каждого РеквизитОбъекта Из ЛокализуемыеРеквизитыОбъекта Цикл + + ИмяРеквизита = "Таблица." + РеквизитОбъекта.Ключ; + ИмяРеквизитОбъекта.Добавить(ИмяРеквизита); + + Если ЗначениеЗаполнено(Язык1) Тогда + ИмяРеквизитОбъекта.Добавить(ИмяРеквизита + "Язык1"); + КонецЕсли; + Если ЗначениеЗаполнено(Язык2) Тогда + ИмяРеквизитОбъекта.Добавить(ИмяРеквизита + "Язык2"); + КонецЕсли; + + КонецЦикла; + + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонаЗапроса, СтрСоединить(ИмяРеквизитОбъекта, ", " + Символы.ПС), ОбъектМетаданныхСЭлементами.ПолноеИмя()); + Запрос = Новый Запрос(ТекстЗапроса); + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Продолжить; + КонецЕсли; + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданныхСЭлементами.ПолноеИмя()); + ПредопределенныеДанные = ПредопределенныеДанныеОбъекта(ОбъектМетаданныхСЭлементами, МенеджерОбъекта, ЛокализуемыеРеквизитыОбъекта); + НастройкиПредопределенныхЭлементов = НастройкиПредопределенныхЭлементов(МенеджерОбъекта, ПредопределенныеДанные); + + ДанныеЗапроса = РезультатЗапроса.Выбрать(); + Пока ДанныеЗапроса.Следующий() Цикл + Элемент = НастройкиПредопределенныхЭлементов.ДополнительныеПараметры.ПредопределенныеДанные.Найти(ДанныеЗапроса.ИмяПредопределенныхДанных, "ИмяПредопределенныхДанных"); + Если Элемент <> Неопределено Тогда + Для каждого ОписаниеРеквизита Из ЛокализуемыеРеквизитыОбъекта Цикл + ИмяРеквизита = ОписаниеРеквизита.Ключ; + + Если СтрСравнить(Элемент[ИмяЛокализуемогоРеквизита(ИмяРеквизита, ОсновнойЯзык)], ДанныеЗапроса[ИмяРеквизита]) <> 0 Тогда + ОбъектыКОбработке.Добавить(ДанныеЗапроса.Ссылка); + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(Язык1) + И СтрСравнить(Элемент[ИмяЛокализуемогоРеквизита(ИмяРеквизита, Язык1)], ДанныеЗапроса[ИмяРеквизита + "Язык1"]) <> 0 Тогда + ОбъектыКОбработке.Добавить(ДанныеЗапроса.Ссылка); + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(Язык2) + И СтрСравнить(Элемент[ИмяЛокализуемогоРеквизита(ИмяРеквизита, Язык2)], ДанныеЗапроса[ИмяРеквизита + "Язык2"]) <> 0 Тогда + ОбъектыКОбработке.Добавить(ДанныеЗапроса.Ссылка); + КонецЕсли; + + КонецЦикла; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + Если ОбъектыКОбработке.Количество() > 0 Тогда + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ОбъектыКОбработке); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс -Процедура ИзменениеТекстаЗапросаСпискаДляТекущегоЯзыка(ЭтотОбъект, ИмяСписка = "Список") Экспорт +Процедура ИзменениеТекстаЗапросаСпискаДляТекущегоЯзыка(Форма, ИмяСписка = "Список") Экспорт СуффиксЯзыка = СуффиксТекущегоЯзыка(); @@ -339,12 +443,12 @@ Возврат; КонецЕсли; - Список = ЭтотОбъект[ИмяСписка]; + Список = Форма[ИмяСписка]; Если ПустаяСтрока(Список.ТекстЗапроса) Тогда Возврат; КонецЕсли; - НаборЧастейПутиОбъектаМетаданных = СтрРазделить(ЭтотОбъект.ИмяФормы, "."); + НаборЧастейПутиОбъектаМетаданных = СтрРазделить(Форма.ИмяФормы, "."); ИмяОбъектаМетаданных = НаборЧастейПутиОбъектаМетаданных[0] + "." + НаборЧастейПутиОбъектаМетаданных[1]; ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных); @@ -448,100 +552,6 @@ //////////////////////////////////////////////////////////////////////////////// // Начальное заполнение элементов данными. -// Регистрация для отложенного обработчика. -// -Процедура ЗарегистрироватьПредопределенныеЭлементыДляОбновления(Параметры, ОбъектМетаданных = Неопределено) Экспорт - - Если ОбъектМетаданных <> Неопределено Тогда - ОбъектыСПредопределеннымиЭлементами = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОбъектМетаданных); - Иначе - ОбъектыСПредопределеннымиЭлементами = ОбъектыСНачальнымЗаполнением(); - КонецЕсли; - - ОбъектыКОбработке = Новый Массив; - - Язык1 = КодПервогоДополнительногоЯзыкаИнформационнойБазы(); - Язык2 = КодВторогоДополнительногоЯзыкаИнформационнойБазы(); - ОсновнойЯзык = ОбщегоНазначения.КодОсновногоЯзыка(); - - ШаблонаЗапроса = "ВЫБРАТЬ - | Таблица.Ссылка КАК Ссылка, - | Таблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, - | %1 - |ИЗ - | %2 КАК Таблица - |ГДЕ - | Таблица.Предопределенный = ИСТИНА"; - - Для каждого ОбъектМетаданныхСЭлементами Из ОбъектыСПредопределеннымиЭлементами Цикл - - ЛокализуемыеРеквизитыОбъекта = НаименованияЛокализуемыхРеквизитыОбъекта(ОбъектМетаданныхСЭлементами); - Если ЛокализуемыеРеквизитыОбъекта.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - ИмяРеквизитОбъекта = Новый Массив; - Для каждого РеквизитОбъекта Из ЛокализуемыеРеквизитыОбъекта Цикл - - ИмяРеквизита = "Таблица." + РеквизитОбъекта.Ключ; - ИмяРеквизитОбъекта.Добавить(ИмяРеквизита); - - Если ЗначениеЗаполнено(Язык1) Тогда - ИмяРеквизитОбъекта.Добавить(ИмяРеквизита + "Язык1"); - КонецЕсли; - Если ЗначениеЗаполнено(Язык2) Тогда - ИмяРеквизитОбъекта.Добавить(ИмяРеквизита + "Язык2"); - КонецЕсли; - - КонецЦикла; - - ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонаЗапроса, СтрСоединить(ИмяРеквизитОбъекта, ", " + Символы.ПС), ОбъектМетаданныхСЭлементами.ПолноеИмя()); - Запрос = Новый Запрос(ТекстЗапроса); - - РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Пустой() Тогда - Продолжить; - КонецЕсли; - - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданныхСЭлементами.ПолноеИмя()); - ПредопределенныеДанные = ПредопределенныеДанныеОбъекта(ОбъектМетаданныхСЭлементами, МенеджерОбъекта, ЛокализуемыеРеквизитыОбъекта); - НастройкиПредопределенныхЭлементов = НастройкиПредопределенныхЭлементов(МенеджерОбъекта, ПредопределенныеДанные); - - ДанныеЗапроса = РезультатЗапроса.Выбрать(); - Пока ДанныеЗапроса.Следующий() Цикл - Элемент = ПредопределенныеДанные.Найти(ДанныеЗапроса.ИмяПредопределенныхДанных, "ИмяПредопределенныхДанных"); - Если Элемент <> Неопределено Тогда - Для каждого ОписаниеРеквизита Из ЛокализуемыеРеквизитыОбъекта Цикл - ИмяРеквизита = ОписаниеРеквизита.Ключ; - - Если СтрСравнить(Элемент[ИмяЛокализуемогоРеквизита(ИмяРеквизита, ОсновнойЯзык)], ДанныеЗапроса[ИмяРеквизита]) <> 0 Тогда - ОбъектыКОбработке.Добавить(ДанныеЗапроса.Ссылка); - Продолжить; - КонецЕсли; - - Если ЗначениеЗаполнено(Язык1) - И СтрСравнить(Элемент[ИмяЛокализуемогоРеквизита(ИмяРеквизита, Язык1)], ДанныеЗапроса[ИмяРеквизита + "Язык1"]) <> 0 Тогда - ОбъектыКОбработке.Добавить(ДанныеЗапроса.Ссылка); - Продолжить; - КонецЕсли; - - Если ЗначениеЗаполнено(Язык2) - И СтрСравнить(Элемент[ИмяЛокализуемогоРеквизита(ИмяРеквизита, Язык2)], ДанныеЗапроса[ИмяРеквизита + "Язык2"]) <> 0 Тогда - ОбъектыКОбработке.Добавить(ДанныеЗапроса.Ссылка); - КонецЕсли; - - КонецЦикла; - КонецЕсли; - КонецЦикла; - - КонецЦикла; - - Если ОбъектыКОбработке.Количество() > 0 Тогда - ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ОбъектыКОбработке); - КонецЕсли; - -КонецПроцедуры - Процедура ОбновитьПредставленияПредопределенныхЭлементов(Параметры, ОбъектМетаданных = Неопределено) Экспорт ОбъектыДляОбработкиОтсутствуют = Истина; @@ -609,7 +619,7 @@ Объект = СсылкаНаОбъект.Ссылка.ПолучитьОбъект(); Если Объект = Неопределено Тогда // объект может быть уже удален в других сеансах - ЗафиксироватьТранзакцию(); + ОтменитьТранзакцию(); Возврат; КонецЕсли; ЗаблокироватьДанныеДляРедактирования(СсылкаНаОбъект.Ссылка); @@ -1089,7 +1099,8 @@ КонецФункции // Параметры: -// Реквизит - ОбъектМетаданныхРеквизит, ОписаниеСтандартногоРеквизита - +// Реквизит - ОбъектМетаданныхРеквизит +// - ОписаниеСтандартногоРеквизита // Функция ИмяБезСуффиксаЯзык(Знач Реквизит) @@ -1098,7 +1109,8 @@ КонецФункции // Параметры: -// Реквизит - ОбъектМетаданныхРеквизит, ОписаниеСтандартногоРеквизита - +// Реквизит - ОбъектМетаданныхРеквизит +// - ОписаниеСтандартногоРеквизита // Функция ЭтоЛокализуемыйРеквизит(Реквизит) Возврат СтрЗаканчиваетсяНа(Реквизит.Имя, "Язык1") Или СтрЗаканчиваетсяНа(Реквизит.Имя, "Язык2"); @@ -1119,7 +1131,8 @@ КонецФункции // Возвращаемое значение: -// Массив из ОбъектМетаданных - +// Массив из ОбъектМетаданных +// Функция ОбъектыСНачальнымЗаполнением() НастройкиПодсистемы = ОбновлениеИнформационнойБазыСлужебный.НастройкиПодсистемы(); diff --git a/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl index 836a62a0e..d5ac919db 100644 --- a/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl @@ -27,7 +27,8 @@ // Возвращает список напоминаний текущего пользователя. // // Параметры: -// Предмет - Ссылка, Массив - предмет или предметы напоминания. +// Предмет - Ссылка +// - Массив - предмет или предметы напоминания. // Идентификатор - Строка - уточняет предмет напоминания, например, "ДеньРождения". // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl index ecc87d701..e96757dca 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl @@ -42,6 +42,7 @@ // Интервал - Число - время в секундах, за которое необходимо напомнить относительно даты в реквизите предмета; // Предмет - ЛюбаяСсылка - предмет напоминания; // ИмяРеквизита - Строка - имя реквизита предмета, относительно которого устанавливается срок напоминания. +// Процедура НапомнитьДоВремениПредмета(Текст, Интервал, Предмет, ИмяРеквизита) Экспорт Напоминание = НапоминанияПользователяВызовСервера.ПодключитьНапоминаниеДоВремениПредмета( diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl index 1405af5fd..25de8c7de 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl @@ -41,6 +41,7 @@ // ДанныеДляЗаполнения - Структура - значения для заполнения параметров напоминания. // ВсеРеквизиты - Булево - если истина, то возвращает также реквизиты, связанные с настройкой // времени напоминания. +// Функция ОписаниеНапоминания(ДанныеДляЗаполнения = Неопределено, ВсеРеквизиты = Ложь) Экспорт Результат = Новый Структура("Пользователь,ВремяСобытия,Источник,СрокНапоминания,Описание,Идентификатор"); Если ВсеРеквизиты Тогда diff --git a/SSL/src/CommonModules/НапоминанияПользователяПереопределяемый/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяПереопределяемый/Module.bsl index 779c9d530..51602978d 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяПереопределяемый/Module.bsl @@ -11,11 +11,12 @@ // Переопределяет настройки подсистемы. // // Параметры: -// Настройки - Структура - +// Настройки - Структура: // * Расписания - Соответствие: // ** Ключ - Строка - представление расписания; // ** Значение - РасписаниеРегламентногоЗадания - вариант расписания. // * СтандартныеИнтервалы - Массив - содержит строковые представления интервалов времени. +// Процедура ПриОпределенииНастроек(Настройки) Экспорт КонецПроцедуры diff --git a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl index cc3919650..443587e5a 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl @@ -130,6 +130,7 @@ // // Возвращаемое значение: // Булево - Истина, если право есть. +// Функция ЕстьПравоИспользованияНапоминаний() Возврат ПравоДоступа("Изменение", Метаданные.РегистрыСведений.НапоминанияПользователя); КонецФункции @@ -511,6 +512,7 @@ // Проверяет изменения реквизитов предметов, на которые есть пользовательская подписка, // изменяет срок напоминания в случае необходимости. +// Процедура ОбновитьНапоминанияПоПредметам(Предметы) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -537,20 +539,20 @@ КонецПроцедуры // Параметры: -// Предметы - Массив из ЛюбаяСсылка - +// Предметы - Массив из ЛюбаяСсылка // // Возвращаемое значение: -// ТаблицаЗначений - список напоминаний: -// * Пользователь - СправочникСсылка.Пользователи - -// * ВремяСобытия - Дата - -// * Источник - ОпределяемыйТип.ПредметНапоминания - -// * СрокНапоминания - Дата - -// * Описание - Строка - -// * СпособУстановкиВремениНапоминания - ПеречислениеСсылка.СпособыУстановкиВремениНапоминания - -// * ИнтервалВремениНапоминания - Число - -// * ИмяРеквизитаИсточника - Строка - -// * Расписание - ХранилищеЗначения - -// * ПовторятьЕжегодно - Булево - +// ТаблицаЗначений: +// * Пользователь - СправочникСсылка.Пользователи +// * ВремяСобытия - Дата +// * Источник - ОпределяемыйТип.ПредметНапоминания +// * СрокНапоминания - Дата +// * Описание - Строка +// * СпособУстановкиВремениНапоминания - ПеречислениеСсылка.СпособыУстановкиВремениНапоминания +// * ИнтервалВремениНапоминания - Число +// * ИмяРеквизитаИсточника - Строка +// * Расписание - ХранилищеЗначения +// * ПовторятьЕжегодно - Булево // Функция НапоминанияПоПредметам(Знач Предметы) @@ -857,31 +859,39 @@ Или ГрафикСобытияНаГод.Количество() = 1 И ТекущаяДатаСеанса() > ДобавитьМесяц(Напоминание.ВремяСобытия, 1) // - напоминание ежемесячное, но уже прошла неделя со времени события. Или ГрафикСобытияНаГод.Количество() = 12 И ТекущаяДатаСеанса() > Напоминание.ВремяСобытия + 60*60*24*7 Тогда - Если ПодошедшееВремяСобытия.Количество() > 0 Тогда - ОтключитьНапоминание(Напоминание, Ложь); - - ПараметрыНапоминания = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Напоминание); - ПараметрыНапоминания.Расписание = Напоминание.Расписание.Получить(); - Напоминание = СоздатьНапоминание(ПараметрыНапоминания); - Напоминание.ВремяСобытия = ПодошедшееВремяСобытия[ПодошедшееВремяСобытия.ВГраница()]; - Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания; - - ПодключитьНапоминание(Напоминание); - КонецЕсли; - ОтключитьНапоминание(Напоминание, Истина); + НачатьТранзакцию(); + Попытка + Если ПодошедшееВремяСобытия.Количество() > 0 Тогда + ОтключитьНапоминание(Напоминание, Ложь); + + ПараметрыНапоминания = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Напоминание); + ПараметрыНапоминания.Расписание = Напоминание.Расписание.Получить(); + Напоминание = СоздатьНапоминание(ПараметрыНапоминания); + Напоминание.ВремяСобытия = ПодошедшееВремяСобытия[ПодошедшееВремяСобытия.ВГраница()]; + Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания; + + ПодключитьНапоминание(Напоминание); + КонецЕсли; + ОтключитьНапоминание(Напоминание, Истина); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Напоминания пользователя'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, Метаданные.РегистрыСведений.НапоминанияПользователя, , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; КонецЕсли; КонецЦикла; КонецПроцедуры // Возвращаемое значение: -// Массив из Структура - : -// * Пользователь - СправочникСсылка.Пользователи - -// * ВремяСобытия - Дата - -// * Источник - ОпределяемыйТип.ПредметНапоминания - -// * СрокНапоминания - Дата - -// * Описание - Строка - -// * ИндексКартинки - Число - +// Массив из Структура: +// * Пользователь - СправочникСсылка.Пользователи +// * ВремяСобытия - Дата +// * Источник - ОпределяемыйТип.ПредметНапоминания +// * СрокНапоминания - Дата +// * Описание - Строка +// * ИндексКартинки - Число // Функция СписокТекущихНапоминанийПользователя() Экспорт diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl index e1b27623b..a0289575a 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl @@ -11,8 +11,9 @@ // Заполняет значение реквизита дополнительного упорядочивания у объекта. // // Параметры: -// Объект - СправочникОбъект, ПланВидовХарактеристикОбъект - объект, у которого необходимо установить значение -// реквизита упорядочивания. +// Объект - СправочникОбъект +// - ПланВидовХарактеристикОбъект - объект, у которого необходимо установить значение +// реквизита упорядочивания. // Процедура УстановитьЗначениеРеквизитаУпорядочивания(Объект) Экспорт @@ -45,8 +46,10 @@ // Обнуляет значение реквизита дополнительного упорядочивания у объекта. // // Параметры: -// Источник - СправочникОбъект, ПланВидовХарактеристикОбъект - объект, создаваемый копированием; -// ОбъектКопирования - СправочникСсылка, ПланВидовХарактеристикСсылка - исходный объект, который является источником копирования. +// Источник - СправочникОбъект +// - ПланВидовХарактеристикОбъект - объект, создаваемый копированием; +// ОбъектКопирования - СправочникСсылка +// - ПланВидовХарактеристикСсылка - исходный объект, который является источником копирования. // Процедура СброситьЗначениеРеквизитаУпорядочивания(Источник, ОбъектКопирования) Экспорт @@ -68,6 +71,7 @@ // // Возвращаемое значение: // Структура - информация из метаданных объекта. +// Функция ПолучитьИнформациюДляПеремещения(МетаданныеОбъекта) Экспорт Информация = Новый Структура; @@ -112,7 +116,8 @@ // Перемещает элемент вверх или вниз в списке. // // Параметры: -// Ссылка - СправочникСсылка, ПланВидовХарактеристикСсылка - перемещаемый элемент, +// Ссылка - СправочникСсылка +// - ПланВидовХарактеристикСсылка - перемещаемый элемент, // ПараметрыВыполнения - см. ПодключаемыеКомандыКлиентСервер.ШаблонПараметровВыполненияКоманды // Процедура Подключаемый_ПереместитьЭлемент(Ссылка, ПараметрыВыполнения) Экспорт @@ -216,8 +221,10 @@ // Заполняет значение реквизита дополнительного упорядочивания у объекта. // // Параметры: -// Источник - СправочникОбъект, ПланВидовХарактеристикОбъект - записываемый объект; +// Источник - СправочникОбъект +// - ПланВидовХарактеристикОбъект - записываемый объект; // Отказ - Булево - признак отказа от записи объекта. +// Процедура ЗаполнитьЗначениеРеквизитаУпорядочивания(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl index d6613d3d2..132c698d1 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl @@ -17,6 +17,7 @@ // // Возвращаемое значение: // Число - значение реквизита доп. упорядочивания. +// Функция ПолучитьНовоеЗначениеРеквизитаДопУпорядочивания(Информация, Родитель, Владелец) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -289,9 +290,12 @@ КонецФункции // Параметры: -// ПервыйЭлементСсылка - СправочникСсылка, ПланВидовХарактеристикСсылка - -// ВторойЭлементСсылка - СправочникСсылка, ПланВидовХарактеристикСсылка - -// ИмяТаблицы - Строка - +// ПервыйЭлементСсылка - СправочникСсылка +// - ПланВидовХарактеристикСсылка +// ВторойЭлементСсылка - СправочникСсылка +// - ПланВидовХарактеристикСсылка +// ИмяТаблицы - Строка +// Процедура ПоменятьЭлементыМестами(ПервыйЭлементСсылка, ВторойЭлементСсылка, ИмяТаблицы) Блокировка = Новый БлокировкаДанных; diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl index dc4080763..07e21baeb 100644 --- a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl @@ -42,7 +42,8 @@ // Параметры: // Идентификаторы - Массив - идентификаторы (УникальныйИдентификатор) запросов на использование внешних ресурсов, // для применения которых вызывается мастер. -// ФормаВладелец - ФормаКлиентскогоПриложения, Неопределено - форма, по отношению которой открывался мастер. +// ФормаВладелец - ФормаКлиентскогоПриложения +// - Неопределено - форма, по отношению которой открывался мастер. // ОповещениеОЗакрытии - ОписаниеОповещения или Неопределено - описание оповещения, обработка которого должна быть // выполнена после завершения работы мастера, // РежимВключения - Булево - флаг того, что мастер вызывается при выполнении включения использования для информационной @@ -113,8 +114,7 @@ // Параметры: // Результат - КодВозвратаДиалога - результат выполнения предыдущей операции мастера применения разрешений на // использование внешних ресурсов (используемые значения - ОК и Отмена), -// Состояние - Структура, описывающая состояние мастера настройки разрешений (см. -// СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов))). +// Состояние - см. СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов // // Процедура ПослеИнициализацииЗапросаРазрешенийНаИспользованиеВнешнихРесурсов(Результат, Состояние) Экспорт @@ -178,8 +178,7 @@ // профилей безопасности не вносилось, но запросы на использование внешних ресурсов // должны считаться успешно примененными (например, в том случае, если использование // всех запрашиваемых внешних ресурсов ранее уже предоставлялось), -// Состояние - Структура - описывающая состояние мастера настройки разрешений (см. -// СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов))). +// Состояние - см. СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов // Процедура ПослеНастройкиРазрешенийНаИспользованиеВнешнихРесурсов(Результат, Состояние) Экспорт @@ -231,8 +230,7 @@ // Параметры: // Результат - КодВозвратаДиалога - результат выполнения предыдущей операции мастера применения разрешений на // использование внешних ресурсов (используемые значения - ОК и Отмена), -// Состояние - Структура - описывает состояние мастера настройки разрешений. -// См. СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов. +// Состояние - см. СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов. // Процедура ПослеЗавершенияЗапросаРазрешенийНаИспользованиеВнешнихРесурсов(Результат, Состояние) Экспорт @@ -318,8 +316,7 @@ // Результат - Произвольный - результат закрытия формы, для которой открывался мастер настройки разрешений // на использование внешних ресурсов. В теле процедуры не используется, параметр требуется // для назначения процедуры в качестве описания оповещения о закрытия формы. -// Состояние - Структура - описывает состояние проверки завершения операции. -// См. СостояниеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца. +// Состояние - см. СостояниеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца. // // Результатом выполнения данной процедуры является запуск мастера настройки разрешений на использование // внешних ресурсов в режиме проверки завершения операции, в рамках которой ранее применялись разрешения @@ -342,8 +339,7 @@ // Обрабатывает проверку применения запросов на использование внешних ресурсов. // // Параметры: -// Проверка - Структура - состояние выполнения проверки применения разрешений на использование внешних ресурсов -// См. НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера.ПроверитьПрименениеРазрешенийНаИспользованиеВнешнихРесурсов. +// Проверка - см. НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера.ПроверитьПрименениеРазрешенийНаИспользованиеВнешнихРесурсов. // Процедура ПослеПроверкиПримененияРазрешенийНаИспользованиеВнешнихРесурсов(Знач Проверка) @@ -418,7 +414,7 @@ // внешних (относительно кластера серверов 1С:Предприятия) ресурсов. // // Возвращаемое значение: -// Булево - +// Булево // Функция ОтображатьПомощникНастройкиРазрешений() @@ -512,7 +508,8 @@ // открывался мастер настройки разрешений на использование внешних ресурсов. // // Параметры: -// ФормаВладелец - ФормаКлиентскогоПриложения, Неопределено - форма, после закрытия которой требуется выполнить +// ФормаВладелец - ФормаКлиентскогоПриложения +// - Неопределено - форма, после закрытия которой требуется выполнить // проверку завершения операций, в рамках которых ранее применялись запросы разрешений на использование // внешних ресурсов. // ИдентификаторыЗапросов - Массив - идентификаторы (УникальныйИдентификатор) запросов разрешений на diff --git a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl index 5b6825d3e..2b28b8798 100644 --- a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl @@ -54,7 +54,8 @@ // * ПоддерживаемыеОбъектыXDTO - Массив из Строка - коллекция идентификаторов объектов формата. // * ЗагруженныеОбъекты - ТаблицаЗначений - коллекция загруженных объектов: // ** ИмяОбработчика - Строка - имя обработчика. -// ** Объект - СправочникОбъект, ДокументОбъект - загруженный объект. +// ** Объект - СправочникОбъект +// - ДокументОбъект - загруженный объект. // ** Параметры - Произвольный - произвольные параметры. // ** СсылкаНаОбъект - ЛюбаяСсылка - ссылка на загруженный объект. // * ПравилаОбработкиДанных - см. ТаблицаПравилОбработкиДанных @@ -63,7 +64,8 @@ // ** ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - выполняемое действие. // ** ДатаНачала - Дата - дата начала выполнения действия. // ** ДатаОкончания - Дата - дата окончания выполнения действия. -// ** РезультатВыполненияОбмена - ПеречислениеСсылка.РезультатыВыполненияОбмена, Неопределено - результат +// ** РезультатВыполненияОбмена - ПеречислениеСсылка.РезультатыВыполненияОбмена +// - Неопределено - результат // выполнения действия. // * ТаблицаДанныхЗаголовкаПакета - см. НоваяТаблицаДанныхЗаголовкаПакета // @@ -73,6 +75,10 @@ КомпонентыОбмена.Вставить("ВерсияФорматаОбмена"); КомпонентыОбмена.Вставить("XMLСхема"); КомпонентыОбмена.Вставить("МенеджерОбмена"); + + КомпонентыОбмена.Вставить("СхемаРасширенияФормата"); + КомпонентыОбмена.Вставить("РасширенияФормата", Новый Соответствие); + КомпонентыОбмена.Вставить("УзелКорреспондента"); КомпонентыОбмена.Вставить("УзелКорреспондентаОбъект"); КомпонентыОбмена.Вставить("ВерсияФорматаМенеджераОбмена"); @@ -97,7 +103,7 @@ СостояниеОбменаДанными = Новый Структура; СостояниеОбменаДанными.Вставить("УзелИнформационнойБазы"); СостояниеОбменаДанными.Вставить("ДействиеПриОбмене"); - СостояниеОбменаДанными.Вставить("ДатаНачала"); + СостояниеОбменаДанными.Вставить("ДатаНачала", ТекущаяДатаСеанса()); СостояниеОбменаДанными.Вставить("ДатаОкончания"); СостояниеОбменаДанными.Вставить("РезультатВыполненияОбмена"); КомпонентыОбмена.Вставить("СостояниеОбменаДанными", СостояниеОбменаДанными); @@ -115,13 +121,7 @@ // Участвует в формировании списка поддерживаемых объектов (см. "ПоддерживаемыеОбъектыXDTO") // При отправке по ней будет сформирована заголовочная часть сообщения обмена - в этом случае // будет содержать перечень всех доступных объектов формата с детализацией по версиям. - КомпонентыОбмена.Вставить("НастройкиXDTO", Новый Структура); - КомпонентыОбмена.НастройкиXDTO.Вставить("Формат", ""); - КомпонентыОбмена.НастройкиXDTO.Вставить("ПоддерживаемыеОбъекты", Новый ТаблицаЗначений); - КомпонентыОбмена.НастройкиXDTO.Вставить("ПоддерживаемыеВерсии", Новый Массив); - - ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата( - КомпонентыОбмена.НастройкиXDTO.ПоддерживаемыеОбъекты, "ОтправкаПолучение"); + КомпонентыОбмена.Вставить("НастройкиXDTO", СтруктураНастроекXDTO()); Если НаправлениеОбмена = "Отправка" Тогда @@ -175,13 +175,7 @@ КомпонентыОбмена.Вставить("ОбъектыДляОтложеннойЗаписи", Новый Соответствие); // Структура настроек XDTO корреспондента, зачитываемая из сообщения обмена. - КомпонентыОбмена.Вставить("НастройкиXDTOКорреспондента", Новый Структура); - КомпонентыОбмена.НастройкиXDTOКорреспондента.Вставить("Формат", ""); - КомпонентыОбмена.НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеОбъекты", Новый ТаблицаЗначений); - КомпонентыОбмена.НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеВерсии", Новый Массив); - - ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата( - КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты, "ОтправкаПолучение"); + КомпонентыОбмена.Вставить("НастройкиXDTOКорреспондента", СтруктураНастроекXDTO()); КомпонентыОбмена.Вставить("ПрефиксКорреспондента"); @@ -201,26 +195,24 @@ // Процедура ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена) Экспорт - НаправлениеОбмена = КомпонентыОбмена.НаправлениеОбмена; - XMLСхема = КомпонентыОбмена.XMLСхема; - МенеджерОбмена = КомпонентыОбмена.МенеджерОбмена; + КомпонентыОбмена.Вставить("БазовыеСхемыФормата", Новый Соответствие); + КомпонентыОбмена.БазовыеСхемыФормата.Вставить(КомпонентыОбмена.XMLСхема, Истина); + КомпонентыОбмена.БазовыеСхемыФормата.Вставить(XMLБазоваяСхема(), Истина); // Вычисление версии формата менеджера обмена - от этого зависит формирование правил. Попытка - КомпонентыОбмена.Вставить("ВерсияФорматаМенеджераОбмена", МенеджерОбмена.ВерсияФорматаМенеджераОбмена()); + КомпонентыОбмена.Вставить("ВерсияФорматаМенеджераОбмена", КомпонентыОбмена.МенеджерОбмена.ВерсияФорматаМенеджераОбмена()); Исключение КомпонентыОбмена.Вставить("ВерсияФорматаМенеджераОбмена", "1"); КонецПопытки; // Инициализация таблиц правил обмена. - КомпонентыОбмена.Вставить("ПравилаОбработкиДанных", ТаблицаПравилОбработкиДанных(XMLСхема, МенеджерОбмена, НаправлениеОбмена)); - КомпонентыОбмена.Вставить("ПравилаКонвертацииОбъектов", ТаблицаПравилКонвертации( - XMLСхема, МенеджерОбмена, НаправлениеОбмена, КомпонентыОбмена.ПравилаОбработкиДанных, КомпонентыОбмена.ВерсияФорматаМенеджераОбмена)); + КомпонентыОбмена.Вставить("ПравилаОбработкиДанных", ТаблицаПравилОбработкиДанных(КомпонентыОбмена)); + КомпонентыОбмена.Вставить("ПравилаКонвертацииОбъектов", ТаблицаПравилКонвертации(КомпонентыОбмена)); - КомпонентыОбмена.Вставить("ПравилаКонвертацииПредопределенныхДанных", - ТаблицаПравилКонвертацииПредопределенныхДанных(XMLСхема, МенеджерОбмена, НаправлениеОбмена)); + КомпонентыОбмена.Вставить("ПравилаКонвертацииПредопределенныхДанных", ТаблицаПравилКонвертацииПредопределенныхДанных(КомпонентыОбмена)); - КомпонентыОбмена.Вставить("ПараметрыКонвертации", СтруктураПараметровКонвертации(МенеджерОбмена)); + КомпонентыОбмена.Вставить("ПараметрыКонвертации", СтруктураПараметровКонвертации(КомпонентыОбмена.МенеджерОбмена)); КонецПроцедуры @@ -228,24 +220,31 @@ // // Возвращаемое значение: // ТаблицаЗначений - таблица для хранения правил конвертации свойств: -// * СвойствоКонфигурации - Строка - -// * СвойствоФормата - Строка - -// * ПравилоКонвертацииСвойства - Строка - -// * ИспользуетсяАлгоритмКонвертации - Булево - -// * ОбработкаКлючевогоСвойства - Булево - -// * ОбработкаПоисковогоСвойства - Булево - -// * ИмяТЧ - Строка - +// * СвойствоКонфигурации - Строка +// * СвойствоФормата - Строка +// * ПравилоКонвертацииСвойства - Строка +// * ИспользуетсяАлгоритмКонвертации - Булево +// * ОбработкаКлючевогоСвойства - Булево +// * ОбработкаПоисковогоСвойства - Булево +// * ИмяТЧ - Строка // Функция ИнициализироватьТаблицуСвойствДляПравилаКонвертации() Экспорт ТаблицаПКС = Новый ТаблицаЗначений; ТаблицаПКС.Колонки.Добавить("СвойствоКонфигурации", Новый ОписаниеТипов("Строка")); - ТаблицаПКС.Колонки.Добавить("СвойствоФормата", Новый ОписаниеТипов("Строка")); - ТаблицаПКС.Колонки.Добавить("ПравилоКонвертацииСвойства", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(50))); + ТаблицаПКС.Колонки.Добавить("СвойствоФормата", Новый ОписаниеТипов("Строка")); + + ТаблицаПКС.Колонки.Добавить("ПравилоКонвертацииСвойства", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(50))); ТаблицаПКС.Колонки.Добавить("ИспользуетсяАлгоритмКонвертации", Новый ОписаниеТипов("Булево")); - ТаблицаПКС.Колонки.Добавить("ОбработкаКлючевогоСвойства", Новый ОписаниеТипов("Булево")); + + ТаблицаПКС.Колонки.Добавить("ОбработкаКлючевогоСвойства", Новый ОписаниеТипов("Булево")); ТаблицаПКС.Колонки.Добавить("ОбработкаПоисковогоСвойства", Новый ОписаниеТипов("Булево")); + ТаблицаПКС.Колонки.Добавить("ИмяТЧ", Новый ОписаниеТипов("Строка")); + + ТаблицаПКС.Колонки.Добавить("ПространствоИмен", Новый ОписаниеТипов("Строка")); + + ТаблицаПКС.Индексы.Добавить("ПространствоИмен"); Возврат ТаблицаПКС; @@ -257,6 +256,7 @@ // Параметры: // ПравилоКонвертации - СтрокаТаблицыЗначений - правило конвертации объектов. // ИмяКолонки - Строка - имя заполняемой колонки таблицы правил конвертации. +// Процедура ИнициализироватьСвойстваТабличныхЧастей(ПравилоКонвертации, ИмяКолонки = "СвойстваТабличныхЧастей") Экспорт СвойстваТабличныхЧастей = Новый ТаблицаЗначений; СвойстваТабличныхЧастей.Колонки.Добавить("ТЧКонфигурации", Новый ОписаниеТипов("Строка")); @@ -264,6 +264,9 @@ СвойстваТабличныхЧастей.Колонки.Добавить("Свойства", Новый ОписаниеТипов("ТаблицаЗначений")); СвойстваТабличныхЧастей.Колонки.Добавить("ИспользуетсяАлгоритмКонвертации", Новый ОписаниеТипов("Булево")); + СвойстваТабличныхЧастей.Колонки.Добавить("ПространствоИмен", Новый ОписаниеТипов("Строка")); + СвойстваТабличныхЧастей.Индексы.Добавить("ПространствоИмен"); + ПравилоКонвертации[ИмяКолонки] = СвойстваТабличныхЧастей; КонецПроцедуры @@ -292,7 +295,7 @@ СтрокаСообщения = НСтр("ru = 'Ошибка при попытке записи в файл протокола данных: %1. Описание ошибки: %2'", ОбщегоНазначения.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяФайлаПротоколаОбмена, ОписаниеОшибки()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяФайлаПротоколаОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, КомпонентыОбмена, УровеньЖурналаРегистрации.Предупреждение); @@ -322,15 +325,17 @@ // // Параметры: // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// КодОшибки - Число, Строка, Структура - информация об ошибке. +// КодОшибки - Число +// - Строка +// - Структура - информация об ошибке. // Число - код ошибки, см. ОбменДаннымиПовтИсп.СообщенияОбОшибках(). // Строка - описание ошибки. -// Структура - структура с кратким и подробным описанием ошибки. +// Структура - структура с кратким и подробным описанием ошибки: // * КраткоеПредставлениеОшибки - описание ошибки для протокола (для пользователя). // * ПодробноеПредставлениеОшибки - описание ошибки для журнала регистрации. // * Уровень - УровеньЖурналаРегистрации - уровень важности ошибки. -// СтруктураЗаписи - Структура - Структура записи протокола. -// ВзвестиФлагОшибок - Булево - Если истина, то - это сообщение об ошибке. Взводится ФлагОшибки. +// СтруктураЗаписи - Структура - структура записи протокола. +// ВзвестиФлагОшибок - Булево - если истина, то - это сообщение об ошибке. Взводится ФлагОшибки. // Уровень - Число - отступ слева, количество табуляций. // Выравнивание - Число - отступ в тексте, для выравнивания текста выводимого в виде Ключ - Значение. // БезусловнаяЗаписьВПротоколОбмена - Булево - флаг безусловной записи информации в протокол. @@ -476,7 +481,7 @@ // Имя - Строка - имя правила. // // Возвращаемое значение: -// СтрокаТаблицыЗначений - Строка таблицы правил обмена, в которой содержится искомое правило. +// СтрокаТаблицыЗначений - строка таблицы правил обмена, в которой содержится искомое правило. // Функция ПКОПоИмени(КомпонентыОбмена, Имя) Экспорт @@ -696,7 +701,7 @@ // 3. Конвертируем Структуру в ОбъектXDTO. СсылкиИзОбъекта = Новый Массив; - ОбъектXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации.ТипXDTO, , СсылкиИзОбъекта); + ОбъектXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации.ТипXDTO, СсылкиИзОбъекта, , ПравилоКонвертации.Расширения); Исключение ПропуститьОбработку = Истина; ВзвестиФлагОшибки = Истина; @@ -767,9 +772,9 @@ // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. // Источник - Структура - источник данных, которые необходимо преобразовать в объект XDTO. // ТипXDTO - Строка - тип объекта или тип значения XDTO, к которому надо преобразовать данные. -// Приемник - ОбъектXDTO - объект, в который будет помещен результат. // СсылкиИзОбъекта - Массив из ЛюбаяСсылка - содержит общий список выгруженных по ссылкам объектов. // ПроведеноЗаполнениеСвойств - Булево - параметр для определения заполненности общих составных свойств. +// Расширения - Структура - для служебного использования. // // Возвращаемое значение: // ОбъектXDTO - результат преобразования. @@ -778,19 +783,39 @@ КомпонентыОбмена, Знач Источник, Знач ТипXDTO, - Приемник = Неопределено, СсылкиИзОбъекта = Неопределено, - ПроведеноЗаполнениеСвойств = Ложь) Экспорт + ПроведеноЗаполнениеСвойств = Ложь, + Знач Расширения = Неопределено) Экспорт Если СсылкиИзОбъекта = Неопределено Тогда СсылкиИзОбъекта = Новый Массив; КонецЕсли; - Если Приемник = Неопределено Тогда - Приемник = ФабрикаXDTO.Создать(ТипXDTO); + Приемник = ФабрикаXDTO.Создать(ТипXDTO); + + СвойстваИсточника = Новый Массив; + Для Каждого Свойство Из ТипXDTO.Свойства Цикл + СвойстваИсточника.Добавить(Свойство); + КонецЦикла; + + Если Расширения <> Неопределено Тогда + Для Каждого Расширение Из Расширения Цикл + РасширенныйТипXDTO = Неопределено; + Если (Расширение.Значение.Свойство("ТипXDTO", РасширенныйТипXDTO) + Или Расширение.Значение.Свойство("ТипСоставногоСвойства", РасширенныйТипXDTO)) + И РасширенныйТипXDTO <> Неопределено Тогда + + Для Каждого Свойство Из РасширенныйТипXDTO.Свойства Цикл + СвойстваИсточника.Добавить(Свойство); + КонецЦикла; + КонецЕсли; + КонецЦикла; КонецЕсли; - Для Каждого Свойство Из ТипXDTO.Свойства Цикл + Для Каждого Свойство Из СвойстваИсточника Цикл + + Расширения = Неопределено; + ЭтоБазоваяСхема = ЭтоБазоваяСхема(КомпонентыОбмена, Свойство.URIПространстваИмен); ЗначениеСвойства = Неопределено; СвойствоНайдено = Ложь; @@ -803,6 +828,10 @@ ЗначениеСвойства = Источник[Свойство.Имя]; КонецЕсли; + Если ТипЗнч(ЗначениеСвойства) = Тип("Структура") Тогда + ЗначениеСвойства.Свойство("Расширения", Расширения); + КонецЕсли; + ТипСвойства = Неопределено; Если ТипЗнч(Свойство.Тип) = Тип("ТипЗначенияXDTO") Тогда ТипСвойства = "ОбычноеСвойство"; @@ -842,10 +871,10 @@ ПроведеноЗаполнениеВложенныхСвойств = Ложь; Если ТипЗнч(Источник) = Тип("Структура") И СвойствоНайдено Тогда ЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ЗначениеСвойства, - Свойство.Тип,, СсылкиИзОбъекта, ПроведеноЗаполнениеВложенныхСвойств); + Свойство.Тип, СсылкиИзОбъекта, ПроведеноЗаполнениеВложенныхСвойств, Расширения); Иначе ЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, Источник, - Свойство.Тип,, СсылкиИзОбъекта, ПроведеноЗаполнениеВложенныхСвойств); + Свойство.Тип, СсылкиИзОбъекта, ПроведеноЗаполнениеВложенныхСвойств, Расширения); КонецЕсли; Если Не ПроведеноЗаполнениеВложенныхСвойств Тогда @@ -872,7 +901,7 @@ ЗначениеXDTO = Неопределено; Если ТипСвойства = "КлючевыеСвойства" Тогда - ЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ЗначениеСвойства, Свойство.Тип,,СсылкиИзОбъекта); + ЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ЗначениеСвойства, Свойство.Тип, СсылкиИзОбъекта, , Расширения); ИначеЕсли ТипСвойства = "ОбычноеСвойство" Тогда СвойствоТипЗначения = Свойство.Тип; // ТипЗначенияXDTO @@ -908,7 +937,7 @@ Для Каждого ИсточникСтрока Из ЗначениеСвойства Цикл - ПриемникСтрока = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ИсточникСтрока, ТипТаблицы,,СсылкиИзОбъекта); + ПриемникСтрока = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ИсточникСтрока, ТипТаблицы, СсылкиИзОбъекта, , ?(ЭтоБазоваяСхема, Неопределено, Расширения)); СписокXDTO.Добавить(ПриемникСтрока); @@ -923,7 +952,7 @@ И ЗначениеСвойства.ТипСоставногоСвойства = СвойствоСоставногоТипа.Тип Тогда // Свойство составного типа, содержащие элементы только типа КлючевыеСвойства. - СоставноеЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ЗначениеСвойства, СвойствоСоставногоТипа.Тип,,СсылкиИзОбъекта); + СоставноеЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ЗначениеСвойства, СвойствоСоставногоТипа.Тип, СсылкиИзОбъекта, , Расширения); // Свойство составного типа простое, и значение простое. ИначеЕсли (ТипЗнч(ЗначениеСвойства) = Тип("Строка") И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"string")>0) @@ -979,6 +1008,13 @@ КонецПопытки; Приемник[Свойство.Имя] = ЗначениеXDTO; + + Если ЭтоБазоваяСхема Или Свойство.URIПространстваИмен = Приемник.Тип().URIПространстваИмен Тогда + Приемник[Свойство.Имя] = ЗначениеXDTO; + Иначе + ДополнитьОбъектXDTO(Приемник, Свойство, ЗначениеXDTO); + КонецЕсли; + ПроведеноЗаполнениеСвойств = Истина; КонецЦикла; @@ -990,8 +1026,8 @@ // // Параметры: // КомпонентыОбмена - см. ИнициализироватьКомпонентыОбмена -// Источник - ЛюбаяСсылка - Ссылка на выгружаемый объект информационной базы. -// ПравилоКонвертации - СтрокаТаблицыЗначений - Строка таблицы правил конвертации объектов, +// Источник - ЛюбаяСсылка - ссылка на выгружаемый объект информационной базы. +// ПравилоКонвертации - СтрокаТаблицыЗначений - строка таблицы правил конвертации объектов, // в соответствии с которой выполняется преобразование. // СтекВыгрузки - Массив из ЛюбаяСсылка - ссылки на выгружаемые объекты с учетом вложенности. // @@ -1270,6 +1306,15 @@ Если СтекВыгрузки.Количество() > 1 Тогда Приемник.Вставить("ТипСоставногоСвойства", ПравилоКонвертации.ТипКлючевыхСвойствОбъектаXDTO); + + Если ЭтоБазоваяСхема(КомпонентыОбмена, ПравилоКонвертации.ПространствоИмен) И ПравилоКонвертации.Расширения.Количество() Тогда + Для Каждого Расширение Из ПравилоКонвертации.Расширения Цикл + Если Расширение.Значение.ТипКлючевыхСвойствОбъектаXDTO <> Неопределено Тогда + ДанныеРасширения(Приемник, Расширение.Ключ).Вставить("ТипСоставногоСвойства", + Расширение.Значение.ТипКлючевыхСвойствОбъектаXDTO); + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецЕсли; КонецЕсли; @@ -1283,8 +1328,8 @@ // Параметры: // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. // ДанныеИБ - ЛюбаяСсылка - ссылка на выгружаемый объект информационной базы. -// ПолучательСвойства - Структура - Получатель данных типа Структура, в которой должно храниться значение выгруженного свойства. -// ПКС - СтрокаТаблицыЗначений - Строка таблицы правил конвертации свойств, в соответствии с которой +// ПолучательСвойства - Структура - получатель данных типа Структура, в которой должно храниться значение выгруженного свойства. +// ПКС - СтрокаТаблицыЗначений - строка таблицы правил конвертации свойств, в соответствии с которой // выполняется преобразование. // СтекВыгрузки - Массив из ЛюбаяСсылка - ссылки на выгружаемые объекты с учетом вложенности. // ЭтапВыгрузки - Число - содержит информацию об этапе выгрузки: @@ -1524,7 +1569,8 @@ Если Не КомпонентыОбмена.ТолькоНастройкиXDTO Тогда // Записываем элемент ФайлОбмена.ЗаписатьНачалоЭлемента("Body"); - ФайлОбмена.ЗаписатьСоответствиеПространстваИмен("", КомпонентыОбмена.XMLСхема); + + ОбъявитьПространстваИмен(ФайлОбмена, КомпонентыОбмена); КонецЕсли; КомпонентыОбмена.Вставить("ФайлОбмена", ФайлОбмена); @@ -1541,9 +1587,10 @@ // КомпонентыОбмена - см. ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена // ДанныеXDTO - Структура - структура, имитирующая объект XDTO. // -// ПравилоКонвертации - СтрокаТаблицыЗначений, Структура - параметры текущего правила конвертации. +// ПравилоКонвертации - СтрокаТаблицыЗначений +// - Структура - параметры текущего правила конвертации: // СтрокаТаблицыЗначений - строка таблицы правил конвертации объектов. -// Структура - описание правила конвертации объекта. +// Структура - описание правила конвертации объекта: // * ПравилоКонвертации - СтрокаТаблицыЗначений - строка таблицы правил конвертации объектов. // Обязательное свойство. // * УдалятьСозданныеПоКлючевымСвойствам - Булево - признак необходимости удаления объектов, @@ -1675,6 +1722,16 @@ ДанныеИБ = Неопределено; КонецЕсли; + // Получение (или переопределение) ссылки на найденный объект информационной базы + // посредствам произвольного алгоритма, описанного в менеджере обмена. + Если ПравилоКонвертации.ЕстьОбработчикАлгоритмПоиска Тогда + АлгоритмПоиска( + ДанныеИБ, + ПолученныеДанные, + КомпонентыОбмена, + ПравилоКонвертации.АлгоритмПоиска); + КонецЕсли; + Если ДанныеИБ <> Неопределено И ПравилоКонвертации.ЭтоСсылочныйТип Тогда Если Действие = "ПолучитьСсылку" Тогда // Задача: получение ссылки. @@ -1897,7 +1954,7 @@ // // Параметры: // КомпонентыОбмена - см. ИнициализироватьКомпонентыОбмена -// ТаблицыДляЗагрузки - ТаблицаЗначений - Таблица, в которую следует загрузить данные (при интерактивном сопоставлении данных). +// ТаблицыДляЗагрузки - ТаблицаЗначений - таблица, в которую следует загрузить данные (при интерактивном сопоставлении данных). // Процедура ПроизвестиЧтениеДанных(КомпонентыОбмена, ТаблицыДляЗагрузки = Неопределено) Экспорт @@ -1992,7 +2049,7 @@ // // Параметры: // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// ИмяФайлаОбмена - строка - Имя файла обмена. +// ИмяФайлаОбмена - строка - имя файла обмена. // Процедура ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена) Экспорт @@ -2011,7 +2068,7 @@ КомпонентыОбмена.Вставить("ФайлОбмена", ЧтениеXML); Исключение СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при загрузке данных: %1'"); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ОписаниеОшибки()); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщенияОбОшибке); Прервать; КонецПопытки; @@ -2042,7 +2099,14 @@ ЗаголовокСообщенияXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(XMLБазоваяСхема(), "Header")); - URIФормата = ЗаголовокСообщенияXDTO.Format; + СтруктураFormat = СтрРазделить(ЗаголовокСообщенияXDTO.Format, " ", Ложь); + + URIФормата = СтруктураFormat[0]; + + URIРасширения = ""; + Если СтруктураFormat.Количество() > 1 Тогда + URIРасширения = СтруктураFormat[СтруктураFormat.ВГраница()]; + КонецЕсли; Если ЭтоОбменЧерезПланОбмена Тогда @@ -2087,6 +2151,8 @@ Если Не КомпонентыОбмена.ТолькоНастройкиXDTO Тогда КомпонентыОбмена.XMLСхема = URIФормата; + ВключитьПространствоИмен(КомпонентыОбмена, URIРасширения, "ext"); + ФорматОбмена = РазложитьФорматОбмена(КомпонентыОбмена.XMLСхема); // Проверяем базовый формат. @@ -2196,6 +2262,7 @@ Иначе КомпонентыОбмена.XMLСхема = URIФормата; + КомпонентыОбмена.XMLСхема = URIРасширения; ФорматОбмена = РазложитьФорматОбмена(КомпонентыОбмена.XMLСхема); @@ -2230,26 +2297,30 @@ // // Параметры: // ОбъектXDTO - ОбъектXDTO - значение, которое необходимо преобразовать. +// КомпонентыОбмена - см. ИнициализироватьКомпонентыОбмена // // Возвращаемое значение: -// Структура - Структура, имитирующая объект XDTO. +// Структура - структура, имитирующая объект XDTO. // Ключи структуры соответствуют свойствам объекта XDTO. // Значения соответствуют значениям свойств объекта XDTO. // -Функция ОбъектXDTOВСтруктуру(ОбъектXDTO) Экспорт +Функция ОбъектXDTOВСтруктуру(ОбъектXDTO, КомпонентыОбмена) Экспорт + + Если Не ПространствоИменАктивно(КомпонентыОбмена, ОбъектXDTO.Тип().URIПространстваИмен) Тогда + Возврат Неопределено; + КонецЕсли; Приемник = Новый Структура; Для Каждого Свойство Из ОбъектXDTO.Свойства() Цикл - КонвертацияСвойстваXDTOВЭлементСтруктуры(ОбъектXDTO, Свойство, Приемник); + КонвертацияСвойстваXDTOВЭлементСтруктуры(ОбъектXDTO, Свойство, Приемник, КомпонентыОбмена); КонецЦикла; - ЗначениеСсылки = Неопределено; Если Приемник.Свойство("КлючевыеСвойства") - И Приемник.КлючевыеСвойства.Свойство("Ссылка", ЗначениеСсылки) Тогда - Приемник.Вставить("Ссылка", ЗначениеСсылки); + И Приемник.КлючевыеСвойства.Свойство("Ссылка") Тогда + Приемник.Вставить("Ссылка", Приемник.КлючевыеСвойства.Ссылка); КонецЕсли; Возврат Приемник; @@ -2263,13 +2334,13 @@ // И в том и в другом случае в регистре публичных идентификаторов создается запись. // // Параметры: -// УИДОбъектаXDTO - Строка - Уникальный идентификатор объекта XDTO, для которого необходимо +// УИДОбъектаXDTO - Строка - уникальный идентификатор объекта XDTO, для которого необходимо // получить ссылку соответствующего объекта информационной базы. // -// ТипЗначенияОбъектаИБ - Тип - Тип объекта информационной базы, которому должна соответствовать +// ТипЗначенияОбъектаИБ - Тип - тип объекта информационной базы, которому должна соответствовать // получаемая ссылка. // -// КомпонентыОбмена - Структура - Содержит все необходимые данные, инициализированные при начале +// КомпонентыОбмена - Структура - содержит все необходимые данные, инициализированные при начале // выполнения обмена (ПКО, ПКПД, ПОД и т.д.). // // Возвращаемое значение: @@ -2297,10 +2368,10 @@ // Записывает объект в информационную базу. // // Параметры: -// КомпонентыОбмена - Структура - Содержит все необходимые данные, +// КомпонентыОбмена - Структура - содержит все необходимые данные, // инициализированные при начале выполнения обмена (ПКО, ПКПД, ПОД и т.д.). // Объект - Произвольный - СправочникОбъект, ДокументОбъект и др записываемый объект. -// Тип - Строка - Тип объекта строкой. +// Тип - Строка - тип объекта строкой. // ЗаписатьОбъект - Булево - переменная принимает значение Ложь если запись объекта не была выполнена. // ОтправкаНазад - Булево - служебный флаг для установки соответствующего параметра обмена данными объекта. // УникальныйИдентификаторСтрокой - строка - уникальный идентификатор объекта в виде строки. @@ -2383,7 +2454,7 @@ // // Параметры: // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// Объект - ДокументОбъект - Загруженный документ. +// Объект - ДокументОбъект - загруженный документ. // РегистрироватьПроблемыВРезультатахОбмена - Булево - необходимо регистрировать проблемы. // Процедура ВыполнитьПроведениеДокументаПриЗагрузке( @@ -2401,11 +2472,12 @@ // Отменяет проведение объекта в информационной базе. // // Параметры: -// Объект - ДокументОбъект - Документ для отмены проведения. -// Отправитель - ПланОбменаСсылка - Ссылка на узел плана обмена, который является отправителем данных. +// Объект - ДокументОбъект - документ для отмены проведения. +// Отправитель - ПланОбменаСсылка - ссылка на узел плана обмена, который является отправителем данных. // // Возвращаемое значение: // Булево - признак успешной отмены проведения. +// Функция ОтменитьПроведениеОбъектаВИБ(Объект, Отправитель) Экспорт РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьУстранениеПроблемы(Объект, @@ -2440,14 +2512,14 @@ // Процедура заполняет табличную часть объекта с учетом предыдущей версии табличной части (до загрузки данных). // // Параметры: -// ТабличнаяЧастьОбъектаПослеОбработки - ТабличнаяЧасть - Табличная часть, которая содержит измененные данные. -// ТабличнаяЧастьОбъектаДоОбработки - ТаблицаЗначений - Таблица значений, содержимое табличной части объекта до +// ТабличнаяЧастьОбъектаПослеОбработки - ТабличнаяЧасть - табличная часть, которая содержит измененные данные. +// ТабличнаяЧастьОбъектаДоОбработки - ТаблицаЗначений - таблица значений, содержимое табличной части объекта до // загрузки данных. -// КлючевыеПоля - Строка - Колонки, по которым происходит поиск строк в табличной части (строка через +// КлючевыеПоля - Строка - колонки, по которым происходит поиск строк в табличной части (строка через // запятую). -// КолонкиДляВключения - Строка - Другие колонки (кроме ключевых), значения которых должны измениться (строка +// КолонкиДляВключения - Строка - другие колонки (кроме ключевых), значения которых должны измениться (строка // через запятую). -// КолонкиДляИсключения - Строка - Колонки, значения которых не должны измениться (строка через запятую). +// КолонкиДляИсключения - Строка - колонки, значения которых не должны измениться (строка через запятую). // Процедура ЗаполнитьТабличнуюЧастьОбъектаНачальнымиДанными( ТабличнаяЧастьОбъектаПослеОбработки, @@ -2484,56 +2556,75 @@ // Перечень формируется на основании правил обмена из модулей менеджера обмена по соответствующим версиям. // // Параметры: -// ИмяПланаОбмена - Строка - Имя плана обмена XDTO. -// Режим - Строка - Вид запрашиваемой информации: "Отправка" | "Получение" | "ОтправкаПолучение". +// ИмяПланаОбмена - Строка - имя плана обмена XDTO. +// Режим - Строка - вид запрашиваемой информации: "Отправка" | "Получение" | "ОтправкаПолучение". // "Отправка" - будут возвращены все объекты, для которых поддерживается отправка; // "Получение" - будут возвращены все объекты, для которых поддерживается получение; // "ОтправкаПолучение" - будут возвращены все поддерживаемые объекты. // По умолчанию "ОтправкаПолучение". -// УзелОбмена - ПланОбменаСсылка, Неопределено - узел плана обмена, соответствующий корреспонденту. +// УзелОбмена - ПланОбменаСсылка +// - Неопределено - узел плана обмена, соответствующий корреспонденту. // // Возвращаемое значение: -// ТаблицаЗначений - состав поддерживаемых объектов формата в разрезе версий. -// * Версия - Строка - Версия формата, например, "1.5". -// * Объект - Строка - Имя объекта формата, например, "Справочник.Номенклатура". -// * Отправка - Булево - Признак поддержки отправки данного объекта формата. -// * Получение - Булево - Признак поддержки получения данного объекта формата. +// ТаблицаЗначений - состав поддерживаемых объектов формата в разрезе версий: +// * Версия - Строка - версия формата, например, "1.5". +// * Объект - Строка - имя объекта формата, например, "Справочник.Номенклатура". +// * Отправка - Булево - признак поддержки отправки данного объекта формата. +// * Получение - Булево - признак поддержки получения данного объекта формата. // Функция ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена, Режим = "ОтправкаПолучение", УзелОбмена = Неопределено) Экспорт - ТаблицаОбъекты = Новый ТаблицаЗначений; ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(ТаблицаОбъекты, Режим); - ВерсииФормата = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВерсииФорматаОбмена"); + НастройкиПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена( + ИмяПланаОбмена, + "ВерсииФорматаОбмена, РасширенияФорматаОбмена"); + + РежимОтправка = СтрНайти(Режим, "Отправка") > 0; + РежимПолучение = СтрНайти(Режим, "Получение") > 0; - Для Каждого Версия Из ВерсииФормата Цикл + Для Каждого Версия Из НастройкиПланаОбмена.ВерсииФорматаОбмена Цикл - Если СтрНайти(Режим, "Отправка") Тогда - КомпонентыОбмена = ИнициализироватьКомпонентыОбмена("Отправка"); - - КомпонентыОбмена.ВерсияФорматаОбмена = Версия.Ключ; - КомпонентыОбмена.МенеджерОбмена = Версия.Значение; - - КомпонентыОбмена.XMLСхема = ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); - - ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); - - ЗаполнитьПоддерживаемыеОбъектыФорматаПоКомпонентамОбмена(ТаблицаОбъекты, КомпонентыОбмена); + РасширенияВерсии = Новый Массив; + Для Каждого Расширение Из НастройкиПланаОбмена.РасширенияФорматаОбмена Цикл + Если Расширение.Значение = Версия Тогда + РасширенияВерсии.Добавить(Расширение.Ключ); + КонецЕсли; + КонецЦикла; + + Если РасширенияВерсии.Количество() = 0 Тогда + РасширенияВерсии.Добавить(""); КонецЕсли; - Если СтрНайти(Режим, "Получение") Тогда - КомпонентыОбмена = ИнициализироватьКомпонентыОбмена("Получение"); + Для Каждого СхемаРасширения Из РасширенияВерсии Цикл + Если РежимОтправка Тогда + КомпонентыОбмена = ИнициализироватьКомпонентыОбмена("Отправка"); + + КомпонентыОбмена.ВерсияФорматаОбмена = Версия.Ключ; + КомпонентыОбмена.МенеджерОбмена = Версия.Значение; + + КомпонентыОбмена.XMLСхема = ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); + ВключитьПространствоИмен(КомпонентыОбмена, СхемаРасширения, "ext"); + + ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); + + ЗаполнитьПоддерживаемыеОбъектыФорматаПоКомпонентамОбмена(ТаблицаОбъекты, КомпонентыОбмена); + КонецЕсли; - КомпонентыОбмена.ВерсияФорматаОбмена = Версия.Ключ; - КомпонентыОбмена.МенеджерОбмена = Версия.Значение; - - КомпонентыОбмена.XMLСхема = ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); - - ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); - - ЗаполнитьПоддерживаемыеОбъектыФорматаПоКомпонентамОбмена(ТаблицаОбъекты, КомпонентыОбмена); - КонецЕсли; - + Если РежимПолучение Тогда + КомпонентыОбмена = ИнициализироватьКомпонентыОбмена("Получение"); + + КомпонентыОбмена.ВерсияФорматаОбмена = Версия.Ключ; + КомпонентыОбмена.МенеджерОбмена = Версия.Значение; + + КомпонентыОбмена.XMLСхема = ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); + ВключитьПространствоИмен(КомпонентыОбмена, СхемаРасширения, "ext"); + + ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); + + ЗаполнитьПоддерживаемыеОбъектыФорматаПоКомпонентамОбмена(ТаблицаОбъекты, КомпонентыОбмена); + КонецЕсли; + КонецЦикла; КонецЦикла; ЕстьАлгоритм = ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена( @@ -2549,19 +2640,19 @@ // Возвращает таблицу поддерживаемых в обмене объектов формата для указанного корреспондента. // // Параметры: -// УзелОбмена - ПланОбменаСсылка - Узел плана обмена XDTO соответствующего корреспондента. -// Режим - Строка - Вид запрашиваемой информации: "Отправка" | "Получение" | "ОтправкаПолучение". +// УзелОбмена - ПланОбменаСсылка - узел плана обмена XDTO соответствующего корреспондента. +// Режим - Строка - вид запрашиваемой информации: "Отправка" | "Получение" | "ОтправкаПолучение". // "Отправка" - будут возвращены все объекты, для которых поддерживается отправка; // "Получение" - будут возвращены все объекты, для которых поддерживается получение; // "ОтправкаПолучение" - будут возвращены все поддерживаемые объекты. // По умолчанию "ОтправкаПолучение". // // Возвращаемое значение: -// ТаблицаЗначений - состав поддерживаемых объектов формата в разрезе версий. -// * Версия - Строка - Версия формата, например, "1.5". -// * Объект - Строка - Имя объекта формата, например, "Справочник.Номенклатура". -// * Отправка - Булево - Признак поддержки корреспондентом отправки данного объекта формата. -// * Получение - Булево - Признак поддержки корреспондентом получения данного объекта формата. +// ТаблицаЗначений - состав поддерживаемых объектов формата в разрезе версий: +// * Версия - Строка - версия формата, например, "1.5". +// * Объект - Строка - имя объекта формата, например, "Справочник.Номенклатура". +// * Отправка - Булево - признак поддержки корреспондентом отправки данного объекта формата. +// * Получение - Булево - признак поддержки корреспондентом получения данного объекта формата. // Функция ПоддерживаемыеОбъектыФорматаКорреспондента(УзелОбмена, Режим = "ОтправкаПолучение") Экспорт @@ -2626,8 +2717,9 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, соответствующий корреспонденту. -// НовоеЗначение - Булево, Неопределено - новое значение режима для установки. -// Если Неопределено, то значение режима не изменяется. +// НовоеЗначение - Булево +// - Неопределено - новое значение режима для установки. +// Если Неопределено, то значение режима не изменяется. // // Возвращаемое значение: // Булево - Истина, если при отправке данных необходимо пропускать объекты формата. @@ -2666,16 +2758,16 @@ // // Возвращаемое значение: // ТаблицаЗначений - набор данных заголовка пакета: -// * ТипОбъектаСтрокой - Строка - -// * КоличествоОбъектовВИсточнике - Число - -// * ПоляПоиска - Строка - -// * ПоляТаблицы - Строка - -// * ТипИсточникаСтрокой - Строка - -// * ТипПриемникаСтрокой - Строка - -// * СинхронизироватьПоИдентификатору - Булево - -// * ЭтоУдалениеОбъекта - Булево - -// * ЭтоКлассификатор - Булево - -// * ИспользоватьПредварительныйПросмотр - Булево - +// * ТипОбъектаСтрокой - Строка +// * КоличествоОбъектовВИсточнике - Число +// * ПоляПоиска - Строка +// * ПоляТаблицы - Строка +// * ТипИсточникаСтрокой - Строка +// * ТипПриемникаСтрокой - Строка +// * СинхронизироватьПоИдентификатору - Булево +// * ЭтоУдалениеОбъекта - Булево +// * ЭтоКлассификатор - Булево +// * ИспользоватьПредварительныйПросмотр - Булево // Функция НоваяТаблицаДанныхЗаголовкаПакета() Экспорт @@ -2702,7 +2794,7 @@ // Получает правила регистрации объектов для плана обмена. // // Возвращаемое значение: -// ТаблицаЗначений - +// ТаблицаЗначений // Функция ПравилаРегистрацииОбъектов(УзелПланаОбмена) Экспорт @@ -2715,86 +2807,11 @@ КонецФункции -// Параметры: -// XMLСхема - Строка - -// МенеджерОбмена - ОбщийМодуль - -// НаправлениеОбмена - Строка - -// -// Возвращаемое значение: -// ТаблицаЗначений - таблица правил обработки (ПОД): -// * Имя - Строка - -// * ОбъектВыборкиФормат - Строка - -// * ТипСсылкиXDTO - ТипЗначенияXDTO, ТипОбъектаXDTO - -// * ОбъектВыборкиМетаданные - ОбъектМетаданных - -// * ВыборкаДанных - Строка - -// * ИмяТаблицыДляВыборки - Строка - -// * ПриОбработке - Строка - -// * ИспользуемыеПКО - Массив из Строка - -// -Функция ТаблицаПравилОбработкиДанных(XMLСхема, МенеджерОбмена , НаправлениеОбмена) Экспорт - - // Инициализация таблицы правил обработки данных. - ПравилаОбработкиДанных = Новый ТаблицаЗначений; - ПравилаОбработкиДанных.Колонки.Добавить("Имя"); - ПравилаОбработкиДанных.Колонки.Добавить("ОбъектВыборкиФормат"); - ПравилаОбработкиДанных.Колонки.Добавить("ТипСсылкиXDTO"); - ПравилаОбработкиДанных.Колонки.Добавить("ОбъектВыборкиМетаданные"); - ПравилаОбработкиДанных.Колонки.Добавить("ВыборкаДанных"); - ПравилаОбработкиДанных.Колонки.Добавить("ИмяТаблицыДляВыборки"); - ПравилаОбработкиДанных.Колонки.Добавить("ПриОбработке", Новый ОписаниеТипов("Строка")); - - // ИспользуемыеПКО - массив, содержащий в себе имена ПКО, в которые может быть направлен объект из данного ПОД. - ПравилаОбработкиДанных.Колонки.Добавить("ИспользуемыеПКО", Новый ОписаниеТипов("Массив")); - - МенеджерОбмена.ЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных); - - КоличествоСтрок = ПравилаОбработкиДанных.Количество(); - Для НомерИтерации = 1 По КоличествоСтрок Цикл - - ИндексСтроки = КоличествоСтрок - НомерИтерации; - ПОД = ПравилаОбработкиДанных.Получить(ИндексСтроки); - - Если НаправлениеОбмена = "Получение" Тогда - - ТипXDTO = ФабрикаXDTO.Тип(XMLСхема, ПОД.ОбъектВыборкиФормат); - - Если ТипXDTO = Неопределено Тогда - ПравилаОбработкиДанных.Удалить(ПОД); - Продолжить; - КонецЕсли; - - КлючевыеСвойства = ТипXDTO.Свойства.Получить("КлючевыеСвойства"); - Если КлючевыеСвойства <> Неопределено Тогда - - ТипКлючевыхСвойствОбъектаXDTO = КлючевыеСвойства.Тип; - СвойствоСсылкаXDTO = ТипКлючевыхСвойствОбъектаXDTO.Свойства.Получить("Ссылка"); - Если СвойствоСсылкаXDTO <> Неопределено Тогда - ПОД.ТипСсылкиXDTO = СвойствоСсылкаXDTO.Тип; - КонецЕсли; - - КонецЕсли; - - ИначеЕсли ПОД.ОбъектВыборкиМетаданные <> Неопределено Тогда - ПОД.ИмяТаблицыДляВыборки = ПОД.ОбъектВыборкиМетаданные.ПолноеИмя(); - КонецЕсли; - - КонецЦикла; - - Если НаправлениеОбмена = "Отправка" Тогда - ПравилаОбработкиДанных.Индексы.Добавить("Имя"); - ПравилаОбработкиДанных.Индексы.Добавить("ОбъектВыборкиМетаданные"); - Иначе - ПравилаОбработкиДанных.Индексы.Добавить("ОбъектВыборкиФормат"); - ПравилаОбработкиДанных.Индексы.Добавить("ТипСсылкиXDTO"); - КонецЕсли; - - Возврат ПравилаОбработкиДанных; -КонецФункции - // Получает свойства узла плана обмена. // // Возвращаемое значение: // Структура (ключ соответствует имени свойства, а значение - значению свойства). +// Функция СвойстваУзлаПланаОбмена(Узел) Экспорт СвойстваУзлаПланаОбмена = Новый Структура; @@ -2823,6 +2840,7 @@ // // Возвращаемое значение // Истина - формат соответствует, ложь - не соответствует. +// Функция ПроверитьФорматСообщенияОбмена(ЧтениеXML) Экспорт Если (ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента @@ -3000,6 +3018,16 @@ КонецФункции +Функция СхемаРасширенияФормата(УзелОбмена) Экспорт + + МенеджерЗаписи = РегистрыСведений.НастройкиОбменаДаннымиXDTO.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.УзелИнформационнойБазы = УзелОбмена; + МенеджерЗаписи.Прочитать(); + + Возврат МенеджерЗаписи.РасширениеФормата; + +КонецФункции + // Возвращает строку с номером версии формата обмена, поддерживаемой получателем данных. // // Параметры: @@ -3077,11 +3105,11 @@ // Функция возвращает массив узлов, в которые объект ранее выгружался. // // Параметры: -// Ссылка - Ссылка на объект ИБ, для которого необходимо получить массив узлов. +// Ссылка - ссылка на объект ИБ, для которого необходимо получить массив узлов. // ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, по которому определяются узлы. // ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов. // Возвращаемое значение: -// МассивУзлов - Массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости», изначально +// МассивУзлов - массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости», изначально // пуст. // Функция МассивУзловДляРегистрацииВыгружатьПриНеобходимости(Ссылка, ИмяПланаОбмена, ИмяРеквизитаФлага) Экспорт @@ -3119,8 +3147,8 @@ // Выполняет запись сообщения в журнал регистрации. // // Параметры: -// Комментарий - Строка, комментарий для записи в журнал регистрации. -// Уровень - Уровень сообщения журнала регистрации (по умолчанию Ошибка). +// Комментарий - Строка - комментарий для записи в журнал регистрации. +// Уровень - уровень сообщения журнала регистрации (по умолчанию Ошибка). // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. // Процедура ЗаписьЖурналаРегистрацииОбменДанными(Комментарий, КомпонентыОбмена, Уровень = Неопределено, СсылкаНаОбъект = Неопределено) Экспорт @@ -3204,37 +3232,112 @@ #Область ИнициализацияОбмена +// Возвращаемое значение: +// ТаблицаЗначений - таблица правил обработки (ПОД): +// * Имя - Строка +// * ОбъектВыборкиФормат - Строка +// * ТипСсылкиXDTO - ТипЗначенияXDTO +// - ТипОбъектаXDTO +// * ОбъектВыборкиМетаданные - ОбъектМетаданных +// * ВыборкаДанных - Строка +// * ИмяТаблицыДляВыборки - Строка +// * ПриОбработке - Строка +// * ИспользуемыеПКО - Массив из Строка +// +Функция ТаблицаПравилОбработкиДанных(КомпонентыОбмена) + + XMLСхема = КомпонентыОбмена.XMLСхема; + ВерсияФорматаМенеджераОбмена = КомпонентыОбмена.ВерсияФорматаМенеджераОбмена; + + // Инициализация таблицы правил обработки данных. + ПравилаОбработкиДанных = Новый ТаблицаЗначений; + ПравилаОбработкиДанных.Колонки.Добавить("Имя"); + ПравилаОбработкиДанных.Колонки.Добавить("ОбъектВыборкиФормат"); + ПравилаОбработкиДанных.Колонки.Добавить("ТипСсылкиXDTO"); + ПравилаОбработкиДанных.Колонки.Добавить("ОбъектВыборкиМетаданные"); + ПравилаОбработкиДанных.Колонки.Добавить("ВыборкаДанных"); + ПравилаОбработкиДанных.Колонки.Добавить("ИмяТаблицыДляВыборки"); + ПравилаОбработкиДанных.Колонки.Добавить("ПриОбработке", Новый ОписаниеТипов("Строка")); + + // ИспользуемыеПКО - массив, содержащий в себе имена ПКО, в которые может быть направлен объект из данного ПОД. + ПравилаОбработкиДанных.Колонки.Добавить("ИспользуемыеПКО", Новый ОписаниеТипов("Массив")); + + КомпонентыОбмена.МенеджерОбмена.ЗаполнитьПравилаОбработкиДанных(КомпонентыОбмена.НаправлениеОбмена, ПравилаОбработкиДанных); + + КоличествоСтрок = ПравилаОбработкиДанных.Количество(); + Для НомерИтерации = 1 По КоличествоСтрок Цикл + + ИндексСтроки = КоличествоСтрок - НомерИтерации; + ПОД = ПравилаОбработкиДанных.Получить(ИндексСтроки); + + Если КомпонентыОбмена.НаправлениеОбмена = "Получение" Тогда + + ТипXDTO = ФабрикаXDTO.Тип(XMLСхема, ПОД.ОбъектВыборкиФормат); + + Если ТипXDTO = Неопределено Тогда + ПравилаОбработкиДанных.Удалить(ПОД); + Продолжить; + КонецЕсли; + + КлючевыеСвойства = ТипXDTO.Свойства.Получить("КлючевыеСвойства"); + Если КлючевыеСвойства <> Неопределено Тогда + + ТипКлючевыхСвойствОбъектаXDTO = КлючевыеСвойства.Тип; + СвойствоСсылкаXDTO = ТипКлючевыхСвойствОбъектаXDTO.Свойства.Получить("Ссылка"); + Если СвойствоСсылкаXDTO <> Неопределено Тогда + ПОД.ТипСсылкиXDTO = СвойствоСсылкаXDTO.Тип; + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ПОД.ОбъектВыборкиМетаданные <> Неопределено Тогда + ПОД.ИмяТаблицыДляВыборки = ПОД.ОбъектВыборкиМетаданные.ПолноеИмя(); + КонецЕсли; + + КонецЦикла; + + Если КомпонентыОбмена.НаправлениеОбмена = "Отправка" Тогда + ПравилаОбработкиДанных.Индексы.Добавить("Имя"); + ПравилаОбработкиДанных.Индексы.Добавить("ОбъектВыборкиМетаданные"); + Иначе + ПравилаОбработкиДанных.Индексы.Добавить("ОбъектВыборкиФормат"); + ПравилаОбработкиДанных.Индексы.Добавить("ТипСсылкиXDTO"); + КонецЕсли; + + Возврат ПравилаОбработкиДанных; +КонецФункции + // Параметры: -// * ВерсияФорматаМенеджераОбмена - Строка - +// * ВерсияФорматаМенеджераОбмена - Строка // // Возвращаемое значение: // ТаблицаЗначений - таблица правил конвертации: -// * ИмяПКО - Строка - -// * ОбъектДанных - Произвольный - -// * ОбъектФормата - Строка - -// * ТипПолученныхДанныхСтрокой - Строка - -// * ИмяТаблицыПолученныхДанных - Строка - +// * ИмяПКО - Строка +// * ОбъектДанных - Произвольный +// * ОбъектФормата - Строка +// * ТипПолученныхДанныхСтрокой - Строка +// * ИмяТаблицыПолученныхДанных - Строка // * ПредставлениеТипаПолученныхДанных - Строка -// * Свойства - ТаблицаЗначений - -// * ПоляПоиска - Массив из Строка - -// * ПоляПредставленияОбъекта - Строка - -// * РеквизитыШапкиПолученныхДанных - Массив из Строка - -// * ПриОтправкеДанных - Строка - -// * ПриКонвертацииДанныхXDTO - Строка - -// * ПередЗаписьюПолученныхДанных - Строка - -// * ПослеЗагрузкиВсехДанных - Строка - -// * ПравилоДляГруппыСправочника - Булево - -// * ВариантИдентификации - Строка - -// * РазрешитьСоздаватьОбъектИзСтруктуры - Произвольный - -// * СвойстваТабличныхЧастейОбработанные - ТаблицаЗначений - -// * СвойстваТабличныхЧастей - Структура - -// - ТаблицаЗначений - +// * Свойства - ТаблицаЗначений +// * ПоляПоиска - Массив из Строка +// * ПоляПредставленияОбъекта - Строка +// * РеквизитыШапкиПолученныхДанных - Массив из Строка +// * ПриОтправкеДанных - Строка +// * ПриКонвертацииДанныхXDTO - Строка +// * ПередЗаписьюПолученныхДанных - Строка +// * ПослеЗагрузкиВсехДанных - Строка +// * ПравилоДляГруппыСправочника - Булево +// * ВариантИдентификации - Строка +// * РазрешитьСоздаватьОбъектИзСтруктуры - Произвольный +// * СвойстваТабличныхЧастейОбработанные - ТаблицаЗначений +// * СвойстваТабличныхЧастей - Структура +// - ТаблицаЗначений // Функция КоллекцияПравилКонвертации(ВерсияФорматаМенеджераОбмена) // Инициализация таблицы правил конвертации. ПравилаКонвертации = Новый ТаблицаЗначений; - ПравилаКонвертации.Колонки.Добавить("ИмяПКО", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(50))); + ПравилаКонвертации.Колонки.Добавить("ИмяПКО", Новый ОписаниеТипов("Строка")); ПравилаКонвертации.Колонки.Добавить("ОбъектДанных"); ПравилаКонвертации.Колонки.Добавить("ОбъектФормата", Новый ОписаниеТипов("Строка")); ПравилаКонвертации.Колонки.Добавить("ТипПолученныхДанныхСтрокой", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(300))); @@ -3250,6 +3353,7 @@ ПравилаКонвертации.Колонки.Добавить("ПослеЗагрузкиВсехДанных", Новый ОписаниеТипов("Строка")); ПравилаКонвертации.Колонки.Добавить("ПравилоДляГруппыСправочника", Новый ОписаниеТипов("Булево")); ПравилаКонвертации.Колонки.Добавить("ВариантИдентификации", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(60))); + ПравилаКонвертации.Колонки.Добавить("АлгоритмПоиска", Новый ОписаниеТипов("Строка")); ПравилаКонвертации.Колонки.Добавить("РазрешитьСоздаватьОбъектИзСтруктуры"); Если ВерсияФорматаМенеджераОбмена = "1" Тогда @@ -3264,14 +3368,14 @@ КонецФункции -Функция ТаблицаПравилКонвертации(XMLСхема, МенеджерОбмена , НаправлениеОбмена, ПравилаОбработкиДанных, ВерсияФорматаМенеджераОбмена) +Функция ТаблицаПравилКонвертации(КомпонентыОбмена) // Инициализация таблицы правил конвертации. - ПравилаКонвертации = КоллекцияПравилКонвертации(ВерсияФорматаМенеджераОбмена); + ПравилаКонвертации = КоллекцияПравилКонвертации(КомпонентыОбмена.ВерсияФорматаМенеджераОбмена); - МенеджерОбмена.ЗаполнитьПравилаКонвертацииОбъектов(НаправлениеОбмена, ПравилаКонвертации); + КомпонентыОбмена.МенеджерОбмена.ЗаполнитьПравилаКонвертацииОбъектов(КомпонентыОбмена.НаправлениеОбмена, ПравилаКонвертации); - Если НаправлениеОбмена = "Получение" Тогда + Если КомпонентыОбмена.НаправлениеОбмена = "Получение" Тогда // Отберем строки правил конвертации, у которых не заполнен реквизит "РазрешитьСоздаватьОбъектИзСтруктуры". ПараметрыОтбора = Новый Структура("РазрешитьСоздаватьОбъектИзСтруктуры", Неопределено); @@ -3286,7 +3390,7 @@ // иначе заполняем значением "Ложь". Для Каждого СтрокаОбработки Из СтрокиДляОбработки Цикл СтрокаОбработки.РазрешитьСоздаватьОбъектИзСтруктуры = Истина; - СтрокаПравилОбработкиДанных = ПравилаОбработкиДанных.Найти(СтрокаОбработки.ОбъектФормата, "ОбъектВыборкиФормат"); + СтрокаПравилОбработкиДанных = КомпонентыОбмена.ПравилаОбработкиДанных.Найти(СтрокаОбработки.ОбъектФормата, "ОбъектВыборкиФормат"); Если СтрокаПравилОбработкиДанных <> Неопределено Тогда МассивИспользуемыхПКО = СтрокаПравилОбработкиДанных.ИспользуемыеПКО; СтрокаОбработки.РазрешитьСоздаватьОбъектИзСтруктуры = МассивИспользуемыхПКО.Найти(СтрокаОбработки.ИмяПКО) = Неопределено; @@ -3296,6 +3400,9 @@ КонецЕсли; // Добавляем служебные поля таблицы правил конвертации. + ПравилаКонвертации.Колонки.Добавить("Расширения", Новый ОписаниеТипов("Соответствие")); + ПравилаКонвертации.Колонки.Добавить("ПространствоИмен", Новый ОписаниеТипов("Строка")); + ПравилаКонвертации.Колонки.Добавить("ТипXDTO"); ПравилаКонвертации.Колонки.Добавить("ТипСсылкиXDTO"); ПравилаКонвертации.Колонки.Добавить("ТипКлючевыхСвойствОбъектаXDTO"); @@ -3323,6 +3430,7 @@ ПравилаКонвертации.Колонки.Добавить("ЕстьОбработчикПриКонвертацииДанныхXDTO", Новый ОписаниеТипов("Булево")); ПравилаКонвертации.Колонки.Добавить("ЕстьОбработчикПередЗаписьюПолученныхДанных", Новый ОписаниеТипов("Булево")); ПравилаКонвертации.Колонки.Добавить("ЕстьОбработчикПослеЗагрузкиВсехДанных", Новый ОписаниеТипов("Булево")); + ПравилаКонвертации.Колонки.Добавить("ЕстьОбработчикАлгоритмПоиска", Новый ОписаниеТипов("Булево")); РазрешитьПроведениеДокумента = Метаданные.СвойстваОбъектов.Проведение.Разрешить; @@ -3332,15 +3440,35 @@ ИндексСтроки = КоличествоСтрок - НомерИтерации; ПравилоКонвертации = ПравилаКонвертации.Получить(ИндексСтроки); + ЭтоБазоваяСхема = ЭтоБазоваяСхема(КомпонентыОбмена, ПравилоКонвертации.ПространствоИмен); + ПространствоИмен = ?(ЭтоБазоваяСхема, КомпонентыОбмена.XMLСхема, ПравилоКонвертации.ПространствоИмен); + ЕстьРасширения = ПравилоКонвертации.Расширения.Количество() > 0; + Если ЗначениеЗаполнено(ПравилоКонвертации.ОбъектФормата) Тогда - ПравилоКонвертации.ТипXDTO = ФабрикаXDTO.Тип(XMLСхема, ПравилоКонвертации.ОбъектФормата); + ПравилоКонвертации.ТипXDTO = ФабрикаXDTO.Тип(ПространствоИмен, ПравилоКонвертации.ОбъектФормата); Если ПравилоКонвертации.ТипXDTO = Неопределено Тогда ПравилаКонвертации.Удалить(ПравилоКонвертации); Продолжить; КонецЕсли; КонецЕсли; - Если НаправлениеОбмена = "Получение" Тогда + Если ЭтоБазоваяСхема И ЕстьРасширения Тогда + РасширенияКУдалению = Новый Массив; + Для Каждого Расширение Из ПравилоКонвертации.Расширения Цикл + ТипXDTO = ФабрикаXDTO.Тип(Расширение.Ключ, ПравилоКонвертации.ОбъектФормата); + Если ТипXDTO = Неопределено Тогда + РасширенияКУдалению.Добавить(Расширение.Ключ); + Иначе + Расширение.Значение.ТипXDTO = ТипXDTO; + КонецЕсли; + КонецЦикла; + + Для Каждого РасширениеКУдалению Из РасширенияКУдалению Цикл + ПравилоКонвертации.Расширения.Удалить(РасширениеКУдалению); + КонецЦикла; + КонецЕсли; + + Если КомпонентыОбмена.НаправлениеОбмена = "Получение" Тогда МетаданныеОбъекта = ПравилоКонвертации.ОбъектДанных; @@ -3352,22 +3480,18 @@ // Реквизиты объекта получаемых данных. РеквизитыМассив = Новый Массив; - - Для Сч = 0 По МетаданныеОбъекта.СтандартныеРеквизиты.Количество() - 1 Цикл - Реквизит = МетаданныеОбъекта.СтандартныеРеквизиты[Сч]; // ОписаниеСтандартногоРеквизита + Для Каждого Реквизит Из МетаданныеОбъекта.СтандартныеРеквизиты Цикл Если Реквизит.Имя = "Наименование" - Или Реквизит.Имя = "Код" - Или Реквизит.Имя = "ЭтоГруппа" - Или Реквизит.Имя = "Родитель" - Или Реквизит.Имя = "Владелец" - Или Реквизит.Имя = "Дата" - Или Реквизит.Имя = "Номер" Тогда + ИЛИ Реквизит.Имя = "Код" + ИЛИ Реквизит.Имя = "ЭтоГруппа" + ИЛИ Реквизит.Имя = "Родитель" + ИЛИ Реквизит.Имя = "Владелец" + ИЛИ Реквизит.Имя = "Дата" + ИЛИ Реквизит.Имя = "Номер" Тогда РеквизитыМассив.Добавить(Реквизит.Имя); КонецЕсли; КонецЦикла; - - Для Сч = 0 По МетаданныеОбъекта.Реквизиты.Количество() - 1 Цикл - Реквизит = МетаданныеОбъекта.Реквизиты[Сч]; // ОбъектМетаданныхРеквизит + Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл РеквизитыМассив.Добавить(Реквизит.Имя); КонецЦикла; @@ -3376,7 +3500,7 @@ ПравилоКонвертации.ЕстьОбработчикПриКонвертацииДанныхXDTO = Не ПустаяСтрока(ПравилоКонвертации.ПриКонвертацииДанныхXDTO); ПравилоКонвертации.ЕстьОбработчикПередЗаписьюПолученныхДанных = Не ПустаяСтрока(ПравилоКонвертации.ПередЗаписьюПолученныхДанных); ПравилоКонвертации.ЕстьОбработчикПослеЗагрузкиВсехДанных = Не ПустаяСтрока(ПравилоКонвертации.ПослеЗагрузкиВсехДанных); - + ПравилоКонвертации.ЕстьОбработчикАлгоритмПоиска = Не ПустаяСтрока(ПравилоКонвертации.АлгоритмПоиска); Иначе ПравилоКонвертации.ЕстьОбработчикПриОтправкеДанных = Не ПустаяСтрока(ПравилоКонвертации.ПриОтправкеДанных); КонецЕсли; @@ -3405,7 +3529,6 @@ КонецЕсли; - ПравилоКонвертации.ЭтоСсылочныйТип = ПравилоКонвертации.ЭтоДокумент Или ПравилоКонвертации.ЭтоСправочник Или ПравилоКонвертации.ЭтоПланВидовХарактеристик @@ -3450,7 +3573,7 @@ ПравилоКонвертации.ТипСсылкиXDTO = СвойствоСсылкаXDTO.Тип; Если ПравилоКонвертации.ЭтоСсылочныйТип - И НаправлениеОбмена = "Отправка" Тогда + И КомпонентыОбмена.НаправлениеОбмена = "Отправка" Тогда ПКСДляСсылки = ТаблицаПКС.Добавить(); ПКСДляСсылки.СвойствоКонфигурации = "Ссылка"; ПКСДляСсылки.СвойствоФормата = "Ссылка"; @@ -3460,6 +3583,43 @@ КонецЕсли; КонецЕсли; + + Если ЭтоБазоваяСхема И ЕстьРасширения Тогда + Для Каждого Расширение Из ПравилоКонвертации.Расширения Цикл + КлючевыеСвойства = Расширение.Значение.ТипXDTO.Свойства.Получить("КлючевыеСвойства"); + + Если КлючевыеСвойства <> Неопределено Тогда + + ТипКлючевыхСвойствОбъектаXDTO = КлючевыеСвойства.Тип; + Расширение.Значение.ТипКлючевыхСвойствОбъектаXDTO = ТипКлючевыхСвойствОбъектаXDTO; + + СвойстваКлючевыхСвойств = Новый Массив; + ЗаполнитьСписокСвойствОбъектаXDTO(ТипКлючевыхСвойствОбъектаXDTO, СвойстваКлючевыхСвойств); + + ПКСДляДобавления = Новый Массив; + + ТаблицаПКС = ПравилоКонвертации.Свойства; + Для Каждого ПКС Из ТаблицаПКС Цикл + + Если СвойстваКлючевыхСвойств.Найти(ПКС.СвойствоФормата) <> Неопределено Тогда + ПКС.ОбработкаКлючевогоСвойства = Истина; + + Если ПравилоКонвертации.ТипXDTO.Свойства.Получить(ПКС.СвойствоФормата) <> Неопределено Тогда + ПКСДляДобавления.Добавить(ПКС); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Для Каждого ПКС Из ПКСДляДобавления Цикл + НовоеПКС = ТаблицаПКС.Добавить(); + ЗаполнитьЗначенияСвойств(НовоеПКС, ПКС, , "ОбработкаКлючевогоСвойства"); + КонецЦикла; + + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; Если ПравилоКонвертации.ВариантИдентификации = "ПоПолямПоиска" @@ -3485,13 +3645,13 @@ КонецЕсли; - Если ВерсияФорматаМенеджераОбмена = "1" Тогда + Если КомпонентыОбмена.ВерсияФорматаМенеджераОбмена = "1" Тогда ИнициализироватьСвойстваТабличныхЧастей(ПравилоКонвертации, "СвойстваТабличныхЧастейОбработанные"); Для Каждого ТЧ Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл СтрокаСвойстваТабличныхЧастей = ПравилоКонвертации.СвойстваТабличныхЧастейОбработанные.Добавить(); СтрокаСвойстваТабличныхЧастей.ИспользуетсяАлгоритмКонвертации = Истина; СтрокаСвойстваТабличныхЧастей.Свойства = ТЧ.Значение; - Если НаправлениеОбмена = "Получение" Тогда + Если КомпонентыОбмена.НаправлениеОбмена = "Получение" Тогда СтрокаСвойстваТабличныхЧастей.ТЧКонфигурации = ТЧ.Ключ; Иначе СтрокаСвойстваТабличныхЧастей.ТЧФормата = ТЧ.Ключ; @@ -3510,7 +3670,7 @@ КонецЕсли; КонецЦикла; - Если ВерсияФорматаМенеджераОбмена = "1" Тогда + Если КомпонентыОбмена.ВерсияФорматаМенеджераОбмена = "1" Тогда ПравилаКонвертации.Колонки.Удалить(ПравилаКонвертации.Колонки.СвойстваТабличныхЧастей); ПравилаКонвертации.Колонки.Добавить("СвойстваТабличныхЧастей", Новый ОписаниеТипов("ТаблицаЗначений")); Для Каждого ПравилоКонвертации Из ПравилаКонвертации Цикл @@ -3533,14 +3693,18 @@ ПравилаКонвертации.Индексы.Добавить("ИмяПКО"); ПравилаКонвертации.Индексы.Добавить("ТипДанных"); ПравилаКонвертации.Индексы.Добавить("ТипXDTO"); - Если НаправлениеОбмена = "Получение" Тогда + Если КомпонентыОбмена.НаправлениеОбмена = "Получение" Тогда ПравилаКонвертации.Индексы.Добавить("ТипСсылкиXDTO"); КонецЕсли; Возврат ПравилаКонвертации; + КонецФункции -Функция ТаблицаПравилКонвертацииПредопределенныхДанных(XMLСхема, МенеджерОбмена , НаправлениеОбмена) +Функция ТаблицаПравилКонвертацииПредопределенныхДанных(КомпонентыОбмена) + + XMLСхема = КомпонентыОбмена.XMLСхема; + ВерсияФорматаМенеджераОбмена = КомпонентыОбмена.ВерсияФорматаМенеджераОбмена; // Инициализация таблицы правил конвертации. ПравилаКонвертации = Новый ТаблицаЗначений; @@ -3551,13 +3715,11 @@ ПравилаКонвертации.Колонки.Добавить("ИмяПКПД", Новый ОписаниеТипов("Строка")); - МенеджерОбмена.ЗаполнитьПравилаКонвертацииПредопределенныхДанных(НаправлениеОбмена, ПравилаКонвертации); + КомпонентыОбмена.МенеджерОбмена.ЗаполнитьПравилаКонвертацииПредопределенныхДанных(КомпонентыОбмена.НаправлениеОбмена, ПравилаКонвертации); Для Каждого ПравилоКонвертации Из ПравилаКонвертации Цикл - ПравилоКонвертации.ТипXDTO = ФабрикаXDTO.Тип(XMLСхема, ПравилоКонвертации.ТипXDTO); ПравилоКонвертации.ТипДанных = Тип(ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ТипДанных)); - КонецЦикла; ПравилаКонвертации.Индексы.Добавить("ИмяПКПД"); @@ -3581,6 +3743,61 @@ #Область ОтправкаДанных +Процедура ДополнитьОбъектXDTO(ОбъектXDTO, Знач Свойство, Знач Значение) + + Если Не ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ОбъектXDTO, Свойство.Имя) Тогда + ОбъектXDTO.Добавить( + Свойство.Форма, + Свойство.URIПространстваИмен, + Свойство.Имя, + Значение); + + Возврат; + КонецЕсли; + + Если ЭтоТаблицаОбъекта(Свойство) Тогда + ИмяСвойстваСтроки = Свойство.Тип.Свойства[0].Имя; + Для ИндексСтроки = 0 По Значение[ИмяСвойстваСтроки].Количество() - 1 Цикл + СтрокаXDTO = ОбъектXDTO[Свойство.Имя][ИмяСвойстваСтроки].Получить(ИндексСтроки); + РасширениеСтрокиXDTO = Значение[ИмяСвойстваСтроки].Получить(ИндексСтроки); + + Для Каждого СвойствоСтроки Из РасширениеСтрокиXDTO.Свойства() Цикл + Если ТипЗнч(СвойствоСтроки.Тип) = Тип("ТипЗначенияXDTO") Тогда + ЗначениеСвойстваСтроки = ФабрикаXDTO.Создать(СвойствоСтроки.Тип, + РасширениеСтрокиXDTO.Получить(СвойствоСтроки.Имя)); + Иначе + ЗначениеСвойстваСтроки = РасширениеСтрокиXDTO.Получить(СвойствоСтроки.Имя); + КонецЕсли; + + Если ЗначениеСвойстваСтроки = Неопределено Тогда + Продолжить; + КонецЕсли; + + СтрокаXDTO.Добавить( + СвойствоСтроки.Форма, + СвойствоСтроки.URIПространстваИмен, + СвойствоСтроки.Имя, + ЗначениеСвойстваСтроки); + КонецЦикла; + КонецЦикла; + ИначеЕсли ТипЗнч(Свойство.Тип) = Тип("ТипОбъектаXDTO") Тогда + Для Каждого ДочернееСвойство Из Значение.Свойства() Цикл + Подзначение = Значение.Получить(ДочернееСвойство.Имя); + Если Подзначение = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ТипЗнч(ДочернееСвойство.Тип) = Тип("ТипЗначенияXDTO") Тогда + ДополнитьОбъектXDTO(ОбъектXDTO[Свойство.Имя], ДочернееСвойство, + ФабрикаXDTO.Создать(ДочернееСвойство.Тип, Подзначение)); + Иначе + ДополнитьОбъектXDTO(ОбъектXDTO[Свойство.Имя], ДочернееСвойство, Подзначение); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + Процедура ВыполнитьВыгрузкуЗарегистрированныхДанных(КомпонентыОбмена, НомерСообщения) УзелДляОбмена = КомпонентыОбмена.УзелКорреспондента; @@ -3774,9 +3991,9 @@ КонецПроцедуры // Параметры: -// КомпонентыОбмена - структура, содержит все ключевые данные для обмена (ПКО, ПКПД, ПОД и т.д.). +// КомпонентыОбмена - структура - содержит все ключевые данные для обмена (ПКО, ПКПД, ПОД и т.д.). // Ссылка - удаленный объект. -// ПравилоКонвертации - Строка таблицы правил конвертации объектов, в соответствии с которой выполняется преобразование. +// ПравилоКонвертации - строка таблицы правил конвертации объектов, в соответствии с которой выполняется преобразование. // Процедура ВыгрузитьУдаление(КомпонентыОбмена, Ссылка, ПравилоКонвертации = Неопределено) @@ -3942,6 +4159,18 @@ Возврат Ложь; КонецФункции +Функция ЭтоТипТаблицыОбъекта(Знач ТипСвойстваXDTO) + + Если ТипЗнч(ТипСвойстваXDTO) = Тип("ТипОбъектаXDTO") + И ТипСвойстваXDTO.Свойства.Количество() = 1 Тогда + + Возврат ТипСвойстваXDTO.Свойства[0].ВерхняяГраница <> 1; + + КонецЕсли; + + Возврат Ложь; +КонецФункции + Процедура ПолучитьЗначениеВложенныхСвойств(ИсточникСвойства, ВложенныеСвойства, ЗначениеСвойства) ТекущийИсточникСвойства = ИсточникСвойства; ТекущееЗначениеСвойства = Неопределено; @@ -4125,7 +4354,8 @@ // * ПоддерживаемыеВерсии - Массив из Строка - коллекция поддерживаемых версий формата. // * ПоддерживаемыеОбъекты - ТаблицаЗначений - коллекция поддерживаемых объектов формата. // * Префикс - Строка - префикс информационной базы корреспондента. -// * УзелКорреспондента - ПланОбменаСсылка, Неопределено - узел плана обмена. +// * УзелКорреспондента - ПланОбменаСсылка +// - Неопределено - узел плана обмена. // Функция ПараметрыЗаголовкаСообщенияОбмена() Экспорт @@ -4234,11 +4464,11 @@ КонецПроцедуры // Параметры: -// ОбъектXDTO - ОбъектXDTO - -// ТипXDTO - ТипОбъектаXDTO - -// Контекст - Структура - -// Отказ - Булево - -// ОписаниеОшибки - Строка - +// ОбъектXDTO - ОбъектXDTO +// ТипXDTO - ТипОбъектаXDTO +// Контекст - Структура +// Отказ - Булево +// ОписаниеОшибки - Строка // Процедура ПроверитьОбъектXDTOПоСхеме(ОбъектXDTO, ТипXDTO, Контекст, Отказ, ОписаниеОшибки) @@ -4385,33 +4615,27 @@ #Область КонвертацияXDTOВСтруктуру -Процедура КонвертацияСвойстваXDTOВЭлементСтруктуры(Источник, Свойство, Приемник, ИмяДляСвойстваСоставногоТипа = "") +Процедура КонвертацияСвойстваXDTOВЭлементСтруктуры(Источник, Свойство, Приемник, + КомпонентыОбмена, ИмяДляСвойстваСоставногоТипа = "", ТипСвойства = Неопределено) Если Не Источник.Установлено(Свойство) Тогда Возврат; КонецЕсли; + ПространствоИменСвойства = Свойство.URIПространстваИмен; + + Если Не ПространствоИменАктивно(КомпонентыОбмена, ПространствоИменСвойства) Тогда + Возврат; + КонецЕсли; + ИмяСвойства = ?(ИмяДляСвойстваСоставногоТипа = "", Свойство.Имя, ИмяДляСвойстваСоставногоТипа); ЗначениеXDTO = Источник.ПолучитьXDTO(Свойство); Попытка - Если ТипЗнч(ЗначениеXDTO) = Тип("ЗначениеXDTO") Тогда - Значение = ПрочитатьЗначениеXDTO(ЗначениеXDTO); - - Если ТипЗнч(Приемник) = Тип("Структура") Тогда - Приемник.Вставить(ИмяСвойства, Значение); - Иначе - - Если ТипЗнч(Приемник) = Тип("СтрокаТаблицыЗначений") - И Приемник.Владелец().Колонки.Найти(ИмяСвойства) = Неопределено Тогда - Возврат; - КонецЕсли; - - Приемник[ИмяСвойства] = Значение; - КонецЕсли; + КонвертироватьПростоеСвойства(Приемник, ИмяСвойства, ЗначениеXDTO); ИначеЕсли ТипЗнч(ЗначениеXDTO) = Тип("ОбъектXDTO") Тогда @@ -4422,93 +4646,32 @@ // - набор общих свойств // - свойство составного типа. - Если ИмяСвойства = "AdditionalInfo" Тогда // Дополнительная информация + ТипЗначенияXDTO = ?(ТипСвойства = Неопределено, ТипЗначенияСвойстваXDTO(КомпонентыОбмена, Свойство, ЗначениеXDTO), ТипСвойства); + + КлассЗначенияXDTO = ИмяКлассаЗначенияXDTO(Свойство, ТипЗначенияXDTO); + + Если КлассЗначенияXDTO = КлассПроизвольныеДанные() Тогда // Дополнительная информация Значение = СериализаторXDTO.ПрочитатьXDTO(ЗначениеXDTO); Приемник.Вставить(ИмяСвойства, Значение); - ИначеЕсли ЭтоТаблицаОбъекта(Свойство) Тогда + ИначеЕсли КлассЗначенияXDTO = КлассТаблицаОбъекта() Тогда - // Инициализируем таблицу значений, которая отображает табличную часть объекта. - Значение = ТаблицаОбъектаПоТипу(Свойство.Тип.Свойства[0].Тип); + КонвертироватьТаблицуОбъекта(Приемник, КомпонентыОбмена, ИмяСвойства, Свойство, ТипЗначенияXDTO, ЗначениеXDTO); - ТабличнаяЧастьXDTO = Источник.ПолучитьXDTO(ИмяСвойства).ПолучитьСписок("Строка"); + ИначеЕсли КлассЗначенияXDTO = КлассКлючевыеСвойства() Тогда - Для Индекс = 0 По ТабличнаяЧастьXDTO.Количество() - 1 Цикл - - СтрокаТЧ = Значение.Добавить(); - СтрокаXDTO = ТабличнаяЧастьXDTO.ПолучитьXDTO(Индекс); - Для Каждого СвойствоСтрокиТЧ Из СтрокаXDTO.Свойства() Цикл - - КонвертацияСвойстваXDTOВЭлементСтруктуры(СтрокаXDTO, СвойствоСтрокиТЧ, СтрокаТЧ); - - КонецЦикла; - - КонецЦикла; + КонвертироватьКлючевоеСвойство(Приемник, КомпонентыОбмена, ИмяСвойства, ТипЗначенияXDTO, ЗначениеXDTO); - Приемник.Вставить(ИмяСвойства, Значение); + ИначеЕсли КлассЗначенияXDTO = КлассОбщиеСвойства() Тогда - ИначеЕсли СтрНайти(ЗначениеXDTO.Тип().Имя, "КлючевыеСвойства") > 0 Тогда - - Значение = Новый Структура("ЭтоНаборКлючевыхСвойств"); - Значение.Вставить("ТипЗначения", СтрЗаменить(ЗначениеXDTO.Тип().Имя, "КлючевыеСвойства", "")); - Для Каждого КлючевоеСвойство Из ЗначениеXDTO.Свойства() Цикл - КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, КлючевоеСвойство, Значение); - КонецЦикла; - - - Если ТипЗнч(Приемник) = Тип("Структура") Тогда - Приемник.Вставить(ИмяСвойства, Значение); - Иначе - Приемник[ИмяСвойства] = Значение; - КонецЕсли; - - ИначеЕсли СтрНайти(ЗначениеXDTO.Тип().Имя, "ОбщиеСвойства") > 0 Тогда - Если ТипЗнч(Приемник) = Тип("Структура") Тогда - ПриемникГруппыСвойств = Новый Структура; - Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл - - КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, ПодСвойство, ПриемникГруппыСвойств); - - КонецЦикла; - Приемник.Вставить(ИмяСвойства, ПриемникГруппыСвойств); - // По возможности свойства из группы свойств надо продублировать в приемнике, - // Для совместимости с существующими правилами и алгоритмами. - ЕстьКлючевыеСвойства = Приемник.Свойство("КлючевыеСвойства"); - Для Каждого СвойствоГруппы Из ПриемникГруппыСвойств Цикл - ИмяПодСвойства = СвойствоГруппы.Ключ; - Если НЕ Приемник.Свойство(ИмяПодСвойства) - И НЕ (ЕстьКлючевыеСвойства И Приемник.КлючевыеСвойства.Свойство(ИмяПодСвойства)) Тогда - Приемник.Вставить(ИмяПодСвойства, СвойствоГруппы.Значение); - КонецЕсли; - КонецЦикла; - Иначе - - Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл - - КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, ПодСвойство, Приемник); - - КонецЦикла; - - КонецЕсли; + КонвертироватьОбщееСвойство(Приемник, КомпонентыОбмена, ИмяСвойства, ТипЗначенияXDTO, ЗначениеXDTO); Иначе - // Свойство составного типа - Значение = Неопределено; - Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл - - Если НЕ ЗначениеXDTO.Установлено(ПодСвойство) Тогда - Продолжить; - КонецЕсли; - - КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, ПодСвойство, Приемник, ИмяСвойства); - Прервать; - - КонецЦикла; + КонвертироватьСоставноеСвойство(Приемник, КомпонентыОбмена, ИмяСвойства, ТипЗначенияXDTO, ЗначениеXDTO); КонецЕсли; - КонецЕсли; Исключение ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -4580,6 +4743,217 @@ Возврат Результат; КонецФункции +// Определение типа свойства +// Если свойства относится к пространству имен расширения - тип у него не будет определен +// т.к. объект xdto зачитывается только по базовой схеме. +// Поэтому для получения типа значения свойства нужно обратиться к правилам конвертации +// и получить ТипXDTO расширенных свойств. +// +Функция ТипЗначенияСвойстваXDTO(Знач КомпонентыОбмена, Знач СвойствоXDTO, ЗначениеXDTO) + + ПространствоИменСвойства = СвойствоXDTO.URIПространстваИмен; + Результат = ЗначениеXDTO.Тип(); + + Если ЭтоБазоваяСхема(КомпонентыОбмена, ПространствоИменСвойства) Тогда + Возврат Результат; + КонецЕсли; + + ТипОбъектаXDTO = СвойствоXDTO.ОбъектВладелец.Тип(); + Если ЭтоБазоваяСхема(КомпонентыОбмена, ТипОбъектаXDTO.URIПространстваИмен) Тогда + РасширениеОбъекта = ПКОПоТипуОбъектаXDTO(КомпонентыОбмена, ТипОбъектаXDTO).Расширения.Получить(ПространствоИменСвойства); + Если РасширениеОбъекта <> Неопределено Тогда + Результат = РасширениеОбъекта.ТипXDTO.Свойства.Получить(СвойствоXDTO.Имя).Тип; + КонецЕсли; + + Возврат Результат; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Определение класса для значения свойства. +// Класс используется для выбора алгоритма преобразования в структуру +// +Функция ИмяКлассаЗначенияXDTO(Знач СвойствоXDTO, Знач ТипЗначенияXDTO) + + Если СвойствоXDTO.Имя = "AdditionalInfo" Тогда + Возврат КлассПроизвольныеДанные(); + ИначеЕсли ЭтоТипТаблицыОбъекта(ТипЗначенияXDTO) Тогда + Возврат КлассТаблицаОбъекта(); + ИначеЕсли СтрНайти(ТипЗначенияXDTO.Имя, "КлючевыеСвойства") > 0 Тогда + Возврат КлассКлючевыеСвойства(); + ИначеЕсли СтрНайти(ТипЗначенияXDTO.Имя, "ОбщиеСвойства") > 0 Тогда + Возврат КлассОбщиеСвойства(); + КонецЕсли; + + Возврат КлассСоставныеСвойства(); + +КонецФункции + +// Инкапсуляция алгоритмов преобразования свойств объекта XDTO в элементы структуры +// +Процедура КонвертироватьПростоеСвойства(Приемник,Знач ИмяСвойства, Знач ЗначениеXDTO) + + Значение = ПрочитатьЗначениеXDTO(ЗначениеXDTO); + + Если ТипЗнч(Приемник) = Тип("Структура") Тогда + Приемник.Вставить(ИмяСвойства, Значение); + Иначе + + Если ТипЗнч(Приемник) = Тип("СтрокаТаблицыЗначений") + И Приемник.Владелец().Колонки.Найти(ИмяСвойства) = Неопределено Тогда + Возврат; + КонецЕсли; + + Приемник[ИмяСвойства] = Значение; + КонецЕсли; + +КонецПроцедуры + +Процедура КонвертироватьТаблицуОбъекта(Приемник, Знач КомпонентыОбмена, Знач ИмяСвойства, Знач СвойствоXDTO, Знач ТипЗначенияXDTO, Знач ЗначениеXDTO) + + // Инициализируем таблицу значений, которая отображает табличную часть объекта. + Значение = ТаблицаОбъектаПоТипу(ТипЗначенияXDTO.Свойства[0].Тип); + + // Дополним таблицу свойствами активных расширений + Если ЭтоБазоваяСхема(КомпонентыОбмена, СвойствоXDTO.URIПространстваИмен) Тогда + РасширитьСвойстваТаблицыОбъекта(Значение, СвойствоXDTO.ТипВладелец.Имя, ИмяСвойства, КомпонентыОбмена.РасширенияФормата); + КонецЕсли; + + ТабличнаяЧастьXDTO = ЗначениеXDTO.Строка; + + Для Индекс = 0 По ТабличнаяЧастьXDTO.Количество() - 1 Цикл + + СтрокаТЧ = Значение.Добавить(); + СтрокаXDTO = ТабличнаяЧастьXDTO.ПолучитьXDTO(Индекс); + Для Каждого СвойствоСтрокиТЧ Из СтрокаXDTO.Свойства() Цикл + + КонвертацияСвойстваXDTOВЭлементСтруктуры(СтрокаXDTO, СвойствоСтрокиТЧ, СтрокаТЧ, КомпонентыОбмена); + + КонецЦикла; + + КонецЦикла; + + Приемник.Вставить(ИмяСвойства, Значение); + +КонецПроцедуры + +Процедура КонвертироватьОбщееСвойство(Приемник, Знач КомпонентыОбмена, Знач ИмяСвойства, Знач ТипЗначенияXDTO, Знач ЗначениеXDTO) + + Если ТипЗнч(Приемник) = Тип("Структура") Тогда + ПриемникГруппыСвойств = Новый Структура; + Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл + ОписаниеСвойства = ТипЗначенияXDTO.Свойства.Получить(ПодСвойство.Имя); + Если ОписаниеСвойства = Неопределено Тогда + Продолжить; + КонецЕсли; + + КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, ПодСвойство, ПриемникГруппыСвойств, КомпонентыОбмена,,ОписаниеСвойства.Тип); + + КонецЦикла; + Приемник.Вставить(ИмяСвойства, ПриемникГруппыСвойств); + // По возможности свойства из группы свойств надо продублировать в приемнике, + // Для совместимости с существующими правилами и алгоритмами. + ЕстьКлючевыеСвойства = Приемник.Свойство("КлючевыеСвойства"); + Для Каждого СвойствоГруппы Из ПриемникГруппыСвойств Цикл + ИмяПодСвойства = СвойствоГруппы.Ключ; + Если НЕ Приемник.Свойство(ИмяПодСвойства) + И НЕ (ЕстьКлючевыеСвойства И Приемник.КлючевыеСвойства.Свойство(ИмяПодСвойства)) Тогда + Приемник.Вставить(ИмяПодСвойства, СвойствоГруппы.Значение); + КонецЕсли; + КонецЦикла; + Иначе + + Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл + ОписаниеСвойства = ТипЗначенияXDTO.Свойства.Получить(ПодСвойство.Имя); + Если ОписаниеСвойства = Неопределено Тогда + Продолжить; + КонецЕсли; + + КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, ПодСвойство, Приемник, КомпонентыОбмена,,ОписаниеСвойства.Тип); + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Процедура КонвертироватьКлючевоеСвойство(Приемник, Знач КомпонентыОбмена, Знач ИмяСвойства, Знач ТипЗначенияXDTO, Знач ЗначениеXDTO) + + Значение = Новый Структура("ЭтоНаборКлючевыхСвойств"); + Значение.Вставить("ТипЗначения", СтрЗаменить(ТипЗначенияXDTO.Имя, "КлючевыеСвойства", "")); + + Для Каждого КлючевоеСвойство Из ЗначениеXDTO.Свойства() Цикл + ОписаниеСвойства = ТипЗначенияXDTO.Свойства.Получить(КлючевоеСвойство.Имя); + Если ОписаниеСвойства = Неопределено Тогда + Продолжить; + КонецЕсли; + + КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, КлючевоеСвойство, Значение, КомпонентыОбмена,,ОписаниеСвойства.Тип); + КонецЦикла; + + Если ТипЗнч(Приемник) = Тип("Структура") Тогда + Приемник.Вставить(ИмяСвойства, Значение); + Иначе + Приемник[ИмяСвойства] = Значение; + КонецЕсли; + +КонецПроцедуры + +Процедура КонвертироватьСоставноеСвойство(Приемник, Знач КомпонентыОбмена, Знач ИмяСвойства, Знач ТипЗначенияXDTO, Знач ЗначениеXDTO) + + Значение = Неопределено; + Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл + + ОписаниеСвойства = ТипЗначенияXDTO.Свойства.Получить(ПодСвойство.Имя); + Если ОписаниеСвойства = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если НЕ ЗначениеXDTO.Установлено(ПодСвойство) Тогда + Продолжить; + КонецЕсли; + + КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, ПодСвойство, Приемник, КомпонентыОбмена, ИмяСвойства, ОписаниеСвойства.Тип); + Прервать; + + КонецЦикла; + +КонецПроцедуры + +// Формализация классов значения свойств +// +Функция КлассКлючевыеСвойства() + + Возврат "КлючевыеСвойства"; + +КонецФункции + +Функция КлассОбщиеСвойства() + + Возврат "ОбщиеСвойства"; + +КонецФункции + +Функция КлассСоставныеСвойства() + + Возврат "СоставныеСвойства"; + +КонецФункции + +Функция КлассПроизвольныеДанные() + + Возврат "ПроизвольныеДанные"; + +КонецФункции + +Функция КлассТаблицаОбъекта() + + Возврат "ТаблицаОбъекта"; + +КонецФункции + #КонецОбласти #Область КонвертацияСтруктурыВДанныеИБ @@ -5076,8 +5450,8 @@ #Область ОтложенныеОперации // Параметры: -// ДанныеДляЗаписиВИБ - СправочникОбъект, -// ДокументОбъект - объект для записи. +// ДанныеДляЗаписиВИБ - СправочникОбъект +// - ДокументОбъект - объект для записи. // ПравилоКонвертации - СтрокаТаблицыЗначений - строка с правилом конвертации. // КомпонентыОбмена - см. ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена // @@ -5203,6 +5577,135 @@ #Область Прочее +Функция ПространствоИменАктивно(Знач КомпонентыОбмена, Знач ПространствоИмен) + + Возврат ЭтоБазоваяСхема(КомпонентыОбмена, ПространствоИмен) + Или КомпонентыОбмена.РасширенияФормата.Получить(ПространствоИмен) <> Неопределено; + +КонецФункции + +Процедура ВключитьПространствоИмен(КомпонентыОбмена, Знач ПространствоИмен, Знач Псевдоним = "") Экспорт + + Если ПустаяСтрока(ПространствоИмен) Тогда + Возврат; + КонецЕсли; + + КомпонентыОбмена.РасширенияФормата.Вставить(ПространствоИмен, Псевдоним); + +КонецПроцедуры + +Функция ЭтоБазоваяСхема(Знач КомпонентыОбмена, Знач ПространствоИмен) + + Возврат ПустаяСтрока(ПространствоИмен) + Или КомпонентыОбмена.БазовыеСхемыФормата.Получить(ПространствоИмен) <> Неопределено; + +КонецФункции + +Функция ДанныеРасширения(ДанныеXDTO, Знач ПространствоИмен, Знач СоздатьОбластьДанных = Истина) + + Если ПустаяСтрока(ПространствоИмен) Тогда + Возврат ДанныеXDTO; + КонецЕсли; + + Если Не ДанныеXDTO.Свойство("Расширения") Тогда + Если Не СоздатьОбластьДанных Тогда + Возврат Неопределено; + КонецЕсли; + + ДанныеXDTO.Вставить("Расширения", Новый Соответствие); + КонецЕсли; + + ДанныеXDTOРасширения = ДанныеXDTO.Расширения.Получить(ПространствоИмен); + Если ДанныеXDTOРасширения = Неопределено Тогда + ДанныеXDTO.Расширения.Вставить(ПространствоИмен, Новый Структура); + + ДанныеXDTOРасширения = ДанныеXDTO.Расширения.Получить(ПространствоИмен); + КонецЕсли; + + Возврат ДанныеXDTOРасширения; + +КонецФункции + +Процедура ОбъявитьПространстваИмен(ФайлОбмена, Знач КомпонентыОбмена) + + ФайлОбмена.ЗаписатьСоответствиеПространстваИмен("", КомпонентыОбмена.XMLСхема); + + Счетчик = 1; + ИспользованныеПсевдонимы = Новый Структура; + Для Каждого ПространствоИмен Из КомпонентыОбмена.РасширенияФормата Цикл + Если ПустаяСтрока(ПространствоИмен.Значение) + Или ИспользованныеПсевдонимы.Свойство(ПространствоИмен.Значение) Тогда + + ПространствоИмен.Значение = СтрЗаменить("ex%1", "%1", XMLСтрока(Счетчик)); + + Счетчик = Счетчик + 1; + КонецЕсли; + + ФайлОбмена.ЗаписатьСоответствиеПространстваИмен(ПространствоИмен.Значение, ПространствоИмен.Ключ); + + ИспользованныеПсевдонимы.Вставить(ПространствоИмен.Значение); + КонецЦикла; + +КонецПроцедуры + +Процедура РасширитьСвойстваТаблицыОбъекта(ТаблицаОбъекта, Знач ИмяОбъекта, Знач ИмяТаблицыОбъекта, Знач РасширенияФормата) + + Для Каждого Расширение Из РасширенияФормата Цикл + ТипОбъекта = ФабрикаXDTO.Тип(Расширение.Ключ, ИмяОбъекта); + Если ТипОбъекта = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТабличнаяЧасть = ТипОбъекта.Свойства.Получить(ИмяТаблицыОбъекта); + Если ТабличнаяЧасть = Неопределено Или Не ЭтоТаблицаОбъекта(ТабличнаяЧасть) Тогда + Продолжить; + КонецЕсли; + + Для Каждого Колонка Из ТабличнаяЧасть.Тип.Свойства[0].Тип.Свойства Цикл + Если СтрНайти(Колонка.Тип.Имя, "ОбщиеСвойства") > 0 Тогда + Для Каждого ПодКолонка Из Колонка.Тип.Свойства Цикл + Если ТаблицаОбъекта.Колонки.Найти(ПодКолонка.Имя) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ТаблицаОбъекта.Колонки.Добавить(ПодКолонка.Имя); + КонецЦикла; + Иначе + Если ТаблицаОбъекта.Колонки.Найти(Колонка.Имя) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ТаблицаОбъекта.Колонки.Добавить(Колонка.Имя); + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Функция ПКОПоТипуОбъектаXDTO(КомпонентыОбмена, ТипОбъектаXDTO, ВозвращатьПустоеЗначение = Ложь) + + ПравилоКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов.Найти(ТипОбъектаXDTO, "ТипXDTO"); + Если ПравилоКонвертации = Неопределено Тогда + + Если ВозвращатьПустоеЗначение Тогда + Возврат ПравилоКонвертации; + Иначе + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдено ПКО для типа объекта XDTO. + |Тип объекта XDTO: %1 + |Описание ошибки: %2'"), + Строка(ТипОбъектаXDTO), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецЕсли; + + Иначе + Возврат ПравилоКонвертации; + КонецЕсли; + +КонецФункции + Процедура ПрочитатьСообщениеОбмена(КомпонентыОбмена, Результаты, ТаблицыДляЗагрузки = Неопределено, РежимАнализа = Ложь) Попытка @@ -5248,7 +5751,7 @@ КонецЕсли; // Конвертируем ОбъектXDTO в Структуру. - ДанныеXDTO = ОбъектXDTOВСтруктуру(ОбъектXDTO); + ДанныеXDTO = ОбъектXDTOВСтруктуру(ОбъектXDTO, КомпонентыОбмена); ИспользованиеПКО = Новый Структура; Для Каждого ИмяПКО Из ПравилоОбработки.ИспользуемыеПКО Цикл @@ -5760,9 +6263,9 @@ // Устанавливает пометку удаления. // // Параметры: -// Объект - Объект для установки пометки. -// ПометкаУдаления - Булево - Флаг пометки удаления. -// ИмяТипаОбъекта - Строка - Тип объекта строкой. +// Объект - объект для установки пометки. +// ПометкаУдаления - Булево - флаг пометки удаления. +// ИмяТипаОбъекта - Строка - тип объекта строкой. // Процедура УстановитьПометкуУдаленияУОбъекта(Объект) @@ -5805,11 +6308,12 @@ // Снимает признак активности движений документа. // // Параметры: -// Объект - ДокументОбъект - Документ, движения которого необходимо обработать. -// Отправитель - ПланОбменаСсылка - Ссылка на узел плана обмена, который является отправителем данных. +// Объект - ДокументОбъект - документ, движения которого необходимо обработать. +// Отправитель - ПланОбменаСсылка - ссылка на узел плана обмена, который является отправителем данных. // // Возвращаемое значение: // Булево - признак успешного снятия активности с движений. +// Функция СделатьНеактивнымиДвиженияДокумента(Объект, Отправитель) Попытка @@ -5867,7 +6371,7 @@ МаксимальнаяОбщаяВерсия = МаксимальнаяОбщаяВерсияФормата( ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента), КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии); - + Если МаксимальнаяОбщаяВерсия <> НомерВерсииКорреспондента Тогда НачатьТранзакцию(); Попытка @@ -5896,6 +6400,9 @@ РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбновитьНастройкиКорреспондента(КомпонентыОбмена.УзелКорреспондента, "ПоддерживаемыеОбъекты", КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты); + РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбновитьНастройкиКорреспондента(КомпонентыОбмена.УзелКорреспондента, + "ПоддерживаемыеРасширения", + КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеРасширения); КонецПроцедуры @@ -5934,24 +6441,18 @@ КонецПроцедуры // Параметры: -// СтруктураНастроек - Структура - структура настроек: +// СтруктураНастроек - Структура: // * Формат - Строка - имя формата обмена. // * ПоддерживаемыеВерсии - Массив из Строка - коллекция поддерживаемых версий формата. // * ПоддерживаемыеОбъекты - см. ПоддерживаемыеОбъектыФормата // Header - ОбъектXDTO - заголовок сообщения обмена. // ФорматСодержитВерсию - Булево - Истина, если строка формата содержит номер версии. -// УзелОбмена - ПланОбменаСсылка, Неопределено - узел плана обмена. +// УзелОбмена - ПланОбменаСсылка +// - Неопределено - узел плана обмена. // Процедура ЗаполнитьСтруктуруНастроекXDTOКорреспондента(СтруктураНастроек, Header, ФорматСодержитВерсию = Истина, УзелОбмена = Неопределено) Экспорт - СтруктураНастроек.Вставить("Формат", ""); - СтруктураНастроек.Вставить("ПоддерживаемыеВерсии", Новый Массив); - СтруктураНастроек.Вставить("ПоддерживаемыеОбъекты", Новый ТаблицаЗначений); - - ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата( - СтруктураНастроек.ПоддерживаемыеОбъекты, "ОтправкаПолучение"); - Если ФорматСодержитВерсию Тогда ФорматОбмена = РазложитьФорматОбмена(Header.Format); СтруктураНастроек.Формат = ФорматОбмена.БазовыйФормат; @@ -5994,68 +6495,74 @@ Возврат; КонецЕсли; - Если Header.AvailableObjectTypes = Неопределено Тогда - Возврат; + Если Header.AvailableObjectTypes <> Неопределено Тогда + + Для Каждого ObjectType Из Header.AvailableObjectTypes.ObjectType Цикл + + Отправка = Новый Массив; + Получение = Новый Массив; + + Если Не ПустаяСтрока(ObjectType.Sending) Тогда + + Если ObjectType.Sending = "*" Тогда + Для Каждого Версия Из СтруктураНастроек.ПоддерживаемыеВерсии Цикл + Отправка.Добавить(СокрЛП(Версия)); + КонецЦикла; + Иначе + Для Каждого Версия Из СтрРазделить(ObjectType.Sending, ",", Ложь) Цикл + Отправка.Добавить(СокрЛП(Версия)); + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Если Не ПустаяСтрока(ObjectType.Receiving) Тогда + + Если ObjectType.Receiving = "*" Тогда + Для Каждого Версия Из СтруктураНастроек.ПоддерживаемыеВерсии Цикл + Получение.Добавить(СокрЛП(Версия)); + КонецЦикла; + Иначе + Для Каждого Версия Из СтрРазделить(ObjectType.Receiving, ",", Ложь) Цикл + Получение.Добавить(СокрЛП(Версия)); + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Для Каждого Версия Из Отправка Цикл + + СтрокаОбъект = СтруктураНастроек.ПоддерживаемыеОбъекты.Добавить(); + СтрокаОбъект.Объект = ObjectType.Name; + СтрокаОбъект.Версия = Версия; + СтрокаОбъект.Отправка = Истина; + + Индекс = Получение.Найти(Версия); + Если Не Индекс = Неопределено Тогда + СтрокаОбъект.Получение = Истина; + Получение.Удалить(Индекс); + КонецЕсли; + + КонецЦикла; + + Для Каждого Версия Из Получение Цикл + + СтрокаОбъект = СтруктураНастроек.ПоддерживаемыеОбъекты.Добавить(); + СтрокаОбъект.Объект = ObjectType.Name; + СтрокаОбъект.Версия = Версия; + СтрокаОбъект.Получение = Истина; + + КонецЦикла; + + КонецЦикла; + КонецЕсли; - Для Каждого ObjectType Из Header.AvailableObjectTypes.ObjectType Цикл - - Отправка = Новый Массив; - Получение = Новый Массив; - - Если Не ПустаяСтрока(ObjectType.Sending) Тогда - - Если ObjectType.Sending = "*" Тогда - Для Каждого Версия Из СтруктураНастроек.ПоддерживаемыеВерсии Цикл - Отправка.Добавить(СокрЛП(Версия)); - КонецЦикла; - Иначе - Для Каждого Версия Из СтрРазделить(ObjectType.Sending, ",", Ложь) Цикл - Отправка.Добавить(СокрЛП(Версия)); - КонецЦикла; - КонецЕсли; - - КонецЕсли; - - Если Не ПустаяСтрока(ObjectType.Receiving) Тогда - - Если ObjectType.Receiving = "*" Тогда - Для Каждого Версия Из СтруктураНастроек.ПоддерживаемыеВерсии Цикл - Получение.Добавить(СокрЛП(Версия)); - КонецЦикла; - Иначе - Для Каждого Версия Из СтрРазделить(ObjectType.Receiving, ",", Ложь) Цикл - Получение.Добавить(СокрЛП(Версия)); - КонецЦикла; - КонецЕсли; - - КонецЕсли; - - Для Каждого Версия Из Отправка Цикл - - СтрокаОбъект = СтруктураНастроек.ПоддерживаемыеОбъекты.Добавить(); - СтрокаОбъект.Объект = ObjectType.Name; - СтрокаОбъект.Версия = Версия; - СтрокаОбъект.Отправка = Истина; - - Индекс = Получение.Найти(Версия); - Если Не Индекс = Неопределено Тогда - СтрокаОбъект.Получение = Истина; - Получение.Удалить(Индекс); - КонецЕсли; - + Если Header.AvailableExtensions <> Неопределено Тогда + Для Каждого Extension Из Header.AvailableExtensions.Extension Цикл + СтруктураНастроек.ПоддерживаемыеРасширения.Вставить(Extension.Namespace, Extension.BaseVersion); КонецЦикла; - - Для Каждого Версия Из Получение Цикл - - СтрокаОбъект = СтруктураНастроек.ПоддерживаемыеОбъекты.Добавить(); - СтрокаОбъект.Объект = ObjectType.Name; - СтрокаОбъект.Версия = Версия; - СтрокаОбъект.Получение = Истина; - - КонецЦикла; - - КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -6188,11 +6695,11 @@ // // Параметры: // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// ПравилоОбработки - Строка таблицы правил обработки данных, соответствующая обрабатываемому ПОД -// ОбъектОбработки - Ссылка на объект, подлежащий обработке +// ПравилоОбработки - строка таблицы правил обработки данных, соответствующая обрабатываемому ПОД +// ОбъектОбработки - ссылка на объект, подлежащий обработке // либо структура, соответствующая объекту XDTO (при загрузке), // либо ссылка на объект информационной базы (при выгрузке). -// ИспользованиеПКО - Структура, определяющая по каким ПКО будет выгружен объект +// ИспользованиеПКО - Структура - определяющая по каким ПКО будет выгружен объект // ключи соответствуют именам ПКО, // значения - признак использования ПКО для конкретного объекта обработки. // @@ -6287,12 +6794,12 @@ // Функция - "обертка" вызова обработчика ПКО ПриОтправкеДанных. // // Параметры: -// ДанныеИБ - Ссылка на выгружаемый объект информационной базы. +// ДанныеИБ - ссылка на выгружаемый объект информационной базы. // Может быть также структура ключевых свойств, если выгружается не объект, а ссылка. -// ДанныеXDTO - Структура, в которую выгружаются данные. По составу идентичная объекту XDTO. -// ИмяОбработчика - Строка, имя процедуры-обработчика в модуле менеджера. +// ДанныеXDTO - Структура - в которую выгружаются данные. По составу идентичная объекту XDTO. +// ИмяОбработчика - Строка - имя процедуры-обработчика в модуле менеджера. // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// СтекВыгрузки - Массив, содержит ссылки на выгружаемые объекты с учетом вложенности. +// СтекВыгрузки - Массив - содержит ссылки на выгружаемые объекты с учетом вложенности. // Процедура ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, Знач ИмяОбработчика, КомпонентыОбмена, СтекВыгрузки) @@ -6327,10 +6834,10 @@ // Функция - "обертка" вызова обработчика ПКО ПриКонвертацииДанныхXDTO. // // Параметры: -// ПолученныеДанные - Объект информационной базы, в который происходит загрузка данных. -// ДанныеXDTO - Структура, из которой загружаются данные. По составу идентичная загружаемому объекту XDTO. +// ПолученныеДанные - объект информационной базы, в который происходит загрузка данных. +// ДанныеXDTO - Структура - из которой загружаются данные. По составу идентичная загружаемому объекту XDTO. // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// ИмяОбработчика - Строка, имя процедуры-обработчика в модуле менеджера. +// ИмяОбработчика - Строка - имя процедуры-обработчика в модуле менеджера. // Процедура ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена, Знач ИмяОбработчика) @@ -6364,8 +6871,8 @@ // Функция - "обертка" вызова обработчика ПКО ПередЗаписьюПолученныхДанных. // // Параметры: -// ПолученныеДанные - Объект информационной базы, в который происходит загрузка данных. -// ДанныеИБ - Объект информационной базы, который найден при идентификации загружаемых данных. +// ПолученныеДанные - объект информационной базы, в который происходит загрузка данных. +// ДанныеИБ - объект информационной базы, который найден при идентификации загружаемых данных. // Если объект соответствующий загружаемому не найден, ДанныеИБ = Неопределено. // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. // ИмяОбработчика - Строка - имя процедуры-обработчика в модуле менеджера. @@ -6404,6 +6911,35 @@ КонецПроцедуры +Процедура АлгоритмПоиска(ДанныеИБ, Знач ПолученныеДанные, Знач КомпонентыОбмена, Знач ИмяОбработчика) + + МенеджерОбмена = КомпонентыОбмена.МенеджерОбмена; + СтруктураПараметров = Новый Структура(); + СтруктураПараметров.Вставить("ДанныеИБ", ДанныеИБ); + СтруктураПараметров.Вставить("ПолученныеДанные", ПолученныеДанные); + СтруктураПараметров.Вставить("КомпонентыОбмена", КомпонентыОбмена); + + Попытка + МенеджерОбмена.ВыполнитьПроцедуруМодуляМенеджера(ИмяОбработчика, СтруктураПараметров); + Исключение + ТекстОшибки = Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Событие: %1. + |Обработчик: АлгоритмПоиска. + |Объект: %2. + | + |Ошибка выполнения обработчика. + |%3.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(?(ДанныеИБ <> Неопределено, ДанныеИБ, ПолученныеДанные)), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстОшибки; + КонецПопытки; + + ДанныеИБ = СтруктураПараметров.ДанныеИБ; + ПолученныеДанные = СтруктураПараметров.ПолученныеДанные; + КомпонентыОбмена = СтруктураПараметров.КомпонентыОбмена; + +КонецПроцедуры + #КонецОбласти #КонецОбласти @@ -6414,11 +6950,11 @@ // записи протокола выполнения (сообщения об ошибках и т.п.). // // Параметры: -// КСообщенияОбОшибках - Строка, содержит код ошибки. -// СтрокаОшибки - Строка, содержит строку модуля где возникла ошибка. +// КСообщенияОбОшибках - Строка - содержит код ошибки. +// СтрокаОшибки - Строка - содержит строку модуля где возникла ошибка. // // Возвращаемое значение: -// структура - Объект типа структура +// структура - объект типа структура // Функция ЗаписьПротоколаОбмена(КСообщенияОбОшибках = "", Знач СтрокаОшибки = "") @@ -6842,6 +7378,7 @@ // Возвращаемое значение: // Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны. // Меньше 0 если СтрокаВерсии1 < СтрокаВерсии2. +// Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0", СтрокаВерсии1); @@ -6896,6 +7433,21 @@ #Область Прочее +Функция СтруктураНастроекXDTO() Экспорт + + Результат = Новый Структура; + + Результат.Вставить("Формат", ""); + Результат.Вставить("ПоддерживаемыеВерсии", Новый Массив); + Результат.Вставить("ПоддерживаемыеРасширения", Новый Соответствие); + Результат.Вставить("ПоддерживаемыеОбъекты", Новый ТаблицаЗначений); + + ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(Результат.ПоддерживаемыеОбъекты, "ОтправкаПолучение"); + + Возврат Результат; + +КонецФункции + // Разбирает строку на две части: до подстроки разделителя и после. // // Параметры: @@ -6920,7 +7472,7 @@ Возврат(ПраваяЧасть); -КонецФункции // ОтделитьРазделителем() +КонецФункции // Возвращает строковое представление типа, свойственного для данных, // соответствующих переданному объекту метаданных. @@ -7142,8 +7694,8 @@ КонецПроцедуры // Параметры: -// ТипОбъектаXDTO - ТипОбъектаXDTO - -// Свойства - Массив из Строка - +// ТипОбъектаXDTO - ТипОбъектаXDTO +// Свойства - Массив из Строка // Процедура ЗаполнитьСписокСвойствОбъектаXDTO(ТипОбъектаXDTO, Свойства) diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl index e19eeb23d..cd2de0f4f 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl @@ -16,8 +16,9 @@ // и отсылает менеджеру сервиса сообщение об изменении с номером текущей области. // // Параметры: -// Данные - СправочникОбъект, ДокументОбъект - Объект для получения значений реквизитов и других свойств. -// Получатели - Массив - Массив элементов типа ПланОбменаСсылка.<Имя> - Узлы плана обмена. +// Данные - СправочникОбъект +// - ДокументОбъект - объект для получения значений реквизитов и других свойств. +// Получатели - Массив из ПланОбменаСсылка - узлы плана обмена. // ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. // Процедура ПослеОпределенияПолучателей(Данные, Получатели, ИмяПланаОбмена) Экспорт @@ -71,8 +72,8 @@ // Заполняет соответствие имен методов их псевдонимам для вызова из очереди заданий. // // Параметры: -// СоответствиеИменПсевдонимам - Соответствие - имена методов и соответствующие им псевдонимы. -// Ключ - Псевдоним метода, например ОчиститьОбластьДанных +// СоответствиеИменПсевдонимам - Соответствие - имена методов и соответствующие им псевдонимы: +// Ключ - псевдоним метода, например ОчиститьОбластьДанных // Значение - Имя метода для вызова, например РаботаВМоделиСервиса.ОчиститьОбластьДанных // В качестве значения можно указать Неопределено, в этом случае считается что имя // совпадает с псевдонимом. @@ -178,7 +179,7 @@ // Заполняет массив типов, исключаемых из выгрузки и загрузки данных. // // Параметры: -// Типы - Массив - объекты метаданных, исключаемые из выгрузки и загрузки. +// Типы - Массив из ОбъектМетаданных - объекты метаданных, исключаемые из выгрузки и загрузки. // Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт @@ -377,7 +378,7 @@ // Параметры: // Обработчики - ТаблицаЗначений - таблица для добавления обработчиков. Колонки: // * ВидДанных - Строка - код вида данных, обрабатываемый обработчиком. -// * КодОбработчика - Строка - Строка(20) - будет использоваться при восстановлении обработки данных после сбоя. +// * КодОбработчика - Строка - строка(20) - будет использоваться при восстановлении обработки данных после сбоя. // * Обработчик - ОбщийМодуль - модуль, содержащий следующие процедуры: // ДоступныНовыеДанные(Дескриптор, Загружать) Экспорт // ОбработатьНовыеДанные(Дескриптор, ПутьКФайлу) Экспорт @@ -418,7 +419,9 @@ Настройка = Настройки.Добавить(); Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.СинхронизацияДанныхСПриложениемВИнтернете; - Настройка.РаботаетСВнешнимиРесурсами = Истина; + Настройка.РаботаетСВнешнимиРесурсами = Истина; + Настройка.ДоступноВМоделиСервиса = Ложь; + Настройка.ДоступноВАвтономномРабочемМесте = Истина; КонецПроцедуры @@ -534,7 +537,8 @@ // // Параметры: // Параметры - Структура - структура параметров обработчиков: -// * РазделенныеОбработчики - ТаблицаЗначений, Неопределено - см. описание +// * РазделенныеОбработчики - ТаблицаЗначений +// - Неопределено - см. описание // функции НоваяТаблицаОбработчиковОбновления общего модуля ОбновлениеИнформационнойБазы. // В случае прямого вызова (не через механизм обновления // версии ИБ) передается Неопределено. @@ -810,10 +814,10 @@ // Генерирует код узла плана обмена для заданной области данных. // // Параметры: -// НомерОбласти - Число - Значение разделителя. +// НомерОбласти - Число - значение разделителя. // // Возвращаемое значение: -// Строка - Код узла плана обмена для заданной области. +// Строка - код узла плана обмена для заданной области. // Функция КодУзлаПланаОбменаВСервисе(Знач НомерОбласти) Экспорт @@ -897,7 +901,7 @@ // Выполнить действие сценария обмена, заданное строкой таблицы значений, для первой из двух обменивающихся ИБ. // // Параметры: -// ИндексСтрокиСценария - Число - Индекс строки в таблице СценарийОбменаДанными. +// ИндексСтрокиСценария - Число - индекс строки в таблице СценарийОбменаДанными. // СценарийОбменаДанными - ТаблицаЗначений. // Процедура ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе(ИндексСтрокиСценария, СценарийОбменаДанными) Экспорт @@ -1005,7 +1009,7 @@ // Выполнить действие сценария обмена, заданное строкой таблицы значений, для второй из двух обменивающихся ИБ. // // Параметры: -// ИндексСтрокиСценария - Число - Индекс строки в таблице СценарийОбменаДанными. +// ИндексСтрокиСценария - Число - индекс строки в таблице СценарийОбменаДанными. // СценарийОбменаДанными - ТаблицаЗначений. // Процедура ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе(ИндексСтрокиСценария, СценарийОбменаДанными) Экспорт @@ -1229,7 +1233,7 @@ // // Параметры: // Дескриптор - ОбъектXDTO Descriptor. -// Загружать - булево, возвращаемое. +// Загружать - булево - возвращаемое. // Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт @@ -1266,7 +1270,7 @@ // // Параметры: // Дескриптор - ОбъектXDTO Дескриптор. -// ПутьКФайлу - Строка или Неопределено. Полное имя извлеченного файла. Файл будет автоматически удален +// ПутьКФайлу - Строка или Неопределено - полное имя извлеченного файла. Файл будет автоматически удален // после завершения процедуры. Если в менеджере сервиса не был // указан файл - значение аргумента равно Неопределено. // @@ -1287,7 +1291,7 @@ // Возвращает идентификатор вида поставляемых данных для правил обмена данными // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИдентификаторВидаПоставляемыхДанных() @@ -1945,7 +1949,7 @@ // обменивающихся ИБ. // // Параметры: -// ИндексСтрокиСценария - Число - Индекс строки в таблице СценарийОбменаДанными. +// ИндексСтрокиСценария - Число - индекс строки в таблице СценарийОбменаДанными. // СценарийОбменаДанными - ТаблицаЗначений. // Процедура ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазеИзНеразделенногоСеанса( @@ -1975,7 +1979,7 @@ // обменивающихся ИБ. // // Параметры: -// ИндексСтрокиСценария - Число - Индекс строки в таблице СценарийОбменаДанными. +// ИндексСтрокиСценария - Число - индекс строки в таблице СценарийОбменаДанными. // СценарийОбменаДанными - ТаблицаЗначений. // Процедура ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазеИзНеразделенногоСеанса( diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl index 46716c6a0..2ac1fd9e5 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl @@ -47,7 +47,7 @@ // Доопределяет список предупреждений пользователю перед завершением работы системы. // // Параметры: -// Отказ - Булево - Признак отказа от выхода из программы. Если в теле процедуры-обработчика установить +// Отказ - Булево - признак отказа от выхода из программы. Если в теле процедуры-обработчика установить // данному параметру значение Истина, то работа с программой не будет завершена. // Предупреждения - Массив - в массив можно добавить элементы типа Структура, // свойства которой см. в СтандартныеПодсистемыКлиент.ПередЗавершениемРаботыСистемы. diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПереопределяемый/Module.bsl index bcd06fa95..0b93f9018 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПереопределяемый/Module.bsl @@ -16,7 +16,7 @@ // Используется в помощнике создания автономного рабочего места. // // Параметры: -// Версия - Строка - Версия требуемого приложения 1С:Предприятия в формате +// Версия - Строка - версия требуемого приложения 1С:Предприятия в формате // "<основная версия>.<младшая версия>.<релиз>.<дополнительный номер релиза>". // Например, "8.3.3.715". // @@ -30,8 +30,6 @@ // Процедура ПриСозданииАвтономногоРабочегоМеста() Экспорт - - КонецПроцедуры #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl index d6c50825d..f7dfb30f7 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl @@ -50,7 +50,7 @@ // Возвращает ссылку на объект WSПрокси сервиса обмена версии 1.0.6.5. // // Возвращаемое значение: -// WSПрокси - . +// WSПрокси // Функция ПолучитьWSПроксиСервисаОбмена() Экспорт @@ -84,10 +84,10 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка. -// СтрокаСообщенияОбОшибке - Строка - Текст сообщения об ошибке. +// СтрокаСообщенияОбОшибке - Строка - текст сообщения об ошибке. // // Возвращаемое значение: -// WSПрокси - . +// WSПрокси // Функция ПолучитьWSПроксиКорреспондента(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт @@ -104,10 +104,10 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка. -// СтрокаСообщенияОбОшибке - Строка - Текст сообщения об ошибке. +// СтрокаСообщенияОбОшибке - Строка - текст сообщения об ошибке. // // Возвращаемое значение: -// WSПрокси - . +// WSПрокси // Функция ПолучитьWSПроксиКорреспондента_2_0_1_6(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl index dfc3fead1..b6ecb9494 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl @@ -42,8 +42,8 @@ // ПолноеИмяТаблицы - Строка - имя таблицы, соответствующей объекту метаданных. // // Возвращаемое значение: -// СтруктураНастроек - Структура - свойства объекта метаданных; -// * Синоним - Строка - Синоним. +// СтруктураНастроек - Структура - свойства объекта метаданных: +// * Синоним - Строка - синоним. // * Иерархический - Строка - признак Иерархический. // Функция СвойстваОбъектаМетаданных(ПолноеИмяТаблицы) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl index a397eebfb..6881dd0bc 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -83,7 +83,7 @@ // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении сценария. // НастройкаВыполненияОбмена - СправочникСсылка.СценарииОбменовДанными - элемент справочника, // по значениям реквизитов которого будет выполнен обмен данными. -// НомерСтроки - Число - Номер строки по которой будет выполнен обмен данными. +// НомерСтроки - Число - номер строки по которой будет выполнен обмен данными. // Если не указан, то обмен данными будет выполнен для всех строк. // Процедура ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, НастройкаВыполненияОбмена, НомерСтроки = Неопределено) Экспорт @@ -133,21 +133,14 @@ // Функция НаборЗаписейРегистраПустой(СтруктураЗаписи, ИмяРегистра) Экспорт - МетаданныеРегистра = Метаданные.РегистрыСведений.Найти(ИмяРегистра); // ОбъектМетаданныхРегистрСведений - // Создаем набор записей регистра. НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); // РегистрСведенийНаборЗаписей - // Устанавливаем отбор по измерениям регистра. - Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл - - // Если задано значение в структуре, то отбор устанавливаем. - Если СтруктураЗаписи.Свойство(Измерение.Имя) Тогда - - НаборЗаписей.Отбор.Найти(Измерение.Имя).Установить(СтруктураЗаписи[Измерение.Имя]); - + Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл + ЗначениеОтбора = Неопределено; + Если СтруктураЗаписи.Свойство(ЭлементОтбора.Имя, ЗначениеОтбора) Тогда + ЭлементОтбора.Установить(ЗначениеОтбора); КонецЕсли; - КонецЦикла; НаборЗаписей.Прочитать(); @@ -293,7 +286,7 @@ // который надо проверить является он главным или нет. // // Возвращаемое значение: -// Булево - +// Булево // Функция УзелЯвляетсяГлавным(Знач УзелИнформационнойБазы) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index 535f03b39..56a3819be 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -113,12 +113,12 @@ // внешнее соединение. // // Параметры: -// ИмяРеквизита - Строка - Имя реквизита формы. -// ИмяТаблицы - Строка - Полное имя объекта метаданных. -// Владелец - ФормаКлиентскогоПриложения - Форма выбора элементов базы-корреспондента. -// СтандартнаяОбработка - Булево - Признак выполнения стандартной (системной) обработки события. -// ПараметрыВнешнегоСоединения - Структура - параметры внешнего соединения. -// ПараметрыВыбора - Структура - Структура параметров выбора. +// ИмяРеквизита - Строка - имя реквизита формы. +// ИмяТаблицы - Строка - полное имя объекта метаданных. +// Владелец - ФормаКлиентскогоПриложения - форма выбора элементов базы-корреспондента. +// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. +// ПараметрыВнешнегоСоединения - Структура +// ПараметрыВыбора - Структура - структура параметров выбора. // Процедура ОбработчикВыбораЭлементовБазыКорреспондентаНачалоВыбора(Знач ИмяРеквизита, Знач ИмяТаблицы, Знач Владелец, Знач СтандартнаяОбработка, Знач ПараметрыВнешнегоСоединения, Знач ПараметрыВыбора=Неопределено) Экспорт @@ -163,11 +163,11 @@ // соединение. // // Параметры: -// ИмяРеквизита - Строка - Имя реквизита формы. -// ИмяТаблицы - Строка - Полное имя объекта метаданных. -// Владелец - ФормаКлиентскогоПриложения - Форма выбора элементов базы-корреспондента. -// ПараметрыВнешнегоСоединения - Структура - параметры внешнего соединения. -// ПараметрыВыбора - Структура - Структура параметров выбора. +// ИмяРеквизита - Строка - имя реквизита формы. +// ИмяТаблицы - Строка - полное имя объекта метаданных. +// Владелец - ФормаКлиентскогоПриложения - форма выбора элементов базы-корреспондента. +// ПараметрыВнешнегоСоединения - Структура +// ПараметрыВыбора - Структура - структура параметров выбора. // Процедура ОбработчикВыбораЭлементовБазыКорреспондентаПодбор(Знач ИмяРеквизита, Знач ИмяТаблицы, Знач Владелец, Знач ПараметрыВнешнегоСоединения, Знач ПараметрыВыбора=Неопределено) Экспорт @@ -203,9 +203,10 @@ // внешнее соединение. // // Параметры: -// Элемент - ФормаКлиентскогоПриложения, ТаблицаФормы - Элемент для обработки выбора. +// Элемент - ФормаКлиентскогоПриложения +// - ТаблицаФормы - элемент для обработки выбора. // ВыбранноеЗначение - Произвольный - см. описание параметра ВыбранноеЗначение события ОбработкаВыбора. -// ДанныеФормыКоллекция - ДанныеФормыКоллекция - Для режима подбора из списка. +// ДанныеФормыКоллекция - ДанныеФормыКоллекция - для режима подбора из списка. // Процедура ОбработчикВыбораЭлементовБазыКорреспондентаОбработкаВыбора(Знач Элемент, Знач ВыбранноеЗначение, Знач ДанныеФормыКоллекция=Неопределено) Экспорт @@ -252,6 +253,7 @@ // // Возвращаемое значение: // Булево - признак использования всех элементов. +// Функция ВТаблицеОтмеченыВсеЭлементы(Таблица) Экспорт Для Каждого Элемент Из Таблица Цикл @@ -537,8 +539,8 @@ // Запускает получение файла с сервера интерактивно, без расширения для работы с файлами. // // Параметры: -// ПолучаемыйФайл - Структура - Описание файла для получения. Содержит свойства Имя и Хранение. -// ПараметрыДиалога - Структура - Необязательные дополнительные параметры диалога выбора файлов. +// ПолучаемыйФайл - Структура - описание файла для получения. Содержит свойства Имя и Хранение. +// ПараметрыДиалога - Структура - необязательные дополнительные параметры диалога выбора файлов. // Процедура ВыбратьИСохранитьФайлНаКлиенте(Знач ПолучаемыйФайл, Знач ПараметрыДиалога = Неопределено) Экспорт @@ -733,9 +735,9 @@ // Открывает файл в ассоциированном приложении операционной системы. // // Параметры: -// Объект - Произвольный - Объект из которого по имени свойства будет получено имя файла для открытия. -// ИмяСвойства - Строка - Имя свойства объекта из которого будет получено имя файла для открытия. -// СтандартнаяОбработка - Булево - Флаг стандартной обработки, устанавливается в Ложь. +// Объект - Произвольный - объект из которого по имени свойства будет получено имя файла для открытия. +// ИмяСвойства - Строка - имя свойства объекта из которого будет получено имя файла для открытия. +// СтандартнаяОбработка - Булево - флаг стандартной обработки, устанавливается в Ложь. // Процедура ОбработчикОткрытияФайлаИлиКаталога(Объект, ИмяСвойства, СтандартнаяОбработка = Ложь) Экспорт СтандартнаяОбработка = Ложь; @@ -752,14 +754,14 @@ // Открывает диалог для выбора файлового каталога, запрашивая установку расширения для работы с файлами. // // Параметры: -// Объект - Произвольный - Объект, в котором будет установлено выбираемое свойство. -// ИмяСвойства - Строка - Имя свойства с именем файла, устанавливаемого в объекте. Источник +// Объект - Произвольный - объект, в котором будет установлено выбираемое свойство. +// ИмяСвойства - Строка - имя свойства с именем файла, устанавливаемого в объекте. Источник // начального значения. -// СтандартнаяОбработка - Булево - Флаг стандартной обработки, устанавливается в Ложь. -// ПараметрыДиалога - Структура - Необязательные дополнительные параметры диалога выбора каталога. -// ОповещениеЗавершения - ОписаниеОповещения - Необязательное оповещение, которое будет вызвано со следующими +// СтандартнаяОбработка - Булево - флаг стандартной обработки, устанавливается в Ложь. +// ПараметрыДиалога - Структура - необязательные дополнительные параметры диалога выбора каталога. +// ОповещениеЗавершения - ОписаниеОповещения - необязательное оповещение, которое будет вызвано со следующими // параметрами: -// Результат - Строка - Выбранное значение (массив строк, если был +// Результат - Строка - выбранное значение (массив строк, если был // множественный выбор); // ДополнительныеПараметры - Неопределено. // @@ -827,16 +829,17 @@ // Открывает диалог для выбора файла, запрашивая установку расширения для работы с файлами. // // Параметры: -// Объект - Произвольный - Объект, в котором будет установлено выбираемое свойство. -// ИмяСвойства - Строка - Имя свойства с именем файла, устанавливаемого в объекте. Источник +// Объект - Произвольный - объект, в котором будет установлено выбираемое свойство. +// ИмяСвойства - Строка - имя свойства с именем файла, устанавливаемого в объекте. Источник // начального значения. -// СтандартнаяОбработка - Булево - Флаг стандартной обработки, устанавливается в Ложь. -// ПараметрыДиалога - Структура - Необязательные дополнительные параметры диалога выбора файла. -// ОповещениеЗавершения - ОписаниеОповещения - Необязательное оповещение, которое будет вызвано со следующими +// СтандартнаяОбработка - Булево - флаг стандартной обработки, устанавливается в Ложь. +// ПараметрыДиалога - Структура - необязательные дополнительные параметры диалога выбора файла. +// ОповещениеЗавершения - ОписаниеОповещения - необязательное оповещение, которое будет вызвано со следующими // параметрами: -// Результат - Строка, Неопределено - Выбранное значение (массив строк, -// если был множественный выбор), или -// Неопределено - если ничего не выбрано; +// Результат - Строка +// - Неопределено - выбранное значение (массив строк, +// если был множественный выбор), или +// Неопределено - если ничего не выбрано; // ДополнительныеПараметры - Неопределено. // // @@ -926,14 +929,15 @@ // Передает файл на сервер интерактивно, без расширения для работы с файлами. // // Параметры: -// ОповещениеЗавершения - ОписаниеОповещения - Экспортная процедура, которая будет вызвано со следующими +// ОповещениеЗавершения - ОписаниеОповещения - экспортная процедура, которая будет вызвано со следующими // параметрами: -// Результат - Структура с полями Имя, Хранение, ОписаниеОшибки. +// Результат - Структура - с полями Имя, Хранение, ОписаниеОшибки. // ДополнительныеПараметры - Неопределено. // -// ПараметрыДиалога - Структура - Необязательные дополнительные параметры диалога выбора +// ПараметрыДиалога - Структура - необязательные дополнительные параметры диалога выбора // файлов. -// ИдентификаторФормы - Строка, УникальныйИдентификатор - Параметр для хранилища. +// ИдентификаторФормы - Строка +// - УникальныйИдентификатор - параметр для хранилища. // Процедура ВыбратьИПередатьФайлНаСервер(ОповещениеЗавершения, Знач ПараметрыДиалога = Неопределено, Знач ИдентификаторФормы = Неопределено) Экспорт @@ -1065,8 +1069,8 @@ // Добавляет поля в целевую структуру, если их там нет. // // Параметры: -// Результат - Структура - Целевая структура. -// ЗначенияПоУмолчанию - Структура - Значения по умолчанию. +// Результат - Структура - целевая структура. +// ЗначенияПоУмолчанию - Структура // Процедура УстановитьЗначенияСтруктурыПоУмолчанию(Результат, Знач ЗначенияПоУмолчанию) @@ -1112,7 +1116,7 @@ // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо открыть форму; // Владелец - форма-владелец для открываемой формы; -// ДополнительныеПараметры - Структура - структура дополнительных параметров открытия помощника +// ДополнительныеПараметры - Структура - структура дополнительных параметров открытия помощника: // * ПараметрыПомощника - Структура - произвольная структура, которая будет передана в открываемую форму помощника; // * ОповещениеОЗакрытии - ОписаниеОповещения - описание оповещения, которое будет вызвано при закрытии формы помощника. // @@ -1309,7 +1313,8 @@ // Обработка диалогов интерактивного дополнения. // // Параметры: -// ДополнениеВыгрузки - Структура, ДанныеФормыСтруктура - настройки выгрузки. +// ДополнениеВыгрузки - Структура +// - ДанныеФормыСтруктура - настройки выгрузки. // Владелец, Уникальность, Окно - параметры открытия окна формы. // // Возвращаемое значение: @@ -1329,7 +1334,8 @@ // Обработка диалогов интерактивного дополнения. // // Параметры: -// ДополнениеВыгрузки - Структура, ДанныеФормыСтруктура - настройки выгрузки. +// ДополнениеВыгрузки - Структура +// - ДанныеФормыСтруктура - настройки выгрузки. // Владелец, Уникальность, Окно - параметры открытия окна формы. // // Возвращаемое значение: @@ -1355,7 +1361,8 @@ // Обработка диалогов интерактивного дополнения. // // Параметры: -// ДополнениеВыгрузки - Структура, ДанныеФормыСтруктура - настройки выгрузки. +// ДополнениеВыгрузки - Структура +// - ДанныеФормыСтруктура - настройки выгрузки. // Владелец, Уникальность, Окно - параметры открытия окна формы. // // Возвращаемое значение: @@ -1375,7 +1382,8 @@ // Обработка диалогов интерактивного дополнения. // // Параметры: -// ДополнениеВыгрузки - Структура, ДанныеФормыСтруктура - настройки выгрузки. +// ДополнениеВыгрузки - Структура +// - ДанныеФормыСтруктура - настройки выгрузки. // Владелец, Уникальность, Окно - параметры открытия окна формы. // // Возвращаемое значение: @@ -1396,7 +1404,8 @@ // Обработка диалогов интерактивного дополнения. // // Параметры: -// ДополнениеВыгрузки - Структура, ДанныеФормыСтруктура - настройки выгрузки. +// ДополнениеВыгрузки - Структура +// - ДанныеФормыСтруктура - настройки выгрузки. // Владелец, Уникальность, Окно - параметры открытия окна формы. // // Возвращаемое значение: @@ -1421,7 +1430,8 @@ // Параметры: // ВыбранноеЗначение - Произвольный - результат выбора. // ИсточникВыбора - ФормаКлиентскогоПриложения - форма, которая произвела выбор. -// ДополнениеВыгрузки - Структура, ДанныеФормыКоллекция - корректируемые настройки дополнения выбора. +// ДополнениеВыгрузки - Структура +// - ДанныеФормыКоллекция - корректируемые настройки дополнения выбора. // // Возвращаемое значение: // Булево - Истина, если выбор вызван одной из форм дополнения выгрузки, Ложь - иначе. diff --git a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl index 2c1179354..899364c11 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl @@ -22,9 +22,9 @@ // Определяет список планов обмена, которые используют функционал подсистемы обмена данными. // // Параметры: -// ПланыОбменаПодсистемы - Массив - Массив планов обмена конфигурации, -// которые используют функционал подсистемы обмена данными. -// Элементами массива являются объекты метаданных планов обмена. +// ПланыОбменаПодсистемы - Массив из ОбъектМетаданныхПланОбмена - массив планов обмена конфигурации, +// которые используют функционал подсистемы обмена данными. +// Элементами массива являются объекты метаданных планов обмена. // // Пример: // ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ОбменБезИспользованияПравилКонвертации); @@ -48,33 +48,33 @@ // // Параметры: // -// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной (системной) обработки +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения стандартной (системной) обработки // события. // Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная // обработка события производиться не будет. Отказ от стандартной обработки не отменяет действие. // Значение по умолчанию - Истина. // -// Получатель - ПланОбменаСсылка - Узел плана обмена, для которого выполняется выгрузка данных. +// Получатель - ПланОбменаСсылка - узел плана обмена, для которого выполняется выгрузка данных. // -// ИмяФайлаСообщения - Строка - Имя файла, в который необходимо выполнить выгрузку данных. +// ИмяФайлаСообщения - Строка - имя файла, в который необходимо выполнить выгрузку данных. // Если этот параметр заполнен, то система ожидает, // что данные будут выгружены в файл. После выгрузки система выполнит отправку данных из этого файла. // Если параметр пустой, то система ожидает, что данные будут выгружены в параметр ДанныеСообщения. // -// ДанныеСообщения - Произвольный - Если параметр ИмяФайлаСообщения пустой, +// ДанныеСообщения - Произвольный - если параметр ИмяФайлаСообщения пустой, // то система ожидает, что данные будут выгружены в этот параметр. // -// КоличествоЭлементовВТранзакции - Число - Определяет максимальное число элементов данных, +// КоличествоЭлементовВТранзакции - Число - определяет максимальное число элементов данных, // которые помещаются в сообщение в рамках одной транзакции базы данных. // При необходимости в обработчике следует реализовать логику // установки транзакционных блокировок на выгружаемые данные. // Значение параметра задается в настройках подсистемы обмена данными. // -// ИмяСобытияЖурналаРегистрации - Строка - Имя события журнала регистрации текущего сеанса обмена данными. +// ИмяСобытияЖурналаРегистрации - Строка - имя события журнала регистрации текущего сеанса обмена данными. // Используется для записи в журнал регистрации данных (ошибок, предупреждений, информации) с заданным именем события. // Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. // -// КоличествоОтправленныхОбъектов - Число - Счетчик отправленных объектов. +// КоличествоОтправленныхОбъектов - Число - счетчик отправленных объектов. // Используется для определения количества отправленных объектов // для последующей фиксации в протоколе обмена. // @@ -99,32 +99,32 @@ // // Параметры: // -// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения // стандартной (системной) обработки события. // Если в теле процедуры-обработчика установить данному параметру значение Ложь, // стандартная обработка события производиться не будет. // Отказ от стандартной обработки не отменяет действие. // Значение по умолчанию: Истина. // -// Отправитель - ПланОбменаСсылка - Узел плана обмена, для которого выполняется загрузка данных. +// Отправитель - ПланОбменаСсылка - узел плана обмена, для которого выполняется загрузка данных. // -// ИмяФайлаСообщения - Строка - Имя файла, из которого требуется выполнить загрузку данных. +// ИмяФайлаСообщения - Строка - имя файла, из которого требуется выполнить загрузку данных. // Если параметр не заполнен, то данные для загрузки передаются через параметр ДанныеСообщения. // -// ДанныеСообщения - Произвольный - Параметр содержит данные, которые необходимо загрузить. +// ДанныеСообщения - Произвольный - параметр содержит данные, которые необходимо загрузить. // Если параметр ИмяФайлаСообщения пустой, // то данные для загрузки передаются через этот параметр. // -// КоличествоЭлементовВТранзакции - Число - Определяет максимальное число элементов данных, +// КоличествоЭлементовВТранзакции - Число - определяет максимальное число элементов данных, // которые читаются из сообщения и записываются в базу данных в рамках одной транзакции. // При необходимости в обработчике следует реализовать логику записи данных в транзакции. // Значение параметра задается в настройках подсистемы обмена данными. // -// ИмяСобытияЖурналаРегистрации - Строка - Имя события журнала регистрации текущего сеанса обмена данными. +// ИмяСобытияЖурналаРегистрации - Строка - имя события журнала регистрации текущего сеанса обмена данными. // Используется для записи в журнал регистрации данных (ошибок, предупреждений, информации) с заданным именем события. // Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. // -// КоличествоПолученныхОбъектов - Число -Счетчик полученных объектов. +// КоличествоПолученныхОбъектов - Число -счетчик полученных объектов. // Используется для определения количества загруженных объектов // для последующей фиксации в протоколе обмена. // @@ -154,17 +154,16 @@ // // Параметры: // -// Получатель - ПланОбменаСсылка - Узел плана обмена, в который требуется выгрузить данные. -// -// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной (системной) обработки -// события. -// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события -// производиться не будет. -// Отказ от стандартной обработки не отменяет действие. -// Значение по умолчанию - Истина. -// -// Отбор - Массив, ОбъектМетаданных - определяет отбор по объектам метаданных, для которых следует выполнить -// регистрацию изменений. +// Получатель - ПланОбменаСсылка - узел плана обмена, в который требуется выгрузить данные. +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения стандартной +// (системной) обработки события. +// Если в теле процедуры-обработчика установить данному параметру значение Ложь, +// стандартная обработка события производиться не будет. +// Отказ от стандартной обработки не отменяет действие. +// Значение по умолчанию - Истина. +// Отбор - Массив из ОбъектМетаданных +// - ОбъектМетаданных - определяет отбор по объектам метаданных, +// для которых следует выполнить регистрацию изменений. // Процедура РегистрацияИзмененийНачальнойВыгрузкиДанных(Знач Получатель, СтандартнаяОбработка, Отбор) Экспорт @@ -192,15 +191,15 @@ // объекты базы данных (кроме объекта "Удаление объекта"), наборы записей регистров, // последовательностей или перерасчетов. // -// ПолучениеЭлемента - ПолучениеЭлементаДанных - Определяет, будет ли прочитанный элемент данных записан в базу данных +// ПолучениеЭлемента - ПолучениеЭлементаДанных - определяет, будет ли прочитанный элемент данных записан в базу данных // или нет в случае коллизии. // При вызове обработчика параметр имеет значение Авто, что означает действия по умолчанию // (принимать от главного, игнорировать от подчиненного). // Значение данного параметра может быть переопределено в обработчике. // -// Отправитель - ПланОбменаСсылка - Узел плана обмена, от имени которого выполняется получение данных. +// Отправитель - ПланОбменаСсылка - узел плана обмена, от имени которого выполняется получение данных. // -// ПолучениеОтГлавного - Булево - В распределенной информационной базе обозначает признак получения данных от главного +// ПолучениеОтГлавного - Булево - в распределенной информационной базе обозначает признак получения данных от главного // узла. // Истина - выполняется получение данных от главного узла, Ложь - от подчиненного. // В обменах по правилам обмена принимает значение Истина - если в правилах обмена приоритет объекта @@ -216,6 +215,7 @@ // Обработчик начальной настройки ИБ после создания узла РИБ. // Вызывается в момент первого запуска подчиненного узла РИБ (в том числе АРМ). +// Процедура ПриНастройкеПодчиненногоУзлаРИБ() Экспорт КонецПроцедуры @@ -223,7 +223,7 @@ // Получает доступные для использования версии универсального формата EnterpriseData. // // Параметры: -// ВерсииФормата - Соответствие - Соответствие номера версии формата, +// ВерсииФормата - Соответствие - соответствие номера версии формата, // общему модулю, в котором находятся обработчики выгрузки/загрузки для данной версии. // // Пример: @@ -233,6 +233,17 @@ +КонецПроцедуры + +// Получает доступные для использования расширения универсального формата EnterpriseData. +// +// Параметры: +// РасширенияФормата - Соответствие: +// * Ключ - Строка - URI пространства имен схемы расширения формата. +// * Значение - Строка - номер расширяемой версии формата. +// +Процедура ПриПолученииДоступныхРасширенийФормата(РасширенияФормата) Экспорт + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index 93c3276c1..5413d3851 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -81,7 +81,7 @@ // // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. -// Отправитель - ПланОбменаСсылка - Значение параметра устанавливается, если необходимо +// Отправитель - ПланОбменаСсылка - значение параметра устанавливается, если необходимо // определить есть ли другие узлы обмена, кроме того, из // которого был получен объект. // @@ -202,7 +202,7 @@ // ИмяПланаОбмена - Строка. // // Возвращаемое значение: -// Булево - +// Булево // Функция ПланОбменаИспользуетсяВМоделиСервиса(Знач ИмяПланаОбмена) Экспорт @@ -220,7 +220,7 @@ // Заполняет перечень кодов возможных ошибок. // // Возвращаемое значение: -// Соответствие. Ключ - код ошибки (число), значение - описание ошибки (строка). +// Соответствие - Ключ - код ошибки (число), значение - описание ошибки (строка). // Функция СообщенияОбОшибках() Экспорт @@ -391,7 +391,8 @@ // См. ОбменДаннымиСервер.ЭтоПланОбменаXDTO. // // Параметры: -// ПланОбмена - Строка, ПланОбменаСсылка - узел плана обмена или имя плана обмена. +// ПланОбмена - Строка +// - ПланОбменаСсылка - узел плана обмена или имя плана обмена. // // Возвращаемое значение: // Булево - Истина, если это план обмена через XDTO. @@ -479,7 +480,7 @@ // Определяет используется ли версионирование. // // Параметры: -// Отправитель - ПланОбменаСсылка - Если параметр передается, то определяет необходимо +// Отправитель - ПланОбменаСсылка - если параметр передается, то определяет необходимо // ли использовать создание версий объектов для переданного узла. // Функция ИспользуетсяВерсионирование(Отправитель = Неопределено, ПроверятьПраваДоступа = Ложь) Экспорт @@ -673,7 +674,7 @@ // Возвращает режим выгрузки объекта на основании пользовательского состава плана обмена (настроек пользователя). // // Параметры: -// ИмяОбъекта - Полное имя объекта метаданных, для которого требуется получить режим выгрузки; +// ИмяОбъекта - полное имя объекта метаданных, для которого требуется получить режим выгрузки; // Получатель - ПланОбменаСсылка - ссылка на узел плана обмена, пользовательский состав которого будет использоваться. // // Возвращаемое значение: @@ -825,7 +826,8 @@ // Возвращает признак принадлежности узла к плану обмена, который использует функционал обмена БСП. // // Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка, ПланОбменаОбъект - узел плана обмена, для которого требуется получить +// УзелИнформационнойБазы - ПланОбменаСсылка +// - ПланОбменаОбъект - узел плана обмена, для которого требуется получить // значение функции. // // Возвращаемое значение: @@ -1070,7 +1072,7 @@ // ВариантНастройки - Строка - идентификатор варианта настройки синхронизации данных. // // Возвращаемое значение: -// Массив - Используемые транспорты сообщений обмена для узла. +// Массив - используемые транспорты сообщений обмена для узла. // Функция ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы, Знач ВариантНастройки = "") Экспорт @@ -1149,7 +1151,7 @@ // Устанавливает внешнее соединение с информационной базой и возвращает указатель на это соединение. // // Параметры: -// УзелИнформационнойБазы (обязательный) - ПланОбменаСсылка. Узел плана обмена, для которого необходимо получить +// УзелИнформационнойБазы (обязательный) - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить // внешнее соединение. // СтрокаСообщенияОбОшибке (необязательный) - Строка - если в процессе установки внешнего соединения возникает ошибка, // то подробное описание ошибки помещается в этот параметр. @@ -1169,7 +1171,7 @@ // Устанавливает внешнее соединение с информационной базой и возвращает указатель на это соединение. // // Параметры: -// УзелИнформационнойБазы (обязательный) - ПланОбменаСсылка. Узел плана обмена, для которого необходимо получить +// УзелИнформационнойБазы (обязательный) - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить // внешнее соединение. // СтрокаСообщенияОбОшибке (необязательный) - Строка - если в процессе установки внешнего соединения возникает ошибка, // то подробное описание ошибки помещается в этот параметр. @@ -1193,7 +1195,7 @@ // В противном случае функция возвращает Ложь. // // Параметры: -// ИмяПланаОбмена - Строка. Имя плана обмена, для которого необходимо вычислить признак использования. +// ИмяПланаОбмена - Строка - имя плана обмена, для которого необходимо вычислить признак использования. // // Возвращаемое значение: // Булево - Истина - доступно использование плана обмена. @@ -1231,7 +1233,8 @@ // Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменДанными. // // Параметры: -// Корреспондент - Структура, ПланОбменаСсылка. Узел плана обмена, который соответствует информационной +// Корреспондент - Структура +// - ПланОбменаСсылка - узел плана обмена, который соответствует информационной // базе-корреспонденту. // // Возвращаемое значение: @@ -1377,7 +1380,7 @@ // Справочные - флаг того, что надо включать в результат нормативно-справочные объекты. // // Возвращаемое значение: -// ТаблицаЗначений - таблица с колонками: +// ТаблицаЗначений: // * ПолноеИмяМетаданных - Строка - полное имя метаданных (имя таблицы для запроса). // * ПредставлениеСписка - Строка - представление списка для таблицы. // * Представление - Строка - представление объекта для таблицы. @@ -1427,7 +1430,7 @@ // Мета - ОбъектМетаданных - объект метаданных. // // Возвращаемое значение: -// Структура - описание объекта: +// Структура: // * ИндексКартинки - Число - индекс картинки. // * Периодический - Булево - Истина, если объект периодический. // * Справочный - Булево - Истина, если объект справочный. diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index f888f1e83..f449c9b74 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -12,15 +12,15 @@ // Для несуществующих настроек возвращается Неопределено. // // Параметры: -// ИмяПланаОбмена - Строка - Имя плана обмена из метаданных. -// ИмяПараметра - Строка - Имя параметра плана обмена или список параметров, разделенных запятыми. +// ИмяПланаОбмена - Строка - имя плана обмена из метаданных. +// ИмяПараметра - Строка - имя параметра плана обмена или список параметров, разделенных запятыми. // Список допустимых значений см. в функциях НастройкиПланаОбменаПоУмолчанию, // ОписаниеВариантаНастройкиОбменаПоУмолчанию. -// ИдентификаторНастройки - Строка - Имя предопределенной настройки плана обмена. -// ВерсияКорреспондента - Строка - Версия конфигурации корреспондента. +// ИдентификаторНастройки - Строка - имя предопределенной настройки плана обмена. +// ВерсияКорреспондента - Строка - версия конфигурации корреспондента. // // Возвращаемое значение: -// Произвольный, Структура - Тип возвращаемого значения зависит от типа значения получаемой настройки. +// Произвольный, Структура - тип возвращаемого значения зависит от типа значения получаемой настройки. // Произвольный, если в качестве ИмяПараметра был передан единичный параметр // Структура, если в качестве параметра ИмяПараметра была передан список параметров через запятую. // @@ -223,7 +223,7 @@ // НомерПринятого - Число - номер принятого сообщения в базе-корреспонденте. // // Возвращаемое значение: -// ФиксированнаяСтруктура - свойства структуры: +// ФиксированнаяСтруктура: // * Отправитель - ПланОбменаСсылка - см. выше параметр Отправитель. // * НомерПринятого - Число - см. выше параметр НомерПринятого. // * ВосстановленаРезервнаяКопия - Булево - Истина, если обнаружен факт восстановления этой базы из резервной копии. @@ -247,7 +247,7 @@ // базы-корреспондента). // // Параметры: -// ПараметрыРезервнойКопии - ФиксированнаяСтруктура - свойства структуры: +// ПараметрыРезервнойКопии - ФиксированнаяСтруктура: // * Отправитель - ПланОбменаСсылка - узел, от имени которого было сформировано и отправлено // сообщение обмена. // * НомерПринятого - Число - номер принятого сообщения в базе-корреспонденте. @@ -307,7 +307,7 @@ // Возвращает массив всех видов транспорта сообщений обмена, определенных в конфигурации. // // Возвращаемое значение: -// Массив - Элементы массива имеют тип "ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена". +// Массив из ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - все виды транспорта сообщений обмена. // Функция ВсеТранспортыСообщенийОбменаКонфигурации() Экспорт @@ -399,7 +399,7 @@ // гиперссылки для перехода к монитору проблем обмена. // // Параметры: -// Узлы - Массив - массив значений ПланОбменаСсылка. +// Узлы - Массив из ПланОбменаСсылка - узлы обмена. // // Возвращаемое значение: // Число - количество нерассмотренных проблем обмена данными. @@ -413,12 +413,12 @@ // Возвращает структуру заголовка гиперссылки для перехода к монитору проблем обмена данными. // // Параметры: -// Узлы - Массив - массив значений ПланОбменаСсылка. +// Узлы - Массив из ПланОбменаСсылка - узлы обмена. // // Возвращаемое значение: -// Структура - со свойствами: -// * Заголовок - Строка - заголовок гиперссылки. -// * Картинка - Картинка - картинка для гиперссылки. +// Структура: +// * Заголовок - Строка - заголовок гиперссылки. +// * Картинка - Картинка - картинка для гиперссылки. // Функция СтруктураЗаголовкаГиперссылкиМонитораПроблем(Узлы = Неопределено) Экспорт @@ -473,11 +473,11 @@ // Возвращает данные таблиц для реквизитов узла обмена. // // Параметры: -// Таблицы - Массив - Массив строк с именами реквизитов узла плана обмена. -// ИмяПланаОбмена - Строка - Имя плана обмена. +// Таблицы - Массив из Строка - имена реквизитов узла плана обмена. +// ИмяПланаОбмена - Строка - имя плана обмена. // // Возвращаемое значение: -// Соответствие - соответствие таблиц и их данных. +// Соответствие - соответствие таблиц и их данных. // Функция ДанныеТаблицКорреспондента(Таблицы, Знач ИмяПланаОбмена) Экспорт @@ -543,7 +543,7 @@ // Возвращает представление даты синхронизации. // // Параметры: -// ДатаСинхронизации - Дата - Абсолютная дата синхронизации данных. +// ДатаСинхронизации - Дата - абсолютная дата синхронизации данных. // // Возвращаемое значение: // Строка - строковое представление даты. @@ -560,10 +560,10 @@ // Возвращает представление относительной даты синхронизации. // // Параметры: -// ДатаСинхронизации - Дата - Абсолютная дата синхронизации данных. +// ДатаСинхронизации - Дата - абсолютная дата синхронизации данных. // // Возвращаемое значение: -// Строка - представление относительной даты синхронизации. +// Строка - представление относительной даты синхронизации: // *Никогда (Т = пустая дата). // *Сейчас (Т < 5 мин) // *5 минут назад (5 мин < Т < 15 мин) @@ -668,7 +668,7 @@ // Функция возвращает объект WSПрокси веб-сервиса Exchange, созданный с переданными параметрами. // // Параметры: -// СтруктураНастроек - Структура - параметры для WSПрокси; +// СтруктураНастроек - Структура: // * WSURLВебСервиса - Строка - месторасположение wsdl. // * WSИмяСервиса - Строка - имя сервиса. // * WSURLПространстваИменСервиса - Строка - URI пространства имен web-сервиса. @@ -695,7 +695,7 @@ // Функция возвращает объект WSПрокси веб-сервиса Exchange_2_0_1_6, созданный с переданными параметрами. // // Параметры: -// СтруктураНастроек - Структура - параметры для WSПрокси; +// СтруктураНастроек - Структура: // * WSURLВебСервиса - Строка - месторасположение wsdl. // * WSИмяСервиса - Строка - имя сервиса. // * WSURLПространстваИменСервиса - Строка - URI пространства имен web-сервиса. @@ -722,7 +722,7 @@ // Функция возвращает объект WSПрокси веб-сервиса Exchange_2_0_1_7, созданный с переданными параметрами. // // Параметры: -// СтруктураНастроек - Структура - параметры для WSПрокси; +// СтруктураНастроек - Структура: // * WSURLВебСервиса - Строка - месторасположение wsdl. // * WSИмяСервиса - Строка - имя сервиса. // * WSURLПространстваИменСервиса - Строка - URI пространства имен web-сервиса. @@ -750,7 +750,7 @@ // Функция возвращает объект WSПрокси веб-сервиса Exchange_3_0_1_1, созданный с переданными параметрами. // // Параметры: -// СтруктураНастроек - Структура - параметры для WSПрокси; +// СтруктураНастроек - Структура: // * WSURLВебСервиса - Строка - месторасположение wsdl. // * WSИмяСервиса - Строка - имя сервиса. // * WSURLПространстваИменСервиса - Строка - URI пространства имен web-сервиса. @@ -802,10 +802,10 @@ // Возвращает таблицу с данными узлов всех настроенных обменов БСП. // // Возвращаемое значение: -// ТаблицаЗначений - таблица значений с колонками: +// ТаблицаЗначений: // * УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на узел плана обмена. -// * Наименование - Строка - Наименование узла плана обмена. -// * ИмяПланаОбмена - Строка - Имя плана обмена. +// * Наименование - Строка - наименование узла плана обмена. +// * ИмяПланаОбмена - Строка - имя плана обмена. // Функция УзлыОбменаБСП() Экспорт @@ -839,19 +839,20 @@ // Свойства см. в функции // ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения: // -// * ВариантРаботыИнформационнойБазы - Число - Вариант работы информационной базы: 0 - файловый; 1 - +// * ВариантРаботыИнформационнойБазы - Число - вариант работы информационной базы: 0 - файловый; 1 - // клиент-серверный; -// * КаталогИнформационнойБазы - Строка - Каталог информационной базы для файлового режима работы; -// * ИмяСервера1СПредприятия - Строка - Имя сервера1С:Предприятия; -// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - Имя информационной базы на сервере1С:Предприятия; -// * АутентификацияОперационнойСистемы - Булево - Признак аутентификации операционной системы при создании +// * КаталогИнформационнойБазы - Строка - каталог информационной базы для файлового режима работы; +// * ИмяСервера1СПредприятия - Строка - имя сервера1С:Предприятия; +// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - имя информационной базы на сервере1С:Предприятия; +// * АутентификацияОперационнойСистемы - Булево - признак аутентификации операционной системы при создании // внешнего подключения к информационной базе; -// * ИмяПользователя - Строка - Имя пользователя информационной базы; -// * ПарольПользователя - Строка - Пароль пользователя информационной базы. +// * ИмяПользователя - Строка - имя пользователя информационной базы; +// * ПарольПользователя - Строка - пароль пользователя информационной базы. // // Возвращаемое значение: -// Структура - Описание соединения -// * Соединение - COMОбъект, Неопределено - указатель на COM-объект соединения или Неопределено в +// Структура: +// * Соединение - COMОбъект +// - Неопределено - указатель на COM-объект соединения или Неопределено в // случае ошибки; // * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; // * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; @@ -908,25 +909,32 @@ // Сохраняет настройки подключения для обмена с внешней системой через EnterpriseData. // // Параметры: -// Контекст - Структура - контекст выполнения операции. +// Контекст - Структура - контекст выполнения операции: // * Режим - Строка - режим, в котором вызывается обработчик. // Возможные значения: "НовоеПодключение" | "РедактированиеПараметровПодключения". -// * Корреспондент - ПланОбменаСсылка, Неопределено - узел обмена, соответствующий корреспонденту. -// Для режима "НовоеПодключение" равен Неопределено; -// * ИмяПланаОбмена - Строка, Неопределено - имя плана обмена, на котором создается узел. -// * ИдентификаторНастройки - Строка, Неопределено - идентификатор варианта настройки, -// как он указан в модуле менеджера плана обмена. -// ПараметрыПодключения - Структура - структура параметров подключения. -// * ИдентификаторКорреспондента - Строка(36), Неопределено - уникальный идентификатор корреспондента. -// * НаименованиеКорреспондента - Строка, Неопределено - название корреспондента, как он будет отображаться -// в списке настроенных синхронизаций. -// * НастройкиТранспорта - Произвольный, Неопределено - произвольное значение, описывающее параметры подключения. -// * РасписаниеСинхронизации - РасписаниеРегламентногоЗадания, Неопределено - расписание запуска синхронизации. -// * НастройкиXDTO - Структура, Неопределено - структура настроек XDTO корреспондента. +// * Корреспондент - ПланОбменаСсылка +// - Неопределено - узел обмена, соответствующий корреспонденту. +// Для режима "НовоеПодключение" равен Неопределено; +// * ИмяПланаОбмена - Строка +// - Неопределено - имя плана обмена, на котором создается узел. +// * ИдентификаторНастройки - Строка +// - Неопределено - идентификатор варианта настройки, +// как он указан в модуле менеджера плана обмена. +// ПараметрыПодключения - Структура - структура параметров подключения: +// * ИдентификаторКорреспондента - Строка(36) +// - Неопределено - уникальный идентификатор корреспондента. +// * НаименованиеКорреспондента - Строка +// - Неопределено - название корреспондента, как он будет отображаться +// в списке настроенных синхронизаций. +// * НастройкиТранспорта - Произвольный +// - Неопределено - произвольное значение, описывающее параметры подключения. +// * РасписаниеСинхронизации - РасписаниеРегламентногоЗадания +// - Неопределено - расписание запуска синхронизации. +// * НастройкиXDTO - Структура +// - Неопределено - структура настроек XDTO корреспондента: // ** ПоддерживаемыеВерсии - Массив - перечень поддерживаемых корреспондентом версий формата. -// ** ПоддерживаемыеОбъекты - ТаблицаЗначений - перечень поддерживаемых корреспондентом объектов формата. -// См. ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата -// Результат - Структура - исходящий. +// ** ПоддерживаемыеОбъекты - см. ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата +// Результат - Структура: // * УзелОбмена - ПланОбменаСсылка - узел плана обмена, соответствующий корреспонденту. // * ИдентификаторКорреспондента - Строка - уникальный идентификатор корреспондента. // @@ -1168,18 +1176,18 @@ // Заполняет структуру сохраненных параметров подключения к внешней системе. // // Параметры: -// Контекст - Структура - контекст выполнения операции. +// Контекст - Структура - контекст выполнения операции: // * Корреспондент - ПланОбменаСсылка - узел обмена, соответствующий корреспонденту. -// ПараметрыПодключения - Структура - структура параметров подключения. +// ПараметрыПодключения - Структура - структура параметров подключения: // * ИдентификаторКорреспондента - Строка(36) - уникальный идентификатор корреспондента. // * НаименованиеКорреспондента - Строка - название корреспондента, как он отображается // в списке настроенных синхронизаций. // * НастройкиТранспорта - Произвольный - сохраненные настройки транспорта сообщений обмена внешней системы. // * РасписаниеСинхронизации - РасписаниеРегламентногоЗадания - расписание автоматического запуска обмена. -// * НастройкиXDTO - Структура, Неопределено - структура настроек XDTO корреспондента. +// * НастройкиXDTO - Структура +// - Неопределено - структура настроек XDTO корреспондента: // ** ПоддерживаемыеВерсии - Массив - перечень поддерживаемых корреспондентом версий формата. -// ** ПоддерживаемыеОбъекты - ТаблицаЗначений - перечень поддерживаемых корреспондентом объектов формата. -// См. ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата. +// ** ПоддерживаемыеОбъекты - см. ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата. // Процедура ПриПолученииНастроекПодключенияВнешнейСистемы(Контекст, ПараметрыПодключения) Экспорт @@ -1205,7 +1213,7 @@ // Таблица настроек транспорта обмена для всех настроенных обменов данными с внешними системами. // // Возвращаемое значение: -// ТаблицаЗначений - настройки транспорта +// ТаблицаЗначений: // * Корреспондент - ПланОбменаСсылка - узел обмена, соответствующий корреспонденту. // * НастройкиТранспорта - Произвольный - сохраненные настройки транспорта сообщений обмена внешней системы. // @@ -1278,7 +1286,7 @@ // Рекомендуется использовать в помощнике настройки синхронизации данных. // // Параметры: -// НастройкиСинхронизации - Структура - структура параметров для сохранения настроек. +// НастройкиСинхронизации - Структура - структура параметров для сохранения настроек: // * УзелОбмена - ПланОбменаСсылка - узел плана обмена, для которого выполняется сохранение настроек синхронизации. // * ДанныеЗаполнения - Структура - произвольная структура для заполнения настроек на узле. // Будет передана в алгоритм "ПриСохраненииНастроекСинхронизацииДанных" (при его наличии). @@ -1329,10 +1337,10 @@ // На вход следует передавать реквизит формы типа "Произвольный", // который был использован при запуске настройки синхронизации // вызовом метода ОбменДаннымиСервер.ПриНачалеСохраненияНастроекСинхронизации. -// СтатусЗавершения - Структура - исходящий параметр, возвращает состояние завершения длительной операции. +// СтатусЗавершения - Структура - исходящий параметр, возвращает состояние завершения длительной операции: // * Отказ - Булево - Истина, если при запуске, или в ходе выполнения длительной операции произошла ошибка. // * СообщениеОбОшибке - Строка - текст ошибки, произошедшей при выполнении длительной операции, если Отказ = Истина. -// * Результат - Структура - состояние сохранения настройки синхронизации. +// * Результат - Структура - состояние сохранения настройки синхронизации: // ** НастройкиСохранены - Булево - Истина, если настройка синхронизации успешно завершена. // ** СообщениеОбОшибке - Строка - текст ошибки, возникшей непосредственно в транзакции сохранения настройки синхронизации. // @@ -1350,7 +1358,7 @@ // Устанавливает признак завершения настройки синхронизации данных. // // Параметры: -// УзелОбмена - ПланОбменаСсылка - Узел обмена, для которого необходимо установить признак. +// УзелОбмена - ПланОбменаСсылка - узел обмена, для которого необходимо установить признак. // Процедура ЗавершитьНастройкуСинхронизацииДанных(УзелОбмена) Экспорт @@ -1387,7 +1395,7 @@ // Возвращает признак завершения настройки синхронизации для узла обмена. // // Параметры: -// УзелОбмена - ПланОбменаСсылка - Узел обмена, для которого необходимо получить признак. +// УзелОбмена - ПланОбменаСсылка - узел обмена, для которого необходимо получить признак. // // Возвращаемое значение: // Булево - Истина, если настройка синхронизации для переданного узла завершена. @@ -1407,7 +1415,7 @@ // Устанавливает признак успешного создания начального образа узла РИБ. // // Параметры: -// УзелОбмена - ПланОбменаСсылка - Узел обмена, для которого необходимо установить признак. +// УзелОбмена - ПланОбменаСсылка - узел обмена, для которого необходимо установить признак. // Процедура ЗавершитьСозданиеНачальногоОбраза(УзелОбмена) Экспорт @@ -1426,7 +1434,7 @@ // // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. -// КодУзла - Строка - Код узла плана обмена. +// КодУзла - Строка - код узла плана обмена. // // Возвращаемое значение: // ПланОбменаСсылка - ссылка на найденный узел плана обмена. @@ -1516,13 +1524,13 @@ // Возвращает идентификатор настройки обмена, соответствующий конкретному корреспонденту. // // Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена, который используется для настройки обмена. -// ВерсияКорреспондента - Строка - номер версии корреспондента, с которым настраивается обмен. -// ИмяКорреспондента - Строка - имя корреспондента (см. функцию ИмяКонфигурацииИсточника -// на стороне конфигурации-корреспондента). +// ИмяПланаОбмена - Строка - имя плана обмена, который используется для настройки обмена. +// ВерсияКорреспондента - Строка - номер версии корреспондента, с которым настраивается обмен. +// ИмяКорреспондента - Строка - имя корреспондента (см. функцию ИмяКонфигурацииИсточника +// на стороне конфигурации-корреспондента). // // Возвращаемое значение: -// Массив - массив строк с идентификаторами настройки для корреспондента. +// Массив из Строка - массив строк с идентификаторами настройки для корреспондента. // Функция ВариантыНастроекОбменаДляКорреспондента(ИмяПланаОбмена, ВерсияКорреспондента, ИмяКорреспондента) Экспорт @@ -1577,10 +1585,10 @@ // Устарела. Возвращает номер области по коду узла плана обмена (обмен сообщениями). // // Параметры: -// КодУзла - Строка - Код узла плана обмена. +// КодУзла - Строка - код узла плана обмена. // // Возвращаемое значение: -// Число - Номер области. +// Число - номер области. // Функция НомерОбластиИзКодаУзлаПланаОбмена(Знач КодУзла) Экспорт @@ -1591,7 +1599,7 @@ // Устарела. Возвращает данные первой записи результата запроса в виде структуры. // // Параметры: -// РезультатЗапроса - РезультатЗапроса - Результат запроса, содержащий данные для обработки. +// РезультатЗапроса - РезультатЗапроса - результат запроса, содержащий данные для обработки. // // Возвращаемое значение: // Структура - структура с результатом. @@ -1614,8 +1622,8 @@ // Параметры: // УзелПланаОбмена - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить переопределяемое // имя. -// ИмяПараметраСИменемУзла - Строка - Имя параметра, в настройках по умолчанию, из которого необходимо получить имя узла. -// ВариантНастройки - Строка - Вариант настройки обмена. +// ИмяПараметраСИменемУзла - Строка - имя параметра, в настройках по умолчанию, из которого необходимо получить имя узла. +// ВариантНастройки - Строка - вариант настройки обмена. // // Возвращаемое значение: // Строка - переопределяемое имя плана обмена как оно заданно в конфигураторе. @@ -2041,7 +2049,7 @@ // зарегистрированных для отложенного обновления и возвращает содержимое файла. // // Параметры: -// Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке(). +// Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке // // Возвращаемое значение: // ХранилищеЗначения - содержимое файла. @@ -2074,7 +2082,7 @@ // // Параметры: // ДанныеОбновления - ХранилищеЗначения - содержимое файла. -// ИмяФайлаСИзменениями - Строка - Имя файла, в котором находились данные. +// ИмяФайлаСИзменениями - Строка - имя файла, в котором находились данные. // Процедура СохранитьДанныеОбновления(ДанныеОбновления, ИмяФайлаСИзменениями) Экспорт @@ -2220,7 +2228,7 @@ // что распределенная информационная база создана на базе плана обмена, обслуживаемым подсистемой обмена данными БСП. // // Возвращаемое значение: -// ПланОбменаСсылка.<Имя плана обмена>; Неопределено - Если текущая информационная база не является +// ПланОбменаСсылка.<Имя плана обмена>; Неопределено - если текущая информационная база не является // узлом распределенной информационной базы // или главный узел для нее не определен (она сама является корневым узлом) // или распределенная информационная база создана на базе плана обмена, который не обслуживается подсистемой обмена @@ -2255,7 +2263,8 @@ // либо пользователь с правами поставляемого профиля "Синхронизация данных с другими программами". // // Параметры: -// Пользователь (необязательный) - ПользовательИнформационнойБазы, Неопределено. +// Пользователь (необязательный) - ПользовательИнформационнойБазы +// - Неопределено. // Пользователь, для которого необходимо вычислить признак разрешения использования синхронизации данных. // Если параметр не задан, то функция вычисляется для текущего пользователя информационной базы. // @@ -2282,8 +2291,10 @@ КонецФункции // Параметры: -// Приемник - ТаблицаЗначений, ТабличнаяЧасть - приемник данных. -// Источник - ТаблицаЗначений, ТабличнаяЧасть - источник данных. +// Приемник - ТаблицаЗначений +// - ТабличнаяЧасть - приемник данных. +// Источник - ТаблицаЗначений +// - ТабличнаяЧасть - источник данных. // Процедура ЗаполнитьТаблицуЗначений(Приемник, Знач Источник) Экспорт Приемник.Очистить(); @@ -2737,7 +2748,7 @@ // ВерсияКорреспондента - Строка - версия конфигурации-корреспондента. // // Возвращаемое значение: -// Структура - параметры контекста: +// Структура: // * ИмяКорреспондента - Строка - имя конфигурации корреспондента. // * ВерсияКорреспондента - Строка - номер версии конфигурации корреспондента. // @@ -2756,10 +2767,11 @@ // Параметры: // ИмяКорреспондента - Строка - имя конфигурации-корреспондента. // ВерсияКорреспондента - Строка - версия конфигурации-корреспондента. -// КорреспондентВМоделиСервиса - Булево или Неопределено - признак того, что корреспондент находится в модели сервиса. +// КорреспондентВМоделиСервиса - Булево +// - Неопределено - признак того, что корреспондент находится в модели сервиса. // // Возвращаемое значение: -// Структура - параметры контекста: +// Структура: // * ВерсияКорреспондента - Строка - номер версии конфигурации корреспондента. // * ИмяКорреспондента - Строка - имя конфигурации корреспондента. // * КорреспондентВМоделиСервиса - Булево - Истина, если корреспондент работает в модели сервиса. @@ -2775,46 +2787,65 @@ КонецФункции +// Возвращает пустую таблицу вариантов настройки обмена. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ИдентификаторНастройки - Строка - идентификатор настройки. +// * КорреспондентВМоделиСервиса - Булево - Истина, если поддерживается настройка обмена +// с корреспондентом, работающим в модели сервиса. +// * КорреспондентВЛокальномРежиме - Булево - Истина, если поддерживается настройка обмена +// с корреспондентом, работающим в локальном режиме. +// +Функция КоллекцияВариантовНастроекОбмена() Экспорт + + ВариантыНастроекОбмена = Новый ТаблицаЗначений; + ВариантыНастроекОбмена.Колонки.Добавить("ИдентификаторНастройки", Новый ОписаниеТипов("Строка")); + ВариантыНастроекОбмена.Колонки.Добавить("КорреспондентВМоделиСервиса", Новый ОписаниеТипов("Булево")); + ВариантыНастроекОбмена.Колонки.Добавить("КорреспондентВЛокальномРежиме", Новый ОписаниеТипов("Булево")); + + Возврат ВариантыНастроекОбмена; + +КонецФункции + // Определяет настройки по умолчанию для плана обмена, которые затем могут быть переопределены // в модуле менеджера плана обмена в процедуре ПриПолученииНастроек(). // // Возвращаемое значение: -// Структура - содержит поля: -// * ВариантыНастроекОбмена - ТаблицаЗначений - Возможные настройки плана обмена: -// ** ИдентификаторНастройки - Строка - идентификатор настройки. -// ** КорреспондентВМоделиСервиса - Булево - Истина, если поддерживается настройка обмена -// с корреспондентом, работающим в модели сервиса. -// ** КорреспондентВЛокальномРежиме - Булево - Истина, если поддерживается настройка обмена -// с корреспондентом, работающим в локальном режиме. +// Структура: +// * ВариантыНастроекОбмена - см. КоллекцияВариантовНастроекОбмена // * ВидГруппыДляВариантовНастроек - ВидГруппыФормы - вариант вида группы для отображения в // дереве команд создания обмена вариантов настроек. -// * ИмяКонфигурацииИсточника - Строка - Имя конфигурации источника, выводимое в +// * ИмяКонфигурацииИсточника - Строка - имя конфигурации источника, выводимое в // пользовательском интерфейсе. -// * ИмяКонфигурацииПриемника - Структура - Перечень идентификаторов конфигураций-корреспондентов, +// * ИмяКонфигурацииПриемника - Структура - перечень идентификаторов конфигураций-корреспондентов, // обмен с которыми возможен через данный план обмена. -// * ВерсииФорматаОбмена - Соответствие - Соответствие номеров поддерживаемых версий формата +// * ВерсииФорматаОбмена - Соответствие - соответствие номеров поддерживаемых версий формата // и ссылок на общие модули с логикой обмена через формат. // Используется только для обменов через универсальный формат. -// * ФорматОбмена - Строка - Пространство имен XDTO пакета, в котором содержится +// * ФорматОбмена - Строка - пространство имен XDTO пакета, в котором содержится // универсальный формат, без указания версии формата. // Используется только для обменов через универсальный формат. -// * ПланОбменаИспользуетсяВМоделиСервиса - Булево - Признак использования плана обмена для организации +// * РасширенияФорматаОбмена - Соответствие: +// ** Ключ - Строка - URI пространства имен схемы расширения формата. +// ** Значение - Строка - номер расширяемой версии формата. +// * ПланОбменаИспользуетсяВМоделиСервиса - Булево - признак использования плана обмена для организации // обмена в модели сервиса. -// * ЭтоПланОбменаXDTO - Булево - Признак того, что это план обмена через +// * ЭтоПланОбменаXDTO - Булево - признак того, что это план обмена через // универсальный формат. -// * ПредупреждатьОНесоответствииВерсийПравилОбмена - Булево - Признак необходимости проверки на +// * ПредупреждатьОНесоответствииВерсийПравилОбмена - Булево - признак необходимости проверки на // расхождение версий в правилах конвертации. // Проверка выполняется при загрузке комплекта // правил, при отправке данных и при получении данных. -// * ИмяПланаОбменаДляПереходаНаНовыйОбмен - Строка - Если для плана обмена свойство установлено, в +// * ИмяПланаОбменаДляПереходаНаНовыйОбмен - Строка - если для плана обмена свойство установлено, в // рабочих местах управления настройками не будет // предлагаться настроить этот вид обмена. // Существующие обмены этого вида будут продолжать // отображаться в списке настроенных обменов. // Получении сообщения обмена в новом формате будет // инициировать переход на новый вид обмена. -// * НазначениеПланаОбмена - Строка - Вариант назначения плана обмена. -// * Алгоритмы - Структура - Перечень экспортных процедур и функций, которые +// * НазначениеПланаОбмена - Строка - вариант назначения плана обмена. +// * Алгоритмы - Структура - перечень экспортных процедур и функций, которые // объявлены в модуле менеджера плана обмена // и используются подсистемой обмена данными. // @@ -2825,11 +2856,6 @@ НазначениеПланаОбмена = "РИБ"; КонецЕсли; - ВариантыНастроекОбмена = Новый ТаблицаЗначений; - ВариантыНастроекОбмена.Колонки.Добавить("ИдентификаторНастройки", Новый ОписаниеТипов("Строка")); - ВариантыНастроекОбмена.Колонки.Добавить("КорреспондентВМоделиСервиса", Новый ОписаниеТипов("Булево")); - ВариантыНастроекОбмена.Колонки.Добавить("КорреспондентВЛокальномРежиме", Новый ОписаниеТипов("Булево")); - Алгоритмы = Новый Структура; Алгоритмы.Вставить("ПриПолученииВариантовНастроекОбмена", Ложь); Алгоритмы.Вставить("ПриПолученииОписанияВариантаНастройки", Ложь); @@ -2857,11 +2883,12 @@ Алгоритмы.Вставить("ПередНастройкойСинхронизацииДанных", Ложь); Параметры = Новый Структура; - Параметры.Вставить("ВариантыНастроекОбмена", ВариантыНастроекОбмена); + Параметры.Вставить("ВариантыНастроекОбмена", КоллекцияВариантовНастроекОбмена()); Параметры.Вставить("ИмяКонфигурацииИсточника", ""); Параметры.Вставить("ИмяКонфигурацииПриемника", Новый Структура); Параметры.Вставить("ВерсииФорматаОбмена", Новый Соответствие); Параметры.Вставить("ФорматОбмена", ""); + Параметры.Вставить("РасширенияФорматаОбмена", Новый Соответствие); Параметры.Вставить("ПланОбменаИспользуетсяВМоделиСервиса", Ложь); Параметры.Вставить("ЭтоПланОбменаXDTO", Ложь); Параметры.Вставить("ИмяПланаОбменаДляПереходаНаНовыйОбмен", ""); @@ -2880,42 +2907,42 @@ // ИмяПланаОбмена - Строка - содержит имя плана обмена. // // Возвращаемое значение: -// Структура - содержит поля: -// * Отборы - Структура - Отборы на узле плана обмена, +// Структура: +// * Отборы - Структура - отборы на узле плана обмена, // подлежат заполнению значениями по умолчанию. -// * ЗначенияПоУмолчанию - Структура - Значения по умолчанию на узле плана обмена. -// * ОбщиеДанныеУзлов - Строка - Имена реквизитов и табличных частей плана обмена, +// * ЗначенияПоУмолчанию - Структура - значения по умолчанию на узле плана обмена. +// * ОбщиеДанныеУзлов - Строка - имена реквизитов и табличных частей плана обмена, // через запятую, которые являются общими для пары // обменивающихся конфигураций. -// * ИспользоватьПомощникСозданияОбменаДанными - Булево - Признак, будет ли использоваться помощник для +// * ИспользоватьПомощникСозданияОбменаДанными - Булево - признак, будет ли использоваться помощник для // создания новых узлов плана обмена. -// * ИмяФормыСозданияНачальногоОбраза - Строка - Имя используемой формы создания начального +// * ИмяФормыСозданияНачальногоОбраза - Строка - имя используемой формы создания начального // образа распределенной ИБ. -// * ИмяФормыПомощникаНастройкиСинхронизацииДанных - Строка - Имя формы, которая будет использована для настройки +// * ИмяФормыПомощникаНастройкиСинхронизацииДанных - Строка - имя формы, которая будет использована для настройки // правил отправки и получения данных вместо // стандартной формы. -// * ПояснениеДляНастройкиПараметровУчета - Строка - Пояснение о последовательности действий пользователя +// * ПояснениеДляНастройкиПараметровУчета - Строка - пояснение о последовательности действий пользователя // для настройки параметров учета в текущей // информационной базе. -// * ПутьКФайлуКомплектаПравилНаПользовательскомСайте - Строка - Путь к файлу комплекта правил в виде архива +// * ПутьКФайлуКомплектаПравилНаПользовательскомСайте - Строка - путь к файлу комплекта правил в виде архива // на пользовательском сайте в разделе конфигурации. -// * ПутьКФайлуКомплектаПравилВКаталогеШаблонов - Строка - Относительный путь к файлу комплекта правил в +// * ПутьКФайлуКомплектаПравилВКаталогеШаблонов - Строка - относительный путь к файлу комплекта правил в // каталоге шаблонов. -// * ЗаголовокКомандыДляСозданияНовогоОбменаДанными - Строка - Представление команды, выводимое в пользовательском +// * ЗаголовокКомандыДляСозданияНовогоОбменаДанными - Строка - представление команды, выводимое в пользовательском // интерфейсе при создании новой настройки // обмена данными. -// * ЗаголовокПомощникаСозданияОбмена - Строка - Представление заголовка формы помощника +// * ЗаголовокПомощникаСозданияОбмена - Строка - представление заголовка формы помощника // создания обмена данными выводимое в // пользовательском интерфейсе. -// * ЗаголовокУзлаПланаОбмена - Строка - Представление узла плана обмена +// * ЗаголовокУзлаПланаОбмена - Строка - представление узла плана обмена // выводимое в пользовательском интерфейсе. -// * ИмяКонфигурацииКорреспондента - Строка - Идентификатор конфигурации корреспондента. -// * НаименованиеКонфигурацииКорреспондента - Строка - Представление наименования конфигурации корреспондента +// * ИмяКонфигурацииКорреспондента - Строка - идентификатор конфигурации корреспондента. +// * НаименованиеКонфигурацииКорреспондента - Строка - представление наименования конфигурации корреспондента // выводимое в пользовательском интерфейсе. // * ИспользуемыеТранспортыСообщенийОбмена - Массив из // ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - Перечень используемых транспортов сообщений. Если не заполнен, будут доступны все // возможные виды транспорта. -// * КраткаяИнформацияПоОбмену - Строка - Краткое описание обмена данными, которое +// * КраткаяИнформацияПоОбмену - Строка - краткое описание обмена данными, которое // выводится на первой странице помощника // создания обмена. // * ПодробнаяИнформацияПоОбмену - Строка - ссылка на веб-страницу или полный путь к @@ -2927,6 +2954,12 @@ // интерактивное сопоставление данных. В // противном случае полученные сообщения обмена // будут сразу загружаться в информационную базу. +// * РасширениеФормата - Строка - имя расширения формата, применимое для +// данного варианта настройки. Образуется из URI +// пространства имен схемы расширения формата, +// без учета версии. Напр., для пространства +// имен +// "http://v8.1c.ru/edi/edi_stnd/_DemoEnterpriseDataExt/1.1" имя расширение формата будет "http://v8.1c.ru/edi/edi_stnd/_DemoEnterpriseDataExt"; // Функция ОписаниеВариантаНастройкиОбменаПоУмолчанию(ИмяПланаОбмена) Экспорт @@ -2958,6 +2991,7 @@ ОписаниеВарианта.Вставить("ПодробнаяИнформацияПоОбмену", ""); ОписаниеВарианта.Вставить("ИмяФайлаНастроекДляПриемника", ""); ОписаниеВарианта.Вставить("ПоддерживаетсяСопоставлениеДанных", Истина); + ОписаниеВарианта.Вставить("РасширениеФормата", ""); Возврат ОписаниеВарианта; @@ -3027,6 +3061,28 @@ КонецФункции +// Структура описания стандартных вариантов дополнения выгрузки. +// +// Возвращаемое значение: +// Структура - набор вариантов дополнения выгрузки: +// * ВариантБезДополнения - см. ОписаниеСтандартногоВариантаБезДополнения +// * ВариантВсеДокументы - см. ОписаниеСтандартногоВариантаВсеДокументы +// * ВариантПроизвольныйОтбор - см. ОписаниеСтандартногоВариантаПроизвольныйОтбор +// * ВариантДополнительно - см. ОписаниеСтандартногоВариантаДополнительно +// +Функция ОписаниеСтандартныхВариантовДополненияВыгрузки() Экспорт + + Результат = Новый Структура; + + Результат.Вставить("ВариантБезДополнения", ОписаниеСтандартногоВариантаБезДополнения()); + Результат.Вставить("ВариантВсеДокументы", ОписаниеСтандартногоВариантаВсеДокументы()); + Результат.Вставить("ВариантПроизвольныйОтбор", ОписаниеСтандартногоВариантаПроизвольныйОтбор()); + Результат.Вставить("ВариантДополнительно", ОписаниеСтандартногоВариантаДополнительно()); + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область ОберткиДляРаботыСПрограммнымИнтерфейсомМенеджераПланаОбмена @@ -3065,8 +3121,8 @@ // Возвращает признак, предусмотрен ли указанная процедура / функция в модуле менеджера плана обмена. // Вычисляется по настройкам плана обмена, свойство Алгоритмы (см. комментарий НастройкиПланаОбменаПоУмолчанию). // Параметры: -// ИмяАлгоритма - Строка - Имя процедуры / функции. -// ИмяПланаОбмена - Строка - Имя плана обмена. +// ИмяАлгоритма - Строка - имя процедуры / функции. +// ИмяПланаОбмена - Строка - имя плана обмена. // Возвращаемое значение: // Булево. // @@ -3088,8 +3144,8 @@ // Рассчитывает процент выгрузки и записывает в виде сообщения пользователю. // // Параметры: -// КоличествоВыгруженных - Число - Количество выгруженных на данный момент объектов. -// КоличествоОбъектовКВыгрузке - Число - Количество объектов к выгрузке. +// КоличествоВыгруженных - Число - количество выгруженных на данный момент объектов. +// КоличествоОбъектовКВыгрузке - Число - количество объектов к выгрузке. // Процедура РассчитатьПроцентВыгрузки(КоличествоВыгруженных, КоличествоОбъектовКВыгрузке) Экспорт @@ -3122,9 +3178,9 @@ // Рассчитывает процент загрузки и записывает в виде сообщения пользователю. // // Параметры: -// КоличествоЗагруженных - Число - Количество загруженных на данный момент объектов. -// КоличествоОбъектовКЗагрузке - Число - Количество объектов к загрузке. -// РазмерФайлаСообщенияОбмена - Число - Размер файла сообщения обмена в мегабайтах. +// КоличествоЗагруженных - Число - количество загруженных на данный момент объектов. +// КоличествоОбъектовКЗагрузке - Число - количество объектов к загрузке. +// РазмерФайлаСообщенияОбмена - Число - размер файла сообщения обмена в мегабайтах. // Процедура РассчитатьПроцентЗагрузки(КоличествоЗагруженных, КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена) Экспорт // Сообщение о проценте загрузки выдаем через каждые 10 объектов. @@ -3166,7 +3222,7 @@ // Увеличение счетчика выгруженных объектов и расчет процента выгрузки. Только для РИБ. // // Параметры: -// Получатель - План обмена объект. +// Получатель - план обмена объект. // СозданиеНачальногоОбраза - булево. // Процедура РассчитатьПроцентВыгрузкиРИБ(Получатель, СозданиеНачальногоОбраза) Экспорт @@ -3217,7 +3273,7 @@ // Увеличение счетчика загруженных объектов и расчет процента загрузки. Только для РИБ. // // Параметры: -// Отправитель - План обмена объект. +// Отправитель - план обмена объект. // Процедура РассчитатьПроцентЗагрузкиРИБ(Отправитель) Экспорт @@ -3267,12 +3323,13 @@ // ЭтоОбменXDTO - Булево - признак того, что выполняется обмен через универсальный формат. // // Возвращаемое значение: -// Структура - свойства структуры: +// Структура: // * РазмерФайлаСообщенияОбмена - Число - размер файла в мегабайтах, по умолчанию 0. // * КоличествоОбъектовКЗагрузке - Число - количество объектов к загрузке, по умолчанию 0. -// * From - Строка - Код узла-отправителя сообщения. -// * To - Строка - Код узла-получателя сообщения. -// * NewFrom - Строка - Код узла-отправителя в новом формате (для перевода существующих обменов на новую кодировку). +// * From - Строка - код узла-отправителя сообщения. +// * To - Строка - код узла-получателя сообщения. +// * NewFrom - Строка - код узла-отправителя в новом формате (для перевода существующих обменов на новую кодировку). +// Функция РезультатАнализаДанныхКЗагрузке(Знач ИмяФайлаОбмена, ЭтоОбменXDTO, ЭтоОбменРИБ = Ложь) Экспорт Результат = Новый Структура; @@ -3577,10 +3634,10 @@ // Определяет является ли план обмена БСП разделенным. // // Параметры: -// ИмяПланаОбмена - Строка - Имя проверяемого плана обмена. +// ИмяПланаОбмена - Строка - имя проверяемого плана обмена. // // Возвращаемое значение: -// Тип - Булево +// Тип - булево // Функция ЭтоРазделенныйПланОбменаБСП(Знач ИмяПланаОбмена) Экспорт @@ -3809,7 +3866,7 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется итерация обмена данными. -// ПараметрыОбменаДляУзла - Структура - содержит следующие параметры: +// ПараметрыОбменаДляУзла - Структура: // * ВыполнятьЗагрузку - Булево - флаг необходимости выполнять загрузку данных. // Необязательный, значение по умолчанию Истина. // * ВыполнятьВыгрузку - Булево - флаг необходимости выполнять выгрузку данных. @@ -3945,7 +4002,7 @@ // Выполняет действия по удалению настройки синхронизации данных. // // Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - Ссылка на удаляемый узел плана обмена. +// УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на удаляемый узел плана обмена. // Процедура УдалитьНастройкуСинхронизации(УзелИнформационнойБазы) Экспорт @@ -3981,7 +4038,7 @@ // Выполняет действия по удалению настройки синхронизации данных с главным узлом РИБ. // // Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - Ссылка на главный узел. +// УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на главный узел. // Процедура УдалитьНастройкиСинхронизацииСГлавнымУзломРИБ(УзелИнформационнойБазы) Экспорт @@ -4044,7 +4101,7 @@ Для Каждого СтрокаДвижения Из ТаблицаДвижений Цикл // Имя регистра передается как значение, полученное с помощью // функции ПолноеИмя() метаданных регистра. - ПолноеИмяРегистра = СтрокаДвижения.Имя; + ПолноеИмяРегистра = СтрокаДвижения.ИмяТаблицыРегистра; МассивОбрабатываемыхСтрокТаблицыДвижений.Добавить(СтрокаДвижения); @@ -4065,23 +4122,27 @@ КонецЦикла; - ПропуститьПроверкуЗапретаИзменения(); - - Для Каждого СтрокаДвижения Из МассивОбрабатываемыхСтрокТаблицыДвижений Цикл - Попытка - Набор = СтрокаДвижения.НаборЗаписей; // РегистрНакопленияНаборЗаписей и т.п. - Набор.Записать(); - Исключение - // Возможно "сработало" ограничение на уровне записей или подсистема даты запрета изменения. - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Операция не выполнена: %1 - |%2'"), - СтрокаДвижения.Имя, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - КонецЦикла; - - ПропуститьПроверкуЗапретаИзменения(Ложь); + ПроверкаДатЗапретаОтключена = ПроверкаДатЗапретаОтключена(); + ОтключитьПроверкуДатЗапрета(Истина); + Попытка + Для Каждого СтрокаДвижения Из МассивОбрабатываемыхСтрокТаблицыДвижений Цикл + Попытка + Набор = СтрокаДвижения.НаборЗаписей; // РегистрНакопленияНаборЗаписей и т.п. + Набор.Записать(); + Исключение + // Возможно "сработало" ограничение на уровне записей или подсистема даты запрета изменения. + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Операция не выполнена: %1 + |%2'"), + СтрокаДвижения.ИмяТаблицыРегистра, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЦикла; + Исключение + ОтключитьПроверкуДатЗапрета(ПроверкаДатЗапретаОтключена); + ВызватьИсключение; + КонецПопытки; + ОтключитьПроверкуДатЗапрета(ПроверкаДатЗапретаОтключена); Для Каждого Движение Из ДокументОбъект.Движения Цикл Если Движение.Количество() > 0 Тогда @@ -4350,6 +4411,10 @@ // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда + Возврат; + КонецЕсли; + ПриЗаполненииСпискаТекущихДелПредупрежденияСинхронизации(ТекущиеДела); ПриЗаполненииСпискаТекущихДелНеобходимоОбновление(ТекущиеДела); ПриЗаполненииСпискаТекущихДелПроверитьСовместимостьСТекущейВерсией(ТекущиеДела); @@ -4427,60 +4492,90 @@ #Область ФункцииСвойства +// Возвращаемое значение: +// Строка +// Функция СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису() Экспорт Возврат НСтр("ru = 'Обмен данными.Установка подключения к web-сервису'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции +// Возвращаемое значение: +// Строка +// Функция СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными() Экспорт Возврат НСтр("ru = 'Обмен данными.Загрузка правил'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции +// Возвращаемое значение: +// Строка +// Функция СобытиеЖурналаРегистрацииСозданиеОбменаДанными() Экспорт Возврат НСтр("ru = 'Обмен данными.Создание обмена данными'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции +// Возвращаемое значение: +// Строка +// Функция СобытиеЖурналаРегистрацииУдалениеОбменаДанными() Экспорт Возврат НСтр("ru = 'Обмен данными.Удаление обмена данными'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции +// Возвращаемое значение: +// Строка +// Функция СобытиеЖурналаРегистрацииРегистрацияДанныхДляНачальнойВыгрузки() Экспорт Возврат НСтр("ru = 'Обмен данными.Регистрация данных для начальной выгрузки'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции +// Возвращаемое значение: +// Строка +// Функция СобытиеЖурналаРегистрацииВыгрузкаДанныхДляСопоставления() Экспорт Возврат НСтр("ru = 'Обмен данными.Выгрузка данных для сопоставления'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции +// Возвращаемое значение: +// Строка +// Функция СобытиеЖурналаРегистрацииУдалениеВременногоФайла() Экспорт Возврат НСтр("ru = 'Обмен данными.Удаление временного файла'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции +// Возвращаемое значение: +// Строка +// Функция СобытиеЖурналаРегистрацииОбменДанными() Экспорт Возврат НСтр("ru = 'Обмен данными'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции +// Возвращаемое значение: +// Строка +// Функция СобытиеЖурналаРегистрацииВыгрузкаДанныхВСервисПередачиФайлов() Экспорт Возврат НСтр("ru = 'Обмен данными.Сервис передачи файлов.Выгрузка данных'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции +// Возвращаемое значение: +// Строка +// Функция СобытиеЖурналаРегистрацииЗагрузкаДанныхИзСервисаПередачиФайлов() Экспорт Возврат НСтр("ru = 'Обмен данными.Сервис передачи файлов.Загрузка данных'", ОбщегоНазначения.КодОсновногоЯзыка()); @@ -4567,15 +4662,26 @@ КонецФункции -Процедура ПропуститьПроверкуЗапретаИзменения(Пропустить = Истина) +Процедура ОтключитьПроверкуДатЗапрета(Отключить = Истина) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда - МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); - МодульДатыЗапретаИзмененияСлужебный.ПропуститьПроверкуЗапретаИзменения(Пропустить); + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + МодульДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Отключить); КонецЕсли; КонецПроцедуры +Функция ПроверкаДатЗапретаОтключена() + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + Возврат МодульДатыЗапретаИзменения.ПроверкаДатЗапретаОтключена(); + КонецЕсли; + + Возврат Ложь; + +КонецФункции + Процедура ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(Знач ИмяПользователя) НедопустимыеСимволы = НедопустимыеСимволыВИмениПользователяWSПрокси(); @@ -4700,23 +4806,27 @@ ОбъектСравнения = Новый СравнениеЗначений; ДокументыДляОтложенногоПроведения.Сортировать("ДатаДокумента, ДокументСсылка", ОбъектСравнения); - ПропуститьПроверкуЗапретаИзменения(); - - Для Каждого СтрокаТаблицы Из ДокументыДляОтложенногоПроведения Цикл - - Если СтрокаТаблицы.ДокументСсылка.Пустая() Тогда - Продолжить; - КонецЕсли; - - Если Не ОбщегоНазначения.СсылкаСуществует(СтрокаТаблицы.ДокументСсылка) Тогда - Продолжить; - КонецЕсли; - - ВыполнитьПроведениеДокументаПриЗагрузке(УзелКорреспондента, СтрокаТаблицы.ДокументСсылка, Истина); - - КонецЦикла; - - ПропуститьПроверкуЗапретаИзменения(Ложь); + ПроверкаДатЗапретаОтключена = ПроверкаДатЗапретаОтключена(); + ОтключитьПроверкуДатЗапрета(Истина); + Попытка + Для Каждого СтрокаТаблицы Из ДокументыДляОтложенногоПроведения Цикл + + Если СтрокаТаблицы.ДокументСсылка.Пустая() Тогда + Продолжить; + КонецЕсли; + + Если Не ОбщегоНазначения.СсылкаСуществует(СтрокаТаблицы.ДокументСсылка) Тогда + Продолжить; + КонецЕсли; + + ВыполнитьПроведениеДокументаПриЗагрузке(УзелКорреспондента, СтрокаТаблицы.ДокументСсылка, Истина); + + КонецЦикла; + Исключение + ОтключитьПроверкуДатЗапрета(ПроверкаДатЗапретаОтключена); + ВызватьИсключение; + КонецПопытки; + ОтключитьПроверкуДатЗапрета(ПроверкаДатЗапретаОтключена); КонецПроцедуры @@ -4785,93 +4895,97 @@ Возврат; // Нет объектов в очереди КонецЕсли; - ПропуститьПроверкуЗапретаИзменения(); - - Для Каждого ОбъектСоответствия Из ОбъектыДляОтложеннойЗаписи Цикл - - Если ОбъектСоответствия.Ключ.Пустая() Тогда - Продолжить; - КонецЕсли; - - Если Не ОбщегоНазначения.СсылкаСуществует(ОбъектСоответствия.Ключ) Тогда - Продолжить; - КонецЕсли; - - ОписаниеОшибки = ""; - ОбъектЗаписанУспешно = Ложь; - - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(ОбъектСоответствия.Ключ)); - ЭлементБлокировки.УстановитьЗначение("Ссылка", ОбъектСоответствия.Ключ); - Блокировка.Заблокировать(); + ПроверкаДатЗапретаОтключена = ПроверкаДатЗапретаОтключена(); + ОтключитьПроверкуДатЗапрета(Истина); + Попытка + Для Каждого ОбъектСоответствия Из ОбъектыДляОтложеннойЗаписи Цикл - ЗаблокироватьДанныеДляРедактирования(ОбъектСоответствия.Ключ); - Объект = ОбъектСоответствия.Ключ.ПолучитьОбъект(); - - // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку - // проведение выполняем не в режиме загрузки. - УстановитьОбменДаннымиЗагрузка(Объект, Ложь, Ложь, УзелКорреспондента); + Если ОбъектСоответствия.Ключ.Пустая() Тогда + Продолжить; + КонецЕсли; - ДополнительныеСвойства = ОбъектСоответствия.Значение; + Если Не ОбщегоНазначения.СсылкаСуществует(ОбъектСоответствия.Ключ) Тогда + Продолжить; + КонецЕсли; - Для Каждого Свойство Из ДополнительныеСвойства Цикл + ОписаниеОшибки = ""; + ОбъектЗаписанУспешно = Ложь; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(ОбъектСоответствия.Ключ)); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ОбъектСоответствия.Ключ); + Блокировка.Заблокировать(); - Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); - - КонецЦикла; + ЗаблокироватьДанныеДляРедактирования(ОбъектСоответствия.Ключ); + Объект = ОбъектСоответствия.Ключ.ПолучитьОбъект(); - Объект.ДополнительныеСвойства.Вставить("ОтложеннаяЗапись"); - - Если Объект.ПроверитьЗаполнение() Тогда + // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку + // проведение выполняем не в режиме загрузки. + УстановитьОбменДаннымиЗагрузка(Объект, Ложь, Ложь, УзелКорреспондента); - // При проведении документа снимаем запрет на выполнение ПРО, - // т.к. ПРО были проигнорированы при обычной записи с целью оптимизации скорости загрузки данных. - Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда - Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); + ДополнительныеСвойства = ОбъектСоответствия.Значение; + + Для Каждого Свойство Из ДополнительныеСвойства Цикл + + Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); + + КонецЦикла; + + Объект.ДополнительныеСвойства.Вставить("ОтложеннаяЗапись"); + + Если Объект.ПроверитьЗаполнение() Тогда + + // При проведении документа снимаем запрет на выполнение ПРО, + // т.к. ПРО были проигнорированы при обычной записи с целью оптимизации скорости загрузки данных. + Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда + Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); + КонецЕсли; + + Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + + // Выполняем попытку записи объекта. + СведенияОВерсииОбъекта = Неопределено; + Если Объект.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта) Тогда + ОбменДаннымиСобытия.ПриСозданииВерсииОбъекта(Объект, СведенияОВерсииОбъекта, Истина, УзелКорреспондента); + КонецЕсли; + Объект.Записать(); + + ОбъектЗаписанУспешно = Истина; + + Иначе + + ОбъектЗаписанУспешно = Ложь; + + ОписаниеОшибки = НСтр("ru = 'Ошибка проверки заполнения реквизитов'"); + КонецЕсли; - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + ЗафиксироватьТранзакцию(); - // Выполняем попытку записи объекта. - СведенияОВерсииОбъекта = Неопределено; - Если Объект.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта) Тогда - ОбменДаннымиСобытия.ПриСозданииВерсииОбъекта(Объект, СведенияОВерсииОбъекта, Истина, УзелКорреспондента); - КонецЕсли; - Объект.Записать(); + Исключение - ОбъектЗаписанУспешно = Истина; + ОтменитьТранзакцию(); - Иначе + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ОбъектЗаписанУспешно = Ложь; - ОписаниеОшибки = НСтр("ru = 'Ошибка проверки заполнения реквизитов'"); + КонецПопытки; + + Если Не ОбъектЗаписанУспешно Тогда + + ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелКорреспондента, ОписаниеОшибки); КонецЕсли; - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - - ОбъектЗаписанУспешно = Ложь; - - КонецПопытки; - - Если Не ОбъектЗаписанУспешно Тогда - - ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелКорреспондента, ОписаниеОшибки); - - КонецЕсли; - - КонецЦикла; - - ПропуститьПроверкуЗапретаИзменения(Ложь); + КонецЦикла; + Исключение + ОтключитьПроверкуДатЗапрета(ПроверкаДатЗапретаОтключена); + ВызватьИсключение; + КонецПопытки; + ОтключитьПроверкуДатЗапрета(ПроверкаДатЗапретаОтключена); КонецПроцедуры @@ -5018,7 +5132,7 @@ // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении сценария. // НастройкаВыполненияОбмена - СправочникСсылка.СценарииОбменовДанными - элемент справочника, // по значениям реквизитов которого будет выполнен обмен данными. -// НомерСтроки - Число - Номер строки по которой будет выполнен обмен данными. +// НомерСтроки - Число - номер строки по которой будет выполнен обмен данными. // Если не указан, то обмен данными будет выполнен для всех строк. // Процедура ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, НастройкаВыполненияОбмена, НомерСтроки = Неопределено) Экспорт @@ -5368,10 +5482,10 @@ // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки. // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена. -// ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла. -// ДлительнаяОперация - Булево - Признак использования длительное операции. -// ИдентификаторОперации - УникальныйИдентификатор - Уникальный идентификатор длительной операции. -// ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). +// ИдентификаторФайла - УникальныйИдентификатор - идентификатор файла. +// ДлительнаяОперация - Булево - признак использования длительное операции. +// ИдентификаторОперации - УникальныйИдентификатор - уникальный идентификатор длительной операции. +// ПараметрыАутентификации - Структура - содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). // // Возвращаемое значение: // Структура со следующими ключи: @@ -5508,8 +5622,8 @@ // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки. // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена. -// ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла. -// ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). +// ИдентификаторФайла - УникальныйИдентификатор - идентификатор файла. +// ПараметрыАутентификации - Структура - содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). // // Возвращаемое значение: // Структура со следующими ключи: @@ -5598,9 +5712,9 @@ // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки. // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена. -// ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла. -// ДатаНачалаОперации - Дата - Дата начала загрузки. -// ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). +// ИдентификаторФайла - УникальныйИдентификатор - идентификатор файла. +// ДатаНачалаОперации - Дата - дата начала загрузки. +// ПараметрыАутентификации - Структура - содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). // Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( Отказ, @@ -7972,6 +8086,9 @@ // Дубль процедуры на сервере ОбменДаннымиКлиент.МаксимальноеКоличествоПолейСопоставленияОбъектов(). // +// Возвращаемое значение: +// Число +// Функция МаксимальноеКоличествоПолейСопоставленияОбъектов() Экспорт Возврат 5; @@ -7981,7 +8098,7 @@ // Определяет, входит ли план обмена в список планов обмена, которые используют обмен данными по формату XDTO. // // Параметры: -// ПланОбмена - Ссылка на узел плана обмена или имя плана обмена. +// ПланОбмена - ПланОбменаСсылка - ссылка на узел плана обмена или имя плана обмена. // // Возвращаемое значение: // Булево - Истина, если план обмена используется для обмена данными по формату XDTO. @@ -8403,12 +8520,13 @@ // // Параметры: // -// Получатель - ПланОбменаСсылка - Узел плана обмена, +// Получатель - ПланОбменаСсылка - узел плана обмена, // для которого требуется выполнить регистрацию изменений данных. // ДатаНачалаВыгрузки - Дата - дата, относительно которой необходимо выполнить // регистрацию изменений данных для выгрузки. Изменения будут зарегистрированы для данных, // которые на оси времени располагаются после этой даты. -// Организации - Массив, Неопределено - Список организаций, для которых необходимо выполнить регистрацию +// Организации - Массив +// - Неопределено - список организаций, для которых необходимо выполнить регистрацию // изменений данных. Если параметр не задан, то организации не будут // учитываться при регистрации изменений. // @@ -8813,12 +8931,13 @@ // Заполняет настройки для плана обмена, которые далее используются подсистемой обмена данными. // Параметры: -// ИмяПланаОбмена - Строка - Имя плана обмена. -// ВерсияКорреспондента - Строка - Версия конфигурации-корреспондента. -// ИмяКорреспондента - Строка - Имя конфигурации корреспондента. -// КорреспондентВМоделиСервиса - Булево или Неопределено - Признак того, что корреспондент находится в модели сервиса. +// ИмяПланаОбмена - Строка - имя плана обмена. +// ВерсияКорреспондента - Строка - версия конфигурации-корреспондента. +// ИмяКорреспондента - Строка - имя конфигурации корреспондента. +// КорреспондентВМоделиСервиса - Булево или Неопределено - признак того, что корреспондент находится в модели сервиса. // Возвращаемое значение: -// Структура - подробнее см. комментарий к функции НастройкиПланаОбменаПоУмолчанию. +// см. НастройкиПланаОбменаПоУмолчанию. +// Функция НастройкиПланаОбмена(ИмяПланаОбмена, ВерсияКорреспондента, ИмяКорреспондента, КорреспондентВМоделиСервиса) Экспорт НастройкиПланаОбмена = НастройкиПланаОбменаПоУмолчанию(ИмяПланаОбмена); УстановитьПривилегированныйРежим(Истина); @@ -8844,13 +8963,13 @@ // Заполняет настройки, относящиеся к варианту настройки обмена, которые далее используются подсистемой обмена данными. // // Параметры: -// ИмяПланаОбмена - Строка - Имя плана обмена. -// ИдентификаторНастройки - Строка - Идентификатор варианта настройки обмена. -// ВерсияКорреспондента - Строка - Версия конфигурации-корреспондента. -// ИмяКорреспондента - Строка - Имя конфигурации корреспондента. +// ИмяПланаОбмена - Строка - имя плана обмена. +// ИдентификаторНастройки - Строка - идентификатор варианта настройки обмена. +// ВерсияКорреспондента - Строка - версия конфигурации-корреспондента. +// ИмяКорреспондента - Строка - имя конфигурации корреспондента. // // Возвращаемое значение: -// Структура - см. ОписаниеВариантаНастройкиОбменаПоУмолчанию +// см. ОписаниеВариантаНастройкиОбменаПоУмолчанию // Функция ОписаниеВариантаНастройки(ИмяПланаОбмена, ИдентификаторНастройки, ВерсияКорреспондента, ИмяКорреспондента) Экспорт @@ -10391,8 +10510,8 @@ // Регистрирует ошибки при отложенном проведении документа в мониторе проблем обмена. // // Параметры: -// Объект - ДокументОбъект - Документ при отложенном проведении которого возникли ошибки. -// УзелОбмена - ПланОбменаСсылка - Узел информационной базы из которой получен документ. +// Объект - ДокументОбъект - документ при отложенном проведении которого возникли ошибки. +// УзелОбмена - ПланОбменаСсылка - узел информационной базы из которой получен документ. // СообщениеОбОшибке - Строка - текст сообщения для журнала регистрации. // Рекомендуется передавать в качестве этого параметра КраткоеПредставлениеОшибки(ИнформацияОбОшибке()). // Текст сообщения для отображения в мониторе формируется из системных сообщений пользователю, которые @@ -10465,7 +10584,7 @@ // // Параметры: // Объект - СправочникОбъект, ДокументОбъект и т.п. - объект, при отложенной записи которого возникли ошибки. -// УзелОбмена - ПланОбменаСсылка - Узел информационной базы из которой получен объект. +// УзелОбмена - ПланОбменаСсылка - узел информационной базы из которой получен объект. // СообщениеОбОшибке - Строка - текст сообщения для журнала регистрации. // Рекомендуется передавать в качестве этого параметра КраткоеПредставлениеОшибки(ИнформацияОбОшибке()). // Текст сообщения для отображения в мониторе формируется из системных сообщений пользователю, которые @@ -10536,6 +10655,7 @@ // Получатель - ПланОбменаОбъект - узел плана обмена, соответствующий получателю. // // Возвращаемое значение - число. +// Функция РассчитатьКоличествоОбъектовВБазе(Получатель) ИмяПланаОбмена = Получатель.Метаданные().Имя; @@ -10634,9 +10754,10 @@ // Подсчет количества объектов, зарегистрированных в плане обмена. // // Параметры: -// Получатель - План обмена объект. +// Получатель - план обмена объект. // // Возвращаемое значение - число. +// Функция РассчитатьКоличествоЗарегистрированныхОбъектов(Получатель) Экспорт ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Получатель.Ссылка, Получатель.НомерОтправленного + 1); @@ -10813,18 +10934,12 @@ // Возвращает текст запроса для получения данных узлов планов обмена. // // Параметры: -// ПараметрыЗапроса - Структура - структура параметров (см. функцию ПараметрыЗапросаПланыОбменаДляМонитора): -// * ПланыОбменаМассив - Массив - имена планов обмена БСП. По умолчанию все планы обмена БСП. -// * ДополнительныеСвойстваПланаОбмена - Строка - свойства узлов, значения которых необходимо получить. -// по умолчанию пустая строка. -// * РезультатВоВременнуюТаблицу - Булево - Если Истина, в запросе будет описано помещение результата -// во временную таблицу ПланыОбменаКонфигурации. -// По умолчанию Ложь. -// ИсключитьПланыОбменаАвтономнойРаботы - Булево - Если Истина, то из текста запроса исключаются планы обмена +// ПараметрыЗапроса - см. ПараметрыЗапросаПланыОбменаДляМонитора +// ИсключитьПланыОбменаАвтономнойРаботы - Булево - если Истина, то из текста запроса исключаются планы обмена // автономной работы. // // Возвращаемое значение: -// Строка - Результирующий текст запроса. +// Строка - результирующий текст запроса. // Функция ТекстЗапросаПланыОбменаДляМонитора(ПараметрыЗапроса = Неопределено, ИсключитьПланыОбменаАвтономнойРаботы = Истина) Экспорт @@ -11603,7 +11718,7 @@ // ИмяТаблицы - Строка - полное имя таблицы базы данных. Например: "Справочник.Контрагенты.Заказы". // // Возвращаемое значение: -// Число - Количество записей в таблице базы данных. +// Число - количество записей в таблице базы данных. // Функция КоличествоЗаписейВТаблицеБазыДанных(Знач ИмяТаблицы) Экспорт @@ -11633,7 +11748,7 @@ // МенеджерВременныхТаблиц - менеджер временных таблиц, который содержит указатель на временную таблицу ИмяТаблицы. // // Возвращаемое значение: -// Число - Количество записей в таблице базы данных. +// Число - количество записей в таблице базы данных. // Функция КоличествоЗаписейВоВременнойТаблицеБазыДанных(Знач ИмяТаблицы, МенеджерВременныхТаблиц) Экспорт @@ -12115,7 +12230,7 @@ // Запрос - Запрос - запрос для построения дерева. // // Возвращаемое значение: -// ДеревоЗначений - колонки: +// ДеревоЗначений: // * Ссылка - ЛюбаяСсылка - ссылка на объект. // * Представление - Строка - представление объекта. // * ИндексКартинки - Число - индекс пиктограммы объекта. @@ -12273,10 +12388,10 @@ КонецФункции // Параметры: -// ДеревоИнформацииСтатистики - ДеревоЗначений - -// ИнформацияСтатистики - ТаблицаЗначений - -// Отбор - Структура - -// УжеОбработанныеСтроки - Соответствие - +// ДеревоИнформацииСтатистики - ДеревоЗначений +// ИнформацияСтатистики - ТаблицаЗначений +// Отбор - Структура +// УжеОбработанныеСтроки - Соответствие // Процедура ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор, УжеОбработанныеСтроки) @@ -12399,8 +12514,9 @@ // СтруктураНастроек - структура настроек транспорта COM обмена. // // Возвращаемое значение: -// Структура - -// * Соединение - COMОбъект, Неопределено - указатель на COM-объект соединения или Неопределено в +// Структура: +// * Соединение - COMОбъект +// - Неопределено - указатель на COM-объект соединения или Неопределено в // случае ошибки; // * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; // * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; @@ -12476,20 +12592,21 @@ // // Параметры: // Прокси - WSПрокси - WS-прокси для передачи управляющих команд. -// СтруктураНастроек - Структура - структура параметров для подключения к корреспонденту и идентификации настройки обмена. +// СтруктураНастроек - Структура - структура параметров для подключения к корреспонденту и идентификации настройки обмена: // * ИмяПланаОбмена - Строка - имя плана обмена, используемого при синхронизации. // * УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, соответствующий корреспонденту. // * КлючСообщенияЖурналаРегистрации - Строка - имя события для записи ошибок в журнал регистрации. // * ТекущийУзелПланаОбмена - ПланОбменаСсылка - ссылка на ЭтотУзел плана обмена. // * ТекущийУзелПланаОбменаКод - Строка - идентификатор текущего узла плана обмена. // * ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - указывает на направление обмена. -// ПараметрыПрокси - Структура -// * ПараметрыАутентификации - Строка, Структура - содержит пароль для аутентификации на веб-сервере. +// ПараметрыПрокси - Структура: +// * ПараметрыАутентификации - Строка +// - Структура - содержит пароль для аутентификации на веб-сервере. // * СтруктураНастроекАутентификации - Структура - содержит структуру настроек для аутентификации на веб-сервере. // * МинимальнаяВерсия - Строка - номер минимальной версии интерфейса "ОбменДанными", требуемый для выполнения действий. // * ТекущаяВерсия - Строка - исходящий, фактическая версия интерфейса инициализированного WS-прокси. // Отказ - Булево - признак неуспешной инициализации WS-прокси. -// СостояниеНастройки - Структура - исходящий, возвращает состояние настройки синхронизации, описанной в СтруктураНастроек. +// СостояниеНастройки - Структура - исходящий, возвращает состояние настройки синхронизации, описанной в СтруктураНастроек: // * НастройкаСуществует - Булево - Истина, если настройка с указанными планом обмена и идентификатором узла существует. // * НастройкаСинхронизацииДанныхЗавершена - Булево - Истина, если настройка синхронизации завершена. // * ПоддерживаетсяСопоставлениеДанных - Булево - Истина, если корреспондент поддерживает функцию сопоставления данных. @@ -12818,8 +12935,8 @@ // Выводит сообщение об ошибке и выставляет параметр Отказ в "Истина". // // Параметры: -// ТекстСообщения - строка, текст сообщения. -// Отказ - булево, признак отказа (необязательный). +// ТекстСообщения - строка - текст сообщения. +// Отказ - булево - признак отказа (необязательный). // Процедура СообщитьОбОшибке(ТекстСообщения, Отказ = Ложь) Экспорт @@ -13600,8 +13717,8 @@ КонецПроцедуры // Параметры: -// Настройки - Структура - структура настроек: -// * НастройкиКомпоновщикаОтбораВсехДокументов - НастройкиКомпоновкиДанных - +// Настройки - Структура: +// * НастройкиКомпоновщикаОтбораВсехДокументов - НастройкиКомпоновкиДанных // Функция ИнтерактивноеИзменениеВыгрузки_ОбъектПоНастройкам(Знач Настройки) @@ -13807,7 +13924,7 @@ // Возвращаемое значение: // ТаблицаЗначений - коллекция регистров с движениями по заданному регистратору: -// * Имя - Строка - полное имя таблицы регистра. +// * ИмяТаблицыРегистра - Строка - полное имя таблицы регистра. // * НаборЗаписей - РегистрСведенийНаборЗаписей, РегистрНакопленияНаборЗаписей, и т.п. - набор записей. // * БезусловноеУдаление - Булево - признак безусловного удаления записей. // @@ -13816,7 +13933,7 @@ МетаданныеДокумента = ДокументСсылка.Метаданные(); Если МетаданныеДокумента.Движения.Количество() = 0 Тогда Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ИмяТаблицыРегистра", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("НаборЗаписей"); Результат.Колонки.Добавить("БезусловноеУдаление", Новый ОписаниеТипов("Булево")); @@ -13838,7 +13955,7 @@ ТекстЗапроса = ТекстЗапроса + " |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " |ВЫБРАТЬ ПЕРВЫЕ 1 ВЫРАЗИТЬ(""" + Движение.ПолноеИмя() - + """ КАК Строка(200)) КАК Имя ИЗ " + Движение.ПолноеИмя() + + """ КАК Строка(200)) КАК ИмяТаблицыРегистра ИЗ " + Движение.ПолноеИмя() + " ГДЕ Регистратор = &Регистратор"; // Если в запрос попадает более 256 таблиц - разбиваем его на две части @@ -13875,7 +13992,7 @@ ТекстЗапроса = ТекстЗапроса + " |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " - |ВЫБРАТЬ ПЕРВЫЕ 1 """ + Движение.ПолноеИмя() + """ КАК Имя ИЗ " + |ВЫБРАТЬ ПЕРВЫЕ 1 """ + Движение.ПолноеИмя() + """ КАК ИмяТаблицыРегистра ИЗ " + Движение.ПолноеИмя() + " ГДЕ Регистратор = &Регистратор"; КонецЦикла; @@ -14048,8 +14165,8 @@ // Зачитывает из информационной базы информацию о сообщении обмена данными. // -// Возвращаемое значение - Структура - Информация о расположении файла сообщения обмена (текущий формат). -// - ДвоичныеДанные - Сообщение обмена в информационной базе (устаревший формат). +// Возвращаемое значение - Структура - информация о расположении файла сообщения обмена (текущий формат). +// - ДвоичныеДанные - сообщение обмена в информационной базе (устаревший формат). // Функция СообщениеОбменаДаннымиИзГлавногоУзла() @@ -14061,8 +14178,8 @@ // Сохраняет путь к записанному сообщению в константу СообщениеОбменаДаннымиИзГлавногоУзла. // // Параметры: -// СообщениеОбмена - ДвоичныеДанные - Зачитанное сообщение обмена. -// ГлавныйУзел - ПланОбменаСсылка - Узел из которого получено сообщение. +// СообщениеОбмена - ДвоичныеДанные - зачитанное сообщение обмена. +// ГлавныйУзел - ПланОбменаСсылка - узел из которого получено сообщение. // Процедура УстановитьСообщениеОбменаДаннымиИзГлавногоУзла(СообщениеОбмена, ГлавныйУзел) Экспорт @@ -14198,7 +14315,8 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на узел, для которого производится настройка. -// АдресХранилищаФормы - Строка, УникальныйИдентификатор - адрес сохранения между серверными вызовами. +// АдресХранилищаФормы - Строка +// - УникальныйИдентификатор - адрес сохранения между серверными вызовами. // ЕстьСценарийУзла - Булево - флаг необходимости дополнительной настройки. // // Возвращаемое значение: @@ -14286,26 +14404,6 @@ КонецФункции -// Возвращаемое значение: -// Структура - набор вариантов дополнения выгрузки: -// * ВариантБезДополнения - см. ОписаниеСтандартногоВариантаБезДополнения -// * ВариантВсеДокументы - см. ОписаниеСтандартногоВариантаВсеДокументы -// * ВариантПроизвольныйОтбор - см. ОписаниеСтандартногоВариантаПроизвольныйОтбор -// * ВариантДополнительно - см. ОписаниеСтандартногоВариантаДополнительно -// -Функция ОписаниеСтандартныхВариантовДополненияВыгрузки() - - Результат = Новый Структура; - - Результат.Вставить("ВариантБезДополнения", ОписаниеСтандартногоВариантаБезДополнения()); - Результат.Вставить("ВариантВсеДокументы", ОписаниеСтандартногоВариантаВсеДокументы()); - Результат.Вставить("ВариантПроизвольныйОтбор", ОписаниеСтандартногоВариантаПроизвольныйОтбор()); - Результат.Вставить("ВариантДополнительно", ОписаниеСтандартногоВариантаДополнительно()); - - Возврат Результат; - -КонецФункции - // Возвращаемое значение: // Структура - настройки типового варианта дополнения выгрузки "Не добавлять": // * Использование - Булево - признак разрешения использования варианта. По умолчанию Истина. @@ -14363,6 +14461,8 @@ КонецФункции +// Структура описания стандартного варианта дополнения выгрузки "ВариантДополнительно". +// // Возвращаемое значение: // Структура - настройки типового варианта дополнения выгрузки по сценарию узла: // * Использование - Булево - признак разрешения использования варианта. По умолчанию Ложь. @@ -14396,10 +14496,11 @@ // Очистка отбора всех документов. // // Параметры: -// ДополнениеВыгрузки - Структура, ДанныеФормыСтруктура - описание параметров выгрузки: -// * КомпоновщикОтбораВсехДокументов - КомпоновщикНастроекКомпоновкиДанных - -// * АдресКомпоновщикаВсехДокументов - Строка - -// * АдресХранилищаФормы - Строка - +// ДополнениеВыгрузки - Структура +// - ДанныеФормыСтруктура - описание параметров выгрузки: +// * КомпоновщикОтбораВсехДокументов - КомпоновщикНастроекКомпоновкиДанных +// * АдресКомпоновщикаВсехДокументов - Строка +// * АдресХранилищаФормы - Строка // Процедура ИнтерактивноеИзменениеВыгрузкиОчисткаОбщегоОтбора(ДополнениеВыгрузки) Экспорт @@ -14421,7 +14522,8 @@ // Очистка детального отбора // // Параметры: -// ДополнениеВыгрузки - Структура, РеквизитФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура +// - РеквизитФормыКоллекция - описание параметров выгрузки. // Процедура ИнтерактивноеИзменениеВыгрузкиОчисткаДетально(ДополнениеВыгрузки) Экспорт ДополнениеВыгрузки.ДополнительнаяРегистрация.Очистить(); @@ -14430,7 +14532,8 @@ // Определяет описание общего отбора. При пустом отборе возвращает пустую строку. // // Параметры: -// ДополнениеВыгрузки - Структура, РеквизитФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура +// - РеквизитФормыКоллекция - описание параметров выгрузки. // // Возвращаемое значение: // Строка - описание отбора. @@ -14450,7 +14553,8 @@ // Определяет описание детального отбора. При пустом отборе возвращает пустую строку. // // Параметры: -// ДополнениеВыгрузки - Структура, РеквизитФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура +// - РеквизитФормыКоллекция - описание параметров выгрузки. // // Возвращаемое значение: // Строка - описание отбора. @@ -14462,7 +14566,8 @@ // Анализирует историю настроек-отборов, сохраненную пользователем для узла. // // Параметры: -// ДополнениеВыгрузки - Структура, РеквизитФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура +// - РеквизитФормыКоллекция - описание параметров выгрузки. // // Возвращаемое значение: // Список значений, где представление - имя настройки, значение - данные настройки. @@ -14478,7 +14583,8 @@ // Восстанавливает настройки в реквизитах ДополнениеВыгрузки по названию сохраненной настройки. // // Параметры: -// ДополнениеВыгрузки - Структура, РеквизитФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура +// - РеквизитФормыКоллекция - описание параметров выгрузки. // ПредставлениеНастройки - Строка - название восстанавливаемой настройки. // // Возвращаемое значение: @@ -14522,7 +14628,8 @@ // Сохраняет настройки с указанным именем по данным ДополнениеВыгрузки. // // Параметры: -// ДополнениеВыгрузки - Структура, РеквизитФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура +// - РеквизитФормыКоллекция - описание параметров выгрузки. // ПредставлениеНастройки - Строка - название сохраняемой настройки. // Процедура ИнтерактивноеИзменениеВыгрузкиСохранитьНастройки(ДополнениеВыгрузки, Знач ПредставлениеНастройки) Экспорт @@ -14647,7 +14754,8 @@ // Возвращает описание выгрузки по настройкам. // // Параметры: -// ДополнениеВыгрузки - Структура, ДанныеФормыКоллекция - описание параметров выгрузки: +// ДополнениеВыгрузки - Структура +// - ДанныеФормыКоллекция - описание параметров выгрузки: // * УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена. // // Возвращаемое значение: @@ -14704,7 +14812,8 @@ // Возвращает описание детального отбора по реквизиту "ДополнительнаяРегистрация". // // Параметры: -// ДополнительнаяРегистрация - ТаблицаЗначений, Массив - строки или структуры, описывающие отбор. +// ДополнительнаяРегистрация - ТаблицаЗначений +// - Массив - строки или структуры, описывающие отбор. // ОписаниеПустогоОтбора - Строка - значение, возвращаемое в случае пустого отбора. // Функция ПредставлениеДетальногоДополненияВыгрузки(Знач ДополнительнаяРегистрация, Знач ОписаниеПустогоОтбора=Неопределено) Экспорт @@ -14748,7 +14857,8 @@ // Производит дополнительную регистрацию объектов по настройкам. // // Параметры: -// ДополнениеВыгрузки - Структура, ДанныеФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура +// - ДанныеФормыКоллекция - описание параметров выгрузки. // Процедура ИнтерактивноеИзменениеВыгрузкиЗарегистрироватьДополнительныеДанные(Знач ДополнениеВыгрузки) Экспорт @@ -14785,7 +14895,8 @@ // Производит установку общего периода во все разрезы отбора. // // Параметры: -// ДополнениеВыгрузки - Структура, ДанныеФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура +// - ДанныеФормыКоллекция - описание параметров выгрузки. // Процедура ИнтерактивноеИзменениеВыгрузкиУстановитьПериодаСценарияУзла(ДополнениеВыгрузки) Экспорт Для Каждого Строка Из ДополнениеВыгрузки.ДополнительнаяРегистрацияСценарияУзла Цикл @@ -14799,10 +14910,11 @@ // Возвращает используемые варианты отбора по данным настроек. // // Параметры: -// ДополнениеВыгрузки - Структура, ДанныеФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура +// - ДанныеФормыКоллекция - описание параметров выгрузки. // // Возвращаемое значение: -// Массив - с номерами используемых вариантов: +// Массив из Число - с номерами используемых вариантов: // 0 - без отбора, 1 - отбор всех документов, 2 - подробный, 3 - сценарий узла. // Функция ИнтерактивноеИзменениеВыгрузкиФильтрВарианта(Знач ДополнениеВыгрузки) Экспорт @@ -14837,7 +14949,7 @@ Результат.Добавить(3); КонецЕсли; - Если Результат.Количество()=4 Тогда + Если Результат.Количество() = 4 Тогда // Есть все варианты, убираем фильтр. Возврат Неопределено; КонецЕсли; diff --git a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl index 4935fa8cd..feb7fab37 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl @@ -875,7 +875,12 @@ КонецФункции // Параметры: -// Данные - СправочникОбъект, ДокументОбъект, ПланСчетовОбъект, ПланВидовРасчетаОбъект - объект данных. +// Данные - СправочникОбъект +// - ДокументОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - РегистрСведенийНаборЗаписей - +// объект данных. // ТаблицаПредопределенных - см. ОбменДаннымиСлужебный.ТаблицаПредопределенныхДанных // Процедура ОтметитьСсылкиНаПредопределенныеДанные(Данные, ТаблицаПредопределенных) Экспорт @@ -923,7 +928,10 @@ КонецПроцедуры // Параметры: -// Данные - СправочникОбъект, ПланСчетовОбъект, РегистрСведенийНаборЗаписей, и т.п. - произвольный объект данных. +// Данные - СправочникОбъект +// - ДокументОбъект +// - ПланСчетовОбъект +// - РегистрСведенийНаборЗаписей - произвольный объект данных. // ТаблицаПредопределенных - см. ОбменДаннымиСлужебный.ТаблицаПредопределенныхДанных // Процедура ЗаменитьСсылкиНаПредопределенныеЭлементы(Данные, ТаблицаПредопределенных) Экспорт @@ -1010,10 +1018,10 @@ // Возвращает номер области по коду узла плана обмена (обмен сообщениями). // // Параметры: -// КодУзла - Строка - Код узла плана обмена. +// КодУзла - Строка - код узла плана обмена. // // Возвращаемое значение: -// Число - Номер области. +// Число - номер области. // Функция НомерОбластиИзКодаУзлаПланаОбмена(Знач КодУзла) Экспорт @@ -1029,7 +1037,7 @@ // Возвращает данные первой записи результата запроса в виде структуры. // // Параметры: -// РезультатЗапроса - РезультатЗапроса - Результат запроса, содержащий данные для обработки. +// РезультатЗапроса - РезультатЗапроса - результат запроса, содержащий данные для обработки. // // Возвращаемое значение: // Структура - структура с результатом. @@ -1109,10 +1117,12 @@ // Устанавливаем отбор по измерениям регистра. Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл + ИмяИзмерения = Измерение.Имя; + // Если задано значение в структуре, то отбор устанавливаем. - Если СтруктураЗаписи.Свойство(Измерение.Имя) Тогда + Если СтруктураЗаписи.Свойство(ИмяИзмерения) Тогда - МенеджерЗаписи[Измерение.Имя] = СтруктураЗаписи[Измерение.Имя]; + МенеджерЗаписи[ИмяИзмерения] = СтруктураЗаписи[ИмяИзмерения]; КонецЕсли; @@ -1371,7 +1381,10 @@ КонецПроцедуры // Параметры: -// Данные - СправочникОбъект, ПланВидовХарактеристикОбъект, ПланСчетовОбъект, ПланВидовРасчетаОбъект - +// Данные - СправочникОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект // ТаблицаПредопределенных - см. ОбменДаннымиСлужебный.ТаблицаПредопределенныхДанных // Процедура ОбработатьЗагрузкуПредопределенногоЭлемента(Данные, ТаблицаПредопределенных) @@ -1429,13 +1442,14 @@ Для Каждого КоллекцияРеквизитов Из МассивКоллекций Цикл Для Каждого Реквизит Из КоллекцияРеквизитов Цикл - Если Приемник[Реквизит.Имя] = Приемник.Ссылка Тогда + ИмяРеквизита = Реквизит.Имя; + Если Приемник[ИмяРеквизита] = Приемник.Ссылка Тогда Продолжить; КонецЕсли; - Если Приемник[Реквизит.Имя] = Источник[Реквизит.Имя] Тогда + Если Приемник[ИмяРеквизита] = Источник[ИмяРеквизита] Тогда Продолжить; КонецЕсли; - Приемник[Реквизит.Имя] = Источник[Реквизит.Имя]; + Приемник[ИмяРеквизита] = Источник[ИмяРеквизита]; КонецЦикла; КонецЦикла; diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index 4959123db..0247a5125 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -38,7 +38,8 @@ // // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации. -// Источник - СправочникОбъект, ПланВидовХарактеристикОбъект - источник события, кроме типа ДокументОбъект. +// Источник - СправочникОбъект +// - ПланВидовХарактеристикОбъект - источник события, кроме типа ДокументОбъект. // Отказ - Булево - флаг отказа от выполнения обработчика. // Процедура МеханизмРегистрацииОбъектовПередЗаписью(ИмяПланаОбмена, Источник, Отказ) Экспорт @@ -98,7 +99,9 @@ // // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации. -// Источник - СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект - источник события. +// Источник - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект - источник события. // Отказ - Булево - флаг отказа от выполнения обработчика. // Процедура МеханизмРегистрацииОбъектовПередУдалением(ИмяПланаОбмена, Источник, Отказ) Экспорт @@ -123,7 +126,8 @@ // Процедура дополняет список узлов-получателей объекта переданными значениями. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект - объект, для которого выполняется правило регистрации. +// Объект - СправочникОбъект +// - ДокументОбъект - объект, для которого выполняется правило регистрации. // Узлы - Массив из ПланОбменаСсылка - узлы плана обмена, которые необходимо добавить в список узлов-получателей объекта. // Процедура ДополнитьПолучателей(Объект, Узлы) Экспорт @@ -148,7 +152,8 @@ // Процедура вычитает из списка узлов-получателей объекта переданные значения. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект - объект, для которого выполняется правило регистрации. +// Объект - СправочникОбъект +// - ДокументОбъект - объект, для которого выполняется правило регистрации. // Узлы - Массив из ПланОбменаСсылка - узлы плана обмена, которые необходимо вычесть из списка узлов-получателей объекта. // Процедура СократитьПолучателей(Объект, Узлы) Экспорт @@ -190,8 +195,8 @@ // Вычитает один массив элементов из другого массива. Возвращает результат вычитания. // // Параметры: -// Массив - Массив из Произвольный - Исходный массив. -// МассивВычитания - Массив из Произвольный - Массив, вычитаемый из исходного массива. +// Массив - Массив из Произвольный - исходный массив. +// МассивВычитания - Массив из Произвольный - массив, вычитаемый из исходного массива. // // Возвращаемое значение: // Массив из Произвольный - результат вычитания. @@ -250,7 +255,7 @@ // объект метаданных. // // Возвращаемое значение: -// Булево - признак наличия авторегистрации в плане обмена +// Булево - признак наличия авторегистрации в плане обмена: // * Истина - объект метаданных имеет признак авторегистрации "Разрешена" в составе плана обмена; // * Ложь - объект метаданных имеет признак авторегистрации "Запрещена" в составе плана обмена // или объект метаданных не входит в состав плана обмена. @@ -315,7 +320,8 @@ // ОтправкаЭлемента - ОтправкаЭлементаДанных - см. описание параметра "ОтправкаЭлемента" в синтаксис помощнике // для методов ПриОтправкеДанныхГлавному() и ПриОтправкеДанныхПодчиненному(). // СозданиеНачальногоОбраза - Булево - признак вызова процедуры при создании начального образа РИБ. -// Получатель - ПланОбменаСсылка, Неопределено - узел получателя. +// Получатель - ПланОбменаСсылка +// - Неопределено - узел получателя. // Анализ - Булево - признак вызова процедуры при анализе. // Процедура ПриОтправкеДанныхКорреспонденту(ЭлементДанных, @@ -442,10 +448,13 @@ // Параметры: // Получатель - ПланОбменаСсылка - узел плана обмена, для которого выполняется регистрация изменений // данных. -// Данные - СправочникОбъект, ДокументОбъект, Произвольный, УдалениеОбъекта - объект, представляющий данные, +// Данные - СправочникОбъект +// - ДокументОбъект +// - Произвольный +// - УдалениеОбъекта - объект, представляющий данные, // хранимые в базе данных, такой как документ, элемент справочника, счет бухгалтерского учета, менеджер // записи константы, набор записей регистра и т. п. -// ПроверятьРазрешениеВыгрузки - Булево - Необязательный флаг. Если установить в Ложь, то дополнительная проверка +// ПроверятьРазрешениеВыгрузки - Булево - необязательный флаг. Если установить в Ложь, то дополнительная проверка // на соответствие общим настройкам узла при регистрации производится не // будет. // @@ -518,13 +527,13 @@ // // Параметры: // Объект - записываемый объект ИБ. -// СсылкаСуществует - Булево - Признак наличия объекта по ссылке в информационной базе. -// СведенияОВерсииОбъекта - Структура - сведения о версии объекта: -// * АвторВерсии - Пользователь или Узел плана обмена - Источник версии. +// СсылкаСуществует - Булево - признак наличия объекта по ссылке в информационной базе. +// СведенияОВерсииОбъекта - Структура: +// * АвторВерсии - Пользователь или Узел плана обмена - источник версии. // Необязательный, значение по умолчанию Неопределено. -// * ТипВерсииОбъекта - Строка - Тип создаваемой версии. +// * ТипВерсииОбъекта - Строка - тип создаваемой версии. // Необязательный, значение по умолчанию "ИзмененоПользователем". -// * Комментарий - Строка - Комментарий к создаваемой версии. +// * Комментарий - Строка - комментарий к создаваемой версии. // Необязательный, значение по умолчанию "". // Процедура ПриСозданииВерсииОбъекта(Объект, СведенияОВерсииОбъекта, СсылкаСуществует, Отправитель) Экспорт @@ -781,15 +790,15 @@ КонецПроцедуры // Параметры: -// УзелСсылка - ПланОбменаСсылка - -// ПолноеИмяОбъектаМетаданных - Строка - +// УзелСсылка - ПланОбменаСсылка +// ПолноеИмяОбъектаМетаданных - Строка // // Возвращаемое значение: // ТаблицаЗначений - выгрузка из таблицы изменений объекта: // * Ссылка - ЛюбаяСсылка - ссылка на объект. // * Узел - ПланОбменаСсылка - узел плана обмена. // * Регистратор - ДокументСсылка - регистратор набора записей (опционально). -// * <ВедущиеИзмененияРегистров> - Произвольный - +// * <ВедущиеИзмененияРегистров> - Произвольный // Функция ЗарегистрированныеДанныеОдногоТипа(УзелСсылка, ПолноеИмяОбъектаМетаданных) @@ -1028,6 +1037,10 @@ КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Источник.Ссылка); + УстановитьПривилегированныйРежим(Ложь); + КонецПроцедуры #КонецОбласти @@ -1045,7 +1058,7 @@ // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации. // Объект - Произвольный - изменяемые данные: объект, набор записей, константа или сведения об удалении объекта. -// Отказ - Булево - Признак возникновения ошибки во время регистрации объекта на узлах: +// Отказ - Булево - признак возникновения ошибки во время регистрации объекта на узлах: // если во время регистрации объекта возникнут ошибки, то этот флаг будет установлен в значение Истина. // ДополнительныеПараметры - Структура - уточняющие сведения об изменяемых данных: // * ЭтоРегистр - Булево - значение Истина означает, что обрабатывается регистр. @@ -1649,7 +1662,7 @@ // ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов. // // Возвращаемое значение: -// Массив - Массив узлов плана обмена, для которых установлен признак "Выгружать всегда". +// Массив - массив узлов плана обмена, для которых установлен признак "Выгружать всегда". // Функция УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) @@ -1681,7 +1694,7 @@ // ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов. // // Возвращаемое значение: -// Массив - Массив узлов плана обмена, для которых установлен признак "Выгружать при необходимости". +// Массив - массив узлов плана обмена, для которых установлен признак "Выгружать при необходимости". // Функция УзлыДляРегистрацииПоУсловиюВыгружатьПриНеобходимости(Ссылка, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) @@ -1992,7 +2005,7 @@ // Ссылка - ссылка на объект ИБ, значения свойств которого требуется получить. // // Возвращаемое значение: -// Структура - Структура со значениями свойств объекта. +// Структура - структура со значениями свойств объекта. // Функция ЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, Знач СвойстваОбъектаСтрокой, Знач ОбъектМетаданныхИмя) @@ -2337,9 +2350,9 @@ КонецПроцедуры // Параметры: -// Объект - Произвольный - -// ДеревоЗначенийПриемник - ДеревоЗначений - -// ДеревоЗначенийИсточник - ДеревоЗначений - +// Объект - Произвольный +// ДеревоЗначенийПриемник - ДеревоЗначений +// ДеревоЗначенийИсточник - ДеревоЗначений // Процедура СоздатьДопустимыйОтборПоСвойствам(Объект, ДеревоЗначенийПриемник, ДеревоЗначенийИсточник) @@ -2602,15 +2615,11 @@ Попытка Выполнить(ПРО.ПередОбработкой); Исключение - СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; - |План обмена: [ИмяПланаОбмена]; - |Объект метаданных: [ОбъектМетаданныхИмя] - |Описание ошибки: [Описание]'"); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'Перед обработкой'")); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[Описание]", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение СтрокаСообщения; + ВызватьИсключение ПодробноеПредставлениеОшибкиВыполненияОбработчика( + "ПередОбработкой", + ПРО.ИмяПланаОбмена, + ПРО.ОбъектМетаданныхИмя, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -2630,13 +2639,11 @@ Попытка Выполнить(ПРО.ПриОбработке); Исключение - СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; План обмена: [ИмяПланаОбмена]; Объект метаданных: [ОбъектМетаданныхИмя] - |Описание ошибки: [Описание]'"); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'При обработке'")); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[Описание]", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение СтрокаСообщения; + ВызватьИсключение ПодробноеПредставлениеОшибкиВыполненияОбработчика( + "ПриОбработке", + ПРО.ИмяПланаОбмена, + ПРО.ОбъектМетаданныхИмя, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -2654,13 +2661,11 @@ Попытка Выполнить(ПРО.ПриОбработкеДополнительный); Исключение - СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; План обмена: [ИмяПланаОбмена]; Объект метаданных: [ОбъектМетаданныхИмя] - |Описание ошибки: [Описание]'"); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'При обработке (дополнительный)'")); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[Описание]", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение СтрокаСообщения; + ВызватьИсключение ПодробноеПредставлениеОшибкиВыполненияОбработчика( + "ПриОбработкеДополнительный", + ПРО.ИмяПланаОбмена, + ПРО.ОбъектМетаданныхИмя, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -2674,13 +2679,11 @@ Попытка Выполнить(ПРО.ПослеОбработки); Исключение - СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; План обмена: [ИмяПланаОбмена]; Объект метаданных: [ОбъектМетаданныхИмя] - |Описание ошибки: [Описание]'"); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'После обработки'")); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[Описание]", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение СтрокаСообщения; + ВызватьИсключение ПодробноеПредставлениеОшибкиВыполненияОбработчика( + "ПослеОбработки", + ПРО.ИмяПланаОбмена, + ПРО.ОбъектМетаданныхИмя, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -2691,6 +2694,20 @@ #Область ВспомогательныеПроцедурыИФункции +Функция ПодробноеПредставлениеОшибкиВыполненияОбработчика(ИмяОбработчика, ИмяПланаОбмена, ИмяОбъектаМетаданных, ПредставлениеОшибки) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении обработчика: ""%1""; + |План обмена: %2; + |Объект метаданных: %3; + |Описание ошибки: %4.'"), + ИмяОбработчика, + ИмяПланаОбмена, + ИмяОбъектаМетаданных, + ПредставлениеОшибки); + +КонецФункции + Процедура ПриОтправкеДанных(ЭлементДанных, ОтправкаЭлемента, Знач Получатель, Знач СозданиеНачальногоОбраза, Знач Анализ) Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда @@ -2854,18 +2871,18 @@ // Заполняет значения реквизитов и табличных частей однотипных объектов информационной базы. // // Параметры: -// Источник - Объект информационной базы (СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект и пр.) +// Источник - объект информационной базы (СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект и пр.) // который является источником данных для заполнения. // // Приемник (обязательный) - объект информационной базы (СправочникОбъект, ДокументОбъект, // ПланВидовХарактеристикОбъект и пр.) который будет заполнен данными источника. // -// СписокСвойств - Строка - Список свойств объекта и табличных частей, разделенных запятыми. +// СписокСвойств - Строка - список свойств объекта и табличных частей, разделенных запятыми. // Если параметр задан, то заполнение свойств объекта будет // выполняться согласно заданным свойствам, при этом параметр. // ИсключаяСвойства будет проигнорирован. // -// ИсключаяСвойства - Строка - Список свойств объекта и табличных частей, разделенных запятыми. +// ИсключаяСвойства - Строка - список свойств объекта и табличных частей, разделенных запятыми. // Если параметр задан, то заполнение свойств объекта будет выполняться // для всех свойств и табличных частей, исключая заданные свойства. // @@ -2945,8 +2962,10 @@ КонецПроцедуры // Параметры: -// Объект - СправочникОбъект, ДокументОбъект, Произвольный - объект ссылочного типа. -// ТаблицаРеквизитовСсылочногоТипа - ТаблицаЗначений - +// Объект - СправочникОбъект +// - ДокументОбъект +// - Произвольный - объект ссылочного типа. +// ТаблицаРеквизитовСсылочногоТипа - ТаблицаЗначений // Процедура ВыполнитьРегистрациюОбъектовСсылочногоТипаПоСвойствамУзла(Объект, ТаблицаРеквизитовСсылочногоТипа) @@ -3124,11 +3143,11 @@ // Получает строку, содержащую ключи структуры, разделенные символом разделителя. // // Параметры: -// Структура - Структура - Структура, ключи которой преобразуются в строку. -// Разделитель - Строка - Разделитель, который вставляется в строку между ключами структуры. +// Структура - Структура - структура, ключи которой преобразуются в строку. +// Разделитель - Строка - разделитель, который вставляется в строку между ключами структуры. // // Возвращаемое значение: -// Строка - Строка, содержащая ключи структуры разделенные разделителем. +// Строка - строка, содержащая ключи структуры разделенные разделителем. // Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт @@ -3148,27 +3167,27 @@ // Выполняет сравнение версий двух однотипных объектов. // // Параметры: -// Данные1 - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланВидовРасчетаОбъект, -// ПланСчетовОбъект, -// ПланОбменаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект - первая версия данных для сравнения. -// Данные2 - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланВидовРасчетаОбъект, -// ПланСчетовОбъект, -// ПланОбменаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект - вторая версия данных для сравнения. -// СписокСвойств - Строка - Список свойств объекта и табличных частей, разделенных запятыми. +// Данные1 - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланВидовРасчетаОбъект +// - ПланСчетовОбъект +// - ПланОбменаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект - первая версия данных для сравнения. +// Данные2 - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланВидовРасчетаОбъект +// - ПланСчетовОбъект +// - ПланОбменаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект - вторая версия данных для сравнения. +// СписокСвойств - Строка - список свойств объекта и табличных частей, разделенных запятыми. // Если параметр задан, то заполнение свойств объекта будет // выполняться согласно заданным свойствам, при этом параметр // "ИсключаяСвойства" будет проигнорирован. -// ИсключаяСвойства - Строка - Список свойств объекта и табличных частей, разделенных запятыми. +// ИсключаяСвойства - Строка - список свойств объекта и табличных частей, разделенных запятыми. // Если параметр задан, то заполнение свойств объекта будет выполняться // для всех свойств и табличных частей, исключая заданные свойства. // @@ -3269,7 +3288,7 @@ // // Параметры: // ОбъектМетаданных - ОбъектМетаданных - ссылочный объект метаданных: -// * ТабличныеЧасти - КоллекцияОбъектовМетаданных из ОбъектМетаданныхТабличнаяЧасть - +// * ТабличныеЧасти - КоллекцияОбъектовМетаданных из ОбъектМетаданныхТабличнаяЧасть // // Возвращаемое значение: // Массив из Строка - коллекция табличных частей объекта. @@ -3407,7 +3426,7 @@ // Получает текущее значение набора записей в информационной базе. // // Параметры: -// Данные - Набор записей регистров. +// Данные - набор записей регистров. // // Возвращаемое значение: // НаборЗаписей - , содержащий текущее значение в информационной базе. @@ -3463,9 +3482,9 @@ // // Параметры: // ЭлементДанных - Произвольный - произвольные данные. -// ПолучениеЭлемента - ПолучениеЭлементаДанных - -// Отправитель - ПланОбменаОбъект - -// ЭтоПолучениеОтГлавного - Булево - +// ПолучениеЭлемента - ПолучениеЭлементаДанных +// Отправитель - ПланОбменаОбъект +// ЭтоПолучениеОтГлавного - Булево // Процедура ПроверитьКоллизиюИзмененийДанных(ЭлементДанных, ПолучениеЭлемента, Знач Отправитель, Знач ЭтоПолучениеОтГлавного) @@ -3573,10 +3592,12 @@ // Выполняет проверку на наличие запрета загрузки по дате. // // Параметры: -// ЭлементДанных - СправочникОбъект, ДокументОбъект, РегистрСведенийНаборЗаписей - +// ЭлементДанных - СправочникОбъект +// - ДокументОбъект +// - РегистрСведенийНаборЗаписей - // Данные, которые были зачитаны из сообщения обмена, но еще не были записаны в ИБ. -// ПолучениеЭлемента - ПолучениеЭлементаДанных - -// Отправитель - ПланОбменаОбъект - +// ПолучениеЭлемента - ПолучениеЭлементаДанных +// Отправитель - ПланОбменаОбъект // Процедура ПроверитьНаличиеЗапретаЗагрузкиПоДате(ЭлементДанных, ПолучениеЭлемента, Знач Отправитель) @@ -3621,9 +3642,9 @@ // общего модуля ДатыЗапретаИзменения.ПроверитьДатыЗапретаЗагрузкиДанных. // // Параметры: -// Объект - Объект ссылочного типа для которого выполняется регистрация запрета. -// УзелОбмена - ПланОбменаСсылка - Узел информационной базы из которой получен объект. -// СообщениеОбОшибке - Строка - Подробное описание причины отказа от загрузки. +// Объект - объект ссылочного типа для которого выполняется регистрация запрета. +// УзелОбмена - ПланОбменаСсылка - узел информационной базы из которой получен объект. +// СообщениеОбОшибке - Строка - подробное описание причины отказа от загрузки. // Процедура ЗарегистрироватьЗапретЗагрузкиДанныхПоДате(ЭлементДанных, Отправитель, СообщениеОбОшибке) @@ -3709,11 +3730,12 @@ КонецПроцедуры // Параметры: -// Объект - Произвольный - -// МетаданныеОбъекта - ОбъектМетаданных - -// ЭтоСсылочныйТип - Булево - -// СсылкаСуществует - Булево - -// ОбъектВБазе - ЛюбаяСсылка, Неопределено - +// Объект - Произвольный +// МетаданныеОбъекта - ОбъектМетаданных +// ЭтоСсылочныйТип - Булево +// СсылкаСуществует - Булево +// ОбъектВБазе - ЛюбаяСсылка +// - Неопределено // Функция ДанныеОбъектаСтрокойДоИзменения(Объект, МетаданныеОбъекта, ЭтоСсылочныйТип, СсылкаСуществует, ОбъектВБазе) diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index 3461cb2b0..827b97b89 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -45,7 +45,7 @@ // Объект - Произвольный - записываемый объект ссылочного типа. Например, СправочникОбъект. // РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. // ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. -// ДокументРежимЗаписи - ДокументРежимЗаписи - имеет смысл только для данных типа ДокументОбъект - режим +// ДокументРежимЗаписи - РежимЗаписиДокумента - имеет смысл только для данных типа ДокументОбъект - режим // записи документа. // Если параметр не передан, то документ записывается в режиме "Запись". // @@ -82,13 +82,14 @@ // Для использования в обработчиках обновления. // // Параметры: -// НаборЗаписей - РегистрСведенийНаборЗаписей, -// РегистрНакопленияНаборЗаписей, -// РегистрБухгалтерииНаборЗаписей, -// РегистрРасчетаНаборЗаписей - набор записей, который необходимо записать. -// Замещать - Булево - определяет режим замещения существующей записи в соответствии с -// текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут -// дописаны к уже существующим в информационной базе записям. +// НаборЗаписей - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - набор записей, который необходимо записать. +// Замещать - Булево - определяет режим замещения существующей записи в соответствии с +// текущими установками отбора. Истина - перед записью существующие +// записи будут удалены. Ложь - записи будут дописаны к уже существующим +// в информационной базе записям. // РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. // ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. // @@ -157,8 +158,18 @@ // предполагается, что порядок обновления уже учтен при построении очередей. // // Параметры: -// Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура, Строка - ссылка на объект, сам объект, -// набор записей или полное имя объекта метаданных, обработку которого необходимо проверить. +// Данные - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей +// - ЛюбаяСсылка +// - ДанныеФормыСтруктура - ссылка на объект, сам объект, набор записей или полное имя объекта +// метаданных, обработку которого необходимо проверить. // Форма - ФормаКлиентскогоПриложения - если объект не обработан, то у переданной формы // будет установлено свойство ТолькоПросмотр. Если форма не была // передана, то будет вызвано исключение. @@ -237,11 +248,21 @@ // которые в данный момент обрабатывают переданный объект Данные. // // Параметры: -// Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура, Строка - ссылка на объект, сам объект, -// набор записей или полное имя объекта метаданных, блокировку которого необходимо проверить. +// Данные - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей +// - ЛюбаяСсылка +// - ДанныеФормыСтруктура - ссылка на объект, сам объект, набор записей или полное имя объекта метаданных, +// блокировку которого необходимо проверить. // // Возвращаемое значение: -// Структура - с полями: +// Структура: // * Обработан - Булево - признак того, что переданный объект обработан. // * ТекстИсключения - Строка - текст исключения, если объект еще не обработан, // содержит список незавершенных обработчиков. @@ -274,6 +295,10 @@ ПолноеИмя = МетаданныеИОтбор.Метаданные.ПолноеИмя(); КонецЕсли; + БлокироватьИзменение = Ложь; + ТекстСообщения = ""; + ОбновлениеИнформационнойБазыПереопределяемый.ПриВыполненииПроверкиОбъектОбработан(ПолноеИмя, БлокироватьИзменение, ТекстСообщения); + ПроверяемыйОбъект = СтрЗаменить(ПолноеИмя, ".", ""); ОбработчикиОбъекта = СведенияОБлокируемыхОбъектах.БлокируемыеОбъекты[ПроверяемыйОбъект]; @@ -326,17 +351,20 @@ // Отмечает, что переданные данные обновлены. // // Параметры: -// Данные - Ссылка, Массив, НаборДанных - данные, по которым нужно зарегистрировать изменения. -// - ТаблицаЗначений - значения измерений независимого регистра сведений. Требования: -// - все измерения регистра должны входить в основной отбор; -// - в таблице должны быть только колонки, соответствующие по именам измерениям регистра, -// по которым ранее регистрировалась необходимость обработки; -// - запись наборов в процессе обновления должна проходить с тем же отбором, -// что и регистрация необходимости обработки; -// - в ДополнительныеПараметры нужно передать соответствующий признак и полное имя регистра. -// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. -// Очередь - Число, Неопределено - очередь обработки, в которой выполняется текущий обработчик. По умолчанию очередь передавать -// не нужно, т.к. она будет взята из параметров сеанса, в котором запущен обработчик обновления. +// Данные - Ссылка +// - Массив +// - НаборДанных - данные, по которым нужно зарегистрировать изменения. +// - ТаблицаЗначений - значения измерений независимого регистра сведений. Требования: +// - все измерения регистра должны входить в основной отбор; +// - в таблице должны быть только колонки, соответствующие по именам измерениям регистра, +// по которым ранее регистрировалась необходимость обработки; +// - запись наборов в процессе обновления должна проходить с тем же отбором, +// что и регистрация необходимости обработки; +// - в ДополнительныеПараметры нужно передать соответствующий признак и полное имя регистра. +// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// Очередь - Число +// - Неопределено - очередь обработки, в которой выполняется текущий обработчик. По умолчанию очередь передавать +// не нужно, т.к. она будет взята из параметров сеанса, в котором запущен обработчик обновления. // Процедура ОтметитьВыполнениеОбработки(Данные, ДополнительныеПараметры = Неопределено, Очередь = Неопределено) Экспорт Если Очередь = Неопределено Тогда @@ -452,7 +480,7 @@ // Дополнительные параметры функций ОтметитьКОбработке и ОтметитьВыполнениеОбработки. // // Возвращаемое значение: -// Структура - структура со свойствами: +// Структура: // * ЭтоДвижения - Булево - в параметре Данные функции переданы ссылки на регистраторы, по которым нужно обновить движения. // Значение по умолчанию - Ложь. // * ПолноеИмяРегистра - Строка - полное имя регистра, по которому нужно обновить данные. Например, РегистрНакопления.ТоварыНаСкладах. @@ -480,7 +508,7 @@ // и не должны переопределяться в коде процедур отметки к обработке обработчиков обновления. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Очередь - Число - очередь обработки, в которой выполняется текущий обработчик. // * ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами - ЗаписьFastInfoset - параметр // существует, только если внедрена подсистема ОбменДанными. @@ -508,12 +536,32 @@ // Для использования в процедурах проверки блокировки данных отложенных обработчиков обновления. // // Параметры: -// Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура - данные, которые нужно проанализировать. -// ДополнительныеПараметры - Структура, Неопределено - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// Данные - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей +// - ЛюбаяСсылка +// - ДанныеФормыСтруктура - значение входящего параметра Данные. +// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки // // Возвращаемое значение: -// Структура - со свойствами: -// * Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура - значение входящего параметра Данные. +// Структура: +// * Данные - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей +// - ЛюбаяСсылка +// - ДанныеФормыСтруктура - данные, которые нужно проанализировать. // * МетаданныеОбъекта - ОбъектМетаданных - объект метаданных, соответствующий параметру Данные. // * ПолноеИмя - Строка - полное имя объекта метаданных (см. метод ОбъектМетаданных.ПолноеИмя). // * Отбор - ЛюбаяСсылка - если Данные - это ссылочный объект, то значение ссылки, @@ -558,7 +606,7 @@ ИначеЕсли ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Данные, "ИсходныйКлючЗаписи") Тогда Если МетаданныеОбъекта = Неопределено Тогда - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Данные.ИсходныйКлючЗаписи)); + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Данные.ИсходныйКлючЗаписи)); // ОбъектМетаданныхРегистрСведений КонецЕсли; Отбор = Новый Структура; Для Каждого Измерение Из МетаданныеОбъекта.Измерения Цикл @@ -630,7 +678,9 @@ // // Параметры: // ОсновныеПараметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке. -// Данные - Ссылка, Массив, НаборЗаписей - данные, по которым нужно зарегистрировать изменения. +// Данные - Ссылка +// - Массив +// - НаборЗаписей - данные, по которым нужно зарегистрировать изменения. // - ТаблицаЗначений - значения измерений независимого регистра сведений. Требования: // - нет измерений с именем "Узел"; // - все измерения регистра должны входить в основной отбор; @@ -803,7 +853,7 @@ // Дополнительные параметры выборки данных для обработки. // // Возвращаемое значение: -// Структура - поля структуры: +// Структура: // * ВыбиратьПорциями - Булево - выбирать данные для обработки порциями. // Если выбираются документы, то порция определяется с учетом упорядочивания по убыванию // по дате документа. Если выбираются регистраторы регистра, то порция определяется с @@ -889,9 +939,8 @@ // Применяется при многопоточном обновлении. // // Параметры: -// ДополнительныеИсточникиДанных - Соответствие - то же, что и ДополнительныеИсточникиДанных -// (см. ДополнительныеПараметрыВыборкиДанныхДляОбработки()). -// Источник - Строка - источники данных (см. ДополнительныеПараметрыВыборкиДанныхДляОбработки()). +// ДополнительныеИсточникиДанных - см. ДополнительныеПараметрыВыборкиДанныхДляОбработки +// Источник - см. ДополнительныеПараметрыВыборкиДанныхДляОбработки // Объект - Строка - имя документа (полное или короткое). // Регистр - Строка - имя регистра (полное или короткое). // @@ -929,8 +978,7 @@ // Применяется при многопоточном обновлении. // // Параметры: -// ДополнительныеИсточникиДанных - Соответствие - то же, что и ДополнительныеИсточникиДанных -// (см. ДополнительныеПараметрыВыборкиДанныхДляОбработки()). +// ДополнительныеИсточникиДанных - см. ДополнительныеПараметрыВыборкиДанныхДляОбработки // Объект - Строка - имя документа (полное или короткое). // Регистр - Строка - имя регистра (полное или короткое). // @@ -1217,8 +1265,9 @@ // ** Регистратор - ДокументСсылка. // ** Период - Дата - дата документа, если передано полное имя документа, максимальный период по регистратору, // если полное имя документа не передано. -// ** Проведен - Булево, Неопределено - значение реквизита Проведен документа, если передано полное имя документа, -// Неопределено - если имя документа не передано. +// ** Проведен - Булево +// - Неопределено - значение реквизита Проведен документа, если передано полное имя документа, +// Неопределено - если имя документа не передано. // * ТаблицаЗначений - данные, которые нужно обработать, имена колонок соответствуют именам измерений регистра. // Функция ВыбратьРегистраторыРегистраДляОбработки(Очередь, ПолноеИмяДокумента, ПолноеИмяРегистра, ДополнительныеПараметры = Неопределено) Экспорт @@ -1827,17 +1876,21 @@ // которые он будет обрабатывать. // - Неопределено - проверяется, завершена ли обработка в целом; // - Массив - проверяется, есть данные для обработки в списке очередей. -// ПолноеИмяМетаданныеОбъекта- Строка, ОбъектМетаданных - полное имя обрабатываемого объекта или +// ПолноеИмяМетаданныеОбъекта- Строка +// - ОбъектМетаданных - полное имя обрабатываемого объекта или // его метаданные. Например, "Документ.ПриходныйОрдерНаТовары" // - Массив - массив полных имен объектов или объектов метаданных, // в массиве не должно быть независимых регистров сведений. -// Отбор - ЛюбаяСсылка, Структура, Неопределено, Массив - отбор данных для проверки. -// Если передано Неопределено - проверяется по всему типу объекта. -// Если объект - регистр, подчиненный регистратору, то в отборе - ссылка -// на регистратор или массив ссылок. -// Если объект ссылочного типа, то в отборе - или ссылка, или массив ссылок. -// Если объект - независимый регистр сведений, то в отборе - структура со значениями измерений. -// Ключ структуры - имя измерения, значение - значение отбора (можно передать массив значений). +// Отбор - ЛюбаяСсылка +// - Структура +// - Неопределено +// - Массив - отбор данных для проверки. +// Если передано Неопределено - проверяется по всему типу объекта. +// Если объект - регистр, подчиненный регистратору, то в отборе - ссылка +// на регистратор или массив ссылок. +// Если объект ссылочного типа, то в отборе - или ссылка, или массив ссылок. +// Если объект - независимый регистр сведений, то в отборе - структура со значениями измерений. +// Ключ структуры - имя измерения, значение - значение отбора (можно передать массив значений). // // Возвращаемое значение: // Булево - Истина, если еще не все данные обработаны. @@ -2016,17 +2069,21 @@ // которые он будет обрабатывать. // - Неопределено - проверяется, завершена ли обработка в целом; // - Массив - проверяется, есть ли данные для обработки в списке очередей. -// ПолноеИмяМетаданныеОбъекта- Строка, ОбъектМетаданных - полное имя обрабатываемого объекта или +// ПолноеИмяМетаданныеОбъекта- Строка +// - ОбъектМетаданных - полное имя обрабатываемого объекта или // его метаданные. Например, "Документ.ПриходныйОрдерНаТовары" // - Массив - массив полных имен объектов или объектов метаданных, // в массиве не должно быть независимых регистров сведений. -// Отбор - ЛюбаяСсылка, Структура, Неопределено, Массив - отбор данных для проверки. -// Если передано Неопределено - проверяется по всему типу объекта. -// Если объект - регистр, подчиненный регистратору, то в отборе - ссылка -// на регистратор или массив ссылок. -// Если объект ссылочного типа, то в отборе - или ссылка, или массив ссылок. -// Если объект - независимый регистр сведений, то в отборе - структура со значениями измерений. -// Ключ структуры - имя измерения, значение - значение отбора (можно передать массив значений). +// Отбор - ЛюбаяСсылка +// - Структура +// - Неопределено +// - Массив - отбор данных для проверки. +// Если передано Неопределено - проверяется по всему типу объекта. +// Если объект - регистр, подчиненный регистратору, то в отборе - ссылка +// на регистратор или массив ссылок. +// Если объект ссылочного типа, то в отборе - или ссылка, или массив ссылок. +// Если объект - независимый регистр сведений, то в отборе - структура со значениями измерений. +// Ключ структуры - имя измерения, значение - значение отбора (можно передать массив значений). // // Возвращаемое значение: // Булево - Истина, если все данные обработаны. @@ -2040,9 +2097,11 @@ // Проверяет, есть ли заблокированные меньшими очередями обработки данные. // // Параметры: -// Очередь - Число, Неопределено - очередь, к которой отнесен обработчик и в которой -// зарегистрированы данные, которые он будет обрабатывать. -// ПолноеИмяМетаданныеОбъекта - Строка, ОбъектМетаданных - полное имя обрабатываемого объекта или +// Очередь - Число +// - Неопределено - очередь, к которой отнесен обработчик и в которой +// зарегистрированы данные, которые он будет обрабатывать. +// ПолноеИмяМетаданныеОбъекта - Строка +// - ОбъектМетаданных - полное имя обрабатываемого объекта или // его метаданные. Например, "Документ.ПриходныйОрдерНаТовары" // - Массив - массив полных имен объектов или объектов метаданных, // в массиве не должно быть независимых регистров сведений. @@ -2063,7 +2122,10 @@ // которые он будет обрабатывать. // - Неопределено - проверяется, завершена ли обработка в целом; // - Массив - проверяется, есть ли данные для обработки в списке очередей. -// Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура - ссылка на объект, сам объект +// Данные - ЛюбаяСсылка +// - НаборЗаписей +// - Объект +// - ДанныеФормыСтруктура - ссылка на объект, сам объект // или набор записей, который необходимо проверить. // Если ДополнительныеПараметры.ЭтоДвижения = Истина, то Данные - это регистратор // указанного в ДополнительныеПараметры регистра. @@ -2106,17 +2168,16 @@ // * колонки, соответствующие измерениям регистра. // // Параметры: -// Очередь - Число, Неопределено - очередь обработки, в которой выполняется текущий обработчик. +// Очередь - Число +// - Неопределено - очередь обработки, в которой выполняется текущий обработчик. // Если передано Неопределено, то проверяется во всех очередях. // ПолноеИмяОбъекта - Строка - полное имя объекта, для которого выполняется проверка, // например Справочник.Номенклатура. // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - менеджер, в котором будет создана временная таблица. -// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки, -// параметр ВыбиратьПорциями игнорируется, заблокированные данные всегда помещаются в -// таблицу целиком. +// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки // // Возвращаемое значение: -// Структура - структура со свойствами: +// Структура: // * ЕстьЗаписиВоВременнойТаблице - Булево - в создаваемой таблице есть хотя бы одна запись. // * ИмяВременнойТаблицы - Строка - имя созданной временной таблицы. // @@ -2138,7 +2199,7 @@ |ПОМЕСТИТЬ #ИмяВременнойТаблицы |ГДЕ | ЛОЖЬ"; - + Запрос.УстановитьПараметр("ПустоеЗначение", МетаданныеОбъекта.СтандартныеРеквизиты.Ссылка.Тип.ПривестиЗначение()); Иначе ТекстЗапроса = @@ -2282,18 +2343,18 @@ // * Ссылка. // // Параметры: -// Очередь - Число, Неопределено - очередь обработки, в которой выполняется +// Очередь - Число +// - Неопределено - очередь обработки, в которой выполняется // текущий обработчик. Если передано Неопределено, то проверяется во всех очередях. -// ПолныеИменаОбъектов - Строка, Массив - полные имена объектов, для которых выполняется проверка, +// ПолныеИменаОбъектов - Строка +// - Массив - полные имена объектов, для которых выполняется проверка, // например Справочник.Номенклатура. // Могут быть переданы объекты ссылочного типа, или регистры, подчиненные регистратору. // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - менеджер, в котором будет создана временная таблица. -// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки, -// параметр ВыбиратьПорциями игнорируется, заблокированные данные -// всегда помещаются в таблицу целиком. +// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки // // Возвращаемое значение: -// Структура - структура со свойствами: +// Структура: // * ЕстьЗаписиВоВременнойТаблице - Булево - в создаваемой таблице есть хотя бы одна запись. // * ИмяВременнойТаблицы - Строка - имя созданной временной таблицы. // @@ -2455,20 +2516,20 @@ // Колонки таблицы соответствуют переданным измерениям. // // Параметры: -// Очередь - Число, Неопределено - очередь обработки, в которой выполняется +// Очередь - Число +// - Неопределено - очередь обработки, в которой выполняется // текущий обработчик. Если передано Неопределено, // то проверяется во всех очередях. // ПолноеИмяРегистра - Строка - имя регистра, движения по которому нужно переформировать. // Например, РегистрНакопления.ТоварыНаСкладах -// Измерения - Строка, Массив - имена измерений, по которым нужно проверить блокировку, +// Измерения - Строка +// - Массив - имена измерений, по которым нужно проверить блокировку, // перечисленные через запятую, или массив имен. // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - менеджер, в котором будет создана временная таблица. -// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки, -// параметр ВыбиратьПорциями игнорируется, заблокированные данные -// всегда помещаются в таблицу целиком. +// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки // // Возвращаемое значение: -// Структура - структура со свойствами: +// Структура: // * ЕстьЗаписиВоВременнойТаблице - Булево - в создаваемой таблице есть хотя бы одна запись. // * ИмяВременнойТаблицы - Строка - имя созданной временной таблицы. // @@ -2645,7 +2706,7 @@ // Возвращает признак завершения отложенного обновления. // // Параметры: -// ИменаПодсистем - Строка - Если передано, будет проверяться результат завершения +// ИменаПодсистем - Строка - если передано, будет проверяться результат завершения // обновления для переданной подсистемы, а не для всей конфигурации. // - Массив - если требуется проверить завершение обновления сразу нескольких // подсистем. @@ -2672,21 +2733,18 @@ ИменаПодсистем = СтрРазделить(ИменаПодсистем, ","); КонецЕсли; - Сведения = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - Для Каждого Библиотека Из Сведения.ДеревоОбработчиков.Строки Цикл - Если ИменаПодсистем.Найти(Библиотека.ИмяБиблиотеки) = Неопределено Тогда - Продолжить; - КонецЕсли; - Для Каждого Версия Из Библиотека.Строки Цикл - Для Каждого Обработчик Из Версия.Строки Цикл - Если Обработчик.Статус <> "Выполнено" Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - - Возврат Истина; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Подсистемы", ИменаПодсистем); + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.ИмяБиблиотеки В (&Подсистемы) + | И ОбработчикиОбновления.Статус <> &Статус"; + Возврат Запрос.Выполнить().Выгрузить().Количество() = 0; КонецФункции @@ -2796,7 +2854,8 @@ // // 6) Устарели, используются для обратной совместимости (для новых обработчиков не указывать): // -// * МонопольныйРежим - Неопределено, Булево - если указано Неопределено, то обработчик +// * МонопольныйРежим - Неопределено +// - Булево - если указано Неопределено, то обработчик // должен безусловно выполняться в монопольном режиме. // Для обработчиков перехода на конкретную версию (версия <> *): // Ложь - обработчик не требует монопольного режима для выполнения. @@ -2861,7 +2920,7 @@ // изменяющими или читающими одни и те же данные. Для использования в описании обработчиков обновления. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: +// ТаблицаЗначений: // * Порядок - Строка - порядок выполнения текущего обработчика относительно других. // Допустимые варианты: "До", "После", "Любой". // * Идентификатор - УникальныйИдентификатор - идентификатор процедуры, с которой настраивается взаимосвязь. @@ -2891,7 +2950,7 @@ // ВерсияМетаданныхИБ - Строка - версия метаданных, до которой необходимо выполнить обновление. // ОбработчикиОбновления - Соответствие - список обработчиков обновления. // ОперативноеОбновление - Булево - Истина, если обновление оперативное. -// ХодВыполненияОбработчиков - Структура - со свойствами: +// ХодВыполненияОбработчиков - Структура: // * ВсегоОбработчиков - Строка - общее количество выполняемых обработчиков. // * ВыполненоОбработчиков - Булево - количество выполненных обработчиков. // @@ -2930,7 +2989,22 @@ // "Успешно", "НеТребуется", "ОшибкаУстановкиМонопольногоРежима". // Функция ВыполнитьОбновлениеИнформационнойБазы(ВыполнятьОтложенныеОбработчики = Ложь) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + МодульТехнологияСервисаБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервиса"); + ВерсияБиблиотекиБТС = МодульТехнологияСервисаБазоваяФункциональность.ВерсияБиблиотеки(); + ТребуетсяУстановкаРасширения = ОбновлениеИнформационнойБазыСлужебный.ВесВерсии("2.0.0.0") < ОбновлениеИнформационнойБазыСлужебный.ВесВерсии(ВерсияБиблиотекиБТС); + Если ТребуетсяУстановкаРасширения Тогда + + ОбновлениеСУстановкойРасширенияБТСВыполненоУспешно = МодульТехнологияСервисаБазоваяФункциональность.ПередОбновлениемИнформационнойБазы(ВыполнятьОтложенныеОбработчики); + + Если ОбновлениеСУстановкойРасширенияБТСВыполненоУспешно Тогда + Возврат "Успешно"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ДатаНачала = ТекущаяДатаСеанса(); Результат = ОбновлениеИнформационнойБазыСлужебныйВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(,, ВыполнятьОтложенныеОбработчики); @@ -2945,7 +3019,7 @@ // Для пакетной выгрузки/загрузки сведений о версиях подсистем. // // Возвращаемое значение: -// ТаблицаЗначений - таблица с колонками: +// ТаблицаЗначений: // * ИмяПодсистемы - Строка - имя подсистемы. // * Версия - Строка - версия подсистемы. // @@ -2967,7 +3041,7 @@ // Для пакетной выгрузки/загрузки сведений о версиях подсистем. // // Параметры: -// ВерсииПодсистем - ТаблицаЗначений - таблица с колонками: +// ВерсииПодсистем - ТаблицаЗначений: // * ИмяПодсистемы - Строка - имя подсистемы. // * Версия - Строка - версия подсистемы. // @@ -3068,7 +3142,8 @@ // имени или уникальному идентификатору. // // Параметры: -// ИмяИлиИдентификатор - Строка, УникальныйИдентификатор - полное имя отложенного обработчика +// ИмяИлиИдентификатор - Строка +// - УникальныйИдентификатор - полное имя отложенного обработчика // или его идентификатор. Подробнее см. НоваяТаблицаОбработчиковОбновления, // описание свойств Процедура и Идентификатор. // @@ -3127,7 +3202,6 @@ КонецФункции - // Возвращает текущее значение приоритета отложенной обработки данных. // // Возвращаемое значение: @@ -3204,6 +3278,303 @@ Возврат ОбновлениеИнформационнойБазыСлужебный.РазрешеноМногопоточноеОбновление(); КонецФункции +// Возвращает прогресс обновления областей данных. +// +// Параметры: +// РежимОбновления - Строка - определяет, по какому этапу обновления необходимо получить данные. +// Доступные значения: "Оперативное", "Отложенное", "ОбщиеДанные". +// +// Возвращаемое значение: +// Структура: +// * Обновлено - Массив - обновленные области. +// - Булево - признак окончания обновления для режима ОбщиеДанные. +// * Выполняется - Массив из Число - области, где обработчики выполняются. +// - Булево - признак выполнения обновления для режима ОбщиеДанные. +// * Ожидают - Массив из Число - области, в которых отложенное обновление еще не началось +// - Булево - признак окончания обновления для режима выполнения ОбщиеДанные. +// * Проблемы - Массив из Число - области, где обновление завершилось с ошибкой. +// - Булево - признак, что обновление завершилось с ошибкой для режима ОбщиеДанные. +// * ОбластиСПроблемами - Массив из Число - только для режимов "Оперативное" и "Отложенное". +// * ОбластиВыполняется - Массив из Число - только для режимов "Оперативное" и "Отложенное". +// +Функция ПрогрессОбновленияОбластейДанных(РежимОбновления) Экспорт + + РежимОбновленияДляЗапроса = Новый Массив; + Если РежимОбновления = "Отложенное" Тогда + РежимОбновленияДляЗапроса.Добавить(Перечисления.РежимыВыполненияОбработчиков.Отложенно); + ИначеЕсли РежимОбновления = "Оперативное" Или РежимОбновления = "ОбщиеДанные" Тогда + РежимОбновленияДляЗапроса.Добавить(Перечисления.РежимыВыполненияОбработчиков.Оперативно); + РежимОбновленияДляЗапроса.Добавить(Перечисления.РежимыВыполненияОбработчиков.Монопольно); + Иначе + ВызватьИсключение НСтр("ru = 'Некорректное значение параметра ""РежимОбновления"". + |Доступные значения: ""Оперативное"", ""Отложенное"", ""ОбщиеДанные""'"); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяПодсистемы", Метаданные.Имя); + Запрос.УстановитьПараметр("Версия", Метаданные.Версия); + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных + |ИЗ + | РегистрСведений.ВерсииПодсистемОбластейДанных КАК ВерсииПодсистемОбластейДанных + |ГДЕ + | ВерсииПодсистемОбластейДанных.ИмяПодсистемы = &ИмяПодсистемы + | И ВерсииПодсистемОбластейДанных.Версия = &Версия"; + ОбластиОбновленныеНаВерсию = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ОбластьДанных"); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("СтатусВыполняется", Перечисления.СтатусыОбработчиковОбновления.Выполняется); + Запрос.УстановитьПараметр("СтатусОшибка", Перечисления.СтатусыОбработчиковОбновления.Ошибка); + Запрос.УстановитьПараметр("СтатусНеВыполнялся", Перечисления.СтатусыОбработчиковОбновления.НеВыполнялся); + Запрос.УстановитьПараметр("СтатусВыполнен", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + Запрос.УстановитьПараметр("РежимВыполнения", РежимОбновленияДляЗапроса); + Запрос.УстановитьПараметр("ОбластиОбновленныеНаВерсию", ОбластиОбновленныеНаВерсию); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ОбработчикиОбновления.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных, + | КОЛИЧЕСТВО(ВЫБОР + | КОГДА ОбработчикиОбновления.Статус = &СтатусВыполняется + | ТОГДА ОбработчикиОбновления.Статус + | КОНЕЦ) КАК Выполняется, + | КОЛИЧЕСТВО(ВЫБОР + | КОГДА ОбработчикиОбновления.Статус = &СтатусОшибка + | ТОГДА ОбработчикиОбновления.Статус + | КОНЕЦ) КАК Ошибки, + | КОЛИЧЕСТВО(ВЫБОР + | КОГДА ОбработчикиОбновления.Статус = &СтатусНеВыполнялся + | ТОГДА ОбработчикиОбновления.Статус + | КОНЕЦ) КАК НеВыполнялись, + | КОЛИЧЕСТВО(ВЫБОР + | КОГДА ОбработчикиОбновления.Статус = &СтатусВыполнен + | ТОГДА ОбработчикиОбновления.Статус + | КОНЕЦ) КАК Выполнены + |ПОМЕСТИТЬ СтатистикаОбновленияПоОбластям + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения В(&РежимВыполнения)"; + + Если РежимОбновления <> "ОбщиеДанные" Тогда + Запрос.Текст = Запрос.Текст + Символы.ПС + Символы.ПС + + "СГРУППИРОВАТЬ ПО + | ОбработчикиОбновления.ОбластьДанныхВспомогательныеДанные" + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | СтатистикаОбновленияПоОбластям.ОбластьДанных КАК ОбластьДанных + |ИЗ + | СтатистикаОбновленияПоОбластям КАК СтатистикаОбновленияПоОбластям + |ГДЕ + | СтатистикаОбновленияПоОбластям.Выполнены <> 0 + | И СтатистикаОбновленияПоОбластям.Выполняется = 0 + | И СтатистикаОбновленияПоОбластям.Ошибки = 0 + | И СтатистикаОбновленияПоОбластям.НеВыполнялись = 0 + | И СтатистикаОбновленияПоОбластям.ОбластьДанных В(&ОбластиОбновленныеНаВерсию) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СтатистикаОбновленияПоОбластям.ОбластьДанных КАК ОбластьДанных + |ИЗ + | СтатистикаОбновленияПоОбластям КАК СтатистикаОбновленияПоОбластям + |ГДЕ + | СтатистикаОбновленияПоОбластям.Выполняется <> 0 + | И СтатистикаОбновленияПоОбластям.Ошибки = 0 + | И СтатистикаОбновленияПоОбластям.ОбластьДанных В(&ОбластиОбновленныеНаВерсию) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СтатистикаОбновленияПоОбластям.ОбластьДанных КАК ОбластьДанных + |ИЗ + | СтатистикаОбновленияПоОбластям КАК СтатистикаОбновленияПоОбластям + |ГДЕ + | СтатистикаОбновленияПоОбластям.Ошибки <> 0 + | И СтатистикаОбновленияПоОбластям.ОбластьДанных В(&ОбластиОбновленныеНаВерсию) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СтатистикаОбновленияПоОбластям.ОбластьДанных КАК ОбластьДанных + |ИЗ + | СтатистикаОбновленияПоОбластям КАК СтатистикаОбновленияПоОбластям + |ГДЕ + | (СтатистикаОбновленияПоОбластям.Выполнены = 0 + | И СтатистикаОбновленияПоОбластям.Выполняется = 0 + | И СтатистикаОбновленияПоОбластям.Ошибки = 0 + | И СтатистикаОбновленияПоОбластям.НеВыполнялись <> 0 + | ИЛИ НЕ СтатистикаОбновленияПоОбластям.ОбластьДанных В (&ОбластиОбновленныеНаВерсию))"; + Запрос.Текст = Запрос.Текст + Символы.ПС + ";" + Символы.ПС + ТекстЗапроса; + Если РежимОбновления = "ОбщиеДанные" Тогда + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "РегистрСведений.ОбработчикиОбновления", + "РегистрСведений.ОбработчикиОбновленияОбщихДанных"); + + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "ОбработчикиОбновления.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных", + "0 КАК ОбластьДанных"); + КонецЕсли; + + РезультатЗапроса = Запрос.ВыполнитьПакет(); + + ПрогрессОбновления = Новый Структура; + Если РежимОбновления = "ОбщиеДанные" Тогда + ПрогрессОбновления.Вставить("Обновлено", РезультатЗапроса[1].Выгрузить().Количество() > 0); + ПрогрессОбновления.Вставить("Проблемы", РезультатЗапроса[3].Выгрузить().Количество() > 0); + ПрогрессОбновления.Вставить("Выполняется", ВыполняетсяОбновлениеИнформационнойБазы()); + Ожидает = Не ПрогрессОбновления.Обновлено + И Не ПрогрессОбновления.Проблем + И Не ПрогрессОбновления.Выполняется + И НеобходимоОбновлениеИнформационнойБазы(); + ПрогрессОбновления.Вставить("Ожидают", Ожидает); + Иначе + Выполняются = РезультатЗапроса[2].Выгрузить(); + Проблемы = РезультатЗапроса[3].Выгрузить(); + + ПрогрессОбновления.Вставить("Обновлено", РезультатЗапроса[1].Выгрузить().Количество()); + ПрогрессОбновления.Вставить("Выполняется", Выполняются.Количество()); + ПрогрессОбновления.Вставить("ОбластиВыполняется", Выполняются.ВыгрузитьКолонку("ОбластьДанных")); + ПрогрессОбновления.Вставить("Проблемы", Проблемы.Количество()); + ПрогрессОбновления.Вставить("ОбластиСПроблемами", Проблемы.ВыгрузитьКолонку("ОбластьДанных")); + ПрогрессОбновления.Вставить("Ожидают", РезультатЗапроса[4].Выгрузить().Количество()); + КонецЕсли; + + Возврат ПрогрессОбновления; + +КонецФункции + +// Возвращает таблицу обработчиков обновления по указанному отбору. +// В режиме сервиса, если не задан отбор по области данных, что возвращаются +// все обработчики - разделенные и неразделенные. +// +// Параметры: +// Отбор - Структура: +// * РежимВыполнения - Строка - режим выполнения обработчика обновления. +// * ОбластьДанных - Число - номер области, по которой нужно получить обработчики. +// * Статус - Строка - статус обработчика обновления. Доступные значения: +// "Выполнен", "Выполняется", "Ошибка", "НеВыполнялся". +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ИмяОбработчика - Строка +// * Статус - Перечисление.СтатусыОбработчиковОбновления +// * ДлительностьОбработки - Число +// * ИнформацияОбОшибке - Строка +// * Версия - Строка +// * ИмяБиблиотеки - Строка +// * РежимВыполнения - Перечисление.РежимыВыполненияОбработчиков +// * ОбластьДанных - Число +// +Функция ОбработчикиОбновления(Отбор = Неопределено) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.Статус КАК Статус, + | ОбработчикиОбновления.ДлительностьОбработки КАК ДлительностьОбработки, + | ОбработчикиОбновления.ИнформацияОбОшибке КАК ИнформацияОбОшибке, + | ОбработчикиОбновления.РежимВыполнения КАК РежимВыполнения, + | ОбработчикиОбновления.Версия КАК Версия, + | ОбработчикиОбновления.ИмяБиблиотеки КАК ИмяБиблиотеки, + | ОбработчикиОбновления.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | &УсловиеЗапроса + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика, + | ОбработчикиОбновления.Статус, + | ОбработчикиОбновления.ДлительностьОбработки, + | ОбработчикиОбновления.ИнформацияОбОшибке, + | ОбработчикиОбновления.РежимВыполнения, + | ОбработчикиОбновления.Версия, + | ОбработчикиОбновления.ИмяБиблиотеки, + | 0 КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбработчикиОбновленияОбщихДанных КАК ОбработчикиОбновления + |ГДЕ + | &УсловиеЗапроса"; + + УсловиеЗапроса = ""; + Если Отбор.Свойство("РежимВыполнения") Тогда + УсловиеЗапроса = "ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения"; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков[Отбор.РежимВыполнения]); + КонецЕсли; + + Если Отбор.Свойство("Статус") Тогда + Если ЗначениеЗаполнено(УсловиеЗапроса) Тогда + УсловиеЗапроса = УсловиеЗапроса + Символы.ПС + " И " + "ОбработчикиОбновления.Статус = &Статус"; + Иначе + УсловиеЗапроса = "ОбработчикиОбновления.Статус = &Статус"; + КонецЕсли; + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления[Отбор.Статус]); + КонецЕсли; + + Если Отбор.Свойство("ОбластьДанных") Тогда + Если ЗначениеЗаполнено(УсловиеЗапроса) Тогда + УсловиеЗапроса = УсловиеЗапроса + Символы.ПС + " И " + "ОбработчикиОбновления.ОбластьДанныхВспомогательныеДанные = &ОбластьДанных"; + Иначе + УсловиеЗапроса = "ОбработчикиОбновления.ОбластьДанныхВспомогательныеДанные = &ОбластьДанных"; + КонецЕсли; + Запрос.УстановитьПараметр("ОбластьДанных", Отбор.ОбластьДанных); + КонецЕсли; + + Если Не ЗначениеЗаполнено(УсловиеЗапроса) Тогда + УсловиеЗапроса = "ИСТИНА"; + КонецЕсли; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеЗапроса", УсловиеЗапроса); + + Результат = Запрос.Выполнить().Выгрузить(); + + Возврат Результат; + +КонецФункции + +// Возвращает таблицу обновляемых объектов конфигурации со списком обработчиков, +// которые их обрабатывают на текущую версию. +// +// Возвращаемое значение: +// Соответствие: +// * Ключ - Строка - полное имя объекта. +// * Значение - Массив из Строка - имена выполняемых обработчиков обновления. +// +Функция ОбновляемыеОбъекты() Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.ИзменяемыеОбъекты КАК ИзменяемыеОбъекты + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения"; + Обработчики = Запрос.Выполнить().Выгрузить(); + ОбновляемыеОбъекты = Новый Соответствие; + Для Каждого Обработчик Из Обработчики Цикл + ИзменяемыеОбъектыЧастями = СтрРазделить(Обработчик.ИзменяемыеОбъекты, ",", Ложь); + Для Каждого ИзменяемыйОбъект Из ИзменяемыеОбъектыЧастями Цикл + ИзменяемыйОбъект = СокрЛП(ИзменяемыйОбъект); + Если ОбновляемыеОбъекты[ИзменяемыйОбъект] = Неопределено Тогда + ОбновляемыеОбъекты[ИзменяемыйОбъект] = Новый Массив; + КонецЕсли; + ОбновляемыеОбъекты[ИзменяемыйОбъект].Добавить(Обработчик.ИмяОбработчика); + КонецЦикла; + КонецЦикла; + + Возврат ОбновляемыеОбъекты; + +КонецФункции + #Область ДляВызоваИзДругихПодсистем // ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы @@ -3347,7 +3718,7 @@ Для Каждого ТипИсточника Из ТипыИсточника Цикл - Если ЭтоПримитивныйТип(ТипИсточника) Тогда + Если ЭтоПримитивныйТип(ТипИсточника) Или ЭтоПеречисление(ТипИсточника) Тогда Продолжить; КонецЕсли; @@ -3404,7 +3775,7 @@ ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ = СтрЗаменить(ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ, "#ИмяВТ", ИмяВТЗаблокированногоДопИсточника); - СинонимВТЗаблокированногоДопИсточника = ИмяВТЗаблокированногоДопИсточника + ИмяТЧ + ИмяРеквизита; + СинонимВТЗаблокированногоДопИсточника = ИмяВТЗаблокированногоДопИсточника + ИмяТЧ + ИмяРеквизита; ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ = СтрЗаменить(ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ, "#СинонимВТ", СинонимВТЗаблокированногоДопИсточника); @@ -3425,7 +3796,7 @@ ТекстЗапросаСоединениеСДопИсточникамиПоШапке = СтрЗаменить(ТекстЗапросаСоединениеСДопИсточникамиПоШапке, "#ИмяВТ", ИмяВТЗаблокированногоДопИсточника); - СинонимВТЗаблокированногоДопИсточника = ИмяВТЗаблокированногоДопИсточника + "Шапка"; + СинонимВТЗаблокированногоДопИсточника = ИмяВТЗаблокированногоДопИсточника + "_" + ИсточникДанных + "Шапка"; ТекстЗапросаСоединениеСДопИсточникамиПоШапке = СтрЗаменить(ТекстЗапросаСоединениеСДопИсточникамиПоШапке, "#СинонимВТ", СинонимВТЗаблокированногоДопИсточника); @@ -3670,7 +4041,7 @@ Для Каждого ТипИсточника Из ТипыИсточника Цикл - Если ЭтоПримитивныйТип(ТипИсточника) Тогда + Если ЭтоПримитивныйТип(ТипИсточника) Или ЭтоПеречисление(ТипИсточника) Тогда Продолжить; КонецЕсли; @@ -3778,12 +4149,11 @@ // - ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(); // // Параметры: -// ДополнительныеПараметры - см. -// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки(). +// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки // ИмяТаблицы - Строка - имя таблицы из которой выбираются данные. // // Возвращаемое значение: -// Структура - со следующими полями: +// Структура: // * ДополнительныеПараметры - Структура - копия ссылки входного параметра для процедур механизма. // * ПостраничнаяВыборка - Булево - Истина, если выборка выполняется по страницам. // * ИмяТаблицы - Строка - имя таблицы из которой выбираются данные. @@ -3814,7 +4184,7 @@ // Установить поля упорядочивания в ВыбратьСсылкиДляОбработки(). // // Параметры: -// ПараметрыПостроения - см. ПараметрыПостроенияВыборки(). +// ПараметрыПостроения - см. ПараметрыПостроенияВыборки // ЭтоДокумент - Булево - Истина, если обрабатываются ссылки документа. // Процедура УстановитьПоляУпорядочиванияСсылок(ПараметрыПостроения, ЭтоДокумент) @@ -3842,7 +4212,7 @@ // Установить поля упорядочивания для регистра в ВыбратьРегистраторыРегистраДляОбработки(). // // Параметры: -// ПараметрыПостроения - см. ПараметрыПостроенияВыборки(). +// ПараметрыПостроения - см. ПараметрыПостроенияВыборки // Процедура УстановитьПоляУпорядочиванияРегистра(ПараметрыПостроения) @@ -3866,7 +4236,7 @@ // Установить поля упорядочивания для документа в ВыбратьРегистраторыРегистраДляОбработки(). // // Параметры: -// ПараметрыПостроения - см. ПараметрыПостроенияВыборки(). +// ПараметрыПостроения - см. ПараметрыПостроенияВыборки // Процедура УстановитьПоляУпорядочиванияРегистраПоДокументу(ПараметрыПостроения) @@ -3889,7 +4259,7 @@ // Установить поля упорядочивания для документа в ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). // // Параметры: -// ПараметрыПостроения - см. ПараметрыПостроенияВыборки(). +// ПараметрыПостроения - см. ПараметрыПостроенияВыборки // Процедура УстановитьПоляУпорядочиванияНезависимогоРегистраСведений(ПараметрыПостроения) @@ -3915,7 +4285,7 @@ // Учесть измерение в параметрах формирования запроса в ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). // // Параметры: -// ПараметрыПостроения - см. ПараметрыПостроенияВыборки(). +// ПараметрыПостроения - см. ПараметрыПостроенияВыборки // ИмяИзмерения - Строка - имя обрабатываемого измерения. // Процедура УстановитьИзмерение(ПараметрыПостроения, ИмяИзмерения) @@ -3934,7 +4304,7 @@ // Учесть период в параметрах формирования запроса в ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). // // Параметры: -// ПараметрыПостроения - см. ПараметрыПостроенияВыборки(). +// ПараметрыПостроения - см. ПараметрыПостроенияВыборки // Процедура УстановитьПериод(ПараметрыПостроения) @@ -3946,7 +4316,8 @@ // Учесть ресурсы в параметрах формирования запроса в ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). // // Параметры: -// ПараметрыПостроения - см. ПараметрыПостроенияВыборки(). +// ПараметрыПостроения - см. ПараметрыПостроенияВыборки +// Ресурсы - КоллекцияОбъектовМетаданных // Процедура УстановитьРесурсы(ПараметрыПостроения, Ресурсы) @@ -3964,7 +4335,8 @@ // Учесть реквизиты в параметрах формирования запроса в ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). // // Параметры: -// ПараметрыПостроения - см. ПараметрыПостроенияВыборки(). +// ПараметрыПостроения - см. ПараметрыПостроенияВыборки +// Реквизиты - КоллекцияОбъектовМетаданных // Процедура УстановитьРеквизиты(ПараметрыПостроения, Реквизиты) @@ -3986,7 +4358,7 @@ // // Параметры: // Запрос - Запрос - запрос выборки данных. -// ПараметрыПостроения - см. ПараметрыПостроенияВыборки(). +// ПараметрыПостроения - см. ПараметрыПостроенияВыборки // // Возвращаемое значение: // * ВыборкаИзРезультатаЗапроса - в случае обычной выборки. @@ -4007,7 +4379,7 @@ // // Параметры: // Запрос - Запрос - запрос выборки данных. -// ПараметрыПостроения - см. ПараметрыПостроенияВыборки(). +// ПараметрыПостроения - см. ПараметрыПостроенияВыборки // // Возвращаемое значение: // ТаблицаЗначений - данные для обработчика обновления (многопоточного). @@ -4131,10 +4503,10 @@ // - выборка диапазона - записи между двумя указанными записями включительно. // // Параметры: -// Запрос - Запрос - запрос выборки данных. -// Условия - см. УсловияДляДиапазонаСтраницы(). +// Запрос - Запрос - запрос выборки данных. +// Условия - см. НовыеУсловияПостраничнойВыборки // Таблица - Строка - имя таблицы из которой выполняется выборка. -// Параметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// Параметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки // Первые - Булево - Истина, если это первые условия в запросе. // НомерУсловия - Число - номер обрабатываемого условия. // @@ -4227,7 +4599,7 @@ // - Неопределено - порядок не указывается (всегда ВОЗР). // // Возвращаемое значение: -// см. НовыеУсловияПостраничнойВыборки(). +// см. НовыеУсловияПостраничнойВыборки // Функция УсловияДляСледующейСтраницы(ПоляВыборки, Параметры, Направления) @@ -4265,7 +4637,7 @@ // - Неопределено - порядок не указывается (всегда ВОЗР). // // Возвращаемое значение: -// см. НовыеУсловияПостраничнойВыборки(). +// см. НовыеУсловияПостраничнойВыборки // Функция УсловияДляДиапазонаСтраницы(ПоляВыборки, Параметры, Направления) @@ -4334,8 +4706,8 @@ // Возвращает результат сравнения двух записей. // // Параметры: -// ПерваяЗапись - см. ОбновлениеИнформационнойБазыСлужебный.НовыйКлючЗаписи(). -// ПоследняяЗапись - см. ОбновлениеИнформационнойБазыСлужебный.НовыйКлючЗаписи(). +// ПерваяЗапись - см. ОбновлениеИнформационнойБазыСлужебный.НовыйКлючЗаписи +// ПоследняяЗапись - см. ОбновлениеИнформационнойБазыСлужебный.НовыйКлючЗаписи // КоличествоПолей - Число - количество прикладных полей в ключе записи. // // Возвращаемое значение: @@ -4601,8 +4973,7 @@ // // Параметры: // ТекстЗапроса - Строка - текст модифицируемого запроса. -// Параметры - см. -// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// Параметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. // Процедура УстановитьРазмерВыборки(ТекстЗапроса, Параметры) @@ -4687,8 +5058,7 @@ // Позволяет определить постраничная ли это выборка. // // Параметры: -// Параметры - см. -// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// Параметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. // // Возвращаемое значение: // Булево - Истина, если выборка многопоточная. @@ -4702,7 +5072,7 @@ // Возвращает, выполняется ли упорядочивание по возрастанию. // // Параметры: -// Направление - Строка - Проверяемое направление упорядочивания. +// Направление - Строка - проверяемое направление упорядочивания. // // Возвращаемое значение: // Булево - Истина, если упорядочивание по возрастанию, иначе Ложь. @@ -4723,7 +5093,7 @@ // Возвращает оператор ">" для страничной выборки, с учетом порядка упорядочивания. // // Параметры: -// Направление - Строка - Проверяемое направление упорядочивания. +// Направление - Строка - проверяемое направление упорядочивания. // // Возвращаемое значение: // Строка - оператор ">", если Порядок = "ВОЗР", иначе "<". @@ -4737,7 +5107,7 @@ // Возвращает оператор "<" для страничной выборки, с учетом порядка упорядочивания. // // Параметры: -// Направление - Строка - Проверяемое направление упорядочивания. +// Направление - Строка - проверяемое направление упорядочивания. // // Возвращаемое значение: // Строка - оператор "<", если Порядок = "ВОЗР", иначе ">". @@ -4751,7 +5121,7 @@ // Возвращает оператор ">=" для страничной выборки, с учетом порядка упорядочивания. // // Параметры: -// Направление - Строка - Проверяемое направление упорядочивания. +// Направление - Строка - проверяемое направление упорядочивания. // // Возвращаемое значение: // Строка - оператор ">=", если Порядок = "ВОЗР", иначе "<=". @@ -4765,7 +5135,7 @@ // Возвращает оператор "<=" для страничной выборки, с учетом порядка упорядочивания. // // Параметры: -// Направление - Строка - Проверяемое направление упорядочивания. +// Направление - Строка - проверяемое направление упорядочивания. // // Возвращаемое значение: // Строка - оператор "<=", если Порядок = "ВОЗР", иначе ">=". @@ -4809,7 +5179,7 @@ // Возвращает вид источника данных (см. ДополнительныеПараметрыВыборкиДанныхДляОбработки(), п. 1 и п. 2. // // Параметры: -// ДополнительныеИсточникиДанных - см. ДополнительныеПараметрыВыборкиДанныхДляОбработки(). +// ДополнительныеИсточникиДанных - см. ДополнительныеПараметрыВыборкиДанныхДляОбработки // // Возвращаемое значение: // Булево - Истина, если это простой набор источников, как в п.1, Ложь - если это иерархия соответствий, @@ -4838,4 +5208,10 @@ КонецФункции +Функция ЭтоПеречисление(ПроверяемыйТип) + + Возврат Перечисления.ТипВсеСсылки().СодержитТип(ПроверяемыйТип); + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index 15f871f1a..fd5d9e83b 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -19,7 +19,7 @@ // Библиотека, имя которой имя совпадает с именем конфигурации в метаданных, определяется как основная конфигурация. // // Параметры: -// Описание - Структура - сведения о библиотеке: +// Описание - Структура: // // * Имя - Строка - имя библиотеки, например, "СтандартныеПодсистемы". // * Версия - Строка - версия в формате из 4-х цифр, например, "2.1.3.1". @@ -41,7 +41,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "3.1.2.406"; + Описание.Версия = "3.1.3.162"; Описание.ИдентификаторИнтернетПоддержки = "SSL"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0"; @@ -114,7 +114,7 @@ // Вызывается перед началом обновления данных ИБ. // // Параметры: -// Обработчики - ТаблицаЗначений - с колонками: +// Обработчики - ТаблицаЗначений: // * ПредыдущееИмяКонфигурации - Строка - имя конфигурации, с которой выполняется переход; // или "*", если нужно выполнять при переходе с любой конфигурации. // * Процедура - Строка - полное имя процедуры-обработчика перехода с программы @@ -137,7 +137,7 @@ // Параметры: // ПредыдущееИмяКонфигурации - Строка - имя конфигурации до перехода. // ПредыдущаяВерсияКонфигурации - Строка - имя предыдущей конфигурации (до перехода). -// Параметры - Структура - +// Параметры - Структура: // * ВыполнитьОбновлениеСВерсии - Булево - по умолчанию Истина. Если установить Ложь, // то будут выполнена только обязательные обработчики обновления (с версией "*"). // * ВерсияКонфигурации - Строка - номер версии после перехода. diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl index d904d8d5d..bbc18a23f 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl @@ -12,12 +12,12 @@ // пользователя и другое. // // Параметры: -// Параметры - Структура - со свойствами: +// Параметры - Структура: // * ПоясненияДляРезультатовОбновления - Строка - текст подсказки, указывающий путь // к форме "Результаты обновления программы". // * ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках - Структура - сообщение о // наличии невыполненных отложенных обработчиков обновления -// на прошлую версию при попытке обновления. +// на прошлую версию при попытке обновления: // * ТекстСообщения - Строка - текст сообщения, выводимый пользователю. По умолчанию // текст сообщения построен с учетом того, что обновление можно // продолжить, т.е. параметр ЗапрещатьПродолжение = Ложь. @@ -126,20 +126,75 @@ КонецПроцедуры -// Позволяет переопределить очередь отложенных обработчиков обновления, выполняемых в -// параллельном режиме. Может понадобиться, когда отложенные обработчики библиотек -// обрабатывают те же данные, что и обработчики основной конфигурации. -// Например, есть обработчики библиотеки и конфигурации, которые обрабатывают справочник -// Контрагенты, при этом обработчик конфигурации должен выполниться раньше, чтобы данные -// обновились корректно. В таком случае в данной процедуре нужно указать новый номер очереди -// для обработчика библиотеки, который будет больше, чем у обработчика конфигурации. +// Вызывается перед формирование списка отложенных обработчиков. +// Позволяет организовать дополнительные проверки списка отложенных обработчиков. // // Параметры: -// ОбработчикИОчередь - Соответствие - где: -// * Ключ - Строка - полное имя обработчика обновления. -// * Значение - Число - номер очереди, который необходимо установить обработчику. +// ИтерацииОбновления - Массив - массив структур, описывающих сведения об обновлении каждой +// библиотеки и конфигурации, с ключами: +// * Подсистема - Строка - имя библиотеки или конфигурации. +// * Версия - Строка - например, "2.1.3.39". Номер версии библиотеки (конфигурации). +// * ЭтоОсновнаяКонфигурация - Булево - Истина, если это основная конфигурация, а не библиотека. +// * Обработчики - ТаблицаЗначений - все обработчики обновления библиотеки, описание колонок +// см. в ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления. +// * ВыполненныеОбработчики - ДеревоЗначений - выполненные обработчики обновления, сгруппированные по +// библиотеке и номеру версии, описание колонок +// см. в ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления. +// * ИмяОсновногоСерверногоМодуля - Строка - имя модуля библиотеки (конфигурации), который предоставляет +// основные сведения о ней: имя, версия и т.д. +// * ОсновнойСерверныйМодуль - ОбщийМодуль - общий модуль библиотеки (конфигурации), который предоставляет +// основные сведения о ней: имя, версия и т.д. +// * ПредыдущаяВерсия - Строка - например, "2.1.3.30". Номер версии библиотеки (конфигурации) до обновления. // -Процедура ПриФормированииОчередейОтложенныхОбработчиков(ОбработчикИОчередь) Экспорт +// Пример: +// Обход всех обработчиков обновления: +// Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл +// Если ИтерацияОбновления.Подсистема = "ИмяНашейПодсистемы" Тогда +// Для Каждого Обработчик Из ИтерацияОбновления.Обработчики Цикл +// +// Если Обработчик.Версия = "*" Тогда +// // Группа обработчиков, которые выполняются регулярно при каждой смене версии. +// Иначе +// // Группа обработчиков, которые выполняются для определенной версии. +// КонецЕсли; +// +// КонецЦикла; +// КонецЕсли; +// КонецЦикла; +// +Процедура ПередФормированиеСпискаОтложенныхОбработчиков(ИтерацииОбновления) Экспорт + + + +КонецПроцедуры + +// Необходимо для того, чтобы выгружать новые или измененные описания +// обработчиков обновления в код при помощи обработки ОписаниеОбработчиковОбновления +// только по тем подсистемам, разработка которых ведется в данной конфигурации. +// +// +// Параметры: +// РазрабатываемыеПодсистемы - Массив из Строка - имена разрабатываемых подсистемы в текущей конфигурации +// имя подсистемы в том виде, в котором оно задано в общем модуле ОбновлениеИнформационнойБазыХХХ +// +Процедура ПриФормированиеСпискаРазрабатываемыхПодсистем(РазрабатываемыеПодсистемы) Экспорт + + + +КонецПроцедуры + +// Вызывается при выполнении функции ОбновлениеИнформационнойБазы.ОбъектОбработан. +// Позволяет написать произвольную логику для блокировки изменения объекта пользователем +// на время выполнения обновления программы. +// +// Параметры: +// ПолноеИмяОбъекта - Строка - имя объекта, для которого вызывается проверка. +// БлокироватьИзменение - Булево - если установить значение Истина, то объект +// будет открыт только для чтения. Значение по умолчанию - Ложь. +// ТекстСообщения - Строка - сообщение, которое будет выведено пользователю при открытии объекта. +// +Процедура ПриВыполненииПроверкиОбъектОбработан(ПолноеИмяОбъекта, БлокироватьИзменение, ТекстСообщения) Экспорт + КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl index 4a9126a9a..341616739 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl @@ -48,12 +48,12 @@ // // Параметры: // -// ПараметрыОбновления - Структура - свойства: +// ПараметрыОбновления - Структура: // * ИсключениеПриНевозможностиБлокировкиИБ - Булево - если Ложь, тогда при неудачной // попытке установки монопольного режима исключение не вызывается, // а возвращается строка "ОшибкаУстановкиМонопольногоРежима". // -// * ПриЗапускеКлиентскогоПриложения - Булево - Начальное значение Ложь. Если указать Истина, +// * ПриЗапускеКлиентскогоПриложения - Булево - начальное значение Ложь. Если указать Истина, // тогда параметры работы программы не будут обновляться, т.к. при клиентском // запуске они обновляются в самом начале (до авторизации пользователи и обновления ИБ). // Параметр требуется для оптимизации клиентского режима запуска, чтобы не выполнять @@ -65,7 +65,7 @@ // при возврате к конфигурации базы данных подчиненного узла РИБ, // см. общий модуль ОбменДаннымиСервер процедуру. // ВыполнитьСинхронизациюПриОтсутствииОбновленияИнформационнойБазы. -// * УстановленнаяБлокировкаИБ - Структура - структура со свойствами см. БлокировкаИБ(). +// * УстановленнаяБлокировкаИБ - см. БлокировкаИБ // * ВФоне - Булево - если обновление информационной базы выполняется // в фоне, то следует передавать Истина, иначе Ложь. // * ВыполнятьОтложенныеОбработчики - Булево - если Истина, отложенное обновление будет выполнено @@ -236,7 +236,7 @@ ИмяОсновнойКонфигурации = Метаданные.Имя; ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); Для каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл - ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); + ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); // см. СтандартныеПодсистемыПовтИсп.НовоеОписаниеПодсистемы Если НЕ ЗначениеЗаполнено(ОписаниеПодсистемы.ОсновнойСерверныйМодуль) Тогда Продолжить; КонецЕсли; @@ -288,9 +288,8 @@ КонецФункции -// Для внутреннего использования. -Функция ОбработчикиОбновленияВИнтервале(Знач ИсходнаяТаблицаОбработчиков, Знач ВерсияОт, Знач ВерсияДо, - Знач ПараметрыОтбораОбработчиков = Неопределено) Экспорт +Функция ОбработчикиОбновленияВИнтервале(Знач ИсходнаяТаблицаОбработчиков, Знач ВерсияОт, Знач ВерсияДо, + Знач ПараметрыОтбораОбработчиков = Неопределено) Экспорт ПараметрыОтбора = ПараметрыОтбораОбработчиков; Если ПараметрыОтбора = Неопределено Тогда @@ -349,8 +348,10 @@ ВыполняемыеОбработчики = ПроцессорВывода.Вывести(ПроцессорКомпоновки); - ВыполняемыеОбработчики.Колонки.Версия.Имя = "ВерсияРегистрации"; - ВыполняемыеОбработчики.Колонки.ГруппаВерсии.Имя = "Версия"; + КолонкаВерсия = ВыполняемыеОбработчики.Колонки.Версия; // КоллекцияКолонокТаблицыЗначений + КолонкаВерсия.Имя = "ВерсияРегистрации"; + КолонкаГруппаВерсии = ВыполняемыеОбработчики.Колонки.ГруппаВерсии; // КоллекцияКолонокТаблицыЗначений + КолонкаГруппаВерсии.Имя = "Версия"; // Сортировка обработчиков по признаку "ОбщиеДанные". Для Каждого Версия Из ВыполняемыеОбработчики.Строки Цикл @@ -475,31 +476,25 @@ КонецЕсли; КонецЕсли; - ЕстьОбработчикиСОшибкой = Ложь; - ЕстьНевыполненныеОбработчики = Ложь; - ЕстьПриостановленныеОбработчики = Ложь; - Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл - Если Обработчик.Статус = "Ошибка" Тогда - // Если найдены обработчики с ошибкой, цикл не прерывается, - // надо убедиться, что нет еще невыполненных обработчиков. - ЕстьОбработчикиСОшибкой = Истина; - ИначеЕсли Обработчик.Статус <> "Выполнено" Тогда - ЕстьНевыполненныеОбработчики = Истина; - Прервать; - ИначеЕсли Обработчик.Статус = "Приостановлен" Тогда - ЕстьПриостановленныеОбработчики = Истина; - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.Статус КАК Статус + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения + | + |СГРУППИРОВАТЬ ПО + | ОбработчикиОбновления.Статус"; + СтатусыОбработчиков = Запрос.Выполнить().Выгрузить(); - Если ЕстьНевыполненныеОбработчики Тогда + Если СтатусыОбработчиков.Найти(Перечисления.СтатусыОбработчиковОбновления.НеВыполнялся) <> Неопределено Тогда Возврат "СтатусНеВыполнено"; - ИначеЕсли ЕстьОбработчикиСОшибкой Тогда + ИначеЕсли СтатусыОбработчиков.Найти(Перечисления.СтатусыОбработчиковОбновления.Ошибка) <> Неопределено Тогда Возврат "СтатусОшибка"; - ИначеЕсли ЕстьПриостановленныеОбработчики Тогда + ИначеЕсли СтатусыОбработчиков.Найти(Перечисления.СтатусыОбработчиковОбновления.Приостановлен) <> Неопределено Тогда Возврат "СтатусПриостановлен"; Иначе Возврат ""; @@ -529,11 +524,9 @@ ОбработчикиВыполнялись = Истина; Пока ОбработчикиВыполнялись Цикл - ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, ПараметрыОбновления); + ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(ПараметрыОбновления); КонецЦикла; - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - КонецПроцедуры // Для внутреннего использования. @@ -558,7 +551,7 @@ КонецФункции -// Используется при тестировании. +// АПК:581-выкл Используется при тестировании. Функция ТребуетсяПроверитьЛегальностьПолученияОбновления() Экспорт Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда @@ -589,6 +582,7 @@ Возврат ЛегальнаяВерсия <> Метаданные.Версия; КонецФункции +// АПК:581-вкл // Возвращает текст причины блокировки, если требуется обновление ИБ и у текущего пользователя // для этого недостаточно прав, иначе возвращает пустую строку. @@ -714,7 +708,7 @@ // Требуется привилегированный режим. // // Параметры: -// Запуск - Булево - Если установить Истина, состояние будет установлено, +// Запуск - Булево - если установить Истина, состояние будет установлено, // если установить Ложь, состояние будет снято. // Процедура УстановитьЗапускОбновленияИнформационнойБазы(Запуск) Экспорт @@ -735,6 +729,30 @@ // Получает сведения об обновлении информационной базы // из константы "СведенияОбОбновленииИБ". +// +// Возвращаемое значение: +// Структура: +// * ВремяНачалаОбновления - Строка +// * ВремяОкончанияОбновления - Строка +// * ПродолжительностьОбновления - Строка +// * ВремяНачалаОтложенногоОбновления - Строка +// * ВремяОкончаниеОтложенногоОбновления - Строка +// * НомерСеанса - СписокЗначений +// * ПараметрыОбработчикаОбновления - Структура +// * ОтложенноеОбновлениеЗавершеноУспешно - Строка +// * ДеревоОбработчиков - ДеревоЗначений +// * ВерсияДереваОбработчиков - Строка +// * ВыводитьОписаниеОбновлений - Булево +// * ЛегальнаяВерсия - Строка +// * НовыеПодсистемы - Массив +// * УправлениеОтложеннымОбновлением - Структура +// * ОбрабатываемыеДанные - Соответствие +// * ТекущаяИтерацияОбновления - Число +// * ПланОтложенногоОбновления - Массив +// * СеансОбновления - Структура +// * ОписаниеПотоков - см. НовоеОписаниеПотоковРегистрацииДанныхОтложенногоОбновления +// * ВерсияУдалениеПатчей - Строка +// Функция СведенияОбОбновленииИнформационнойБазы() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -840,18 +858,13 @@ // Процедура ПеререгистрироватьДанныеДляОтложенногоОбновления() Экспорт - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; ОбрабатываемыеДанные = Новый Соответствие; ПараметрыИнициализированы = Ложь; - Для Каждого СтрокаБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - - Если ОписанияБиблиотек[СтрокаБиблиотека.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков <> "Параллельно" Тогда - Продолжить; - КонецЕсли; - - ПараллельноСВерсии = ОписанияБиблиотек[СтрокаБиблиотека.ИмяБиблиотеки].ПараллельноеОтложенноеОбновлениеСВерсии; + Обработчики = ОбработчикиДляОтложеннойРегистрацииДанных(); + + Для Каждого Обработчик Из Обработчики Цикл Если Не ПараметрыИнициализированы Тогда ПараметрыОбработчикаСтруктура = ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке(); @@ -859,73 +872,56 @@ ПараметрыИнициализированы = Истина; КонецЕсли; - Для Каждого СтрокаВерсия Из СтрокаБиблиотека.Строки Цикл + ПараметрыОбработчикаСтруктура.Очередь = Обработчик.ОчередьОтложеннойОбработки; + ПараметрыОбработчикаСтруктура.Вставить("ДанныеОбработчика", Новый Соответствие); + + Если Обработчик.Многопоточный Тогда + ПараметрыОбработчикаСтруктура.ПараметрыВыборки = + ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(); + Иначе + ПараметрыОбработчикаСтруктура.ПараметрыВыборки = Неопределено; + КонецЕсли; + + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(ПараметрыОбработчикаСтруктура); + Попытка + Сообщение = НСтр("ru = 'Выполняется процедура заполнения данных + |""%1"" + |отложенного обработчика обновления + |""%2"".'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, + Обработчик.ПроцедураЗаполненияДанныхОбновления, + Обработчик.ИмяОбработчика); + ЗаписатьИнформацию(Сообщение); - Если СтрокаВерсия.НомерВерсии = "*" Тогда - Продолжить; - КонецЕсли; + ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.ПроцедураЗаполненияДанныхОбновления, ПараметрыОбработчика); + Исключение + ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При вызове процедуры заполнения данных + |""%1"" + |отложенного обработчика обновления + |""%2"" + |произошла ошибка: + |""%3"".'"), + Обработчик.ПроцедураЗаполненияДанныхОбновления, + Обработчик.ИмяОбработчика, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); - Если ЗначениеЗаполнено(ПараллельноСВерсии) - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СтрокаВерсия.НомерВерсии, ПараллельноСВерсии) < 0 Тогда - Продолжить; - КонецЕсли; - - Для Каждого Обработчик Из СтрокаВерсия.Строки Цикл - - ПараметрыОбработчикаСтруктура.Очередь = Обработчик.ОчередьОтложеннойОбработки; - ПараметрыОбработчикаСтруктура.Вставить("ДанныеОбработчика", Новый Соответствие); - - Если Обработчик.Многопоточный Тогда - ПараметрыОбработчикаСтруктура.ПараметрыВыборки = - ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(); - Иначе - ПараметрыОбработчикаСтруктура.ПараметрыВыборки = Неопределено; - КонецЕсли; - - ПараметрыОбработчика = Новый Массив; - ПараметрыОбработчика.Добавить(ПараметрыОбработчикаСтруктура); - Попытка - Сообщение = НСтр("ru = 'Выполняется процедура заполнения данных - |""%1"" - |отложенного обработчика обновления - |""%2"".'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - Обработчик.ПроцедураЗаполненияДанныхОбновления, - Обработчик.ИмяОбработчика); - ЗаписатьИнформацию(Сообщение); - - ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.ПроцедураЗаполненияДанныхОбновления, ПараметрыОбработчика); - Исключение - ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При вызове процедуры заполнения данных - |""%1"" - |отложенного обработчика обновления - |""%2"" - |произошла ошибка: - |""%3"".'"), - Обработчик.ПроцедураЗаполненияДанныхОбновления, - Обработчик.ИмяОбработчика, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); - - ВызватьИсключение; - КонецПопытки; - - ОписаниеОбрабатываемыхДанных = НовоеОписаниеОбрабатываемыхДанных(Обработчик.Многопоточный); - ОписаниеОбрабатываемыхДанных.ДанныеОбработчика = ПараметрыОбработчикаСтруктура.ДанныеОбработчика; - - Если Обработчик.Многопоточный Тогда - ОписаниеОбрабатываемыхДанных.ПараметрыВыборки = ПараметрыОбработчикаСтруктура.ПараметрыВыборки; - КонецЕсли; - - ОбрабатываемыеДанные.Вставить(Обработчик.ИмяОбработчика, ОписаниеОбрабатываемыхДанных); - КонецЦикла; - КонецЦикла; + ВызватьИсключение; + КонецПопытки; + + ОписаниеОбрабатываемыхДанных = НовоеОписаниеОбрабатываемыхДанных(Обработчик.Многопоточный); + ОписаниеОбрабатываемыхДанных.ДанныеОбработчика = ПараметрыОбработчикаСтруктура.ДанныеОбработчика; + + Если Обработчик.Многопоточный Тогда + ОписаниеОбрабатываемыхДанных.ПараметрыВыборки = ПараметрыОбработчикаСтруктура.ПараметрыВыборки; + КонецЕсли; + + ОписаниеОбрабатываемыхДанных = Новый ХранилищеЗначения(ОписаниеОбрабатываемыхДанных, Новый СжатиеДанных(9)); + УстановитьСвойствоОбработчика(Обработчик.ИмяОбработчика, "ОбрабатываемыеДанные", ОписаниеОбрабатываемыхДанных); КонецЦикла; - СведенияОбОбновлении.ОбрабатываемыеДанные = ОбрабатываемыеДанные; - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - КонецПроцедуры // Возвращает параметры отложенного обработчика обновления. @@ -933,27 +929,22 @@ // и возвращает их. // // Параметры: -// Идентификатор - Строка, УникальныйИдентификатор - имя процедуры обработчика или +// Идентификатор - Строка +// - УникальныйИдентификатор - имя процедуры обработчика или // его уникальный идентификатор. // // Возвращаемое значение: // Структура - сохраненные параметры обработчика обновления. // Функция ПараметрыОтложенногоОбработчикаОбновления(Идентификатор) Экспорт - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - ДеревоОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков.Строки; - - Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда - ОбработчикОбновления = ДеревоОбработчиков.Найти(Идентификатор, "Идентификатор", Истина); - Иначе - ОбработчикОбновления = ДеревоОбработчиков.Найти(Идентификатор, "ИмяОбработчика", Истина); - КонецЕсли; + ОбработчикОбновления = ОбработчикОбновления(Идентификатор); Если ОбработчикОбновления = Неопределено Тогда Возврат Неопределено; КонецЕсли; - Параметры = ОбработчикОбновления.СтатистикаВыполнения["ПараметрыОбработчика"]; + СтатистикаВыполнения = ОбработчикОбновления.СтатистикаВыполнения.Получить(); + Параметры = СтатистикаВыполнения["ПараметрыОбработчика"]; Если Параметры = Неопределено Тогда Параметры = Новый Структура; КонецЕсли; @@ -964,26 +955,24 @@ // Записывает параметры отложенного обработчика обновления // // Параметры: -// Идентификатор - Строка, УникальныйИдентификатор - имя процедуры обработчика или +// Идентификатор - Строка +// - УникальныйИдентификатор - имя процедуры обработчика или // его уникальный идентификатор. // Параметры - Структура - параметры, которые необходимо сохранить. // Процедура ЗаписатьПараметрыОтложенногоОбработчикаОбновления(Идентификатор, Параметры) Экспорт - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - ДеревоОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков.Строки; - - Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда - ОбработчикОбновления = ДеревоОбработчиков.Найти(Идентификатор, "Идентификатор", Истина); - Иначе - ОбработчикОбновления = ДеревоОбработчиков.Найти(Идентификатор, "ИмяОбработчика", Истина); - КонецЕсли; + ОбработчикОбновления = ОбработчикОбновления(Идентификатор); Если ОбработчикОбновления = Неопределено Тогда Возврат; КонецЕсли; - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПараметрыОбработчика", Параметры); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + СтатистикаВыполнения = ОбработчикОбновления.СтатистикаВыполнения.Получить(); + СтатистикаВыполнения.Вставить("ПараметрыОбработчика", Параметры); + + УстановитьСвойствоОбработчика(Идентификатор, + "СтатистикаВыполнения", + Новый ХранилищеЗначения(СтатистикаВыполнения)); КонецПроцедуры // Возвращает количество потоков обновления информационной базы. @@ -1045,7 +1034,11 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок +// +// Параметры: +// ИсключенияПоискаСсылок - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.ИсключенияПоискаСсылок +// Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ДанныеОбработанныеВЦентральномУзлеРИБ.ПолноеИмя()); @@ -1066,12 +1059,20 @@ Возврат; // Получаем сведения только в том случае, когда отложенное обновление успешно завершилось. КонецЕсли; - Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл - МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ВремяВыполненияОтложенногоОбработчика." + Обработчик.ИмяОбработчика, Обработчик.СтатистикаВыполнения["ДлительностьВыполнения"] / 1000); - КонецЦикла; - КонецЦикла; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.ДлительностьОбработки КАК ДлительностьОбработки + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения"; + Обработчики = Запрос.Выполнить().Выгрузить(); + + Для Каждого Обработчик Из Обработчики Цикл + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ВремяВыполненияОтложенногоОбработчика." + Обработчик.ИмяОбработчика, Обработчик.ДлительностьОбработки / 1000); КонецЦикла; ВремяНачала = СведенияОбОбновлении.ВремяНачалаОбновления; @@ -1146,7 +1147,11 @@ КонецПроцедуры -// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления +// +// Параметры: +// Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления +// Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда @@ -1164,7 +1169,11 @@ КонецПроцедуры -// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов. +// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов +// +// Параметры: +// ШаблоныЗаданий - см. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов.ШаблоныЗаданий +// Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт ШаблоныЗаданий.Добавить("ОтложенноеОбновлениеИБ"); @@ -1172,6 +1181,10 @@ КонецПроцедуры // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. +// +// Параметры: +// ТекущиеДела - см. ТекущиеДелаСлужебный.ТекущиеДела +// Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); @@ -1235,7 +1248,8 @@ КонецЕсли; ИтерацииОбновления = ИтерацииОбновления(); - СформироватьСписокОтложенныхОбработчиковОбновления(ИтерацииОбновления, Истина); + Обработки.ОписаниеОбработчиковОбновления.ЗаполнитьНомерОчереди(ИтерацииОбновления); + ОбновитьСписокВыполняемыхОбработчиковОбновления(ИтерацииОбновления, Истина); ПеререгистрироватьДанныеДляОтложенногоОбновления(); Если ИнформационнаяБазаФайловая Тогда ВыполнитьОтложенноеОбновлениеСейчас(); @@ -1445,15 +1459,14 @@ ВызватьИсключение; КонецПопытки; + ОбновлениеИнформационнойБазыПереопределяемый.ПередФормированиеСпискаОтложенныхОбработчиков(ИтерацииОбновления); + Обработки.ОписаниеОбработчиковОбновления.ЗаполнитьНомерОчереди(ИтерацииОбновления); + ОбновитьСписокВыполняемыхОбработчиковОбновления(ИтерацииОбновления); + Если ПараметрыОбновления.ВФоне Тогда ДлительныеОперации.СообщитьПрогресс(10); КонецЕсли; - Если Не ОбщегоНазначения.РазделениеВключено() - Или ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - СформироватьСписокОтложенныхОбработчиковОбновления(ИтерацииОбновления); - КонецЕсли; - Параметры = Новый Структура; Параметры.Вставить("ХодВыполненияОбработчиков", КоличествоОбработчиковНаТекущуюВерсию(ИтерацииОбновления, РежимВыполненияОтложенногоОбновления)); Параметры.Вставить("ОперативноеОбновление", ОперативноеОбновление); @@ -1475,7 +1488,7 @@ // Очистка списка новых подсистем. СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); СведенияОбОбновлении.НовыеПодсистемы = Новый Массив; - ЗаполнитьДанныеДляПараллельногоОтложенногоОбновления(СведенияОбОбновлении, Параметры); + ЗаполнитьДанныеДляПараллельногоОтложенногоОбновления(Параметры); ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); // Для файловой базы отложенные обработчики выполняются в основном цикле обновления. @@ -1500,7 +1513,6 @@ Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; - КонецЕсли; РежимОбновленияДанных = ДополнительныеПараметры.РежимОбновленияДанных; @@ -1581,6 +1593,105 @@ КонецПроцедуры +Процедура ОбновитьСписокВыполняемыхОбработчиковОбновления(ИтерацииОбновления, ПервыйОбменВРИБ = Ложь) + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + НезавершенныеОтложенныеОбработчики = НезавершенныеОтложенныеОбработчики(СведенияОбОбновлении); + НачатьТранзакцию(); + Попытка + + СброситьСведенияОбОбновлении(СведенияОбОбновлении); + + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + НаборРазделенныхОбработчиков = РегистрыСведений.ОбработчикиОбновления.СоздатьНаборЗаписей(); + НаборРазделенныхОбработчиков.Записать(); + КонецЕсли; + Если Не ОбщегоНазначения.РазделениеВключено() Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + НаборНеразделенныхОбработчиков = РегистрыСведений.ОбработчикиОбновленияОбщихДанных.СоздатьНаборЗаписей(); + НаборНеразделенныхОбработчиков.Записать(); + КонецЕсли; + + ПроверитьУникальностьИдентификаторовОтложенныхОбработчиков(ИтерацииОбновления); + + ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; + ГруппаОбновления = 1; + ТекстОшибок = ""; + ДобавленныеОбработчики = Новый Массив; + Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + + // Добавление монопольных и оперативных обработчиков обновления. + ИмяБиблиотеки = ИтерацияОбновления.Подсистема; + Если Не ПервыйОбменВРИБ Тогда + ПредыдущаяВерсия = ИтерацияОбновления.ПредыдущаяВерсия; + ВерсияМетаданных = ИтерацияОбновления.Версия; + Если ПустаяСтрока(ВерсияМетаданных) Тогда + ВерсияМетаданных = "0.0.0.0"; + КонецЕсли; + + ОбработчикиПоВерсиям = Неопределено; + Если ПредыдущаяВерсия <> "0.0.0.0" + И ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + ОбработчикиПоВерсиям = ПолучитьПланОбновления(ИтерацияОбновления.Подсистема, ПредыдущаяВерсия, ВерсияМетаданных); + КонецЕсли; + + Если ОбработчикиПоВерсиям = Неопределено Тогда + ОбработчикиПоВерсиям = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, + ПредыдущаяВерсия, ИтерацияОбновления.Версия); + КонецЕсли; + + Если ОбработчикиПоВерсиям.Строки.Количество() <> 0 Тогда + ОбработчикиПоВерсиям.Колонки.Процедура.Имя = "ИмяОбработчика"; + ДобавитьОбработчики(ИмяБиблиотеки, ОбработчикиПоВерсиям.Строки, ДобавленныеОбработчики); + КонецЕсли; + КонецЕсли; + + // Добавление отложенных обработчиков обновления. + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + // Обработка сценария получения первого сообщения обмена от подчиненного узла после обновления. + ПредыдущаяВерсия = ?(ПервыйОбменВРИБ, "1.0.0.0", ИтерацияОбновления.ПредыдущаяВерсия); + РежимВыполненияОтложенныхОбработчиков = ОписанияБиблиотек[ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков; + ПараллельноСВерсии = ОписанияБиблиотек[ИмяБиблиотеки].ПараллельноеОтложенноеОбновлениеСВерсии; + Если ПервыйОбменВРИБ И РежимВыполненияОтложенныхОбработчиков = "Последовательно" Тогда + Продолжить; + КонецЕсли; + + ПараметрыОтбора = ПараметрыОтбораОбработчиков(); + ПараметрыОтбора.ПолучатьРазделенные = Истина; + ПараметрыОтбора.РежимОбновления = "Отложенно"; + ПараметрыОтбора.УчитыватьПервыйОбменВРИБ = (РежимВыполненияОтложенныхОбработчиков = "Параллельно"); + ПараметрыОтбора.ПервыйОбменВРИБ = ПервыйОбменВРИБ; + + ОбработчикиПоВерсиям = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, + ПредыдущаяВерсия, ИтерацияОбновления.Версия, ПараметрыОтбора); + ОбработчикиПоВерсиям.Колонки.Процедура.Имя = "ИмяОбработчика"; + ДобавитьНезавершенныеОтложенныеОбработчики( + ИтерацияОбновления, + ИмяБиблиотеки, + НезавершенныеОтложенныеОбработчики, + ОбработчикиПоВерсиям.Строки); + Если ОбработчикиПоВерсиям.Строки.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + УпорядочитьВерсииОбработчиков(ОбработчикиПоВерсиям); + + ДобавитьОтложенныеОбработчики(ИмяБиблиотеки, ОбработчикиПоВерсиям.Строки, ГруппаОбновления, ТекстОшибок); + КонецЕсли; + + КонецЦикла; + + Если ЗначениеЗаполнено(ТекстОшибок) Тогда + ВызватьИсключение ТекстОшибок; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + // Возвращает признак разрешения использования многопоточного обновления. // Многопоточное обновление можно включить в ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек(). // @@ -1594,7 +1705,12 @@ КонецФункции -// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса +// +// Параметры: +// ИмяПараметра - Строка +// УстановленныеПараметры - Массив +// Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт Если ИмяПараметра = "ВыполняетсяОбновлениеИБ" Тогда @@ -1610,7 +1726,7 @@ // Возвращает числовой вес версии для сравнения версий между собой. // // Параметры: -// Версия - Строка - Версия в строковом формате. +// Версия - Строка - версия в строковом формате. // // Возвращаемое значение: // Число - вес версии @@ -1627,6 +1743,42 @@ // Для внутреннего использования. // +// Параметры: +// ИмяКонфигурацииИлиБиблиотеки - Строка +// Версия - Строка +// Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления +// ЭтоОсновнаяКонфигурация - Булево +// - Неопределено +// Возвращаемое значение: +// Структура: +// * ПредыдущаяВерсия - Строка +// * ОсновнойСерверныйМодуль - Строка +// * ИмяОсновногоСерверногоМодуля - Строка +// * ВыполненныеОбработчики - Неопределено +// * Обработчики - ТаблицаЗначений: +// ** НачальноеЗаполнение - Булево +// ** Версия - Строка +// ** Процедура - Строка +// ** РежимВыполнения - Строка +// ** ОбщиеДанные - Булево +// ** УправлениеОбработчиками - Булево +// ** Комментарий - Строка +// ** Идентификатор - УникальныйИдентификатор +// ** БлокируемыеОбъекты - Строка +// ** ПроцедураПроверки - Строка +// ** ПроцедураЗаполненияДанныхОбновления - Строка +// ** ЗапускатьТолькоВГлавномУзле - Булево +// ** ЗапускатьИВПодчиненномУзлеРИБСФильтрами - Булево +// ** ЧитаемыеОбъекты - Строка +// ** ИзменяемыеОбъекты - Строка +// ** ПриоритетыВыполнения - ТаблицаЗначений +// ** ВыполнятьВГруппеОбязательных - Булево +// ** Приоритет - Число +// ** МонопольныйРежим - Неопределено +// - Булево +// * ЭтоОсновнаяКонфигурация - Булево +// - Неопределено +// Функция ИтерацияОбновления(ИмяКонфигурацииИлиБиблиотеки, Версия, Обработчики, ЭтоОсновнаяКонфигурация = Неопределено) Экспорт ИтерацияОбновления = Новый Структура; @@ -1645,7 +1797,10 @@ // Для внутреннего использования. // -Функция ИтерацииОбновления() +// Возвращаемое значение: +// Массив из см. ИтерацияОбновления +// +Функция ИтерацииОбновления() Экспорт ИмяОсновнойКонфигурации = Метаданные.Имя; ИтерацияОбновлениеОсновнойПодсистемы = Неопределено; @@ -1710,9 +1865,9 @@ ВыполняемыеОбработчики = ПолучитьПланОбновления(ИдентификаторБиблиотеки, ТекущаяВерсияИБ, ВерсияМетаданных); Если ВыполняемыеОбработчики = Неопределено Тогда Если ИтерацияОбновления.ЭтоОсновнаяКонфигурация Тогда - ШаблонСообщения = НСтр("ru = 'Не найден план обновления конфигурации %1 с версии %2 на версию %3'"); + ШаблонСообщения = НСтр("ru = 'Не существует план обновления конфигурации %1 с версии %2 на версию %3'"); Иначе - ШаблонСообщения = НСтр("ru = 'Не найден план обновления библиотеки %1 с версии %2 на версию %3'"); + ШаблонСообщения = НСтр("ru = 'Не существует план обновления библиотеки %1 с версии %2 на версию %3'"); КонецЕсли; Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИдентификаторБиблиотеки, ТекущаяВерсияИБ, ВерсияМетаданных); ЗаписатьИнформацию(Сообщение); @@ -2107,7 +2262,7 @@ ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); Для каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл - ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); + ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); // см. СтандартныеПодсистемыПовтИсп.НовоеОписаниеПодсистемы Если НЕ ЗначениеЗаполнено(ОписаниеПодсистемы.ОсновнойСерверныйМодуль) Тогда Продолжить; КонецЕсли; @@ -2156,16 +2311,27 @@ ПредыдущееИмяКонфигурации = РезультатЗапроса.ИмяПодсистемы; ПредыдущаяВерсияКонфигурации = РезультатЗапроса.Версия; - Отбор = Новый Структура; - Отбор.Вставить("ИмяБиблиотеки", ПредыдущееИмяКонфигурации); - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - РезультатПоиска = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Отбор, Истина); - Для Каждого НайденнаяСтрока Из РезультатПоиска Цикл - НайденнаяСтрока.ИмяБиблиотеки = Метаданные.Имя; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяБиблиотеки", ПредыдущееИмяКонфигурации); + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.ИмяБиблиотеки = &ИмяБиблиотеки + | И ОбработчикиОбновления.Статус <> &Статус"; + Результат = Запрос.Выполнить().Выгрузить(); + Для Каждого Строка Из Результат Цикл + НаборЗаписей = РегистрыСведений.ОбработчикиОбновления.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяОбработчика.Установить(Строка.ИмяОбработчика); + НаборЗаписей.Прочитать(); + + НаборЗаписей[0].ИмяБиблиотеки = Метаданные.Имя; + + НаборЗаписей.Записать(); КонецЦикла; - Если РезультатПоиска.Количество() > 0 Тогда - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - КонецЕсли; Обработчики = ОбработчикиПереходаСДругойПрограммы(ПредыдущееИмяКонфигурации); @@ -2240,7 +2406,7 @@ ИмяКонфигурации = Метаданные.Имя; ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); Для каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл - ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); + ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); // см. СтандартныеПодсистемыПовтИсп.НовоеОписаниеПодсистемы Если НЕ ЗначениеЗаполнено(ОписаниеПодсистемы.ОсновнойСерверныйМодуль) Тогда Продолжить; КонецЕсли; @@ -2282,13 +2448,145 @@ ПланыОбмена.УдалитьРегистрациюИзменений(Узлы, Источник); КонецПроцедуры +Процедура УпорядочитьВерсииОбработчиков(ОбработчикиПоВерсиям) + ОбработчикиПоВерсиям.Колонки.Добавить("ВерсияПорядок", Новый ОписаниеТипов("Число")); + Для Каждого СтрокаВерсия Из ОбработчикиПоВерсиям.Строки Цикл + Версия = СтрокаВерсия.Версия; + Если Версия = "*" Тогда + СтрокаВерсия.ВерсияПорядок = 0; + Иначе + СтрокаВерсия.ВерсияПорядок = ВесВерсииИзМассиваСтрок(СтрРазделить(Версия, ".")); + КонецЕсли; + КонецЦикла; + + ОбработчикиПоВерсиям.Строки.Сортировать("ВерсияПорядок Возр"); +КонецПроцедуры + +Процедура ДобавитьОбработчики(ИмяБиблиотеки, ОбработчикиПоВерсиям, ДобавленныеОбработчики) + + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + НаборРазделенныхОбработчиков = РегистрыСведений.ОбработчикиОбновления.СоздатьНаборЗаписей(); + НаборРазделенныхОбработчиков.Прочитать(); + КонецЕсли; + Если Не ОбщегоНазначения.РазделениеВключено() Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + НаборНеразделенныхОбработчиков = РегистрыСведений.ОбработчикиОбновленияОбщихДанных.СоздатьНаборЗаписей(); + НаборНеразделенныхОбработчиков.Прочитать(); + КонецЕсли; + + Для Каждого Версия Из ОбработчикиПоВерсиям Цикл + Для Каждого Обработчик Из Версия.Строки Цикл + Если ДобавленныеОбработчики.Найти(Обработчик.ИмяОбработчика) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Если Обработчик.ОбщиеДанные = Истина Тогда + Запись = НаборНеразделенныхОбработчиков.Добавить(); + Иначе + Запись = НаборРазделенныхОбработчиков.Добавить(); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Запись, Обработчик, , "РежимВыполнения"); + + Если Не ЗначениеЗаполнено(Обработчик.РежимВыполнения) + И (Обработчик.МонопольныйРежим = Истина Или Обработчик.МонопольныйРежим = Неопределено) Тогда + РежимВыполнения = Перечисления.РежимыВыполненияОбработчиков.Монопольно; + ИначеЕсли Не ЗначениеЗаполнено(Обработчик.РежимВыполнения) И Обработчик.МонопольныйРежим = Ложь Тогда + РежимВыполнения = Перечисления.РежимыВыполненияОбработчиков.Оперативно; + Иначе + РежимВыполнения = Перечисления.РежимыВыполненияОбработчиков[Обработчик.РежимВыполнения]; + КонецЕсли; + + Запись.РежимВыполнения = РежимВыполнения; + Запись.Статус = Перечисления.СтатусыОбработчиковОбновления.НеВыполнялся; + Запись.ИмяБиблиотеки = ИмяБиблиотеки; + + ДобавленныеОбработчики.Добавить(Обработчик.ИмяОбработчика); + КонецЦикла; + КонецЦикла; + + // АПК:1327-выкл нет конкурентной работы с регистром + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + НаборРазделенныхОбработчиков.Записать(); + КонецЕсли; + Если Не ОбщегоНазначения.РазделениеВключено() Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + НаборНеразделенныхОбработчиков.Записать(); + КонецЕсли; + // АПК:1327-вкл + +КонецПроцедуры + +Процедура УстановитьСтатусОбработчика(ИмяОбработчика, Статус, ТекстОшибки = "") + + НаборЗаписей = Неопределено; + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + НаборЗаписей = РегистрыСведений.ОбработчикиОбновления.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяОбработчика.Установить(ИмяОбработчика); + НаборЗаписей.Прочитать(); + КонецЕсли; + + ДоступноЧтениеНеразделенныхДанных = Не ОбщегоНазначения.РазделениеВключено() + Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + + Если ДоступноЧтениеНеразделенныхДанных И (НаборЗаписей = Неопределено Или НаборЗаписей.Количество() = 0) Тогда + НаборЗаписей = РегистрыСведений.ОбработчикиОбновленияОбщихДанных.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяОбработчика.Установить(ИмяОбработчика); + НаборЗаписей.Прочитать(); + КонецЕсли; + + Запись = НаборЗаписей[0]; + Запись.Статус = Перечисления.СтатусыОбработчиковОбновления[Статус]; + Запись.ИнформацияОбОшибке = ТекстОшибки; + + НаборЗаписей.Записать(); + +КонецПроцедуры + +Процедура УстановитьСвойствоОбработчика(ИмяОбработчика, Свойство, Значение) Экспорт + + Свойства = Новый Структура; + Свойства.Вставить(Свойство, Значение); + УстановитьСвойстваОбработчика(ИмяОбработчика, Свойства); + +КонецПроцедуры + +Процедура УстановитьСвойстваОбработчика(ИмяОбработчика, Свойства) + + Если Свойства.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = Неопределено; + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + НаборЗаписей = РегистрыСведений.ОбработчикиОбновления.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяОбработчика.Установить(ИмяОбработчика); + НаборЗаписей.Прочитать(); + КонецЕсли; + + ДоступноЧтениеНеразделенныхДанных = Не ОбщегоНазначения.РазделениеВключено() + Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + + Если ДоступноЧтениеНеразделенныхДанных И (НаборЗаписей = Неопределено Или НаборЗаписей.Количество() = 0) Тогда + НаборЗаписей = РегистрыСведений.ОбработчикиОбновленияОбщихДанных.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяОбработчика.Установить(ИмяОбработчика); + НаборЗаписей.Прочитать(); + КонецЕсли; + + Запись = НаборЗаписей[0]; + Для Каждого Свойство Из Свойства Цикл + Запись[Свойство.Ключ] = Свойство.Значение; + КонецЦикла; + + НаборЗаписей.Записать(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Протоколирование хода обновления. // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: -// Строка - +// Строка // Функция СобытиеЖурналаРегистрации() Экспорт @@ -2300,7 +2598,7 @@ // протоколирования хода выполнения обработчиков обновления. // // Возвращаемое значение: -// Строка - +// Строка // Функция СобытиеЖурналаРегистрацииПротокол() Экспорт @@ -2381,26 +2679,274 @@ //////////////////////////////////////////////////////////////////////////////// // Механизм отложенного обновления. -// Формирует дерево отложенных обработчиков и записывает его в константу СведенияОбОбновленииИБ. +// Планирует выполнение отложенного обновления в клиент-серверной базе. // -Процедура СформироватьСписокОтложенныхОбработчиковОбновления(ИтерацииОбновления, ПервыйОбменВРИБ = Ложь) +Процедура ЗапланироватьОтложенноеОбновление() - ПроверитьУникальностьИдентификаторовОтложенныхОбработчиков(ИтерацииОбновления); + // Планирование выполнения регламентного задания. + // При работе в модели сервиса - добавляется регламентное задание в очередь. + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ПриВключенииОтложенногоОбновления(Истина); + КонецЕсли; + +КонецПроцедуры + +// Управляет процессом выполнения отложенных обработчиков обновления. +// +Процедура ВыполнитьОтложенноеОбновление() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + + Если ОбновлениеИнформационнойБазыСлужебныйПовтИсп.НеобходимоОбновлениеИнформационнойБазы() Тогда + Возврат; + КонецЕсли; - ДеревоОбработчиков = ВыполненныеОбработчикиПрошлыхВерсий(ИтерацииОбновления); СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда + ОтключитьОтложенноеОбновление(); + Возврат; + КонецЕсли; + + Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда + СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса(); + КонецЕсли; + Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда + СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений; + КонецЕсли; + СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы()); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + // В сеансе регламентного задания проверка дат запрета изменения и загрузки отключается. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + МодульДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Истина); + КонецЕсли; + + ОбработчикиВыполнялись = Истина; + + Попытка + Если ФорсироватьОбновление(СведенияОбОбновлении) Тогда + Группы = НовоеОписаниеГруппПотоковОбработчиковОтложенногоОбновления(); + ОтменитьВыполнениеВсехПотоков(Группы); + + Пока ОбработчикиВыполнялись Цикл + Поток = ДобавитьПотокОбработчикаОтложенногоОбновления(СведенияОбОбновлении); + Если ТипЗнч(Поток) = Тип("СтрокаТаблицыЗначений") Тогда + ВыполнитьПоток(Группы, Поток); + СохранитьПотокОбновления(Поток); + ОжидатьСвободныйПоток(Группы); + ИначеЕсли Поток = Истина Тогда + ОжидатьЗавершениеЛюбогоПотока(Группы); + ИначеЕсли Поток = Ложь Тогда + ОбработчикиВыполнялись = Ложь; + ОжидатьЗавершениеВсехПотоков(Группы); + Прервать; + КонецЕсли; + + Задание = РегламентныеЗаданияСервер.Задание(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); + ТребуетсяВыполнение = Задание.Расписание.ТребуетсяВыполнение(ТекущаяДатаСеанса()); + + Если Не ТребуетсяВыполнение Или Не ФорсироватьОбновление(СведенияОбОбновлении) Тогда + ОжидатьЗавершениеВсехПотоков(Группы); + УдалитьВсеПотокиОбновления(); + Прервать; + КонецЕсли; + КонецЦикла; + Иначе + ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(); + КонецЕсли; + Исключение + ЗаписатьОшибку(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОтменитьВыполнениеВсехПотоков(Группы); + УдалитьВсеПотокиОбновления(); + КонецПопытки; + + Если Не ОбработчикиВыполнялись Или ВыполненыВсеОтложенныеОбработчики(СведенияОбОбновлении) Тогда + УдалитьВсеПотокиОбновления(); + ОтключитьОтложенноеОбновление(); + КонецЕсли; + +КонецПроцедуры + +// Вызывается при включении и отключении отложенного обновления. +// +// Параметры: +// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// +Процедура ПриВключенииОтложенногоОбновления(Использование) Экспорт + + ОтборЗаданий = Новый Структура; + ОтборЗаданий.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); + Задания = РегламентныеЗаданияСервер.НайтиЗадания(ОтборЗаданий); + + Для Каждого Задание Из Задания Цикл + Если Задание.Использование = Использование Тогда + Продолжить; + КонецЕсли; + + ПараметрыЗадания = Новый Структура("Использование", Использование); + РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор, ПараметрыЗадания); + КонецЦикла; + +КонецПроцедуры + +Функция ОбработчикиДляОтложеннойРегистрацииДанных(БезФильтра = Ложь) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОтложенныхОбработчиков.Параллельно); + Запрос.УстановитьПараметр("БезФильтра", БезФильтра); + Запрос.УстановитьПараметр("Версия", "*"); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.ИмяБиблиотеки КАК ИмяБиблиотеки, + | ОбработчикиОбновления.Версия КАК Версия, + | ОбработчикиОбновления.ПроцедураЗаполненияДанныхОбновления КАК ПроцедураЗаполненияДанныхОбновления, + | ОбработчикиОбновления.ОчередьОтложеннойОбработки КАК ОчередьОтложеннойОбработки, + | ОбработчикиОбновления.Многопоточный КАК Многопоточный, + | ОбработчикиОбновления.ОбрабатываемыеДанные КАК ОбрабатываемыеДанные + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.Версия <> &Версия + | И (ОбработчикиОбновления.РежимВыполненияОтложенногоОбработчика = &РежимВыполнения + | ИЛИ &БезФильтра)"; + Обработчики = Запрос.Выполнить().Выгрузить(); + + Возврат Обработчики; + +КонецФункции + +Функция НайтиОбработчикОбновления(КонтекстОбработчика, ПараметрыОбновления = Неопределено) + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + // Получение групп, по которым еще не выполнены все обработчики обновления. + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ОбработчикиОбновления.ГруппаОбновления КАК ГруппаОбновления + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.Статус <> &Статус + | И ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения"; + ГруппыОбработчиковИЗависимость = Запрос.Выполнить().Выгрузить(); + + // Выбор невыполненных обработчиков обновления. + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.Статус КАК Статус, + | ОбработчикиОбновления.Версия КАК Версия, + | ОбработчикиОбновления.ИмяБиблиотеки КАК ИмяБиблиотеки, + | ОбработчикиОбновления.ДлительностьОбработки КАК ДлительностьОбработки, + | ОбработчикиОбновления.РежимВыполнения КАК РежимВыполнения, + | ОбработчикиОбновления.ВерсияРегистрации КАК ВерсияРегистрации, + | ОбработчикиОбновления.ВерсияПорядок КАК ВерсияПорядок, + | ОбработчикиОбновления.Идентификатор КАК Идентификатор, + | ОбработчикиОбновления.ЧислоПопыток КАК ЧислоПопыток, + | ОбработчикиОбновления.ИнформацияОбОшибке КАК ИнформацияОбОшибке, + | ОбработчикиОбновления.Комментарий КАК Комментарий, + | ОбработчикиОбновления.Приоритет КАК Приоритет, + | ОбработчикиОбновления.ПроцедураПроверки КАК ПроцедураПроверки, + | ОбработчикиОбновления.ПроцедураЗаполненияДанныхОбновления КАК ПроцедураЗаполненияДанныхОбновления, + | ОбработчикиОбновления.ОчередьОтложеннойОбработки КАК ОчередьОтложеннойОбработки, + | ОбработчикиОбновления.ЗапускатьТолькоВГлавномУзле КАК ЗапускатьТолькоВГлавномУзле, + | ОбработчикиОбновления.ЗапускатьИВПодчиненномУзлеРИБСФильтрами КАК ЗапускатьИВПодчиненномУзлеРИБСФильтрами, + | ОбработчикиОбновления.Многопоточный КАК Многопоточный, + | ОбработчикиОбновления.ОбработкаПорцииЗавершена КАК ОбработкаПорцииЗавершена, + | ОбработчикиОбновления.ГруппаОбновления КАК ГруппаОбновления, + | ОбработчикиОбновления.ИтерацияЗапуска КАК ИтерацияЗапуска, + | ОбработчикиОбновления.ОбрабатываемыеДанные КАК ОбрабатываемыеДанные, + | ОбработчикиОбновления.СтатистикаВыполнения КАК СтатистикаВыполнения, + | ОбработчикиОбновления.РежимВыполненияОтложенногоОбработчика КАК РежимВыполненияОтложенногоОбработчика + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения + | И ОбработчикиОбновления.Статус <> &Статус + | + |УПОРЯДОЧИТЬ ПО + | ГруппаОбновления, + | ОчередьОтложеннойОбработки"; + Обработчики = Запрос.Выполнить().Выгрузить(); + + Пока Истина Цикл + Результат = ОбработчикДляВыполнения(Обработчики, ГруппыОбработчиковИЗависимость, СведенияОбОбновлении); + Если Результат.ОбработчикДляВыполнения = Неопределено + И Результат.ЕстьНевыполненные Тогда + СведенияОбОбновлении.ТекущаяИтерацияОбновления = СведенияОбОбновлении.ТекущаяИтерацияОбновления + 1; + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + + ОбработчикДляВыполнения = Результат.ОбработчикДляВыполнения; + Если ОбработчикДляВыполнения = Неопределено Тогда + Если Результат.ЕстьВыполняющиеся Тогда + Возврат Истина; + Иначе + СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); + СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Результат.ЗавершеноУспешно; + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + Константы.ОтложенноеОбновлениеЗавершеноУспешно.Установить(Результат.ЗавершеноУспешно); + Если Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Установить(Результат.ЗавершеноУспешно); + КонецЕсли; + + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + ПараллельныйРежим = (ОбработчикДляВыполнения.РежимВыполненияОтложенногоОбработчика = Перечисления.РежимыВыполненияОтложенныхОбработчиков.Параллельно); + ПараметрыОбновления = ?(ПараметрыОбновления = Неопределено, Новый Структура, ПараметрыОбновления); + ПараметрыОбновления.Вставить("ПараллельныйРежим", ПараллельныйРежим); + Если ПараллельныйРежим Тогда + ПараметрыОбновления.Вставить("ОчередьОбработчиков", ОчередьОбработчиковГруппыОбновления(ОбработчикДляВыполнения.ГруппаОбновления)); + ПараметрыОбновления.Вставить("ЕстьОбработчикиГлавногоУзла", ЕстьОбработчикиТолькоГлавногоУзла()); + КонецЕсли; + + УстановитьПараметрыОбработчикаОбновления(ОбработчикДляВыполнения, Истина, ПараллельныйРежим); + ПередЗапускомПроцедурыОбработкиДанных(КонтекстОбработчика, + ОбработчикДляВыполнения, + ПараметрыОбновления, + СведенияОбОбновлении); + + КонтекстОбработчика.ИдентификаторОбработчика = ОбработчикДляВыполнения.Идентификатор; + КонтекстОбработчика.ИмяОбработчика = ОбработчикДляВыполнения.ИмяОбработчика; + КонтекстОбработчика.ПараллельныйРежим = ПараллельныйРежим; + КонтекстОбработчика.ПараметрыОбновления = ПараметрыОбновления; + КонтекстОбработчика.ПараметрыОбработчикаОбновления = ПараметрыСеанса.ПараметрыОбработчикаОбновления; + КонтекстОбработчика.ТекущаяИтерацияОбновления = СведенияОбОбновлении.ТекущаяИтерацияОбновления; + + УстановитьПараметрыОбработчикаОбновления(Неопределено); + + Возврат ОбработчикДляВыполнения; + +КонецФункции + +Процедура СброситьСведенияОбОбновлении(СведенияОбОбновлении) + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + Константы.ОтложенноеОбновлениеЗавершеноУспешно.Установить(Ложь); - // Устанавливаем начальные значения полей. + СведенияОбОбновлении.Вставить("ВремяНачалаОбновления"); СведенияОбОбновлении.Вставить("ВремяОкончанияОбновления"); СведенияОбОбновлении.Вставить("ПродолжительностьОбновления"); СведенияОбОбновлении.Вставить("ВремяНачалаОтложенногоОбновления"); СведенияОбОбновлении.Вставить("ВремяОкончаниеОтложенногоОбновления"); СведенияОбОбновлении.Вставить("НомерСеанса", Новый СписокЗначений()); - СведенияОбОбновлении.Вставить("ПараметрыОбработчикаОбновления"); СведенияОбОбновлении.Вставить("ОтложенноеОбновлениеЗавершеноУспешно"); - СведенияОбОбновлении.Вставить("ДеревоОбработчиков", Новый ДеревоЗначений()); СведенияОбОбновлении.Вставить("ВыводитьОписаниеОбновлений", Ложь); СведенияОбОбновлении.Вставить("ПриостановленныеПроцедурыОбновления", Новый Массив); СведенияОбОбновлении.Вставить("ЗапущенныеПроцедурыОбновления", Новый Массив); @@ -2409,149 +2955,11 @@ Иначе СведенияОбОбновлении.Вставить("УправлениеОтложеннымОбновлением", Новый Структура); КонецЕсли; - СведенияОбОбновлении.Вставить("ОбрабатываемыеДанные", Новый Соответствие); СведенияОбОбновлении.Вставить("ТекущаяИтерацияОбновления", 1); - СведенияОбОбновлении.Вставить("ПланОтложенногоОбновления"); - - ИмяБиблиотеки = ""; - ТекстОшибок = ""; - - ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; - - Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл - - ПредыдущаяВерсия = ?(ПервыйОбменВРИБ, "1.0.0.0", ИтерацияОбновления.ПредыдущаяВерсия); - ИмяБиблиотеки = ИтерацияОбновления.Подсистема; - РежимВыполненияОтложенныхОбработчиков = ОписанияБиблиотек[ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков; - ПараллельноСВерсии = ОписанияБиблиотек[ИмяБиблиотеки].ПараллельноеОтложенноеОбновлениеСВерсии; - - Если ПервыйОбменВРИБ И РежимВыполненияОтложенныхОбработчиков = "Последовательно" Тогда - Продолжить; - КонецЕсли; - - ПараметрыОтбора = ПараметрыОтбораОбработчиков(); - ПараметрыОтбора.ПолучатьРазделенные = Истина; - ПараметрыОтбора.РежимОбновления = "Отложенно"; - ПараметрыОтбора.УчитыватьПервыйОбменВРИБ = (РежимВыполненияОтложенныхОбработчиков = "Параллельно"); - ПараметрыОтбора.ПервыйОбменВРИБ = ПервыйОбменВРИБ; - - ОбработчикиПоВерсиям = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, - ПредыдущаяВерсия, ИтерацияОбновления.Версия, ПараметрыОтбора); - Если ОбработчикиПоВерсиям.Строки.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - // Добавление строки библиотеки. - НайденнаяСтрока = ДеревоОбработчиков.Строки.Найти(ИмяБиблиотеки, "ИмяБиблиотеки"); - Если НайденнаяСтрока <> Неопределено Тогда - СтрокаДереваБиблиотека = НайденнаяСтрока; - Иначе - СтрокаДереваБиблиотека = ДеревоОбработчиков.Строки.Добавить(); - СтрокаДереваБиблиотека.ИмяБиблиотеки = ИмяБиблиотеки; - КонецЕсли; - СтрокаДереваБиблиотека.Статус = ""; - - Для Каждого СтрокаВерсия Из ОбработчикиПоВерсиям.Строки Цикл - - Если ПервыйОбменВРИБ - И РежимВыполненияОтложенныхОбработчиков = "Параллельно" - И (СтрокаВерсия.Версия = "*" - Или ЗначениеЗаполнено(ПараллельноСВерсии) - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СтрокаВерсия.Версия, ПараллельноСВерсии) < 0) Тогда - Продолжить; - КонецЕсли; - - НайденнаяСтрока = СтрокаДереваБиблиотека.Строки.Найти(СтрокаВерсия.Версия, "НомерВерсии"); - ЕстьНевыполненныеОбработчики = Ложь; - Если НайденнаяСтрока <> Неопределено Тогда - НайденнаяСтрока.Статус = ""; - - Для Каждого НевыполненныйОбработчик Из НайденнаяСтрока.Строки Цикл - ЕстьНевыполненныеОбработчики = Истина; - НевыполненныйОбработчик.ЧислоПопыток = 0; - НевыполненныйОбработчик.СтатистикаВыполнения = Новый Соответствие; - КонецЦикла; - СтрокаДереваВерсии = НайденнаяСтрока; - Иначе - СтрокаДереваВерсии = СтрокаДереваБиблиотека.Строки.Добавить(); - СтрокаДереваВерсии.НомерВерсии = СтрокаВерсия.Версия; - СтрокаДереваВерсии.Статус = ""; - КонецЕсли; - - РежимПараллельноСВерсии = РежимВыполненияОтложенныхОбработчиков = "Параллельно" И ЗначениеЗаполнено(ПараллельноСВерсии); - - Для Каждого Обработчик Из СтрокаВерсия.Строки Цикл - - Если РежимПараллельноСВерсии Тогда - Если СтрокаВерсия.Версия = "*" Тогда - РежимОтложенногоОбработчика = "Последовательно"; - Иначе - Результат = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СтрокаВерсия.Версия, ПараллельноСВерсии); - РежимОтложенногоОбработчика = ?(Результат > 0, "Параллельно", "Последовательно"); - КонецЕсли; - Иначе - РежимОтложенногоОбработчика = РежимВыполненияОтложенныхОбработчиков; - КонецЕсли; - ПроверитьСвойстваОтложенногоОбработчика(Обработчик, РежимОтложенногоОбработчика, ТекстОшибок); - - Если ЕстьНевыполненныеОбработчики Тогда - НайденнаяСтрока = СтрокаДереваВерсии.Строки.Найти(Обработчик.Процедура, "ИмяОбработчика"); - Если НайденнаяСтрока <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(НайденнаяСтрока, Обработчик); - Продолжить; // Данный обработчик на эту версию уже существует. - КонецЕсли; - КонецЕсли; - - СтрокаДереваОбработчики = СтрокаДереваВерсии.Строки.Добавить(); - - ЗаполнитьЗначенияСвойств(СтрокаДереваОбработчики, Обработчик); - СтрокаДереваОбработчики.ИмяБиблиотеки = ИмяБиблиотеки; - СтрокаДереваОбработчики.НомерВерсии = Обработчик.Версия; - СтрокаДереваОбработчики.ИмяОбработчика = Обработчик.Процедура; - СтрокаДереваОбработчики.Статус = "НеВыполнено"; - СтрокаДереваОбработчики.ЧислоПопыток = 0; - КонецЦикла; - - КонецЦикла; - - КонецЦикла; - - Если Не ПустаяСтрока(ТекстОшибок) Тогда - ВызватьИсключение ТекстОшибок; - КонецЕсли; - - // Сортировка дерева обработчиков. - ПорядокБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().Порядок; - Индекс = 0; - Для Каждого Библиотека Из ПорядокБиблиотек Цикл - НайденнаяСтрока = ДеревоОбработчиков.Строки.Найти(Библиотека, "ИмяБиблиотеки"); - Если НайденнаяСтрока <> Неопределено Тогда - ИндексСтроки = ДеревоОбработчиков.Строки.Индекс(НайденнаяСтрока); - Сдвиг = Индекс - ИндексСтроки; - Если Сдвиг <> 0 Тогда - ДеревоОбработчиков.Строки.Сдвинуть(НайденнаяСтрока, Сдвиг); - КонецЕсли; - Индекс = Индекс + 1 - КонецЕсли; - КонецЦикла; - - ОчередьОбработчиков = Новый Соответствие; - ОбновлениеИнформационнойБазыПереопределяемый.ПриФормированииОчередейОтложенныхОбработчиков(ОчередьОбработчиков); - Для Каждого ОбработчикИОчередь Из ОчередьОбработчиков Цикл - НайденныйОбработчик = ДеревоОбработчиков.Строки.Найти(ОбработчикИОчередь.Ключ, "ИмяОбработчика", Истина); - Если НайденныйОбработчик <> Неопределено Тогда - НайденныйОбработчик.ОчередьОтложеннойОбработки = ОбработчикИОчередь.Значение; - КонецЕсли; - КонецЦикла; - + СведенияОбОбновлении.Вставить("ЗависимостьГруппОбработчиков", Новый Соответствие); СведенияОбОбновлении.ВерсияДереваОбработчиков = Метаданные.Версия; - ВыполнитьПроверкуДереваОтложенныхОбработчиков(ДеревоОбработчиков); - СведенияОбОбновлении.ДеревоОбработчиков = ДеревоОбработчиков; - - СоставитьПланОтложенногоОбновления(СведенияОбОбновлении); ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - КонецПроцедуры Процедура ПроверитьСвойстваОтложенногоОбработчика(Знач Обработчик, Знач РежимВыполненияОтложенныхОбработчиков, ТекстОшибок) @@ -2562,7 +2970,7 @@ НСтр("ru = 'Не указана процедура заполнения данных |отложенного обработчика обновления |""%1"".'"), - Обработчик.Процедура); + Обработчик.ИмяОбработчика); ЗаписатьОшибку(ТекстОшибки); ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС; @@ -2571,7 +2979,7 @@ Если Обработчик.МонопольныйРежим = Истина Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У отложенного обработчика ""%1"" |не должен быть установлен признак ""МонопольныйРежим"".'"), - Обработчик.Процедура); + Обработчик.ИмяОбработчика); ЗаписатьОшибку(ТекстОшибки); ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС; КонецЕсли; @@ -2585,7 +2993,7 @@ | - ""ЗапускатьИВПодчиненномУзлеРИБСФильтрами"". | |Данные свойства не могут одновременно принимать значение ""Истина"".'"), - Обработчик.Процедура); + Обработчик.ИмяОбработчика); ЗаписатьОшибку(ТекстОшибки); ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС; КонецЕсли; @@ -2595,7 +3003,7 @@ |указано недопустимое значение свойства ""ОбщиеДанные"". | |Данное свойство не может принимать значение ""Истина"" у отложенного обработчика.'"), - Обработчик.Процедура); + Обработчик.ИмяОбработчика); ЗаписатьОшибку(ТекстОшибки); ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС; КонецЕсли; @@ -2604,6 +3012,10 @@ Процедура ПроверитьУникальностьИдентификаторовОтложенныхОбработчиков(ИтерацииОбновления) + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + ТаблицаПроверкиУникальности = Новый ТаблицаЗначений; ТаблицаПроверкиУникальности.Колонки.Добавить("Идентификатор"); ТаблицаПроверкиУникальности.Колонки.Добавить("Индекс"); @@ -2650,125 +3062,393 @@ КонецПроцедуры -// Планирует выполнение отложенного обновления в клиент-серверной базе. -// -Процедура ЗапланироватьОтложенноеОбновление() +Процедура ДобавитьОтложенныеОбработчики(ИмяБиблиотеки, ОбработчикиПоВерсиям, ГруппаОбновления, ТекстОшибок) - // Планирование выполнения регламентного задания. - // При работе в модели сервиса - добавляется регламентное задание в очередь. - Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ПриВключенииОтложенногоОбновления(Истина); - КонецЕсли; + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + ЭтоПодчиненныйУзелРИБСФильтром = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБСФильтром(); + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); -КонецПроцедуры - -// Управляет процессом выполнения отложенных обработчиков обновления. -// -Процедура ВыполнитьОтложенноеОбновление() Экспорт + ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам[ИмяБиблиотеки]; + ПараллельноСВерсии = ОписаниеПодсистемы.ПараллельноеОтложенноеОбновлениеСВерсии; + РежимВыполненияОтложенныхОбработчиков = ОписаниеПодсистемы.РежимВыполненияОтложенныхОбработчиков; - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); - - Если ОбновлениеИнформационнойБазыСлужебныйПовтИсп.НеобходимоОбновлениеИнформационнойБазы() Тогда - Возврат; - КонецЕсли; + НаборРазделенныхОбработчиков = РегистрыСведений.ОбработчикиОбновления.СоздатьНаборЗаписей(); + НаборРазделенныхОбработчиков.Прочитать(); СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + ЗависимостьГруппОбработчиков = СведенияОбОбновлении.ЗависимостьГруппОбработчиков; - Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда - ОтключитьОтложенноеОбновление(); - Возврат; - КонецЕсли; - - Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда - СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса(); - КонецЕсли; - Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда - СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений; - КонецЕсли; - СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы()); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - - // В сеансе регламентного задания проверка даты запрета изменения отключается. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда - МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); - МодульДатыЗапретаИзмененияСлужебный.ПропуститьПроверкуЗапретаИзменения(Истина); - КонецЕсли; - - ОбработчикиВыполнялись = Истина; - - Попытка - Если ФорсироватьОбновление(СведенияОбОбновлении) Тогда - Если СведенияОбОбновлении.ОписаниеПотоков <> Неопределено Тогда - ОтменитьВыполнениеВсехПотоков(СведенияОбОбновлении.ОписаниеПотоков, СведенияОбОбновлении); + ПропуститьПроверку = Ложь; + ТекущийРежимВыполнения = ""; + СоздаватьНовуюИтерацию = Истина; + Итерация = 1; + ЕстьОбработчикиТолькоГлавногоУзла = Ложь; + СведенияОБлокируемыхОбъектах = НовыеСведенияОБлокируемыхОбъектах(); + Для Каждого СтрокаВерсия Из ОбработчикиПоВерсиям Цикл + ЗаполнитьБлокируемыеОбъекты(СтрокаВерсия, СведенияОБлокируемыхОбъектах); + + Если РежимВыполненияОтложенныхОбработчиков = "Последовательно" Тогда + ЗависимостьГруппОбработчиков.Вставить(ГруппаОбновления, Итерация <> 1); + ТекущийРежимВыполнения = "Последовательно"; + ИначеЕсли РежимВыполненияОтложенныхОбработчиков = "Параллельно" И Не ЗначениеЗаполнено(ПараллельноСВерсии) Тогда + ЗависимостьГруппОбработчиков.Вставить(ГруппаОбновления, Ложь); + ТекущийРежимВыполнения = "Параллельно"; + СоздаватьНовуюИтерацию = Ложь; + ИначеЕсли РежимВыполненияОтложенныхОбработчиков = "Параллельно" И ЗначениеЗаполнено(ПараллельноСВерсии) И Не ПропуститьПроверку Тогда + НомерВерсии = СтрокаВерсия.Версия; + Если НомерВерсии = "*" Тогда + Результат = -1; + Иначе + Результат = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(НомерВерсии, ПараллельноСВерсии); КонецЕсли; - ОписаниеПотоков = НовоеОписаниеПотоковОбработчиковОтложенногоОбновления(); - СведенияОбОбновлении.ОписаниеПотоков = ОписаниеПотоков; - - Пока ОбработчикиВыполнялись Цикл - Поток = ДобавитьПотокОбработчикаОтложенногоОбновления(ОписаниеПотоков, СведенияОбОбновлении); - - Если ТипЗнч(Поток) = Тип("СтрокаТаблицыЗначений") Тогда - ВыполнитьПоток(ОписаниеПотоков, Поток); - ОжидатьСвободныйПоток(ОписаниеПотоков, СведенияОбОбновлении); - ИначеЕсли Поток = Истина Тогда - ОжидатьЗавершениеЛюбогоПотока(ОписаниеПотоков, СведенияОбОбновлении); - ИначеЕсли Поток = Ложь Тогда - ОбработчикиВыполнялись = Ложь; - ОжидатьЗавершениеВсехПотоков(ОписаниеПотоков, СведенияОбОбновлении); - СохранитьСостояниеПотоковВСведенияОбОбновлении(ОписаниеПотоков, СведенияОбОбновлении); - Прервать; - КонецЕсли; - - СохранитьСостояниеПотоковВСведенияОбОбновлении(ОписаниеПотоков, СведенияОбОбновлении); - Задание = РегламентныеЗаданияСервер.Задание(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); - ТребуетсяВыполнение = Задание.Расписание.ТребуетсяВыполнение(ТекущаяДатаСеанса()); - - Если Не ТребуетсяВыполнение Или Не ФорсироватьОбновление(СведенияОбОбновлении) Тогда - ОжидатьЗавершениеВсехПотоков(ОписаниеПотоков, СведенияОбОбновлении); - СохранитьСостояниеПотоковВСведенияОбОбновлении(Неопределено, СведенияОбОбновлении); - Прервать; - КонецЕсли; - КонецЦикла; - Иначе - ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + Если Результат < 0 Тогда + ЗависимостьГруппОбработчиков.Вставить(ГруппаОбновления, Итерация <> 1); + ТекущийРежимВыполнения = "Последовательно"; + Иначе + ЗависимостьГруппОбработчиков.Вставить(ГруппаОбновления, Итерация <> 1); + ПропуститьПроверку = Истина; + ТекущийРежимВыполнения = "Параллельно"; + СоздаватьНовуюИтерацию = Ложь; + КонецЕсли; КонецЕсли; - Исключение - ЗаписатьОшибку(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОтменитьВыполнениеВсехПотоков(СведенияОбОбновлении.ОписаниеПотоков, СведенияОбОбновлении); - СохранитьСостояниеПотоковВСведенияОбОбновлении(Неопределено, СведенияОбОбновлении); - КонецПопытки; + + Для Каждого Обработчик Из СтрокаВерсия.Строки Цикл + ПроверитьСвойстваОтложенногоОбработчика(Обработчик, ТекущийРежимВыполнения, ТекстОшибок); + + Запись = НаборРазделенныхОбработчиков.Добавить(); + + ЗаполнитьЗначенияСвойств(Запись, Обработчик, , "РежимВыполнения,ВерсияПорядок"); + РежимВыполнения = Перечисления.РежимыВыполненияОбработчиков[Обработчик.РежимВыполнения]; + + Запись.ВерсияПорядок = СтрокаВерсия.ВерсияПорядок; + Запись.РежимВыполнения = РежимВыполнения; + Запись.Статус = Перечисления.СтатусыОбработчиковОбновления.НеВыполнялся; + Запись.ИмяБиблиотеки = ИмяБиблиотеки; + Запись.ГруппаОбновления = ГруппаОбновления; + Запись.СтатистикаВыполнения = Новый ХранилищеЗначения(Новый Соответствие); + Если ТекущийРежимВыполнения = "Параллельно" И Обработчик.Версия <> "*" Тогда + Запись.РежимВыполненияОтложенногоОбработчика = Перечисления.РежимыВыполненияОтложенныхОбработчиков.Параллельно; + Иначе + Запись.РежимВыполненияОтложенногоОбработчика = Перечисления.РежимыВыполненияОтложенныхОбработчиков.Последовательно; + КонецЕсли; + + // Определение значения константы ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно. + Если ТекущийРежимВыполнения = "Параллельно" И Не ЭтоПодчиненныйУзелРИБ + И Обработчик.ЗапускатьТолькоВГлавномУзле = Истина Тогда + ЕстьОбработчикиТолькоГлавногоУзла = Истина; + КонецЕсли; + Если ТекущийРежимВыполнения = "Параллельно" И ЭтоПодчиненныйУзелРИБСФильтром + И Не Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами Тогда + ЕстьОбработчикиТолькоГлавногоУзла = Истина; + // В подчиненном узле РИБ обработчики главного узла не выполняются. + Запись.Статус = Перечисления.СтатусыОбработчиковОбновления.Выполнен; + КонецЕсли; + + КонецЦикла; + + Если СоздаватьНовуюИтерацию Тогда + ГруппаОбновления = ГруппаОбновления + 1; + КонецЕсли; + Итерация = Итерация + 1; + КонецЦикла; - Если Не ОбработчикиВыполнялись Или ВыполненыВсеОтложенныеОбработчики(СведенияОбОбновлении) Тогда - СохранитьСостояниеПотоковВСведенияОбОбновлении(Неопределено, СведенияОбОбновлении); - ОтключитьОтложенноеОбновление(); - КонецЕсли; + // Обработчики обновления следующей библиотеки добавляются в новую группу. + ГруппаОбновления = ГруппаОбновления + 1; + + ЗаписатьСведенияОБлокируемыхОбъектах(СведенияОБлокируемыхОбъектах); + ТекущееЗначение = Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Получить(); + Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Установить(ТекущееЗначение И Не ЕстьОбработчикиТолькоГлавногоУзла); + + // АПК:1327-выкл нет конкурентной работы с регистром + НаборРазделенныхОбработчиков.Записать(); + // АПК:1327-вкл + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); КонецПроцедуры -// Вызывается при включении и отключении отложенного обновления. -// -// Параметры: -// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. -// -Процедура ПриВключенииОтложенногоОбновления(Использование) Экспорт +Функция НезавершенныеОтложенныеОбработчики(СведенияОбОбновлении) - ОтборЗаданий = Новый Структура; - ОтборЗаданий.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); - Задания = РегламентныеЗаданияСервер.НайтиЗадания(ОтборЗаданий); + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Неопределено; + КонецЕсли; - Для Каждого Задание Из Задания Цикл - Если Задание.Использование = Использование Тогда + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.Статус КАК Статус, + | ОбработчикиОбновления.Версия КАК Версия, + | ОбработчикиОбновления.ИмяБиблиотеки КАК ИмяБиблиотеки, + | ОбработчикиОбновления.ДлительностьОбработки КАК ДлительностьОбработки, + | ОбработчикиОбновления.РежимВыполнения КАК РежимВыполнения, + | ОбработчикиОбновления.ВерсияРегистрации КАК ВерсияРегистрации, + | ОбработчикиОбновления.Идентификатор КАК Идентификатор, + | ОбработчикиОбновления.ЧислоПопыток КАК ЧислоПопыток, + | ОбработчикиОбновления.СтатистикаВыполнения КАК СтатистикаВыполнения, + | ОбработчикиОбновления.ИнформацияОбОшибке КАК ИнформацияОбОшибке, + | ОбработчикиОбновления.Комментарий КАК Комментарий, + | ОбработчикиОбновления.Приоритет КАК Приоритет, + | ОбработчикиОбновления.ПроцедураПроверки КАК ПроцедураПроверки, + | ОбработчикиОбновления.ПроцедураЗаполненияДанныхОбновления КАК ПроцедураЗаполненияДанныхОбновления, + | ОбработчикиОбновления.ОчередьОтложеннойОбработки КАК ОчередьОтложеннойОбработки, + | ОбработчикиОбновления.ЗапускатьТолькоВГлавномУзле КАК ЗапускатьТолькоВГлавномУзле, + | ОбработчикиОбновления.ЗапускатьИВПодчиненномУзлеРИБСФильтрами КАК ЗапускатьИВПодчиненномУзлеРИБСФильтрами, + | ОбработчикиОбновления.Многопоточный КАК Многопоточный, + | ОбработчикиОбновления.ОбработкаПорцииЗавершена КАК ОбработкаПорцииЗавершена, + | ОбработчикиОбновления.ГруппаОбновления КАК ГруппаОбновления, + | ОбработчикиОбновления.ИтерацияЗапуска КАК ИтерацияЗапуска, + | ОбработчикиОбновления.ОбрабатываемыеДанные КАК ОбрабатываемыеДанные + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения + | И ОбработчикиОбновления.Статус <> &Статус"; + Обработчики = Запрос.Выполнить().Выгрузить(); + + ДеревоОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков.Строки; + Если ДеревоОбработчиков.Количество() > 0 Тогда + СведенияОбОбновлении.ДеревоОбработчиков.Колонки.НомерВерсии.Имя = "Версия"; + Отбор = Новый Структура; + Отбор.Вставить("Статус", "Выполняется"); + Выполняются = ДеревоОбработчиков.НайтиСтроки(Отбор, Истина); + ПеренестиОбработчикиИзКонстанты(Обработчики, Выполняются); + + Отбор.Статус = "НеВыполнено"; + НеВыполнены = ДеревоОбработчиков.НайтиСтроки(Отбор, Истина); + ПеренестиОбработчикиИзКонстанты(Обработчики, НеВыполнены); + + Отбор.Статус = "Ошибка"; + ЗавершилисьСОшибкой = ДеревоОбработчиков.НайтиСтроки(Отбор, Истина); + ПеренестиОбработчикиИзКонстанты(Обработчики, ЗавершилисьСОшибкой); + + СведенияОбОбновлении.ДеревоОбработчиков = Новый ДеревоЗначений; + КонецЕсли; + + Возврат Обработчики + +КонецФункции + +Процедура ДобавитьНезавершенныеОтложенныеОбработчики(ИтерацияОбновления, ИмяБиблиотеки, + НезавершенныеОтложенныеОбработчики, Обработчики) + + Отбор = Новый Структура; + Отбор.Вставить("ИмяБиблиотеки", ИмяБиблиотеки); + НезавершенныеОбработчикиБиблиотеки = НезавершенныеОтложенныеОбработчики.НайтиСтроки(Отбор); + Для Каждого Обработчик Из НезавершенныеОбработчикиБиблиотеки Цикл + НайденныйОбработчик = Обработчики.Найти(Обработчик.ИмяОбработчика, "ИмяОбработчика", Истина); + Если НайденныйОбработчик <> Неопределено Тогда Продолжить; КонецЕсли; - ПараметрыЗадания = Новый Структура("Использование", Использование); - РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор, ПараметрыЗадания); + Если ЗначениеЗаполнено(Обработчик.Идентификатор) Тогда + НайденныйОбработчик = Обработчики.Найти(Обработчик.Идентификатор, "Идентификатор", Истина); + Если НайденныйОбработчик <> Неопределено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + // Проверка, что обработчик не был удален. + НайденныйОбработчик = ИтерацияОбновления.Обработчики.Найти(Обработчик.ИмяОбработчика, "Процедура"); + Если НайденныйОбработчик = Неопределено Тогда + Продолжить; + КонецЕсли; + + // Необходимо запланировать выполнение незавершенного обработчика. + СтрокаВерсия = Обработчики.Найти(Обработчик.Версия, "Версия"); + Если СтрокаВерсия = Неопределено Тогда + СтрокаВерсия = Обработчики.Добавить(); + СтрокаВерсия.Версия = Обработчик.Версия; + КонецЕсли; + + НовыйОбработчик = СтрокаВерсия.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(НовыйОбработчик, Обработчик, , "РежимВыполнения"); + НовыйОбработчик.РежимВыполнения = "Отложенно"; КонецЦикла; КонецПроцедуры +Процедура ПеренестиОбработчикиИзКонстанты(Приемник, Источник) + + Для Каждого Обработчик Из Источник Цикл + НовыйОбработчик = Приемник.Добавить(); + ЗаполнитьЗначенияСвойств(НовыйОбработчик, Обработчик); + НовыйОбработчик.РежимВыполнения = Перечисления.РежимыВыполненияОбработчиков.Отложенно; + КонецЦикла; + +КонецПроцедуры + +Функция ОчередьОбработчиковГруппыОбновления(ГруппаОбновления) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ГруппаОбновления", ГруппаОбновления); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ОчередьОтложеннойОбработки КАК Очередь, + | ОбработчикиОбновления.Идентификатор КАК Идентификатор, + | ОбработчикиОбновления.ИмяОбработчика КАК Обработчик + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.ГруппаОбновления = &ГруппаОбновления"; + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +Функция ЕстьОбработчикиТолькоГлавногоУзла() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.ЗапускатьТолькоВГлавномУзле = ИСТИНА"; + Возврат Запрос.Выполнить().Выгрузить().Количество() > 0; + +КонецФункции + +Функция ОбработчикДляВыполнения(Обработчики, ГруппыОбработчиковИЗависимость, СведенияОбОбновлении) + + ЗависимостьГруппОбработчиков = СведенияОбОбновлении.ЗависимостьГруппОбработчиков; + ТекущаяИтерация = СведенияОбОбновлении.ТекущаяИтерацияОбновления; + + ТекущаяГруппаОбновления = Неопределено; + ОбработчикДляВыполнения = Неопределено; + ПропускаемыеГруппы = Новый Массив; + ЗавершеноУспешно = Истина; + ЕстьВыполняющиеся = Ложь; + ЕстьОшибки = Ложь; + ЕстьНевыполненные = Ложь; + ВыполняющийсяМногопоточныйОбработчик = Неопределено; + Для Каждого Обработчик Из Обработчики Цикл + Если Обработчик.ИтерацияЗапуска = ТекущаяИтерация Тогда + // Обработчик в этой итерации обновления уже запускался. + ЕстьНевыполненные = Истина; + Продолжить; + КонецЕсли; + + Если ПропускаемыеГруппы.Найти(Обработчик.ГруппаОбновления) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Если Обработчик.ГруппаОбновления <> 1 + И ЗависимостьГруппОбработчиков[Обработчик.ГруппаОбновления] = Истина Тогда + НайденнаяСтрока = ГруппыОбработчиковИЗависимость.Найти(Обработчик.ГруппаОбновления - 1, "ГруппаОбновления"); + Если НайденнаяСтрока <> Неопределено Тогда + ПропускаемыеГруппы.Добавить(Обработчик.ГруппаОбновления); + Продолжить; + КонецЕсли; + КонецЕсли; + + Если ТекущаяГруппаОбновления = Неопределено Тогда + ТекущаяГруппаОбновления = Обработчик.ГруппаОбновления; + ИначеЕсли ТекущаяГруппаОбновления <> Обработчик.ГруппаОбновления Тогда + // При переходе к следующей группе обновления делается проверка ошибок по предыдущей группе + // и наличия многопоточных обработчиков, для которых есть порция обновления. + Если ВыполняющийсяМногопоточныйОбработчик = Неопределено Тогда + Если ЕстьОшибки Тогда + ЗавершеноУспешно = Ложь; + КонецЕсли; + Иначе + ОбработчикДляВыполнения = ВыполняющийсяМногопоточныйОбработчик; + Прервать; + КонецЕсли; + ТекущаяГруппаОбновления = Обработчик.ГруппаОбновления; + КонецЕсли; + + Если Обработчик.Статус = Перечисления.СтатусыОбработчиковОбновления.Выполняется + И Не Обработчик.ОбработкаПорцииЗавершена Тогда + Если Обработчик.Многопоточный Тогда + Если ЕстьПорцииДляОбновления(Обработчик) Тогда + ВыполняющийсяМногопоточныйОбработчик = Обработчик; + КонецЕсли; + КонецЕсли; + ЕстьВыполняющиеся = Истина; + Продолжить; + КонецЕсли; + + Если Обработчик.Статус = Перечисления.СтатусыОбработчиковОбновления.Приостановлен Тогда + Продолжить; + КонецЕсли; + + МаксимумПопытокОбновления = МаксимумПопытокОбновления(Обработчик); + Если Обработчик.ЧислоПопыток >= МаксимумПопытокОбновления Тогда + Если Обработчик.Статус = Перечисления.СтатусыОбработчиковОбновления.Ошибка Тогда + ЕстьОшибки = Истина; + Продолжить; + ИначеЕсли ВсеОбработчикиЗациклились() Тогда + ОтметитьЗациклившиесяОбработчики(); + ЕстьОшибки = Истина; + Продолжить; + КонецЕсли; + КонецЕсли; + + ОбработчикДляВыполнения = Обработчик; + Прервать; + КонецЦикла; + + Если ОбработчикДляВыполнения = Неопределено И ВыполняющийсяМногопоточныйОбработчик <> Неопределено Тогда + ОбработчикДляВыполнения = ВыполняющийсяМногопоточныйОбработчик; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ОбработчикДляВыполнения", ОбработчикДляВыполнения); + Результат.Вставить("ЗавершеноУспешно", ЗавершеноУспешно); + Результат.Вставить("ЕстьВыполняющиеся", ЕстьВыполняющиеся); + Результат.Вставить("ЕстьНевыполненные", ЕстьНевыполненные); + + Возврат Результат; + +КонецФункции + +Функция ОбработчикОбновления(ИмяОбработчика) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяОбработчика", ИмяОбработчика); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.Статус КАК Статус, + | ОбработчикиОбновления.Версия КАК Версия, + | ОбработчикиОбновления.ИмяБиблиотеки КАК ИмяБиблиотеки, + | ОбработчикиОбновления.ДлительностьОбработки КАК ДлительностьОбработки, + | ОбработчикиОбновления.РежимВыполнения КАК РежимВыполнения, + | ОбработчикиОбновления.ВерсияРегистрации КАК ВерсияРегистрации, + | ОбработчикиОбновления.ВерсияПорядок КАК ВерсияПорядок, + | ОбработчикиОбновления.Идентификатор КАК Идентификатор, + | ОбработчикиОбновления.ЧислоПопыток КАК ЧислоПопыток, + | ОбработчикиОбновления.СтатистикаВыполнения КАК СтатистикаВыполнения, + | ОбработчикиОбновления.ИнформацияОбОшибке КАК ИнформацияОбОшибке, + | ОбработчикиОбновления.Комментарий КАК Комментарий, + | ОбработчикиОбновления.Приоритет КАК Приоритет, + | ОбработчикиОбновления.ПроцедураПроверки КАК ПроцедураПроверки, + | ОбработчикиОбновления.ПроцедураЗаполненияДанныхОбновления КАК ПроцедураЗаполненияДанныхОбновления, + | ОбработчикиОбновления.ОчередьОтложеннойОбработки КАК ОчередьОтложеннойОбработки, + | ОбработчикиОбновления.ЗапускатьТолькоВГлавномУзле КАК ЗапускатьТолькоВГлавномУзле, + | ОбработчикиОбновления.ЗапускатьИВПодчиненномУзлеРИБСФильтрами КАК ЗапускатьИВПодчиненномУзлеРИБСФильтрами, + | ОбработчикиОбновления.Многопоточный КАК Многопоточный, + | ОбработчикиОбновления.ОбработкаПорцииЗавершена КАК ОбработкаПорцииЗавершена, + | ОбработчикиОбновления.ГруппаОбновления КАК ГруппаОбновления, + | ОбработчикиОбновления.ИтерацияЗапуска КАК ИтерацияЗапуска, + | ОбработчикиОбновления.ОбрабатываемыеДанные КАК ОбрабатываемыеДанные, + | ОбработчикиОбновления.РежимВыполненияОтложенногоОбработчика КАК РежимВыполненияОтложенногоОбработчика + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.ИмяОбработчика = &ИмяОбработчика"; + Результат = Запрос.Выполнить().Выгрузить(); + Если Результат.Количество() = 0 Тогда + Возврат Неопределено; + Иначе + Возврат Результат[0]; + КонецЕсли; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Механизм многопоточного обновления. @@ -2808,9 +3488,9 @@ // Создать новое описание потоков регистрации данных отложенного обновления. // // Возвращаемое значение: -// см. НовоеОписаниеПотоков(). +// см. НовоеОписаниеПотоков // -Функция НовоеОписаниеПотоковРегистрацииДанныхОтложенногоОбновления() +Функция НовоеОписаниеГруппПотоковРегистрацииДанныхОтложенногоОбновления() Экспорт ГруппаРегистрации = НовоеОписаниеГруппыПотоков(); ГруппаРегистрации.Процедура = @@ -2818,28 +3498,27 @@ ГруппаРегистрации.ПроцедураЗавершения = "ОбновлениеИнформационнойБазыСлужебный.ЗавершитьРегистрациюДанныхОтложенногоОбновления"; - Описание = НовоеОписаниеПотоков(); - Описание.Группы[ГруппаПотоковРегистрацииДанныхОтложенногоОбновления()] = ГруппаРегистрации; + Группы = Новый Соответствие; + Группы[ГруппаПотоковРегистрацииДанныхОтложенногоОбновления()] = ГруппаРегистрации; - Возврат Описание; + Возврат Группы; КонецФункции // Добавить поток регистрации данных отложенного обновления. // // Параметры: -// ОписаниеПотоков - см. НовоеОписаниеПотоков(). -// ОписаниеОбрабатываемыхДанных - см. НовоеОписаниеОбрабатываемыхДанных(). +// ОписаниеОбрабатываемыхДанных - см. НовоеОписаниеОбрабатываемыхДанных // // Возвращаемое значение: -// СтрокаТаблицыЗначений - новый поток (см. НовоеОписаниеПотоков()). +// СтрокаТаблицыЗначений - см. НовоеОписаниеПотоков // -Функция ДобавитьПотокРегистрацииДанныхОтложенногоОбновления(ОписаниеПотоков, ОписаниеОбрабатываемыхДанных) +Функция ДобавитьПотокРегистрацииДанныхОтложенногоОбновления(ОписаниеОбрабатываемыхДанных) ШаблонНаименования = НСтр("ru = 'Регистрация данных обработчика обновления ""%1""'"); ОписаниеОбрабатываемыхДанных.Статус = "Выполняется"; - Поток = ОписаниеПотоков.Потоки.Добавить(); + Поток = НовыйПоток(); Поток.ПараметрыПроцедуры = ОписаниеОбрабатываемыхДанных; Поток.ПараметрыПроцедурыЗавершения = ОписаниеОбрабатываемыхДанных; Поток.Группа = ГруппаПотоковРегистрацииДанныхОтложенногоОбновления(); @@ -2854,24 +3533,20 @@ // Вызывается автоматически в основном потоке, после завершения выполнения ЗаполнитьДанныеОтложенногоОбработчика(). // // Параметры: -// ОписаниеОбрабатываемыхДанных - см. НовоеОписаниеОбрабатываемыхДанных(). +// ОписаниеОбрабатываемыхДанных - см. НовоеОписаниеОбрабатываемыхДанных // АдресРезультата - Строка - адрес временного хранилища с результатом из ЗаполнитьДанныеОтложенногоОбработчика(). -// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). // Процедура ЗавершитьРегистрациюДанныхОтложенногоОбновления(ОписаниеОбрабатываемыхДанных, - АдресРезультата, - СведенияОбОбновлении) Экспорт + АдресРезультата) Экспорт Результат = ПолучитьИзВременногоХранилища(АдресРезультата); - Если ТипЗнч(СведенияОбОбновлении.ОбрабатываемыеДанные) <> Тип("Соответствие") Тогда - СведенияОбОбновлении.ОбрабатываемыеДанные = Новый Соответствие; - КонецЕсли; - - ОписаниеОбрабатываемыхДанных = СведенияОбОбновлении.ОбрабатываемыеДанные[ОписаниеОбрабатываемыхДанных.ИмяОбработчика]; ЗаполнитьЗначенияСвойств(ОписаниеОбрабатываемыхДанных, Результат); ОписаниеОбрабатываемыхДанных.Статус = "Выполнено"; + ОбрабатываемыеДанные = Новый ХранилищеЗначения(ОписаниеОбрабатываемыхДанных, Новый СжатиеДанных(9)); + УстановитьСвойствоОбработчика(ОписаниеОбрабатываемыхДанных.ИмяОбработчика, "ОбрабатываемыеДанные", ОбрабатываемыеДанные); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда Если Результат.ДанныеОбновления <> Неопределено Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); @@ -2884,9 +3559,9 @@ // Создать новое описание потоков обработчиков отложенного обновления. // // Возвращаемое значение: -// см. НовоеОписаниеПотоков(). +// см. НовоеОписаниеПотоков // -Функция НовоеОписаниеПотоковОбработчиковОтложенногоОбновления() +Функция НовоеОписаниеГруппПотоковОбработчиковОтложенногоОбновления() ГруппаОбновления = НовоеОписаниеГруппыПотоков(); ГруппаОбновления.Процедура = @@ -2908,35 +3583,42 @@ ГруппаПоиска.ПриОтменеПотока = "ОбновлениеИнформационнойБазыСлужебный.ПриОтменеПотокаПоискаПорцииДляОбновления"; - Описание = НовоеОписаниеПотоков(); - Описание.Группы[ГруппаПотоковОтложенногоОбновления()] = ГруппаОбновления; - Описание.Группы[ГруппаПотоковПоискаПорций()] = ГруппаПоиска; + Группы = Новый Соответствие; + Группы[ГруппаПотоковОтложенногоОбновления()] = ГруппаОбновления; + Группы[ГруппаПотоковПоискаПорций()] = ГруппаПоиска; - Возврат Описание; + Возврат Группы; + +КонецФункции + +Функция НовыйПоток() + + Потоки = НовоеОписаниеПотоков(); + Возврат Потоки.Добавить(); КонецФункции // Добавить поток обработчика отложенного обновления. // // Параметры: -// ОписаниеПотоков - см. НовоеОписаниеПотоковОбработчиковОтложенногоОбновления(). -// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). +// ОписаниеПотоков - см. НовоеОписаниеПотоковОбработчиковОтложенногоОбновления +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // // Возвращаемое значение: -// * СтрокаТаблицыЗначений - новый поток (см. НовоеОписаниеПотоков()). +// * СтрокаТаблицыЗначений - см. НовоеОписаниеПотоков // * Булево - Истина, если обработчик не нужно выполнять или Ложь, если выполнение обработчиков нужно завершить. // -Функция ДобавитьПотокОбработчикаОтложенногоОбновления(ОписаниеПотоков, СведенияОбОбновлении) +Функция ДобавитьПотокОбработчикаОтложенногоОбновления(СведенияОбОбновлении) Поток = Неопределено; Пока Поток = Неопределено Цикл КонтекстОбработчика = НовыйКонтекстОбработчика(); - ОбработчикОбновления = НайтиОбработчикОбновления(КонтекстОбработчика, СведенияОбОбновлении); + ОбработчикОбновления = НайтиОбработчикОбновления(КонтекстОбработчика); - Если ТипЗнч(ОбработчикОбновления) = Тип("СтрокаДереваЗначений") Тогда + Если ТипЗнч(ОбработчикОбновления) = Тип("СтрокаТаблицыЗначений") Тогда Если КонтекстОбработчика.ВыполнитьОбработчик Тогда - Поток = ОписаниеПотоков.Потоки.Добавить(); + Поток = НовыйПоток(); Если ОбработчикОбновления.Многопоточный Тогда ДополнитьКонтекстМногопоточногоОбработчика(КонтекстОбработчика); @@ -2946,14 +3628,13 @@ СведенияОбОбновлении); Если Не Добавлен Тогда - ОписаниеПотоков.Потоки.Удалить(Поток); Поток = Истина; КонецЕсли; Иначе ДобавитьПотокОбработчикаОбновления(Поток, КонтекстОбработчика); КонецЕсли; Иначе - ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, Неопределено, СведенияОбОбновлении); + ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, Неопределено); Поток = Неопределено; КонецЕсли; Иначе @@ -2968,10 +3649,10 @@ // Добавить поток поиска данных для обработчика отложенного обновления. // // Параметры: -// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// Поток - см. НовоеОписаниеПотоков // Обработчик - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). -// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // // Возвращаемое значение: // Булево - Истина, поток добавлен, иначе Ложь. @@ -2979,7 +3660,7 @@ Функция ДобавитьПотокПоискаДанныхДляОбновления(Поток, Обработчик, КонтекстОбработчика, СведенияОбОбновлении) ИмяОбработчика = Обработчик.ИмяОбработчика; - Описание = СведенияОбОбновлении.ОбрабатываемыеДанные[ИмяОбработчика]; + Описание = Обработчик.ОбрабатываемыеДанные.Получить(); Если Не Описание.ВыполняетсяПоискПорции Тогда ПорцииДляОбновления = Описание.ПорцииДляОбновления; @@ -3015,6 +3696,9 @@ Поток.ПараметрыПроцедуры = ПараметрыПоиска; Поток.ПараметрыПроцедурыЗавершения = ПараметрыПоиска; Описание.ВыполняетсяПоискПорции = Истина; + УстановитьСвойствоОбработчика(ИмяОбработчика, + "ОбрабатываемыеДанные", + Новый ХранилищеЗначения(Описание)); Возврат Истина; Иначе @@ -3026,8 +3710,8 @@ // Добавить поток обработчика отложенного обновления. // // Параметры: -// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// Поток - см. НовоеОписаниеПотоков +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // Процедура ДобавитьПотокОбработчикаОбновления(Поток, КонтекстОбработчика) @@ -3044,7 +3728,7 @@ // Выполняется только, если КонтекстОбработчика.ВыполнитьОбработчик = Истина (т.е. не в подчиненном узле РИБ). // // Параметры: -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // АдресРезультата - Строка - адрес временного хранилища для сохранения результата выполнения процедуры. // Процедура ВыполнитьОтложенныйОбработчик(КонтекстОбработчика, АдресРезультата) Экспорт @@ -3058,6 +3742,13 @@ ПараметрыВызова.Добавить(КонтекстОбработчика.Параметры); Результат = НовыйРезультатВыполненияОтложенногоОбработчика(); + Если КонтекстОбработчика.Параметры.Свойство("ОбновляемыеДанные") Тогда + ВсегоДанных = 0; + Для Каждого СтрокаОбновляемыйОбъект Из КонтекстОбработчика.Параметры.ОбновляемыеДанные.НаборДанных Цикл + ВсегоДанных = ВсегоДанных + СтрокаОбновляемыйОбъект.Данные.Количество(); + КонецЦикла; + Результат.ПереданоДанныхДляОбработки = ВсегоДанных; + КонецЕсли; Результат.НачалоПроцедурыОбработчика = ТекущаяУниверсальнаяДатаВМиллисекундах(); ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова); Результат.ЗавершениеПроцедурыОбработчика = ТекущаяУниверсальнаяДатаВМиллисекундах(); @@ -3092,117 +3783,127 @@ // Вызывается автоматически в основном потоке, после завершения выполнения ВыполнитьОтложенныйОбработчик(). // // Параметры: -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // АдресРезультата - Строка - адрес временного хранилища с результатом из ВыполнитьОтложенныйОбработчик(). -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // -Процедура ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата, СведенияОбОбновлении) Экспорт +Процедура ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата) Экспорт - ОбработчикОбновления = НайтиОбработчикВДереве(СведенияОбОбновлении.ДеревоОбработчиков.Строки, - КонтекстОбработчика.ИдентификаторОбработчика, - КонтекстОбработчика.ИмяОбработчика); - ОбработчикОбновления.ОбработкаПорцииЗавершена = Истина; + ОбработчикОбновления = ОбработчикОбновления(КонтекстОбработчика.ИмяОбработчика); + УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, "ОбработкаПорцииЗавершена", Истина); ЗагрузитьРезультатВыполненияОбработчика(КонтекстОбработчика, АдресРезультата); ПараметрыСеанса.ПараметрыОбработчикаОбновления = КонтекстОбработчика.ПараметрыОбработчикаОбновления; Если КонтекстОбработчика.ЗапускВыполненБезОшибок Тогда - ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, СведенияОбОбновлении); + ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, КонтекстОбработчика.ИмяОбработчика); КонецЕсли; - ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, СведенияОбОбновлении); + ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, КонтекстОбработчика.ИмяОбработчика); ПараметрыСеанса.ПараметрыОбработчикаОбновления = Новый ФиксированнаяСтруктура(НовыеПараметрыОбработчикаОбновления()); Если ОбработчикОбновления.Многопоточный Тогда - ЗавершитьВыполнениеМногопоточногоОбработчика(КонтекстОбработчика, СведенияОбОбновлении); + ЗавершитьВыполнениеМногопоточногоОбработчика(КонтекстОбработчика, КонтекстОбработчика.ИмяОбработчика); КонецЕсли; - ЗавершитьВыполнениеОтложенногоОбработчикаОбновления(КонтекстОбработчика, СведенияОбОбновлении); - РассчитатьВремяВыполненияПроцедурыОбработчика(КонтекстОбработчика, ОбработчикОбновления); + ЗавершитьВыполнениеОтложенногоОбработчикаОбновления(КонтекстОбработчика); + РассчитатьВремяВыполненияПроцедурыОбработчика(КонтекстОбработчика, КонтекстОбработчика.ИмяОбработчика); КонецПроцедуры // Рассчитать время выполнения процедуры обработки данных (не всего обработчика). // // Параметры: -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. // -Процедура РассчитатьВремяВыполненияПроцедурыОбработчика(КонтекстОбработчика, ОбработчикОбновления) +Процедура РассчитатьВремяВыполненияПроцедурыОбработчика(КонтекстОбработчика, ИмяОбработчика) + + ОбработчикОбновления = ОбработчикОбновления(ИмяОбработчика); НачалоПроцедурыОбработчика = ?(КонтекстОбработчика.НачалоПроцедурыОбработчика = Неопределено, 0, КонтекстОбработчика.НачалоПроцедурыОбработчика); ЗавершениеПроцедурыОбработчика = ?(КонтекстОбработчика.ЗавершениеПроцедурыОбработчика = Неопределено, 0, КонтекстОбработчика.ЗавершениеПроцедурыОбработчика); + ПереданоДанныхДляОбработки = ?(КонтекстОбработчика.ПереданоДанныхДляОбработки = Неопределено, 0, + КонтекстОбработчика.ПереданоДанныхДляОбработки); ДлительностьПроцедурыОбработчика = ЗавершениеПроцедурыОбработчика - НачалоПроцедурыОбработчика; НачалоВыполнения = '00010101' + НачалоПроцедурыОбработчика / 1000; ЗавершениеВыполнения = '00010101' + ЗавершениеПроцедурыОбработчика / 1000; - СтатистикаНачало = ОбработчикОбновления.СтатистикаВыполнения["НачалоПроцедурыОбработчика"]; - СтатистикаЗавершение = ОбработчикОбновления.СтатистикаВыполнения["ЗавершениеПроцедурыОбработчика"]; - СтатистикаДлительность = ОбработчикОбновления.СтатистикаВыполнения["ДлительностьПроцедурыОбработчика"]; + СтатистикаВыполнения = ОбработчикОбновления.СтатистикаВыполнения.Получить(); + СтатистикаНачало = СтатистикаВыполнения["НачалоПроцедурыОбработчика"]; + СтатистикаЗавершение = СтатистикаВыполнения["ЗавершениеПроцедурыОбработчика"]; + СтатистикаДанныхДляОбработки = СтатистикаВыполнения["ПереданоДанныхДляОбработки"]; + СтатистикаДлительность = СтатистикаВыполнения["ДлительностьПроцедурыОбработчика"]; Если СтатистикаНачало = Неопределено Тогда СтатистикаНачало = Новый Массив; - ОбработчикОбновления.СтатистикаВыполнения["НачалоПроцедурыОбработчика"] = СтатистикаНачало; + СтатистикаВыполнения["НачалоПроцедурыОбработчика"] = СтатистикаНачало; КонецЕсли; Если СтатистикаЗавершение = Неопределено Тогда СтатистикаЗавершение = Новый Массив; - ОбработчикОбновления.СтатистикаВыполнения["ЗавершениеПроцедурыОбработчика"] = СтатистикаЗавершение; + СтатистикаВыполнения["ЗавершениеПроцедурыОбработчика"] = СтатистикаЗавершение; + КонецЕсли; + + Если СтатистикаДанныхДляОбработки = Неопределено Тогда + СтатистикаДанныхДляОбработки = Новый Массив; + СтатистикаВыполнения["ПереданоДанныхДляОбработки"] = СтатистикаДанныхДляОбработки; КонецЕсли; Если СтатистикаДлительность = Неопределено Тогда СтатистикаДлительность = Новый Массив; - ОбработчикОбновления.СтатистикаВыполнения["ДлительностьПроцедурыОбработчика"] = СтатистикаДлительность; + СтатистикаВыполнения["ДлительностьПроцедурыОбработчика"] = СтатистикаДлительность; КонецЕсли; СтатистикаНачало.Добавить(НачалоВыполнения); СтатистикаЗавершение.Добавить(ЗавершениеВыполнения); + СтатистикаДанныхДляОбработки.Добавить(ПереданоДанныхДляОбработки); СтатистикаДлительность.Добавить(ДлительностьПроцедурыОбработчика); + УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, + "СтатистикаВыполнения", + Новый ХранилищеЗначения(СтатистикаВыполнения)); + КонецПроцедуры // Обработчик аварийного завершения выполнения потока отложенного обновления. // // Параметры: -// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// Поток - см. НовоеОписаниеПотоков // ИнформацияОбОшибке - ИнформацияОбОшибке - описание возникшей ошибки. -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // -Процедура ПриАварийномЗавершенииПотокаОтложенногоОбработчика(Поток, ИнформацияОбОшибке, СведенияОбОбновлении) Экспорт +Процедура ПриАварийномЗавершенииПотокаОтложенногоОбработчика(Поток, ИнформацияОбОшибке) Экспорт - ОбработчикОбновления = НайтиОбработчикВДереве(СведенияОбОбновлении.ДеревоОбработчиков.Строки, - Поток.ПараметрыПроцедуры.ИдентификаторОбработчика, - Поток.ПараметрыПроцедуры.ИмяОбработчика); + ОбработчикОбновления = ОбработчикОбновления(Поток.ПараметрыПроцедуры.ИмяОбработчика); ОбработатьИсключениеОбработчика(Поток.ПараметрыПроцедуры, ОбработчикОбновления, ИнформацияОбОшибке); Если ОбработчикОбновления.Многопоточный Тогда - ОтменитьОбработкуДанныхМногопоточногоОбработчика(Поток, ОбработчикОбновления, СведенияОбОбновлении); + ОтменитьОбработкуДанныхМногопоточногоОбработчика(Поток, ОбработчикОбновления); КонецЕсли; КонтекстОбработчика = Поток.ПараметрыПроцедурыЗавершения; - ЗавершитьВыполнениеОтложенногоОбработчикаОбновления(КонтекстОбработчика, СведенияОбОбновлении); + ЗавершитьВыполнениеОтложенногоОбработчикаОбновления(КонтекстОбработчика); КонецПроцедуры // Обработчик отмены выполнения потока. // // Параметры: -// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// Поток - см. НовоеОписаниеПотоков +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // -Процедура ПриОтменеПотокаОтложенногоОбработчика(Поток, СведенияОбОбновлении) Экспорт +Процедура ПриОтменеПотокаОтложенногоОбработчика(Поток) Экспорт - ОбработчикОбновления = НайтиОбработчикВДереве(СведенияОбОбновлении.ДеревоОбработчиков.Строки, - Поток.ПараметрыПроцедуры.ИдентификаторОбработчика, - Поток.ПараметрыПроцедуры.ИмяОбработчика); + ОбработчикОбновления = ОбработчикОбновления(Поток.ПараметрыПроцедуры.ИмяОбработчика); - Если ОбработчикОбновления.Статус = "Выполняется" Тогда - ОбработчикОбновления.Статус = Неопределено; + Если ОбработчикОбновления.Статус = Перечисления.СтатусыОбработчиковОбновления.Выполняется Тогда + УстановитьСтатусОбработчика(ОбработчикОбновления.ИмяОбработчика, "НеВыполнялся"); КонецЕсли; Если ОбработчикОбновления.Многопоточный Тогда - ОтменитьОбработкуДанныхМногопоточногоОбработчика(Поток, ОбработчикОбновления, СведенияОбОбновлении); + ОтменитьОбработкуДанныхМногопоточногоОбработчика(Поток, ОбработчикОбновления); КонецЕсли; КонецПроцедуры @@ -3210,13 +3911,13 @@ // Загрузить результат выполнения обработчика из временного хранилища в контекст обработчика обновления. // // Параметры: -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // АдресРезультата - Строка - адрес результата во временном хранилище. // Процедура ЗагрузитьРезультатВыполненияОбработчика(КонтекстОбработчика, АдресРезультата) Если АдресРезультата <> Неопределено Тогда - Результат = ПолучитьИзВременногоХранилища(АдресРезультата); + Результат = ПолучитьИзВременногоХранилища(АдресРезультата); // см. НовыйРезультатВыполненияОтложенногоОбработчика Иначе Результат = Неопределено; КонецЕсли; @@ -3230,6 +3931,7 @@ КонтекстОбработчика.ЗавершениеПроцедурыОбработчика = Результат.ЗавершениеПроцедурыОбработчика; КонтекстОбработчика.ИнформацияОбОшибке = Результат.ИнформацияОбОшибке; КонтекстОбработчика.НачалоПроцедурыОбработчика = Результат.НачалоПроцедурыОбработчика; + КонтекстОбработчика.ПереданоДанныхДляОбработки = Результат.ПереданоДанныхДляОбработки; КонтекстОбработчика.Параметры = Результат.Параметры; КонтекстОбработчика.ПараметрыОбработчикаОбновления = Результат.ПараметрыОбработчикаОбновления; КонецЕсли; @@ -3239,13 +3941,13 @@ // Сохранить состояние выполнения потоков обновления в сведения об обновлении. // // Параметры: -// ОписаниеПотоков - Структура - коллекция потоков (см. НовоеОписаниеПотоков()). -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// ОписаниеПотоков - см. НовоеОписаниеПотоков +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы. // -Процедура СохранитьСостояниеПотоковВСведенияОбОбновлении(ОписаниеПотоков, СведенияОбОбновлении) +Процедура УдалитьВсеПотокиОбновления() - СведенияОбОбновлении.ОписаниеПотоков = ОписаниеПотоков; - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + НаборЗаписей = РегистрыСведений.ПотокиОбновления.СоздатьНаборЗаписей(); + НаборЗаписей.Записать(); КонецПроцедуры @@ -3254,7 +3956,7 @@ // Возвращаемое значение: // Структура - описание контекста (сериализуется для возможности передачи в фоновое задание): // * ВыполнитьОбработчик - Булево - если Истина, то обработчик готов к выполнению. -// * ДетальноеОписаниеОбработчика - см. ПодготовитьДетальнуюИнформациюОХодеОбновления(). +// * ДетальноеОписаниеОбработчика - см. ПодготовитьДетальнуюИнформациюОХодеОбновления // * ЗавершениеПроцедурыОбработчика - Число - завершение процедуры обработки данных. // * ЗаписыватьВЖурнал - Булево - см. Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации. // * ЗапускВыполненБезОшибок - Булево - если Истина, то при запуске обработчика не возникло исключений. @@ -3264,8 +3966,10 @@ // * ИндексТекущегоЦиклаОбновления - Число - индекс текущего элемента плана обновления. // * НачалоОбработкиДанных - Дата - время начала выполнения обработчика обновления. // * НачалоПроцедурыОбработчика - Число - начало процедуры обработки данных. +// * ПереданоДанныхДляОбработки - Число - количество объектов, переданных для обработки. // * ПараллельныйРежим - Булево - признак параллельного режима выполнения обработчика обновления. -// * Параметры - Структура - параметры обработчика обновления. +// * Параметры - Структура - параметры обработчика обновления со свойствами: +// ** ОбновляемыеДанные - см. НоваяПорцияДляОбновления // * ПараметрыОбновления - Структура - описание параметров обновления. // * ПараметрыОбработчикаОбновления - см. ПараметрыСеанса.ПараметрыОбработчикаОбновления // * ПропуститьПроверкуОбработанныхДанных - Булево - пропустить проверку в подчиненном узле РИБ. @@ -3289,6 +3993,7 @@ КонтекстОбработчика.Вставить("ИнформацияОбОшибке"); КонтекстОбработчика.Вставить("НачалоОбработкиДанных"); КонтекстОбработчика.Вставить("НачалоПроцедурыОбработчика"); + КонтекстОбработчика.Вставить("ПереданоДанныхДляОбработки"); КонтекстОбработчика.Вставить("ПараллельныйРежим"); КонтекстОбработчика.Вставить("Параметры"); КонтекстОбработчика.Вставить("ПараметрыОбновления"); @@ -3304,7 +4009,7 @@ // Дополнить контекст обработчика полями для многопоточного обработчика. // // Параметры: -// КонтекстОбработчика - Структура (см. НовыйКонтекстОбработчика()). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // Процедура ДополнитьКонтекстМногопоточногоОбработчика(КонтекстОбработчика) @@ -3316,11 +4021,12 @@ // его выполнения в управляющем потоке. // // Возвращаемое значение: -// Структура - описание результата: +// Структура: // * ЕстьНеЗакрытыеТранзакции - Булево - признак наличия не закрытых транзакций в самом обработчике. // * ЗавершениеПроцедурыОбработчика - Число - время завершения выполнения процедуры обработчика обновления. // * ИнформацияОбОшибке - ИнформацияОбОшибке - описание ошибки (если была). // * НачалоПроцедурыОбработчика - Число - время начала выполнения процедуры обработчика обновления. +// * ПереданоДанныхДляОбработки - Число - количество объектов, переданных для обработки. // * Параметры - Структура - параметры, переданные в обработчик обновления. // * ПараметрыОбработчикаОбновления - ФиксированнаяСтруктура - значение параметра сеанса // ПараметрыОбработчикаОбновления. @@ -3332,6 +4038,7 @@ Результат.Вставить("ЗавершениеПроцедурыОбработчика"); Результат.Вставить("ИнформацияОбОшибке"); Результат.Вставить("НачалоПроцедурыОбработчика"); + Результат.Вставить("ПереданоДанныхДляОбработки"); Результат.Вставить("Параметры"); Результат.Вставить("ПараметрыОбработчикаОбновления"); @@ -3355,7 +4062,7 @@ // Определить приоритет обновления. // // Параметры: -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // // Возвращаемое значение: // Булево - Истина - приоритет на обработку данных, Ложь - приоритет на работу пользователей. @@ -3387,19 +4094,77 @@ //////////////////////////////////////////////////////////////////////////////// // Механизм работы с потоками. +Процедура СохранитьПотокОбновления(Поток) + + НаборЗаписей = РегистрыСведений.ПотокиОбновления.СоздатьНаборЗаписей(); + Идентификатор = Поток.ИдентификаторПотока; + Если Не ЗначениеЗаполнено(Идентификатор) Тогда + Идентификатор = Новый УникальныйИдентификатор; + КонецЕсли; + НаборЗаписей.Отбор.ИдентификаторПотока.Установить(Идентификатор); + + Запись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(Запись, Поток, , "ИдентификаторПотока,ПараметрыПроцедуры,ПараметрыПроцедурыЗавершения"); + Запись.ИдентификаторПотока = Идентификатор; + Запись.ПараметрыПроцедуры = Новый ХранилищеЗначения(Поток.ПараметрыПроцедуры); + Запись.ПараметрыПроцедурыЗавершения = Новый ХранилищеЗначения(Поток.ПараметрыПроцедурыЗавершения); + + НаборЗаписей.Записать(); + +КонецПроцедуры + +Процедура УдалитьПотокОбновления(ИдентификаторПотока) + + НаборЗаписей = РегистрыСведений.ПотокиОбновления.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИдентификаторПотока.Установить(ИдентификаторПотока); + НаборЗаписей.Записать(); + +КонецПроцедуры + +Функция ПотокиОбновления() + + ТаблицаПотоков = НовоеОписаниеПотоков(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПотокиОбновления.АдресРезультата КАК АдресРезультата, + | ПотокиОбновления.Группа КАК Группа, + | ПотокиОбновления.Наименование КАК Наименование, + | ПотокиОбновления.ПараметрыПроцедуры КАК ПараметрыПроцедуры, + | ПотокиОбновления.ПараметрыПроцедурыЗавершения КАК ПараметрыПроцедурыЗавершения, + | ПотокиОбновления.ПриоритетЗавершения КАК ПриоритетЗавершения, + | ПотокиОбновления.ИдентификаторЗадания КАК ИдентификаторЗадания, + | ПотокиОбновления.ИдентификаторПотока КАК ИдентификаторПотока + |ИЗ + | РегистрСведений.ПотокиОбновления КАК ПотокиОбновления"; + Результат = Запрос.Выполнить().Выгрузить(); + Для Каждого Поток Из Результат Цикл + Строка = ТаблицаПотоков.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Поток, , "ПараметрыПроцедуры,ПараметрыПроцедурыЗавершения"); + Если Не ЗначениеЗаполнено(Строка.АдресРезультата) Тогда + Строка.АдресРезультата = Неопределено; + КонецЕсли; + Строка.ПараметрыПроцедурыЗавершения = Поток.ПараметрыПроцедурыЗавершения.Получить(); + Строка.ПараметрыПроцедуры = Поток.ПараметрыПроцедуры.Получить(); + КонецЦикла; + Возврат ТаблицаПотоков; + +КонецФункции + // Выполнить указанный поток. // // Параметры: -// ОписаниеПотоков - Структура - коллекция потоков (см. НовоеОписаниеПотоков()). +// ОписаниеПотоков - см. НовоеОписаниеПотоков // Поток - СтрокаТаблицыЗначений - описание потока (см. Потоки в НовоеОписаниеПотоков()). // ИдентификаторФормы - УникальныйИдентификатор - идентификатор формы, если есть. // // Возвращаемое значение: // Булево - Истина - поток выполняется или выполнен, Ложь - поток не запущен или прерван. // -Процедура ВыполнитьПоток(ОписаниеПотоков, Поток, ИдентификаторФормы = Неопределено) +Процедура ВыполнитьПоток(Группы, Поток, ИдентификаторФормы = Неопределено) - ОписаниеПотока = ОписаниеПотоков.Группы[Поток.Группа]; + ОписаниеПотока = Группы[Поток.Группа]; Если Не ПустаяСтрока(ОписаниеПотока.Процедура) И Поток.ПараметрыПроцедуры <> Неопределено Тогда ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдентификаторФормы); @@ -3429,17 +4194,15 @@ // Завершает выполнение потоков, которые завершили выполнение своих фоновых заданий. // // Параметры: -// ОписаниеПотоков - Структура - коллекция потоков (см. НовоеОписаниеПотоков()). +// ОписаниеПотоков - см. НовоеОписаниеПотоков // Параметры - Произвольный - параметры вызывающего потока, передаваемые в процедуру завершения. // // Возвращаемое значение: // Булево - Истина - завершился один или более потоков, иначе - Ложь. // -Функция ЗавершитьПотокиВыполнившиеФЗ(ОписаниеПотоков, Параметры = Неопределено) +Функция ЗавершитьПотокиВыполнившиеФЗ(Потоки, Группы) ЕстьЗавершенныеПотоки = Ложь; - Потоки = ОписаниеПотоков.Потоки; - Группы = ОписаниеПотоков.Группы; Потоки.Сортировать("ПриоритетЗавершения Убыв"); Индекс = Потоки.Количество() - 1; @@ -3448,7 +4211,7 @@ ОписаниеПотока = Группы[Поток.Группа]; ИдентификаторЗадания = Поток.ИдентификаторЗадания; - Если ИдентификаторЗадания <> Неопределено Тогда + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда Попытка ЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); Исключение @@ -3459,7 +4222,6 @@ ПараметрыВызова = Новый Массив; ПараметрыВызова.Добавить(Поток); ПараметрыВызова.Добавить(ИнформацияОбОшибке); - ПараметрыВызова.Добавить(Параметры); ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПриАварийномЗавершении, ПараметрыВызова); Иначе @@ -3468,21 +4230,21 @@ КонецПопытки; КонецЕсли; - Если ИдентификаторЗадания = Неопределено Или ЗаданиеВыполнено <> Ложь Тогда + Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Или ЗаданиеВыполнено <> Ложь Тогда Выполнять = Не ПустаяСтрока(ОписаниеПотока.ПроцедураЗавершения) И Поток.ПараметрыПроцедурыЗавершения <> Неопределено - И (ИдентификаторЗадания = Неопределено Или ЗаданиеВыполнено = Истина); + И (Не ЗначениеЗаполнено(ИдентификаторЗадания) Или ЗаданиеВыполнено = Истина); Если Выполнять Тогда ПараметрыВызова = Новый Массив; ПараметрыВызова.Добавить(Поток.ПараметрыПроцедурыЗавершения); ПараметрыВызова.Добавить(Поток.АдресРезультата); - ПараметрыВызова.Добавить(Параметры); ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПроцедураЗавершения, ПараметрыВызова); КонецЕсли; УдалитьИзВременногоХранилища(Поток.АдресРезультата); + УдалитьПотокОбновления(Поток.ИдентификаторПотока); Потоки.Удалить(Поток); ЕстьЗавершенныеПотоки = Истина; КонецЕсли; @@ -3497,15 +4259,15 @@ // Ожидать завершение всех потоков. // // Параметры: -// ОписаниеПотоков - Структура - коллекция потоков (см. НовоеОписаниеПотоков()). +// ОписаниеПотоков - см. НовоеОписаниеПотоков // Параметры - Произвольный - параметры вызывающего потока, передаваемые в процедуру завершения. // -Процедура ОжидатьЗавершениеВсехПотоков(ОписаниеПотоков, Параметры = Неопределено) +Процедура ОжидатьЗавершениеВсехПотоков(Группы) - Потоки = ОписаниеПотоков.Потоки; + Потоки = ПотокиОбновления(); Пока Потоки.Количество() > 0 Цикл - Если Не ЗавершитьПотокиВыполнившиеФЗ(ОписаниеПотоков, Параметры) Тогда + Если Не ЗавершитьПотокиВыполнившиеФЗ(Потоки, Группы) Тогда ОжидатьЗавершениеПотока(Потоки[0]); КонецЕсли; КонецЦикла; @@ -3515,16 +4277,16 @@ // Ожидать завершение любого потока. // // Параметры: -// ОписаниеПотоков - Структура - коллекция потоков (см. НовоеОписаниеПотоков()). +// ОписаниеПотоков - см. НовоеОписаниеПотоков // Параметры - Произвольный - параметры вызывающего потока, передаваемые в процедуру завершения. // -Процедура ОжидатьЗавершениеЛюбогоПотока(ОписаниеПотоков, Параметры = Неопределено) +Процедура ОжидатьЗавершениеЛюбогоПотока(Группы) - Потоки = ОписаниеПотоков.Потоки; + Потоки = ПотокиОбновления(); КоличествоПотоков = Потоки.Количество(); Пока КоличествоПотоков > 0 И Потоки.Количество() >= КоличествоПотоков Цикл - Если Не ЗавершитьПотокиВыполнившиеФЗ(ОписаниеПотоков, Параметры) Тогда + Если Не ЗавершитьПотокиВыполнившиеФЗ(Потоки, Группы) Тогда ОжидатьЗавершениеПотока(Потоки[0]); КонецЕсли; КонецЦикла; @@ -3534,16 +4296,17 @@ // Ожидать, пока количество выполняющихся потоков не станет меньше максимального. // // Параметры: -// ОписаниеПотоков - Структура - коллекция потоков (см. НовоеОписаниеПотоков()). +// ОписаниеПотоков - см. НовоеОписаниеПотоков // Параметры - Произвольный - параметры вызывающего потока, передаваемые в процедуру завершения. // -Процедура ОжидатьСвободныйПоток(ОписаниеПотоков, Параметры = Неопределено) +Процедура ОжидатьСвободныйПоток(Группы) МаксимумПотоков = КоличествоПотоковОбновленияИнформационнойБазы(); - Потоки = ОписаниеПотоков.Потоки; + + Потоки = ПотокиОбновления(); Пока Потоки.Количество() >= МаксимумПотоков Цикл - Если ЗавершитьПотокиВыполнившиеФЗ(ОписаниеПотоков, Параметры) Тогда + Если ЗавершитьПотокиВыполнившиеФЗ(Потоки, Группы) Тогда Продолжить; КонецЕсли; @@ -3556,43 +4319,27 @@ // Отменить выполнение потоков, если они активны. // // Параметры: -// ОписаниеПотоков - Структура - коллекция потоков (см. НовоеОписаниеПотоков()). +// ОписаниеПотоков - см. НовоеОписаниеПотоков // ПараметрыОтмены - Произвольный - параметры процедуры ПриОтменеПотока. // -Процедура ОтменитьВыполнениеВсехПотоков(ОписаниеПотоков, ПараметрыОтмены = Неопределено) Экспорт +Процедура ОтменитьВыполнениеВсехПотоков(Группы) Экспорт - Если ОписаниеПотоков <> Неопределено Тогда - Потоки = ОписаниеПотоков.Потоки; - Группы = ОписаниеПотоков.Группы; + Потоки = ПотокиОбновления(); + Для Каждого Поток Из Потоки Цикл + ОписаниеПотока = Группы[Поток.Группа]; - Если Потоки <> Неопределено Тогда - УдаляемыеПотоки = Новый Массив; - Индекс = 0; - - Пока Индекс < Потоки.Количество() Цикл - Поток = Потоки[Индекс]; - ОписаниеПотока = Группы[Поток.Группа]; - - Если Поток.ИдентификаторЗадания <> Неопределено Тогда - ДлительныеОперации.ОтменитьВыполнениеЗадания(Поток.ИдентификаторЗадания); - КонецЕсли; - - Если ОписаниеПотока.ПриОтменеПотока <> Неопределено Тогда - ПараметрыВызова = Новый Массив; - ПараметрыВызова.Добавить(Поток); - ПараметрыВызова.Добавить(ПараметрыОтмены); - ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПриОтменеПотока, ПараметрыВызова); - КонецЕсли; - - УдаляемыеПотоки.Добавить(Поток); - Индекс = Индекс + 1; - КонецЦикла; - - Для каждого УдаляемыйПоток Из УдаляемыеПотоки Цикл - Потоки.Удалить(УдаляемыйПоток); - КонецЦикла; + Если ЗначениеЗаполнено(Поток.ИдентификаторЗадания) Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(Поток.ИдентификаторЗадания); КонецЕсли; - КонецЕсли; + + Если ОписаниеПотока.ПриОтменеПотока <> Неопределено Тогда + ПараметрыВызова = Новый Массив; + ПараметрыВызова.Добавить(Поток); + ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПриОтменеПотока, ПараметрыВызова); + КонецЕсли; + + УдалитьПотокОбновления(Поток.ИдентификаторПотока); + КонецЦикла; КонецПроцедуры @@ -3611,12 +4358,12 @@ // ** ДополнительныеПараметры - Произвольный - дополнительный параметр. // * ПриАварийномЗавершении - Строка - обработчик аварийного завершения потока. Объявление: // ПриАварийномЗавершении(Поток, ИнформацияОбОшибке, ДополнительныеПараметры), где: -// ** Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// ** Поток - см. НовоеОписаниеПотоков // ** ИнформацияОбОшибке - ИнформацияОбОшибке - описание возникшей ошибки. // ** ДополнительныеПараметры - Произвольный - дополнительный параметр. // * ПриОтменеПотока - Строка - обработчик отмены потока. Объявление: // ПриОтменеПотока(Поток, ДополнительныеПараметры), где: -// ** Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// ** Поток - см. НовоеОписаниеПотоков // ** ДополнительныеПараметры - Произвольный - дополнительный параметр. // Функция НовоеОписаниеГруппыПотоков() @@ -3634,16 +4381,17 @@ // Описание группы потоков. // // Возвращаемое значение: -// * Группы - Соответствие - описание групп потоков, где: -// ** Ключ - Строка - имя группы. -// ** Значение - см. НовоеОписаниеГруппыПотоков(). -// * Потоки - ТаблицаЗначений - описание потоков со следующими колонками: -// ** Наименование - Строка - произвольное наименование потока (используется в наименовании фонового задания). -// ** Группа - Строка - имя группы с описанием потока. -// ** ИдентификаторЗадания - УникальныйИдентификатор - уникальный идентификатор фонового задания. -// ** ПараметрыПроцедуры - Произвольный - параметры для Процедура. -// ** ПараметрыПроцедурыЗавершения - Произвольный - параметры для ПроцедураЗавершения. -// ** АдресРезультата - Строка - адрес временного хранилища для сохранения результата выполнения фонового задания. +// Структура: +// * Группы - Соответствие - описание групп потоков, где: +// ** Ключ - Строка - имя группы. +// ** Значение - см. НовоеОписаниеГруппыПотоков +// * Потоки - ТаблицаЗначений - описание потоков со следующими колонками: +// ** Наименование - Строка - произвольное наименование потока (используется в наименовании фонового задания). +// ** Группа - Строка - имя группы с описанием потока. +// ** ИдентификаторЗадания - УникальныйИдентификатор - уникальный идентификатор фонового задания. +// ** ПараметрыПроцедуры - Произвольный - параметры для Процедура. +// ** ПараметрыПроцедурыЗавершения - Произвольный - параметры для ПроцедураЗавершения. +// ** АдресРезультата - Строка - адрес временного хранилища для сохранения результата выполнения фонового задания. // Функция НовоеОписаниеПотоков() @@ -3653,15 +4401,12 @@ Колонки.Добавить("Группа"); Колонки.Добавить("ПриоритетЗавершения", Новый ОписаниеТипов("Число")); Колонки.Добавить("ИдентификаторЗадания"); + Колонки.Добавить("ИдентификаторПотока"); Колонки.Добавить("ПараметрыПроцедуры"); Колонки.Добавить("ПараметрыПроцедурыЗавершения"); Колонки.Добавить("АдресРезультата"); - Описание = Новый Структура; - Описание.Вставить("Группы", Новый Соответствие); - Описание.Вставить("Потоки", Потоки); - - Возврат Описание; + Возврат Потоки; КонецФункции @@ -3676,7 +4421,7 @@ // Функция ОжидатьЗавершениеПотока(Поток, Длительность = 1) - Если Поток.ИдентификаторЗадания <> Неопределено Тогда + Если ЗначениеЗаполнено(Поток.ИдентификаторЗадания) Тогда Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Поток.ИдентификаторЗадания); Если Задание <> Неопределено Тогда @@ -3696,7 +4441,7 @@ // Найти порцию данных для потока обработчика обновления. // // Параметры: -// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции(). +// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции // АдресРезультата - Строка - адрес результата выполнения процедуры. Возвращается таблица значений. // Процедура НайтиПорциюДляОбновления(ПараметрыПоиска, АдресРезультата) Экспорт @@ -3756,8 +4501,7 @@ // Проверить корректность заполнения параметров выборки данных обработчика обновления. // // Параметры: -// ПараметрыВыборки - см. -// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(). +// ПараметрыВыборки - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки // Процедура ПроверитьПараметрыВыборки(ПараметрыВыборки) @@ -3787,7 +4531,7 @@ // Установить границу начала выборки порции. // // Параметры: -// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции(). +// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции // СсылочныйИндекс - Число - номер итерации по ссылочным объектам. // ТабличныйИндекс - Число - номер итерации по табличным объектам. // @@ -3810,7 +4554,7 @@ // Установить границу конца выборки порции. // // Параметры: -// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции(). +// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции // СсылочныйОбъект - Строка - полное имя ссылочного объекта метаданных. // ТабличныйОбъект - Строка - полное имя табличного объекта метаданных. // @@ -3833,8 +4577,7 @@ // Выбрать данные порции указанным способом. // // Параметры: -// ПараметрыВыборки - см. -// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(). +// ПараметрыВыборки - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки // Очередь - Число - номер очереди. // СсылочныйОбъект - Строка - полное имя ссылочного объекта метаданных. // ТабличныйОбъект - Строка - полное имя табличного объекта метаданных. @@ -3872,7 +4615,7 @@ // По сути найти границу начала выборки (то место, где остановились в последний раз). // // Параметры: -// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции(). +// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции // // Возвращаемое значение: // Структура - параметры поиска, со следующими полями: @@ -3926,7 +4669,7 @@ // Получить следующую порцию параметров обхода данных для обновления. // // Параметры: -// ПараметрыОбхода - см. ПараметрыОбходаДанныхДляОбновления(). +// ПараметрыОбхода - см. ПараметрыОбходаДанныхДляОбновления // // Возвращаемое значение: // * Структура - параметры обхода текущей итерации в виде структуры со следующими полями: @@ -3964,7 +4707,7 @@ // Перейти к следующим параметрам выборки, если не было выбрано ни одной записи с текущими параметрами. // // Параметры: -// ПараметрыОбхода - см. ПараметрыОбходаДанныхДляОбновления(). +// ПараметрыОбхода - см. ПараметрыОбходаДанныхДляОбновления // ПолнаяВыборка - Булево - Истина, если выбрано максимум записей. // Процедура СледующиеПараметрыОбхода(ПараметрыОбхода, ПолнаяВыборка) @@ -3989,7 +4732,7 @@ // Получить поля упорядочивания для заданных параметров поиска порции. // // Параметры: -// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции(). +// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции // // Возвращаемое значение: // Строка - Массив - поля упорядочивания. @@ -4026,17 +4769,19 @@ // Получить результат поиска, разбить его на порции и запустить потоки обновления. // // Параметры: -// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции(). -// АдресРезультата - Строка - адрес результата выполнения НайтиПорциюДляОбновления(). -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// ПараметрыПоиска - см. НовыеПараметрыПоискаПорции +// АдресРезультата - Строка - адрес результата выполнения НайтиПорциюДляОбновления +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // -Процедура ЗавершитьПоискПорцииДляОбновления(ПараметрыПоиска, АдресРезультата, СведенияОбОбновлении) Экспорт +Процедура ЗавершитьПоискПорцииДляОбновления(ПараметрыПоиска, АдресРезультата) Экспорт РезультатПоиска = ПолучитьИзВременногоХранилища(АдресРезультата); - ОписаниеПотоков = СведенияОбОбновлении.ОписаниеПотоков; + Группы = НовоеОписаниеГруппПотоковОбработчиковОтложенногоОбновления(); КонтекстОбработчика = ПараметрыПоиска.КонтекстОбработчика; - ОписаниеПроцедурыЗаполнения = СведенияОбОбновлении.ОбрабатываемыеДанные[КонтекстОбработчика.ИмяОбработчика]; - ПорцииДляОбновления = ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления; + + ОбработчикОбновления = ОбработчикОбновления(КонтекстОбработчика.ИмяОбработчика); + ОписаниеПроцедурыЗаполнения = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); + ПорцииДляОбновления = ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления; // см. НоваяТаблицаПорцийДляОбновления ИдентификаторПорции = ПараметрыПоиска.ИдентификаторПорции; ЕстьИдентификатор = ИдентификаторПорции <> Неопределено; СтараяПорция = ?(ЕстьИдентификатор, ПорцииДляОбновления.Найти(ИдентификаторПорции, "Идентификатор"), Неопределено); @@ -4057,7 +4802,11 @@ Если РезультатПоиска.Количество > 0 Тогда МаксимумПотоков = КоличествоПотоковОбновленияИнформационнойБазы(); - СвободныхПотоков = МаксимумПотоков - ОписаниеПотоков.Потоки.Количество() + 1; + ПотокиОбновления = ПотокиОбновления(); + СвободныхПотоков = МаксимумПотоков - ПотокиОбновления.Количество() + 1; + Если СвободныхПотоков = 0 Тогда + СвободныхПотоков = 1; + КонецЕсли; Фрагменты = РазбитьРезультатПоискаНаФрагменты(РезультатПоиска, СвободныхПотоков); КоличествоФрагментов = Фрагменты.Количество(); @@ -4077,42 +4826,53 @@ Порция.ПоследняяЗапись = Фрагмент.ПоследняяЗапись; Порция.Обрабатывается = Истина; - ОбработатьФрагментДанныхВПотоке(Фрагмент, ОписаниеПотоков, КонтекстОбработчика); + ОбработатьФрагментДанныхВПотоке(Фрагмент, Группы, КонтекстОбработчика); КонецЦикла; Иначе Фрагмент = НоваяПорцияДляОбновления(); Фрагмент.НаборДанных = НовыйНаборДанныхДляОбновления(); - ОбработатьФрагментДанныхВПотоке(Фрагмент, ОписаниеПотоков, КонтекстОбработчика); + ОбработатьФрагментДанныхВПотоке(Фрагмент, Группы, КонтекстОбработчика); КонецЕсли; ОписаниеПроцедурыЗаполнения.ВыполняетсяПоискПорции = Ложь; + УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, + "ОбрабатываемыеДанные", + Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения)); КонецПроцедуры // Обработчик аварийного завершения выполнения потока поиска порции для обновления. // // Параметры: -// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// Поток - см. НовоеОписаниеПотоков // ИнформацияОбОшибке - ИнформацияОбОшибке - описание возникшей ошибки. -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы. // -Процедура ПриАварийномЗавершенииПотокаПоискаПорцииДляОбновления(Поток, ИнформацияОбОшибке, СведенияОбОбновлении) Экспорт +Процедура ПриАварийномЗавершенииПотокаПоискаПорцииДляОбновления(Поток, ИнформацияОбОшибке) Экспорт - Описание = СведенияОбОбновлении.ОбрабатываемыеДанные[Поток.ПараметрыПроцедуры.ИмяОбработчика]; + ОбработчикОбновления = ОбработчикОбновления(Поток.ПараметрыПроцедуры.ИмяОбработчика); + Описание = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); Описание.ВыполняетсяПоискПорции = Ложь; + УстановитьСвойствоОбработчика(Поток.ПараметрыПроцедуры.ИмяОбработчика, + "ОбрабатываемыеДанные", + Новый ХранилищеЗначения(Описание)); КонецПроцедуры // Обработчик отмены выполнения потока поиска порции для обновления. // // Параметры: -// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// Поток - см. НовоеОписаниеПотоков +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // -Процедура ПриОтменеПотокаПоискаПорцииДляОбновления(Поток, СведенияОбОбновлении) Экспорт +Процедура ПриОтменеПотокаПоискаПорцииДляОбновления(Поток) Экспорт - Описание = СведенияОбОбновлении.ОбрабатываемыеДанные[Поток.ПараметрыПроцедуры.ИмяОбработчика]; + ОбработчикОбновления = ОбработчикОбновления(Поток.ПараметрыПроцедуры.ИмяОбработчика); + Описание = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); Описание.ВыполняетсяПоискПорции = Ложь; + УстановитьСвойствоОбработчика(Поток.ПараметрыПроцедуры.ИмяОбработчика, + "ОбрабатываемыеДанные", + Новый ХранилищеЗначения(Описание)); КонецПроцедуры @@ -4120,12 +4880,14 @@ // Удалить обработанную порцию данных. // // Параметры: -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // -Процедура ЗавершитьВыполнениеМногопоточногоОбработчика(КонтекстОбработчика, СведенияОбОбновлении) +Процедура ЗавершитьВыполнениеМногопоточногоОбработчика(КонтекстОбработчика, ИмяОбработчика) - ОписаниеПроцедурыЗаполнения = СведенияОбОбновлении.ОбрабатываемыеДанные[КонтекстОбработчика.ИмяОбработчика]; + ОбработчикОбновления = ОбработчикОбновления(ИмяОбработчика); + + ОписаниеПроцедурыЗаполнения = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); ПорцииДляОбновления = ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления; Если ПорцииДляОбновления <> Неопределено Тогда @@ -4140,19 +4902,29 @@ КонецЕсли; КонецЕсли; + УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, + "ОбрабатываемыеДанные", + Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения)); + КонецПроцедуры // Отменить обработку данных многопоточного обработчика обновления. // Отметить, что найденную порцию данных нужно будет обрабатывать повторно. // // Параметры: -// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// Поток - СтрокаТаблицыЗначений - с колонками: +// * Наименование - Строка - произвольное наименование потока (используется в наименовании фонового задания). +// * Группа - Строка - имя группы с описанием потока. +// * ИдентификаторЗадания - УникальныйИдентификатор - уникальный идентификатор фонового задания. +// * ПараметрыПроцедуры - см. НовыйКонтекстОбработчика +// * ПараметрыПроцедурыЗавершения - Произвольный - параметры для ПроцедураЗавершения. +// * АдресРезультата - Строка - адрес временного хранилища для сохранения результата выполнения фонового задания. // ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // -Процедура ОтменитьОбработкуДанныхМногопоточногоОбработчика(Поток, ОбработчикОбновления, СведенияОбОбновлении) +Процедура ОтменитьОбработкуДанныхМногопоточногоОбработчика(Поток, ОбработчикОбновления) - ОписаниеПроцедурыЗаполнения = СведенияОбОбновлении.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; + ОписаниеПроцедурыЗаполнения = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); ПорцииДляОбновления = ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления; Если ПорцииДляОбновления <> Неопределено Тогда @@ -4167,13 +4939,17 @@ КонецЕсли; КонецЕсли; + УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, + "ОбрабатываемыеДанные", + Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения)); + КонецПроцедуры // Сохранить результат первого поиска данных для многопоточного обработчика. // // Параметры: -// РезультатПоиска - см. НовыйРезультатПоискаПорции(). -// ОписаниеПроцедурыЗаполнения - см. НовоеОписаниеОбрабатываемыхДанных(). +// РезультатПоиска - см. НовыйРезультатПоискаПорции +// ОписаниеПроцедурыЗаполнения - см. НовоеОписаниеОбрабатываемыхДанных // Процедура СохранитьРезультатПервогоПоиска(РезультатПоиска, ОписаниеПроцедурыЗаполнения) @@ -4195,8 +4971,8 @@ // Сохранить результат повторного (после ошибки) поиска данных для многопоточного обработчика. // // Параметры: -// РезультатПоиска - см. НовыйРезультатПоискаПорции(). -// ОписаниеПроцедурыЗаполнения - см. НовоеОписаниеОбрабатываемыхДанных(). +// РезультатПоиска - см. НовыйРезультатПоискаПорции +// ОписаниеПроцедурыЗаполнения - см. НовоеОписаниеОбрабатываемыхДанных // ИдентификаторПорции - УникальныйИдентификатор - идентификатор порции для которой искались данные. // Процедура СохранитьРезультатПовторногоПоиска(РезультатПоиска, ОписаниеПроцедурыЗаполнения, ИдентификаторПорции) @@ -4214,8 +4990,8 @@ // Сохранить результат поиска данных для многопоточного обработчика. // // Параметры: -// РезультатПоиска - см. НовыйРезультатПоискаПорции(). -// ОписаниеПроцедурыЗаполнения - см. НовоеОписаниеОбрабатываемыхДанных(). +// РезультатПоиска - см. НовыйРезультатПоискаПорции +// ОписаниеПроцедурыЗаполнения - см. НовоеОписаниеОбрабатываемыхДанных // Процедура СохранитьРезультатПоиска(РезультатПоиска, ОписаниеПроцедурыЗаполнения) @@ -4231,11 +5007,11 @@ // Разбить найденные данные на указанное количество порций. // // Параметры: -// РезультатПоиска - см. НовыйРезультатПоискаПорции(). +// РезультатПоиска - см. НовыйРезультатПоискаПорции // КоличествоФрагментов - Число - количество фрагментов на которые нужно разбить данные. // // Возвращаемое значение: -// НаборПорций - см. НовыйНаборПорцийДляОбновления(). +// НаборПорций - см. НовыйНаборПорцийДляОбновления // Функция РазбитьРезультатПоискаНаФрагменты(РезультатПоиска, Знач КоличествоФрагментов) @@ -4320,12 +5096,11 @@ // Определяет, есть ли в обработчике порции, которые можно было бы обновить в новом потоке. // // Параметры: -// ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). -// -Функция ЕстьПорцииДляОбновления(ОбработчикОбновления, СведенияОбОбновлении) +// ОбработчикОбновления - СтрокаТаблицыЗначений - обработчик обновления в виде строки дерева обработчиков. +// +Функция ЕстьПорцииДляОбновления(ОбработчикОбновления) - Описание = СведенияОбОбновлении.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; + Описание = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); Если Описание.ВыполняетсяПоискПорции Тогда Возврат Ложь; @@ -4348,7 +5123,7 @@ // Получить ключ записи первой строки набора данных. // // Параметры: -// НаборДанных - см. НовыйНаборДанныхДляОбновления(). +// НаборДанных - см. НовыйНаборДанныхДляОбновления // // Возвращаемое значение: // СписокЗначений - ключ записи. @@ -4366,7 +5141,7 @@ // Получить ключ записи последней строки набора данных. // // Параметры: -// НаборДанных - см. НовыйНаборДанныхДляОбновления(). +// НаборДанных - см. НовыйНаборДанныхДляОбновления // // Возвращаемое значение: // СписокЗначений - ключ записи. @@ -4384,7 +5159,7 @@ // Таблица с описанием порций обновляемых данных. // // Возвращаемое значение: -// ТаблицаЗначений - описание порций со следующей структурой: +// ТаблицаЗначений: // * Идентификатор - УникальныйИдентификатор - идентификатор порции. // * ПерваяЗапись - СписокЗначений - первая запись в порции, где: // ** Представление - Строка - имя поля. @@ -4418,9 +5193,8 @@ // Структура - описание со следующими полями: // * ДанныеОбработчика - Соответствие - данные регистрируемые и обрабатываемые обработчиком обновления. // * ВыполняетсяПоискПорции - Булево - признак наличия потока, выполняющего поиск порции данных для обновления. -// * ПараметрыВыборки - см. -// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(). -// * ПорцииДляОбновления - см. НоваяТаблицаПорцийДляОбновления(). +// * ПараметрыВыборки - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки +// * ПорцииДляОбновления - см. НоваяТаблицаПорцийДляОбновления // * ПоследняяВыбраннаяЗапись - СписокЗначений - описание начала отбора при страничной выборке: // ** Представление - Строка - имя поля. // ** Значение - Произвольный - значение поля. @@ -4462,7 +5236,7 @@ // Возвращаемое значение: // Структура - отбор со следующими полями: // * ИдентификаторПорции - УникальныйИдентификатор - идентификатор порции для которой ищутся данные. -// * КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// * КонтекстОбработчика - см. НовыйКонтекстОбработчика // * ПоследняяВыбраннаяЗапись - СписокЗначений - описание начала отбора при страничной выборке: // ** Представление - Строка - имя поля. // ** Значение - Произвольный - значение поля. @@ -4472,8 +5246,7 @@ // * ПоследняяЗапись - СписокЗначений - последняя запись в порции, где: // ** Представление - Строка - имя поля. // ** Значение - Произвольный - значение поля ключа. -// * ПараметрыВыборки - см. -// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(). +// * ПараметрыВыборки - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки // * Очередь - Число - номер очереди обработчика. // Функция НовыеПараметрыПоискаПорции() @@ -4562,7 +5335,7 @@ // Является результатом разбиения найденных данных на фрагменты. // // Возвращаемое значение: -// Массив - массив структур (см. НоваяПорцияДляОбновления()). +// Массив из см. НоваяПорцияДляОбновления // Функция НовыйНаборПорцийДляОбновления() @@ -4577,7 +5350,7 @@ // * Идентификатор - УникальныйИдентификатор - идентификатор порции. // * ПерваяЗапись - СписокЗначений - ключ первой записи порции (см. НовыйКлючЗаписиИзДанныхПорции()). // * ПоследняяЗапись - СписокЗначений - ключ последней записи порции (см. НовыйКлючЗаписиИзДанныхПорции()). -// * НаборДанных - ТаблицаЗначений - набор данных для обновления (см. НовыйНаборДанныхДляОбновления()). +// * НаборДанных - см. НовыйНаборДанныхДляОбновления // Функция НоваяПорцияДляОбновления() @@ -4596,7 +5369,7 @@ // Возвращаемое значение: // Структура - результат поиска со следующими полями: // Количество - Число - количество выбранных записей. -// НаборДанных - см. НовыйНаборДанныхДляОбновления(). +// НаборДанных - см. НовыйНаборДанныхДляОбновления // ПоискЗавершен - Булево - Истина, если искать больше нечего. // Функция НовыйРезультатПоискаПорции() @@ -4613,11 +5386,11 @@ // Найти первую не обработанную порцию (обработка которой завершилась аварийно). // // Параметры: -// ПорцииДляОбновления - см. НоваяТаблицаПорцийДляОбновления(). +// ПорцииДляОбновления - см. НоваяТаблицаПорцийДляОбновления // // Возвращаемое значение: -// * СтрокаТаблицыЗначений - найденная порция. -// * Неопределено - если необработанных порций нет. +// СтрокаТаблицыЗначений - найденная порция. +// Неопределено - если необработанных порций нет. // Функция ПерваяНеобработаннаяПорция(ПорцииДляОбновления) @@ -4682,7 +5455,7 @@ Продолжить; КонецЕсли; Задание.Ключ = Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ.Ключ; - Задание.Записать(); + Задание.Записать(); // АПК:1363 регламентное задание не участвует в обменах. КонецЦикла; КонецПроцедуры @@ -4753,6 +5526,7 @@ КонецФункции +// АПК:581-выкл используется для тестирования. Функция ВозможноОперативноеОбновление(ПроверяемыеИтерацииОбновления = Неопределено) Экспорт Если ПроверяемыеИтерацииОбновления = Неопределено Тогда @@ -4863,6 +5637,7 @@ Возврат ПроцедурыОбработчиков.Количество() = 0; КонецФункции +// АПК:581-вкл. Процедура СкопироватьСтрокиВДерево(Знач СтрокиПриемника, Знач СтрокиИсточника, Знач СтруктураКолонок) @@ -4934,8 +5709,18 @@ ОтключитьОбновлениеКлючейДоступа(Истина, ПодсистемаСуществует); Попытка УстановитьПараметрыОбработчикаОбновления(Обработчик); + + НачалоОбработки = ТекущаяУниверсальнаяДатаВМиллисекундах(); ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура, ПараметрыОбработчика); + КонецОбработки = ТекущаяУниверсальнаяДатаВМиллисекундах(); + УстановитьПараметрыОбработчикаОбновления(Неопределено); + + УстанавливаемыеСвойства = Новый Структура; + УстанавливаемыеСвойства.Вставить("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + УстанавливаемыеСвойства.Вставить("ДлительностьОбработки", КонецОбработки - НачалоОбработки); + УстановитьСвойстваОбработчика(Обработчик.Процедура, УстанавливаемыеСвойства); + ОтключитьОбновлениеКлючейДоступа(Ложь, ПодсистемаСуществует); Исключение @@ -4945,15 +5730,16 @@ КонецЕсли; ИмяОбработчика = Обработчик.Процедура + "(" + ?(ПараметрыОбработчика = Неопределено, "", "Параметры") + ")"; - - ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При вызове обработчика обновления: |""%1"" |произошла ошибка: |""%2"".'"), ИмяОбработчика, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписатьОшибку(ТекстОшибки); + УстановитьСтатусОбработчика(Обработчик.Процедура, "Ошибка", ТекстОшибки); ВызватьИсключение; КонецПопытки; @@ -5010,12 +5796,36 @@ КонецПроцедуры +// Параметры: +// Обработчик - Неопределено +// - СтрокаДереваЗначений +// - Структура: +// * РежимВыполнения - Строка +// * ВерсияРегистрации - Строка +// * Версия - Строка +// Параметры - Неопределено +// - Структура: +// * Очередь - Произвольный +// * ПрогрессВыполнения - Структура: +// ** ОбработаноОбъектов - Число +// ** ВсегоОбъектов - Число +// * ОбработкаЗавершена - Булево +// ИдентификаторБиблиотеки - Произвольный +// ОбработчикОтложенный - Булево +// Возвращаемое значение: +// Структура: +// * ЗначениеНаНачало - Число +// * ОбластьДанныхИспользование - Булево +// * ОбластьДанныхЗначение - Число +// * РежимВыполнения - Строка +// * Параметры - Неопределено +// Функция ПодготовитьДетальнуюИнформациюОХодеОбновления(Обработчик, Параметры, ИдентификаторБиблиотеки, ОбработчикОтложенный = Ложь) ОписаниеОбработчика = Новый Структура; ОписаниеОбработчика.Вставить("Библиотека", ИдентификаторБиблиотеки); Если ОбработчикОтложенный Тогда - ОписаниеОбработчика.Вставить("Версия", Обработчик.НомерВерсии); + ОписаниеОбработчика.Вставить("Версия", Обработчик.Версия); ОписаниеОбработчика.Вставить("Процедура", Обработчик.ИмяОбработчика); Иначе ОписаниеОбработчика.Вставить("Версия", Обработчик.Версия); @@ -5195,46 +6005,60 @@ Функция КоличествоОбработчиковНаТекущуюВерсию(ИтерацииОбновления, РежимВыполненияОтложенногоОбновления) - КоличествоОбработчиков = 0; - - // Монопольные обработчики обновления. - Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + УчитыватьПроцедурыРегистрации = Истина; + Если РежимВыполненияОтложенногоОбновления = "Отложенно" Тогда + КлиентСервер = Не ОбщегоНазначения.ИнформационнаяБазаФайловая(); + Коробка = Не ОбщегоНазначения.РазделениеВключено(); - ОбработчикиПоВерсиям = ОбработчикиОбновленияВИнтервале( - ИтерацияОбновления.Обработчики, ИтерацияОбновления.ПредыдущаяВерсия, ИтерацияОбновления.Версия); - Для Каждого СтрокаОбработчикиВерсия Из ОбработчикиПоВерсиям.Строки Цикл - КоличествоОбработчиков = КоличествоОбработчиков + СтрокаОбработчикиВерсия.Строки.Количество(); - КонецЦикла; - - КонецЦикла; - - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - // Отложенные обработчики обновления. - Если РежимВыполненияОтложенногоОбновления = "Монопольно" Тогда - ПланОтложенногоОбновления = СведенияОбОбновлении.ПланОтложенногоОбновления; - Для Каждого ЦиклОбновления Из ПланОтложенногоОбновления Цикл - КоличествоОбработчиков = КоличествоОбработчиков + ЦиклОбновления.Обработчики.Количество(); - КонецЦикла; + Если КлиентСервер И Коробка Тогда + // Регистрация данных выполняется позже. + УчитыватьПроцедурыРегистрации = Ложь; + КонецЕсли; КонецЕсли; - // Процедуры регистрации параллельных отложенных обработчиков обновления. - ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; - Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Для Каждого СтрокаБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Если ОписанияБиблиотек[СтрокаБиблиотека.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков <> "Параллельно" Тогда - Продолжить; - КонецЕсли; - Для Каждого СтрокаВерсия Из СтрокаБиблиотека.Строки Цикл - ПараллельноСВерсии = ОписанияБиблиотек[СтрокаБиблиотека.ИмяБиблиотеки].ПараллельноеОтложенноеОбновлениеСВерсии; - Если СтрокаВерсия.НомерВерсии = "*" - Или (ЗначениеЗаполнено(ПараллельноСВерсии) - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СтрокаВерсия.НомерВерсии, ПараллельноСВерсии) < 0) Тогда - Продолжить; - КонецЕсли; - - КоличествоОбработчиков = КоличествоОбработчиков + СтрокаВерсия.Строки.Количество(); - КонецЦикла; - КонецЦикла; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.УстановитьПараметр("РежимВыполненияОтложенногоОбработчика", Перечисления.РежимыВыполненияОтложенныхОбработчиков.Параллельно); + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(ОбработчикиОбновления.ИмяОбработчика) КАК Количество + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения <> &РежимВыполнения + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | КОЛИЧЕСТВО(ОбработчикиОбновленияОбщихДанных.ИмяОбработчика) КАК Количество + |ИЗ + | РегистрСведений.ОбработчикиОбновленияОбщихДанных КАК ОбработчикиОбновленияОбщихДанных + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | КОЛИЧЕСТВО(ОбработчикиОбновления.ИмяОбработчика) КАК Количество + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | КОЛИЧЕСТВО(ОбработчикиОбновления.ИмяОбработчика) КАК Количество + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполненияОтложенногоОбработчика = &РежимВыполненияОтложенногоОбработчика"; + Результат = Запрос.Выполнить().Выгрузить(); + + КоличествоОбработчиков = Результат[0].Количество + Результат[1].Количество; + Если РежимВыполненияОтложенногоОбновления = "Монопольно" Тогда + КоличествоОбработчиков = КоличествоОбработчиков + Результат[2].Количество; + КонецЕсли; + Если УчитыватьПроцедурыРегистрации Тогда + КоличествоОбработчиков = КоличествоОбработчиков + Результат[3].Количество; КонецЕсли; Возврат Новый Структура("ВсегоОбработчиков, ВыполненоОбработчиков", КоличествоОбработчиков, 0); @@ -5345,8 +6169,8 @@ ОписаниеСеанса.Вставить("НомерСоединения"); ОписаниеСеанса.Вставить("Пользователь"); ЗаполнитьЗначенияСвойств(ОписаниеСеанса, ПолучитьТекущийСеансИнформационнойБазы()); - ОписаниеСеанса.Пользователь = ОписаниеСеанса.Пользователь.Имя; - + Пользователь = ОписаниеСеанса.Пользователь; // ПользовательИнформационнойБазы + ОписаниеСеанса.Пользователь = Пользователь.Имя; ИмяПараметра = "СтандартныеПодсистемы.ОбновлениеВерсииИБ.СеансОбновленияИнформационнойБазы"; МожноВыполнятьОбновление = Истина; @@ -5643,211 +6467,6 @@ КонецФункции -Функция ВыполненныеОбработчикиПрошлыхВерсий(ИтерацииОбновления) - - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("Статус"); - ПараметрыПоиска.Вставить("ИмяБиблиотеки"); - - Если СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно <> Истина - И СведенияОбОбновлении.ДеревоОбработчиков <> Неопределено - И СведенияОбОбновлении.ДеревоОбработчиков.Строки.Количество() > 0 Тогда - - ВыполнитьПроверкуДереваОтложенныхОбработчиков(СведенияОбОбновлении.ДеревоОбработчиков, Истина); - - НеобходимоСохранитьНевыполненныеОбработчики = Ложь; - Для Каждого Библиотека Из ИтерацииОбновления Цикл - ПараметрыПоиска.ИмяБиблиотеки = Библиотека.Подсистема; - - // Сброс количество попыток у обработчиков со статусом "Ошибка". - ПараметрыПоиска.Статус = "Ошибка"; - ОбработчикиСОшибкой = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(ПараметрыПоиска, Истина); - ПроверитьОтложенныеОбработчики(ОбработчикиСОшибкой, Библиотека, НеобходимоСохранитьНевыполненныеОбработчики); - - // Поиск невыполненных обработчиков, которые необходимо сохранить для повторного запуска. - ПараметрыПоиска.Статус = "НеВыполнено"; - НевыполненныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(ПараметрыПоиска, Истина); - ПроверитьОтложенныеОбработчики(НевыполненныеОбработчики, Библиотека, НеобходимоСохранитьНевыполненныеОбработчики); - - // Поиск обработчиков со статусом "Выполняется". - ПараметрыПоиска.Статус = "Выполняется"; - ВыполняющиесяОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(ПараметрыПоиска, Истина); - ПроверитьОтложенныеОбработчики(ВыполняющиесяОбработчики, Библиотека, НеобходимоСохранитьНевыполненныеОбработчики); - - Если НеобходимоСохранитьНевыполненныеОбработчики Тогда - НеобходимоСохранитьНевыполненныеОбработчики = Ложь; - Иначе - СтрокаБиблиотека = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(Библиотека.Подсистема, "ИмяБиблиотеки"); - Если СтрокаБиблиотека <> Неопределено Тогда - СведенияОбОбновлении.ДеревоОбработчиков.Строки.Удалить(СтрокаБиблиотека); - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - // Удаление успешно выполненных обработчиков. - ВыполненныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус", "Выполнено"), Истина); - Для Каждого СтарыйОбработчик Из ВыполненныеОбработчики Цикл - СтрокаВерсия = СтарыйОбработчик.Родитель.Строки; - СтрокаВерсия.Удалить(СтарыйОбработчик); - КонецЦикла; - - Возврат СведенияОбОбновлении.ДеревоОбработчиков; - - КонецЕсли; - - Возврат НовыеСведенияОбОбработчикахОбновления(); - -КонецФункции - -Процедура ПроверитьОтложенныеОбработчики(ПроверяемыеОбработчики, Библиотека, НеобходимоСохранитьНевыполненныеОбработчики) - Для Каждого ПроверяемыйОбработчик Из ПроверяемыеОбработчики Цикл - Если Не ЗначениеЗаполнено(ПроверяемыйОбработчик.Идентификатор) Тогда - НайденныйОбработчик = Библиотека.Обработчики.Найти(ПроверяемыйОбработчик.ИмяОбработчика, "Процедура"); - Если НайденныйОбработчик <> Неопределено Тогда - ПроверяемыйОбработчик.Идентификатор = НайденныйОбработчик.Идентификатор; - КонецЕсли; - Иначе - ПроверитьПереименованиеОбработчика(ПроверяемыйОбработчик, Библиотека); - КонецЕсли; - - СохранитьНевыполненныеОбработчики = НеобходимоСохранитьНевыполненныйОтложенныйОбработчик(Библиотека, ПроверяемыйОбработчик); - Если СохранитьНевыполненныеОбработчики Тогда - НеобходимоСохранитьНевыполненныеОбработчики = Истина; - Иначе - СтрокаВерсия = ПроверяемыйОбработчик.Родитель.Строки; - СтрокаВерсия.Удалить(ПроверяемыйОбработчик); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -Функция НеобходимоСохранитьНевыполненныйОтложенныйОбработчик(Библиотека, Обработчик) - Если Обработчик.НомерВерсии = "*" Тогда - // Обработчик добавляется заново при каждом обновлении, сохранять не требуется. - Возврат Ложь; - КонецЕсли; - - НайденныйОбработчик = Библиотека.Обработчики.Найти(Обработчик.ИмяОбработчика, "Процедура"); - Если НайденныйОбработчик <> Неопределено И НайденныйОбработчик.Версия = "*" Тогда - // Обработчик добавляется заново при каждом обновлении, сохранять не требуется. - Возврат Ложь; - КонецЕсли; - - Если НайденныйОбработчик <> Неопределено - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(НайденныйОбработчик.Версия, Обработчик.НомерВерсии) > 0 - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(НайденныйОбработчик.Версия, Библиотека.ПредыдущаяВерсия) > 0 Тогда - // Версия проверяемого обработчика изменилась и она выше текущей версии библиотеки. - // Обработчик будет добавлен заново, сохранять не требуется. - Возврат Ложь; - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Обработчик.НомерВерсии, Библиотека.ПредыдущаяВерсия) <= 0 Тогда - // Версия проверяемого обработчика ниже или равна текущей версии библиотеки и он не будет добавлен заново - // к выполнению. Необходимо его сохранить. - Если НайденныйОбработчик = Неопределено Тогда - // Удаленный обработчик игнорируем и не сохраняем. - Возврат Ложь; - КонецЕсли; - ЗаполнитьЗначенияСвойств(Обработчик, НайденныйОбработчик); - - ПараметрыОбработчика = Обработчик.СтатистикаВыполнения["ПараметрыОбработчика"]; - - Обработчик.Статус = "НеВыполнено"; - Обработчик.СтатистикаВыполнения.Очистить(); - Если ПараметрыОбработчика <> Неопределено Тогда - Обработчик.СтатистикаВыполнения.Вставить("ПараметрыОбработчика", ПараметрыОбработчика); - КонецЕсли; - Обработчик.ИнформацияОбОшибке = ""; - Обработчик.ЧислоПопыток = 0; - Возврат Истина; - КонецЕсли; - - Возврат Ложь; -КонецФункции - -Процедура ПроверитьПереименованиеОбработчика(СтарыйОбработчик, Библиотека) - НовыйОбработчик = Библиотека.Обработчики.Найти(СтарыйОбработчик.Идентификатор, "Идентификатор"); - Если НовыйОбработчик <> Неопределено - И НовыйОбработчик.Процедура <> СтарыйОбработчик.ИмяОбработчика Тогда - СтарыйОбработчик.ИмяОбработчика = НовыйОбработчик.Процедура; - КонецЕсли; -КонецПроцедуры - -Процедура ВыполнитьПроверкуДереваОтложенныхОбработчиков(ДеревоОбработчиков, НачальнаяПроверка = Ложь) - - Если НачальнаяПроверка Тогда - НовоеДеревоОбработчиков = НовыеСведенияОбОбработчикахОбновления(); - Для Каждого Колонка Из НовоеДеревоОбработчиков.Колонки Цикл - Если ДеревоОбработчиков.Колонки.Найти(Колонка.Имя) = Неопределено Тогда - ДеревоОбработчиков.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения); - КонецЕсли; - КонецЦикла; - - УдаляемыеБиблиотеки = Новый Массив; - ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; - Для Каждого Библиотека Из ДеревоОбработчиков.Строки Цикл - БиблиотекаСуществует = (ОписанияПодсистем.Получить(Библиотека.ИмяБиблиотеки) <> Неопределено); - Если БиблиотекаСуществует Тогда - Продолжить; - КонецЕсли; - УдаляемыеБиблиотеки.Добавить(Библиотека); - КонецЦикла; - - Для Каждого УдаляемаяБиблиотека Из УдаляемыеБиблиотеки Цикл - ДеревоОбработчиков.Строки.Удалить(УдаляемаяБиблиотека); - КонецЦикла; - - Возврат; - КонецЕсли; - - ВсеОбработчики = Новый Соответствие; - УдаляемыеОбработчики = Новый Массив; - Для Каждого СтрокаДереваБиблиотека Из ДеревоОбработчиков.Строки Цикл - - Индекс = 1; - ПеремещаемаяСтрока = Неопределено; - Смещение = 0; - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - - Если СтрокаДереваВерсия.НомерВерсии = "*" - И Индекс <> 1 Тогда - ПеремещаемаяСтрока = СтрокаДереваВерсия; - Смещение = Индекс - 1; - КонецЕсли; - - Если СтрокаДереваВерсия.Строки.Количество() = 0 Тогда - СтрокаДереваВерсия.Статус = "Завершено"; - Иначе - СтрокаДереваВерсия.Статус = ""; - КонецЕсли; - - // Проверка на многократное добавление одного обработчика обновления. - Для Каждого СтрокаДереваОбработчик Из СтрокаДереваВерсия.Строки Цикл - Если ВсеОбработчики[СтрокаДереваОбработчик.ИмяОбработчика] = Неопределено Тогда - ВсеОбработчики.Вставить(СтрокаДереваОбработчик.ИмяОбработчика, СтрокаДереваОбработчик.ИмяОбработчика); - Иначе - УдаляемыеОбработчики.Добавить(СтрокаДереваОбработчик); - КонецЕсли; - КонецЦикла; - - Для Каждого Удаляемый Из УдаляемыеОбработчики Цикл - СтрокаДереваВерсия.Строки.Удалить(Удаляемый); - КонецЦикла; - УдаляемыеОбработчики.Очистить(); - - Индекс = Индекс + 1; - КонецЦикла; - - Если ПеремещаемаяСтрока <> Неопределено Тогда - СтрокаДереваБиблиотека.Строки.Сдвинуть(ПеремещаемаяСтрока, Смещение * (-1)); - ПеремещаемаяСтрока = Неопределено; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - Процедура ОтключитьОтложенноеОбновление() ПриВключенииОтложенногоОбновления(Ложь); @@ -5858,20 +6477,21 @@ ВыполненоОбработчиков = 0; ВсегоОбработчиков = 0; - Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - ВсегоОбработчиков = ВсегоОбработчиков + СтрокаДереваВерсия.Строки.Количество(); - Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл - - Если Обработчик.Статус = "Выполнено" Тогда - ВыполненоОбработчиков = ВыполненоОбработчиков + 1; - КонецЕсли; - - КонецЦикла; - КонецЦикла; - КонецЦикла; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.Статус КАК Статус + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения + | И ОбработчикиОбновления.Статус <> &Статус"; + НевыполненныеОбработчики = Запрос.Выполнить().Выгрузить(); - Если ВсегоОбработчиков = ВыполненоОбработчиков Тогда + Если НевыполненныеОбработчики.Количество() = 0 Тогда СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Истина; ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); @@ -5892,18 +6512,18 @@ // Только для внутреннего использования. // -Функция ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, ПараметрыОбновления = Неопределено) +Функция ВыполнитьОтложенныйОбработчикОбновления(ПараметрыОбновления = Неопределено) КонтекстОбработчика = НовыйКонтекстОбработчика(); - ОбработчикОбновления = НайтиОбработчикОбновления(КонтекстОбработчика, СведенияОбОбновлении, ПараметрыОбновления); + ОбработчикОбновления = НайтиОбработчикОбновления(КонтекстОбработчика, ПараметрыОбновления); - Если ТипЗнч(ОбработчикОбновления) = Тип("СтрокаДереваЗначений") Тогда + Если ТипЗнч(ОбработчикОбновления) = Тип("СтрокаТаблицыЗначений") Тогда АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено); Попытка Если ОбработчикОбновления.Многопоточный Тогда ДополнитьКонтекстМногопоточногоОбработчика(КонтекстОбработчика); - ОбрабатываемыеДанные = СведенияОбОбновлении.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; + ОбрабатываемыеДанные = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); ПараметрыВыборки = ОбрабатываемыеДанные.ПараметрыВыборки; ПараметрыВыборки.МаксимумВыборки = ОбновлениеИнформационнойБазы.МаксимальноеКоличествоЗаписейВВыборке(); ПараметрыПоиска = НовыеПараметрыПоискаПорции(); @@ -5939,7 +6559,7 @@ Если КонтекстОбработчика.ВыполнитьОбработчик Тогда ВыполнитьОтложенныйОбработчик(КонтекстОбработчика, АдресРезультата); КонецЕсли; - ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата, СведенияОбОбновлении); + ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата); Если Количество > 0 Тогда ОбрабатываемыеДанные.ПоследняяВыбраннаяЗапись = КлючЗаписиПоследнейСтрокиНабораДанных(НаборДанных); @@ -5956,7 +6576,7 @@ Если КонтекстОбработчика.ВыполнитьОбработчик Тогда ВыполнитьОтложенныйОбработчик(КонтекстОбработчика, АдресРезультата); КонецЕсли; - ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата, СведенияОбОбновлении); + ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата); КонецЕсли; Исключение ОбработатьИсключениеОбработчика(КонтекстОбработчика, ОбработчикОбновления, ИнформацияОбОшибке()); @@ -5969,207 +6589,21 @@ КонецФункции -// Найти обработчик обновления, который следует выполнить. -// -// Параметры: -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). -// ПараметрыОбновления - см. ВыполнитьОбновлениеИнформационнойБазы(). -// -// Возвращаемое значение: -// * СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. -// * Булево - Истина, если обработчик не нужно выполнять, Ложь, если выполнение обработчиков нужно завершить. -// -Функция НайтиОбработчикОбновления(КонтекстОбработчика, СведенияОбОбновлении, ПараметрыОбновления = Неопределено) - - ВключитьОтключитьОтложенныеОбработчикиОбновления(СведенияОбОбновлении); - - ПланОбновления = СведенияОбОбновлении.ПланОтложенногоОбновления; - ТекущаяИтерацияОбновления = СведенияОбОбновлении.ТекущаяИтерацияОбновления; - ТекущийЦиклОбновления = Неопределено; - ЗавершеноУспешно = Истина; - ВыполняющийсяМногопоточныйОбработчик = Неопределено; - ЦиклОбновленияМногопоточногоОбработчика = Неопределено; - ОписаниеМногопоточногоОбработчика = Неопределено; - - Пока Истина Цикл - ЕстьНевыполненные = Ложь; - ЕстьВыполняющиеся = Ложь; - ПредыдущийЦиклОбновления = Неопределено; - Для Каждого ОписаниеЦиклаОбновления Из ПланОбновления Цикл - Если ОписаниеЦиклаОбновления.Свойство("ЗавершеноСОшибками") - Или ОписаниеЦиклаОбновления.Свойство("ЕстьОстановленные") Тогда - ЗавершеноУспешно = Ложь; - Иначе - - Если (ПредыдущийЦиклОбновления <> Неопределено - И ПредыдущийЦиклОбновления.Обработчики.Количество() <> 0 - И ОписаниеЦиклаОбновления.ЗависитОтПредыдущего) - Или ОписаниеЦиклаОбновления.Обработчики.Количество() = 0 Тогда - ПредыдущийЦиклОбновления = ОписаниеЦиклаОбновления; - Продолжить; - КонецЕсли; - - ЕстьОшибки = Ложь; - ЕстьОстановленные = Ложь; - Для Каждого ОписаниеОбработчика Из ОписаниеЦиклаОбновления.Обработчики Цикл - - Если ОписаниеОбработчика.Итерация = ТекущаяИтерацияОбновления Тогда - ЕстьНевыполненные = Истина; - Продолжить; - КонецЕсли; - - ДеревоОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков.Строки; - ОбработчикОбновления = НайтиОбработчикВДереве(ДеревоОбработчиков, - ОписаниеОбработчика.Идентификатор, - ОписаниеОбработчика.ИмяОбработчика); - - Если ОбработчикОбновления.Статус = "Выполняется" И Не ОбработчикОбновления.ОбработкаПорцииЗавершена Тогда - Если ОбработчикОбновления.Многопоточный Тогда - Если ЕстьПорцииДляОбновления(ОбработчикОбновления, СведенияОбОбновлении) Тогда - ВыполняющийсяМногопоточныйОбработчик = ОбработчикОбновления; - ЦиклОбновленияМногопоточногоОбработчика = ОписаниеЦиклаОбновления; - ОписаниеМногопоточногоОбработчика = ОписаниеОбработчика; - КонецЕсли; - КонецЕсли; - - ЕстьВыполняющиеся = Истина; - Продолжить; - КонецЕсли; - - Если ОбработчикОбновления.Статус = "Приостановлен" Тогда - ЕстьОстановленные = Истина; - Продолжить; - КонецЕсли; - - МаксимумПопытокОбновления = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления); - Если ОбработчикОбновления.ЧислоПопыток >= МаксимумПопытокОбновления Тогда - Если ОбработчикОбновления.Статус = "Ошибка" Тогда - ЕстьОшибки = Истина; - Продолжить; - ИначеЕсли ВсеОбработчикиЗациклились(СведенияОбОбновлении) Тогда - ОтметитьЗациклившиесяОбработчики(СведенияОбОбновлении); - ЕстьОшибки = Истина; - Продолжить; - КонецЕсли; - КонецЕсли; - - ТекущийЦиклОбновления = ОписаниеЦиклаОбновления; - Прервать; - - КонецЦикла; - - Если ТекущийЦиклОбновления = Неопределено И ЦиклОбновленияМногопоточногоОбработчика = Неопределено Тогда - Если ЕстьОшибки Тогда - ОписаниеЦиклаОбновления.Вставить("ЗавершеноСОшибками"); - ЗавершеноУспешно = Ложь; - ИначеЕсли ЕстьОстановленные Тогда - ОписаниеЦиклаОбновления.Вставить("ЕстьОстановленные"); - КонецЕсли; - Иначе - Если ТекущийЦиклОбновления = Неопределено И ЦиклОбновленияМногопоточногоОбработчика <> Неопределено Тогда - ОбработчикОбновления = ВыполняющийсяМногопоточныйОбработчик; - ТекущийЦиклОбновления = ЦиклОбновленияМногопоточногоОбработчика; - ОписаниеОбработчика = ОписаниеМногопоточногоОбработчика; - КонецЕсли; - Прервать; - КонецЕсли; - КонецЕсли; - - ПредыдущийЦиклОбновления = ОписаниеЦиклаОбновления; - КонецЦикла; - - Если ТекущийЦиклОбновления <> Неопределено Тогда - Прервать; - ИначеЕсли ЕстьНевыполненные Тогда - ТекущаяИтерацияОбновления = ТекущаяИтерацияОбновления + 1; - СведенияОбОбновлении.ТекущаяИтерацияОбновления = ТекущаяИтерацияОбновления; - Иначе - Прервать; - КонецЕсли; - КонецЦикла; - - Если ТекущийЦиклОбновления = Неопределено Тогда - Если ЕстьВыполняющиеся Тогда - Возврат Истина; - Иначе - СведенияОбОбновлении.ПланОтложенногоОбновления = ПланОбновления; - СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); - СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = ЗавершеноУспешно; - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - Константы.ОтложенноеОбновлениеЗавершеноУспешно.Установить(ЗавершеноУспешно); - Если Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Установить(ЗавершеноУспешно); - КонецЕсли; - - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - ПараллельныйРежим = (ТекущийЦиклОбновления.Режим = "Параллельно"); - ПараметрыОбновления = ?(ПараметрыОбновления = Неопределено, Новый Структура, ПараметрыОбновления); - ПараметрыОбновления.Вставить("ПараллельныйРежим", ПараллельныйРежим); - Если ПараллельныйРежим Тогда - Отбор = Новый Структура("ЗапускатьТолькоВГлавномУзле", Истина); - РезультатПоиска = ДеревоОбработчиков.НайтиСтроки(Отбор, Истина); - ПараметрыОбновления.Вставить("ОчередьОбработчиков", ТекущийЦиклОбновления.ОчередьОбработчиков); - ПараметрыОбновления.Вставить("ПланОбновления", ПланОбновления); - ПараметрыОбновления.Вставить("ОбрабатываемыеДанные", СведенияОбОбновлении.ОбрабатываемыеДанные); - ПараметрыОбновления.Вставить("ЕстьОбработчикиГлавногоУзла", (РезультатПоиска.Количество() > 0)); - КонецЕсли; - - ДеревоОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков; - УстановитьПараметрыОбработчикаОбновления(ОбработчикОбновления, Истина, ПараллельныйРежим); - ПередЗапускомПроцедурыОбработкиДанных(КонтекстОбработчика, - ОбработчикОбновления, - ПараметрыОбновления, - СведенияОбОбновлении); - - КонтекстОбработчика.ИдентификаторОбработчика = ОписаниеОбработчика.Идентификатор; - КонтекстОбработчика.ИмяОбработчика = ОписаниеОбработчика.ИмяОбработчика; - КонтекстОбработчика.ИндексОписанияЦиклаОбновления = ПланОбновления.Найти(ОписаниеЦиклаОбновления); - КонтекстОбработчика.ИндексТекущегоЦиклаОбновления = ПланОбновления.Найти(ТекущийЦиклОбновления); - КонтекстОбработчика.ПараллельныйРежим = ПараллельныйРежим; - КонтекстОбработчика.ПараметрыОбновления = ПараметрыОбновления; - КонтекстОбработчика.ПараметрыОбработчикаОбновления = ПараметрыСеанса.ПараметрыОбработчикаОбновления; - КонтекстОбработчика.ТекущаяИтерацияОбновления = ТекущаяИтерацияОбновления; - - УстановитьПараметрыОбработчикаОбновления(Неопределено); - - Возврат ОбработчикОбновления; - -КонецФункции - // Завершить выполнение отложенного обработчика в основном потоке, после завершения работы фонового задания. // // Параметры: -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). -// СведенияОбОбновлении - см. НовыеСведенияОбОбновлении(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // -Процедура ЗавершитьВыполнениеОтложенногоОбработчикаОбновления(КонтекстОбработчика, СведенияОбОбновлении) +Процедура ЗавершитьВыполнениеОтложенногоОбработчикаОбновления(КонтекстОбработчика) ПараллельныйРежим = КонтекстОбработчика.ПараллельныйРежим; ТекущаяИтерацияОбновления = КонтекстОбработчика.ТекущаяИтерацияОбновления; - ПланОбновления = СведенияОбОбновлении.ПланОтложенногоОбновления; - ТекущийЦиклОбновления = ПланОбновления[КонтекстОбработчика.ИндексТекущегоЦиклаОбновления]; - КоллекцияОбработчиков = ТекущийЦиклОбновления.Обработчики; - ОписаниеЦиклаОбновления = ПланОбновления[КонтекстОбработчика.ИндексОписанияЦиклаОбновления]; - ОписанияОбработчиков = ОписаниеЦиклаОбновления.Обработчики; - ОписаниеОбработчика = НайтиОбработчикВТаблице(ОписанияОбработчиков, - КонтекстОбработчика.ИдентификаторОбработчика, - КонтекстОбработчика.ИмяОбработчика); + ОбработчикОбновления = ОбработчикОбновления(КонтекстОбработчика.ИмяОбработчика); + УстанавливаемыеСвойства = Новый Структура; - ОбработчикОбновления = НайтиОбработчикВДереве(СведенияОбОбновлении.ДеревоОбработчиков.Строки, - КонтекстОбработчика.ИдентификаторОбработчика, - КонтекстОбработчика.ИмяОбработчика); - - Если ОбработчикОбновления.Статус = "Выполнено" Тогда - Обработчик = КоллекцияОбработчиков.Найти(ОписаниеОбработчика); - - Если Обработчик <> Неопределено Тогда - КоллекцияОбработчиков.Удалить(КоллекцияОбработчиков.Найти(ОписаниеОбработчика)); - КонецЕсли; + Если ОбработчикОбновления.Статус = Перечисления.СтатусыОбработчиковОбновления.Выполнен Тогда СведенияОБлокируемыхОбъектах = СведенияОБлокируемыхОбъектах(); СведенияОбОбработчике = СведенияОБлокируемыхОбъектах.Обработчики[ОбработчикОбновления.ИмяОбработчика]; @@ -6177,43 +6611,37 @@ СведенияОбОбработчике.Выполнен = Истина; ЗаписатьСведенияОБлокируемыхОбъектах(СведенияОБлокируемыхОбъектах); КонецЕсли; + УстанавливаемыеСвойства.Вставить("ИнформацияОбОшибке", ""); - // В параллельном режиме обработчик удаляется из очереди, чтобы можно было определить - // обработчики каких очередей еще не завершились. - Если ПараллельныйРежим Тогда - Строка = ТекущийЦиклОбновления.ОчередьОбработчиков.Найти(ОбработчикОбновления.ИмяОбработчика, "Обработчик"); - - Если Строка <> Неопределено Тогда - ТекущийЦиклОбновления.ОчередьОбработчиков.Удалить(Строка); - КонецЕсли; - КонецЕсли; - ИначеЕсли ОбработчикОбновления.Статус = "Выполняется" Тогда + ИначеЕсли ОбработчикОбновления.Статус = Перечисления.СтатусыОбработчиковОбновления.Выполняется Тогда // Если у обработчика стоит высокий приоритет, // то он вызывается пять раз, после чего вызывается следующий обработчик. ЗапускиСПриоритетом = Неопределено; Если ОбработчикОбновления.Приоритет = "ЖелательноБыстрее" Тогда - ЗапускиСПриоритетом = ОбработчикОбновления.СтатистикаВыполнения["ЗапускиСПриоритетом"]; + СтатистикаВыполнения = ОбработчикОбновления.СтатистикаВыполнения.Получить(); + ЗапускиСПриоритетом = СтатистикаВыполнения["ЗапускиСПриоритетом"]; ЗапускиСПриоритетом = ?(ЗапускиСПриоритетом = Неопределено, 1, ?(ЗапускиСПриоритетом = 4, 0, ЗапускиСПриоритетом + 1)); - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ЗапускиСПриоритетом", ЗапускиСПриоритетом); + СтатистикаВыполнения.Вставить("ЗапускиСПриоритетом", ЗапускиСПриоритетом); + УстанавливаемыеСвойства.Вставить("СтатистикаВыполнения", Новый ХранилищеЗначения(СтатистикаВыполнения)); КонецЕсли; Если ЗапускиСПриоритетом = Неопределено Или ЗапускиСПриоритетом = 0 Тогда - ОписаниеОбработчика.Итерация = ТекущаяИтерацияОбновления; + УстанавливаемыеСвойства.Вставить("ИтерацияЗапуска", ТекущаяИтерацияОбновления); КонецЕсли; Иначе - - ОписаниеОбработчика.Итерация = ТекущаяИтерацияОбновления; + УстанавливаемыеСвойства.Вставить("ИтерацияЗапуска", ТекущаяИтерацияОбновления); КонецЕсли; - СведенияОбОбновлении.ПланОтложенногоОбновления = ПланОбновления; + УстановитьСвойстваОбработчика(ОбработчикОбновления.ИмяОбработчика, УстанавливаемыеСвойства); // В параллельном режиме обновление нужно останавливать, если обработчик не удалось выполнить, // т.к. от данных, которые он обрабатывает, могут зависеть другие обработчики. Если ПараллельныйРежим - И ОбработчикОбновления.Статус = "Ошибка" - И ОбработчикОбновления.ЧислоПопыток >= МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) Тогда + И ОбработчикОбновления.Статус = Перечисления.СтатусыОбработчиковОбновления.Ошибка + И ОбработчикОбновления.ЧислоПопыток >= МаксимумПопытокОбновления(ОбработчикОбновления) Тогда + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Ложь; ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); @@ -6227,27 +6655,6 @@ КонтекстОбработчика.ИмяОбработчика); КонецЕсли; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - Иначе - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); - Блокировка.Заблокировать(); - - НовыеСведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - СведенияОбОбновлении.УправлениеОтложеннымОбновлением = НовыеСведенияОбОбновлении.УправлениеОтложеннымОбновлением; - - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - КонецЕсли; - КонецПроцедуры Функция ПереданныеПараметрыОбработчикаОбновления(Параметры) @@ -6272,7 +6679,6 @@ СведенияОбОбновлении.Вставить("ВремяНачалаОтложенногоОбновления"); СведенияОбОбновлении.Вставить("ВремяОкончаниеОтложенногоОбновления"); СведенияОбОбновлении.Вставить("НомерСеанса", Новый СписокЗначений()); - СведенияОбОбновлении.Вставить("ПараметрыОбработчикаОбновления"); СведенияОбОбновлении.Вставить("ОтложенноеОбновлениеЗавершеноУспешно"); СведенияОбОбновлении.Вставить("ДеревоОбработчиков", Новый ДеревоЗначений()); СведенияОбОбновлении.Вставить("ВерсияДереваОбработчиков", ""); @@ -6280,12 +6686,10 @@ СведенияОбОбновлении.Вставить("ЛегальнаяВерсия", ""); СведенияОбОбновлении.Вставить("НовыеПодсистемы", Новый Массив); СведенияОбОбновлении.Вставить("УправлениеОтложеннымОбновлением", Новый Структура); - СведенияОбОбновлении.Вставить("ОбрабатываемыеДанные", Новый Соответствие); СведенияОбОбновлении.Вставить("ТекущаяИтерацияОбновления", 1); - СведенияОбОбновлении.Вставить("ПланОтложенногоОбновления"); СведенияОбОбновлении.Вставить("СеансОбновления"); - СведенияОбОбновлении.Вставить("ОписаниеПотоков"); СведенияОбОбновлении.Вставить("ВерсияУдалениеПатчей"); + СведенияОбОбновлении.Вставить("ЗависимостьГруппОбработчиков", Новый Соответствие); Если ТипЗнч(СтарыеСведения) = Тип("Структура") Тогда ЗаполнитьЗначенияСвойств(СведенияОбОбновлении, СтарыеСведения); @@ -6295,33 +6699,6 @@ КонецФункции -Функция НовыеСведенияОбОбработчикахОбновления() - - ДеревоОбработчиков = Новый ДеревоЗначений; - ДеревоОбработчиков.Колонки.Добавить("ИмяБиблиотеки"); - ДеревоОбработчиков.Колонки.Добавить("НомерВерсии"); - ДеревоОбработчиков.Колонки.Добавить("ВерсияРегистрации"); - ДеревоОбработчиков.Колонки.Добавить("Идентификатор"); - ДеревоОбработчиков.Колонки.Добавить("ИмяОбработчика"); - ДеревоОбработчиков.Колонки.Добавить("Статус"); - ДеревоОбработчиков.Колонки.Добавить("ЧислоПопыток"); - ДеревоОбработчиков.Колонки.Добавить("СтатистикаВыполнения", Новый ОписаниеТипов("Соответствие")); - ДеревоОбработчиков.Колонки.Добавить("ИнформацияОбОшибке"); - ДеревоОбработчиков.Колонки.Добавить("Комментарий"); - ДеревоОбработчиков.Колонки.Добавить("Приоритет"); - ДеревоОбработчиков.Колонки.Добавить("ПроцедураПроверки"); - ДеревоОбработчиков.Колонки.Добавить("БлокируемыеОбъекты"); - ДеревоОбработчиков.Колонки.Добавить("ПроцедураЗаполненияДанныхОбновления"); - ДеревоОбработчиков.Колонки.Добавить("ОчередьОтложеннойОбработки"); - ДеревоОбработчиков.Колонки.Добавить("ЗапускатьТолькоВГлавномУзле", Новый ОписаниеТипов("Булево")); - ДеревоОбработчиков.Колонки.Добавить("ЗапускатьИВПодчиненномУзлеРИБСФильтрами", Новый ОписаниеТипов("Булево")); - ДеревоОбработчиков.Колонки.Добавить("ОбработкаПорцииЗавершена", Новый ОписаниеТипов("Булево")); - ДеревоОбработчиков.Колонки.Добавить("Многопоточный", Новый ОписаниеТипов("Булево")); - - Возврат ДеревоОбработчиков; - -КонецФункции - Функция РежимВыполненияОтложенногоОбновления(ПараметрыОбновления) ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); @@ -6346,6 +6723,7 @@ // Получает сведения об обновлении информационной базы // из константы "СведенияОбОбновленииИБ". +// Функция СведенияОБлокируемыхОбъектах() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -6368,10 +6746,10 @@ // Подготовка запуска обработчика обновления в основном потоке. // -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. -// ПараметрыОбновления - см. ВыполнитьОбновлениеИнформационнойБазы(). -// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). +// ПараметрыОбновления - см. ВыполнитьОбновлениеИнформационнойБазы +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // Процедура ПередЗапускомПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, @@ -6392,13 +6770,14 @@ ПрогрессВыполнения = Новый Структура; ПрогрессВыполнения.Вставить("ВсегоОбъектов", 0); ПрогрессВыполнения.Вставить("ОбработаноОбъектов", 0); - Если ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"] <> Неопределено - И ТипЗнч(ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"]) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(ПрогрессВыполнения, ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"]); + СтатистикаВыполнения = ОбработчикОбновления.СтатистикаВыполнения.Получить(); + Если СтатистикаВыполнения["ПрогрессВыполнения"] <> Неопределено + И ТипЗнч(СтатистикаВыполнения["ПрогрессВыполнения"]) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ПрогрессВыполнения, СтатистикаВыполнения["ПрогрессВыполнения"]); КонецЕсли; // Инициализация параметров обработчика. - Параметры = ОбработчикОбновления.СтатистикаВыполнения["ПараметрыОбработчика"]; + Параметры = СтатистикаВыполнения["ПараметрыОбработчика"]; Если Параметры = Неопределено Тогда Параметры = Новый Структура; КонецЕсли; @@ -6422,7 +6801,7 @@ Истина); КонецЕсли; - КоличествоЗапусковПроцедурыОбновления = КоличествоЗапусковПроцедурыОбновления(ОбработчикОбновления); + КоличествоЗапусковПроцедурыОбновления = КоличествоЗапусковПроцедурыОбновления(СтатистикаВыполнения); Если КоличествоЗапусковПроцедурыОбновления > 10000 Тогда // Защита от зацикливания. Если ПараметрыОбновления.ПараллельныйРежим @@ -6437,23 +6816,27 @@ |Выполнение прервано для предотвращения зацикливания механизма обработки данных.'"); КонецЕсли; - ПланОбновления = СведенияОбОбновлении.ПланОтложенногоОбновления; - МинимальнаяОчередь = МинимальнаяОчередьОтложеннойОбработки(ПланОбновления); + МинимальнаяОчередь = МинимальнаяОчередьОтложеннойОбработки(); Если Не ПараметрыОбновления.ПараллельныйРежим Или МинимальнаяОчередь = ОбработчикОбновления.ОчередьОтложеннойОбработки Тогда - ОбработчикОбновления.ЧислоПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления); + ЧислоПопыток = МаксимумПопытокОбновления(ОбработчикОбновления); + УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, "ЧислоПопыток", ЧислоПопыток); ВызватьИсключение ТекстОшибки; КонецЕсли; КонецЕсли; // Запуск отложенного обработчика обновления. - ОбработчикОбновления.Статус = "Выполняется"; - ОбработчикОбновления.ОбработкаПорцииЗавершена = Ложь; - Если ОбработчикОбновления.СтатистикаВыполнения["НачалоОбработкиДанных"] = Неопределено Тогда - ОбработчикОбновления.СтатистикаВыполнения.Вставить("НачалоОбработкиДанных", ТекущаяДатаСеанса()); + Если СтатистикаВыполнения["НачалоОбработкиДанных"] = Неопределено Тогда + СтатистикаВыполнения.Вставить("НачалоОбработкиДанных", ТекущаяДатаСеанса()); КонецЕсли; + Свойства = Новый Структура; + Свойства.Вставить("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполняется); + Свойства.Вставить("ОбработкаПорцииЗавершена", Ложь); + Свойства.Вставить("СтатистикаВыполнения", Новый ХранилищеЗначения(СтатистикаВыполнения)); + УстановитьСвойстваОбработчика(ОбработчикОбновления.ИмяОбработчика, Свойства); + КонтекстОбработчика.НачалоОбработкиДанных = ТекущаяУниверсальнаяДатаВМиллисекундах(); Если ПараметрыОбновления.ПараллельныйРежим И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() @@ -6461,7 +6844,7 @@ // В подчиненном узле РИБ только проверяем, что обрабатываемые обработчиком данные // пришли из главного узла и обновляем статус обработчика. КонтекстОбработчика.ПропуститьПроверкуОбработанныхДанных = Истина; - ОписаниеОбрабатываемыхДанных = ПараметрыОбновления.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; + ОписаниеОбрабатываемыхДанных = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); ДанныеОбработчика = ОписаниеОбрабатываемыхДанных.ДанныеОбработчика; Если ДанныеОбработчика.Количество() = 0 Тогда @@ -6485,21 +6868,23 @@ КонтекстОбработчика.ЗапускВыполненБезОшибок = Ложь; КонецПопытки; - ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, СведенияОбОбновлении); + ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления); КонецПроцедуры // Завершение запуска процедуры обработки данных в основном потоке. // // Параметры: -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. -// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // -Процедура ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, СведенияОбОбновлении) +Процедура ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, ИмяОбработчика) + ОбработчикОбновления = ОбработчикОбновления(ИмяОбработчика); Параметры = КонтекстОбработчика.Параметры; ПараметрыОбновления = КонтекстОбработчика.ПараметрыОбновления; + УстанавливаемыеСвойства = Новый Структура; Попытка ЗавершениеОбработкиДанных = ТекущаяУниверсальнаяДатаВМиллисекундах(); @@ -6510,10 +6895,12 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; + СтатистикаВыполнения = ОбработчикОбновления.СтатистикаВыполнения.Получить(); Если Параметры.ОбработкаЗавершена Тогда - ОбработчикОбновления.Статус = "Выполнено"; - ОбработчикОбновления.Приоритет = "ВПлановомПорядке"; - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ЗавершениеОбработкиДанных", ТекущаяДатаСеанса()); + СтатистикаВыполнения.Вставить("ЗавершениеОбработкиДанных", ТекущаяДатаСеанса()); + + УстанавливаемыеСвойства.Вставить("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + УстанавливаемыеСвойства.Вставить("Приоритет","ВПлановомПорядке"); // Запись прогресса обновления. Если ПараметрыОбновления.Свойство("ВФоне") @@ -6529,45 +6916,49 @@ МинимальнаяОчередь = 0; Если Не ЕстьОбработанныеОбъекты Тогда - МинимальнаяОчередь = МинимальнаяОчередьОтложеннойОбработки(ПараметрыОбновления.ПланОбновления); + МинимальнаяОчередь = МинимальнаяОчередьОтложеннойОбработки(); КонецЕсли; Если Не ЕстьОбработанныеОбъекты И ОчередьОбработчика = МинимальнаяОчередь Тогда ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток; - МаксимумПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) - 1; + МаксимумПопыток = МаксимумПопытокОбновления(ОбработчикОбновления) - 1; Если ЧислоПопыток >= МаксимумПопыток Тогда ТекстИсключения = НСтр("ru = 'Произошло зацикливание процедуры обработки данных. Выполнение прервано.'"); ВызватьИсключение ТекстИсключения; Иначе ДобавляемоеЧислоПопыток = ДобавляемоеЧислоПопыток(ОбработчикОбновления, КонтекстОбработчика); - ОбработчикОбновления.ЧислоПопыток = ЧислоПопыток + ДобавляемоеЧислоПопыток; + УстанавливаемыеСвойства.Вставить("ЧислоПопыток", ЧислоПопыток + ДобавляемоеЧислоПопыток); КонецЕсли; Иначе - ОбработчикОбновления.ЧислоПопыток = 0; + УстанавливаемыеСвойства.Вставить("ЧислоПопыток", 0); КонецЕсли; КонецЕсли; // Сохранение данных по процедуре обработки данных. Если ОбработчикОбновления.Многопоточный Тогда - ПрогрессВыполнения = ОбработчикОбновления.СтатистикаВыполнения[ПрогрессВыполнения]; + ПрогрессВыполнения = СтатистикаВыполнения["ПрогрессВыполнения"]; Если ПрогрессВыполнения = Неопределено Тогда - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПрогрессВыполнения", Параметры.ПрогрессВыполнения); + СтатистикаВыполнения.Вставить("ПрогрессВыполнения", Параметры.ПрогрессВыполнения); Иначе ОбработаноОбъектов = Параметры.ПрогрессВыполнения.ОбработаноОбъектов; ПрогрессВыполнения.ОбработаноОбъектов = ПрогрессВыполнения.ОбработаноОбъектов + ОбработаноОбъектов; КонецЕсли; Иначе - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПрогрессВыполнения", Параметры.ПрогрессВыполнения); + СтатистикаВыполнения.Вставить("ПрогрессВыполнения", Параметры.ПрогрессВыполнения); КонецЕсли; - КоличествоЗапусковПроцедурыОбновления = КоличествоЗапусковПроцедурыОбновления(ОбработчикОбновления) + 1; + КоличествоЗапусковПроцедурыОбновления = КоличествоЗапусковПроцедурыОбновления(СтатистикаВыполнения) + 1; ДлительностьВыполнения = ЗавершениеОбработкиДанных - КонтекстОбработчика.НачалоОбработкиДанных; - Если ОбработчикОбновления.СтатистикаВыполнения["ДлительностьВыполнения"] <> Неопределено Тогда - ДлительностьВыполнения = ДлительностьВыполнения + ОбработчикОбновления.СтатистикаВыполнения["ДлительностьВыполнения"]; + Если СтатистикаВыполнения["ДлительностьВыполнения"] <> Неопределено Тогда + ДлительностьВыполнения = ДлительностьВыполнения + СтатистикаВыполнения["ДлительностьВыполнения"]; КонецЕсли; - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ДлительностьВыполнения", ДлительностьВыполнения); - ОбработчикОбновления.СтатистикаВыполнения.Вставить("КоличествоЗапусков", КоличествоЗапусковПроцедурыОбновления); + СтатистикаВыполнения.Вставить("ДлительностьВыполнения", ДлительностьВыполнения); + СтатистикаВыполнения.Вставить("КоличествоЗапусков", КоличествоЗапусковПроцедурыОбновления); + + УстанавливаемыеСвойства.Вставить("СтатистикаВыполнения", Новый ХранилищеЗначения(СтатистикаВыполнения)); + УстанавливаемыеСвойства.Вставить("ДлительностьОбработки", ДлительностьВыполнения); + УстановитьСвойстваОбработчика(ОбработчикОбновления.ИмяОбработчика, УстанавливаемыеСвойства); Исключение ОбработатьИсключениеОбработчика(КонтекстОбработчика, ОбработчикОбновления, ИнформацияОбОшибке()); КонецПопытки; @@ -6577,25 +6968,37 @@ // Завершение процедуры обработки данных. // // Параметры: -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. -// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). +// СведенияОбОбновлении - см. СведенияОбОбновленииИнформационнойБазы // -Процедура ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, СведенияОбОбновлении) +Процедура ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ИмяОбработчика) + + ОбработчикОбновления = ОбработчикОбновления(ИмяОбработчика); Параметры = КонтекстОбработчика.Параметры; // Если обработчик обновления передал параметры, их нужно сохранить. ПереданныеПараметры = ПереданныеПараметрыОбработчикаОбновления(Параметры); - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПараметрыОбработчика", ПереданныеПараметры); + СтатистикаВыполнения = ОбработчикОбновления.СтатистикаВыполнения.Получить(); + СтатистикаВыполнения.Вставить("ПараметрыОбработчика", ПереданныеПараметры); + УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, + "СтатистикаВыполнения", + Новый ХранилищеЗначения(СтатистикаВыполнения)); Если КонтекстОбработчика.ЕстьНеЗакрытыеТранзакции Тогда // В случае нахождения вложенной транзакции обработчик обновления повторно не вызывается. - ОбработчикОбновления.Статус = "Ошибка"; + ОбработчикОбновления.Статус = Перечисления.СтатусыОбработчиковОбновления.Ошибка; ОбработчикОбновления.ИнформацияОбОшибке = Строка(ОбработчикОбновления.ИнформацияОбОшибке) + Символы.ПС + КонтекстОбработчика.ИнформацияОбОшибке; - ОбработчикОбновления.ЧислоПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления); + ОбработчикОбновления.ЧислоПопыток = МаксимумПопытокОбновления(ОбработчикОбновления); + + Свойства = Новый Структура; + Свойства.Вставить("ЧислоПопыток", ОбработчикОбновления.ЧислоПопыток); + Свойства.Вставить("Статус", ОбработчикОбновления.Статус); + Свойства.Вставить("ИнформацияОбОшибке", ОбработчикОбновления.ИнформацияОбОшибке); + УстановитьСвойстваОбработчика(ОбработчикОбновления.ИмяОбработчика, Свойства); КонецЕсли; Если КонтекстОбработчика.ЗаписыватьВЖурнал Тогда @@ -6604,170 +7007,7 @@ КонецПроцедуры -Процедура СоставитьПланОтложенногоОбновления(СведенияОбОбновленииИБ, ПовторноеФормирование = Ложь) Экспорт - - ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); - ЭтоПодчиненныйУзелРИБСФильтром = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБСФильтром(); - - ДеревоОбработчиков = СведенияОбОбновленииИБ.ДеревоОбработчиков; - ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); - - // Инициализация параметров. - ПланОбновления = Новый Массив; - ЕстьОбработчикиТолькоГлавногоУзла = Ложь; - - СведенияОБлокируемыхОбъектах = НовыеСведенияОБлокируемыхОбъектах(); - Для Каждого Подсистема Из ОписанияПодсистем.Порядок Цикл - - ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам[Подсистема]; - РежимВыполнения = ОписаниеПодсистемы.РежимВыполненияОтложенныхОбработчиков; - ПараллельноСВерсии = ОписаниеПодсистемы.ПараллельноеОтложенноеОбновлениеСВерсии; - - ДеревоОбработчиковБиблиотека = ДеревоОбработчиков.Строки.Найти(Подсистема, "ИмяБиблиотеки"); - Если ДеревоОбработчиковБиблиотека = Неопределено Тогда - Продолжить; - КонецЕсли; - - ТаблицаОбработчиков = Новый ТаблицаЗначений; - ТаблицаОбработчиков.Колонки.Добавить("Обработчик", Новый ОписаниеТипов("Строка")); - ТаблицаОбработчиков.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); - ТаблицаОбработчиков.Колонки.Добавить("Очередь", Новый ОписаниеТипов("Число")); - - Итерация = 1; - СоздаватьНовуюИтерацию = Истина; - ПропуститьПроверку = Ложь; - Для Каждого ДеревоОбработчиковВерсия Из ДеревоОбработчиковБиблиотека.Строки Цикл - Если Не ПовторноеФормирование Тогда - ЗаполнитьБлокируемыеОбъекты(ДеревоОбработчиковВерсия, СведенияОбОбновленииИБ, СведенияОБлокируемыхОбъектах); - КонецЕсли; - - Если СоздаватьНовуюИтерацию Тогда - ИтерацияОбновления = Новый Структура; - ИтерацияОбновления.Вставить("Режим", ""); - ИтерацияОбновления.Вставить("ЗависитОтПредыдущего", Ложь); - ИтерацияОбновления.Вставить("Обработчики"); - КонецЕсли; - - Если РежимВыполнения = "Последовательно" Тогда - ИтерацияОбновления.Режим = РежимВыполнения; - ИтерацияОбновления.ЗависитОтПредыдущего = ?(Итерация = 1, Ложь, Истина); - ИтерацияОбновления.Обработчики = Новый Массив; - ИначеЕсли РежимВыполнения = "Параллельно" И Не ЗначениеЗаполнено(ПараллельноСВерсии) И Итерация = 1 Тогда - ИтерацияОбновления.Режим = РежимВыполнения; - ИтерацияОбновления.Обработчики = ТаблицаОбработчиков.Скопировать(); - СоздаватьНовуюИтерацию = Ложь; - ИначеЕсли РежимВыполнения = "Параллельно" И ЗначениеЗаполнено(ПараллельноСВерсии) И Не ПропуститьПроверку Тогда - НомерВерсии = ДеревоОбработчиковВерсия.НомерВерсии; - Если НомерВерсии = "*" Тогда - Результат = -1; - Иначе - Результат = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(НомерВерсии, ПараллельноСВерсии); - КонецЕсли; - - Если Результат < 0 Тогда - ИтерацияОбновления.Режим = "Последовательно"; - ИтерацияОбновления.ЗависитОтПредыдущего = (Итерация <> 1); - ИтерацияОбновления.Обработчики = Новый Массив; - Иначе - ИтерацияОбновления.Режим = РежимВыполнения; - ИтерацияОбновления.ЗависитОтПредыдущего = (Итерация <> 1); - ИтерацияОбновления.Обработчики = ТаблицаОбработчиков.Скопировать(); - ПропуститьПроверку = Истина; - СоздаватьНовуюИтерацию = Ложь; - КонецЕсли; - КонецЕсли; - - Для Каждого Обработчик Из ДеревоОбработчиковВерсия.Строки Цикл - Если ПовторноеФормирование И Обработчик.Статус = "Выполнено" Тогда - Продолжить; - КонецЕсли; - - Если ИтерацияОбновления.Режим = "Параллельно" И Не ЭтоПодчиненныйУзелРИБ - И Обработчик.ЗапускатьТолькоВГлавномУзле = Истина Тогда - ЕстьОбработчикиТолькоГлавногоУзла = Истина; - КонецЕсли; - - Если ИтерацияОбновления.Режим = "Параллельно" И ЭтоПодчиненныйУзелРИБСФильтром - И Не Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами Тогда - ЕстьОбработчикиТолькоГлавногоУзла = Истина; - Продолжить; - КонецЕсли; - - Если ИтерацияОбновления.Режим = "Параллельно" Тогда - СтрокаОбработчик = ИтерацияОбновления.Обработчики.Добавить(); - СтрокаОбработчик.Обработчик = Обработчик.ИмяОбработчика; - СтрокаОбработчик.Идентификатор = Обработчик.Идентификатор; - СтрокаОбработчик.Очередь = Обработчик.ОчередьОтложеннойОбработки; - Иначе - ОписаниеОбработчика = Новый Структура; - ОписаниеОбработчика.Вставить("ИмяОбработчика", Обработчик.ИмяОбработчика); - ОписаниеОбработчика.Вставить("Идентификатор", Обработчик.Идентификатор); - ОписаниеОбработчика.Вставить("Итерация", 0); - - ИтерацияОбновления.Обработчики.Добавить(ОписаниеОбработчика); - КонецЕсли; - - КонецЦикла; - - // В параллельном режиме в РИБ с фильтрами в подчиненном узле выполняются только обработчики - // с признаком ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина. - Если ЭтоПодчиненныйУзелРИБСФильтром И ИтерацияОбновления.Режим = "Параллельно" Тогда - ПараметрыОтбора = Новый Структура; - ПараметрыОтбора.Вставить("ЗапускатьИВПодчиненномУзлеРИБСФильтрами", Ложь); - ОбработчикиТолькоГлавногоУзла = ДеревоОбработчиковВерсия.Строки.НайтиСтроки(ПараметрыОтбора); - Для Каждого ОбработчикГлавногоУзла Из ОбработчикиТолькоГлавногоУзла Цикл - ДеревоОбработчиковВерсия.Строки.Удалить(ОбработчикГлавногоУзла); - КонецЦикла; - КонецЕсли; - - Если СоздаватьНовуюИтерацию Тогда - ПланОбновления.Добавить(ИтерацияОбновления); - КонецЕсли; - - Итерация = Итерация + 1 ; - - КонецЦикла; - - Если Не СоздаватьНовуюИтерацию Тогда - ПланОбновления.Добавить(ИтерацияОбновления); - КонецЕсли; - КонецЦикла; - - Если Не ПовторноеФормирование Тогда - ЗаписатьСведенияОБлокируемыхОбъектах(СведенияОБлокируемыхОбъектах); - Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Установить(Не ЕстьОбработчикиТолькоГлавногоУзла); - КонецЕсли; - - ОписаниеОбработчика = Новый Структура; - ОписаниеОбработчика.Вставить("ИмяОбработчика", ""); - ОписаниеОбработчика.Вставить("Итерация", 0); - - // Конвертация формата хранения обработчиков. - Для Каждого ЦиклОбновления Из ПланОбновления Цикл - Если ТипЗнч(ЦиклОбновления.Обработчики) = Тип("Массив") Тогда - Продолжить; - КонецЕсли; - ТаблицаОбработчиков = ЦиклОбновления.Обработчики.Скопировать(); - ТаблицаОбработчиков.Сортировать("Очередь Возр"); - - ЦиклОбновления.Обработчики = Новый Массив; - Для Каждого Элемент Из ТаблицаОбработчиков Цикл - ОписаниеОбработчика = Новый Структура; - ОписаниеОбработчика.Вставить("ИмяОбработчика", Элемент.Обработчик); - ОписаниеОбработчика.Вставить("Идентификатор", Элемент.Идентификатор); - ОписаниеОбработчика.Вставить("Итерация", 0); - - ЦиклОбновления.Обработчики.Добавить(ОписаниеОбработчика); - КонецЦикла; - - ЦиклОбновления.Вставить("ОчередьОбработчиков", ТаблицаОбработчиков); - КонецЦикла; - - СведенияОбОбновленииИБ.ПланОтложенногоОбновления = ПланОбновления; - -КонецПроцедуры - -Процедура ЗаполнитьБлокируемыеОбъекты(СтрокаВерсия, СведенияОбОбновлении, СведенияОБлокируемыхОбъектах) +Процедура ЗаполнитьБлокируемыеОбъекты(СтрокаВерсия, СведенияОБлокируемыхОбъектах) Для Каждого Обработчик Из СтрокаВерсия.Строки Цикл ПроцедураПроверки = Обработчик.ПроцедураПроверки; @@ -6787,7 +7027,8 @@ МассивОбработчиков.Добавить(Обработчик.ИмяОбработчика); СведенияОБлокируемыхОбъектах.БлокируемыеОбъекты.Вставить(БлокируемыйОбъект, МассивОбработчиков); Иначе - СведенияОБлокируемыхОбъектах.БлокируемыеОбъекты[БлокируемыйОбъект].Добавить(Обработчик.ИмяОбработчика); + СведенияОБлокируемомОбъекте = СведенияОБлокируемыхОбъектах.БлокируемыеОбъекты[БлокируемыйОбъект]; // Массив + СведенияОБлокируемомОбъекте.Добавить(Обработчик.ИмяОбработчика); КонецЕсли; КонецЦикла; ИначеЕсли ЗначениеЗаполнено(БлокируемыеОбъекты) И Не ЗначениеЗаполнено(ПроцедураПроверки) Тогда @@ -6800,91 +7041,6 @@ КонецПроцедуры -Процедура ВключитьОтключитьОтложенныеОбработчикиОбновления(СведенияОбОбновлении) - - ПланОбновления = СведенияОбОбновлении.ПланОтложенногоОбновления; - ЗапуститьОбработчики = Неопределено; - ОстановитьОбработчики = Неопределено; - ПриоритетЖелательноБыстрее = Неопределено; - ПриоритетВПлановомПорядке = Неопределено; - - СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ЗапуститьОбработчики", ЗапуститьОбработчики); - СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ОстановитьОбработчики", ОстановитьОбработчики); - СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ПриоритетЖелательноБыстрее", ПриоритетЖелательноБыстрее); - СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ПриоритетВПлановомПорядке", ПриоритетВПлановомПорядке); - - // Запуск остановленных отложенных обработчиков обновления. - Если ЗапуститьОбработчики <> Неопределено Тогда - Для Каждого ЗапущенныйОбработчик Из ЗапуститьОбработчики Цикл - НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(ЗапущенныйОбработчик, "ИмяОбработчика", Истина); - Если НайденныйОбработчик <> Неопределено Тогда - НайденныйОбработчик.Статус = "НеВыполнено"; - - Для Каждого ЦиклОбновления Из ПланОбновления Цикл - Для Каждого ОписаниеОбработчика Из ЦиклОбновления.Обработчики Цикл - Если ОписаниеОбработчика.ИмяОбработчика = НайденныйОбработчик.ИмяОбработчика Тогда - Если ЦиклОбновления.Свойство("ЕстьОстановленные") Тогда - ЦиклОбновления.Удалить("ЕстьОстановленные"); - КонецЕсли; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - КонецЕсли; - КонецЦикла; - - СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Удалить("ЗапуститьОбработчики"); - КонецЕсли; - - // Остановка выполняющихся отложенных обработчиков обновления. - Если ОстановитьОбработчики <> Неопределено Тогда - Для Каждого ОстановленныйОбработчик Из ОстановитьОбработчики Цикл - НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(ОстановленныйОбработчик, "ИмяОбработчика", Истина); - Если НайденныйОбработчик <> Неопределено - И НайденныйОбработчик.Статус <> "Выполнено" Тогда - НайденныйОбработчик.Статус = "Приостановлен"; - КонецЕсли; - КонецЦикла; - - СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Удалить("ОстановитьОбработчики"); - КонецЕсли; - - // Повышение приоритета процедуры обработки данных. - Если ПриоритетЖелательноБыстрее <> Неопределено Тогда - Для Каждого Обработчик Из ПриоритетЖелательноБыстрее Цикл - НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(Обработчик, "ИмяОбработчика", Истина); - Если НайденныйОбработчик <> Неопределено - И НайденныйОбработчик.Статус <> "Выполнено" Тогда - НайденныйОбработчик.Приоритет = "ЖелательноБыстрее"; - КонецЕсли; - КонецЦикла; - - СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Удалить("ПриоритетЖелательноБыстрее"); - КонецЕсли; - - // Понижение приоритета процедуры обработки данных. - Если ПриоритетВПлановомПорядке <> Неопределено Тогда - Для Каждого Обработчик Из ПриоритетВПлановомПорядке Цикл - НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(Обработчик, "ИмяОбработчика", Истина); - Если НайденныйОбработчик <> Неопределено - И НайденныйОбработчик.Статус <> "Выполнено" Тогда - НайденныйОбработчик.Приоритет = "ВПлановомПорядке"; - КонецЕсли; - КонецЦикла; - - СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Удалить("ПриоритетВПлановомПорядке"); - КонецЕсли; - - Если ЗапуститьОбработчики <> Неопределено - Или ОстановитьОбработчики <> Неопределено - Или ПриоритетЖелательноБыстрее <> Неопределено - Или ПриоритетВПлановомПорядке <> Неопределено Тогда - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - КонецЕсли; - -КонецПроцедуры - Функция НовыеСведенияОБлокируемыхОбъектах(СтарыеСведения = Неопределено) СведенияОБлокируемыхОбъектах = Новый Структура; @@ -6913,7 +7069,7 @@ КонецПроцедуры -Процедура ЗаполнитьДанныеДляПараллельногоОтложенногоОбновления(СведенияОбОбновлении, Параметры) +Процедура ЗаполнитьДанныеДляПараллельногоОтложенногоОбновления(Параметры) Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда ОтметитьРегистрациюОтложенныхОбработчиковОбновления(); @@ -6957,13 +7113,9 @@ ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; ПараметрыИнициализированы = Ложь; - Для Каждого СтрокаБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - - Если ОписанияБиблиотек[СтрокаБиблиотека.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков <> "Параллельно" Тогда - Продолжить; - КонецЕсли; - - ПараллельноСВерсии = ОписанияБиблиотек[СтрокаБиблиотека.ИмяБиблиотеки].ПараллельноеОтложенноеОбновлениеСВерсии; + Обработчики = ОбработчикиДляОтложеннойРегистрацииДанных(); + + Для Каждого Обработчик Из Обработчики Цикл Если Не ПараметрыИнициализированы Тогда @@ -6977,79 +7129,65 @@ КонецЕсли; - Для Каждого СтрокаВерсия Из СтрокаБиблиотека.Строки Цикл - Если СтрокаВерсия.НомерВерсии = "*" Тогда - Продолжить; - КонецЕсли; + ПараметрыОбработчикаСтруктура.Очередь = Обработчик.ОчередьОтложеннойОбработки; + ПараметрыОбработчикаСтруктура.Вставить("ДанныеОбработчика", Новый Соответствие); + + Если Обработчик.Многопоточный Тогда + ПараметрыОбработчикаСтруктура.ПараметрыВыборки = + ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(); + Иначе + ПараметрыОбработчикаСтруктура.ПараметрыВыборки = Неопределено; + КонецЕсли; + + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(ПараметрыОбработчикаСтруктура); + Попытка + Сообщение = НСтр("ru = 'Выполняется процедура заполнения данных + |""%1"" + |отложенного обработчика обновления + |""%2"".'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, + Обработчик.ПроцедураЗаполненияДанныхОбновления, + Обработчик.ИмяОбработчика); + ЗаписатьИнформацию(Сообщение); - Если ЗначениеЗаполнено(ПараллельноСВерсии) - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СтрокаВерсия.НомерВерсии, ПараллельноСВерсии) < 0 Тогда - Продолжить; - КонецЕсли; + ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.ПроцедураЗаполненияДанныхОбновления, ПараметрыОбработчика); - Для Каждого Обработчик Из СтрокаВерсия.Строки Цикл - - ПараметрыОбработчикаСтруктура.Очередь = Обработчик.ОчередьОтложеннойОбработки; - ПараметрыОбработчикаСтруктура.Вставить("ДанныеОбработчика", Новый Соответствие); - - Если Обработчик.Многопоточный Тогда - ПараметрыОбработчикаСтруктура.ПараметрыВыборки = - ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(); - Иначе - ПараметрыОбработчикаСтруктура.ПараметрыВыборки = Неопределено; - КонецЕсли; - - ПараметрыОбработчика = Новый Массив; - ПараметрыОбработчика.Добавить(ПараметрыОбработчикаСтруктура); - Попытка - Сообщение = НСтр("ru = 'Выполняется процедура заполнения данных - |""%1"" - |отложенного обработчика обновления - |""%2"".'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - Обработчик.ПроцедураЗаполненияДанныхОбновления, - Обработчик.ИмяОбработчика); - ЗаписатьИнформацию(Сообщение); - - ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.ПроцедураЗаполненияДанныхОбновления, ПараметрыОбработчика); - - // Запись прогресса обновления. - Если Параметры.ВФоне Тогда - ХодВыполненияОбработчиков = Параметры.ХодВыполненияОбработчиков; - ХодВыполненияОбработчиков.ВыполненоОбработчиков = ХодВыполненияОбработчиков.ВыполненоОбработчиков + 1; - Прогресс = 10 + ХодВыполненияОбработчиков.ВыполненоОбработчиков / ХодВыполненияОбработчиков.ВсегоОбработчиков * 90; - ДлительныеОперации.СообщитьПрогресс(Прогресс); - КонецЕсли; - Исключение - ОтметитьРегистрациюОтложенныхОбработчиковОбновления(СтрокаБиблиотека.ИмяБиблиотеки, Ложь); - ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При вызове процедуры заполнения данных - |""%1"" - |отложенного обработчика обновления - |""%2"" - |произошла ошибка: - |""%3"".'"), - Обработчик.ПроцедураЗаполненияДанныхОбновления, - Обработчик.ИмяОбработчика, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); - - ВызватьИсключение; - КонецПопытки; - - ОписаниеОбрабатываемыхДанных = НовоеОписаниеОбрабатываемыхДанных(Обработчик.Многопоточный); - ОписаниеОбрабатываемыхДанных.ДанныеОбработчика = ПараметрыОбработчикаСтруктура.ДанныеОбработчика; - - Если Обработчик.Многопоточный Тогда - ОписаниеОбрабатываемыхДанных.ПараметрыВыборки = ПараметрыОбработчикаСтруктура.ПараметрыВыборки; - КонецЕсли; - - ОбрабатываемыеДанные.Вставить(Обработчик.ИмяОбработчика, ОписаниеОбрабатываемыхДанных); - КонецЦикла; - КонецЦикла; + // Запись прогресса обновления. + Если Параметры.ВФоне Тогда + ХодВыполненияОбработчиков = Параметры.ХодВыполненияОбработчиков; + ХодВыполненияОбработчиков.ВыполненоОбработчиков = ХодВыполненияОбработчиков.ВыполненоОбработчиков + 1; + Прогресс = 10 + ХодВыполненияОбработчиков.ВыполненоОбработчиков / ХодВыполненияОбработчиков.ВсегоОбработчиков * 90; + ДлительныеОперации.СообщитьПрогресс(Прогресс); + КонецЕсли; + Исключение + ОтметитьРегистрациюОтложенныхОбработчиковОбновления(Обработчик.ИмяБиблиотеки, Ложь); + ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При вызове процедуры заполнения данных + |""%1"" + |отложенного обработчика обновления + |""%2"" + |произошла ошибка: + |""%3"".'"), + Обработчик.ПроцедураЗаполненияДанныхОбновления, + Обработчик.ИмяОбработчика, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + + ВызватьИсключение; + КонецПопытки; + + ОписаниеОбрабатываемыхДанных = НовоеОписаниеОбрабатываемыхДанных(Обработчик.Многопоточный); + ОписаниеОбрабатываемыхДанных.ДанныеОбработчика = ПараметрыОбработчикаСтруктура.ДанныеОбработчика; + + Если Обработчик.Многопоточный Тогда + ОписаниеОбрабатываемыхДанных.ПараметрыВыборки = ПараметрыОбработчикаСтруктура.ПараметрыВыборки; + КонецЕсли; + + ОписаниеОбрабатываемыхДанных = Новый ХранилищеЗначения(ОписаниеОбрабатываемыхДанных, Новый СжатиеДанных(9)); + УстановитьСвойствоОбработчика(Обработчик.ИмяОбработчика, "ОбрабатываемыеДанные", ОписаниеОбрабатываемыхДанных); КонецЦикла; - СведенияОбОбновлении.ОбрабатываемыеДанные = ОбрабатываемыеДанные; ОтметитьРегистрациюОтложенныхОбработчиковОбновления(); Если ПараметрыИнициализированы И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда @@ -7067,23 +7205,26 @@ // Процедура ЗапускРегистрацииДанныхОтложенногоОбновления(ИдентификаторФормы, АдресРезультата) Экспорт - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - ОписаниеПотоков = НовоеОписаниеПотоковРегистрацииДанныхОтложенногоОбновления(); - СведенияОбОбновлении.ОписаниеПотоков = ОписаниеПотоков; + Группы = НовоеОписаниеГруппПотоковРегистрацииДанныхОтложенногоОбновления(); + + Обработчики = ОбработчикиДляОтложеннойРегистрацииДанных(); + УдалитьВсеПотокиОбновления(); Попытка - Для каждого ОписаниеОбрабатываемыхДанных Из СведенияОбОбновлении.ОбрабатываемыеДанные Цикл - Поток = ДобавитьПотокРегистрацииДанныхОтложенногоОбновления(ОписаниеПотоков, ОписаниеОбрабатываемыхДанных.Значение); - ВыполнитьПоток(ОписаниеПотоков, Поток, ИдентификаторФормы); - ОжидатьСвободныйПоток(ОписаниеПотоков, СведенияОбОбновлении); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + Для Каждого Обработчик Из Обработчики Цикл + ОписаниеОбрабатываемыхДанных = Обработчик.ОбрабатываемыеДанные.Получить(); + + Поток = ДобавитьПотокРегистрацииДанныхОтложенногоОбновления(ОписаниеОбрабатываемыхДанных); + ВыполнитьПоток(Группы, Поток, ИдентификаторФормы); + СохранитьПотокОбновления(Поток); + ОжидатьСвободныйПоток(Группы); КонецЦикла; - ОжидатьЗавершениеВсехПотоков(ОписаниеПотоков, СведенияОбОбновлении); - СохранитьСостояниеПотоковВСведенияОбОбновлении(Неопределено, СведенияОбОбновлении); + ОжидатьЗавершениеВсехПотоков(Группы); + УдалитьВсеПотокиОбновления(); Исключение - ОтменитьВыполнениеВсехПотоков(СведенияОбОбновлении.ОписаниеПотоков); - СохранитьСостояниеПотоковВСведенияОбОбновлении(Неопределено, СведенияОбОбновлении); + ОтменитьВыполнениеВсехПотоков(Группы); + УдалитьВсеПотокиОбновления(); ВызватьИсключение; КонецПопытки; @@ -7092,7 +7233,7 @@ // Заполнение данных отложенного обработчика в фоновом задании. // // Параметры: -// ОписаниеОбрабатываемыхДанных - Структура - (см. НовоеОписаниеОбрабатываемыхДанных()). +// ОписаниеОбрабатываемыхДанных - см. НовоеОписаниеОбрабатываемыхДанных // АдресРезультата - Строка - адрес временного хранилища для сохранения результата выполнения процедуры. // Процедура ЗаполнитьДанныеОтложенногоОбработчика(ОписаниеОбрабатываемыхДанных, АдресРезультата) Экспорт @@ -7215,7 +7356,7 @@ // Обработать исключение, возникшее при подготовке или завершении выполнения обработчика в основном потоке. // // Параметры: -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. // Процедура ОбработатьИсключениеОбработчика(КонтекстОбработчика, ОбработчикОбновления, ИнформацияОбОшибке) @@ -7229,61 +7370,69 @@ КонецЦикла; ДобавляемоеЧислоПопыток = ДобавляемоеЧислоПопыток(ОбработчикОбновления, КонтекстОбработчика, Истина); - ОбработчикОбновления.ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток + ДобавляемоеЧислоПопыток; + ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток + ДобавляемоеЧислоПопыток; ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - МаксимумПопытокОбновления = МаксимумПопытокОбновления(СведенияОбОбновленииИнформационнойБазы(), ОбработчикОбновления); + МаксимумПопытокОбновления = МаксимумПопытокОбновления(ОбработчикОбновления); - Если ОбработчикОбновления.ЧислоПопыток < МаксимумПопытокОбновления Тогда + Если ЧислоПопыток < МаксимумПопытокОбновления Тогда ЗаписатьПредупреждение(ПодробноеПредставлениеОшибки); Иначе ЗаписатьОшибку(ПодробноеПредставлениеОшибки); КонецЕсли; - Если ОбработчикОбновления.Статус <> "Ошибка" Тогда - ОбработчикОбновления.Статус = "Ошибка"; - ОбработчикОбновления.ИнформацияОбОшибке = ПодробноеПредставлениеОшибки; - КонецЕсли; + Свойства = Новый Структура; + Свойства.Вставить("ЧислоПопыток", ЧислоПопыток); + Свойства.Вставить("Статус", Перечисления.СтатусыОбработчиковОбновления.Ошибка); + Свойства.Вставить("ИнформацияОбОшибке", ПодробноеПредставлениеОшибки); + УстановитьСвойстваОбработчика(ОбработчикОбновления.ИмяОбработчика, Свойства); КонецПроцедуры // Обработать фрагмент, полученный в результате разбиения результата поиска данных для обновления, в отдельном потоке. // // Параметры: -// Фрагмент - Массив - см. НовыйНаборПорцийДляОбновления(). -// ОписаниеПотоков - см. НовоеОписаниеПотоков(). -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// Фрагмент - Массив из см. НовыйНаборПорцийДляОбновления +// ОписаниеПотоков - см. НовоеОписаниеПотоков +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // -Процедура ОбработатьФрагментДанныхВПотоке(Фрагмент, ОписаниеПотоков, КонтекстОбработчика) +Процедура ОбработатьФрагментДанныхВПотоке(Фрагмент, Группы, КонтекстОбработчика) - КонтекстОбработчикаДляПотока = ОбщегоНазначения.СкопироватьРекурсивно(КонтекстОбработчика); + КонтекстОбработчикаДляПотока = ОбщегоНазначения.СкопироватьРекурсивно(КонтекстОбработчика); // см. НовыйКонтекстОбработчика КонтекстОбработчикаДляПотока.Параметры.ОбновляемыеДанные = Фрагмент; - Поток = ОписаниеПотоков.Потоки.Добавить(); + Поток = НовыйПоток(); ДобавитьПотокОбработчикаОбновления(Поток, КонтекстОбработчикаДляПотока); - ВыполнитьПоток(ОписаниеПотоков, Поток); + ВыполнитьПоток(Группы, Поток); + СохранитьПотокОбновления(Поток); КонтекстОбработчикаДляПотока.Параметры.ОбновляемыеДанные.НаборДанных = Неопределено; КонецПроцедуры // Устанавливает статус ошибки у всех зациклившихся обработчиков. // -// Параметры: -// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). -// -// Возвращаемое значение: -// Булево - все выполняемые обработчики зациклились (ЧислоПопыток >= Максимум), Ложь - хоть один еще выполняется. -// -Процедура ОтметитьЗациклившиесяОбработчики(СведенияОбОбновлении) +Процедура ОтметитьЗациклившиесяОбработчики() - Отбор = Новый Структура("Статус", "Выполняется"); - Выполняющиеся = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Отбор, Истина); + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполняется); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.Статус КАК Статус, + | ОбработчикиОбновления.ЧислоПопыток КАК ЧислоПопыток + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения + | И ОбработчикиОбновления.Статус = &Статус"; + Выполняющиеся = Запрос.Выполнить().Выгрузить(); Для каждого ОбработчикОбновления Из Выполняющиеся Цикл - МаксимумПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) - 1; + МаксимумПопыток = МаксимумПопытокОбновления(ОбработчикОбновления) - 1; Если ОбработчикОбновления.ЧислоПопыток >= МаксимумПопыток Тогда - ОбработчикОбновления.Статус = "Ошибка"; - ОбработчикОбновления.ИнформацияОбОшибке = НСтр("ru = 'Произошло зацикливание процедуры обработки данных. Выполнение прервано.'"); + ИнформацияОбОшибке = НСтр("ru = 'Произошло зацикливание процедуры обработки данных. Выполнение прервано.'"); + УстановитьСтатусОбработчика(ОбработчикОбновления.ИмяОбработчика, "Ошибка", ИнформацияОбОшибке); КонецЕсли; КонецЦикла; @@ -7297,24 +7446,47 @@ // - и // - есть минимум один обработчик, завершенный с ошибкой. // -// Параметры: -// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). -// // Возвращаемое значение: // Булево - Истина, если обработчики зациклились. // -Функция ВсеОбработчикиЗациклились(СведенияОбОбновлении) +Функция ВсеОбработчикиЗациклились() - Отбор = Новый Структура("Статус", "Выполняется"); - ДеревоОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков; - Выполняющиеся = ДеревоОбработчиков.Строки.НайтиСтроки(Отбор, Истина); + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполняется); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.Многопоточный КАК Многопоточный, + | ОбработчикиОбновления.ОбрабатываемыеДанные КАК ОбрабатываемыеДанные, + | ОбработчикиОбновления.Статус КАК Статус, + | ОбработчикиОбновления.ЧислоПопыток КАК ЧислоПопыток + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения + | И ОбработчикиОбновления.Статус = &Статус"; + Выполняющиеся = Запрос.Выполнить().Выгрузить(); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Ошибка); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения + | И ОбработчикиОбновления.Статус = &Статус"; + СОшибками = Запрос.Выполнить().Выгрузить(); Если Выполняющиеся.Количество() > 0 Тогда ЕстьПревысившие = Ложь; ЕстьНормальные = Ложь; Для каждого ОбработчикОбновления Из Выполняющиеся Цикл - МаксимумПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) - 1; + МаксимумПопыток = МаксимумПопытокОбновления(ОбработчикОбновления) - 1; Если ОбработчикОбновления.ЧислоПопыток < МаксимумПопыток Тогда ЕстьНормальные = Истина; @@ -7329,9 +7501,6 @@ Если ЕстьПревысившие Тогда Если ЕстьНормальные Тогда - Отбор = Новый Структура("Статус", "Ошибка"); - СОшибками = ДеревоОбработчиков.Строки.НайтиСтроки(Отбор, Истина); - Возврат СОшибками.Количество() > 0; Иначе Возврат Истина; @@ -7351,9 +7520,9 @@ // Возвращаемое значение: // Число - количество запусков. // -Функция КоличествоЗапусковПроцедурыОбновления(ОбработчикОбновления) +Функция КоличествоЗапусковПроцедурыОбновления(СтатистикаВыполнения) - КоличествоЗапусковПроцедурыОбновления = ОбработчикОбновления.СтатистикаВыполнения["КоличествоЗапусков"]; + КоличествоЗапусковПроцедурыОбновления = СтатистикаВыполнения["КоличествоЗапусков"]; Если КоличествоЗапусковПроцедурыОбновления = Неопределено Тогда КоличествоЗапусковПроцедурыОбновления = 0; @@ -7363,66 +7532,18 @@ КонецФункции -// Найти обработчик обновления в дереве обработчиков. -// -// Параметры: -// ДеревоОбработчиков - КоллекцияСтрокДереваЗначений - верхний уровень дерева. -// Идентификатор - УникальныйИдентификатор - уникальный идентификатор обработчика обновления. -// ИмяОбработчика - Строка - имя обработчика обновления. -// -// Возвращаемое значение: -// * СтрокаДереваЗначений - найденный обработчик. -// * Неопределено - если обработчик не найден. -// -Функция НайтиОбработчикВДереве(ДеревоОбработчиков, Идентификатор, ИмяОбработчика) - - Если ЗначениеЗаполнено(Идентификатор) Тогда - ОбработчикОбновления = ДеревоОбработчиков.Найти(Идентификатор, "Идентификатор", Истина); - Если ОбработчикОбновления = Неопределено Тогда - ОбработчикОбновления = ДеревоОбработчиков.Найти(ИмяОбработчика, "ИмяОбработчика", Истина); - КонецЕсли; - Иначе - ОбработчикОбновления = ДеревоОбработчиков.Найти(ИмяОбработчика, "ИмяОбработчика", Истина); - КонецЕсли; - - Возврат ОбработчикОбновления; - -КонецФункции - -// Найти обработчик обновления в таблице значений. -// -// Параметры: -// ТаблицаОбработчиков - ТаблицаЗначений - таблица обработчиков. -// Идентификатор - УникальныйИдентификатор - уникальный идентификатор обработчика обновления. -// ИмяОбработчика - Строка - имя обработчика обновления. -// -// Возвращаемое значение: -// * СтрокаТаблицыЗначений - найденный обработчик. -// * Неопределено - если обработчик не найден. -// -Функция НайтиОбработчикВТаблице(ТаблицаОбработчиков, Идентификатор, ИмяОбработчика) - - Для каждого Обработчик Из ТаблицаОбработчиков Цикл - Если Обработчик.Идентификатор = Идентификатор И Обработчик.ИмяОбработчика = ИмяОбработчика Тогда - Возврат Обработчик; - КонецЕсли; - КонецЦикла; - -КонецФункции - // Возвращает максимальное количество попыток обновления для указанного обработчика обновления. // // Параметры: -// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). -// ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. +// ОбработчикОбновления - СтрокаТаблицыЗначений - обработчик обновления в виде строки дерева обработчиков. // // Возвращаемое значение: // Число - максимальное количество попыток обновления. // -Функция МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) +Функция МаксимумПопытокОбновления(ОбработчикОбновления) Если ОбработчикОбновления.Многопоточный Тогда - ОбрабатываемыеДанные = СведенияОбОбновлении.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; + ОбрабатываемыеДанные = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); ПараметрыВыборки = ОбрабатываемыеДанные.ПараметрыВыборки; ПолныеИменаОбъектов = ПараметрыВыборки.ПолныеИменаОбъектов; ПолныеИменаРегистров = ПараметрыВыборки.ПолныеИменаРегистров; @@ -7443,7 +7564,7 @@ // // Параметры: // ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. -// КонтекстОбработчика - см. НовыйКонтекстОбработчика(). +// КонтекстОбработчика - см. НовыйКонтекстОбработчика // Ошибка - Булево - Истина, если в обработчике обновления возникла ошибка. // // Возвращаемое значение: @@ -7469,25 +7590,25 @@ КонецФункции -Функция МинимальнаяОчередьОтложеннойОбработки(ПланОбновления) +Функция МинимальнаяОчередьОтложеннойОбработки() - МинимальнаяОчередь = 0; - Для Каждого ЦиклОбновления Из ПланОбновления Цикл - Если ЦиклОбновления.Режим = "Последовательно" - Или ЦиклОбновления.ОчередьОбработчиков.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - Если МинимальнаяОчередь = 0 Тогда - МинимальнаяОчередь = ЦиклОбновления.ОчередьОбработчиков[0].Очередь; - Иначе - МинимальнаяОчередьЦикла = ЦиклОбновления.ОчередьОбработчиков[0].Очередь; - МинимальнаяОчередь = Мин(МинимальнаяОчередь, МинимальнаяОчередьЦикла); - КонецЕсли; - КонецЦикла; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + Запрос.УстановитьПараметр("РежимВыполненияОтложенногоОбработчика", Перечисления.РежимыВыполненияОтложенныхОбработчиков.Параллельно); + Запрос.Текст = + "ВЫБРАТЬ + | МИНИМУМ(ОбработчикиОбновления.ОчередьОтложеннойОбработки) КАК Очередь + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения + | И ОбработчикиОбновления.РежимВыполненияОтложенногоОбработчика = &РежимВыполненияОтложенногоОбработчика + | И ОбработчикиОбновления.Статус <> &Статус"; + Результат = Запрос.Выполнить().Выгрузить(); - Возврат МинимальнаяОчередь; + Возврат Результат[0].Очередь; КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl index 28598edc9..6db6122aa 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl @@ -163,7 +163,7 @@ Если ОписаниеПланаОбновленияБиблиотеки = Неопределено Тогда ПланОбновленияПустой = Ложь; - ШаблонКомментария = НСтр("ru = 'Не найден план обновления библиотеки %1'"); + ШаблонКомментария = НСтр("ru = 'Не существует план обновления библиотеки %1'"); ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, Выборка.Имя); ЗаписьЖурналаРегистрации( ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), @@ -226,7 +226,7 @@ // и возвращает ключ этой записи. // // Возвращаемое значение: -// РегистрСведенийКлючЗаписи - . +// РегистрСведенийКлючЗаписи // Функция ЗаблокироватьВерсииОбластиДанных() Экспорт @@ -503,15 +503,7 @@ Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - - ПараметрыБлокировки = СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(); - Если НЕ ПараметрыБлокировки.Установлена Тогда - Возврат; - КонецЕсли; - ПараметрыБлокировки.Установлена = Ложь; - СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки); Возврат; - КонецЕсли; СнятьМонопольныйРежим = Ложь; @@ -537,7 +529,7 @@ КонецЕсли; - ЗапланироватьОбновлениеОбластейДанных(Истина); + ЗапланироватьОбновлениеОбластейДанных(); Если СнятьМонопольныйРежим Тогда УстановитьМонопольныйРежим(Ложь); @@ -563,6 +555,7 @@ // Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер // контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. +// Процедура ПередВыгрузкойДанных(Контейнер) Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда @@ -679,7 +672,7 @@ // на время обновления областей, // СообщениеБлокировки - Строка - сообщение блокировки. // -Процедура ЗапланироватьОбновлениеОбластейДанных(Знач БлокироватьОбласти = Истина, Знач СообщениеБлокировки = "") +Процедура ЗапланироватьОбновлениеОбластейДанных() Если НЕ ОбщегоНазначения.РазделениеВключено() Или Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ОчередьЗаданий") Тогда @@ -690,17 +683,6 @@ МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - Если ПустаяСтрока(СообщениеБлокировки) Тогда - СообщениеБлокировки = Константы["СообщениеБлокировкиПриОбновленииКонфигурации"].Получить(); - Если ПустаяСтрока(СообщениеБлокировки) Тогда - СообщениеБлокировки = НСтр("ru = 'Система заблокирована для выполнения обновления.'"); - КонецЕсли; - КонецЕсли; - ПараметрыБлокировки = СоединенияИБ.НовыеПараметрыБлокировкиСоединений(); - ПараметрыБлокировки.Начало = ТекущаяУниверсальнаяДата(); - ПараметрыБлокировки.Сообщение = СообщениеБлокировки; - ПараметрыБлокировки.Установлена = Истина; - ПараметрыБлокировки.Эксклюзивная = Ложь; ВерсияМетаданных = Метаданные.Версия; Если ПустаяСтрока(ВерсияМетаданных) Тогда @@ -816,12 +798,14 @@ ЕстьРасширенияИзменяющиеСтруктуру = Ложь; ПараметрыЗапускаЗадания = Новый Массив; + // АПК:287-выкл вызывается метод расширения БТС. Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РасширенияВМоделиСервиса") Тогда МодульРасширенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РасширенияВМоделиСервиса"); ИдентификаторыРасширений = МодульРасширенияВМоделиСервиса.АктивироватьОтключенныеРасширенияВОбласти(Выборка.ОбластьДанных, ЕстьРасширенияИзменяющиеСтруктуру); ПараметрыЗапускаЗадания.Добавить(ИдентификаторыРасширений); КонецЕсли; + // АПК:287-вкл ПараметрыЗадания = Новый Структура; ПараметрыЗадания.Вставить("ИмяМетода" , "ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ВыполнитьОбновлениеТекущейОбластиДанных"); @@ -835,10 +819,6 @@ МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - Если БлокироватьОбласти Тогда - СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки, Ложь, Выборка.ОбластьДанных); - КонецЕсли; - ЗафиксироватьТранзакцию(); Исключение @@ -872,8 +852,8 @@ Попытка ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); Исключение - ЕстьОшибка = Истина; - ТекстОшибки = ОписаниеОшибки(); + ЕстьОшибка = Истина; + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; Для Каждого Идентификатор Из АктивированныеРасширения Цикл @@ -907,7 +887,7 @@ // Вызов ПриНачалеВыполненияРегламентногоЗадания не используется, // т.к. необходимые действия выполняются в частном порядке. - ЗапланироватьОбновлениеОбластейДанных(Истина); + ЗапланироватьОбновлениеОбластейДанных(); КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl index fd282ab6c..c5bce8093 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl @@ -72,6 +72,7 @@ // Возвращает соответствие имен и идентификаторов отложенных обработчиков // и их очередей. +// Функция ОчередьОтложенногоОбработчикаОбновления() Экспорт Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index dec477864..87e0fa5c6 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -17,7 +17,7 @@ // ТолькоПроверка - Булево - если Истина, устаревшие патчи не будут удаляться. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ЕстьИзменения - Булево - истина, если были внесены изменения в составе исправлений. // * ОписаниеИзменений - Строка - информация о удаленных и измененных патчах. // @@ -217,16 +217,16 @@ // Получает настройки обновления конфигурации. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * РежимОбновления - Число - для файловой базы 0, для клиент-серверной 2. -// * ДатаВремяОбновления - Дата - Дата запланированного обновления конфигурации. -// * ВыслатьОтчетНаПочту - Булево - Признак необходимости отправки на электронную почту отчета об обновлении. -// * АдресЭлектроннойПочты - Строка - Адрес электронной почты для отправки отчета обновлении. -// * КодЗадачиПланировщика - Число - Код задачи планировщика Windows. -// * ИмяФайлаОбновления - Строка - Имя файла, содержащего устанавливаемое обновление. -// * СоздаватьРезервнуюКопию - Число - Признак необходимости создания резервной копии. -// * ИмяКаталогаРезервнойКопииИБ - Строка - Каталог для создания резервной копии. -// * ВосстанавливатьИнформационнуюБазу - Булево - Признак необходимости восстанавливать информационную базу +// * ДатаВремяОбновления - Дата - дата запланированного обновления конфигурации. +// * ВыслатьОтчетНаПочту - Булево - признак необходимости отправки на электронную почту отчета об обновлении. +// * АдресЭлектроннойПочты - Строка - адрес электронной почты для отправки отчета обновлении. +// * КодЗадачиПланировщика - Число - код задачи планировщика Windows. +// * ИмяФайлаОбновления - Строка - имя файла, содержащего устанавливаемое обновление. +// * СоздаватьРезервнуюКопию - Число - признак необходимости создания резервной копии. +// * ИмяКаталогаРезервнойКопииИБ - Строка - каталог для создания резервной копии. +// * ВосстанавливатьИнформационнуюБазу - Булево - признак необходимости восстанавливать информационную базу // в случае возникновения ошибок в процессе обновления. // Функция НастройкиОбновленияКонфигурации() Экспорт @@ -297,14 +297,14 @@ // Производит установку/удаление патчей. // // Параметры: -// Исправления - структура - с ключами: +// Исправления - структура: // * Установить - Массив - файлы исправлений во временном хранилище, которые требуется установить. // * Удалить - Массив - уникальные идентификаторы (Строка) исправлений, которые требуется удалить. // ВФоне - Булево - необходимо устанавливать в значение Истина, если вызов функции выполняется // фоновом задании. // // Возвращаемое значение: -// Структура - с ключами: +// Структура: // * Установленные - Массив - имена (Строка) установленных исправлений. // * НеУстановлено - Число - количество неустановленных исправлений. // * НеУдалено - Число - количество неудаленных исправлений. @@ -325,7 +325,7 @@ ИмяИсправления = ""; Попытка // Чтение исправления из архива. - Если ТипЗнч(Патч) <> Тип("Строка") Тогда + Если ТипЗнч(Патч) = Тип("Структура") Тогда Если СтрЗаканчиваетсяНа(Патч.Имя, ".zip") Тогда ИсправлениеИзАрхива = ИзвлечьИсправлениеИзАрхива(Патч.Хранение); Если ИсправлениеИзАрхива.Свойство("АрхивыПатчей") Тогда @@ -429,6 +429,13 @@ РезультатВыполнения.НеУстановлено = РезультатВыполнения.НеУстановлено + НеУстановлено; РезультатВыполнения.НеУдалено = НеУдалено; + Если РезультатВыполнения.Установленные.Количество() > 0 Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + МодульЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("АвтоматическаяУстановкаПатча", РезультатВыполнения.Установленные.Количество()); + КонецЕсли; + КонецЕсли; + Возврат РезультатВыполнения; КонецФункции @@ -462,15 +469,6 @@ #Область СлужебныйПрограммныйИнтерфейс -Процедура ПроверитьНаличиеУстаревшихИсправлений() Экспорт - Результат = ИсправленияИзменены(Истина); - Если Результат.ЕстьИзменения Тогда - ТекстСообщения = НСтр("ru = 'Некорректный вызов функции ""ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы"". - |Перед вызовом не были удалены устаревшие патчи, возможно, обновление выполняется нештатными средствами.'"); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения); - КонецЕсли; -КонецПроцедуры - Функция ДоступнаУстановкаПатчейВБазовойВерсии() Экспорт ДоступнаУстановкаПатчей = Истина; @@ -481,9 +479,9 @@ Или (ВерсияПлатформыБезНомераСборки = "8.3.15" И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "8.3.15.1958") < 0) Или (ВерсияПлатформыБезНомераСборки = "8.3.16" - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "8.3.16.1359") < 0) + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "8.3.16.1476") < 0) Или (ВерсияПлатформыБезНомераСборки = "8.3.17" - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "8.3.17.1386") < 0) Тогда + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "8.3.17.1480") < 0) Тогда ДоступнаУстановкаПатчей = Ложь; КонецЕсли; @@ -491,6 +489,15 @@ КонецФункции +Процедура ПроверитьНаличиеУстаревшихИсправлений() Экспорт + Результат = ИсправленияИзменены(Истина); + Если Результат.ЕстьИзменения Тогда + ТекстСообщения = НСтр("ru = 'Некорректный вызов функции ""ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы"". + |Перед вызовом не были удалены устаревшие патчи, возможно, обновление выполняется нештатными средствами.'"); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения); + КонецЕсли; +КонецПроцедуры + Функция ОписанияНовыхПатчей(АдресХранилища, ТекущиеИсправления) Экспорт Описания = Новый Массив; Для Каждого Исправление Из ТекущиеИсправления Цикл @@ -515,7 +522,7 @@ // Вызывается при завершении обновления конфигурации через COM-соединение. // // Параметры: -// РезультатОбновления - Булево - Результат обновления. +// РезультатОбновления - Булево - результат обновления. // Процедура ЗавершитьОбновление(Знач РезультатОбновления, Знач ЭлектроннаяПочта, Знач ИмяАдминистратораОбновления, Знач КаталогСкрипта = Неопределено) Экспорт @@ -754,6 +761,7 @@ // Устанавливает новое значение в константу настроек обновления // соответственно успешности последней попытки обновления конфигурации. +// Процедура ЗаписатьСтатусОбновления(Знач ИмяАдминистратораОбновления, Знач ОбновлениеЗапланировано, Знач ОбновлениеВыполнено, Знач РезультатОбновления, КаталогСкрипта = "", СообщенияДляЖурналаРегистрации = Неопределено) Экспорт @@ -961,10 +969,10 @@ КонецФункции // Параметры: -// Идентификатор - УникальныйИдентификатор - +// Идентификатор - УникальныйИдентификатор // // Возвращаемое значение: -// РасширениеКонфигурации - +// РасширениеКонфигурации // Функция РасширениеПоИдентификатору(Идентификатор) Отбор = Новый Структура; diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl index 6e48e7ea8..1be9ef13f 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl @@ -13,6 +13,7 @@ // Возвращаемое значение: // Булево - Истина, если соединения есть, // Ложь, если соединений нет. +// Функция НаличиеАктивныхСоединений(СообщенияДляЖурналаРегистрации = Неопределено) Экспорт ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); @@ -100,6 +101,7 @@ ПараметрыТекста["[Шаг8РазрешениеПодключений]"] = НСтр("ru = 'Разрешение подключения новых соединений'"); ПараметрыТекста["[Шаг9Завершение]"] = НСтр("ru = 'Завершение'"); ПараметрыТекста["[Шаг10Восстановление]"] = НСтр("ru = 'Восстановление информационной базы'"); + ПараметрыТекста["[Шаг11УдалениеПатчей]"] = НСтр("ru = 'Удаление исправлений (патчей)'"); ПараметрыТекста["[Шаг41Загрузка]"] = НСтр("ru = 'Загрузка файла обновления в основную базу'"); ПараметрыТекста["[Шаг42ОбновлениеКонфигурации]"] = НСтр("ru = 'Обновление конфигурации информационной базы'"); @@ -131,6 +133,9 @@ ОбновлениеКонфигурации.ОбновитьИсправленияИзСкрипта(НовыеИсправления, УдаляемыеИсправления); КонецПроцедуры +// АПК:299-выкл для использования из скрипта обновления. +// АПК:557-выкл для использования из скрипта обновления. +// Процедура УдалитьИсправленияИзСкрипта() Экспорт Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() @@ -166,5 +171,7 @@ ЗаписьЖурналаРегистрации(ОбновлениеКонфигурации.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,, ТекстСообщения); КонецПроцедуры +// АПК:299-вкл +// АПК:557-вкл #КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index 6259533ce..31a7865c0 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -18,7 +18,7 @@ // - не доступна в модели сервиса (выполняется централизованно через Менеджер сервиса). // // Возвращаемое значение: -// Структура - где: +// Структура: // * Поддерживается - Булево - Истина, если установка обновлений конфигурации поддерживается. // * ОписаниеОшибки - Строка - описание ошибки в случае, если не поддерживается. // @@ -103,7 +103,7 @@ // Отображает форму настроек создания резервной копии. // // Параметры: -// ПараметрыРезервногоКопирования - Структура - параметры формы резервного копирования. +// ПараметрыРезервногоКопирования - Структура - параметры формы резервного копирования: // * СоздаватьРезервнуюКопию - Число - 0, Не создавать резервную копию ИБ; // 1, Создавать временную резервную копию ИБ; // 2, Создавать резервную копию ИБ. @@ -124,10 +124,10 @@ // Возвращает текст заголовка настроек резервного копирования для отображения на форме. // // Параметры: -// Параметры - Структура - Параметры резервного копирования. +// Параметры - Структура - параметры резервного копирования. // // Возвращаемое значение: -// Строка - Заголовок гиперссылки создания резервной копии. +// Строка - заголовок гиперссылки создания резервной копии. // Функция ЗаголовокСозданияРезервнойКопии(Параметры) Экспорт @@ -155,21 +155,21 @@ // скрипт обновления или планирует обновление на указанное время. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма, из которой устанавливается обновление и которая должна быть закрыта в конце. -// Параметры - Структура - Параметры установки обновления: -// * РежимОбновления - Число - Вариант установки обновления. Принимаемые значения: +// Форма - ФормаКлиентскогоПриложения - форма, из которой устанавливается обновление и которая должна быть закрыта в конце. +// Параметры - Структура - параметры установки обновления: +// * РежимОбновления - Число - вариант установки обновления. Принимаемые значения: // 0 - сейчас, 1 - при завершении работы, 2 - планирование обновления. -// * ДатаВремяОбновления - Дата - Дата планируемого обновления. -// * ВыслатьОтчетНаПочту - Булево - Признак необходимости отправки отчета на почту. -// * АдресЭлектроннойПочты - Строка - Адрес электронной почты для отправки отчета о результате обновления. -// * КодЗадачиПланировщика - Число - Код задачи запланированного обновления. -// * ИмяФайлаОбновления - Строка - Имя файла устанавливаемого обновления. -// * СоздаватьРезервнуюКопию - Число - Признак необходимости создания резервной копии. -// * ИмяКаталогаРезервнойКопииИБ - Строка - Каталог сохранения резервной копии. -// * ВосстанавливатьИнформационнуюБазу - Булево - Признак необходимости восстановления базы. -// * ЗавершениеРаботыСистемы - Булево - Признак того, что установка обновления происходит при завершении работы. -// * ФайлыОбновления - Массив - Содержит значения типа Структура. -// * Исправления - структура - с ключами: +// * ДатаВремяОбновления - Дата - дата планируемого обновления. +// * ВыслатьОтчетНаПочту - Булево - признак необходимости отправки отчета на почту. +// * АдресЭлектроннойПочты - Строка - адрес электронной почты для отправки отчета о результате обновления. +// * КодЗадачиПланировщика - Число - код задачи запланированного обновления. +// * ИмяФайлаОбновления - Строка - имя файла устанавливаемого обновления. +// * СоздаватьРезервнуюКопию - Число - признак необходимости создания резервной копии. +// * ИмяКаталогаРезервнойКопииИБ - Строка - каталог сохранения резервной копии. +// * ВосстанавливатьИнформационнуюБазу - Булево - признак необходимости восстановления базы. +// * ЗавершениеРаботыСистемы - Булево - признак того, что установка обновления происходит при завершении работы. +// * ФайлыОбновления - Массив - содержит значения типа Структура. +// * Исправления - структура: // ** Установить - Массив - пути к файлам исправлений во временном хранилище, // которые требуется установить. // ** Удалить - Массив - уникальные идентификаторы (Строка) исправлений, которые требуется удалить. @@ -219,20 +219,15 @@ ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Предупреждение", НСтр("ru = 'Обновление выполнено с очень старой версии программы. - |Данные журнала обновления не были загружены, но сам журнал - |можно найти в папке временных файлов %temp% - - |в папке вида 1Cv8Update.(цифры).'"), - , - Истина); + |Журнал обновления находится в папке временных файлов %temp% + |с именем вида 1Cv8Update.(цифры).'"),, Истина); РезультатОбновления = Истина; // считаем обновление успешным. Иначе ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Информация", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Папка с журналом обновления расположена %1'"), КаталогСкрипта), - , - Истина); + НСтр("ru = 'Папка с журналом обновления: %1'"), КаталогСкрипта),, Истина); #Если Не ВебКлиент И Не МобильныйКлиент Тогда ПрочитатьДанныеВЖурналРегистрации(РезультатОбновления, КаталогСкрипта); @@ -247,6 +242,7 @@ // Параметры: // СтандартнаяОбработка - Булево - если в процедуре установить данному параметру значение Ложь, то инструкция по // "ручному" обновлению показана не будет. +// Процедура УстановитьОбновлениеКонфигурации(ЗавершениеРаботыСистемы = Ложь) Экспорт ПараметрыФормы = Новый Структура("ЗавершениеРаботыСистемы, ПолученоОбновлениеКонфигурации", @@ -355,7 +351,7 @@ Файл = Новый Файл(Параметры.ИмяКаталогаРезервнойКопииИБ); Если Не Файл.Существует() Или Не Файл.ЭтоКаталог() Тогда // АПК:566 синхронные вызовы вне веб-клиента разрешены; ПоказатьПредупреждение(, - НСтр("ru = 'Укажите существующий каталог для сохранения резервной копии ИБ.'")); + НСтр("ru = 'Укажите существующую папку для сохранения резервной копии ИБ.'")); Возврат Ложь; КонецЕсли; КонецЕсли; @@ -849,7 +845,7 @@ ДатаЗапуска = Формат(Параметры.ДатаВремяОбновления, "ДФ=yyyy-MM-ddTHH:mm:ss"); - ПутьСкрипта = СтандартныеПодсистемыКлиент.ПапкаСистемныхПриложений() + "wscript.exe"; + ПутьСкрипта = СтандартныеПодсистемыКлиент.КаталогСистемныхПриложений() + "wscript.exe"; ПараметрыСкрипта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("//nologo ""%1"" /p1:""%2"" /p2:""%3""", ИмяГлавногоФайлаСкрипта, СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы), @@ -899,10 +895,9 @@ ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь, ИмяГлавногоФайлаСкрипта, ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); - Оболочка = Новый COMОбъект("Wscript.Shell"); - Оболочка.RegWrite("HKCU\Software\Microsoft\Internet Explorer\Styles\MaxScriptStatements", 1107296255, "REG_DWORD"); + НеОстанавливатьВыполнениеСценариев(); - ПутьКПрограммеЗапуска = СтандартныеПодсистемыКлиент.ПапкаСистемныхПриложений() + "mshta.exe"; + ПутьКПрограммеЗапуска = СтандартныеПодсистемыКлиент.КаталогСистемныхПриложений() + "mshta.exe"; СтрокаЗапуска = """%1"" ""%2"" [p1]%3[/p1][p2]%4[/p2]"; СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапуска, @@ -914,7 +909,6 @@ Если ПараметрыКлиента.ЭтоБазоваяВерсияКонфигурации Тогда ОбновлениеКонфигурацииВызовСервера.УдалитьИсправленияИзСкрипта(); КонецЕсли; - КодВозврата = Неопределено; ЗапуститьПриложение(СтрокаЗапуска,,, КодВозврата); // АПК:534 запуск скрипта обновления. ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); @@ -922,6 +916,13 @@ КонецПроцедуры +Процедура НеОстанавливатьВыполнениеСценариев() + + Оболочка = Новый COMОбъект("Wscript.Shell"); + Оболочка.RegWrite("HKCU\Software\Microsoft\Internet Explorer\Styles\MaxScriptStatements", 1107296255, "REG_DWORD"); + +КонецПроцедуры + Процедура ЗапланироватьОбновлениеКонфигурации(Параметры, ПараметрыАдминистрирования) СформироватьФайлыСкриптаОбновления(Ложь, Параметры, ПараметрыАдминистрирования); diff --git a/SSL/src/CommonModules/Обсуждения/Module.bsl b/SSL/src/CommonModules/Обсуждения/Module.bsl new file mode 100644 index 000000000..a74b41f91 --- /dev/null +++ b/SSL/src/CommonModules/Обсуждения/Module.bsl @@ -0,0 +1,570 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Отправляет сообщение пользователям от другого пользователя. +// Если между пользователями не было обсуждения, +// то будет создано отображаемое обсуждение. +// +// Выбрасывает исключение, если не удалось отправить сообщение. +// +// Параметры: +// Автор - СправочникСсылка.Пользователи +// - ПользовательСистемыВзаимодействия +// Получатели - Массив Из СправочникСсылка.Пользователи +// - Массив Из ПользовательСистемыВзаимодействия +// Сообщение - см. ОписаниеСообщения. +// ОбсуждениеКонтекст - ЛюбаяСсылка - сообщение будет отправлено в контекстное обсуждение. +// - ИдентификаторОбсужденияСистемыВзаимодействия - сообщение будет отправлено в указанное обсуждение. +// - Неопределено - сообщение будет отправлено в негрупповое обсуждение между автором и получателем. +// +// Пример: +// Сообщение = Обсуждения.ОписаниеСообщение("Привет, мир!"); +// Получатель = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Администратор); +// Обсуждения.ОтправитьСообщение(Пользователи.ТекущийПользователь(), Получатель, Сообщение); +// +Процедура ОтправитьСообщение(Знач Автор, Знач Получатели, Сообщение, ОбсуждениеКонтекст = Неопределено) Экспорт + + Если ТипЗнч(Автор) <> Тип("ПользовательСистемыВзаимодействия") Тогда + Автор = ПользовательСистемыВзаимодействия(Автор); + КонецЕсли; + + Если Автор = Неопределено Тогда + ВызватьИсключение НСтр("ru='Не указан автор сообщения'"); + КонецЕсли; + + Если Получатели.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru='Не указаны получатели сообщения'"); + КонецЕсли; + + ПолучателиПользователиИБ = ТипЗнч(Получатели[0]) = Тип("СправочникСсылка.Пользователи"); + Если ПолучателиПользователиИБ Тогда + Получатели = ПользователиСистемыВзаимодействия(Получатели); + КонецЕсли; + + Если ОбсуждениеКонтекст <> Неопределено + И ТипЗнч(ОбсуждениеКонтекст) <> Тип("ИдентификаторОбсужденияСистемыВзаимодействия") Тогда + + Если НЕ ЗначениеЗаполнено(ОбсуждениеКонтекст) Тогда + ВызватьИсключение НСтр("ru='Передан пустой контекст обсуждения.'"); + КонецЕсли; + + Контекст = Новый КонтекстОбсужденияСистемыВзаимодействия(ПолучитьНавигационнуюСсылку(ОбсуждениеКонтекст)); + Отбор = Новый ОтборОбсужденийСистемыВзаимодействия; + Отбор.КонтекстноеОбсуждение = Истина; + Отбор.КонтекстОбсуждения = Контекст; + Обсуждение = СистемаВзаимодействия.ПолучитьОбсуждения(Отбор); + Если Обсуждение.Количество() = 0 Тогда + Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение(); + Обсуждение.КонтекстОбсуждения = Контекст; + Обсуждение.Групповое = Истина; + Обсуждение.Отображаемое = Истина; + Обсуждение.Заголовок = Строка(ОбсуждениеКонтекст); + Обсуждение.Записать(); + Иначе + Обсуждение = Обсуждение[0]; + КонецЕсли; + + ИдентификаторОбсуждения = Обсуждение.Идентификатор; + + ИначеЕсли ОбсуждениеКонтекст = Неопределено Тогда + + Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение(); + Обсуждение.Групповое = Ложь; + Обсуждение.Участники.Добавить(Автор.Идентификатор); + ДобавитьПолучателей(Обсуждение.Участники, Получатели); + Обсуждение.Записать(); + + ИдентификаторОбсуждения = Обсуждение.Идентификатор; + + Иначе + + ИдентификаторОбсуждения = Обсуждение; + + КонецЕсли; + + СообщениеСВ = СистемаВзаимодействия.СоздатьСообщение(ИдентификаторОбсуждения); + СообщениеСВ.Автор = Автор.Идентификатор; + СообщениеСВ.Текст = Сообщение.Текст; + Для каждого Действие Из Сообщение.Действия Цикл + СообщениеСВ.Действия.Добавить(Действие.Значение, Действие.Представление); + КонецЦикла; + + ДобавитьПолучателей(СообщениеСВ.Получатели, Получатели); + + Для каждого Вложение Из Сообщение.Вложения Цикл + СообщениеСВ.Вложения.Добавить(Вложение.Поток, + Вложение.Имя, + Вложение.ТипСодержимого, + Вложение.Отображаемое); + КонецЦикла; + СообщениеСВ.Записать(); + +КонецПроцедуры + +// Отправляет сообщение всем участникам неконтекстного обсуждения. +// Если обсуждение контекстное, то будет отправление сообщение без адресатов. +// +// Выбрасывает исключение, если не удалось отправить сообщение. +// +// Параметры: +// Автор - СправочникСсылка.Пользователи +// - ПользовательСистемыВзаимодействия +// Сообщение - см. ОписаниеСообщения. +// ОбсуждениеКонтекст - ЛюбаяСсылка - сообщение будет отправлено в контекстное обсуждение. +// - ИдентификаторОбсужденияСистемыВзаимодействия - сообщение будет отправлено в указанное обсуждение. +// +// Пример: +// Сообщение = Обсуждения.ОписаниеСообщение("Привет, мир!"); +// Получатель = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Администратор); +// Обсуждения.ОтправитьУведомление(Пользователи.ТекущийПользователь(), Сообщение, ЗаказКлиента); +// +Процедура ОтправитьУведомление(Знач Автор, Сообщение, ОбсуждениеКонтекст) Экспорт + + Если ТипЗнч(Автор) <> Тип("ПользовательСистемыВзаимодействия") Тогда + Автор = ПользовательСистемыВзаимодействия(Автор); + КонецЕсли; + + Если Автор = Неопределено Тогда + ВызватьИсключение НСтр("ru='Не указан автор сообщения'"); + КонецЕсли; + + Получатели = Новый Массив; + + Если ОбсуждениеКонтекст <> Неопределено + И ТипЗнч(ОбсуждениеКонтекст) <> Тип("ИдентификаторОбсужденияСистемыВзаимодействия") Тогда + + Если НЕ ЗначениеЗаполнено(ОбсуждениеКонтекст) Тогда + ВызватьИсключение НСтр("ru='Передан пустой контекст обсуждения.'"); + КонецЕсли; + + Контекст = Новый КонтекстОбсужденияСистемыВзаимодействия(ПолучитьНавигационнуюСсылку(ОбсуждениеКонтекст)); + Отбор = Новый ОтборОбсужденийСистемыВзаимодействия; + Отбор.КонтекстноеОбсуждение = Истина; + Отбор.КонтекстОбсуждения = Контекст; + Обсуждение = СистемаВзаимодействия.ПолучитьОбсуждения(Отбор); + Если Обсуждение.Количество() = 0 Тогда + Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение(); + Обсуждение.КонтекстОбсуждения = Контекст; + Обсуждение.Групповое = Истина; + Обсуждение.Отображаемое = Истина; + Обсуждение.Заголовок = Строка(ОбсуждениеКонтекст); + Обсуждение.Записать(); + Иначе + Обсуждение = Обсуждение[0]; + КонецЕсли; + + ИдентификаторОбсуждения = Обсуждение.Идентификатор; + Получатели = Обсуждение.Участники; + + ИначеЕсли ОбсуждениеКонтекст = Неопределено Тогда + + ВызватьИсключение НСтр("ru='Не указан идентификатор обсуждения или контекст.'"); + + Иначе + + ИдентификаторОбсуждения = Обсуждение; + Получатели = Обсуждение.Участники; + + КонецЕсли; + + СообщениеСВ = СистемаВзаимодействия.СоздатьСообщение(ИдентификаторОбсуждения); + СообщениеСВ.Автор = Автор.Идентификатор; + СообщениеСВ.Текст = Сообщение.Текст; + Для каждого Действие Из Сообщение.Действия Цикл + СообщениеСВ.Действия.Добавить(Действие.Значение, Действие.Представление); + КонецЦикла; + + ДобавитьПолучателей(СообщениеСВ.Получатели, Получатели); + + Для каждого Вложение Из Сообщение.Вложения Цикл + СообщениеСВ.Вложения.Добавить(Вложение.Поток, + Вложение.Имя, + Вложение.ТипСодержимого, + Вложение.Отображаемое); + КонецЦикла; + СообщениеСВ.Записать(); + +КонецПроцедуры + +// Возвращает Истина, если база зарегистрирована в системе Взаимодействия. +// +// Возвращаемое значение: +// Булево +// +Функция СистемаВзаимодействийПодключена() Экспорт + Если ОбсужденияСлужебный.Заблокированы() Тогда + Возврат Ложь; + КонецЕсли; + + Возврат СистемаВзаимодействия.ИнформационнаяБазаЗарегистрирована(); +КонецФункции + +// Возвращает Истина, если база зарегистрирована в системе Взаимодействия, +// есть хотя бы один зарегистрированный пользователь. +// +// Возвращаемое значение: +// Булево +// +Функция ОбсужденияДоступны() Экспорт + Возврат ОбсужденияСлужебный.Подключены(); +КонецФункции + +// Формирует соответствие между идентификаторами пользователей системы взаимодействия +// и элементами справочника Пользователи. +// +// Параметры: +// ПользователиСистемыВзаимодействия - Массив Из ИдентификаторПользователяСистемыВзаимодействия +// - КоллекцияИдентификаторовПользователейСистемыВзаимодействия +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - ИдентификаторПользователяСистемыВзаимодействия +// * Значение - см. ПользовательИнформационнойБазы +// +Функция ПользователиИнформационнойБазы(ПользователиСистемыВзаимодействия)Экспорт + ТипыВходныхПараметров = Новый Массив; + ТипыВходныхПараметров.Добавить(Тип("КоллекцияИдентификаторовПользователейСистемыВзаимодействия")); + ТипыВходныхПараметров.Добавить(Тип("Массив")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПользователиИнформационнойБазы", + "ПользователиСистемыВзаимодействия", + ПользователиСистемыВзаимодействия, + ТипыВходныхПараметров); + + Результат = Новый Соответствие; + Ошибки = Новый Массив; + Для каждого Идентификатор Из ПользователиСистемыВзаимодействия Цикл + Попытка + Результат.Вставить(Идентификатор, ПользовательИнформационнойБазы(Идентификатор)); + Исключение + Ошибки.Добавить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Результат.Вставить(Идентификатор, Неопределено); + КонецПопытки; + КонецЦикла; + + Если Ошибки.Количество() > 0 Тогда + + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации( + НСтр("ru='Пользователи информационной базы'", ОбщегоНазначения.КодОсновногоЯзыка())), + УровеньЖурналаРегистрации.Ошибка,,, + СтрСоединить(Ошибки, Символы.ПС + Символы.ПС)); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Выполняет поиск элемента справочника Пользователи по идентификатору пользователя Системы Взаимодействия. +// +// Выбрасывает исключение, если пользователь не был найден. +// +// Параметры: +// ПользовательСистемыВзаимодействия - ИдентификаторПользователяСистемыВзаимодействия. +// +// Возвращаемое значение: +// СправочникСсылка.Пользователи +// +Функция ПользовательИнформационнойБазы(ПользовательСистемыВзаимодействия) Экспорт + Результат = Неопределено; + + ПользовательСВ = СистемаВзаимодействия.ПолучитьПользователя(ПользовательСистемыВзаимодействия); + Результат = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательСВ.ИдентификаторПользователяИнформационнойБазы); + Если НЕ ЗначениеЗаполнено(Результат) Тогда + + ШаблонОшибки = НСтр("ru='Не удалось получить пользователя информационной базы по идентификатору пользователя системы взаимодействия (%1)'"); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, Строка(ПользовательСистемыВзаимодействия)); + ВызватьИсключение ОписаниеОшибки; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Формирует соответствие между элементами справочника Пользователи +// и идентификаторами пользователей системы взаимодействия. +// +// Если пользователь не найден, то будет попытка создать пользователя системы взаимодействия. +// Если пользователь не найден и при создании нового пользователя было выброшено исключение, +// то возвращается Неопределено. +// +// Параметры: +// ПользователиИнформационнойБазы - Массив Из СправочникСсылка.Пользователи +// +// Возвращаемое значение: +// Соответствие: +// * Ключ - СправочникСсылка.Пользователи +// * Значение - см. ПользовательСистемыВзаимодействия +// +Функция ПользователиСистемыВзаимодействия(ПользователиИнформационнойБазы) Экспорт + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( + "ПользователиСистемыВзаимодействия", + "ПользователиИнформационнойБазы", + ПользователиИнформационнойБазы, + Тип("Массив")); + + Результат = Новый Соответствие; + Ошибки = Новый Массив; + + Для каждого Пользователь Из ПользователиИнформационнойБазы Цикл + + Попытка + Результат.Вставить(Пользователь, ПользовательСистемыВзаимодействия(Пользователь)); + Исключение + Ошибки.Добавить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Результат.Вставить(Пользователь, Неопределено); + КонецПопытки; + + КонецЦикла; + + Если Ошибки.Количество() > 0 Тогда + + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации( + НСтр("ru='ПользователиСистемыВзаимодействия'", ОбщегоНазначения.КодОсновногоЯзыка())), + УровеньЖурналаРегистрации.Ошибка,,, + СтрСоединить(Ошибки, Символы.ПС)); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Получает идентификатор пользователя системы взаимодействия. +// Если пользователь не найден, то будет выполнена попытка создать нового пользователя. +// +// Выбрасывает исключение, если: +// - не удалось получить идентификатор пользователя информационной базы; +// - не удалось создать пользователя системы Взаимодействия. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи +// - СправочникОбъект.Пользователи +// +// Возвращаемое значение: +// ПользовательСистемыВзаимодействия +// +Функция ПользовательСистемыВзаимодействия(Пользователь) Экспорт + Результат = Неопределено; + + УстановитьПривилегированныйРежим(Истина); + ИдентификаторПользователяИнформационнойБазы = ?(ТипЗнч(Пользователь) = Тип("СправочникОбъект.Пользователи"), + Пользователь.ИдентификаторПользователяИБ, + ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + Пользователь, "ИдентификаторПользователяИБ")); + УстановитьПривилегированныйРежим(Ложь); + + Если Не ЗначениеЗаполнено(ИдентификаторПользователяИнформационнойБазы) Тогда + ШаблонОшибки = НСтр("ru='Не удалось получить идентификатор пользователя (%1)'"); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОшибки, + Строка(Пользователь)); + + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + + ОшибкаПолучениеИдентификатораСВ = ""; + + Попытка + ИдентификаторПользователяСВ = СистемаВзаимодействия.ПолучитьИдентификаторПользователя( + ИдентификаторПользователяИнформационнойБазы); + Результат = СистемаВзаимодействия.ПолучитьПользователя(ИдентификаторПользователяСВ); + Исключение + ОшибкаПолучениеИдентификатораСВ = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если Результат = Неопределено Тогда + + Попытка + УстановитьПривилегированныйРежим(Истина); + Результат = НовыйПользовательСистемыВзаимодействия(Пользователь); + УстановитьПривилегированныйРежим(Ложь); + Исключение + Ошибка = ИнформацияОбОшибке(); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='При создании пользователя %1 произошла ошибка.'"), + Пользователь); + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + ОшибкаПолучениеИдентификатораСВ + + Символы.ПС + ПодробноеПредставлениеОшибки(Ошибка); + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + ОписаниеОшибки); + ВызватьИсключение; + КонецПопытки; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Обновляет дополнительную информацию пользователя системы взаимодействия. +// Например, телефон и адрес электронной почты. +// Если пользователь системы взаимодействия еще не создан, то будет создан новый пользователь +// системы взаимодействия. +// +// Выбрасывает исключение, если обновить пользователя системы взаимодействия не удалось. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи +// - СправочникОбъект.Пользователи +// +Процедура ОбновитьПользователяВСистемеВзаимодействия(Пользователь) Экспорт + + Если Не СистемаВзаимодействийПодключена() Тогда + Возврат; + КонецЕсли; + + Попытка + ПользовательСВ = ПользовательСистемыВзаимодействия(Пользователь); + ОписаниеПользователя = ОписаниеПользователя(Пользователь); + ОбновитьОписаниеПользователяВСистемеВзаимодействия( + ПользовательСВ, + ОписаниеПользователя); + Исключение + ОписаниеОшибки = НСтр("ru='Не удалось обновить пользователя системы взаимодействия.'"); + Ошибка = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации( + НСтр("ru='Обновить описание в системе взаимодействия'", ОбщегоНазначения.КодОсновногоЯзыка())), + УровеньЖурналаРегистрации.Ошибка, + Пользователь.Метаданные(), + Пользователь.Ссылка, + ОписаниеОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(Ошибка)); + КонецПопытки; + +КонецПроцедуры + +// Формирует описание сообщение для отправки сообщения через процедуры +// и функции подсистемы Обсуждения. +// +// Параметры: +// Текст - Строка - текст сообщения системы Взаимодействия +// - ФорматированнаяСтрока +// +// Возвращаемое значение: +// Структура: +// * Текст - ФорматированнаяСтрока +// * Вложения - Массив Из см. ОписаниеВложения +// * Действия - СписокЗначений - см. синтакс-помощник СообщениеСистемыВзаимодействия +// +Функция ОписаниеСообщения(Знач Текст) Экспорт + Описание = Новый Структура; + + Если ТипЗнч(Текст) = Тип("Строка") Тогда + Текст = Новый ФорматированнаяСтрока(Текст); + КонецЕсли; + + Описание.Вставить("Текст", Текст); + Описание.Вставить("Вложения", Новый Массив); + Описание.Вставить("Действия", Новый СписокЗначений); + Возврат Описание; +КонецФункции + +// Формирует описание вложения для отправки сообщения через процедуры +// и функции подсистемы Обсуждения. +// +// Параметры: +// Поток - Поток - поток, из которого будет создано вложение системы Взаимодействия. +// - ПотокВПамяти +// - ФайловыйПоток +// Наименование - Строка +// +// Возвращаемое значение: +// Структура: +// * Поток - Поток - поток, из которого будет создано вложение системы взаимодействия. +// - ПотокВПамяти +// - ФайловыйПоток +// * Наименование - Строка +// * ТипСодержимого - Строка +// * Отображаемое - Булево - значение по умолчанию Истина +// +Функция ОписаниеВложения(Поток, Наименование) Экспорт + + Описание = Новый Структура; + Описание.Вставить("Поток", Поток); + Описание.Вставить("Наименование", Наименование); + Описание.Вставить("ТипСодержимого", ""); + Описание.Вставить("Отображаемое", Истина); + Возврат Описание; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ОбновитьОписаниеПользователяВСистемеВзаимодействия(ПользовательСВ, ОписаниеПользователя) + + Фотография = ОписаниеПользователя.Фотография; + Если Фотография <> Неопределено Тогда + ПользовательСВ.Картинка = Новый Картинка(Фотография); + КонецЕсли; + + ПользовательСВ.АдресЭлектроннойПочты = ОписаниеПользователя.АдресЭлектроннойПочты; + ПользовательСВ.НомерТелефона = ОписаниеПользователя.Телефон; + ПользовательСВ.Заблокирован = ОписаниеПользователя.Недействителен ИЛИ ОписаниеПользователя.ПометкаУдаления; + ПользовательСВ.Записать(); + +КонецПроцедуры + +// Создает нового пользователя системы взаимодействий и заполняет его данными пользователя +// информационной базы. +// +// Выбрасывает исключение, если не удалось создать нового пользователя системы Взаимодействия. +// +// Параметры: +// Пользователь - СправочникиСсылка.Пользователи - пользователь, для которого будет создан +// пользователь системы взаимодействия. +// Возвращаемое значение: +// ПользовательСистемыВзаимодействия +// +Функция НовыйПользовательСистемыВзаимодействия(Пользователь) + ОписаниеПользователя = ОписаниеПользователя(Пользователь); + + Если НЕ ЗначениеЗаполнено(ОписаниеПользователя.ИдентификаторПользователяИБ) Тогда + ВызватьИсключение НСтр("ru='Не существует пользователь информационной базы'"); + КонецЕсли; + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОписаниеПользователя.ИдентификаторПользователяИБ); + ПользовательСВ = СистемаВзаимодействия.СоздатьПользователя(ПользовательИБ); + + ОбновитьОписаниеПользователяВСистемеВзаимодействия(ПользовательСВ, ОписаниеПользователя); + + Возврат ПользовательСВ; +КонецФункции + +Функция ОписаниеПользователя(Пользователь) + Возврат ПользователиСлужебный.ОписаниеПользователя(Пользователь); +КонецФункции + +Процедура ДобавитьПолучателей(ПолучателиПриемник, ПолучателиИсточник) + + Если ПолучателиИсточник.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПолучателиПользователиИБ = ТипЗнч(ПолучателиИсточник) = Тип("Соответствие") + ИЛИ ТипЗнч(ПолучателиИсточник[0]) = Тип("СправочникСсылка.Пользователи"); + + Если ПолучателиПользователиИБ Тогда + Для каждого Получатель Из ПолучателиИсточник Цикл + + Если Получатель.Значение <> Неопределено Тогда + ПолучателиПриемник.Добавить(Получатель.Значение.Идентификатор); + КонецЕсли; + + КонецЦикла; + + Иначе + Для каждого Получатель Из ПолучателиИсточник Цикл + ПолучателиПриемник.Добавить(Получатель.Идентификатор); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/Обсуждения/Обсуждения.mdo b/SSL/src/CommonModules/Обсуждения/Обсуждения.mdo new file mode 100644 index 000000000..67ce0f058 --- /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..024452d25 --- /dev/null +++ b/SSL/src/CommonModules/ОбсужденияКлиент/Module.bsl @@ -0,0 +1,30 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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..5f4aafe5b --- /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 edb62090e..59c8eae93 100644 --- a/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl @@ -72,9 +72,11 @@ КонецПроцедуры // Параметры: -// Отказ - Булево - -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - -// Объект - ДанныеФормыСтруктура, СправочникОбъект.Пользователи - +// Отказ - Булево +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов +// Объект - ДанныеФормыСтруктура +// - СправочникОбъект.Пользователи // Процедура ПриСозданииНаСервереПользователя(Отказ, Форма, Объект) Экспорт @@ -143,8 +145,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ДляВызоваИзДругихПодсистем // Параметры: // ЗапросыРазрешений - см. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам.ЗапросыРазрешений @@ -160,4 +161,64 @@ КонецПроцедуры +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СобытиеЖурналаРегистрации(ДетализацияСобытия = "") Экспорт + Возврат НСтр("ru='Обсуждения'", ОбщегоНазначения.КодОсновногоЯзыка()) + + ?(ПустаяСтрока(ДетализацияСобытия), "", "."+ДетализацияСобытия); +КонецФункции + +Процедура СоздатьИзменитьИнтеграцию(Параметры) Экспорт + + Идентификатор = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Идентификатор"); + Если Идентификатор <> Неопределено Тогда + НоваяИнтеграция = СистемаВзаимодействия.ПолучитьИнтеграцию(Идентификатор); + Иначе + НоваяИнтеграция = СистемаВзаимодействия.СоздатьИнтеграцию(); + КонецЕсли; + + НоваяИнтеграция.ТипВнешнейСистемы = Параметры.Тип; + НоваяИнтеграция.Представление = Параметры.Ключ; + НоваяИнтеграция.Ключ = Параметры.Ключ; + НоваяИнтеграция.Использование = Истина; + ОписаниеВнешнейСистемы = СистемаВзаимодействия.ПолучитьОписаниеВнешнейСистемы(Параметры.Тип); + + НеУказанныеПараметры = Новый Массив; + Для каждого ПараметрИнтеграции Из ОписаниеВнешнейСистемы.ОписанияПараметров Цикл + Если НЕ Параметры.Свойство(ПараметрИнтеграции.Имя) Тогда + Если ПараметрИнтеграции.Обязательный Тогда + НеУказанныеПараметры.Добавить(ПараметрИнтеграции.Имя); + КонецЕсли; + Иначе + НоваяИнтеграция.ПараметрыВнешнейСистемы.Вставить(ПараметрИнтеграции.Имя, Параметры[ПараметрИнтеграции.Имя]); + КонецЕсли; + КонецЦикла; + + Если НеУказанныеПараметры.Количество() > 0 Тогда + ВызватьИсключение НСтр("ru='Не заполнены параметры интеграции: + |%1'", СтрСоединить(НеУказанныеПараметры, Символы.ПС + "- ")); + КонецЕсли; + + НоваяИнтеграция.Участники.Очистить(); + Для каждого Участник Из Обсуждения.ПользователиСистемыВзаимодействия(Параметры.Участники) Цикл + Если Участник.Значение <> Неопределено Тогда + НоваяИнтеграция.Участники.Добавить(Участник.Значение.Идентификатор); + КонецЕсли; + КонецЦикла; + + НоваяИнтеграция.Записать(); +КонецПроцедуры + +Процедура ОтключитьИнтеграцию(Идентификатор) Экспорт + + Интеграция = СистемаВзаимодействия.ПолучитьИнтеграцию(Идентификатор); + Интеграция.Использование = Ложь; + Интеграция.Записать(); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl index e8ace8391..6b2b37bba 100644 --- a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl @@ -56,10 +56,78 @@ КонецПроцедуры +Процедура ПриПолученииФормыВыбораПользователейСистемыВзаимодействия(НазначениеВыбора, Форма, ИдентификаторОбсуждения, Параметры, ВыбраннаяФорма, СтандартнаяОбработка) Экспорт + + // Не переопределяем, при выборе получателя доступны только пользователи обсуждения. + Если НазначениеВыбора = НазначениеВыбораПользователейСистемыВзаимодействия.ПолучательСообщения Тогда + Возврат; + КонецЕсли; + + Параметры.Вставить("ВыборУчастниковОбсуждения", Истина); + Параметры.Вставить("РежимВыбора", Истина); + Параметры.Вставить("ЗакрыватьПриВыборе", Ложь); + Параметры.Вставить("МножественныйВыбор", Истина); + Параметры.Вставить("РасширенныйПодбор", Истина); + Параметры.Вставить("ВыбранныеПользователи", Новый Массив); + Параметры.Вставить("ЗаголовокФормыПодбора", "Участники обсуждения"); + + СтандартнаяОбработка = Ложь; + + ВыбраннаяФорма = "Справочник.Пользователи.ФормаВыбора"; + +КонецПроцедуры + +Процедура ПоказатьНастройкуИнтеграцииСВнешнимиСистемами() Экспорт + ОткрытьФорму("Обработка.ПодключениеОбсуждений.Форма.НастройкиСообщенийИзДругихПрограмм",,ЭтотОбъект); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +Процедура НачатьПодборУчастниковОбсуждения(Элемент) Экспорт + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыФормы.Вставить("МножественныйВыбор", Истина); + ПараметрыФормы.Вставить("РасширенныйПодбор", Истина); + ПараметрыФормы.Вставить("ВыбранныеПользователи", Новый Массив); + ПараметрыФормы.Вставить("ЗаголовокФормыПодбора", "Участники обсуждения"); + + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы,Элемент,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +Процедура ПоказатьИнформациюОбИнтеграции(Форма, ОписаниеИнтеграции, ОповещениеОбИзмененииИнтеграции) Экспорт + + Оповещение = Новый ОписаниеОповещения("СозданиеИнтеграцииЗавершение", ЭтотОбъект, + Новый Структура("Оповещение", ОповещениеОбИзмененииИнтеграции)); + + ТипыИнтеграции = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем(); + ИмяФормы = "Обработка.ПодключениеОбсуждений.Форма"; + Если ОписаниеИнтеграции.Тип = ТипыИнтеграции.Телеграм Тогда + ИмяФормы = ИмяФормы + ".СозданиеБотаТелеграм"; + ИначеЕсли ОписаниеИнтеграции.Тип = ТипыИнтеграции.ВКонтакте Тогда + ИмяФормы = ИмяФормы + ".СозданиеБотаВКонтакте"; + КонецЕсли; + + ОткрытьФорму(ИмяФормы, + ОписаниеИнтеграции, + Форма,,,, + Оповещение, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +Процедура СозданиеИнтеграцииЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, Истина); + +КонецПроцедуры + Процедура ПослеОтветаНаВопросОбОтключении(КодВозврата, Контекст) Экспорт Если КодВозврата = "Отключить" Тогда diff --git a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиентСервер/Module.bsl new file mode 100644 index 000000000..4c9c882e2 --- /dev/null +++ b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиентСервер/Module.bsl @@ -0,0 +1,20 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Функция ТипыВнешнихСистем() Экспорт + + ТипыИнтеграций = Новый Структура; + ТипыИнтеграций.Вставить("Телеграм", "Telegram"); + ТипыИнтеграций.Вставить("ВКонтакте", "VK"); + Возврат ТипыИнтеграций; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиентСервер/ОбсужденияСлужебныйКлиентСервер.mdo b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиентСервер/ОбсужденияСлужебныйКлиентСервер.mdo new file mode 100644 index 000000000..b607f1685 --- /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 7f6bf0e67..0d23a207f 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -101,11 +101,13 @@ // Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате // требований к свойствам структуры. // Например, "Код, Наименование, Родитель". -// - Структура, ФиксированнаяСтруктура - в качестве ключа передается +// - Структура +// - ФиксированнаяСтруктура - в качестве ключа передается // псевдоним поля для возвращаемой структуры с результатом, а в качестве // значения (опционально) фактическое имя поля в таблице. // Если ключ задан, а значение не определено, то имя поля берется из ключа. -// - Массив, ФиксированныйМассив - имена реквизитов в формате требований +// - Массив +// - ФиксированныйМассив - имена реквизитов в формате требований // к свойствам структуры. // ВыбратьРазрешенные - Булево - если Истина, то запрос к объекту выполняется с учетом прав пользователя; // если есть ограничение на уровне записей, то все реквизиты вернутся со @@ -346,11 +348,13 @@ // то следует использовать предварительный переход в привилегированный режим. // // Параметры: -// Ссылки - Массив, ФиксированныйМассив - ссылки на объекты. +// Ссылки - Массив +// - ФиксированныйМассив - ссылки на объекты. // Если массив пуст, то результатом будет пустое соответствие. // Реквизиты - Строка - имена реквизитов перечисленные через запятую, в формате требований к свойствам // структуры. Например, "Код, Наименование, Родитель". -// - Массив, ФиксированныйМассив - имена реквизитов в формате требований +// - Массив +// - ФиксированныйМассив - имена реквизитов в формате требований // к свойствам структуры. // ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя; // если какой-либо объект будет исключен из выборки по правам, то этот объект @@ -361,7 +365,7 @@ // Возвращаемое значение: // Соответствие - список объектов и значений их реквизитов: // * Ключ - ЛюбаяСсылка - ссылка на объект; -// * Значение - Структура - значения реквизитов: +// * Значение - Структура: // ** Ключ - Строка - имя реквизита; // ** Значение - Произвольный - значение реквизита. // @@ -394,7 +398,8 @@ Если СсылкиПоТипам[Тип] = Неопределено Тогда СсылкиПоТипам[Тип] = Новый Массив; КонецЕсли; - СсылкиПоТипам[Тип].Добавить(Ссылка); + ЭлементПоТипу = СсылкиПоТипам[Тип]; // Массив + ЭлементПоТипу.Добавить(Ссылка); КонецЦикла; ТекстыЗапросов = Новый Массив; @@ -499,7 +504,7 @@ // или любой из реквизитов. // // Возвращаемое значение: -// Соответствие - Ключ - ссылка на объект, Значение - значение прочитанного реквизита. +// Соответствие - Ключ - ссылка на объект, Значение - значение прочитанного реквизита: // * Ключ - ссылка на объект, // * Значение - значение прочитанного реквизита. // @@ -525,7 +530,7 @@ // к проводке или определении значения параметра ИмяСобытия метода ЗаписьЖурналаРегистрации. // // Возвращаемое значение: -// Строка - код языка. +// Строка // Функция КодОсновногоЯзыка() Экспорт @@ -577,10 +582,10 @@ // те из них, которые не проведены. // // Параметры: -// Документы - Массив - документы, статус проведения которых необходимо проверить. +// Документы - Массив Из ДокументСсылка - документы, статус проведения которых необходимо проверить. // // Возвращаемое значение: -// Массив - непроведенные документы. +// Массив Из ДокументСсылка - непроведенные документы. // Функция ПроверитьПроведенностьДокументов(Знач Документы) Экспорт @@ -636,10 +641,10 @@ // Выполняет попытку проведения документов. // // Параметры: -// Документы - Массив - документы, которые необходимо провести. +// Документы - Массив из ДокументСсылка - документы, которые необходимо провести. // // Возвращаемое значение: -// Массив из Структура - результат проведения: +// Массив из Структура: // * Ссылка - ДокументСсылка - документ, который не удалось провести, // * ОписаниеОшибки - Строка - текст описания ошибки при проведении. // @@ -681,7 +686,8 @@ // При вызове в неразделенном сеансе не выявляет ссылок в разделенных областях. // // Параметры: -// СсылкаИлиМассивСсылок - ЛюбаяСсылка, Массив - объект или список объектов. +// СсылкаИлиМассивСсылок - ЛюбаяСсылка +// - Массив - объект или список объектов. // ИскатьСредиСлужебныхОбъектов - Булево - если Истина, то не будут учитываться // исключения поиска ссылок, заданные при разработке конфигурации. // Про исключение поиска ссылок подробнее @@ -713,7 +719,7 @@ Исключения = Новый Массив; Для Каждого МестоИспользования Из МестаИспользования Цикл - Если ЭтоСлужебныеДанные(МестоИспользования, ИсключенияПоискаСсылок) Тогда + Если ЭтоСлужебнаяСвязьДанных(МестоИспользования, ИсключенияПоискаСсылок) Тогда Исключения.Добавить(МестоИспользования); КонецЕсли; КонецЦикла; @@ -730,14 +736,20 @@ // Производит замену ссылок во всех данных. После замены неиспользуемые ссылки опционально удаляются. // Замена ссылок происходит с транзакциями по изменяемому объекту и его связям, не по анализируемой ссылке. // При вызове в неразделенном сеансе не выявляет ссылок в разделенных областях. +// Если описаны связи подчиненных и основных объектов (см. СвязиПодчиненныхОбъектов), то: +// * при замене основных объектов будет выполнен поиск замен подчиненных объектов +// * если ВыполнятьАвтоматическийПоискЗамен = Истина, то будет выполнена попытка поиска замен для подчиненных объектов +// по значениям полей связи. В случае, если объект не существует, будет выполнена процедура ПриПоискеЗаменыСсылок +// * если МетодПоиска в описании связей задан, то если автоматический поиск не нашел замен +// или не выполнялся, будет вызван МетодПоиска для подбора замен // // Параметры: -// ПарыЗамен - Соответствие - пары замен. +// ПарыЗамен - Соответствие: // * Ключ - ЛюбаяСсылка - что ищем (дубль). // * Значение - ЛюбаяСсылка - на что заменяем (оригинал). // Ссылки сами на себя и пустые ссылки для поиска будут проигнорированы. // -// ПараметрыЗамены - см. ОбщегоНазначения.ПараметрыЗаменыСсылок. +// ПараметрыЗамены - см. ОбщегоНазначения.ПараметрыЗаменыСсылок // // Возвращаемое значение: // ТаблицаЗначений - неуспешные замены (ошибки): @@ -754,6 +766,7 @@ // Функция ЗаменитьСсылки(Знач ПарыЗамен, Знач ПараметрыЗамены = Неопределено) Экспорт + Статистика = Новый Соответствие; ТипСтрока = Новый ОписаниеТипов("Строка"); ОшибкиЗамены = Новый ТаблицаЗначений; @@ -768,92 +781,23 @@ Результат = Новый Структура; Результат.Вставить("ЕстьОшибки", Ложь); + Результат.Вставить("ОчередьКНепосредственномуУдалению", Новый Массив); Результат.Вставить("Ошибки", ОшибкиЗамены); + ПараметрыВыполнения = НовыйПараметрыВыполненияЗаменыСсылок(ПараметрыЗамены); + + ПараметрыПоискаМестИспользования = ПараметрыПоискаМестИспользования(); + ДополнитьИсключенияПоискаСсылокПодчиненнымиОбъектами(ПараметрыПоискаМестИспользования.ДополнительныеИсключенияПоискаСсылок); + ПараметрыВыполнения.Вставить("ПараметрыПоискаМестИспользования", ПараметрыПоискаМестИспользования); + + ИнтеграцияПодсистемБСП.ПередПоискомМестИспользования(ПарыЗамен, ПараметрыВыполнения); + Если ПарыЗамен.Количество() = 0 Тогда Возврат Результат.Ошибки; КонецЕсли; - // Значения по умолчанию. - ПараметрыПоУмолчанию = ПараметрыЗаменыСсылок(); - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("УдалятьНепосредственно", ПараметрыПоУмолчанию.СпособУдаления = "Непосредственно"); - ПараметрыВыполнения.Вставить("ПомечатьНаУдаление", ПараметрыПоУмолчанию.СпособУдаления = "Пометка"); - ПараметрыВыполнения.Вставить("ВключатьБизнесЛогику", ПараметрыПоУмолчанию.ВключатьБизнесЛогику); - ПараметрыВыполнения.Вставить("ПривилегированнаяЗапись", ПараметрыПоУмолчанию.ПривилегированнаяЗапись); - ПараметрыВыполнения.Вставить("УчитыватьПрикладныеПравила", ПараметрыПоУмолчанию.УчитыватьПрикладныеПравила); - ЗаменаПарыВТранзакции = ПараметрыПоУмолчанию.ЗаменаПарыВТранзакции; - - // Переданные параметры обрабатываются условно для обратной совместимости. - ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "СпособУдаления"); - Если ЗначениеПараметра = "Непосредственно" Тогда - ПараметрыВыполнения.УдалятьНепосредственно = Истина; - ПараметрыВыполнения.ПомечатьНаУдаление = Ложь; - ИначеЕсли ЗначениеПараметра = "Пометка" Тогда - ПараметрыВыполнения.УдалятьНепосредственно = Ложь; - ПараметрыВыполнения.ПомечатьНаУдаление = Истина; - КонецЕсли; - - ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "ВключатьБизнесЛогику"); - Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда - ПараметрыВыполнения.ВключатьБизнесЛогику = ЗначениеПараметра; - КонецЕсли; - - ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "ЗаменаПарыВТранзакции"); - Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда - ЗаменаПарыВТранзакции = ЗначениеПараметра; - КонецЕсли; - - ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "ПривилегированнаяЗапись"); - Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда - ПараметрыВыполнения.ПривилегированнаяЗапись = ЗначениеПараметра; - КонецЕсли; - - ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "УчитыватьПрикладныеПравила"); - Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда - ПараметрыВыполнения.УчитыватьПрикладныеПравила = ЗначениеПараметра; - КонецЕсли; - - // Поиск дублей. - Дубли = Новый Массив; // Массив из ЛюбаяСсылка - - Для Каждого КлючЗначение Из ПарыЗамен Цикл - Дубль = КлючЗначение.Ключ; - Оригинал = КлючЗначение.Значение; - Если Дубль = Оригинал Или Дубль.Пустая() Тогда - Продолжить; // Самого на себя и пустые ссылки не заменяем. - КонецЕсли; - Дубли.Добавить(Дубль); - // Пропускаем промежуточные замены, чтобы не строить граф (если A->B и B->C то вместо A->B производится замена A->C). - ОригиналОригинала = ПарыЗамен[Оригинал]; - ЕстьОригиналОригинала = (ОригиналОригинала <> Неопределено И ОригиналОригинала <> Дубль И ОригиналОригинала <> Оригинал); - Если ЕстьОригиналОригинала Тогда - Пока ЕстьОригиналОригинала Цикл - Оригинал = ОригиналОригинала; - ОригиналОригинала = ПарыЗамен[Оригинал]; - ЕстьОригиналОригинала = (ОригиналОригинала <> Неопределено И ОригиналОригинала <> Дубль И ОригиналОригинала <> Оригинал); - КонецЦикла; - ПарыЗамен.Вставить(Дубль, Оригинал); - КонецЕсли; - КонецЦикла; - - Если ПараметрыВыполнения.УчитыватьПрикладныеПравила И ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда - МодульПоискИУдалениеДублей = ОбщийМодуль("ПоискИУдалениеДублей"); - Ошибки = МодульПоискИУдалениеДублей.ПроверитьВозможностьЗаменыЭлементов(ПарыЗамен, ПараметрыЗамены); - Для Каждого КлючЗначение Из Ошибки Цикл - Дубль = КлючЗначение.Ключ; - Оригинал = ПарыЗамен[Дубль]; - ТекстОшибки = КлючЗначение.Значение; - Причина = ОписаниеОшибкиЗамены("ОшибкаЗаписи", Оригинал, ПредметСтрокой(Оригинал), ТекстОшибки); - ЗарегистрироватьОшибкуЗамены(Результат, Дубль, Причина); - - Индекс = Дубли.Найти(Дубль); - Если Индекс <> Неопределено Тогда - Дубли.Удалить(Индекс); // пропускаем проблемный элемент. - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ТаблицаПоиска = МестаИспользования(Дубли); + Дубли = СформироватьДубли(ПараметрыВыполнения, ПараметрыЗамены, ПарыЗамен, Результат); + ТаблицаПоиска = МестаИспользования(Дубли,,ПараметрыВыполнения.ПараметрыПоискаМестИспользования); // Для каждой ссылки объекта будем производить замены в порядке "Константа", "Объект", "Набор". // Одновременно пустая строка в этой колонке - флаг того, что эта замена не нужна или уже была произведена. @@ -889,14 +833,30 @@ ОтключитьОбновлениеКлючейДоступа(Истина); Попытка - Если ЗаменаПарыВТранзакции Тогда - Для Каждого Дубль Из Дубли Цикл - ЗаменитьСсылкуОднойТранзакцией(Результат, Дубль, ПараметрыВыполнения, ТаблицаПоиска); - КонецЦикла; - Иначе - ЗаменитьСсылкиКороткимиТранзакциями(Результат, ПараметрыВыполнения, Дубли, ТаблицаПоиска); - КонецЕсли; + КоличествоДублей = Дубли.Количество(); + Сч = 1; + Для Каждого Дубль Из Дубли Цикл + + БылиОшибки = Результат.ЕстьОшибки; + Результат.ЕстьОшибки = Ложь; + + ЗаменитьСсылкиКороткимиТранзакциями(Результат, ПараметрыВыполнения, Дубль, ТаблицаПоиска); + + Если НЕ Результат.ЕстьОшибки Тогда + ПараметрыВыполнения.УспешныеЗамены.Вставить(Дубль, ПараметрыВыполнения.ПарыЗамен[Дубль]); + КонецЕсли; + Результат.ЕстьОшибки = Результат.ЕстьОшибки ИЛИ БылиОшибки; + + ДлительныеОперации.СообщитьПрогресс(Сч + ,СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Замена дублей...обработано (%1 из %2)'"), Сч, КоличествоДублей)); + Сч = Сч + 1; + ДобавитьВСтатистикуЗаменыСсылок(Статистика, Дубль, Результат.ЕстьОшибки); + + КонецЦикла; + + ОбщегоНазначенияПереопределяемый.ПослеЗаменыСсылок(Результат, ПараметрыВыполнения, ТаблицаПоиска); + ОтключитьОбновлениеКлючейДоступа(Ложь); Исключение @@ -904,13 +864,28 @@ ВызватьИсключение; КонецПопытки; + + Если ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") + И ПараметрыВыполнения.УдалятьНепосредственно Тогда + + УдалениеПомеченныхМенеджер = ОбщийМодуль("УдалениеПомеченныхОбъектов"); + + ДлительныеОперации.СообщитьПрогресс(0, НСтр("ru='Удаление дублей...'")); + РезультатУдаления = УдалениеПомеченныхМенеджер.УдалитьПомеченныеОбъекты(Результат.ОчередьКНепосредственномуУдалению); + ЗарегистрироватьОшибкиУдаления(Результат, РезультатУдаления.ПрепятствующиеУдалению); + + КонецЕсли; + + ОтправитьСтатистикуЗаменыСсылок(Статистика); + Возврат Результат.Ошибки; + КонецФункции // Конструктор структуры для параметра ПараметрыЗамены функции ОбщегоНазначения.ЗаменитьСсылки. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * СпособУдаления - Строка - указывает, что делать с дублем после успешной замены: // "" - не предпринимать никаких действий (по умолчанию); // "Пометка" - помечать на удаление; @@ -925,7 +900,7 @@ // Если Истина (по умолчанию), то все места использования одного дубля заменяются в одной транзакции. // Это может быть очень ресурсоемко в случае большого количества мест использований. // Если Ложь, то замена в каждом месте использования выполняется в отдельной транзакции. -// * ПривилегированнаяЗапись - Булево - Если Истина, то устанавливать привилегированный режим перед запись +// * ПривилегированнаяЗапись - Булево - если Истина, то устанавливать привилегированный режим перед запись // объектов при замене в них ссылок дублей на оригиналы. По умолчанию Ложь. // Функция ПараметрыЗаменыСсылок() Экспорт @@ -933,7 +908,7 @@ Результат.Вставить("СпособУдаления", ""); Результат.Вставить("УчитыватьПрикладныеПравила", Ложь); Результат.Вставить("ВключатьБизнесЛогику", Истина); - Результат.Вставить("ЗаменаПарыВТранзакции", Истина); + Результат.Вставить("ЗаменаПарыВТранзакции", Ложь); Результат.Вставить("ПривилегированнаяЗапись", Ложь); Возврат Результат; КонецФункции @@ -943,12 +918,13 @@ // При вызове в неразделенном сеансе не выявляет ссылок в разделенных областях. // // Параметры: -// НаборСсылок - Массив - ссылки, для которых ищем места использования. +// НаборСсылок - Массив из ЛюбаяСсылка - ссылки, для которых ищем места использования. // АдресРезультата - Строка - необязательный адрес во временном хранилище, куда будет помещен копия результата // замены. +// ДополнительныеПараметры - см. ОбщегоНазначения.ПараметрыПоискаМестИспользования // // Возвращаемое значение: -// ТаблицаЗначений - состоит из колонок: +// ТаблицаЗначений: // * Ссылка - ЛюбаяСсылка - ссылка, которая анализируется. // * Данные - Произвольный - данные, содержащие анализируемую ссылку. // * Метаданные - ОбъектМетаданных - метаданные найденных данных. @@ -958,12 +934,12 @@ // вспомогательные данные (ведущее измерение или попали в исключение ПриДобавленииИсключенийПоискаСсылок). // * ЭтоСлужебныеДанные - Булево - данные попали в исключение ПриДобавленииИсключенийПоискаСсылок // -Функция МестаИспользования(Знач НаборСсылок, Знач АдресРезультата = "") Экспорт +Функция МестаИспользования(Знач НаборСсылок, Знач АдресРезультата = "", ДополнительныеПараметры = Неопределено) Экспорт МестаИспользования = Новый ТаблицаЗначений; УстановитьПривилегированныйРежим(Истина); - МестаИспользования = НайтиПоСсылкам(НаборСсылок); // см. МестаИспользования + МестаИспользования = НайтиПоСсылкам(НаборСсылок); // см. МестаИспользования; УстановитьПривилегированныйРежим(Ложь); // МестаИспользования - ТаблицаЗначений - где: @@ -991,12 +967,40 @@ ИсключенияПоискаСсылок = ИсключенияПоискаСсылок(); + ДополнительныеИсключенияПоискаСсылок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ДополнительныеПараметры, + "ДополнительныеИсключенияПоискаСсылок", + Новый Соответствие); + Для каждого МетаданныеРеквизитыИсключения Из ДополнительныеИсключенияПоискаСсылок Цикл + + ЗначениеИсключения = ИсключенияПоискаСсылок[МетаданныеРеквизитыИсключения.Ключ]; + Если ЗначениеИсключения = Неопределено Тогда + ИсключенияПоискаСсылок.Вставить(МетаданныеРеквизитыИсключения.Ключ, + МетаданныеРеквизитыИсключения.Значение); + Иначе + + Если ТипЗнч(ЗначениеИсключения) = Тип("Массив") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗначениеИсключения, + МетаданныеРеквизитыИсключения.Значение); + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + ОтменаИсключенийПоискаСсылок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ДополнительныеПараметры, + "ОтменаИсключенийПоискаСсылок", + Новый Массив); + Для каждого ОтменаИсключения Из ОтменаИсключенийПоискаСсылок Цикл + ИсключенияПоискаСсылок.Удалить(ОтменаИсключения); + КонецЦикла; + КэшИзмеренийРегистров = Новый Соответствие; Для Каждого МестоИспользования Из МестаИспользования Цикл ТипДанных = ТипЗнч(МестоИспользования.Данные); - ЭтоСлужебныеДанные = ЭтоСлужебныеДанные(МестоИспользования, ИсключенияПоискаСсылок); + ЭтоСлужебныеДанные = ЭтоСлужебнаяСвязьДанных(МестоИспользования, ИсключенияПоискаСсылок); ЭтоВспомогательныеДанные = ЭтоСлужебныеДанные; Если МетаданныеДокументов.Содержит(МестоИспользования.Метаданные) Тогда @@ -1031,9 +1035,9 @@ КонецЕсли; ОписаниеИзмерений = ""; - Для Каждого КлючЗначение Из ОписаниеИзмеренийНабора(МестоИспользования.Метаданные, КэшИзмеренийРегистров) Цикл - Значение = МестоИспользования.Данные[КлючЗначение.Ключ]; - Описание = КлючЗначение.Значение; + Для Каждого МетаданныеРеквизитыИсключения Из ОписаниеИзмеренийНабора(МестоИспользования.Метаданные, КэшИзмеренийРегистров) Цикл + Значение = МестоИспользования.Данные[МетаданныеРеквизитыИсключения.Ключ]; + Описание = МетаданныеРеквизитыИсключения.Значение; Если МестоИспользования.Ссылка = Значение Тогда Если Описание.Ведущее Тогда ЭтоВспомогательныеДанные = Истина; @@ -1067,25 +1071,40 @@ Возврат МестаИспользования; КонецФункции +// Возвращаемое значение: +// Структура: +// * ДополнительныеИсключенияПоискаСсылок - Соответствие - позволяет расширить исключения поиска ссылок +// см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок +// * ОтменаИсключенийПоискаСсылок - Массив из ОбъектМетаданных - полностью отменяет исключения поиска ссылок для объектов метаданных. +// +Функция ПараметрыПоискаМестИспользования() Экспорт + + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("ДополнительныеИсключенияПоискаСсылок", Новый Соответствие); + ПараметрыПоиска.Вставить("ОтменаИсключенийПоискаСсылок", Новый Соответствие); + + Возврат ПараметрыПоиска; + +КонецФункции + // Возвращает исключения при поиске мест использования объектов. // // Возвращаемое значение: // Соответствие - исключения поиска ссылок в разрезе объектов метаданных: // * Ключ - ОбъектМетаданных - объект метаданных, для которого применяются исключения. -// * Значение - Строка, Массив - описание исключенных реквизитов. +// * Значение - Строка +// - Массив - описание исключенных реквизитов. // Если "*", то исключены все реквизиты объекта метаданных. // Если массив строк, то содержит относительные имена исключенных реквизитов. // Функция ИсключенияПоискаСсылок() Экспорт ИсключенияПоискаИнтеграция = Новый Массив; - ИнтеграцияПодсистемБСП.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаИнтеграция); ИсключенияПоиска = Новый Массив; - ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоиска); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИсключенияПоиска, ИсключенияПоискаИнтеграция); + ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоиска); Результат = Новый Соответствие; Для Каждого ИсключениеПоиска Из ИсключенияПоиска Цикл @@ -1142,6 +1161,64 @@ КонецФункции +// Возвращает связи подчиненных объектов и перечень реквизитов, +// по которым осуществляется связь. +// +// Есть возможность переопределить процедуру поиска подчиненных объектов. +// Для этого в общем модуле или модуле менеджера необходимо реализовать процедуру +// ПриПоискеЗаменыСсылок с параметрами: +// ПарыЗамен - Соответствие - содержит пары значение Оригинал/Дубль +// НеобработанныеЗначенияОригиналов - Массив из Структура - содержит дополнительную информацию +// об обрабатываемых объектах: +// * ЗаменяемоеЗначение - ПроизвольнаяСсылка - оригинальное значение заменяемого объекта +// * ИспользуемыеСвязи - см. ПоискИУдалениеДублей.СвязиПодчиненныхОбъектовПоТипам +// * ЗначениеКлючевыхРеквизитов - Структура - Ключ - имя реквизита, значение - значение реквизита +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ПодчиненныйОбъект - ОбъектМетаданных - (обязательный) объект метаданных подчиненного объекта. +// * ПоляСвязей - Строка - (обязательный) реквизиты, определяющие связь между основными и подчиненными объектами. +// * ПриПоискеЗаменыСсылок - Строка - общий модуль или модуль менеджера, в котором есть процедура ПриПоискеЗаменыСсылок. +// * ВыполнятьАвтоматическийПоискЗаменСсылок - Булево - см. описание ЗаменитьСсылки +// +Функция ПодчиненныеОбъекты() Экспорт + + ОписаниеСвязей = Новый ТаблицаЗначений; + ОписаниеСвязей.Колонки.Добавить("ПодчиненныйОбъект", Новый ОписаниеТипов("ОбъектМетаданных")); + ОписаниеСвязей.Колонки.Добавить("ПоляСвязей"); + ОписаниеСвязей.Колонки.Добавить("ПриПоискеЗаменыСсылок", ОписаниеТипаСтрока(0)); + ОписаниеСвязей.Колонки.Добавить("ВыполнятьАвтоматическийПоискЗаменСсылок", Новый ОписаниеТипов("Булево")); + + ИнтеграцияПодсистемБСП.ПриОпределенииПодчиненныхОбъектов(ОписаниеСвязей); + ОбщегоНазначенияПереопределяемый.ПриОпределенииПодчиненныхОбъектов(ОписаниеСвязей); + + // Если передали соответствие или структуру + // преобразуем к необходимому типу + Для каждого СтрокаСвязи Из ОписаниеСвязей Цикл + + ТипОписанияПолейСвязи = ТипЗнч(СтрокаСвязи.ПоляСвязей); + Если ТипОписанияПолейСвязи = Тип("Структура") + ИЛИ ТипОписанияПолейСвязи = Тип("Соответствие") Тогда + + ПоляСвязейСтрокой = ""; + Для каждого КлючЗначение Из СтрокаСвязи.ПоляСвязей Цикл + ПоляСвязейСтрокой = ПоляСвязейСтрокой + КлючЗначение.Ключ + ","; + КонецЦикла; + СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(ПоляСвязейСтрокой,1); + СтрокаСвязи.ПоляСвязей = ПоляСвязейСтрокой; + + КонецЕсли; + + Если ТипОписанияПолейСвязи = Тип("Массив") Тогда + СтрокаСвязи.ПоляСвязей = СтрСоединить(СтрокаСвязи.ПоляСвязей, ","); + КонецЕсли; + + КонецЦикла; + + Возврат ОписаниеСвязей; + +КонецФункции + #КонецОбласти #Область УсловныеВызовы @@ -1210,7 +1287,7 @@ Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не найден.'"), + НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя); КонецЕсли; @@ -1561,6 +1638,7 @@ // // Возвращаемое значение: // Строка, Неопределено - адрес входа в программу или Неопределено, если адрес не настроен. +// Функция АдресВходаВПрограмму(Пользователь, Пароль, ВидПубликацииИБ) Экспорт Результат = ""; @@ -1625,7 +1703,7 @@ // См. ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности // // Возвращаемое значение: -// Структура - структура со свойствами: +// Структура: // * ИмяФормыПерсональныхНастроек - Строка - имя формы для редактирования персональных настроек. // Ранее определялись в // ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек. @@ -1670,7 +1748,7 @@ Если Не ПустаяСтрока(Минимальная) И Не ПустаяСтрока(Рекомендуемая) И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Минимальная, Рекомендуемая) > 0 Тогда - ТекстСообщения = НСтр("ru = 'Минимальная версия платформы ""1С:Предприятие 8"" указана выше рекомендуемой. + ТекстСообщения = НСтр("ru = 'Минимальная версия платформы ""1С:Предприятие 8"" указана выше рекомендуемой в ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности. |Минимальная версия - ""%1"", рекомендуемая версия - ""%2"".'"); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ТекстСообщения, @@ -2010,12 +2088,12 @@ // которого доступен обход посредством оператора Для каждого … Из. // // Параметры: -// КоллекцияСтрок - ТаблицаЗначений, -// ДеревоЗначений, -// СписокЗначений, -// ТабличнаяЧасть, -// Соответствие, -// Структура - коллекция, колонку которой нужно выгрузить в массив. +// КоллекцияСтрок - ТаблицаЗначений +// - ДеревоЗначений +// - СписокЗначений +// - ТабличнаяЧасть +// - Соответствие +// - Структура - коллекция, колонку которой нужно выгрузить в массив. // А так же другие объекты, для которых доступен обход // посредством оператора Для каждого … Из … Цикл. // ИмяКолонки - Строка - имя поля коллекции, значения которого нужно выгрузить. @@ -2069,10 +2147,11 @@ // // // Параметры: -// XML - Строка, ЧтениеXML - текст в формате XML или ЧтениеXML. +// XML - Строка +// - ЧтениеXML - текст в формате XML или ЧтениеXML. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ИмяТаблицы - Строка - имя таблицы. // * Данные - ТаблицаЗначений - преобразованная из XML таблица. // @@ -2143,20 +2222,30 @@ // Также позволяет сравнивать массивы. // // Параметры: -// КоллекцияСтрок1 - ТаблицаЗначений, ДеревоЗначений, СписокЗначений, ТабличнаяЧасть, Соответствие, Массив, -// ФиксированныйМассив, Структура - коллекция, отвечающая вышеописанным требованиям. А также другие +// КоллекцияСтрок1 - ТаблицаЗначений +// - ДеревоЗначений +// - СписокЗначений +// - ТабличнаяЧасть +// - Соответствие +// - Массив +// - ФиксированныйМассив +// - Структура - коллекция, отвечающая вышеописанным требованиям. А также другие // объекты, для которых доступен обход посредством оператора Для каждого … Из … Цикл. -// -// КоллекцияСтрок2 - ТаблицаЗначений, ДеревоЗначений, СписокЗначений, ТабличнаяЧасть, Соответствие, Массив, -// ФиксированныйМассив, Структура - коллекция, отвечающая вышеописанным требованиям. А также другие +// КоллекцияСтрок2 - ТаблицаЗначений +// - ДеревоЗначений +// - СписокЗначений +// - ТабличнаяЧасть +// - Соответствие +// - Массив +// - ФиксированныйМассив +// - Структура - коллекция, отвечающая вышеописанным требованиям. А также другие // объекты, для которых доступен обход посредством оператора Для каждого … Из … Цикл. -// // ИменаКолонок - Строка - имена колонок через запятую, по которым производится сравнение. // Не обязательно для коллекций, состав колонок которых можно определить автоматически: // ТаблицаЗначений, СписокЗначений, Соответствие, Структура. // Если не указан, то сравнение производится по колонкам первой коллекции. // Для коллекций других типов является обязательным. -// ИсключаяКолонки - Строка - Имена колонок, которые игнорируются при сравнении. +// ИсключаяКолонки - Строка - имена колонок, которые игнорируются при сравнении. // УчитыватьПоследовательностьСтрок - Булево - если Истина, то коллекции признаются // идентичными, только если одинаковые строки размещены в коллекциях на одинаковых местах. // @@ -2187,12 +2276,17 @@ // Сравнивает данные сложной структуры с учетом вложенности. // // Параметры: -// Данные1 - Структура, ФиксированнаяСтруктура, -// Соответствие, ФиксированноеСоответствие, -// Массив, ФиксированныйМассив, -// ХранилищеЗначения, ТаблицаЗначений, -// Строка, Число, Булево - сравниваемые данные. -// +// Данные1 - Структура +// - ФиксированнаяСтруктура +// - Соответствие +// - ФиксированноеСоответствие +// - Массив +// - ФиксированныйМассив +// - ХранилищеЗначения +// - ТаблицаЗначений +// - Строка +// - Число +// - Булево - сравниваемые данные. // Данные2 - Произвольный - те же типы, что и для параметра Данные1. // // Возвращаемое значение: @@ -2308,7 +2402,9 @@ // Фиксирует данные типов Структура, Соответствие, Массив с учетом вложенности. // // Параметры: -// Данные - Структура, Соответствие, Массив - коллекции, значения которых являются примитивными типами, +// Данные - Структура +// - Соответствие +// - Массив - коллекции, значения которых являются примитивными типами, // хранилищем значения или не могут быть изменены. Поддерживаются типы значений: // Булево, Строка, Число, Дата, Неопределено, УникальныйИдентификатор, Null, Тип, // ХранилищеЗначения, ОбщийМодуль, ОбъектМетаданных, ТипЗначенияXDTO, ТипОбъектаXDTO, @@ -2447,17 +2543,23 @@ // (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. // // Параметры: -// Источник - Структура, ФиксированнаяСтруктура, -// Соответствие, ФиксированноеСоответствие, -// Массив, ФиксированныйМассив, -// СписокЗначений - объект, который необходимо скопировать. -// ФиксироватьДанные - Булево, Неопределено - если Истина - фиксировать, +// Источник - Структура +// - ФиксированнаяСтруктура +// - Соответствие +// - ФиксированноеСоответствие +// - Массив +// - ФиксированныйМассив +// - СписокЗначений - объект, который необходимо скопировать. +// ФиксироватьДанные - Булево +// - Неопределено - если Истина - фиксировать, // если Ложь - снять фиксацию, если Неопределено - не изменять. // // Возвращаемое значение: // Структура - , ФиксированнаяСтруктура, -// Соответствие, ФиксированноеСоответствие, -// Массив, ФиксированныйМассив, +// Соответствие +// ФиксированноеСоответствие +// Массив +// ФиксированныйМассив // СписокЗначений - копия объекта, переданного в параметре Источник. // Функция СкопироватьРекурсивно(Источник, ФиксироватьДанные = Неопределено) Экспорт @@ -2495,22 +2597,29 @@ // СсылкаНаПредмет - ЛюбаяСсылка - объект ссылочного типа. // // Возвращаемое значение: -// Строка - представление предмета. +// Строка // Функция ПредметСтрокой(СсылкаНаПредмет) Экспорт - Результат = ""; + Если СсылкаНаПредмет = Неопределено Тогда + Возврат НСтр("ru = 'не задан'"); + ИначеЕсли Не ЭтоСсылка(ТипЗнч(СсылкаНаПредмет)) Тогда + Возврат Строка(СсылкаНаПредмет); + ИначеЕсли СсылкаНаПредмет.Пустая() Тогда + Возврат НСтр("ru = 'не задан'"); + КонецЕсли; - Если СсылкаНаПредмет = Неопределено Или СсылкаНаПредмет.Пустая() Тогда - Результат = НСтр("ru = 'не задан'"); - ИначеЕсли Метаданные.Документы.Содержит(СсылкаНаПредмет.Метаданные()) Или Метаданные.Перечисления.Содержит(СсылкаНаПредмет.Метаданные()) Тогда - Результат = Строка(СсылкаНаПредмет); - Иначе + Если Метаданные.Перечисления.Содержит(СсылкаНаПредмет.Метаданные()) Тогда + Возврат Строка(СсылкаНаПредмет); + КонецЕсли; + + Результат = ?(СсылкаСуществует(СсылкаНаПредмет), Строка(СсылкаНаПредмет), НСтр("ru = 'удален'")); + Если Не Метаданные.Документы.Содержит(СсылкаНаПредмет.Метаданные()) Тогда ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; Если ПустаяСтрока(ПредставлениеОбъекта) Тогда ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); КонецЕсли; - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)", Строка(СсылкаНаПредмет), ПредставлениеОбъекта); + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)", Результат, ПредставлениеОбъекта); КонецЕсли; Возврат Результат; @@ -2540,7 +2649,7 @@ // // Параметры: // Список - ТаблицаФормы - элемент формы динамического списка, для которого устанавливаются свойства. -// СтруктураПараметров - см. СтруктураСвойствДинамическогоСписка(). +// СтруктураПараметров - см. СтруктураСвойствДинамическогоСписка // Процедура УстановитьСвойстваДинамическогоСписка(Список, СтруктураПараметров) Экспорт @@ -2605,8 +2714,9 @@ // Параметры - см. ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения // // Возвращаемое значение: -// Структура - информация о соединении: -// * Соединение - COMОбъект, Неопределено - указатель на COM-объект соединения или Неопределено в случае ошибки; +// Структура: +// * Соединение - COMОбъект +// - Неопределено - указатель на COM-объект соединения или Неопределено в случае ошибки; // * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; // * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; // * ОшибкаПодключенияКомпоненты - Булево - флаг ошибки подключения COM. @@ -3222,23 +3332,21 @@ // Функция СсылкаСуществует(ПроверяемаяСсылка) Экспорт - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - |ИЗ - | [ИмяТаблицы] - |ГДЕ - | Ссылка = &Ссылка - |"; + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 КАК Поле1 + |ИЗ + | &ИмяТаблицы КАК Таблица + |ГДЕ + | Таблица.Ссылка = &Ссылка"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицыПоСсылке(ПроверяемаяСсылка)); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", ИмяТаблицыПоСсылке(ПроверяемаяСсылка)); Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Ссылка", ПроверяемаяСсылка); УстановитьПривилегированныйРежим(Истина); - Возврат НЕ Запрос.Выполнить().Пустой(); КонецФункции @@ -3264,7 +3372,7 @@ // См. так же ВидОбъектаПоСсылке. // // Параметры: -// ТипОбъекта - Тип - Тип прикладного объекта, определенный в конфигурации. +// ТипОбъекта - Тип - тип прикладного объекта, определенный в конфигурации. // // Возвращаемое значение: // Строка - имя вида объектов метаданных. Например: "Справочник", "Документ". @@ -3336,7 +3444,8 @@ // Проверяет, является ли объект группой элементов. // // Параметры: -// Объект - ЛюбаяСсылка, Объект - проверяемый объект. +// Объект - ЛюбаяСсылка +// - Объект - проверяемый объект. // // Возвращаемое значение: // Булево - Истина, если является. @@ -3404,12 +3513,12 @@ // - Строка - полное имя объекта метаданных, которое можно // использовать в функции Метаданные.НайтиПоПолномуИмени. // -// ВызыватьИсключение - Булево - если Ложь, тогда в случае, когда передан несуществующий объект метаданных -// возвращается Null вместо вызова исключения. +// ВызыватьИсключение - Булево - если Ложь, то вместо вызова исключения возвращается Null для несуществующего +// или неподдерживаемого объекта метаданных. // // Возвращаемое значение: -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений - ссылка. -// - Null - если параметр ВызыватьИсключение = Ложь и запрашиваемый объект метаданных не существует. +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений +// - Null // // Пример: // Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Ссылка)); @@ -3451,16 +3560,16 @@ // * ОбъектМетаданных - объект метаданных конфигурации; // * Строка - полное имя объекта метаданных, которое можно использовать // в функции Метаданные.НайтиПоПолномуИмени; -// * Тип - тип, который можно использовать в функции Метаданные.НайтиПоТипу. +// * Тип - тип - который можно использовать в функции Метаданные.НайтиПоТипу. // -// ВызыватьИсключение - Булево - если Ложь, тогда в случае, когда передан несуществующий объект метаданных, -// он будет пропущен в возвращаемом значении. +// ВызыватьИсключение - Булево - если Ложь, то несуществующие и неподдерживаемые объекты метаданных +// будут пропущены в возвращаемом значении. // // Возвращаемое значение: -// Соответствие - со свойствами: +// Соответствие: // * Ключ - Строка - полное имя указанного объекта метаданных. -// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - найденный идентификатор. +// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений - найденный идентификатор. // // Пример: // ПолныеИмена = Новый Массив; @@ -3478,8 +3587,8 @@ // Возвращает объект метаданных по переданному идентификатору. // // Параметры: -// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификатор +// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификатор // объекта метаданных конфигурации или расширения конфигурации. // // ВызыватьИсключение - Булево - если Ложь, тогда в случае, когда объект метаданных @@ -3510,8 +3619,8 @@ // // Параметры: // Идентификаторы - Массив - со значениями: -// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификаторы +// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификаторы // объектов метаданных конфигурации или расширений конфигурации. // // ВызыватьИсключение - Булево - если Ложь, тогда в случае, когда объект метаданных @@ -3519,9 +3628,9 @@ // Null или Неопределено вместо вызова исключения. // // Возвращаемое значение: -// Соответствие - со свойствами: -// * Ключ - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - переданный идентификатор. +// Соответствие: +// * Ключ - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений - переданный идентификатор. // * Значение - ОбъектМетаданных - объект метаданных, соответствующий идентификатору. // - Null - возвращается, когда ВызыватьИсключение = Ложь. Обозначает, что // для указанного идентификатора объект метаданных не существует (идентификатор устарел). @@ -3542,7 +3651,8 @@ // Определяет доступность объекта метаданных по функциональным опциям. // // Параметры: -// ОбъектМетаданных - ОбъектМетаданных, Строка - проверяемый объект метаданных. +// ОбъектМетаданных - ОбъектМетаданных +// - Строка - проверяемый объект метаданных. // // Возвращаемое значение: // Булево - Истина, если объект доступен. @@ -3906,7 +4016,7 @@ // // Параметры: // НесколькоНастроек - Массив - со значениями: -// * Значение - Структура - со свойствами: +// * Значение - Структура: // * Объект - Строка - см. параметр КлючОбъекта в синтакс-помощнике платформы. // * Настройка - Строка - см. параметр КлючНастроек в синтакс-помощнике платформы. // * Значение - Произвольный - см. параметр Настройки в синтакс-помощнике платформы. @@ -3934,7 +4044,7 @@ // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, // которая превышает 96 символов. -// Кроме того, возвращает указанное значение по умолчанию, если настройки не найдены. +// Кроме того, возвращает указанное значение по умолчанию, если настройки не существуют. // Если нет права СохранениеДанныхПользователя, возвращается значение по умолчанию без ошибки. // // В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно @@ -3946,7 +4056,7 @@ // Параметры: // КлючОбъекта - Строка - см. синтакс-помощник платформы. // КлючНастроек - Строка - см. синтакс-помощник платформы. -// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не найдены. +// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не существуют. // Если не указано, возвращается значение Неопределено. // ОписаниеНастроек - ОписаниеНастроек - см. синтакс-помощник платформы. // ИмяПользователя - Строка - см. синтакс-помощник платформы. @@ -3973,9 +4083,12 @@ // Если нет права СохранениеДанныхПользователя, удаление пропускается без ошибки. // // Параметры: -// КлючОбъекта - Строка, Неопределено - см. синтакс-помощник платформы. -// КлючНастроек - Строка, Неопределено - см. синтакс-помощник платформы. -// ИмяПользователя - Строка, Неопределено - см. синтакс-помощник платформы. +// КлючОбъекта - Строка +// - Неопределено - см. синтакс-помощник платформы. +// КлючНастроек - Строка +// - Неопределено - см. синтакс-помощник платформы. +// ИмяПользователя - Строка +// - Неопределено - см. синтакс-помощник платформы. // Процедура ХранилищеОбщихНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт @@ -4017,7 +4130,7 @@ // Загружает настройку из хранилища системных настроек, как метод платформы Загрузить, // объекта СтандартноеХранилищеНастроекМенеджер, но с поддержкой длины ключа настроек // более 128 символов путем хеширования части, которая превышает 96 символов. -// Кроме того, возвращает указанное значение по умолчанию, если настройки не найдены. +// Кроме того, возвращает указанное значение по умолчанию, если настройки не существуют. // Если нет права СохранениеДанныхПользователя, возвращается значение по умолчанию без ошибки. // // В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно: @@ -4029,7 +4142,7 @@ // Параметры: // КлючОбъекта - Строка - см. синтакс-помощник платформы. // КлючНастроек - Строка - см. синтакс-помощник платформы. -// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не найдены. +// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не существуют. // Если не указано, возвращается значение Неопределено. // ОписаниеНастроек - ОписаниеНастроек - см. синтакс-помощник платформы. // ИмяПользователя - Строка - см. синтакс-помощник платформы. @@ -4055,9 +4168,12 @@ // Если нет права СохранениеДанныхПользователя, удаление пропускается без ошибки. // // Параметры: -// КлючОбъекта - Строка, Неопределено - см. синтакс-помощник платформы. -// КлючНастроек - Строка, Неопределено - см. синтакс-помощник платформы. -// ИмяПользователя - Строка, Неопределено - см. синтакс-помощник платформы. +// КлючОбъекта - Строка +// - Неопределено - см. синтакс-помощник платформы. +// КлючНастроек - Строка +// - Неопределено - см. синтакс-помощник платформы. +// ИмяПользователя - Строка +// - Неопределено - см. синтакс-помощник платформы. // Процедура ХранилищеСистемныхНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт @@ -4101,7 +4217,7 @@ // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, // которая превышает 96 символов. -// Кроме того, возвращает указанное значение по умолчанию, если настройки не найдены. +// Кроме того, возвращает указанное значение по умолчанию, если настройки не существуют. // Если нет права СохранениеДанныхПользователя, возвращается значение по умолчанию без ошибки. // // В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно @@ -4113,7 +4229,7 @@ // Параметры: // КлючОбъекта - Строка - см. синтакс-помощник платформы. // КлючНастроек - Строка - см. синтакс-помощник платформы. -// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не найдены. +// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не существуют. // Если не указано, возвращается значение Неопределено. // ОписаниеНастроек - ОписаниеНастроек - см. синтакс-помощник платформы. // ИмяПользователя - Строка - см. синтакс-помощник платформы. @@ -4140,9 +4256,12 @@ // Если нет права СохранениеДанныхПользователя, удаление пропускается без ошибки. // // Параметры: -// КлючОбъекта - Строка, Неопределено - см. синтакс-помощник платформы. -// КлючНастроек - Строка, Неопределено - см. синтакс-помощник платформы. -// ИмяПользователя - Строка, Неопределено - см. синтакс-помощник платформы. +// КлючОбъекта - Строка +// - Неопределено - см. синтакс-помощник платформы. +// КлючНастроек - Строка +// - Неопределено - см. синтакс-помощник платформы. +// ИмяПользователя - Строка +// - Неопределено - см. синтакс-помощник платформы. // Процедура ХранилищеНастроекДанныхФормУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт @@ -4249,7 +4368,7 @@ // Возвращает структуру параметров для функции СоздатьWSПрокси. // // Возвращаемое значение: -// Структура - коллекция параметров, см. СоздатьWSПрокси(). +// см. СоздатьWSПрокси // Функция ПараметрыПодключенияWSПрокси() Экспорт Результат = Новый Структура; @@ -4290,8 +4409,9 @@ // сервере. // * ДелатьКонтрольныйВызов - Булево - (необязательный) выполнять проверку доступности сервиса (требуется // поддержка этой команды веб-сервисом). -// * ЗащищенноеСоединение - ЗащищенноеСоединениеOpenSSL, Неопределено - (необязательный) параметры защищенного -// соединения. +// * ЗащищенноеСоединение - ЗащищенноеСоединениеOpenSSL +// - Неопределено - (необязательный) параметры защищенного +// соединения. // // Возвращаемое значение: // WSПрокси - объект WSПрокси. @@ -4504,7 +4624,9 @@ // в том контексте, который предполагает чтение или запись конфиденциальных данных. // // Параметры: -// Владелец - ПланОбменаСсылка, СправочникСсылка, Строка - ссылка на объект информационной базы, +// Владелец - ПланОбменаСсылка +// - СправочникСсылка +// - Строка - ссылка на объект информационной базы, // представляющий объект-владелец сохраняемого пароля или строка до 128 символов. // Для объектов других типов в качестве владельца рекомендуется использовать ссылку на // элемент метаданных этого типа в справочнике ИдентификаторыОбъектовМетаданных @@ -4587,7 +4709,9 @@ // в том контексте, который предполагает чтение или запись конфиденциальных данных. // // Параметры: -// Владелец - ПланОбменаСсылка, СправочникСсылка, Строка - ссылка на объект информационной базы, +// Владелец - ПланОбменаСсылка +// - СправочникСсылка +// - Строка - ссылка на объект информационной базы, // представляющий объект-владелец сохраняемого пароля или строка до 128 символов. // Ключи - Строка - содержит список имен сохраненных данных, указанных через запятую. // ОбщиеДанные - Булево - Истина, если требуется в модели сервиса получить данные из общих данных в разделенном режиме. @@ -4648,7 +4772,9 @@ // в том контексте, который предполагает чтение или запись конфиденциальных данных. // // Параметры: -// Владелец - ПланОбменаСсылка, СправочникСсылка, Строка - ссылка на объект информационной базы, +// Владелец - ПланОбменаСсылка +// - СправочникСсылка +// - Строка - ссылка на объект информационной базы, // представляющий объект-владелец сохраняемого пароля или строка до 128 символов. // Ключи - Строка - содержит список имен удаляемых данных, указанных через запятую. // Неопределено - удаляет все данные. @@ -4781,7 +4907,7 @@ // Получает строки табличной части, помещенные во внутренний буфер обмена с помощью СкопироватьСтрокиВБуферОбмена. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Данные - Произвольный - данные из внутреннего буфера обмена. // Например, ТаблицаЗначений при вызове СкопироватьСтрокиВБуферОбмена. // * Источник - Строка - объект, к которому относятся данные. @@ -4875,7 +5001,7 @@ ПараметрыСтрока = ""; Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда Для Индекс = 0 По Параметры.ВГраница() Цикл - ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; + ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + XMLСтрока(Индекс) + "],"; КонецЦикла; ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); КонецЕсли; @@ -4931,7 +5057,7 @@ ПараметрыСтрока = ""; Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда Для Индекс = 0 По Параметры.ВГраница() Цикл - ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; + ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + XMLСтрока(Индекс) + "],"; КонецЦикла; ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); КонецЕсли; @@ -5144,6 +5270,13 @@ КонецЕсли; КонецЕсли; + Если СтандартныеПодсистемыСервер.ТребуетсяУстановкаРегиональныхНастроекИнформационнойБазы() Тогда + Текст = НСтр("ru = 'Регламентное задание недоступно до установки начальных региональных настроек программы. + |Выполнение прервано.'"); + РегламентныеЗаданияСервер.ОтменитьВыполнениеЗадания(РегламентноеЗадание, Текст); + ВызватьИсключение Текст; + КонецЕсли; + КонецПроцедуры // Переводит параметры сеанса в состояние "Не установлено". @@ -5188,7 +5321,8 @@ // // Параметры: // ТабДокумент - ТабличныйДокумент - табличный документ. -// ВыводимыеОбласти - Массив, ТабличныйДокумент - массив из проверяемых таблиц или табличный документ. +// ВыводимыеОбласти - Массив +// - ТабличныйДокумент - массив из проверяемых таблиц или табличный документ. // РезультатПриОшибке - Булево - какой возвращать результат при возникновении ошибки. // // Возвращаемое значение: @@ -5357,12 +5491,12 @@ // с помощью ОбщегоНазначения.УдалитьВременныйКаталог. // // Параметры: -// Расширение - Строка - Расширение каталога, которое идентифицирует назначение временного каталога +// Расширение - Строка - расширение каталога, которое идентифицирует назначение временного каталога // и подсистему, которая его создала. // Рекомендуется указывать на английском языке. // // Возвращаемое значение: -// Строка - Полный путь к каталогу с разделителем пути. +// Строка - полный путь к каталогу с разделителем пути. // Функция СоздатьВременныйКаталог(Знач Расширение = "") Экспорт @@ -5379,7 +5513,7 @@ // после окончания работы с временным каталогом. // // Параметры: -// ПутьККаталогу - Строка - Полный путь к временному каталогу. +// ПутьККаталогу - Строка - полный путь к временному каталогу. // Процедура УдалитьВременныйКаталог(Знач ПутьККаталогу) Экспорт @@ -5458,13 +5592,13 @@ // Подробнее об использование функции смотрите в справке к консоли запросов. // // Параметры: -// Запрос - Запрос - Запрос, который необходимо выгрузить в формат строки XML. +// Запрос - Запрос - запрос, который необходимо выгрузить в формат строки XML. // // Возвращаемое значение: // Строка - строка в формате XML, которую можно извлечь при помощи метода "ОбщегоНазначения.ЗначениеИзСтрокиXML". // После извлечения получится объект типа "Структура" с полями: -// * Текст - Строка - Текст запроса. -// * Параметры - Структура - Параметры запроса. +// * Текст - Строка - текст запроса. +// * Параметры - Структура - параметры запроса. // Функция ЗапросВСтрокуXML(Запрос) Экспорт Структура = Новый Структура("Текст, Параметры"); @@ -5472,8 +5606,6 @@ Возврат ЗначениеВСтрокуXML(Структура); КонецФункции -#Область ВнешниеКомпоненты - Функция ПодключитьКомпонентуПоИдентификатору(Знач Идентификатор, Знач Местоположение) Экспорт Результат = Новый Структура; @@ -5526,7 +5658,80 @@ КонецФункции -#КонецОбласти +// Определяет добавлено ли место использования в исключения поиска ссылок. +// +// Параметры: +// МестоИспользования - Структура: +// * Ссылка - ЛюбаяСсылка - проверяемая ссылка. +// * Данные - ЛюбаяСсылка - место использования. +// * Метаданные - ОбъектМетаданных - метаданные места использования. +// ИсключенияПоискаСсылок - см. ИсключениеПоискаСсылок. +// +// Возвращаемое значение: +// - Булево +// +Функция ЭтоСлужебнаяСвязьДанных(МестоИспользования, ИсключенияПоискаСсылок) Экспорт + + ИсключениеПоиска = ИсключенияПоискаСсылок[МестоИспользования.Метаданные]; + + // Данные может быть как ссылкой так и ключом записи регистра. + + Если ИсключениеПоиска = Неопределено Тогда + Возврат (МестоИспользования.Ссылка = МестоИспользования.Данные); // Ссылку саму на себя исключаем. + ИначеЕсли ИсключениеПоиска = "*" Тогда + Возврат Истина; // Если указано исключить все - считаем все исключением. + Иначе + Для Каждого ПутьКРеквизиту Из ИсключениеПоиска Цикл + // Если указаны исключения. + + // Относительный путь к реквизиту: + // "<ИмяРеквизитаИлиТЧ>[.<ИмяРеквизитаТЧ>]". + + Если ЭтоСсылка(ТипЗнч(МестоИспользования.Данные)) Тогда + + // Проверка есть ли по исключаемому пути в указанных данных проверяемая ссылка + + ПолноеИмяОбъектаМетаданных = МестоИспользования.Метаданные.ПолноеИмя(); + + ТекстЗапроса = + "ВЫБРАТЬ + | ИСТИНА + |ИЗ + | &ПолноеИмяОбъектаМетаданных КАК Таблица + |ГДЕ + | &ПутьКРеквизиту = &ПроверяемаяСсылка + | И Таблица.Ссылка = &Ссылка"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПутьКРеквизиту", ПутьКРеквизиту); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ПроверяемаяСсылка", МестоИспользования.Ссылка); + Запрос.УстановитьПараметр("Ссылка", МестоИспользования.Данные); + + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + Возврат Истина; + КонецЕсли; + + Иначе + + БуферДанных = Новый Структура(ПутьКРеквизиту); + ЗаполнитьЗначенияСвойств(БуферДанных, МестоИспользования.Данные); + Если БуферДанных[ПутьКРеквизиту] = МестоИспользования.Ссылка Тогда + Возврат Истина; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Возврат Ложь; + +КонецФункции #КонецОбласти @@ -5543,9 +5748,9 @@ // ПроверяемыеВыражения - Массив - имена полей или проверяемые выражения объекта метаданных. // // Возвращаемое значение: -// Структура - Результат проверки. -// * Ошибка - Булево - Найдена ошибка. -// * ОписаниеОшибки - Строка - Описание найденных ошибок. +// Структура: +// * Ошибка - Булево - найдена ошибка. +// * ОписаниеОшибки - Строка - описание найденных ошибок. // // Пример: // @@ -5585,7 +5790,7 @@ Если Не ПолеИсточникаСхемыЗапросаДоступно(Источник, ТекущееВыражение) Тогда ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '- Поле объекта ""%1"" не найдено'"), ТекущееВыражение); + НСтр("ru = '- Поле объекта ""%1"" не существует'"), ТекущееВыражение); КонецЕсли; КонецЦикла; @@ -5675,148 +5880,66 @@ Возврат Результат; КонецФункции + // Параметры: // ТаблицаПоиска - см. МестаИспользования -Процедура ЗаменитьСсылкиКороткимиТранзакциями(Результат, Знач ПараметрыВыполнения, Знач Дубли, Знач ТаблицаПоиска) +// +Процедура ЗаменитьСсылкиКороткимиТранзакциями(Результат, Знач ПараметрыВыполнения, Знач Дубль, Знач ТаблицаПоиска) // Основной цикл обработки ФильтрСсылок = Новый Структура("Ссылка, КлючЗамены"); - Для Каждого Дубль Из Дубли Цикл - БылиОшибки = Результат.ЕстьОшибки; - Результат.ЕстьОшибки = Ложь; - - ФильтрСсылок.Ссылка = Дубль; - ФильтрСсылок.КлючЗамены = "Константа"; - - МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); - Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВКонстанте(Результат, МестоИспользования, ПараметрыВыполнения, Истина); - КонецЦикла; - - ФильтрСсылок.КлючЗамены = "Объект"; - МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); - Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВОбъекте(Результат, МестоИспользования, ПараметрыВыполнения, Истина); - КонецЦикла; - - ФильтрСсылок.КлючЗамены = "КлючЗаписи"; - МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); - Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Истина); - КонецЦикла; - - ФильтрСсылок.КлючЗамены = "Последовательность"; - МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); - Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Истина); - КонецЦикла; - - ФильтрСсылок.КлючЗамены = "РегистрСведений"; - МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); - Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВРегистреСведений(Результат, МестоИспользования, ПараметрыВыполнения, Истина); - КонецЦикла; - - Если Не Результат.ЕстьОшибки Тогда - ПараметрыВыполнения.УспешныеЗамены.Вставить(Дубль, ПараметрыВыполнения.ПарыЗамен[Дубль]); - КонецЕсли; - Результат.ЕстьОшибки = Результат.ЕстьОшибки Или БылиОшибки; - + + БылиОшибки = Результат.ЕстьОшибки; + Результат.ЕстьОшибки = Ложь; + + ФильтрСсылок.Ссылка = Дубль; + ФильтрСсылок.КлючЗамены = "Константа"; + + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВКонстанте(Результат, МестоИспользования, ПараметрыВыполнения); КонецЦикла; - Если ПараметрыВыполнения.УдалятьНепосредственно Тогда - УдалитьОбъектыНемонопольно(Результат, Дубли, ПараметрыВыполнения, Истина); - ИначеЕсли ПараметрыВыполнения.ПомечатьНаУдаление Тогда - УдалитьОбъектыНемонопольно(Результат, Дубли, ПараметрыВыполнения, Ложь); + ФильтрСсылок.КлючЗамены = "Объект"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВОбъекте(Результат, МестоИспользования, ПараметрыВыполнения); + КонецЦикла; + + ФильтрСсылок.КлючЗамены = "КлючЗаписи"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения); + КонецЦикла; + + ФильтрСсылок.КлючЗамены = "Последовательность"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения); + КонецЦикла; + + ФильтрСсылок.КлючЗамены = "РегистрСведений"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВРегистреСведений(Результат, МестоИспользования, ПараметрыВыполнения); + КонецЦикла; + + ПроизводимыеЗамены = Новый Массив; + ПроизводимыеЗамены.Добавить(Дубль); + + Если ПараметрыВыполнения.УдалятьНепосредственно + ИЛИ ПараметрыВыполнения.ПомечатьНаУдаление Тогда + + УстановитьПометкуУдаленияДляОбъектов(Результат, ПроизводимыеЗамены, ПараметрыВыполнения); Иначе - ТаблицаПовторногоПоиска = МестаИспользования(Дубли); + + ТаблицаПовторногоПоиска = МестаИспользования(ПроизводимыеЗамены,, ПараметрыВыполнения.ПараметрыПоискаМестИспользования); ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска); КонецЕсли; КонецПроцедуры -// Параметры: -// ТаблицаПоиска - см. МестаИспользования -Процедура ЗаменитьСсылкуОднойТранзакцией(Результат, Знач Дубль, Знач ПараметрыВыполнения, Знач ТаблицаПоиска) - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - // 1. Блокирование всех мест использования. - СостояниеОперации = "ОшибкаБлокировки"; - Блокировка = Новый БлокировкаДанных; - - МестаИспользования = ТаблицаПоиска.НайтиСтроки(Новый Структура("Ссылка", Дубль)); - ЗаблокироватьМестаИспользования(ПараметрыВыполнения, Блокировка, МестаИспользования); - Блокировка.Заблокировать(); - СостояниеОперации = ""; - - УстановитьПривилегированныйРежим(Ложь); - - // 2. Замена везде до первой ошибки. - Результат.ЕстьОшибки = Ложь; - - Для Каждого МестоИспользования Из МестаИспользования Цикл - - Если МестоИспользования.КлючЗамены = "Константа" Тогда - ПроизвестиЗаменуВКонстанте(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); - ИначеЕсли МестоИспользования.КлючЗамены = "Объект" Тогда - ПроизвестиЗаменуВОбъекте(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); - ИначеЕсли МестоИспользования.КлючЗамены = "Последовательность" Тогда - ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); - ИначеЕсли МестоИспользования.КлючЗамены = "КлючЗаписи" Тогда - ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); - ИначеЕсли МестоИспользования.КлючЗамены = "РегистрСведений" Тогда - ПроизвестиЗаменуВРегистреСведений(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); - КонецЕсли; - - Если Результат.ЕстьОшибки Тогда - ОтменитьТранзакцию(); - Возврат; - КонецЕсли; - - КонецЦикла; - - // 3. Удаление - ПроизводимыеЗамены = Новый Массив; - ПроизводимыеЗамены.Добавить(Дубль); - - Если ПараметрыВыполнения.УдалятьНепосредственно Тогда - УдалитьОбъектыНемонопольно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Истина); - - ИначеЕсли ПараметрыВыполнения.ПомечатьНаУдаление Тогда - УдалитьОбъектыНемонопольно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Ложь); - - Иначе - // Поиск новых - ТаблицаПовторногоПоиска = МестаИспользования(ПроизводимыеЗамены); - ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска); - КонецЕсли; - - Если Результат.ЕстьОшибки Тогда - ОтменитьТранзакцию(); - Возврат; - КонецЕсли; - - ПараметрыВыполнения.УспешныеЗамены.Вставить(Дубль, ПараметрыВыполнения.ПарыЗамен[Дубль]); - ЗафиксироватьТранзакцию(); - - Исключение - ОтменитьТранзакцию(); - Если СостояниеОперации = "ОшибкаБлокировки" Тогда - ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось заблокировать все места использования %1:'") - + Символы.ПС + ПредставлениеОшибки, Дубль); - ЗарегистрироватьОшибкуЗамены(Результат, Дубль, - ОписаниеОшибкиЗамены("ОшибкаБлокировки", Неопределено, Неопределено, Ошибка)); - Иначе - ВызватьИсключение; - КонецЕсли; - КонецПопытки - -КонецПроцедуры - -Процедура ПроизвестиЗаменуВКонстанте(Результат, Знач МестоИспользования, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция = Истина) +Процедура ПроизвестиЗаменуВКонстанте(Результат, Знач МестоИспользования, Знач ПараметрыЗаписи) УстановитьПривилегированныйРежим(Истина); @@ -5827,7 +5950,7 @@ // Будем производить сразу все замены для этих данных. Фильтр = Новый Структура("Данные, КлючЗамены", Данные, "Константа"); - ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); + ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); // см. МестаИспользования // Помечаем как обработанные Для Каждого Строка Из ОбрабатываемыеСтроки Цикл Строка.КлючЗамены = ""; @@ -5835,23 +5958,19 @@ СостояниеОперации = ""; Ошибка = ""; - Если ВнутренняяТранзакция Тогда - НачатьТранзакцию(); - КонецЕсли; + НачатьТранзакцию(); Попытка - Если ВнутренняяТранзакция Тогда - Блокировка = Новый БлокировкаДанных; - Блокировка.Добавить(Мета.ПолноеИмя()); - Попытка - Блокировка.Заблокировать(); - Исключение - Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось заблокировать константу %1'"), - ПредставлениеДанных); - СостояниеОперации = "ОшибкаБлокировки"; - ВызватьИсключение; - КонецПопытки; - КонецЕсли; + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить(Мета.ПолноеИмя()); + Попытка + Блокировка.Заблокировать(); + Исключение + Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось заблокировать константу %1'"), + ПредставлениеДанных); + СостояниеОперации = "ОшибкаБлокировки"; + ВызватьИсключение; + КонецПопытки; Менеджер = Константы[Мета.Имя].СоздатьМенеджерЗначения(); Менеджер.Прочитать(); @@ -5865,9 +5984,7 @@ КонецЦикла; Если Не ЗаменаПроизведена Тогда - Если ВнутренняяТранзакция Тогда - ОтменитьТранзакцию(); - КонецЕсли; + ОтменитьТранзакцию(); Возврат; КонецЕсли; @@ -5890,13 +6007,9 @@ УстановитьПривилегированныйРежим(Истина); КонецЕсли; - Если ВнутренняяТранзакция Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение - Если ВнутренняяТранзакция Тогда - ОтменитьТранзакцию(); - КонецЕсли; + ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЗаменыСсылок(), УровеньЖурналаРегистрации.Ошибка, Мета,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если СостояниеОперации = "ОшибкаЗаписи" Тогда @@ -5912,7 +6025,7 @@ КонецПроцедуры -Процедура ПроизвестиЗаменуВОбъекте(Результат, Знач МестоИспользования, Знач ПараметрыВыполнения, Знач ВнутренняяТранзакция = Истина) +Процедура ПроизвестиЗаменуВОбъекте(Результат, Знач МестоИспользования, Знач ПараметрыВыполнения) УстановитьПривилегированныйРежим(Истина); @@ -5920,32 +6033,28 @@ // Будем производить сразу все замены для этих данных. Фильтр = Новый Структура("Данные, КлючЗамены", Данные, "Объект"); - ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); // Массив из СтрокаТаблицыЗначений - + ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); // см. МестаИспользования ПредставлениеДанных = ПредметСтрокой(Данные); СостояниеОперации = ""; ТекстОшибки = ""; - Если ВнутренняяТранзакция Тогда - НачатьТранзакцию(); - КонецЕсли; + НачатьТранзакцию(); Попытка - Если ВнутренняяТранзакция Тогда - Блокировка = Новый БлокировкаДанных; - ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования); - Попытка - Блокировка.Заблокировать(); - Исключение - СостояниеОперации = "ОшибкаБлокировки"; - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось заблокировать объект ""%1"": - |%2'"), - ПредставлениеДанных, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - КонецЕсли; + Блокировка = Новый БлокировкаДанных; + ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования); + Попытка + Блокировка.Заблокировать(); + Исключение + СостояниеОперации = "ОшибкаБлокировки"; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось заблокировать объект ""%1"": + |%2'"), + ПредставлениеДанных, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; ОбъектыЗаписи = ИзмененныеОбъектыПриЗаменеВОбъекте(ПараметрыВыполнения, МестоИспользования, ОбрабатываемыеСтроки); @@ -5981,14 +6090,10 @@ ВызватьИсключение; КонецПопытки; - Если ВнутренняяТранзакция Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение - Если ВнутренняяТранзакция Тогда - ОтменитьТранзакцию(); - КонецЕсли; + ОтменитьТранзакцию(); Информация = ИнформацияОбОшибке(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЗаменыСсылок(), УровеньЖурналаРегистрации.Ошибка, МестоИспользования.Метаданные,, ПодробноеПредставлениеОшибки(Информация)); @@ -6009,7 +6114,7 @@ КонецПроцедуры -Процедура ПроизвестиЗаменуВНаборе(Результат, Знач МестоИспользования, Знач ПараметрыВыполнения, Знач ВнутренняяТранзакция = Истина) +Процедура ПроизвестиЗаменуВНаборе(Результат, Знач МестоИспользования, Знач ПараметрыВыполнения) УстановитьПривилегированныйРежим(Истина); Данные = МестоИспользования.Данные; @@ -6020,10 +6125,10 @@ // Будем производить сразу все замены для этих данных. Фильтр = Новый Структура("Данные, КлючЗамены"); ЗаполнитьЗначенияСвойств(Фильтр, МестоИспользования); - ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); + ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); // см. МестаИспользования ОписаниеНабора = ОписаниеКлючаЗаписи(Мета); - НаборЗаписей = ОписаниеНабора.НаборЗаписей; + НаборЗаписей = ОписаниеНабора.НаборЗаписей; // РегистрСведенийНаборЗаписей ПарыЗамен = Новый Соответствие; Для Каждого Строка Из ОбрабатываемыеСтроки Цикл @@ -6037,48 +6142,41 @@ СостояниеОперации = ""; Ошибка = ""; - Если ВнутренняяТранзакция Тогда - НачатьТранзакцию(); - КонецЕсли; + НачатьТранзакцию(); Попытка - Если ВнутренняяТранзакция Тогда - // Блокировка и подготовка набора. - Блокировка = Новый БлокировкаДанных; - Для Каждого КлючЗначение Из ОписаниеНабора.СписокИзмерений Цикл - ТипИзмерения = КлючЗначение.Значение; - Имя = КлючЗначение.Ключ; - Значение = Данные[Имя]; - - Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ТекущаяСсылка = Строка.Ссылка; - Если ТипИзмерения.СодержитТип(ТипЗнч(ТекущаяСсылка)) Тогда - Блокировка.Добавить(ОписаниеНабора.ПространствоБлокировки).УстановитьЗначение(Имя, ТекущаяСсылка); - КонецЕсли; - КонецЦикла; - - НаборЗаписей.Отбор[Имя].Установить(Значение); + // Блокировка и подготовка набора. + Блокировка = Новый БлокировкаДанных; + Для Каждого КлючЗначение Из ОписаниеНабора.СписокИзмерений Цикл + ТипИзмерения = КлючЗначение.Значение; + Имя = КлючЗначение.Ключ; + Значение = Данные[Имя]; + + Для Каждого Строка Из ОбрабатываемыеСтроки Цикл + ТекущаяСсылка = Строка.Ссылка; + Если ТипИзмерения.СодержитТип(ТипЗнч(ТекущаяСсылка)) Тогда + Блокировка.Добавить(ОписаниеНабора.ПространствоБлокировки).УстановитьЗначение(Имя, ТекущаяСсылка); + КонецЕсли; КонецЦикла; - Попытка - Блокировка.Заблокировать(); - Исключение - Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось заблокировать набор %1'"), - ПредставлениеДанных); - СостояниеОперации = "ОшибкаБлокировки"; - ВызватьИсключение; - КонецПопытки; - - КонецЕсли; - + НаборЗаписей.Отбор[Имя].Установить(Значение); + КонецЦикла; + + Попытка + Блокировка.Заблокировать(); + Исключение + Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось заблокировать набор %1'"), + ПредставлениеДанных); + СостояниеОперации = "ОшибкаБлокировки"; + ВызватьИсключение; + КонецПопытки; + НаборЗаписей.Прочитать(); ЗаменитьВКоллекцииСтрок("НаборЗаписей", "НаборЗаписей", НаборЗаписей, НаборЗаписей, ОписаниеНабора.СписокПолей, ПарыЗамен); Если НаборЗаписей.Модифицированность() Тогда - Если ВнутренняяТранзакция Тогда - ОтменитьТранзакцию(); - КонецЕсли; + ОтменитьТранзакцию(); Возврат; КонецЕсли; @@ -6100,14 +6198,10 @@ УстановитьПривилегированныйРежим(Истина); КонецЕсли; - Если ВнутренняяТранзакция Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение - Если ВнутренняяТранзакция Тогда - ОтменитьТранзакцию(); - КонецЕсли; + ОтменитьТранзакцию(); Информация = ИнформацияОбОшибке(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЗаменыСсылок(), УровеньЖурналаРегистрации.Ошибка, Мета,, ПодробноеПредставлениеОшибки(Информация)); @@ -6123,7 +6217,7 @@ КонецПроцедуры -Процедура ПроизвестиЗаменуВРегистреСведений(Результат, Знач МестоИспользования, Знач ПараметрыВыполнения, Знач ВнутренняяТранзакция = Истина) +Процедура ПроизвестиЗаменуВРегистреСведений(Результат, Знач МестоИспользования, Знач ПараметрыВыполнения) Если МестоИспользования.Обработано Тогда Возврат; @@ -6171,17 +6265,13 @@ НаборЗаписейОригинала = Менеджер.СоздатьНаборЗаписей(); КонецЕсли; - Если ВнутренняяТранзакция Тогда - НачатьТранзакцию(); - КонецЕсли; + НачатьТранзакцию(); Попытка - Если ВнутренняяТранзакция Тогда - Блокировка = Новый БлокировкаДанных; - БлокировкаДубля = Блокировка.Добавить(Информация.ПолноеИмя); - Если ТребуетсяДваНабора Тогда - БлокировкаОригинала = Блокировка.Добавить(Информация.ПолноеИмя); - КонецЕсли; + Блокировка = Новый БлокировкаДанных; + БлокировкаДубля = Блокировка.Добавить(Информация.ПолноеИмя); + Если ТребуетсяДваНабора Тогда + БлокировкаОригинала = Блокировка.Добавить(Информация.ПолноеИмя); КонецЕсли; Для Каждого КлючЗначение Из Информация.Измерения Цикл @@ -6199,9 +6289,9 @@ НаборЗаписейДубля.Отбор[КлючЗначение.Ключ].Установить(ЗначениеИзмеренияДубля); - Если ВнутренняяТранзакция Тогда // Замена в конкретной паре и блокировка на конкретную замену. - БлокировкаДубля.УстановитьЗначение(КлючЗначение.Ключ, ЗначениеИзмеренияДубля); - КонецЕсли; + // Замена в конкретной паре и блокировка на конкретную замену. + БлокировкаДубля.УстановитьЗначение(КлючЗначение.Ключ, ЗначениеИзмеренияДубля); + Если ТребуетсяДваНабора Тогда Если ЗначениеИзмеренияДубля = Дубль Тогда @@ -6213,28 +6303,23 @@ НаборЗаписейОригинала.Отбор[КлючЗначение.Ключ].Установить(ЗначениеИзмеренияОригинала); ЗначенияИзмеренийОригинала.Вставить(КлючЗначение.Ключ, ЗначениеИзмеренияОригинала); - Если ВнутренняяТранзакция Тогда // Замена в конкретной паре и блокировка на конкретную замену. - БлокировкаОригинала.УстановитьЗначение(КлючЗначение.Ключ, ЗначениеИзмеренияОригинала); - КонецЕсли; + // Замена в конкретной паре и блокировка на конкретную замену. + БлокировкаОригинала.УстановитьЗначение(КлючЗначение.Ключ, ЗначениеИзмеренияОригинала); КонецЕсли; КонецЦикла; // Установка блокировки. - Если ВнутренняяТранзакция Тогда - Попытка - Блокировка.Заблокировать(); - Исключение - // Вид ошибки "БлокировкаДляРегистра". - ВызватьИсключение; - КонецПопытки; - КонецЕсли; + Попытка + Блокировка.Заблокировать(); + Исключение + // Вид ошибки "БлокировкаДляРегистра". + ВызватьИсключение; + КонецПопытки; // Откуда читаем? НаборЗаписейДубля.Прочитать(); Если НаборЗаписейДубля.Количество() = 0 Тогда // Нечего писать. - Если ВнутренняяТранзакция Тогда - ОтменитьТранзакцию(); // Замена не требуется. - КонецЕсли; + ОтменитьТранзакцию(); // Замена не требуется. Возврат; КонецЕсли; ЗаписьДубля = НаборЗаписейДубля[0]; @@ -6295,13 +6380,9 @@ КонецПопытки; КонецЕсли; - Если ВнутренняяТранзакция Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение - Если ВнутренняяТранзакция Тогда - ОтменитьТранзакцию(); - КонецЕсли; + ОтменитьТранзакцию(); ЗарегистрироватьОшибкуВТаблицу(Результат, Дубль, Оригинал, КлючЗаписиРегистра, Информация, "БлокировкаДляРегистра", ИнформацияОбОшибке()); КонецПопытки @@ -6312,6 +6393,7 @@ Данные = МестоИспользования.Данные; ОписаниеПоследовательностей = ОписаниеПоследовательностей(МестоИспользования.Метаданные); ОписаниеДвижений = ОписаниеДвижений(МестоИспользования.Метаданные); + ОписаниеЗадач = ОписаниеЗадач(МестоИспользования.Метаданные); УстановитьПривилегированныйРежим(Истина); @@ -6321,7 +6403,7 @@ // Считываем Описание = ОписаниеОбъекта(Данные.Метаданные()); Попытка - Объект = Данные.ПолучитьОбъект(); + Объект = Данные.ПолучитьОбъект(); Исключение // Был уже обработан с ошибками. Объект = Неопределено; @@ -6347,47 +6429,7 @@ ПарыЗамен.Вставить(МестоИспользования.Ссылка, МестоИспользования.ЦелеваяСсылка); КонецЦикла; - // Реквизиты - Для Каждого КлючЗначение Из Описание.Реквизиты Цикл - Имя = КлючЗначение.Ключ; - ЦелеваяСсылка = ПарыЗамен[ Объект[Имя] ]; - Если ЦелеваяСсылка <> Неопределено Тогда - ЗарегистрироватьФактЗамены(Объект, Объект[Имя], ЦелеваяСсылка, "Реквизиты", Имя); - Объект[Имя] = ЦелеваяСсылка; - КонецЕсли; - КонецЦикла; - - // Стандартные реквизиты - Для Каждого КлючЗначение Из Описание.СтандартныеРеквизиты Цикл - Имя = КлючЗначение.Ключ; - ЦелеваяСсылка = ПарыЗамен[ Объект[Имя] ]; - Если ЦелеваяСсылка <> Неопределено Тогда - ЗарегистрироватьФактЗамены(Объект, Объект[Имя], ЦелеваяСсылка, "СтандартныеРеквизиты", Имя); - Объект[Имя] = ЦелеваяСсылка; - КонецЕсли; - КонецЦикла; - - // Табличные части - Для Каждого Элемент Из Описание.ТабличныеЧасти Цикл - ЗаменитьВКоллекцииСтрок( - "ТабличныеЧасти", - Элемент.Имя, - Объект, - Объект[Элемент.Имя], - Элемент.СписокПолей, - ПарыЗамен); - КонецЦикла; - - // Стандартные табличные части. - Для Каждого Элемент Из Описание.СтандартныеТабличныеЧасти Цикл - ЗаменитьВКоллекцииСтрок( - "СтандартныеТабличныеЧасти", - Элемент.Имя, - Объект, - Объект[Элемент.Имя], - Элемент.СписокПолей, - ПарыЗамен); - КонецЦикла; + ВыполнитьЗаменуВРеквизитахОбъекта(Объект, Описание, ПарыЗамен); // Движения Для Каждого ОписаниеДвижения Из ОписаниеДвижений Цикл @@ -6423,6 +6465,27 @@ КонецЕсли; КонецЦикла; + Если ОписаниеЗадач <> Неопределено Тогда + + ЗадачаПроцесса = ЗадачиПроцесса(Данные, ОписаниеЗадач.ПространствоБлокировки); + Пока ЗадачаПроцесса.Следующий() Цикл + + ЗадачаОбъект = ЗадачаПроцесса.Ссылка.ПолучитьОбъект(); + Фильтр = Новый Структура("Данные, КлючЗамены", ЗадачаПроцесса.Ссылка, "Объект"); + ОбрабатываемыеСтрокиЗадачи = МестоИспользования.Владелец().НайтиСтроки(Фильтр); // см. МестаИспользования + Для каждого МестоИспользованияЗадачи Из ОбрабатываемыеСтрокиЗадачи Цикл + ПарыЗамен.Вставить(МестоИспользованияЗадачи.Ссылка, МестоИспользованияЗадачи.ЦелеваяСсылка); + КонецЦикла; + ВыполнитьЗаменуВРеквизитахОбъекта(ЗадачаОбъект, ОписаниеЗадач, ПарыЗамен); + + Если ЗадачаОбъект.Модифицированность() Тогда + Измененные.Вставить(ЗадачаОбъект, Ложь); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + // Сам объект последний - для возможного перепроведения. Если Объект.Модифицированность() Тогда Измененные.Вставить(Объект, Описание.МожетБытьПроведен); @@ -6431,6 +6494,60 @@ Возврат Измененные; КонецФункции +Функция ЗадачиПроцесса(БизнесПроцесс, ТипЗадач) + + Запрос = Новый Запрос(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ Таб.Ссылка ИЗ %1 КАК Таб ГДЕ Таб.БизнесПроцесс = &БизнесПроцесс",ТипЗадач)); + Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс); + Возврат Запрос.Выполнить().Выбрать(); + +КонецФункции + +Процедура ВыполнитьЗаменуВРеквизитахОбъекта(Объект, Описание, ПарыЗамен) + + // Реквизиты + Для Каждого КлючЗначение Из Описание.Реквизиты Цикл + Имя = КлючЗначение.Ключ; + ЦелеваяСсылка = ПарыЗамен[ Объект[Имя] ]; + Если ЦелеваяСсылка <> Неопределено Тогда + ЗарегистрироватьФактЗамены(Объект, Объект[Имя], ЦелеваяСсылка, "Реквизиты", Имя); + Объект[Имя] = ЦелеваяСсылка; + КонецЕсли; + КонецЦикла; + + // Стандартные реквизиты + Для Каждого КлючЗначение Из Описание.СтандартныеРеквизиты Цикл + Имя = КлючЗначение.Ключ; + ЦелеваяСсылка = ПарыЗамен[ Объект[Имя] ]; + Если ЦелеваяСсылка <> Неопределено Тогда + ЗарегистрироватьФактЗамены(Объект, Объект[Имя], ЦелеваяСсылка, "СтандартныеРеквизиты", Имя); + Объект[Имя] = ЦелеваяСсылка; + КонецЕсли; + КонецЦикла; + + // Табличные части + Для Каждого Элемент Из Описание.ТабличныеЧасти Цикл + ЗаменитьВКоллекцииСтрок( + "ТабличныеЧасти", + Элемент.Имя, + Объект, + Объект[Элемент.Имя], + Элемент.СписокПолей, + ПарыЗамен); + КонецЦикла; + + // Стандартные табличные части. + Для Каждого Элемент Из Описание.СтандартныеТабличныеЧасти Цикл + ЗаменитьВКоллекцииСтрок( + "СтандартныеТабличныеЧасти", + Элемент.Имя, + Объект, + Объект[Элемент.Имя], + Элемент.СписокПолей, + ПарыЗамен); + КонецЦикла; + +КонецПроцедуры + Процедура ЗарегистрироватьФактЗамены(Объект, СсылкаДубля, СсылкаОригинала, ВидРеквизита, ИмяРеквизита, Индекс = Неопределено, ИмяКолонки = Неопределено) Структура = Новый Структура("ДополнительныеСвойства"); ЗаполнитьЗначенияСвойств(Структура, Объект); @@ -6454,11 +6571,11 @@ ВыполненныеЗамены.Добавить(ОписаниеЗамены); КонецПроцедуры -Процедура УдалитьОбъектыНемонопольно(Результат, Знач УдаляемыеСсылки, Знач ПараметрыВыполнения, Знач УдалятьНепосредственно) +Процедура УстановитьПометкуУдаленияДляОбъектов(Результат, Знач УдаляемыеСсылки, Знач ПараметрыВыполнения) УстановитьПривилегированныйРежим(Истина); ЕстьВнешняяТранзакция = ТранзакцияАктивна(); - ВсеМестаИспользования = МестаИспользования(УдаляемыеСсылки); + ВсеМестаИспользования = МестаИспользования(УдаляемыеСсылки,,ПараметрыВыполнения.ПараметрыПоискаМестИспользования); Для Каждого УдаляемаяСсылка Из УдаляемыеСсылки Цикл Информация = ИнформацияОТипе(ТипЗнч(УдаляемаяСсылка), ПараметрыВыполнения); Блокировка = Новый БлокировкаДанных; @@ -6470,8 +6587,8 @@ Блокировка.Заблокировать(); ЭтоОшибкаБлокировки = Ложь; - Успешно = УдалитьОбъектНемонопольно(Результат, УдаляемаяСсылка, ВсеМестаИспользования, - ПараметрыВыполнения, УдалятьНепосредственно, ЕстьВнешняяТранзакция); + Успешно = УстановитьПометкуУдаления(Результат, УдаляемаяСсылка, ВсеМестаИспользования, + ПараметрыВыполнения, ЕстьВнешняяТранзакция); Если Не Успешно Тогда ОтменитьТранзакцию(); Продолжить; @@ -6492,8 +6609,8 @@ КонецПроцедуры -Функция УдалитьОбъектНемонопольно(Результат, Знач УдаляемаяСсылка, Знач ВсеМестаИспользования, Знач ПараметрыВыполнения, - Знач УдалятьНепосредственно, ЕстьВнешняяТранзакция) +Функция УстановитьПометкуУдаления(Результат, Знач УдаляемаяСсылка, Знач ВсеМестаИспользования, Знач ПараметрыВыполнения, + ЕстьВнешняяТранзакция) УстановитьПривилегированныйРежим(Истина); @@ -6515,7 +6632,7 @@ Возврат Ложь; // Остались места использования, нельзя удалять. КонецЕсли; - Объект = УдаляемаяСсылка.ПолучитьОбъект(); + Объект = УдаляемаяСсылка.ПолучитьОбъект(); // ДокументОбъект, СправочникОбъект Если Объект = Неопределено Тогда Возврат Ложь; // Уже удален. КонецЕсли; @@ -6526,14 +6643,11 @@ Успешно = Истина; Попытка - ОбработатьОбъектСПерехватомСообщений(Объект, ?(УдалятьНепосредственно, "НепосредственноеУдаление", "ПометкаУдаления"), + ОбработатьОбъектСПерехватомСообщений(Объект, "ПометкаУдаления", Неопределено, ПараметрыВыполнения); + Результат.ОчередьКНепосредственномуУдалению.Добавить(Объект.Ссылка); Исключение - Если УдалятьНепосредственно Тогда - ТекстОшибки = НСтр("ru = 'Элемент не был удален по причине:'"); - Иначе - ТекстОшибки = НСтр("ru = 'Элемент не был помечен на удаление по причине:'"); - КонецЕсли; + ТекстОшибки = НСтр("ru = 'Элемент не был помечен на удаление по причине:'"); ТекстОшибки = ТекстОшибки + Символы.ПС + СокрЛП(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ОписаниеОшибки = ОписаниеОшибкиЗамены("ОшибкаУдаления", УдаляемаяСсылка, ПредставлениеСсылки, ТекстОшибки); ЗарегистрироватьОшибкуЗамены(Результат, УдаляемаяСсылка, ОписаниеОшибки); @@ -6574,16 +6688,6 @@ КонецПроцедуры -Процедура ЗаблокироватьМестаИспользования(ПараметрыВыполнения, Блокировка, МестаИспользования) - - Для Каждого МестоИспользования Из МестаИспользования Цикл - - ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования); - - КонецЦикла; - -КонецПроцедуры - Процедура ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования) Если МестоИспользования.КлючЗамены = "Константа" Тогда @@ -6610,6 +6714,12 @@ Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение("Регистратор", СсылкаОбъекта); КонецЦикла; + // Задачи (для бизнес-процессов) + ОписаниеЗадач = ОписаниеЗадач(МетаданныеОбъекта); + Если ОписаниеЗадач <> Неопределено Тогда + Блокировка.Добавить(ОписаниеЗадач.ПространствоБлокировки).УстановитьЗначение("БизнесПроцесс", СсылкаОбъекта); + КонецЕсли; + ИначеЕсли МестоИспользования.КлючЗамены = "Последовательность" Тогда СсылкаОбъекта = МестоИспользования.Данные; @@ -6654,15 +6764,15 @@ КонецПроцедуры // Параметры: -// ОбъектМетаданных - ОбъектМетаданных - +// ОбъектМетаданных - ОбъектМетаданных // // Возвращаемое значение: -// Массив из Структура -: -// * СписокПолей - Структура - -// * СтруктураИзмерений - Структура - -// * СписокВедущих - Структура - -// * НаборЗаписей - РегистрСведенийНаборЗаписей - -// * ПространствоБлокировки - Строка - +// Массив из Структура: +// * СписокПолей - Структура +// * СтруктураИзмерений - Структура +// * СписокВедущих - Структура +// * НаборЗаписей - РегистрСведенийНаборЗаписей +// * ПространствоБлокировки - Строка // Функция ОписаниеДвижений(Знач ОбъектМетаданных) @@ -6711,6 +6821,15 @@ Возврат ОписаниеДвижений; КонецФункции +// Параметры: +// Мета - ОбъектМетаданных +// +// Возвращаемое значение: +// Массив из Структура: +// * НаборЗаписей - ПоследовательностьНаборЗаписей +// * ПространствоБлокировки - Строка +// * Измерения - Структура +// Функция ОписаниеПоследовательностей(Знач Мета) ОписаниеПоследовательностей = Новый Массив; @@ -6742,16 +6861,16 @@ КонецФункции // Возвращаемое значение: -// Структура - : -// * СтандартныеРеквизиты - Структура - -// * Реквизиты - Структура - -// * СтандартныеТабличныеЧасти - Массив из Структура -: -// ** Имя - Строка - -// ** СписокПолей - Структура - -// * ТабличныеЧасти - Массив из Структура -: -// ** Имя - Строка - -// ** СписокПолей - Структура - -// * МожетБытьПроведен - Булево - +// Структура: +// * СтандартныеРеквизиты - Структура +// * Реквизиты - Структура +// * СтандартныеТабличныеЧасти - Массив из Структура: +// ** Имя - Строка +// ** СписокПолей - Структура +// * ТабличныеЧасти - Массив из Структура: +// ** Имя - Строка +// ** СписокПолей - Структура +// * МожетБытьПроведен - Булево // Функция ОписаниеОбъекта(Знач Мета) @@ -6820,6 +6939,30 @@ ОписаниеОбъекта.Вставить("МожетБытьПроведен", Метаданные.Документы.Содержит(Мета)); Возврат ОписаниеОбъекта; КонецФункции +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных +// +// Возвращаемое значение: +// Массив из Структура: +// * СписокПолей - Структура +// * СтруктураИзмерений - Структура +// * СписокВедущих - Структура +// * НаборЗаписей - РегистрСведенийНаборЗаписей +// * ПространствоБлокировки - Строка +// +Функция ОписаниеЗадач(Знач Мета) + + Перем ОписаниеЗадач; + Если НЕ Метаданные.БизнесПроцессы.Содержит(Мета) Тогда + Возврат ОписаниеЗадач; + КонецЕсли; + + ОписаниеЗадач = ОписаниеОбъекта(Мета.Задача); + ОписаниеЗадач.Вставить("ПространствоБлокировки", Мета.Задача.ПолноеИмя()); + + Возврат ОписаниеЗадач; + +КонецФункции Функция ОписаниеКлючаЗаписи(Знач Мета) // можно закэшировать по Мета @@ -6998,9 +7141,10 @@ Попытка - Объект.ОбменДанными.Загрузка = Не ПараметрыЗаписи.ВключатьБизнесЛогику; Если Действие = "Запись" Тогда + Объект.ОбменДанными.Загрузка = Не ПараметрыЗаписи.ВключатьБизнесЛогику; + Если РежимЗаписи = Неопределено Тогда Объект.Записать(); Иначе @@ -7009,6 +7153,8 @@ ИначеЕсли Действие = "ПометкаУдаления" Тогда + Объект.ОбменДанными.Загрузка = Не ПараметрыЗаписи.ВключатьБизнесЛогику; + МетаданныеОбъекта = Объект.Метаданные(); Если ЭтоСправочник(МетаданныеОбъекта) Или ЭтоПланВидовХарактеристик(МетаданныеОбъекта) @@ -7018,8 +7164,6 @@ Объект.УстановитьПометкуУдаления(Истина); КонецЕсли; - ИначеЕсли Действие = "НепосредственноеУдаление" Тогда - Объект.Удалить(); КонецЕсли; Исключение @@ -7291,7 +7435,7 @@ ВидыРеквизитов = Новый Структура("СтандартныеРеквизиты, Реквизиты, Измерения, Ресурсы"); ЗаполнитьЗначенияСвойств(ВидыРеквизитов, ОбъектМетаданных); Для Каждого КлючИЗначение Из ВидыРеквизитов Цикл - Коллекция = КлючИЗначение.Значение; + Коллекция = КлючИЗначение.Значение; // КоллекцияОбъектовМетаданных Если ТипЗнч(Коллекция) = Тип("КоллекцияОбъектовМетаданных") Тогда КудаПишем = ?(Информация.Свойство(КлючИЗначение.Ключ), Информация[КлючИЗначение.Ключ], Информация.Реквизиты); Для Каждого Реквизит Из Коллекция Цикл @@ -7318,7 +7462,7 @@ КонецФункции // Параметры: -// МетаданныеРеквизита - ОбъектМетаданныхРеквизит - +// МетаданныеРеквизита - ОбъектМетаданныхРеквизит // Функция ИнформацияПоРеквизиту(МетаданныеРеквизита) // ОписаниеСтандартногоРеквизита @@ -7336,67 +7480,167 @@ Возврат Информация; КонецФункции -Функция ЭтоСлужебныеДанные(МестоИспользования, ИсключенияПоискаСсылок) +Процедура ДобавитьВСтатистикуЗаменыСсылок(Статистика, Дубль, ЕстьОшибки) + + КлючДубля = Дубль.Метаданные().ПолноеИмя(); + ЭлементСтатистики = Статистика[КлючДубля]; + Если ЭлементСтатистики = Неопределено Тогда + ЭлементСтатистики = Новый Структура("КоличествоЭлементов, КоличествоОшибок",0,0); + Статистика.Вставить(КлючДубля, ЭлементСтатистики); + КонецЕсли; + + ЭлементСтатистики.КоличествоЭлементов = ЭлементСтатистики.КоличествоЭлементов + 1; + ЭлементСтатистики.КоличествоОшибок = ЭлементСтатистики.КоличествоОшибок + ?(ЕстьОшибки, 1,0); + +КонецПроцедуры + +Процедура ОтправитьСтатистикуЗаменыСсылок(Статистика) + + Если НЕ ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; - ИсключениеПоиска = ИсключенияПоискаСсылок[МестоИспользования.Метаданные]; + ЦентрМониторингаМенеджер = ОбщийМодуль("ЦентрМониторинга"); + Для каждого ЭлементСтатистики Из Статистика Цикл - // Данные может быть как ссылкой так и ключом записи регистра. + ЦентрМониторингаМенеджер.ЗаписатьОперациюБизнесСтатистики( + "БазоваяФункциональность.ЗаменаСсылок."+ЭлементСтатистики.Ключ, ЭлементСтатистики.Значение.КоличествоЭлементов); + + ЦентрМониторингаМенеджер.ЗаписатьОперациюБизнесСтатистики( + "БазоваяФункциональность.ЗаменаСсылокКоличествоОшибок."+ЭлементСтатистики.Ключ, ЭлементСтатистики.Значение.КоличествоОшибок); + + КонецЦикла; + +КонецПроцедуры + +Процедура ДополнитьИсключенияПоискаСсылокПодчиненнымиОбъектами(Знач ИсключенияПоискаСсылок) - Если ИсключениеПоиска = Неопределено Тогда - Возврат (МестоИспользования.Ссылка = МестоИспользования.Данные); // Ссылку саму на себя исключаем. - ИначеЕсли ИсключениеПоиска = "*" Тогда - Возврат Истина; // Если указано исключить все - считаем все исключением. - Иначе - Для Каждого ПутьКРеквизиту Из ИсключениеПоиска Цикл - // Если указаны исключения. + Для каждого ОписаниеПодчиненногоОбъекта Из ПодчиненныеОбъекты() Цикл + + ПоляСвязи = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + ОписаниеПодчиненногоОбъекта.ПоляСвязей, ",",,Истина); + ЗначениеИсключенияПоискаСсылок = Новый Массив; + Для каждого ПолеСвязи Из ПоляСвязи Цикл + ЗначениеИсключенияПоискаСсылок.Добавить(ПолеСвязи); + КонецЦикла; + ИсключенияПоискаСсылок.Вставить(ОписаниеПодчиненногоОбъекта.ПодчиненныйОбъект, ЗначениеИсключенияПоискаСсылок); + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗарегистрироватьОшибкиУдаления(Результат, ПрепятствующиеУдалению) + + Для каждого ПрепятствующиеУдалению Из ПрепятствующиеУдалению Цикл + + Если ЭтоСсылка(ТипЗнч(ПрепятствующиеУдалению.ОбнаруженныйСсылка)) Тогда + ПредставлениеСсылки = ПредметСтрокой(ПрепятствующиеУдалению.ОбнаруженныйСсылка); + Иначе + // Могут быть не только ссылочные объекты + // Не описали удаление данных, добавленных в исключения поиска ссылок + ПредставлениеСсылки = Строка(ПрепятствующиеУдалению.ОбнаруженныйСсылка); + КонецЕсли; + + ТекстОшибки = НСтр("ru = 'Элемент не удален, т.к. на него есть ссылки'"); + ОписаниеОшибки = ОписаниеОшибкиЗамены("ОшибкаУдаления", ПрепятствующиеУдалению.ОбнаруженныйСсылка, ПредставлениеСсылки, ТекстОшибки); + + ЗарегистрироватьОшибкуЗамены(Результат, ПрепятствующиеУдалению.УдаляемыйСсылка, ОписаниеОшибки); + + КонецЦикла; + +КонецПроцедуры + +Функция СформироватьДубли(ПараметрыВыполнения, ПараметрыЗамены, ПарыЗамен, Результат) + + Дубли = Новый Массив; + Для Каждого КлючЗначение Из ПарыЗамен Цикл + Дубль = КлючЗначение.Ключ; + Оригинал = КлючЗначение.Значение; + Если Дубль = Оригинал Или Дубль.Пустая() Тогда + Продолжить; // Самого на себя и пустые ссылки не заменяем. + КонецЕсли; + Дубли.Добавить(Дубль); + // Пропускаем промежуточные замены, чтобы не строить граф (если A->B и B->C то вместо A->B производится замена A->C). + ОригиналОригинала = ПарыЗамен[Оригинал]; + ЕстьОригиналОригинала = (ОригиналОригинала <> Неопределено И ОригиналОригинала <> Дубль И ОригиналОригинала <> Оригинал); + Если ЕстьОригиналОригинала Тогда + Пока ЕстьОригиналОригинала Цикл + Оригинал = ОригиналОригинала; + ОригиналОригинала = ПарыЗамен[Оригинал]; + ЕстьОригиналОригинала = (ОригиналОригинала <> Неопределено И ОригиналОригинала <> Дубль И ОригиналОригинала <> Оригинал); + КонецЦикла; + ПарыЗамен.Вставить(Дубль, Оригинал); + КонецЕсли; + КонецЦикла; + + Если ПараметрыВыполнения.УчитыватьПрикладныеПравила И ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда + МодульПоискИУдалениеДублей = ОбщийМодуль("ПоискИУдалениеДублей"); + Ошибки = МодульПоискИУдалениеДублей.ПроверитьВозможностьЗаменыЭлементов(ПарыЗамен, ПараметрыЗамены); + Для Каждого КлючЗначение Из Ошибки Цикл + Дубль = КлючЗначение.Ключ; + Оригинал = ПарыЗамен[Дубль]; + ТекстОшибки = КлючЗначение.Значение; + Причина = ОписаниеОшибкиЗамены("ОшибкаЗаписи", Оригинал, ПредметСтрокой(Оригинал), ТекстОшибки); + ЗарегистрироватьОшибкуЗамены(Результат, Дубль, Причина); - // Относительный путь к реквизиту: - // "<ИмяРеквизитаИлиТЧ>[.<ИмяРеквизитаТЧ>]". - - Если ЭтоСсылка(ТипЗнч(МестоИспользования.Данные)) Тогда - - // Проверка есть ли по исключаемому пути в указанных данных проверяемая ссылка - - ПолноеИмяОбъектаМетаданных = МестоИспользования.Метаданные.ПолноеИмя(); - - ТекстЗапроса = - "ВЫБРАТЬ - | ИСТИНА - |ИЗ - | &ПолноеИмяОбъектаМетаданных КАК Таблица - |ГДЕ - | &ПутьКРеквизиту = &ПроверяемаяСсылка - | И Таблица.Ссылка = &Ссылка"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПутьКРеквизиту", ПутьКРеквизиту); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ПроверяемаяСсылка", МестоИспользования.Ссылка); - Запрос.УстановитьПараметр("Ссылка", МестоИспользования.Данные); - - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - Возврат Истина; - КонецЕсли; - - Иначе - - БуферДанных = Новый Структура(ПутьКРеквизиту); - ЗаполнитьЗначенияСвойств(БуферДанных, МестоИспользования.Данные); - Если БуферДанных[ПутьКРеквизиту] = МестоИспользования.Ссылка Тогда - Возврат Истина; - КонецЕсли; - + Индекс = Дубли.Найти(Дубль); + Если Индекс <> Неопределено Тогда + Дубли.Удалить(Индекс); // пропускаем проблемный элемент. КонецЕсли; - КонецЦикла; КонецЕсли; + Возврат Дубли; + +КонецФункции + +Функция НовыйПараметрыВыполненияЗаменыСсылок(Знач ПараметрыЗамены) - Возврат Ложь; + ПараметрыПоУмолчанию = ПараметрыЗаменыСсылок(); + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("УдалятьНепосредственно", ПараметрыПоУмолчанию.СпособУдаления = "Непосредственно"); + ПараметрыВыполнения.Вставить("ПомечатьНаУдаление", ПараметрыПоУмолчанию.СпособУдаления = "Пометка"); + ПараметрыВыполнения.Вставить("ВключатьБизнесЛогику", ПараметрыПоУмолчанию.ВключатьБизнесЛогику); + ПараметрыВыполнения.Вставить("ПривилегированнаяЗапись", ПараметрыПоУмолчанию.ПривилегированнаяЗапись); + ПараметрыВыполнения.Вставить("УчитыватьПрикладныеПравила", ПараметрыПоУмолчанию.УчитыватьПрикладныеПравила); + ПараметрыВыполнения.Вставить("МестаЗамены", Новый Массив); + ЗаменаПарыВТранзакции = ПараметрыПоУмолчанию.ЗаменаПарыВТранзакции; + // Переданные параметры обрабатываются условно для обратной совместимости. + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "СпособУдаления"); + Если ЗначениеПараметра = "Непосредственно" Тогда + ПараметрыВыполнения.УдалятьНепосредственно = Истина; + ПараметрыВыполнения.ПомечатьНаУдаление = Ложь; + ИначеЕсли ЗначениеПараметра = "Пометка" Тогда + ПараметрыВыполнения.УдалятьНепосредственно = Ложь; + ПараметрыВыполнения.ПомечатьНаУдаление = Истина; + КонецЕсли; + + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "ВключатьБизнесЛогику"); + Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда + ПараметрыВыполнения.ВключатьБизнесЛогику = ЗначениеПараметра; + КонецЕсли; + + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "ЗаменаПарыВТранзакции"); + Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда + ЗаменаПарыВТранзакции = ЗначениеПараметра; + КонецЕсли; + + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "ПривилегированнаяЗапись"); + Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда + ПараметрыВыполнения.ПривилегированнаяЗапись = ЗначениеПараметра; + КонецЕсли; + + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "УчитыватьПрикладныеПравила"); + Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда + ПараметрыВыполнения.УчитыватьПрикладныеПравила = ЗначениеПараметра; + КонецЕсли; + + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗамены, "МестаЗамены", Новый Массив); + Если (ЗначениеПараметра.Количество() > 0) Тогда + ПараметрыВыполнения.МестаЗамены = Новый Массив(Новый ФиксированныйМассив(ЗначениеПараметра)); + КонецЕсли; + + Возврат ПараметрыВыполнения; КонецФункции #КонецОбласти @@ -7585,9 +7829,7 @@ Если Не ОбъектНайден Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Объект метаданных ""%1"" не найден, - |либо для него не поддерживается получение модуля менеджера.'"), - Имя); + НСтр("ru = 'Объект метаданных ""%1"" не существует.'"), Имя); КонецЕсли; // АПК:488-выкл ВычислитьВБезопасномРежиме не используется, чтобы избежать вызова ОбщийМодуль рекурсивно. @@ -7985,7 +8227,8 @@ // Не очищает переданное значение, если в нем передана несуществующая ссылка, а возвращает Ложь. // // Параметры: -// Значение - ЛюбаяСсылка, Произвольный - проверяемое значение или коллекция. +// Значение - ЛюбаяСсылка +// - Произвольный - проверяемое значение или коллекция. // // Возвращаемое значение: // Булево - Истина, если Значение ссылочного типа и объект не существует в информационной базе. @@ -8129,7 +8372,7 @@ Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат параметра ИмяПроцедуры (передано значение: ""%1"") в ОбщегоНазначения.ВыполнитьМетодКонфигурации: - |Не найден общий модуль ""%2"".'"), + |Не существует общий модуль ""%2"".'"), ИмяПроцедуры, ИмяОбъекта); КонецЕсли; @@ -8144,7 +8387,7 @@ Если Менеджер = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат параметра ИмяПроцедуры (передано значение: ""%1"") в ОбщегоНазначения.ВыполнитьМетодКонфигурации: - |Не найден менеджер объекта ""%2"".'"), + |Не существует менеджер объекта ""%2"".'"), ИмяПроцедуры, ПолноеИмяОбъекта); КонецЕсли; @@ -8342,7 +8585,7 @@ ПараметрыСтрока = ""; Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда Для Индекс = 0 По Параметры.ВГраница() Цикл - ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; + ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + XMLСтрока(Индекс) + "],"; КонецЦикла; ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); КонецЕсли; @@ -8398,7 +8641,7 @@ ПараметрыСтрока = ""; Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда Для Индекс = 0 По Параметры.ВГраница() Цикл - ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; + ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + XMLСтрока(Индекс) + "],"; КонецЦикла; ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); КонецЕсли; @@ -8448,4 +8691,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl index c66f2a530..941118443 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl @@ -19,7 +19,8 @@ // См. ОбщегоНазначения.ЕстьСсылкиНаОбъект // // Параметры: -// СсылкаИлиМассивСсылок - ЛюбаяСсылка, Массив - объект или список объектов. +// СсылкаИлиМассивСсылок - ЛюбаяСсылка +// - Массив - объект или список объектов. // ИскатьСредиСлужебныхОбъектов - Булево - если Истина, то не будут учитываться // исключения поиска ссылок, заданные при разработке конфигурации. // Про исключение поиска ссылок подробнее @@ -56,10 +57,10 @@ // См. ОбщегоНазначения.ПровестиДокументы // // Параметры: -// Документы - См. ОбщегоНазначения.ПровестиДокументы.Документы +// Документы - см. ОбщегоНазначения.ПровестиДокументы.Документы // // Возвращаемое значение: -// См. ОбщегоНазначения.ПровестиДокументы +// см. ОбщегоНазначения.ПровестиДокументы // Функция ПровестиДокументы(Документы) Экспорт @@ -115,7 +116,7 @@ // // Параметры: // НесколькоНастроек - Массив - со значениями: -// * Значение - Структура - со свойствами: +// * Значение - Структура: // * Объект - Строка - см. параметр КлючОбъекта в синтакс-помощнике платформы. // * Настройка - Строка - см. параметр КлючНастроек в синтакс-помощнике платформы. // * Значение - Произвольный - см. параметр Настройки в синтакс-помощнике платформы. @@ -132,7 +133,7 @@ // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, // которая превышает 96 символов. -// Кроме того, возвращает указанное значение по умолчанию, если настройки не найдены. +// Кроме того, возвращает указанное значение по умолчанию, если настройки не существуют. // Если нет права СохранениеДанныхПользователя, возвращается значение по умолчанию без ошибки. // // В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно @@ -146,7 +147,7 @@ // Параметры: // КлючОбъекта - Строка - см. синтакс-помощник платформы. // КлючНастроек - Строка - см. синтакс-помощник платформы. -// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не найдены. +// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не существуют. // Если не указано, возвращается значение Неопределено. // ОписаниеНастроек - ОписаниеНастроек - см. синтакс-помощник платформы. // ИмяПользователя - Строка - см. синтакс-помощник платформы. @@ -176,9 +177,12 @@ // См. ОбщегоНазначения.ХранилищеОбщихНастроекУдалить // // Параметры: -// КлючОбъекта - Строка, Неопределено - см. синтакс-помощник платформы. -// КлючНастроек - Строка, Неопределено - см. синтакс-помощник платформы. -// ИмяПользователя - Строка, Неопределено - см. синтакс-помощник платформы. +// КлючОбъекта - Строка +// - Неопределено - см. синтакс-помощник платформы. +// КлючНастроек - Строка +// - Неопределено - см. синтакс-помощник платформы. +// ИмяПользователя - Строка +// - Неопределено - см. синтакс-помощник платформы. // Процедура ХранилищеОбщихНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт @@ -219,7 +223,7 @@ // Загружает настройку из хранилища системных настроек, как метод платформы Загрузить, // объекта СтандартноеХранилищеНастроекМенеджер, но с поддержкой длины ключа настроек // более 128 символов путем хеширования части, которая превышает 96 символов. -// Кроме того, возвращает указанное значение по умолчанию, если настройки не найдены. +// Кроме того, возвращает указанное значение по умолчанию, если настройки не существуют. // Если нет права СохранениеДанныхПользователя, возвращается значение по умолчанию без ошибки. // // В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно: @@ -233,7 +237,7 @@ // Параметры: // КлючОбъекта - Строка - см. синтакс-помощник платформы. // КлючНастроек - Строка - см. синтакс-помощник платформы. -// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не найдены. +// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не существуют. // Если не указано, возвращается значение Неопределено. // ОписаниеНастроек - ОписаниеНастроек - см. синтакс-помощник платформы. // ИмяПользователя - Строка - см. синтакс-помощник платформы. @@ -262,9 +266,12 @@ // См. ОбщегоНазначения.ХранилищеСистемныхНастроекУдалить // // Параметры: -// КлючОбъекта - Строка, Неопределено - см. синтакс-помощник платформы. -// КлючНастроек - Строка, Неопределено - см. синтакс-помощник платформы. -// ИмяПользователя - Строка, Неопределено - см. синтакс-помощник платформы. +// КлючОбъекта - Строка +// - Неопределено - см. синтакс-помощник платформы. +// КлючНастроек - Строка +// - Неопределено - см. синтакс-помощник платформы. +// ИмяПользователя - Строка +// - Неопределено - см. синтакс-помощник платформы. // Процедура ХранилищеСистемныхНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт @@ -307,7 +314,7 @@ // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, // которая превышает 96 символов. -// Кроме того, возвращает указанное значение по умолчанию, если настройки не найдены. +// Кроме того, возвращает указанное значение по умолчанию, если настройки не существуют. // Если нет права СохранениеДанныхПользователя, возвращается значение по умолчанию без ошибки. // // В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно @@ -321,7 +328,7 @@ // Параметры: // КлючОбъекта - Строка - см. синтакс-помощник платформы. // КлючНастроек - Строка - см. синтакс-помощник платформы. -// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не найдены. +// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не существуют. // Если не указано, возвращается значение Неопределено. // ОписаниеНастроек - ОписаниеНастроек - см. синтакс-помощник платформы. // ИмяПользователя - Строка - см. синтакс-помощник платформы. @@ -351,9 +358,12 @@ // См. ОбщегоНазначения.ХранилищеНастроекДанныхФормУдалить // // Параметры: -// КлючОбъекта - Строка, Неопределено - см. синтакс-помощник платформы. -// КлючНастроек - Строка, Неопределено - см. синтакс-помощник платформы. -// ИмяПользователя - Строка, Неопределено - см. синтакс-помощник платформы. +// КлючОбъекта - Строка +// - Неопределено - см. синтакс-помощник платформы. +// КлючНастроек - Строка +// - Неопределено - см. синтакс-помощник платформы. +// ИмяПользователя - Строка +// - Неопределено - см. синтакс-помощник платформы. // Процедура ХранилищеНастроекДанныхФормУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index f543ac573..8590ec61a 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -206,7 +206,7 @@ Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не найден.'"), + НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя); КонецЕсли; @@ -431,17 +431,23 @@ // См. ОбщегоНазначения.СкопироватьРекурсивно // // Параметры: -// Источник - Структура, ФиксированнаяСтруктура, -// Соответствие, ФиксированноеСоответствие, -// Массив, ФиксированныйМассив, -// СписокЗначений - объект, который необходимо скопировать. -// ФиксироватьДанные - Булево, Неопределено - если Истина - фиксировать, +// Источник - Структура +// - ФиксированнаяСтруктура +// - Соответствие +// - ФиксированноеСоответствие +// - Массив +// - ФиксированныйМассив +// - СписокЗначений - объект, который необходимо скопировать. +// ФиксироватьДанные - Булево +// - Неопределено - если Истина - фиксировать, // если Ложь - снять фиксацию, если Неопределено - не изменять. // // Возвращаемое значение: // Структура - , ФиксированнаяСтруктура, -// Соответствие, ФиксированноеСоответствие, -// Массив, ФиксированныйМассив, +// Соответствие +// ФиксированноеСоответствие +// Массив +// ФиксированныйМассив // СписокЗначений - копия объекта, переданного в параметре Источник. // Функция СкопироватьРекурсивно(Источник, ФиксироватьДанные = Неопределено) Экспорт @@ -476,7 +482,8 @@ // Для использования в командах, работающих с элементами динамических списков в формах. // // Параметры: -// Параметр - Массив, ЛюбаяСсылка - параметр команды. +// Параметр - Массив +// - ЛюбаяСсылка - параметр команды. // ОжидаемыйТип - Тип - ожидаемый тип параметра. // // Возвращаемое значение: @@ -489,6 +496,7 @@ // Возврат; // КонецЕсли; // ... +// Функция ПроверитьТипПараметраКоманды(Знач Параметр, Знач ОжидаемыйТип) Экспорт Если Параметр = Неопределено Тогда @@ -663,11 +671,11 @@ // Оповещает открытые формы и динамические списки об изменении одного объекта. // // Параметры: -// Источник - ЛюбаяСсылка, -// РегистрСведенийКлючЗаписи, -// РегистрНакопленияКлючЗаписи, -// РегистрБухгалтерииКлючЗаписи, -// РегистрРасчетаКлючЗаписи - ссылка измененного объекта или ключ измененной записи регистра, об изменении +// Источник - ЛюбаяСсылка +// - РегистрСведенийКлючЗаписи +// - РегистрНакопленияКлючЗаписи +// - РегистрБухгалтерииКлючЗаписи +// - РегистрРасчетаКлючЗаписи - ссылка измененного объекта или ключ измененной записи регистра, об изменении // которой(го) необходимо уведомить динамические списки и формы. // ДополнительныеПараметры - Произвольный - любые параметры, которые необходимо передать в методе Оповестить. // @@ -682,8 +690,9 @@ // Оповещает открытые формы и динамические списки об изменении сразу нескольких объектов. // // Параметры: -// Источник - Тип, ОписаниеТипов - тип или типы объектов, об изменении которых необходимо уведомить -// динамические списки и формы; +// Источник - Тип +// - ОписаниеТипов - тип или типы объектов, об изменении которых необходимо уведомить +// динамические списки и формы; // - Массив - список измененных ссылок и/или ключей записей регистров, об изменении // которых необходимо уведомить динамические списки и формы. // ДополнительныеПараметры - Произвольный - любые параметры, которые необходимо передать в методе Оповестить. @@ -820,7 +829,7 @@ // Сохраняет персональные настройки пользователя. // // Параметры: -// Настройки - Структура - коллекция настроек: +// Настройки - Структура: // * НапоминатьОбУстановкеРасширенияРаботыСФайлами - Булево - признак необходимости // напоминания об установке расширения. // * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - запрашивать подтверждение по завершении работы. @@ -889,7 +898,7 @@ // Возвращает структуру параметров для см. процедуру ПодключитьКомпонентуИзМакета. // // Возвращаемое значение: -// Структура - коллекция параметров: +// Структура: // * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте. // * ПредложитьУстановить - Булево - (по умолчанию Истина) предлагать устанавливать и обновлять компоненту. // * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. @@ -931,7 +940,8 @@ // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. // Идентификатор - Строка - идентификатор объекта внешней компоненты. // ПолноеИмяМакета - Строка - полное имя макета, используемое как местоположение компоненты. -// ПараметрыПодключения - Структура, Неопределено - см. функцию ПараметрыПодключенияКомпоненты. +// ПараметрыПодключения - Структура +// - Неопределено - см. функцию ПараметрыПодключенияКомпоненты. // // Пример: // @@ -991,7 +1001,7 @@ // Возвращает структуру параметров для см. процедуру УстановитьКомпонентуИзМакета. // // Возвращаемое значение: -// Структура - коллекция параметров: +// Структура: // * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать. // // Пример: @@ -1019,7 +1029,8 @@ // ** ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. // ПолноеИмяМакета - Строка - полное имя макета, используемое как местоположение компоненты. -// ПараметрыУстановки - Структура, Неопределено - см. функцию ПараметрыУстановкиКомпоненты. +// ПараметрыУстановки - Структура +// - Неопределено - см. функцию ПараметрыУстановкиКомпоненты. // // Пример: // @@ -1120,8 +1131,9 @@ // Параметры - см. ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения // // Возвращаемое значение: -// Структура - информация о соединении: -// * Соединение - COMОбъект, Неопределено - COM-объект соединения или Неопределено в случае ошибки; +// Структура: +// * Соединение - COMОбъект +// - Неопределено - COM-объект соединения или Неопределено в случае ошибки; // * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; // * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; // * ОшибкаПодключенияКомпоненты - Булево - флаг ошибки подключения COM. @@ -1168,11 +1180,11 @@ // Устарела. Следует использовать: // ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку при передачи ссылки на сайт или навигационной ссылки. -// ФайловаяСистемаКлиент.ОткрытьПроводник для открытия проводника при передачи пути к папке или файлу. +// ФайловаяСистемаКлиент.ОткрытьПроводник для открытия каталога в проводнике. // ФайловаяСистемаКлиент.ОткрытьФайл для открытия файла по расширению при передачи пути к файлу. // // Выполняет переход по ссылке на объект информационной базы или внешний объект. -// (например, ссылка на сайт или путь к папке). +// (например, ссылка на сайт или путь каталога на компьютере). // // Параметры: // Ссылка - Строка - ссылка для перехода. @@ -1217,6 +1229,7 @@ // // код печати документа, который работает без подключенного расширения. // // ... // КонецЕсли; +// Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами( ОписаниеОповещенияОЗакрытии, ТекстПредложения = "", @@ -1257,6 +1270,7 @@ // Процедура ПечатьДокументаЗавершение(Результат, ДополнительныеПараметры) Экспорт // // код печати документа, рассчитывающий на то, что расширение подключено. // // ... +// Процедура ПроверитьРасширениеРаботыСФайламиПодключено(ОписаниеОповещенияОЗакрытии, Знач ТекстПредложения = "", Знач ТекстПредупреждения = "") Экспорт @@ -1364,7 +1378,7 @@ // Получение имени временного каталога. // // Параметры: -// Оповещение - ОписаниеОповещения - оповещение о результате получения. +// Оповещение - ОписаниеОповещения - оповещение о результате получения: // * ИмяКаталога - Строка - путь к созданному каталогу. // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. // Расширение - Строка - суффикс в имени каталога, который поможет идентифицировать каталог при анализе. diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl index db8f16c80..b8b2031ba 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -12,15 +12,15 @@ // Соответствует обработчику ПередНачаломРаботыСистемы. // // Параметры: -// Параметры - Структура - структура со свойствами: -// * Отказ - Булево - Возвращаемое значение. Если установить Истина, то работа программы будет прекращена. -// * Перезапустить - Булево - Возвращаемое значение. Если установить Истина, и параметр Отказ тоже установлен +// Параметры - Структура: +// * Отказ - Булево - возвращаемое значение. Если установить Истина, то работа программы будет прекращена. +// * Перезапустить - Булево - возвращаемое значение. Если установить Истина, и параметр Отказ тоже установлен // в Истина, то выполняется перезапуск программы. // -// * ДополнительныеПараметрыКоманднойСтроки - Строка - Возвращаемое значение. Имеет смысл, когда Отказ +// * ДополнительныеПараметрыКоманднойСтроки - Строка - возвращаемое значение. Имеет смысл, когда Отказ // и Перезапустить установлены Истина. // -// * ИнтерактивнаяОбработка - ОписаниеОповещения - Возвращаемое значение. Для открытия окна, блокирующего вход в +// * ИнтерактивнаяОбработка - ОписаниеОповещения - возвращаемое значение. Для открытия окна, блокирующего вход в // программу, следует присвоить в этот параметр описание обработчика // оповещения, который открывает окно. Смотри пример ниже. // @@ -62,15 +62,15 @@ // Соответствует обработчику ПриНачалеРаботыСистемы. // // Параметры: -// Параметры - Структура - структура со свойствами: -// * Отказ - Булево - Возвращаемое значение. Если установить Истина, то работа программы будет прекращена. -// * Перезапустить - Булево - Возвращаемое значение. Если установить Истина и параметр Отказ тоже установлен +// Параметры - Структура: +// * Отказ - Булево - возвращаемое значение. Если установить Истина, то работа программы будет прекращена. +// * Перезапустить - Булево - возвращаемое значение. Если установить Истина и параметр Отказ тоже установлен // в Истина, то выполняется перезапуск программы. // -// * ДополнительныеПараметрыКоманднойСтроки - Строка - Возвращаемое значение. Имеет смысл +// * ДополнительныеПараметрыКоманднойСтроки - Строка - возвращаемое значение. Имеет смысл // когда Отказ и Перезапустить установлены Истина. // -// * ИнтерактивнаяОбработка - ОписаниеОповещения - Возвращаемое значение. Для открытия окна, блокирующего вход +// * ИнтерактивнаяОбработка - ОписаниеОповещения - возвращаемое значение. Для открытия окна, блокирующего вход // в программу, следует присвоить в этот параметр описание обработчика оповещения, // который открывает окно. См. пример в ПередНачаломРаботыСистемы. // @@ -89,8 +89,6 @@ - - КонецПроцедуры // Вызывается для обработки собственных параметров запуска программы, diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl index a54ad21b8..c1dd89665 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl @@ -11,10 +11,10 @@ // Функция получает цвет стиля по имени элемента стиля. // // Параметры: -// ИмяЦветаСтиля - Строка - Имя элемента стиля. +// ИмяЦветаСтиля - Строка - имя элемента стиля. // // Возвращаемое значение: -// Цвет - . +// Цвет // Функция ЦветСтиля(ИмяЦветаСтиля) Экспорт @@ -25,10 +25,10 @@ // Функция получает шрифт стиля по имени элемента стиля. // // Параметры: -// ИмяШрифтаСтиля - Строка - Имя шрифта стиля. +// ИмяШрифтаСтиля - Строка - имя шрифта стиля. // // Возвращаемое значение: -// Шрифт - . +// Шрифт // Функция ШрифтСтиля(ИмяШрифтаСтиля) Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 6d591f210..2c8f7b820 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -20,14 +20,14 @@ // // Параметры: // Ошибки - Неопределено - создать новый список ошибок. -// - Структура - коллекция ошибок: -// * СписокОшибок - Массив из Структура -: -// ** ПолеОшибки - Строка - -// ** ТекстДляОднойОшибки - Строка - -// ** ГруппаОшибок - Произвольный - -// ** НомерСтроки - Число - -// ** ТекстДляНесколькихОшибок - Строка - -// * ГруппыОшибок - Соответствие - +// - Структура: +// * СписокОшибок - Массив из Структура: +// ** ПолеОшибки - Строка +// ** ТекстДляОднойОшибки - Строка +// ** ГруппаОшибок - Произвольный +// ** НомерСтроки - Число +// ** ТекстДляНесколькихОшибок - Строка +// * ГруппыОшибок - Соответствие // // ПолеОшибки - Строка - значение, которое задается в свойстве Поле объекта СообщениеПользователю. // Для автоподстановки номера строки должна содержать "%1". @@ -130,7 +130,8 @@ // ВидПоля - Строка - может принимать значения: Поле, Колонка, Список. // ВидСообщения - Строка - может принимать значения: Заполнение, Корректность. // ИмяПоля - Строка - имя поля. -// НомерСтроки - Строка, Число - номер строки. +// НомерСтроки - Строка +// - Число - номер строки. // ИмяСписка - Строка - имя списка. // ТекстСообщения - Строка - детальная расшифровка ошибки заполнения. // @@ -214,7 +215,7 @@ // Если режим работы клиент-серверный, то возвращается пустая строка. // // Возвращаемое значение: -// Строка - Полное имя каталога, в котором расположена файловая информационная база. +// Строка - полное имя каталога, в котором расположена файловая информационная база. // Функция КаталогФайловойИнформационнойБазы() Экспорт @@ -252,9 +253,7 @@ Если Не ПустаяСтрока(КонтекстПроверки) Тогда ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 в %2'"), - ТекстИсключения, - КонтекстПроверки); + НСтр("ru = '%1 в %2'"), ТекстИсключения, КонтекстПроверки); КонецЕсли; ВызватьИсключение ТекстИсключения; @@ -275,7 +274,12 @@ // ИмяПроцедурыИлиФункции - Строка - имя процедуры или функции, параметр которой проверяется. // ИмяПараметра - Строка - имя проверяемого параметра процедуры или функции. // ЗначениеПараметра - Произвольный - фактическое значение параметра. -// ОжидаемыеТипы - ОписаниеТипов, Тип, Массив, ФиксированныйМассив, Соответствие, ФиксированноеСоответствие - тип(ы) +// ОжидаемыеТипы - ОписаниеТипов +// - Тип +// - Массив +// - ФиксированныйМассив +// - Соответствие +// - ФиксированноеСоответствие - тип(ы) // параметра процедуры или функции. // ОжидаемыеТипыСвойств - Структура - если ожидаемый тип - структура, то // в этом параметре можно указать типы ее свойств. @@ -284,41 +288,25 @@ Знач ОжидаемыеТипы, Знач ОжидаемыеТипыСвойств = Неопределено) Экспорт Контекст = "ОбщегоНазначенияКлиентСервер.ПроверитьПараметр"; - - Проверить( - ТипЗнч(ИмяПроцедурыИлиФункции) = Тип("Строка"), - НСтр("ru = 'Недопустимое значение параметра ИмяПроцедурыИлиФункции'"), - Контекст); - - Проверить( - ТипЗнч(ИмяПараметра) = Тип("Строка"), - НСтр("ru = 'Недопустимое значение параметра ИмяПараметра'"), - Контекст); + Проверить(ТипЗнч(ИмяПроцедурыИлиФункции) = Тип("Строка"), + НСтр("ru = 'Недопустимое значение параметра ИмяПроцедурыИлиФункции'"), Контекст); + Проверить(ТипЗнч(ИмяПараметра) = Тип("Строка"), + НСтр("ru = 'Недопустимое значение параметра ИмяПараметра'"), Контекст); ЭтоКорректныйТип = ЗначениеОжидаемогоТипа(ЗначениеПараметра, ОжидаемыеТипы); - - Проверить( - ЭтоКорректныйТип <> Неопределено, - НСтр("ru = 'Недопустимое значение параметра ОжидаемыеТипы'"), - Контекст); - - Проверить( - ЭтоКорректныйТип, + Проверить(ЭтоКорректныйТип <> Неопределено, + НСтр("ru = 'Недопустимое значение параметра ОжидаемыеТипы'"), Контекст); + Проверить(ЭтоКорректныйТип, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недопустимое значение параметра %1 в %2. |Ожидалось: %3; передано значение: %4 (тип %5).'"), - ИмяПараметра, - ИмяПроцедурыИлиФункции, - ПредставлениеТипов(ОжидаемыеТипы), - ?(ЗначениеПараметра <> Неопределено, - ЗначениеПараметра, - НСтр("ru = 'Неопределено'")), + ИмяПараметра, ИмяПроцедурыИлиФункции, ПредставлениеТипов(ОжидаемыеТипы), + ?(ЗначениеПараметра <> Неопределено, ЗначениеПараметра, НСтр("ru = 'Неопределено'")), ТипЗнч(ЗначениеПараметра))); Если ТипЗнч(ЗначениеПараметра) = Тип("Структура") И ОжидаемыеТипыСвойств <> Неопределено Тогда - Проверить( - ТипЗнч(ОжидаемыеТипыСвойств) = Тип("Структура"), + Проверить(ТипЗнч(ОжидаемыеТипыСвойств) = Тип("Структура"), НСтр("ru = 'Недопустимое значение параметра ИмяПроцедурыИлиФункции'"), Контекст); @@ -328,30 +316,20 @@ ОжидаемыйТипСвойства = Свойство.Значение; ЗначениеСвойства = Неопределено; - Проверить( - ЗначениеПараметра.Свойство(ОжидаемоеИмяСвойства, ЗначениеСвойства), + Проверить(ЗначениеПараметра.Свойство(ОжидаемоеИмяСвойства, ЗначениеСвойства), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недопустимое значение параметра %1 (Структура) в %2. |В структуре ожидалось свойство %3 (тип %4).'"), - ИмяПараметра, - ИмяПроцедурыИлиФункции, - ОжидаемоеИмяСвойства, - ОжидаемыйТипСвойства)); + ИмяПараметра, ИмяПроцедурыИлиФункции, ОжидаемоеИмяСвойства, ОжидаемыйТипСвойства)); ЭтоКорректныйТип = ЗначениеОжидаемогоТипа(ЗначениеСвойства, ОжидаемыйТипСвойства); - - Проверить( - ЭтоКорректныйТип, + Проверить(ЭтоКорректныйТип, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недопустимое значение свойства %1 в параметре %2 (Структура) в %3. |Ожидалось: %4; передано значение: %5 (тип %6).'"), - ОжидаемоеИмяСвойства, - ИмяПараметра, - ИмяПроцедурыИлиФункции, + ОжидаемоеИмяСвойства, ИмяПараметра, ИмяПроцедурыИлиФункции, ПредставлениеТипов(ОжидаемыеТипы), - ?(ЗначениеСвойства <> Неопределено, - ЗначениеСвойства, - НСтр("ru = 'Неопределено'")), + ?(ЗначениеСвойства <> Неопределено, ЗначениеСвойства, НСтр("ru = 'Неопределено'")), ТипЗнч(ЗначениеСвойства))); КонецЦикла; @@ -363,9 +341,15 @@ // Типы ТаблицаЗначений, ДеревоЗначений, ТабличнаяЧасть не доступны на клиенте. // // Параметры: -// ТаблицаИсточник - ТаблицаЗначений, ДеревоЗначений, ТабличнаяЧасть, ДанныеФормыКоллекция - таблица, из которой будут +// ТаблицаИсточник - ТаблицаЗначений +// - ДеревоЗначений +// - ТабличнаяЧасть +// - ДанныеФормыКоллекция - таблица, из которой будут // браться строки для заполнения; -// ТаблицаПриемник - ТаблицаЗначений, ДеревоЗначений, ТабличнаяЧасть, ДанныеФормыКоллекция - таблица, в которую будут +// ТаблицаПриемник - ТаблицаЗначений +// - ДеревоЗначений +// - ТабличнаяЧасть +// - ДанныеФормыКоллекция - таблица, в которую будут // добавлены строки из таблицы-источника. // Процедура ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник) Экспорт @@ -434,10 +418,11 @@ // Параметры: // Приемник - Структура - коллекция, в которую будут добавляться новые значения. // Источник - Структура - коллекция, из которой будут считываться пары Ключ и Значение для заполнения. -// Заменять - Булево, Неопределено - что делать в местах пересечения ключей источника и приемника: -// Истина - заменять значения приемника (самый быстрый способ), -// Ложь - не заменять значения приемника (пропускать), -// Неопределено - значение по умолчанию. Бросать исключение. +// Заменять - Булево +// - Неопределено - что делать в местах пересечения ключей источника и приемника: +// Истина - заменять значения приемника (самый быстрый способ), +// Ложь - не заменять значения приемника (пропускать), +// Неопределено - значение по умолчанию. Бросать исключение. // Процедура ДополнитьСтруктуру(Приемник, Источник, Заменять = Неопределено) Экспорт @@ -459,10 +444,11 @@ // Параметры: // Приемник - Соответствие - коллекция, в которую будут добавляться новые значения. // Источник - Соответствие - коллекция, из которой будут считываться пары Ключ и Значение для заполнения. -// Заменять - Булево, Неопределено - что делать в местах пересечения ключей источника и приемника: -// Истина - заменять значения приемника (самый быстрый способ), -// Ложь - не заменять значения приемника (пропускать), -// Неопределено - значение по умолчанию. Бросать исключение. +// Заменять - Булево +// - Неопределено - что делать в местах пересечения ключей источника и приемника: +// Истина - заменять значения приемника (самый быстрый способ), +// Ложь - не заменять значения приемника (пропускать), +// Неопределено - значение по умолчанию. Бросать исключение. // Процедура ДополнитьСоответствие(Приемник, Источник, Заменять = Неопределено) Экспорт @@ -606,8 +592,10 @@ // Сравнивает элементы списков значений или массивов по значениям. // // Параметры: -// Список1 - Массив, СписокЗначений - сравниваемая коллекция элементов. -// Список2 - Массив, СписокЗначений - сравниваемая коллекция элементов. +// Список1 - Массив +// - СписокЗначений - сравниваемая коллекция элементов. +// Список2 - Массив +// - СписокЗначений - сравниваемая коллекция элементов. // // Возвращаемое значение: // Булево - Истина, если идентичны. @@ -678,16 +666,17 @@ // Возвращает значение свойства структуры. // // Параметры: -// Структура - Структура, ФиксированнаяСтруктура - Объект, из которого необходимо прочитать значение ключа. -// Ключ - Строка - Имя свойства структуры, для которого необходимо прочитать значение. -// ЗначениеПоУмолчанию - Произвольный - Необязательный. Возвращается когда в структуре нет значения по указанному +// Структура - Структура +// - ФиксированнаяСтруктура - объект, из которого необходимо прочитать значение ключа. +// Ключ - Строка - имя свойства структуры, для которого необходимо прочитать значение. +// ЗначениеПоУмолчанию - Произвольный - необязательный. Возвращается когда в структуре нет значения по указанному // ключу. // Для скорости рекомендуется передавать только быстро вычисляемые значения (например примитивные типы), // а инициализацию более тяжелых значений выполнять после проверки полученного значения (только если это // требуется). // // Возвращаемое значение: -// Произвольный - Значение свойства структуры. ЗначениеПоУмолчанию если в структуре нет указанного свойства. +// Произвольный - значение свойства структуры. ЗначениеПоУмолчанию если в структуре нет указанного свойства. // Функция СвойствоСтруктуры(Структура, Ключ, ЗначениеПоУмолчанию = Неопределено) Экспорт @@ -853,6 +842,7 @@ // Значение - Произвольный - устанавливаемое значение. // ТолькоЕслиНеЗаполнен - Булево - позволяет не устанавливать значение реквизита, // если у него уже установлено какое-то значение. +// Процедура УстановитьРеквизитФормыПоПути(Форма, ПутьРеквизита, Значение, ТолькоЕслиНеЗаполнен = Ложь) Экспорт МассивИмен = СтрРазделить(ПутьРеквизита, "."); @@ -899,7 +889,8 @@ // на объект, реквизит объекта или команду. // // Параметры: -// ЭлементыФормы - ВсеЭлементыФормы, ЭлементыФормы - коллекция элементов управляемой формы. +// ЭлементыФормы - ВсеЭлементыФормы +// - ЭлементыФормы - коллекция элементов управляемой формы. // ИмяЭлемента - Строка - имя элемента формы. // ИмяСвойства - Строка - имя устанавливаемого свойства элемента формы. // Значение - Произвольный - новое значение элемента. @@ -918,7 +909,8 @@ // на объект, реквизит объекта или команду. // // Параметры: -// ЭлементыФормы - ВсеЭлементыФормы, ЭлементыФормы - коллекция элементов управляемой формы. +// ЭлементыФормы - ВсеЭлементыФормы +// - ЭлементыФормы - коллекция элементов управляемой формы. // ИмяЭлемента - Строка - имя элемента формы. // ИмяСвойства - Строка - имя свойства элемента формы. // @@ -964,8 +956,8 @@ // Найти элемент или группу отбора по заданному имени поля или представлению. // // Параметры: -// ОбластьПоиска - ОтборКомпоновкиДанных - -// - КоллекцияЭлементовОтбораКомпоновкиДанных - +// ОбластьПоиска - ОтборКомпоновкиДанных +// - КоллекцияЭлементовОтбораКомпоновкиДанных // - ГруппаЭлементовОтбораКомпоновкиДанных - контейнер с элементами и группами отбора, // например Список.Отбор или группа в отборе. // ИмяПоля - Строка - имя поля компоновки (не используется для групп). @@ -997,8 +989,8 @@ // Добавить группу отбора в коллекцию КоллекцияЭлементов. // // Параметры: -// КоллекцияЭлементов - ОтборКомпоновкиДанных - -// - КоллекцияЭлементовОтбораКомпоновкиДанных - +// КоллекцияЭлементов - ОтборКомпоновкиДанных +// - КоллекцияЭлементовОтбораКомпоновкиДанных // - ГруппаЭлементовОтбораКомпоновкиДанных - контейнер с элементами и группами отбора, // например Список.Отбор или группа в отборе. // Представление - Строка - представление группы. @@ -1251,11 +1243,11 @@ // Использование - Булево - флажок использования этого отбора. // Необязательный. Значение по умолчанию: Неопределено. // РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - способ отображения этого отбора -// пользователю. -// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ - В группе быстрых настроек над списком. -// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный - В настройка списка (в подменю Еще). -// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный - Запретить пользователю менять этот отбор. -// ИдентификаторПользовательскойНастройки - Строка - Уникальный идентификатор этого отбора. +// пользователю: +// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ - в группе быстрых настроек над списком. +// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный - в настройка списка (в подменю Еще). +// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный - запретить пользователю менять этот отбор. +// ИдентификаторПользовательскойНастройки - Строка - уникальный идентификатор этого отбора. // Используется для связи с пользовательскими настройками. // Процедура УстановитьЭлементОтбораДинамическогоСписка(ДинамическийСписок, ИмяПоля, @@ -1398,8 +1390,8 @@ // Раскладывает полное имя файла на составляющие. // // Параметры: -// ПолноеИмяФайла - Строка - полный путь к файлу. -// ЭтоПапка - Булево - признак того, что требуется разложить полное имя папки, а не файла. +// ПолноеИмяФайла - Строка - полный путь к файлу или каталогу. +// ЭтоКаталог - Булево - признак того, что передано имя каталога. // // Возвращаемое значение: // Структура - имя файла, разложенное на составные части(аналогично свойствам объекта Файл): @@ -1420,7 +1412,7 @@ // Расширение: ".txt", // ИмяБезРасширения: "test". // -Функция РазложитьПолноеИмяФайла(Знач ПолноеИмяФайла, ЭтоПапка = Ложь) Экспорт +Функция РазложитьПолноеИмяФайла(Знач ПолноеИмяФайла, ЭтоКаталог = Ложь) Экспорт СтруктураИмениФайла = Новый Структура("ПолноеИмя,Путь,Имя,Расширение,ИмяБезРасширения"); ЗаполнитьЗначенияСвойств(СтруктураИмениФайла, Новый Файл(ПолноеИмяФайла)); @@ -1485,7 +1477,7 @@ // Преобразует расширение файла в нижний регистр без точки. // // Параметры: -// Расширение - Строка - Расширение для преобразования. +// Расширение - Строка - расширение для преобразования. // // Возвращаемое значение: // Строка - преобразованное расширение. @@ -1514,13 +1506,11 @@ // Функция ПолучитьИмяСРасширением(ИмяБезРасширения, Расширение) Экспорт - ИмяСРасширением = ИмяБезРасширения; - - Если Расширение <> "" Тогда - ИмяСРасширением = ИмяСРасширением + "." + Расширение; + Если ПустаяСтрока(Расширение) Тогда + Возврат ИмяБезРасширения; КонецЕсли; - Возврат ИмяСРасширением; + Возврат ИмяБезРасширения + "." + Расширение; КонецФункции @@ -1528,10 +1518,11 @@ // Согласно http://en.wikipedia.org/wiki/Filename - в разделе "Reserved characters and words". // Возвращаемое значение: // Строка - строка недопустимых символов. +// Функция ПолучитьНедопустимыеСимволыВИмениФайла() Экспорт НедопустимыеСимволы = """/\[]:;|=?*<>"; - НедопустимыеСимволы = НедопустимыеСимволы + Символы.Таб; + НедопустимыеСимволы = НедопустимыеСимволы + Символы.Таб + Символы.ПС; Возврат НедопустимыеСимволы; КонецФункции @@ -1544,6 +1535,7 @@ // Возвращаемое значение: // Массив - массив обнаруженных в имени файла недопустимых символов. // Если недопустимых символов не обнаружено - возвращается пустой массив. +// Функция НайтиНедопустимыеСимволыВИмениФайла(ИмяФайла) Экспорт НедопустимыеСимволы = ПолучитьНедопустимыеСимволыВИмениФайла(); @@ -1571,14 +1563,8 @@ // Строка - преобразованное имя файла. // Функция ЗаменитьНедопустимыеСимволыВИмениФайла(Знач ИмяФайла, НаЧтоМенять = " ") Экспорт - - Результат = ИмяФайла; - МассивНайденныхНедопустимыхСимволов = НайтиНедопустимыеСимволыВИмениФайла(Результат); - Для Каждого НедопустимыйСимвол Из МассивНайденныхНедопустимыхСимволов Цикл - Результат = СтрЗаменить(Результат, НедопустимыйСимвол, НаЧтоМенять); - КонецЦикла; - Возврат Результат; + Возврат СокрЛП(СтрСоединить(СтрРазделить(ИмяФайла, ПолучитьНедопустимыеСимволыВИмениФайла(), Истина), НаЧтоМенять)); КонецФункции @@ -1769,7 +1755,7 @@ // ВызыватьИсключение - Булево - необходимо передать Ложь, чтобы в случае неуспешного разбора не выдавалось исключение. // // Возвращаемое значение: -// Структура - результат разбора: +// Структура: // * Статус - Булево - успех или неуспех преобразования. // * Значение - Массив - (параметр доступен, если Статус = Истина) коллекция адресов в виде структур: // ** Адрес - Строка - e-mail получателя. @@ -2132,7 +2118,7 @@ // Текст - Строка - строка, в которой требуется удалить недопустимые символы. // // Возвращаемое значение: -// Строка - Строка, полученная при удалении недопустимых символов в XML-строке. +// Строка - строка, полученная при удалении недопустимых символов в XML-строке. // Функция УдалитьНедопустимыеСимволыXML(Знач Текст) Экспорт @@ -2180,6 +2166,37 @@ КонецПроцедуры +// Рассчитывает показатели числовых ячеек в табличном документе. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент - документ, числовые показатели которого рассчитываются. +// ПолеТабличногоДокумента - ПолеФормы +// - ПолеТабличногоДокумента - элемент формы, +// данными которого является параметр ТабличныйДокумент. +// +// Возвращаемое значение: +// Структура - результаты расчета выделенных ячеек: +// * Количество - Число - количество выделенных ячеек. +// * КоличествоЧисловых - Число - количество числовых ячеек. +// * Сумма - Число - сумма выделенных ячеек с числами. +// * Среднее - Число - сумма выделенных ячеек с числами. +// * Минимум - Число - сумма выделенных ячеек с числами. +// * Максимум - Число - максимум выделенных ячеек с числами. +// +Функция РасчетныеПоказателиЯчеек(Знач ТабличныйДокумент, Знач ПолеТабличногоДокумента) Экспорт + + ПараметрыРасчета = ОбщегоНазначенияСлужебныйКлиентСервер.ПараметрыРасчетаПоказателейЯчеек(ПолеТабличногоДокумента); + + Если ПараметрыРасчета.РассчитатьНаСервере Тогда + Возврат СтандартныеПодсистемыВызовСервера.РасчетныеПоказателиЯчеек( + ТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти); + КонецЕсли; + + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек( + ТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти); + +КонецФункции + #КонецОбласти #Область РегламентныеЗадания @@ -2339,11 +2356,13 @@ // Создает объект описания защищенного соединения OpenSSL. // Параметры: -// СертификатКлиента - СертификатКлиентаФайл, СертификатКлиентаWindows, Неопределено - см. ЗащищенноеСоединениеOpenSSL -// СертификатыУдостоверяющихЦентров - СертификатыУдостоверяющихЦентровФайл - -// - СертификатыУдостоверяющихЦентровWindows - -// - СертификатыУдостоверяющихЦентровLinux - -// - СертификатыУдостоверяющихЦентровОС - +// СертификатКлиента - СертификатКлиентаФайл +// - СертификатКлиентаWindows +// - Неопределено - см. ЗащищенноеСоединениеOpenSSL +// СертификатыУдостоверяющихЦентров - СертификатыУдостоверяющихЦентровФайл +// - СертификатыУдостоверяющихЦентровWindows +// - СертификатыУдостоверяющихЦентровLinux +// - СертификатыУдостоверяющихЦентровОС // - Неопределено - см. ЗащищенноеСоединениеOpenSSL // // Возвращаемое значение: @@ -2368,13 +2387,13 @@ // Возвращает строковое представление типа используемого устройства. // // Возвращаемое значение: -// Строка - Тип используемого устройства. +// Строка - тип используемого устройства. // Функция ТипУстройства() Экспорт ИнформацияЭкрана = ПараметрыЭкранаУстройства(); - DPI = ИнформацияЭкрана.DPI; + DPI = ИнформацияЭкрана.DPI; // АПК:1353 - не требуется перевод на русский язык. Высота = ИнформацияЭкрана.Высота; Ширина = ИнформацияЭкрана.Ширина; @@ -2394,11 +2413,11 @@ // Возвращает параметры экрана используемого устройства. // // Возвращаемое значение: -// Структура - со свойствами: -// * Ширина - Число - Ширина экрана в пикселях. -// * Высота - Число - Высота экрана в пикселях. -// * DPI - Число - Плотность пикселей экрана. -// * Портрет - Булево - Если экран в портретной ориентации, тогда Истина, иначе - Ложь. +// Структура: +// * Ширина - Число - ширина экрана в пикселях. +// * Высота - Число - высота экрана в пикселях. +// * DPI - Число - плотность пикселей экрана. +// * Портрет - Булево - если экран в портретной ориентации, тогда Истина, иначе - Ложь. // Функция ПараметрыЭкранаУстройства() Экспорт @@ -2625,7 +2644,11 @@ // (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. // // Параметры: -// Источник - Структура, Соответствие, Массив, СписокЗначений, ТаблицаЗначений - объект, который необходимо +// Источник - Структура +// - Соответствие +// - Массив +// - СписокЗначений +// - ТаблицаЗначений - объект, который необходимо // скопировать. // // Возвращаемое значение: @@ -2783,15 +2806,15 @@ // Свойства см. в функции // ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения): // -// * ВариантРаботыИнформационнойБазы - Число - Вариант работы информационной базы: 0 - файловый; 1 - +// * ВариантРаботыИнформационнойБазы - Число - вариант работы информационной базы: 0 - файловый; 1 - // клиент-серверный; -// * КаталогИнформационнойБазы - Строка - Каталог информационной базы для файлового режима работы; -// * ИмяСервера1СПредприятия - Строка - Имя сервера1С:Предприятия; -// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - Имя информационной базы на сервере1С:Предприятия; -// * АутентификацияОперационнойСистемы - Булево - Признак аутентификации операционной системы при создании +// * КаталогИнформационнойБазы - Строка - каталог информационной базы для файлового режима работы; +// * ИмяСервера1СПредприятия - Строка - имя сервера1С:Предприятия; +// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - имя информационной базы на сервере1С:Предприятия; +// * АутентификацияОперационнойСистемы - Булево - признак аутентификации операционной системы при создании // внешнего подключения к информационной базе; -// * ИмяПользователя - Строка - Имя пользователя информационной базы; -// * ПарольПользователя - Строка - Пароль пользователя информационной базы. +// * ИмяПользователя - Строка - имя пользователя информационной базы; +// * ПарольПользователя - Строка - пароль пользователя информационной базы. // // СтрокаСообщенияОбОшибке - Строка - если в процессе установки внешнего соединения возникает ошибка, // то подробное описание ошибки помещается в этот параметр. @@ -2819,19 +2842,20 @@ // Свойства см. в функции // ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения): // -// * ВариантРаботыИнформационнойБазы - Число - Вариант работы информационной базы: 0 - файловый; 1 - +// * ВариантРаботыИнформационнойБазы - Число - вариант работы информационной базы: 0 - файловый; 1 - // клиент-серверный; -// * КаталогИнформационнойБазы - Строка - Каталог информационной базы для файлового режима работы; -// * ИмяСервера1СПредприятия - Строка - Имя сервера1С:Предприятия; -// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - Имя информационной базы на сервере1С:Предприятия; -// * АутентификацияОперационнойСистемы - Булево - Признак аутентификации операционной системы при создании +// * КаталогИнформационнойБазы - Строка - каталог информационной базы для файлового режима работы; +// * ИмяСервера1СПредприятия - Строка - имя сервера1С:Предприятия; +// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - имя информационной базы на сервере1С:Предприятия; +// * АутентификацияОперационнойСистемы - Булево - признак аутентификации операционной системы при создании // внешнего подключения к информационной базе; -// * ИмяПользователя - Строка - Имя пользователя информационной базы; -// * ПарольПользователя - Строка - Пароль пользователя информационной базы. +// * ИмяПользователя - Строка - имя пользователя информационной базы; +// * ПарольПользователя - Строка - пароль пользователя информационной базы. // // Возвращаемое значение: -// Структура - информация о соединении: -// * Соединение - COMОбъект, Неопределено - указатель на COM-объект соединения или Неопределено в +// Структура: +// * Соединение - COMОбъект +// - Неопределено - указатель на COM-объект соединения или Неопределено в // случае ошибки; // * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; // * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; @@ -3157,6 +3181,7 @@ // // Возвращаемое значение: // Булево - Истина, если включен режим отладки. +// Функция РежимОтладки() Экспорт #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -3224,7 +3249,7 @@ // ОбновитьПовторноИспользуемыеЗначения(), который сбросит кэш ПовтИсп в текущем сеансе. // // Параметры: -// ПолноеИмяПредопределенного - Строка - Полный путь к предопределенному элементу, включая его имя. +// ПолноеИмяПредопределенного - Строка - полный путь к предопределенному элементу, включая его имя. // Формат аналогичен функции глобального контекста ПредопределенноеЗначение(). // Например: // "Справочник.ВидыКонтактнойИнформации.EmailПользователя" @@ -3294,8 +3319,8 @@ // Возвращает структуру параметров для см. процедуру ЗапуститьПрограмму. // // Возвращаемое значение: -// Структура -: -// * ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. +// Структура: +// * ТекущийКаталог - Строка - задает текущий каталог запускаемого приложения. // * ДождатьсяЗавершения - Булево - дожидаться завершения запущенного приложения перед продолжением работы. // * ПолучитьПотокВывода - Булево - результат, направленный в поток stdout, // если не указан ДождатьсяЗавершения - игнорируется. @@ -3307,7 +3332,7 @@ // - интерактивным запросом c GUI sudo и перенаправлением // $DISPLAY и $XAUTHORITY текущего пользователя для Linux; // Не совместим с параметром ДождатьсяЗавершения. В MacOS игнорируется. -// * Кодировка - Строка - Код кодировки, устанавливаемый до выполнения пакетной операции. +// * Кодировка - Строка - код кодировки, устанавливаемый до выполнения пакетной операции. // В Linux и macOS игнорируется. // Функция ПараметрыЗапускаПрограммы() Экспорт @@ -3329,13 +3354,14 @@ // Не доступно в веб-клиенте. // // Параметры: -// КомандаЗапуска - Строка, Массив - Командная строка для запуска программы. +// КомандаЗапуска - Строка +// - Массив - командная строка для запуска программы. // Если Массив, то: первый элемент массива - путь к исполняемому приложению, остальные - передаваемые параметры, // массив соответствует тому, который получит вызываемая программа в argv. // ПараметрыЗапускаПрограммы - см. ПараметрыЗапускаПрограммы // // Возвращаемое значение: -// Структура - Результат работы программы. +// Структура - результат работы программы: // КодВозврата - Число - код возврата программы. // ПотокВывода - Строка - результат работы программы, направленный в поток stdout. // ПотокОшибок - Строка - ошибки исполнения программы, направленные в поток stderr. @@ -3569,7 +3595,7 @@ // URL - Строка - адрес URL ресурса, диагностику которого надо выполнить. // // Возвращаемое значение: -// Структура - Результат работы программы. +// Структура - результат работы программы: // ОписаниеОшибки - Строка - краткое описание ошибки. // ЖурналДиагностики - Строка - подробный журнал диагностики с техническими подробностями. // @@ -3900,6 +3926,7 @@ // Проверяет, что почтовый адрес не содержит символов обрамления // если символы обрамления вставлены правильно убирает их. +// Функция ПроверитьИПодготовитьПочтовыйАдрес(Знач ПолноеИмяАдресата, Знач ПочтовыйАдрес) НедопустимыйСимволВИмениАдресата = НСтр("ru = 'Недопустимый символ в имени адресата.'"); diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl index 12c4c6b36..3820417a5 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl @@ -11,7 +11,7 @@ // Позволяет настроить общие параметры подсистемы. // // Параметры: -// ОбщиеПараметры - Структура - структура со свойствами: +// ОбщиеПараметры - Структура: // * ИмяФормыПерсональныхНастроек - Строка - имя формы для редактирования персональных настроек. // Ранее определялись в // ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек. @@ -69,7 +69,7 @@ //КонецПроцедуры // // Параметры: -// Обработчики - Соответствие - со свойствами: +// Обработчики - Соответствие: // * Ключ - Строка - в формате "<ИмяПараметраСеанса>|<НачалоИмениПараметраСеанса*>". // Символ '*'используется в конце имени параметра сеанса и обозначает, // что один обработчик будет вызван для инициализации всех параметров сеанса @@ -161,6 +161,52 @@ +КонецПроцедуры + +// Позволяет задать список подчиненных объектов и их связи с основными объектами +// Подчиненные объекты рекомендуется использовать, если в процессе замены ссылок +// нужно создавать часть объектов или подбирать замену из существующих объектов +// +// Параметры: +// ПодчиненныеОбъекты - см. ОбщегоНазначения.ПодчиненныеОбъекты +// +// Пример: +// СвязиПодчиненногоОбъекта = Новый Соответствие; +// СвязиПодчиненногоОбъекта.Вставить("ПолеСвязи"); +// ПодчиненныйОбъект = ПодчиненныеОбъекты.Добавить(); +// ПодчиненныйОбъект.ПодчиненныйОбъект = Метаданные.Справочники.<ПодчиненныйСправочник>; +// ПодчиненныйОбъект.ПоляСвязей = СвязиПодчиненногоОбъекта; +// ПодчиненныйОбъект.ВыполнятьАвтоматическийПоискЗаменСсылок = Истина; +// +// СвязиПодчиненногоОбъекта = Новый Массив; +// СвязиПодчиненногоОбъекта.Вставить("ПолеСвязи"); +// ПодчиненныйОбъект = ПодчиненныеОбъекты.Добавить(); +// ПодчиненныйОбъект.ПодчиненныйОбъект = Метаданные.Справочники.<ПодчиненныйСправочник>; +// ПодчиненныйОбъект.ПоляСвязей = СвязиПодчиненногоОбъекта; +// ПодчиненныйОбъект.ВыполнятьАвтоматическийПоискЗаменСсылок = Истина; +// +// ПодчиненныйОбъект = ПодчиненныеОбъекты.Добавить(); +// ПодчиненныйОбъект.ПодчиненныйОбъект = Метаданные.Справочники.<ПодчиненныйСправочник>; +// ПодчиненныйОбъект.ПоляСвязей = "ПолеСвязи"; +// ПодчиненныйОбъект.ПриПоискеЗаменыСсылок = "<ОбщийМодуль>"; +// +Процедура ПриОпределенииПодчиненныхОбъектов(ПодчиненныеОбъекты) Экспорт + + + +КонецПроцедуры + +// Выполняется после замены ссылок перед непосредственным удалением объектов. +// +// Параметры: +// Результат - см. ОбщегоНазначения.ЗаменитьСсылки +// ПараметрыВыполнения - см. ОбщегоНазначения.ПараметрыЗаменыСсылок +// ТаблицаПоиска - см. ОбщегоНазначения.МестаИспользования +// +Процедура ПослеЗаменыСсылок(Результат, ПараметрыВыполнения, ТаблицаПоиска) Экспорт + + + КонецПроцедуры // Вызывается при обновлении информационной базы для учета переименований подсистем и ролей в конфигурации. diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl index f7ca530fd..e9f80d048 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl @@ -48,14 +48,14 @@ #Область ВнешниеКомпоненты // Параметры: -// Контекст - Структура - контекст процедуры: -// * Оповещение - ОписаниеОповещения - . -// * Идентификатор - Строка - . -// * Местоположение - Строка - . -// * Кэшировать - Булево - . -// * ПредложитьУстановить - Булево - . -// * ТекстПояснения - Строка - . -// * ИдентификаторыСозданияОбъектов - - . +// Контекст - Структура: +// * Оповещение - ОписаниеОповещения +// * Идентификатор - Строка +// * Местоположение - Строка +// * Кэшировать - Булево +// * ПредложитьУстановить - Булево +// * ТекстПояснения - Строка +// * ИдентификаторыСозданияОбъектов // Процедура ПодключитьКомпоненту(Контекст) Экспорт @@ -146,10 +146,10 @@ КонецПроцедуры // Параметры: -// Контекст - Структура - контекст процедуры: -// * Оповещение - ОписаниеОповещения - . -// * Местоположение - Строка - . -// * ТекстПояснения - Строка - . +// Контекст - Структура: +// * Оповещение - ОписаниеОповещения +// * Местоположение - Строка +// * ТекстПояснения - Строка // Процедура УстановитьКомпоненту(Контекст) Экспорт @@ -219,21 +219,15 @@ Элементы = Форма.Элементы; ТабличныйДокумент = Форма[ИмяТабличногоДокумента]; + ПолеТабличногоДокумента = Элементы[ИмяТабличногоДокумента]; Если Не ЗначениеЗаполнено(ТекущаяКоманда) Тогда ТекущаяКоманда = ТекущаяКомандаРасчетаПоказателей(Элементы); КонецЕсли; // Расчет показателей. - ПараметрыРасчета = ПараметрыРасчетаПоказателейЯчеек(Элементы[ИмяТабличногоДокумента]); - - Если ПараметрыРасчета.РассчитатьНаСервере Тогда - РасчетныеПоказатели = СтандартныеПодсистемыВызовСервера.РасчетныеПоказателиЯчеек( - ТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти); - Иначе - РасчетныеПоказатели = ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек( - ТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти); - КонецЕсли; + РасчетныеПоказатели = ОбщегоНазначенияКлиентСервер.РасчетныеПоказателиЯчеек( + ТабличныйДокумент, ПолеТабличногоДокумента); // Установка значений показателей. ЗаполнитьЗначенияСвойств(Форма, РасчетныеПоказатели); @@ -268,7 +262,7 @@ // Управляет признаком видимости панели расчетных показателей. // // Параметры: -// Видимость - Булево - Признак включения / выключения видимости панели показателей. +// Видимость - Булево - признак включения / выключения видимости панели показателей. // См. также Синтакс-помощник: ГруппаФормы.Видимость. // Процедура УстановитьВидимостьПанелиПоказателей(ЭлементыФормы, Видимость = Ложь) Экспорт @@ -570,6 +564,12 @@ КонецПроцедуры // Продолжение процедуры ПодключитьКомпоненту. +// +// Параметры: +// ИнформацияОбОшибке- ИнформацияОбОшибке +// СтандартнаяОбработка - Булево +// Контекст - см. ПодключитьКомпоненту.Контекст +// Процедура ПодключитьКомпонентуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; @@ -712,6 +712,12 @@ КонецПроцедуры // Продолжение процедуры УстановитьКомпоненту. +// +// Параметры: +// ИнформацияОбОшибке - ИнформацияОбОшибке +// СтандартнаяОбработка - Булево +// Контекст - см. ПодключитьКомпоненту.Контекст +// Процедура УстановитьКомпонентуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; @@ -996,61 +1002,6 @@ КонецФункции -// Формирует описание выделенных областей табличного документа. -// -// Параметры: -// ПолеДокумента - ПолеФормы, ПолеТабличногоДокумента - документ, значения ячеек которого участвуют в расчете. -// -// Возвращаемое значение: -// Структура - содержит: -// * ВыделенныеОбласти - Массив - содержит структуры со свойствами: -// * Верх - Число - Номер строки верхней границы области. -// * Низ - Число - Номер строки нижней границы области. -// * Лево - Число - Номер колонки верхней границы области. -// * Право - Число - Номер колонки нижней границы области. -// * ТипОбласти - ТипОбластиЯчеекТабличногоДокумента - Колонки, Прямоугольник, Строки, Таблица. -// * РассчитатьНаСервере - Булево - признак того, что расчет должен выполняться на сервере. -// -Функция ПараметрыРасчетаПоказателейЯчеек(ПолеДокумента) - - ПараметрыРасчетаПоказателей = Новый Структура; - ПараметрыРасчетаПоказателей.Вставить("ВыделенныеОбласти", Новый Массив); - ПараметрыРасчетаПоказателей.Вставить("РассчитатьНаСервере", Ложь); - - ВыделенныеОбласти = ПараметрыРасчетаПоказателей.ВыделенныеОбласти; - ВыделенныеОбластиДокумента = ПолеДокумента.ПолучитьВыделенныеОбласти(); - - Для Каждого ВыделеннаяОбласть Из ВыделенныеОбластиДокумента Цикл - - Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда - Продолжить; - КонецЕсли; - - ГраницыОбласти = Новый Структура("Верх, Низ, Лево, Право, ТипОбласти"); - ЗаполнитьЗначенияСвойств(ГраницыОбласти, ВыделеннаяОбласть); - ВыделенныеОбласти.Добавить(ГраницыОбласти); - - КонецЦикла; - - ВыделеноВсе = Ложь; - - Если ВыделенныеОбласти.Количество() = 1 Тогда - - ВыделеннаяОбласть = ВыделенныеОбласти[0]; - ВыделеноВсе = Не Булево( - ВыделеннаяОбласть.Верх - + ВыделеннаяОбласть.Низ - + ВыделеннаяОбласть.Лево - + ВыделеннаяОбласть.Право); - - КонецЕсли; - - ПараметрыРасчетаПоказателей.РассчитатьНаСервере = (ВыделеноВсе Или ВыделенныеОбласти.Количество() >= 100); - - Возврат ПараметрыРасчетаПоказателей; - -КонецФункции - Функция ФорматРедактированияПоказателя(ЗначениеПоказателя) ШаблонФорматаРедактирования = "ЧДЦ=%1; ЧРГ=' '; ЧН=0"; diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl index dfd79a1cd..7210f4ce4 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl @@ -74,13 +74,13 @@ // ВыделенныеОбласти - см. также ОбщегоНазначенияСлужебныйКлиент.ПараметрыРасчетаПоказателейЯчеек. // // Возвращаемое значение: -// Структура - результаты расчета выделенных ячеек. -// * Количество - Число - Количество выделенных ячеек. -// * КоличествоЧисловых - Число - Количество числовых ячеек. -// * Сумма - Число - Сумма выделенных ячеек с числами. -// * Среднее - Число - Сумма выделенных ячеек с числами. -// * Минимум - Число - Сумма выделенных ячеек с числами. -// * Максимум - Число - Максимум выделенных ячеек с числами. +// Структура - результаты расчета выделенных ячеек: +// * Количество - Число - количество выделенных ячеек. +// * КоличествоЧисловых - Число - количество числовых ячеек. +// * Сумма - Число - сумма выделенных ячеек с числами. +// * Среднее - Число - сумма выделенных ячеек с числами. +// * Минимум - Число - сумма выделенных ячеек с числами. +// * Максимум - Число - максимум выделенных ячеек с числами. // Функция РасчетныеПоказателиЯчеек(Знач ТабличныйДокумент, ВыделенныеОбласти) Экспорт @@ -325,7 +325,7 @@ Функция ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного) Экспорт Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Предопределенное значение ""%1"" не найдено.'"), ПолноеИмяПредопределенного); + НСтр("ru = 'Предопределенное значение ""%1"" не существует.'"), ПолноеИмяПредопределенного); КонецФункции @@ -618,4 +618,65 @@ #КонецОбласти +#Область ТабличныйДокумент + +// Формирует описание выделенных областей табличного документа. +// +// Параметры: +// ПолеТабличногоДокумента - ПолеФормы +// - ПолеТабличногоДокумента - документ, +// значения ячеек которого участвуют в расчете. +// +// Возвращаемое значение: +// Структура: +// * ВыделенныеОбласти - Массив - содержит структуры со свойствами: +// * Верх - Число - номер строки верхней границы области. +// * Низ - Число - номер строки нижней границы области. +// * Лево - Число - номер колонки верхней границы области. +// * Право - Число - номер колонки нижней границы области. +// * ТипОбласти - ТипОбластиЯчеекТабличногоДокумента - Колонки, Прямоугольник, Строки, Таблица. +// * РассчитатьНаСервере - Булево - признак того, что расчет должен выполняться на сервере. +// +Функция ПараметрыРасчетаПоказателейЯчеек(ПолеТабличногоДокумента) Экспорт + + ПараметрыРасчетаПоказателей = Новый Структура; + ПараметрыРасчетаПоказателей.Вставить("ВыделенныеОбласти", Новый Массив); + ПараметрыРасчетаПоказателей.Вставить("РассчитатьНаСервере", Ложь); + + ВыделенныеОбласти = ПараметрыРасчетаПоказателей.ВыделенныеОбласти; + ВыделенныеОбластиДокумента = ПолеТабличногоДокумента.ПолучитьВыделенныеОбласти(); + + Для Каждого ВыделеннаяОбласть Из ВыделенныеОбластиДокумента Цикл + + Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда + Продолжить; + КонецЕсли; + + ГраницыОбласти = Новый Структура("Верх, Низ, Лево, Право, ТипОбласти"); + ЗаполнитьЗначенияСвойств(ГраницыОбласти, ВыделеннаяОбласть); + ВыделенныеОбласти.Добавить(ГраницыОбласти); + + КонецЦикла; + + ВыделеноВсе = Ложь; + + Если ВыделенныеОбласти.Количество() = 1 Тогда + + ВыделеннаяОбласть = ВыделенныеОбласти[0]; + ВыделеноВсе = Не Булево( + ВыделеннаяОбласть.Верх + + ВыделеннаяОбласть.Низ + + ВыделеннаяОбласть.Лево + + ВыделеннаяОбласть.Право); + + КонецЕсли; + + ПараметрыРасчетаПоказателей.РассчитатьНаСервере = (ВыделеноВсе Или ВыделенныеОбласти.Количество() >= 100); + + Возврат ПараметрыРасчетаПоказателей; + +КонецФункции + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl index a97cdd79d..bcfd1c599 100644 --- a/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl @@ -17,10 +17,10 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// РегистрационныеДанные - Структура - -// см. ОрганизацииСервер.РегистрационныеДанныеОрганизации +// РегистрационныеДанные - см. ОрганизацииСервер.РегистрационныеДанныеОрганизации // Пример: // СведенияОбОрганизации = ОрганизацииСервер.СведенияОбОрганизации(Организация); // @@ -74,6 +74,7 @@ // КонецЦикла; // // КонецЕсли; +// Процедура ПриОпределенииРегистрационныхДанныхОрганизации(Организация, Поля, Дата, РегистрационныеДанные) Экспорт @@ -87,10 +88,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// ДополнительныеСведения - Структура - -// см. ОрганизацииСервер.ДополнительныеСведенияОрганизации. +// ДополнительныеСведения - см. ОрганизацииСервер.ДополнительныеСведенияОрганизации. +// Процедура ПриОпределенииДополнительныхСведенийОрганизации(Организация, Поля, Дата, ДополнительныеСведения) Экспорт @@ -104,10 +106,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// КонтактнаяИнформация - Структура - -// см. ОрганизацииСервер.КонтактнаяИнформацияОрганизации. +// КонтактнаяИнформация - см. ОрганизацииСервер.КонтактнаяИнформацияОрганизации. +// Процедура ПриОпределенииКонтактнойИнформацииОрганизации(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт @@ -120,10 +123,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// БанковскийСчет - Структура - -// см. ОрганизацииСервер.БанковскийСчетОрганизации. +// БанковскийСчет - см. ОрганизацииСервер.БанковскийСчетОрганизации. +// Процедура ПриОпределенииБанковскогоСчетаОрганизации(Организация, Поля, Дата, БанковскийСчет) Экспорт КонецПроцедуры @@ -139,10 +143,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// РегистрационныеДанные - Структура - -// см. ОрганизацииСервер.РегистрационныеДанныеОбособленногоПодразделения. +// РегистрационныеДанные - см. ОрганизацииСервер.РегистрационныеДанныеОбособленногоПодразделения. +// Процедура ПриОпределенииРегистрационныхДанныхОбособленногоПодразделения(Организация, Поля, Дата, РегистрационныеДанные) Экспорт КонецПроцедуры @@ -154,10 +159,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// КонтактнаяИнформация - Структура - -// см. ОрганизацииСервер.КонтактнаяИнформацияОбособленногоПодразделения. +// КонтактнаяИнформация - см. ОрганизацииСервер.КонтактнаяИнформацияОбособленногоПодразделения. +// Процедура ПриОпределенииКонтактнойИнформацииОбособленногоПодразделения(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт КонецПроцедуры @@ -173,10 +179,12 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // РегистрационныеДанные - Структура - // см. ОрганизацииСервер.РегистрационныеДанныеИностраннойОрганизации. +// Процедура ПриОпределенииРегистрационныхДанныхИностраннойОрганизации(Организация, Поля, Дата, РегистрационныеДанные) Экспорт КонецПроцедуры @@ -188,10 +196,12 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // КонтактнаяИнформация - Структура - // см. ОрганизацииСервер.КонтактнаяИнформацияИностраннойОрганизации. +// Процедура ПриОпределенииКонтактнойИнформацииИностраннойОрганизации(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт КонецПроцедуры @@ -207,10 +217,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// РегистрационныеДанные - Структура - -// см. ОрганизацииСервер.РегистрационныеДанныеИндивидуальногоПредпринимателя. +// РегистрационныеДанные - см. ОрганизацииСервер.РегистрационныеДанныеИндивидуальногоПредпринимателя. +// Процедура ПриОпределенииРегистрационныхДанныхИндивидуальногоПредпринимателя(Организация, Поля, Дата, РегистрационныеДанные) Экспорт КонецПроцедуры @@ -222,10 +233,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// КонтактнаяИнформация - Структура - -// см. ОрганизацииСервер.КонтактнаяИнформацияИндивидуальногоПредпринимателя. +// КонтактнаяИнформация - см. ОрганизацииСервер.КонтактнаяИнформацияИндивидуальногоПредпринимателя. +// Процедура ПриОпределенииКонтактнойИнформацииИндивидуальногоПредпринимателя(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт КонецПроцедуры @@ -241,10 +253,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// РегистрационныеДанные - Структура - -// см. ОрганизацииСервер.РегистрационныеДанныеРуководителяОрганизации. +// РегистрационныеДанные - см. ОрганизацииСервер.РегистрационныеДанныеРуководителяОрганизации. +// Процедура ПриОпределенииРегистрационныхДанныхРуководителяОрганизации(Организация, Поля, Дата, РегистрационныеДанные) Экспорт @@ -257,10 +270,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// КонтактнаяИнформация - Структура - -// см. ОрганизацииСервер.КонтактнаяИнформацияРуководителяОрганизации. +// КонтактнаяИнформация - см. ОрганизацииСервер.КонтактнаяИнформацияРуководителяОрганизации. +// Процедура ПриОпределенииКонтактнойИнформацииРуководителяОрганизации(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт КонецПроцедуры @@ -276,10 +290,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// РегистрационныеДанные - Структура - -// см. ОрганизацииСервер.РегистрационныеДанныеГлавногоБухгалтера. +// РегистрационныеДанные - см. ОрганизацииСервер.РегистрационныеДанныеГлавногоБухгалтера. +// Процедура ПриОпределенииРегистрационныхДанныхГлавногоБухгалтера(Организация, Поля, Дата, РегистрационныеДанные) Экспорт КонецПроцедуры @@ -291,10 +306,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// КонтактнаяИнформация - Структура - -// см. ОрганизацииСервер.КонтактнаяИнформацияГлавногоБухгалтера. +// КонтактнаяИнформация - см. ОрганизацииСервер.КонтактнаяИнформацияГлавногоБухгалтера. +// Процедура ПриОпределенииКонтактнойИнформацииГлавногоБухгалтера(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт КонецПроцедуры @@ -310,10 +326,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// РегистрационныеДанные - Структура - -// см. ОрганизацииСервер.РегистрационныеДанныеУполномоченногоПредставителя. +// РегистрационныеДанные - см. ОрганизацииСервер.РегистрационныеДанныеУполномоченногоПредставителя. +// Процедура ПриОпределенииРегистрационныхДанныхУполномоченногоПредставителя(Организация, Поля, Дата, РегистрационныеДанные) Экспорт КонецПроцедуры @@ -325,10 +342,11 @@ // Поля - Строка - имена полей, перечисленные через запятую, в формате требований к свойствам структуры. // Список допустимых имен полей см. в описании возвращаемого значения. // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. -// КонтактнаяИнформация - Структура - -// см. ОрганизацииСервер.КонтактнаяИнформацияУполномоченногоПредставителя. +// КонтактнаяИнформация - см. ОрганизацииСервер.КонтактнаяИнформацияУполномоченногоПредставителя. +// Процедура ПриОпределенииКонтактнойИнформацииУполномоченногоПредставителя(Организация, Поля, Дата, КонтактнаяИнформация) Экспорт КонецПроцедуры diff --git a/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl b/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl index e835f9fc5..7c8c98cb3 100644 --- a/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl +++ b/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl @@ -18,7 +18,8 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.*). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: // Структура - @@ -89,10 +90,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхОрганизации). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * ДатаРегистрации - Дата - дата регистрации юридического лица. // * ИНН - Строка - ИНН организации. // * КодНалоговогоОргана - Строка - код налогового органа. @@ -140,10 +142,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииДополнительныхСведенийОрганизации). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * АдресЭлектроннойПочтыОрганизации - Строка - email организации. // * АдресОрганизацииФакт - Строка - адрес организации. // * АдресОрганизацииФактXML - Строка - адрес организации xml. @@ -208,10 +211,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииОрганизации). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * АдресОрганизации - Строка - адрес организации. // * АдресОрганизацииXML - Строка - адрес организации xml. // * АдресОрганизацииJSON - Строка - адрес организации json. @@ -243,10 +247,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииБанковскогоСчетаОрганизации). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * БанковскийСчетБанк - Строка - банк. // * БанковскийСчетБИК - Строка - БИК. // * БанковскийСчетКоррСчет - Строка - корр. счет. @@ -273,10 +278,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхОбособленногоПодразделения). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * КППОбособленногоПодразделения - Строка - КПП обособленного подразделения. // * НаименованиеОбособленногоПодразделенияПолное - Строка - наименование обособленного подразделения. // @@ -298,10 +304,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииОбособленногоПодразделения). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * АдресОбособленногоПодразделения - Строка - адрес обособленного подразделения. // * АдресОбособленногоПодразделенияXML - Строка - адрес обособленного подразделения в xml. // * АдресОбособленногоПодразделенияJSON - Строка - адрес обособленного подразделения в json. @@ -337,10 +344,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхОбособленногоПодразделения). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * ОтделениеИностраннойОрганизацииИНН - Строка - ИНН отделения иностранной организации. // * ОтделениеИностраннойОрганизацииКПП - Строка - КПП отделения иностранной организации. // * ОтделениеИностраннойОрганизацииНаименование - Строка - наименование. @@ -363,10 +371,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииИностраннойОрганизации). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * ОтделениеИностраннойОрганизацииАдресРФ - Строка - адрес иностранной организации. // * ОтделениеИностраннойОрганизацииАдресРФXML - Строка - адрес иностранной организации. // * ОтделениеИностраннойОрганизацииАдресРФJSON - Строка - адрес иностранной организации. @@ -402,10 +411,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхИндивидуальногоПредпринимателя). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * ИПВидДокументаУдостоверенияЛичности - Строка - вид документа ИП. // * ИПГражданствоКод - Строка - гражданство ИП. // * ИПГражданствоНаименование - Строка - гражданство наименование. @@ -445,10 +455,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииИндивидуальногоПредпринимателя). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * АдресМестаЖительства - Строка - адрес места жительства. // * АдресМестаЖительстваXML - Строка - адрес места жительства в формате xml. // * АдресМестаЖительстваJSON - Строка - адрес места жительства в формате json. @@ -489,10 +500,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхРуководителяОрганизации). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * РуководительГражданствоКод - Строка - код гражданства. // * РуководительГражданствоНаименование - Строка - наименование гражданства. // * РуководительДатаРождения - Дата - дата рождения. @@ -527,10 +539,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииРуководителяОрганизации). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * РуководительАдресМестаЖительства - Строка - адрес. // * РуководительАдресМестаЖительстваXML - Строка - адрес xml. // * РуководительАдресМестаЖительстваJSON - Строка - адрес json. @@ -566,10 +579,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхГлавногоБухгалтера). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * БухгалтерГражданствоКод - Строка - код гражданства бухгалтера. // * БухгалтерГражданствоНаименование - Строка - наименование гражданства бухгалтера. // * БухгалтерГражданствоУполномоченногоПредставителя - Строка - гражданство уполномоченного представителя. @@ -608,10 +622,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииГлавногоБухгалтера). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * БухгалтерАдресМестаЖительства - Строка - адрес. // * БухгалтерАдресМестаЖительстваXML - Строка - адрес xml. // * БухгалтерАдресМестаЖительстваJSON - Строка - адрес json. @@ -647,10 +662,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииРегистрационныхДанныхУполномоченногоПредставителя). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * УполномоченныйПредставительДатаРождения - Строка - дата рождения. // * УполномоченныйПредставительИНН - Строка - ИНН. // * УполномоченныйПредставительТелефон - Строка - телефон. @@ -680,10 +696,11 @@ // Список допустимых имен полей см. в описании возвращаемого значения (это максимально возможный список // полей, конечный состав определяется в ОрганизацииПереопределяемый.ПриОпределенииКонтактнойИнформацииУполномоченногоПредставителя). // Если указана пустая строка, то возвращаются значения всех полей. -// Дата - Дата, Неопределено - дата, на которую требуется получить данные. Если значение не указано, +// Дата - Дата +// - Неопределено - дата, на которую требуется получить данные. Если значение не указано, // то возвращается значение на текущую дату. // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных полей. +// Структура - содержит имена (ключи) и значения затребованных полей: // * УполномоченныйПредставительАдресМестаЖительстваНаселенныйПункт - Строка - населенный пункт. // * УполномоченныйПредставительАдресМестаЖительства - Строка - адрес. // * УполномоченныйПредставительАдресМестаЖительстваXML - Строка - адрес xml. diff --git a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl index 5f33cae84..b7d7acbd2 100644 --- a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl @@ -17,7 +17,7 @@ // ПеревестиВТранслит - Булево - Истина, если требуется переводить текст сообщения в транслит перед отправкой. // // Возвращаемое значение: -// Структура - результат отправки: +// Структура: // * ОтправленныеСообщения - Массив - массив структур: // ** НомерПолучателя - Строка - номер получателя SMS. // ** ИдентификаторСообщения - Строка - идентификатор SMS, присвоенный провайдером для отслеживания доставки. @@ -138,6 +138,7 @@ // // Возвращаемое значение: // Булево - Истина, если отправка SMS уже настроена. +// Функция НастройкаОтправкиSMSВыполнена() Экспорт УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl index 88bd10b7c..dd1df2a9f 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl @@ -11,7 +11,7 @@ // Открывает форму для отправки нового SMS. // // Параметры: -// НомераПолучателей - Массив из Структура - содержит: +// НомераПолучателей - Массив из Структура: // * Телефон - Строка - номер получателя в формате +<КодСтраны><КодDEF><номер>; // * Представление - Строка - представление номера телефона; // * ИсточникКонтактнойИнформации - СправочникСсылка - владелец номера телефона. diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl index 05e20f4c4..d9499e916 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl @@ -13,10 +13,11 @@ // Параметры: // НомераПолучателей - Массив - номера получателей в формате +<КодСтраны><КодDEF><номер>(строкой); // Текст - Строка - текст сообщения, длиной не более 1000 символов; -// ДополнительныеПараметры - Структура - Дополнительные параметры отправки SMS. -// * ИмяОтправителя - Строка - Имя отправителя, которое будет отображаться вместо номера у получателей. +// ДополнительныеПараметры - Структура - дополнительные параметры отправки SMS: +// * ИмяОтправителя - Строка - имя отправителя, которое будет отображаться вместо номера у получателей. // * ПеревестиВТранслит - Булево - Истина, если требуется переводить текст сообщения в транслит перед отправкой. -// СтандартнаяОбработка - Булево - Флаг необходимости выполнения стандартной обработки отправки SMS. +// СтандартнаяОбработка - Булево - флаг необходимости выполнения стандартной обработки отправки SMS. +// Процедура ПриОтправкеSMS(НомераПолучателей, Текст, ДополнительныеПараметры, СтандартнаяОбработка) Экспорт КонецПроцедуры @@ -26,6 +27,7 @@ // Параметры: // Провайдер - ПеречислениеСсылка.ПровайдерыSMS - поставщик услуги по отправке SMS. // АдресВИнтернете - Строка - адрес страницы провайдера в Интернете. +// Процедура ПриПолученииАдресаПровайдераВИнтернете(Провайдер, АдресВИнтернете) Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl index 67a414022..4fe85d9ca 100644 --- a/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl @@ -11,7 +11,7 @@ // Отправляет SMS через настроенного поставщика услуги. // // Параметры: -// ПараметрыОтправки - Структура - параметры отправки SMS: +// ПараметрыОтправки - Структура: // * Провайдер - ПеречислениеСсылка.ПровайдерыSMS - поставщик услуги по отправке SMS. // * НомераПолучателей - Массив - массив строк номеров получателей в формате +7ХХХХХХХХХХ; // * Текст - Строка - текст сообщения, максимальная длина у операторов может быть разной; @@ -20,7 +20,7 @@ // * Пароль - Строка - пароль для доступа к услуге отправки SMS. // // Результат - Структура - (возвращаемое значение) результат отправки: -// * ОтправленныеСообщения - Массив из Структура - отправленные сообщения: +// * ОтправленныеСообщения - Массив из Структура: // ** НомерПолучателя - Строка - номер получателя из массива НомераПолучателей; // ** ИдентификаторСообщения - Строка - идентификатор SMS, по которому можно запросить статус отправки. // ОписаниеОшибки - Строка - пользовательское представление ошибки, если пустая строка, то ошибки нет. @@ -38,8 +38,8 @@ // Провайдер - ПеречислениеСсылка.ПровайдерыSMS - провайдер услуги отправки SMS. // Логин - Строка - логин для доступа к услуге отправки SMS. // Пароль - Строка - пароль для доступа к услуге отправки SMS. -// Результат - Строка - (возвращаемое значение) статус доставки, -// см. описание функции ОтправкаSMS.СтатусДоставки. +// Результат - см. ОтправкаSMS.СтатусДоставки. +// Процедура СтатусДоставки(ИдентификаторСообщения, Провайдер, Логин, Пароль, Результат) Экспорт @@ -50,10 +50,10 @@ // // Параметры: // НастройкиОтправкиSMS - Структура - описание текущих настроек отправки SMS: -// * Провайдер - ПеречислениеСсылка.ПровайдерыSMS - -// * Логин - Строка - -// * Пароль - Строка - -// * ИмяОтправителя - Строка - +// * Провайдер - ПеречислениеСсылка.ПровайдерыSMS +// * Логин - Строка +// * Пароль - Строка +// * ИмяОтправителя - Строка // Отказ - Булево - установить этот параметр в Истина, если настройки не заполнены или заполнены неверно. // Процедура ПриПроверкеНастроекОтправкиSMS(НастройкиОтправкиSMS, Отказ) Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl index e8d90ac60..2d429eecc 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl @@ -22,6 +22,7 @@ // ИдентификаторСообщения. // ОписаниеОшибки - Строка - пользовательское представление ошибки, если пустая строка, // то ошибки нет. +// Функция ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, Логин, Пароль) Экспорт Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); @@ -90,7 +91,8 @@ // НастройкиОтправкиSMS - см. ОтправкаSMSПовтИсп.НастройкиОтправкиSMS; // // Возвращаемое значение: -// Строка - статус доставки. См. описание функции ОтправкаSMS.СтатусДоставки. +// см. ОтправкаSMS.СтатусДоставки. +// Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт Логин = НастройкиОтправкиSMS.Логин; Пароль = НастройкиОтправкиSMS.Пароль; @@ -164,14 +166,14 @@ Результат = Новый Соответствие; Результат.Вставить(1, НСтр("ru = 'Неверный API-ключ.'")); Результат.Вставить(2, НСтр("ru = 'Неизвестная команда.'")); - Результат.Вставить(3, НСтр("ru = 'Пользователь с указанным ID кабинета не найден.'")); + Результат.Вставить(3, НСтр("ru = 'Пользователь с указанным ID кабинета не существует.'")); Результат.Вставить(4, НСтр("ru = 'Пустой список телефонов для отправки сообщений.'")); Результат.Вставить(5, НСтр("ru = 'Не указан текст сообщения.'")); Результат.Вставить(6, НСтр("ru = 'Не удалось отправить сообщение на указанный номер.'")); Результат.Вставить(7, НСтр("ru = 'Не указан отправитель по приоритетному трафику.'")); Результат.Вставить(8, НСтр("ru = 'Некорректный отправитель, допускается только латиница и цифры.'")); Результат.Вставить(9, НСтр("ru = 'Пустой список идентификаторов сообщений для получения статусов.'")); - Результат.Вставить(10, НСтр("ru = 'Не найдено сообщение с таким идентификатором.'")); + Результат.Вставить(10, НСтр("ru = 'Не существует сообщение с таким идентификатором.'")); Результат.Вставить(11, НСтр("ru = 'Не удалось оплатить рассылку, проверьте баланс.'")); Возврат Результат; @@ -260,7 +262,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив - . +// Массив // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl index 54ba090c4..060bb0215 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl @@ -22,6 +22,7 @@ // ИдентификаторСообщения. // ОписаниеОшибки - Строка - пользовательское представление ошибки, если пустая строка, // то ошибки нет. +// Функция ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, Логин, Пароль) Экспорт Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); @@ -62,7 +63,8 @@ // НастройкиОтправкиSMS - см. ОтправкаSMSПовтИсп.НастройкиОтправкиSMS; // // Возвращаемое значение: -// Строка - статус доставки. См. описание функции ОтправкаSMS.СтатусДоставки. +// см. ОтправкаSMS.СтатусДоставки. +// Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт Логин = НастройкиОтправкиSMS.Логин; @@ -228,7 +230,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив - . +// Массив // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl index 7297f276e..c30e1fee2 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl @@ -22,6 +22,7 @@ // ИдентификаторСообщения. // ОписаниеОшибки - Строка - пользовательское представление ошибки, если пустая строка, // то ошибки нет. +// Функция ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, Логин, Пароль) Экспорт Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); @@ -88,7 +89,8 @@ // НастройкиОтправкиSMS - см. ОтправкаSMSПовтИсп.НастройкиОтправкиSMS; // // Возвращаемое значение: -// Строка - статус доставки. См. описание функции ОтправкаSMS.СтатусДоставки. +// см. ОтправкаSMS.СтатусДоставки. +// Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт Логин = НастройкиОтправкиSMS.Логин; @@ -149,7 +151,7 @@ ОписанияОшибок.Вставить("208", НСтр("ru = 'Параметр time указан неправильно.'")); ОписанияОшибок.Вставить("209", НСтр("ru = 'Номер получателя (или один из номеров) в стоп-листе (см. в личном кабинете на сайте).'")); ОписанияОшибок.Вставить("210", НСтр("ru = 'Используется GET, где необходимо использовать POST.'")); - ОписанияОшибок.Вставить("211", НСтр("ru = 'Метод не найден.'")); + ОписанияОшибок.Вставить("211", НСтр("ru = 'Метод не существует.'")); ОписанияОшибок.Вставить("212", НСтр("ru = 'Неверная кодировка текста сообщения (необходимо использовать UTF-8).'")); ОписанияОшибок.Вставить("220", НСтр("ru = 'Сервис временно недоступен.'")); ОписанияОшибок.Вставить("230", НСтр("ru = 'Сообщение не принято к отправке: достигнут дневной лимит сообщений на один номер (60 шт).'")); @@ -242,7 +244,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив - . +// Массив // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl index 2660224d5..22de6f6d6 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl @@ -22,6 +22,7 @@ // ИдентификаторСообщения. // ОписаниеОшибки - Строка - пользовательское представление ошибки, если пустая строка, // то ошибки нет. +// Функция ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, Логин, Пароль) Экспорт Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); @@ -90,7 +91,8 @@ // НастройкиОтправкиSMS - см. ОтправкаSMSПовтИсп.НастройкиОтправкиSMS; // // Возвращаемое значение: -// Строка - статус доставки. См. описание функции ОтправкаSMS.СтатусДоставки. +// см. ОтправкаSMS.СтатусДоставки. +// Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт Логин = НастройкиОтправкиSMS.Логин; Пароль = НастройкиОтправкиSMS.Пароль; @@ -255,7 +257,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив - . +// Массив // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl index f2b89ce88..a6a4d7595 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl @@ -22,6 +22,7 @@ // ИдентификаторСообщения. // ОписаниеОшибки - Строка - пользовательское представление ошибки, если пустая строка, // то ошибки нет. +// Функция ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, Логин, Пароль) Экспорт Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); @@ -93,7 +94,8 @@ // НастройкиОтправкиSMS - см. ОтправкаSMSПовтИсп.НастройкиОтправкиSMS; // // Возвращаемое значение: -// Строка - статус доставки. См. описание функции ОтправкаSMS.СтатусДоставки. +// см. ОтправкаSMS.СтатусДоставки. +// Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт Логин = НастройкиОтправкиSMS.Логин; Пароль = НастройкиОтправкиSMS.Пароль; @@ -210,7 +212,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив - . +// Массив // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl index 0edc84c16..d0f2e23e1 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl @@ -22,6 +22,7 @@ // ИдентификаторСообщения. // ОписаниеОшибки - Строка - пользовательское представление ошибки, если пустая строка, // то ошибки нет. +// Функция ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, Логин, Знач Пароль) Экспорт Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); @@ -78,7 +79,8 @@ // НастройкиОтправкиSMS - см. ОтправкаSMSПовтИсп.НастройкиОтправкиSMS; // // Возвращаемое значение: -// Строка - статус доставки. См. описание функции ОтправкаSMS.СтатусДоставки. +// см. ОтправкаSMS.СтатусДоставки. +// Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт Результат = "Ошибка"; @@ -176,7 +178,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив - . +// Массив // Функция Разрешения() Экспорт Протокол = "HTTPS"; diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl index 57d389f54..2e727252e 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl @@ -22,6 +22,7 @@ // ИдентификаторСообщения. // ОписаниеОшибки - Строка - пользовательское представление ошибки, если пустая строка, // то ошибки нет. +// Функция ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, Логин, Пароль) Экспорт Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); @@ -90,7 +91,8 @@ // НастройкиОтправкиSMS - см. ОтправкаSMSПовтИсп.НастройкиОтправкиSMS; // // Возвращаемое значение: -// Строка - статус доставки. См. описание функции ОтправкаSMS.СтатусДоставки. +// см. ОтправкаSMS.СтатусДоставки. +// Функция СтатусДоставки(Знач ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт ЧастиИдентификатора = СтрРазделить(ИдентификаторСообщения, "/", Истина); @@ -150,10 +152,10 @@ // Конструктор параметров ответа сервера. // // Возвращаемое значение: -// Структура - Описание: -// * code - Число - -// * descr - Строка - -// * detail - ОбъектXDTO - +// Структура: +// * code - Число +// * descr - Строка +// * detail - ОбъектXDTO // Функция ШаблонОтветаСервера() @@ -260,7 +262,7 @@ // Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. // // Возвращаемое значение: -// Массив - . +// Массив // Функция Разрешения() Экспорт diff --git a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl index 72aa09e65..6bcd4afe0 100644 --- a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl @@ -12,7 +12,7 @@ // // Параметры: // Документ - ДокументСсылка - документ коллекцию движений которого необходимо дополнить. -// РегистрыСДвижениями - Соответствие - соответствие с данными: +// РегистрыСДвижениями - Соответствие: // * Ключ - ОбъектМетаданных - регистр как объект метаданных. // * Значение - Строка - имя поля регистратора. // @@ -27,7 +27,7 @@ // // Параметры: // Документ - ДокументСсылка - документ коллекцию движений которого необходимо дополнить. -// РассчитанноеКоличество - Соответствие - соответствие с данными: +// РассчитанноеКоличество - Соответствие: // * Ключ - Строка - полное имя регистра (вместо точек используется символ подчеркивания). // * Значение - Число - рассчитанное количество записей. // diff --git a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl index 91098c46f..bd4c71fdd 100644 --- a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl @@ -12,10 +12,10 @@ // См. "Расширение поля формы для поля табличного документа.Выбор" в синтакс-помощнике. // // Параметры: -// ФормаОтчета - ФормаКлиентскогоПриложения - Форма отчета. -// Элемент - ПолеФормы - Табличный документ. -// Область - ОбластьЯчеекТабличногоДокумента - Выбранное значение. -// СтандартнаяОбработка - Булево - Признак выполнения стандартной обработки события. +// ФормаОтчета - ФормаКлиентскогоПриложения - форма отчета. +// Элемент - ПолеФормы - табличный документ. +// Область - ОбластьЯчеекТабличногоДокумента - выбранное значение. +// СтандартнаяОбработка - Булево - признак выполнения стандартной обработки события. // Процедура ОбработкаВыбораТабличногоДокумента(ФормаОтчета, Элемент, Область, СтандартнаяОбработка) Экспорт @@ -37,13 +37,13 @@ // Открывает форму регистра с отбором по регистратору // // Параметры: -// ФормаОтчета - ФормаКлиентскогоПриложения - Форма отчета. -// Расшифровка - Структура - Структура со свойствами. -// * ВидРегистра - Вид регистра "РегистрНакопления", "РегистрСведений", "РегистрБухгалтерии" или "РегистрРасчета". -// * ИмяРегистра - Имя регистра как объекта метаданных. -// * Регистратор - Ссылка на документ регистратор, по которому нужно сделать отбор +// ФормаОтчета - ФормаКлиентскогоПриложения - форма отчета. +// Расшифровка - Структура: +// * ВидРегистра - вид регистра "РегистрНакопления", "РегистрСведений", "РегистрБухгалтерии" или "РегистрРасчета". +// * ИмяРегистра - имя регистра как объекта метаданных. +// * Регистратор - ссылка на документ регистратор, по которому нужно сделать отбор // в открывшейся форме регистра. -// СтандартнаяОбработка - Булево - Признак выполнения стандартной (системной) обработки события. +// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. // Процедура ОткрытьФормуРегистраИзОтчетаОДвижениях(ФормаОтчета, Расшифровка, СтандартнаяОбработка) @@ -81,18 +81,19 @@ // Добавляет отбор в коллекцию отборов компоновщика или группы отборов // // Параметры: -// ЭлементСтруктуры - КомпоновщикНастроекКомпоновкиДанных, НастройкиКомпоновкиДанных - элемент структуры КД -// ПараметрыОтбора - Структура - Содержит параметры отбора компоновки данных. -// * Поле - Строка - Имя поля, по которому добавляется отбор. -// * Значение - Произвольный - Значение отбора КД (по умолчанию: Неопределено). -// * ВидСравнения - ВидСравненияКомпоновкиДанных - Вид сравнений КД (по умолчанию: Неопределено). -// * Использование - Булево - Признак использования отбора (по умолчанию: Истина). -// ДополнительныеПараметры - Структура - Содержит дополнительные параметры, перечисленные ниже: +// ЭлементСтруктуры - КомпоновщикНастроекКомпоновкиДанных +// - НастройкиКомпоновкиДанных - элемент структуры КД +// ПараметрыОтбора - Структура - содержит параметры отбора компоновки данных: +// * Поле - Строка - имя поля, по которому добавляется отбор. +// * Значение - Произвольный - значение отбора КД (по умолчанию: Неопределено). +// * ВидСравнения - ВидСравненияКомпоновкиДанных - вид сравнений КД (по умолчанию: Неопределено). +// * Использование - Булево - признак использования отбора (по умолчанию: Истина). +// ДополнительныеПараметры - Структура - содержит дополнительные параметры, перечисленные ниже: // * ВПользовательскиеНастройки - Булево - признак добавления в пользовательские настройки КД (по умолчанию: Ложь). // * ЗаменятьСуществующий - Булево - признак полной замены существующего отбора по полю (по умолчанию: Истина). // // Возвращаемое значение: -// ЭлементОтбораКомпоновкиДанных - Добавленный отбор. +// ЭлементОтбораКомпоновкиДанных - добавленный отбор. // Функция ДобавитьОтбор(ЭлементСтруктуры, ПараметрыОтбора, ДополнительныеПараметры = Неопределено) diff --git a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl index 72d35161f..7f57cc5ed 100644 --- a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl @@ -96,12 +96,12 @@ // Выполняет поиск элемента настройки по полю компоновки данных. // // Параметры: -// Настройки - НастройкиКомпоновкиДанных - -// ПользовательскиеНастройки - КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных - -// Поле - ПолеКомпоновкиДанных - +// Настройки - НастройкиКомпоновкиДанных +// ПользовательскиеНастройки - КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных +// Поле - ПолеКомпоновкиДанных // // Возвращаемое значение: -// Неопределено - Описание +// Неопределено // Функция ЭлементНастройкиПоПолю(Настройки, ПользовательскиеНастройки, Поле) ЭлементНастройки = ЭлементПараметровДанныхПоПолю(Настройки, ПользовательскиеНастройки, Поле); @@ -157,21 +157,34 @@ // компоновки данных, индекс и сами настройки компоновки данных, которым подчинен текущий элемент. // // Параметры: -// КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - -// Идентификатор - Число, Строка - +// КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных +// Идентификатор - Число +// - Строка // // Возвращаемое значение: -// Структура - Описание: -// * Описание - Неопределено, ДоступныйОбъектНастройкиКомпоновкиДанных, ДоступноеПолеКомпоновкиДанных - -// * Элемент - КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных, ДиаграммаКомпоновкиДанных, -// НастройкиВложенногоОбъектаКомпоновкиДанных, ВыбранныеПоляКомпоновкиДанных, НастройкиКомпоновкиДанных, -// ГруппировкаКомпоновкиДанных, ГруппировкаТаблицыКомпоновкиДанных, УсловноеОформлениеКомпоновкиДанных, -// Неопределено, ОтборКомпоновкиДанных, КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных, -// ПорядокКомпоновкиДанных, ТаблицаКомпоновкиДанных, ГруппировкаДиаграммыКомпоновкиДанных, -// КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных - -// * ЭлементПользовательскойНастройки - ЭлементОтбораКомпоновкиДанных, ЗначениеПараметраКомпоновкиДанных - -// * Индекс - Число - -// * Настройки - НастройкиКомпоновкиДанных - +// Структура: +// * Описание - Неопределено +// - ДоступныйОбъектНастройкиКомпоновкиДанных +// - ДоступноеПолеКомпоновкиДанных +// * Элемент - КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных +// - ДиаграммаКомпоновкиДанных +// - НастройкиВложенногоОбъектаКомпоновкиДанных +// - ВыбранныеПоляКомпоновкиДанных +// - НастройкиКомпоновкиДанных +// - ГруппировкаКомпоновкиДанных +// - ГруппировкаТаблицыКомпоновкиДанных +// - УсловноеОформлениеКомпоновкиДанных +// - Неопределено +// - ОтборКомпоновкиДанных +// - КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных +// - ПорядокКомпоновкиДанных +// - ТаблицаКомпоновкиДанных +// - ГруппировкаДиаграммыКомпоновкиДанных +// - КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных +// * ЭлементПользовательскойНастройки - ЭлементОтбораКомпоновкиДанных +// - ЗначениеПараметраКомпоновкиДанных +// * Индекс - Число +// * Настройки - НастройкиКомпоновкиДанных // Функция СведенияОЭлементеНастройки(КомпоновщикНастроек, Идентификатор) Экспорт Настройки = КомпоновщикНастроек.Настройки; @@ -208,8 +221,10 @@ // Определяет значения типа ИспользованиеГруппИЭлементов в зависимости от вида сравнения (приоритетно) или исходного значения. // // Параметры: -// Условие - ВидСравненияКомпоновкиДанных, Неопределено - текущее значение вида сравнения. -// ИсходноеЗначение - ИспользованиеГруппИЭлементов, ГруппыИЭлементы - текущее значение свойства +// Условие - ВидСравненияКомпоновкиДанных +// - Неопределено - текущее значение вида сравнения. +// ИсходноеЗначение - ИспользованиеГруппИЭлементов +// - ГруппыИЭлементы - текущее значение свойства // ВыборГруппИЭлементов. // // Возвращаемое значение: @@ -283,14 +298,17 @@ Контекст.Форма[Контекст.Путь] = ВыбранныйПериод; УстановитьПериод(Контекст.Форма, Контекст.Путь); + + ОтчетыКлиентСервер.ОповеститьОИзмененииНастроек(Контекст.Форма); КонецПроцедуры // Инициализирует значение элемента настройки периода. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеФормыОтчета - где: -// * Отчет - ОтчетОбъект - -// Путь - Строка - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеФормыОтчета: +// * Отчет - ОтчетОбъект +// Путь - Строка // Процедура УстановитьПериод(Форма, Знач Путь) Экспорт КомпоновщикНастроек = Форма.Отчет.КомпоновщикНастроек; @@ -314,6 +332,8 @@ Иначе // Элемент отбора. ЭлементПользовательскойНастройки.ПравоеЗначение = Форма[Путь]; КонецЕсли; + + ОтчетыКлиентСервер.ОповеститьОИзмененииНастроек(Форма); КонецПроцедуры #КонецОбласти @@ -340,17 +360,17 @@ // Определяет полный путь к элементу компоновки данных. // // Параметры: -// Настройки - НастройкиКомпоновкиДанных - Корневой узел настроек, от которого строится полный путь. -// ЭлементНастроек - НастройкиКомпоновкиДанных - -// - НастройкиВложенногоОбъектаКомпоновкиДанных - -// - ТаблицаКомпоновкиДанных - -// - КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных - -// - ДиаграммаКомпоновкиДанных - -// - КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных - -// - ЭлементОтбораКомпоновкиДанных - -// - ГруппаЭлементовОтбораКомпоновкиДанных - -// - ЗначениеПараметраКомпоновкиДанных - -// - ГруппаЭлементовОтбораКомпоновкиДанных - +// Настройки - НастройкиКомпоновкиДанных - корневой узел настроек, от которого строится полный путь. +// ЭлементНастроек - НастройкиКомпоновкиДанных +// - НастройкиВложенногоОбъектаКомпоновкиДанных +// - ТаблицаКомпоновкиДанных +// - КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных +// - ДиаграммаКомпоновкиДанных +// - КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных +// - ЭлементОтбораКомпоновкиДанных +// - ГруппаЭлементовОтбораКомпоновкиДанных +// - ЗначениеПараметраКомпоновкиДанных +// - ГруппаЭлементовОтбораКомпоновкиДанных // // Возвращаемое значение: // Строка - полный путь к элементу. Может использоваться в функции НайтиЭлементПоПолномуПути(). @@ -368,17 +388,21 @@ ТипРодителя = ТипЗнч(РодительЭлементаНастроек); Если ТипРодителя = Тип("ТаблицаКомпоновкиДанных") Тогда - Индекс = РодительЭлементаНастроек.Строки.Индекс(ЭлементНастроек); + СтрокиТаблицы = РодительЭлементаНастроек.Строки; // КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных + Индекс = СтрокиТаблицы.Индекс(ЭлементНастроек); Если Индекс = -1 Тогда - Индекс = РодительЭлементаНастроек.Колонки.Индекс(ЭлементНастроек); + КолонкиТаблицы = РодительЭлементаНастроек.Колонки; // КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных + Индекс = КолонкиТаблицы.Индекс(ЭлементНастроек); ИмяКоллекции = "Колонки"; Иначе ИмяКоллекции = "Строки"; КонецЕсли; ИначеЕсли ТипРодителя = Тип("ДиаграммаКомпоновкиДанных") Тогда - Индекс = РодительЭлементаНастроек.Серии.Индекс(ЭлементНастроек); + СерииДиаграммы = РодительЭлементаНастроек.Серии; // КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных + Индекс = СерииДиаграммы.Индекс(ЭлементНастроек); Если Индекс = -1 Тогда - Индекс = РодительЭлементаНастроек.Точки.Индекс(ЭлементНастроек); + ТочкиДиаграммы = РодительЭлементаНастроек.Серии; // КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных + Индекс = ТочкиДиаграммы.Индекс(ЭлементНастроек); ИмяКоллекции = "Точки"; Иначе ИмяКоллекции = "Серии"; @@ -405,6 +429,91 @@ Возврат СтрСоединить(Результат, "/"); КонецФункции +Функция ЭтоВыборОбъектовМетаданных(ДоступныеТипы, Знач ОтмеченныеЗначения, Обработчик) Экспорт + СоставТипов = ДоступныеТипы.Типы(); + + Индекс = СоставТипов.ВГраница(); + Пока Индекс >= 0 Цикл + Если СоставТипов.Найти(Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")) <> Неопределено + Или СоставТипов.Найти(Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений")) <> Неопределено Тогда + + СоставТипов.Удалить(Индекс); + КонецЕсли; + + Индекс = Индекс - 1; + КонецЦикла; + + ЭтоВыборОбъектовМетаданных = (СоставТипов.Количество() = 0); + + Если ЭтоВыборОбъектовМетаданных Тогда + ПроверитьОтмеченныеЗначения(ОтмеченныеЗначения); + + ПараметрыПодбора = Новый Структура; + ПараметрыПодбора.Вставить("ВыбранныеОбъектыМетаданных", ОтмеченныеЗначения); + ПараметрыПодбора.Вставить("ВыбиратьСсылки", Истина); + ПараметрыПодбора.Вставить("Заголовок", НСтр("ru = 'Подбор таблиц'")); + + ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыПодбора,,,,, Обработчик); + КонецЕсли; + + Возврат ЭтоВыборОбъектовМетаданных; +КонецФункции + +Функция ЭтоВыборПользователей(ДоступныеТипы, Знач ОтмеченныеЗначения, ПараметрыВыбора, Обработчик) Экспорт + КоличествоТипов = ДоступныеТипы.Типы().Количество(); + + ЭтоВыборПользователей = КоличествоТипов = 1 + И ДоступныеТипы.СодержитТип(Тип("СправочникСсылка.Пользователи")) + Или КоличествоТипов = 2 + И ДоступныеТипы.СодержитТип(Тип("СправочникСсылка.Пользователи")) + И ДоступныеТипы.СодержитТип(Тип("СправочникСсылка.ГруппыПользователей")); + + Если ЭтоВыборПользователей Тогда + ПроверитьОтмеченныеЗначения(ОтмеченныеЗначения); + ВыбратьПользователей(ДоступныеТипы, ОтмеченныеЗначения, ПараметрыВыбора, Обработчик); + КонецЕсли; + + Возврат ЭтоВыборПользователей; +КонецФункции + +Процедура ПроверитьОтмеченныеЗначения(ОтмеченныеЗначения) + + Индекс = ОтмеченныеЗначения.Количество() - 1; + + Пока Индекс >= 0 Цикл + Элемент = ОтмеченныеЗначения[Индекс]; + Индекс = Индекс - 1; + + Если Не ЗначениеЗаполнено(Элемент.Значение) Тогда + ОтмеченныеЗначения.Удалить(Элемент); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ВыбратьПользователей(ДоступныеТипы, ОтмеченныеЗначения, ПараметрыВыбора, Обработчик) + ВыборГруппПользователей = ДоступныеТипы.СодержитТип(Тип("СправочникСсылка.ГруппыПользователей")); + ВыбранныеПользователи = ОтмеченныеЗначения.ВыгрузитьЗначения(); + + Если ДоступныеТипы.СодержитТип(Тип("СправочникСсылка.ГруппыПользователей")) Тогда + ЗаголовокФормыПодбора = НСтр("ru = 'Подбор групп и пользователей'"); + Иначе + ЗаголовокФормыПодбора = НСтр("ru = 'Подбор пользователей'"); + КонецЕсли; + + ПараметрыПодбора = Новый Структура; + ПараметрыПодбора.Вставить("РежимВыбора", Истина); + ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыПодбора.Вставить("МножественныйВыбор", Истина); + ПараметрыПодбора.Вставить("РасширенныйПодбор", Истина); + ПараметрыПодбора.Вставить("ВыборГруппПользователей", ВыборГруппПользователей); + ПараметрыПодбора.Вставить("ПараметрыВыбора", ПараметрыВыбора); + ПараметрыПодбора.Вставить("ЗаголовокФормыПодбора", ЗаголовокФормыПодбора); + ПараметрыПодбора.Вставить("ВыбранныеПользователи", ВыбранныеПользователи); + + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыПодбора, ЭтотОбъект,,,, Обработчик); +КонецПроцедуры + #КонецОбласти #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl index 6922ab775..0dedc4793 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl @@ -92,7 +92,8 @@ // ФормаОтчета - ФормаКлиентскогоПриложения - форма отчета. // ИмяСобытия - Строка - идентификатор события для принимающих форм. // Параметр - Произвольный - расширенная информация о событии. -// Источник - ФормаКлиентскогоПриложения, Произвольный - источник события. +// Источник - ФормаКлиентскогоПриложения +// - Произвольный - источник события. // ОповещениеОбработано - Булево - признак того, что событие обработано. // Процедура ОбработкаОповещения(ФормаОтчета, ИмяСобытия, Параметр, Источник, ОповещениеОбработано) Экспорт @@ -117,6 +118,8 @@ // Процедура ПриНажатииКнопкиВыбораПериода(ФормаОтчета, Период, СтандартнаяОбработка, ОбработчикРезультата) Экспорт + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl index 8702ae3a9..d8b6ff936 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl @@ -16,7 +16,7 @@ // * Права. // // Возвращаемое значение: -// Структура - Настройки (дополнительные свойства) отчета, хранящиеся в данных формы: +// Структура - настройки (дополнительные свойства) отчета, хранящиеся в данных формы: // // * ФормироватьСразу - Булево - значение по умолчанию для флажка "Формировать сразу". // Когда флажок включен, то отчет будет формироваться после открытия, @@ -37,7 +37,8 @@ // выполненных настроек. Например, может быть задано для контекстных отчетов (открываемых с параметрами), // у которых есть несколько вариантов. // -// * ПараметрыРасположенияЭлементовУправления - Структура, Неопределено - варианты: +// * ПараметрыРасположенияЭлементовУправления - Структура +// - Неопределено - варианты: // - Неопределено - параметры элементов управления общей формы отчетов "по умолчанию". // - Структура - с именами настройки в коллекции НастройкиКомпоновкиДанных свойства Настройки // типа КомпоновщикНастроекКомпоновкиДанных: @@ -96,7 +97,7 @@ // Истина - команды рассылок будут скрыты, // Ложь (по умолчанию) - команды будут доступны. // -// * Печать - Структура - параметры печати табличного документа "по умолчанию". +// * Печать - Структура - параметры печати табличного документа "по умолчанию": // ** ПолеСверху - Число - отступ сверху при печати (в миллиметрах). // ** ПолеСлева - Число - отступ слева при печати (в миллиметрах). // ** ПолеСнизу - Число - отступ снизу при печати (в миллиметрах). @@ -105,7 +106,7 @@ // ** АвтоМасштаб - Булево - автоматически подгонять масштаб под размер страницы. // ** МасштабПечати - Число - масштаб изображения (в процентах). // -// * События - Структура - события, для которых определены обработчики в модуле объекта отчета. +// * События - Структура - события, для которых определены обработчики в модуле объекта отчета: // // ** ПриСозданииНаСервере - Булево - если Истина, то в модуле объекта отчета // следует определить обработчик события по шаблону: @@ -290,7 +291,7 @@ // // Обработка события. // КонецПроцедуры // -// ** ПриОпределенииИспользуемыхТаблиц - Булево - Если Истина, то в модуле объекта отчета +// ** ПриОпределенииИспользуемыхТаблиц - Булево - если Истина, то в модуле объекта отчета // следует определить обработчик события по шаблону: // // // Список регистров и других объектов метаданных, по которым формируется отчет. @@ -380,7 +381,7 @@ // Настройки формы отчета по умолчанию. // // Возвращаемое значение: -// Структура - настройки формы отчета: +// Структура: // Функция ПолучитьНастройкиОтчетаПоУмолчанию() Экспорт Возврат НастройкиОтчетаПоУмолчанию(); @@ -393,21 +394,22 @@ #Область СлужебныйПрограммныйИнтерфейс // Находит параметр в настройках компоновки по его имени. -// Если пользовательская настройка не найдена (например, -// если параметр не выведен в пользовательские настройки), -// то ищет значение параметра в настройках варианта. +// Если пользовательская настройка не существует (например, если параметр не выведен в пользовательские настройки), +// то ищет значение параметра в настройках варианта. // // Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных, Неопределено - +// НастройкиКД - НастройкиКомпоновкиДанных +// - Неопределено - // Настройки варианта отчета, в которых будет осуществляться вторая итерация поиска значения. -// ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - +// ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных +// - Неопределено - // Пользовательские настройки, в которых будет осуществляться первая итерация поиска значения. -// ИмяПараметра - Строка - Имя параметра. Должно удовлетворять требованиям образования имен переменных. +// ИмяПараметра - Строка - имя параметра. Должно удовлетворять требованиям образования имен переменных. // // Возвращаемое значение: -// Структура - Найденные значения параметров. +// Структура - найденные значения параметров: // Ключ - имя параметра; -// Значение - значение параметра. Неопределено если параметр не найден. +// Значение - значение параметра. Неопределено, если параметр не существует. // Функция НайтиПараметр(НастройкиКД, ПользовательскиеНастройкиКД, ИмяПараметра) Экспорт Возврат НайтиПараметры(НастройкиКД, ПользовательскиеНастройкиКД, ИмяПараметра)[ИмяПараметра]; @@ -416,10 +418,10 @@ // Находит общую настройку по идентификатору пользовательской настройки. // // Параметры: -// Настройки - НастройкиКомпоновкиДанных - Коллекции настроек. -// Идентификатор - Строка - Идентификатор пользовательской настройки. -// Иерархия - Массив - Коллекция настроек структуры компоновки данных. -// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - Коллекция пользовательских настроек. +// Настройки - НастройкиКомпоновкиДанных - коллекции настроек. +// Идентификатор - Строка - идентификатор пользовательской настройки. +// Иерархия - Массив - коллекция настроек структуры компоновки данных. +// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - коллекция пользовательских настроек. // Функция ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки, Идентификатор, Иерархия = Неопределено, ПользовательскиеНастройки = Неопределено) Экспорт Если Иерархия = Неопределено @@ -546,14 +548,15 @@ // Находит доступную настройку для отбора или параметра. // // Параметры: -// Настройки - НастройкиКомпоновкиДанных - Коллекции настроек. -// ЭлементНастройки - ЭлементОтбораКомпоновкиДанных, ЗначениеПараметраНастроекКомпоновкиДанных, -// НастройкиВложенногоОбъектаКомпоновкиДанных - Значение элемента настройки. +// Настройки - НастройкиКомпоновкиДанных - коллекции настроек. +// ЭлементНастройки - ЭлементОтбораКомпоновкиДанных +// - ЗначениеПараметраНастроекКомпоновкиДанных +// - НастройкиВложенногоОбъектаКомпоновкиДанных - значение элемента настройки. // // Возвращаемое значение: // ДоступноеПолеКомпоновкиДанных - , ДоступныйПараметрКомпоновкиДанных, // ДоступныйОбъектНастройкиКомпоновкиДанных - Найденная доступная настройка. -// Неопределено - Если доступная настройка не найдена. +// Неопределено - если доступная настройка не существует. // Функция НайтиДоступнуюНастройку(Настройки, ЭлементНастройки) Экспорт Тип = ТипЗнч(ЭлементНастройки); @@ -584,19 +587,22 @@ // Находит параметры и отборы по значению. // // Параметры: -// Настройки - ПользовательскиеНастройкиКомпоновкиДанных, Массив - настройки, +// Настройки - ПользовательскиеНастройкиКомпоновкиДанных +// - Массив - настройки, // элементы которых необходимо отобрать по определенным критериям. -// Отбор - Структура - Критерии поиска. -// * Использование - Булево - Использование настройки. -// * Значение - * - Значение настройки. -// ЭлементыНастроек - Неопределено, КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных, -// КоллекцияЭлементовОтбораКомпоновкиДанных - элементы настроек, +// Отбор - Структура: +// * Использование - Булево - использование настройки. +// * Значение - * - значение настройки. +// ЭлементыНастроек - Неопределено +// - КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных +// - КоллекцияЭлементовОтбораКомпоновкиДанных - элементы настроек, // сравниваемые с критериями и помещаемые в результат, // в случае соответствия критериям. -// Результат - Массив, Неопределено - См. возвращаемое значение. +// Результат - Массив +// - Неопределено - см. возвращаемое значение. // // Возвращаемое значение: -// Массив - Найденные пользовательские настройки. +// Массив - найденные пользовательские настройки. // Функция ЭлементыНастроекОтобранные(Настройки, Отбор, ЭлементыНастроек = Неопределено, Результат = Неопределено) Экспорт ЭтоПользовательскиеНастройки = (ТипЗнч(Настройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных")); @@ -672,21 +678,22 @@ #Область СлужебныеПроцедурыИФункции // Находит параметры в настройках компоновки по его имени. -// Если параметр не найден в пользовательских настройках, -// то его поиск выполняется в настройках варианта. +// Если параметр не существует в пользовательских настройках, то его поиск выполняется в настройках варианта. // // Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных, Неопределено - +// НастройкиКД - НастройкиКомпоновкиДанных +// - Неопределено - // Настройки варианта отчета, в которых будет осуществляться вторая итерация поиска значения. -// ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - +// ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных +// - Неопределено - // Пользовательские настройки, в которых будет осуществляться первая итерация поиска значения. -// ИменаПараметров - Строка - Имена параметров, перечисленные через запятую. +// ИменаПараметров - Строка - имена параметров, перечисленные через запятую. // Имя каждого параметра должно удовлетворять требованиям образования имен переменных. // // Возвращаемое значение: -// Структура - Найденные значения параметров. +// Структура - найденные значения параметров: // Ключ - имя параметра; -// Значение - найденный параметр. Неопределено если параметр не найден. +// Значение - найденный параметр. Неопределено, если параметр не существует. // Функция НайтиПараметры(НастройкиКД, ПользовательскиеНастройкиКД, ИменаПараметров) Результат = Новый Структура; @@ -731,12 +738,14 @@ // Находит доступную настройку поля компоновки данных. // // Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных, ГруппировкаКомпоновкиДанных - Коллекции настроек. -// Поле - Строка, ПолеКомпоновкиДанных - Имя поля. +// НастройкиКД - НастройкиКомпоновкиДанных +// - ГруппировкаКомпоновкиДанных - коллекции настроек. +// Поле - Строка +// - ПолеКомпоновкиДанных - имя поля. // // Возвращаемое значение: -// Неопределено - Когда доступная настройка поля не найдена. -// ДоступноеПолеКомпоновкиДанных - Доступная настройка для поля. +// ДоступноеПолеКомпоновкиДанных +// Неопределено - когда доступная настройка поля не существует. // Функция НайтиДоступноеПолеКД(НастройкиКД, ПолеКД) Если ПолеКД = Неопределено Тогда @@ -795,11 +804,11 @@ // Находит доступную настройку параметра компоновки данных. // // Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных - Коллекции настроек. -// ПараметрКД - ПараметрКомпоновкиДанных - Имя параметра. +// НастройкиКД - НастройкиКомпоновкиДанных - коллекции настроек. +// ПараметрКД - ПараметрКомпоновкиДанных - имя параметра. // // Возвращаемое значение: -// ДоступныйПараметрКомпоновкиДанных, Неопределено - Доступная настройка для параметра. +// ДоступныйПараметрКомпоновкиДанных, Неопределено - доступная настройка для параметра. // Функция НайтиДоступныйПараметрКД(НастройкиКД, ПараметрКД) Если ПараметрКД = Неопределено Тогда @@ -851,8 +860,10 @@ // Определяет значения типа ГруппыИЭлементы в зависимости от вида сравнения (приоритетно) или исходного значения. // // Параметры: -// Условие - ВидСравненияКомпоновкиДанных, Неопределено - текущее значение вида сравнения. -// ИсходноеЗначение - ИспользованиеГруппИЭлементов, ГруппыИЭлементы - текущее значение свойства +// Условие - ВидСравненияКомпоновкиДанных +// - Неопределено - текущее значение вида сравнения. +// ИсходноеЗначение - ИспользованиеГруппИЭлементов +// - ГруппыИЭлементы - текущее значение свойства // ВыборГруппИЭлементов. // // Возвращаемое значение: @@ -890,11 +901,13 @@ // Загружает новые настройки в компоновщик без сброса пользовательских настроек. // // Параметры: -// КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - Куда надо загрузить настройки. -// Настройки - НастройкиКомпоновкиДанных - Загружаемые настройки варианта. -// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - Загружаемые пользовательские настройки. +// КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - куда надо загрузить настройки. +// Настройки - НастройкиКомпоновкиДанных - загружаемые настройки варианта. +// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных +// - Неопределено - загружаемые пользовательские настройки. // Если не указан, то пользовательские настройки не загружаются. -// ФиксированныеНастройки - НастройкиКомпоновкиДанных, Неопределено - Загружаемые фиксированные настройки. +// ФиксированныеНастройки - НастройкиКомпоновкиДанных +// - Неопределено - загружаемые фиксированные настройки. // Если не указан, то фиксированные настройки не загружаются. // Функция ЗагрузитьНастройки(КомпоновщикНастроек, Настройки, ПользовательскиеНастройки = Неопределено, ФиксированныеНастройки = Неопределено) Экспорт @@ -933,6 +946,42 @@ Возврат НастройкиЗагружены; КонецФункции +Процедура ОповеститьОИзмененииНастроек(Форма) Экспорт + + Если Не Форма.ПользовательскиеНастройкиМодифицированы Тогда + Возврат; + КонецЕсли; + + ТекстСостояния = НСтр("ru = 'Изменились настройки. Нажмите ""Сформировать"" для получения отчета.'"); + ОтобразитьСостояниеОтчета(Форма, ТекстСостояния); + +КонецПроцедуры + +Процедура ОтобразитьСостояниеОтчета(Форма, Знач ТекстСостояния = "", Знач КартинкаСостояния = Неопределено) Экспорт + + ПолеОтчета = Форма.Элементы.Найти("ОтчетТабличныйДокумент"); + Если ПолеОтчета = Неопределено Тогда + Возврат; + КонецЕсли; + + ОтображатьСостояние = Не ПустаяСтрока(ТекстСостояния); + + Если КартинкаСостояния = Неопределено Или Не ОтображатьСостояние Тогда + КартинкаСостояния = Новый Картинка; + КонецЕсли; + + ОтображениеСостояния = ПолеОтчета.ОтображениеСостояния; + ОтображениеСостояния.Видимость = ОтображатьСостояние; + ОтображениеСостояния.ДополнительныйРежимОтображения = + ?(ОтображатьСостояние, ДополнительныйРежимОтображения.Неактуальность, ДополнительныйРежимОтображения.НеИспользовать); + ОтображениеСостояния.Картинка = КартинкаСостояния; + ОтображениеСостояния.Текст = ТекстСостояния; + + ПолеОтчета.ТолькоПросмотр = ОтображатьСостояние + Или ПолеОтчета.Вывод = ИспользованиеВывода.Запретить; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции. @@ -1516,20 +1565,20 @@ // // Параметры: // Узел - НастройкиКомпоновкиДанных - настройки отчета. -// ЧтоЗаполнить - НастройкиКомпоновкиДанных, -// ВыбранныеПоляКомпоновкиДанных, -// ОтборКомпоновкиДанных, -// ГруппировкаКомпоновкиДанных, -// ТаблицаКомпоновкиДанных, -// ДиаграммаКомпоновкиДанных, -// ЭлементУсловногоОформленияКомпоновкиДанных - элемент настройки, который заполняется. -// ЧемЗаполнить - НастройкиКомпоновкиДанных, -// ВыбранныеПоляКомпоновкиДанных, -// ОтборКомпоновкиДанных, -// ГруппировкаКомпоновкиДанных, -// ТаблицаКомпоновкиДанных, -// ДиаграммаКомпоновкиДанных, -// ЭлементУсловногоОформленияКомпоновкиДанных - элемент настройки-основание. +// ЧтоЗаполнить - НастройкиКомпоновкиДанных +// - ВыбранныеПоляКомпоновкиДанных +// - ОтборКомпоновкиДанных +// - ГруппировкаКомпоновкиДанных +// - ТаблицаКомпоновкиДанных +// - ДиаграммаКомпоновкиДанных +// - ЭлементУсловногоОформленияКомпоновкиДанных - элемент настройки, который заполняется. +// ЧемЗаполнить - НастройкиКомпоновкиДанных +// - ВыбранныеПоляКомпоновкиДанных +// - ОтборКомпоновкиДанных +// - ГруппировкаКомпоновкиДанных +// - ТаблицаКомпоновкиДанных +// - ДиаграммаКомпоновкиДанных +// - ЭлементУсловногоОформленияКомпоновкиДанных - элемент настройки-основание. // // Возвращаемое значение: // НастройкиКомпоновкиДанных, @@ -2038,7 +2087,7 @@ КонецЕсли; КонецЦикла; - Параметры = ОписаниеЭлементаНастройки.ПолучитьСвязиПараметровВыбора(); + Параметры = ОписаниеЭлементаНастройки.ПолучитьСвязиПараметровВыбора(); // СвязиПараметровВыбораКомпоновкиДанных Для Каждого Параметр Из Параметры Цикл Если Не ЗначениеЗаполнено(Параметр.Имя) Тогда Продолжить; diff --git a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl index ae106710a..dacd0ccaf 100644 --- a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl @@ -12,7 +12,7 @@ // конфигурации, которые будут использоваться для связи настроек отчетов. // // Параметры: -// СвязиОбъектовМетаданных - ТаблицаЗначений - таблица связей. +// СвязиОбъектовМетаданных - ТаблицаЗначений: // * ПодчиненныйРеквизит - Строка - имя реквизита подчиненного объекта метаданных. // * ПодчиненныйТип - Тип - тип подчиненного объекта метаданных. // * ВедущийТип - Тип - тип ведущего объекта метаданных. @@ -27,7 +27,9 @@ // для указания дополнительных параметров выбора. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета, Неопределено - форма отчета. +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета +// - Неопределено - форма отчета. // СвойстваНастройки - Структура - описание настройки отчета, которая будет выведена в форме отчета, где: // * ПолеКД - ПолеКомпоновкиДанных - выводимая настройка. // * ОписаниеТипов - ОписаниеТипов - тип выводимой настройки. @@ -41,8 +43,7 @@ // пустую строку. // * ОграничиватьВыборУказаннымиЗначениями - Булево - указать Истина, чтобы ограничить выбор пользователя // значениями, указанными в ЗначенияДляВыбора (его конечным состоянием). -// * Тип - Строка - краткий идентификатор типа свойства настроек компоновщика настроек компоновки данных. -// См. ОтчетыСервер.ТипНастройкиСтрокой. +// * Тип - см. ОтчетыСервер.ТипНастройкиСтрокой. // // Пример: // 1. Для всех настроек типа СправочникСсылка.Пользователи скрыть и не разрешать выбирать помеченных на удаление, diff --git a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl index adda35725..e42653eb6 100644 --- a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl @@ -15,11 +15,12 @@ // для установки схемы, программно сформированной на основании другого объекта метаданных. // // Параметры: -// Отчет - ОтчетОбъект, ВнешнийОтчетОбъект - отчет, которому необходимо установить схему. +// Отчет - ОтчетОбъект +// - ВнешнийОтчетОбъект - отчет, которому необходимо установить схему. // Контекст - ФормаКлиентскогоПриложения - форма отчета или форма настройки отчета. // Передается "как есть" из одноименного параметра события // ПередЗагрузкойНастроекВКомпоновщик. -// - Структура - параметры отчета: см. ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки. +// - Структура - см. ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки. // Схема - СхемаКомпоновкиДанных - схема, которую необходимо установить отчету. // КлючСхемы - Строка - идентификатор новой схемы, который будет записан в дополнительные свойства // пользовательских настроек. @@ -71,9 +72,12 @@ // // Параметры: // КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - компоновщик настроек, который необходимо инициализировать. -// Схема - СхемаКомпоновкиДанных, URL - см. синтакс-помощник: ИсточникДоступныхНастроекКомпоновкиДанных. -// Отчет - ОтчетОбъект, Неопределено - отчет, чей компоновщик инициализируется. -// ВариантОтчета - СправочникСсылка.ВариантыОтчета, Неопределено - хранилище варианта отчета. +// Схема - СхемаКомпоновкиДанных +// - URL - см. синтакс-помощник: ИсточникДоступныхНастроекКомпоновкиДанных. +// Отчет - ОтчетОбъект +// - Неопределено - отчет, чей компоновщик инициализируется. +// ВариантОтчета - СправочникСсылка.ВариантыОтчета +// - Неопределено - хранилище варианта отчета. // Процедура ИнициализироватьКомпоновщикНастроек(КомпоновщикНастроек, Схема, Отчет = Неопределено, ВариантОтчета = Неопределено) Экспорт Попытка @@ -103,10 +107,10 @@ // Для вызова из события ПриСозданииНаСервере формы отчета. // // Параметры: -// ФормаОтчета - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - форма, в которую добавляется -// команда, где: -// * ПостоянныеРеквизиты - СписокЗначений - -// * ПостоянныеКоманды - СписокЗначений - +// ФормаОтчета - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета - форма, где: +// * ПостоянныеРеквизиты - СписокЗначений +// * ПостоянныеКоманды - СписокЗначений // КомандаИлиКоманды - КомандаФормы - команда, с которой будут связаны выводимые кнопки. // Если в свойстве Действие указана пустая строка, // то при выполнении команды будет вызвана процедура ОтчетыКлиентПереопределяемый.ОбработчикКоманды. @@ -215,12 +219,13 @@ // См. также ПредставлениеНавигационнойСсылки.НавигационнаяСсылка в синтакс-помощнике. // Для открытия ссылок других форматов следует написать код // в процедуре ОтчетыКлиентПереопределяемый.ОбработкаВыбораТабличногоДокумента. -// ПредставлениеСсылки - Строка, Неопределено - наименование, которую необходимо вывести в указанной ячейке. -// Если Неопределено, то выводится как есть АдресСсылки. +// ПредставлениеСсылки - Строка +// - Неопределено - наименование, которую необходимо вывести в указанной ячейке. +// Если Неопределено, то выводится как есть АдресСсылки. // Процедура ВывестиГиперссылку(Ячейка, АдресСсылки, ПредставлениеСсылки = Неопределено) Экспорт Ячейка.Гиперссылка = Истина; - Ячейка.Шрифт = Новый Шрифт(Ячейка.Шрифт, , , , , Истина); + Ячейка.Шрифт = Новый Шрифт(Ячейка.Шрифт, , , , , Истина); // АПК:1345 Шрифт формируется на основании шрифта ячейки, который может быть произвольным и зависеть от макета оформления отчета. Ячейка.ЦветТекста = Метаданные.ЭлементыСтиля.ГиперссылкаЦвет.Значение; Ячейка.Расшифровка = АдресСсылки; Ячейка.Текст = ?(ПредставлениеСсылки = Неопределено, АдресСсылки, ПредставлениеСсылки); @@ -229,7 +234,8 @@ // Определяет что отчет пустой. // // Параметры: -// ОтчетОбъект - ОтчетОбъект, ВнешнийОтчетОбъект - проверяемый отчет. +// ОтчетОбъект - ОтчетОбъект +// - ВнешнийОтчетОбъект - проверяемый отчет. // ПроцессорКД - ПроцессорКомпоновкиДанных - объект, выполняющий компоновку данных в отчете. // // Возвращаемое значение: @@ -315,8 +321,7 @@ // Возвращаемое значение: // Структура - содержит значения свойств группы: // * Отображение - ОтображениеОбычнойГруппы - см. Синтакс-помощник - ОтображениеОбычнойГруппы. -// * Группировка - ГруппировкаПодчиненныхЭлементовФормы - значения определяют количество -// групп-колонок элементов: +// * Группировка - ГруппировкаПодчиненныхЭлементовФормы - количество групп-колонок элементов: // ** Вертикальная - ГруппировкаПодчиненныхЭлементовФормы - эквивалентно 1-ой колонке; // ** ГоризонтальнаяЕслиВозможно - ГруппировкаПодчиненныхЭлементовФормы - эквивалентно 2-м колонкам; // ** ГоризонтальнаяВсегда - ГруппировкаПодчиненныхЭлементовФормы - количество колонок равно количеству элементов @@ -337,9 +342,11 @@ // Выводит и группирует элементы формы, связанные с пользовательскими настройками. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - -// УзелИерархииЭлементов - ГруппаФормы - -// ПараметрыОбновления - Структура, Неопределено - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета +// УзелИерархииЭлементов - ГруппаФормы +// ПараметрыОбновления - Структура +// - Неопределено // Процедура ОбновитьЭлементыФормыНастроек(Форма, УзелИерархииЭлементов, ПараметрыОбновления = Неопределено) Экспорт Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда @@ -450,8 +457,12 @@ КонецПроцедуры Процедура ВосстановитьЗначенияОтборов(Форма) Экспорт - ПользовательскиеНастройки = Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; ПутьКДаннымЭлементов = Форма.ПутьКДаннымЭлементов; + Если ПутьКДаннымЭлементов = Неопределено Тогда + Возврат; + КонецЕсли; + + ПользовательскиеНастройки = Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; КэшЗначенийОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( ПользовательскиеНастройки.ДополнительныеСвойства, "КэшЗначенийОтборов"); @@ -570,1483 +581,9 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Анализ - -// Возвращает информацию о настройках компоновщика. -// После завершения работы с настройками следует вызвать ОчиститьРасширеннуюИнформациюОНастройках -// для очистки от цикличных ссылок для корректного освобождение памяти. -// -// Вызовы (6): -// 1. ОбщийМодуль.ВариантыОтчетов.УменьшитьКоличествоБыстрыхНастроек() -// * Используется только свойство ПользовательскиеНастройки; -// * Является параметром вызываемого метода ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(). -// 2. ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета.ПриСозданииНаСервере() -// * Используется только свойство ПользовательскиеНастройки; -// * Является параметром вызываемого метода ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(). -// 3. ОбщаяФорма.ФормаНастроекОтчета: -// 3.1. БыстрыеНастройкиЗаполнить() -// * Используется наиболее полно. -// 3.2. ОчиститьНастройкиОтНесуществующихПолейНаСервере() -// * Используются свойства: ДеревоВарианта, НастройкиВарианта. -// 4. ОбщаяФорма.ФормаОтчета.БыстрыеНастройкиЗаполнить() -// * Используются свойства: СоответствиеИменОбъектовМетаданных, Связи, ПользовательскиеНастройки. -// 5. Отчет.БыстрыеНастройкиОтчетов.МодульОбъекта.ПроанализироватьПользовательскиеНастройки() -// * Используется только свойство ПользовательскиеНастройки; -// -// Параметры: -// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Отчет.КомпоновщикНастроек. -// Свойство отчета. -// НастройкиОтчета - см. ВариантыОтчетов.НастройкиФормыОтчета() -// Содержит свойства отчета. Хранится в реквизите формы (отчета, настроек). -// ОтчетОбъектИлиПолноеИмя - ОтчетОбъект, Строка - объект компонуемого отчета или его полное имя метаданных. -// УсловияВывода - Структура, Неопределено - дополнительные признаки: -// * ТолькоПользовательские - Булево. -// * ТолькоБыстрые - Булево. -// * ИдентификаторТекущегоУзлаКД - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор текущей настройки. -// -// Возвращаемое значение: -// см. СвойстваРасширеннойИнформацииОНастройках -// -Функция РасширеннаяИнформацияОНастройках(КомпоновщикНастроекКД, НастройкиОтчета, ОтчетОбъектИлиПолноеИмя, УсловияВывода = Неопределено) Экспорт - НастройкиКД = КомпоновщикНастроекКД.Настройки; - ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; - - ДополнительныеНастройкиЭлементов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПользовательскиеНастройкиКД.ДополнительныеСвойства, "ЭлементыФормы"); - Если ДополнительныеНастройкиЭлементов = Неопределено Тогда - ДополнительныеНастройкиЭлементов = Новый Соответствие; - КонецЕсли; - - Информация = СвойстваРасширеннойИнформацииОНастройках( - НастройкиКД, НастройкиОтчета, ОтчетОбъектИлиПолноеИмя, УсловияВывода, ДополнительныеНастройкиЭлементов); - - Для Каждого ПользовательскаяНастройкаКД Из ПользовательскиеНастройкиКД.Элементы Цикл - ПользовательскиеНастройки = Информация.ПользовательскиеНастройки; // см. ТаблицаПользовательскихНастроек - - СвойстваНастройки = ПользовательскиеНастройки.Добавить(); - СвойстваНастройки.ПользовательскаяНастройкаКД = ПользовательскаяНастройкаКД; - СвойстваНастройки.Идентификатор = ПользовательскаяНастройкаКД.ИдентификаторПользовательскойНастройки; - СвойстваНастройки.ИндексВКоллекции = ПользовательскиеНастройкиКД.Элементы.Индекс(ПользовательскаяНастройкаКД); - СвойстваНастройки.ИдентификаторКД = ПользовательскиеНастройкиКД.ПолучитьИдентификаторПоОбъекту(ПользовательскаяНастройкаКД); - СвойстваНастройки.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ПользовательскаяНастройкаКД)); - Информация.Поиск.ПользовательскиеНастройки.Вставить(СвойстваНастройки.Идентификатор, СвойстваНастройки); - - // Положение заголовка по умолчанию. - СвойстваНастройки.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; - КонецЦикла; - - СтрокаДерева = ЗарегистрироватьУзелДереваВарианта(Информация, НастройкиКД, НастройкиКД, Информация.ДеревоВарианта.Строки, "Отчет"); - СтрокаДерева.Глобальная = Истина; - Информация.Вставить("ДеревоВариантаКорневаяСтрока", СтрокаДерева); - Если Информация.ИдентификаторТекущегоУзлаКД = Неопределено Тогда - Информация.ИдентификаторТекущегоУзлаКД = СтрокаДерева.ИдентификаторКД; - Если Не Информация.ТолькоПользовательские Тогда - СтрокаДерева.ВыводРазрешен = Истина; - КонецЕсли; - КонецЕсли; - - ЗарегистрироватьНастройкиВарианта(НастройкиКД, Информация); - ЗарегистрироватьСвязиОтВедущих(Информация); - - Возврат Информация; -КонецФункции - -// Конструктор коллекции расширенной информации о настройках отчета. -// -// Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных - -// НастройкиОтчета - Структура - -// ОтчетОбъектИлиПолноеИмя - ОтчетОбъект, Строка - -// УсловияВывода - Неопределено, Структура - -// * ТолькоПользовательские - Булево - -// * ТолькоБыстрые - Булево - -// * ИдентификаторТекущегоУзлаКД - ИдентификаторКомпоновкиДанных, Неопределено - -// ДополнительныеНастройкиЭлементов - Соответствие, Неопределено - -// -// Возвращаемое значение: -// Структура - содержит: -// * ТолькоПользовательские - Булево - -// * ТолькоБыстрые - Булево - -// * ИдентификаторТекущегоУзлаКД - ИдентификаторКомпоновкиДанных, Неопределено - -// * НастройкиКД - НастройкиКомпоновкиДанных - -// * НастройкиОтчета - см. ВариантыОтчетов.НастройкиФормыОтчета. -// * ОтчетОбъектИлиПолноеИмя - ОтчетОбъект, Строка - -// * ДеревоВарианта - см. ДеревоВарианта -// * НастройкиВарианта - см. ТаблицаНастроекВарианта -// * ПользовательскиеНастройки - см. ТаблицаПользовательскихНастроек -// * ОтключаемыеСвязи - Массив - -// * Связи - Структура - где: -// ** ПоТипу - см. ТаблицаСвязейПоТипу -// ** ПараметровВыбора - см. ТаблицаСвязейПараметровВыбора -// ** ОбъектовМетаданных - см. ТаблицаСвязейОбъектовМетаданных -// * ДополнительныеНастройкиЭлементов - Соответствие - где: -// ** Ключ - Строка - -// ** Значение - Структура - -// * СоответствиеИменОбъектовМетаданных - Соответствие - где: -// ** Ключ - Тип - ссылочный тип. -// ** Значение - Строка - -// * Поиск - Структура - где: -// ** НастройкиВариантаПоПолюКД - Соответствие - где: -// *** Ключ - ПолеКомпоновкиДанных - -// *** Значение - см. ТаблицаНастроекВарианта -// ** ПользовательскиеНастройки - Соответствие - где: -// *** Ключ - ИдентификаторКомпоновкиДанных - -// *** Значение - см. ТаблицаПользовательскихНастроек -// * ПользовательскиеНастройки - см. ТаблицаПользовательскихНастроек -// * ЕстьБыстрыеНастройки - Булево - -// * ЕстьОбычныеНастройки - Булево - -// * ЕстьНесуществующиеПоля - Булево - -// * ЕстьВложенныеОтчеты - Булево - -// * ЕстьВложенноеОформление - Булево - -// * ЕстьВложенныеПоля - Булево - -// * ЕстьВложенныеСортировки - Булево - -// * СвойстваГруппЭлементов - Структура - -// * ГруппыЭлементов - Соответствие - -// * ДеревоВариантаКорневаяСтрока - СтрокаДереваЗначений - -// -Функция СвойстваРасширеннойИнформацииОНастройках(НастройкиКД, НастройкиОтчета, ОтчетОбъектИлиПолноеИмя, - УсловияВывода, ДополнительныеНастройкиЭлементов) - - Информация = Новый Структура; - Информация.Вставить("ТолькоПользовательские", Ложь); - Информация.Вставить("ТолькоБыстрые", Ложь); - Информация.Вставить("ИдентификаторТекущегоУзлаКД", Неопределено); - - Если УсловияВывода <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Информация, УсловияВывода); - КонецЕсли; - - Информация.Вставить("НастройкиКД", НастройкиКД); - - Информация.Вставить("НастройкиОтчета", НастройкиОтчета); - Информация.Вставить("ОтчетОбъектИлиПолноеИмя", ОтчетОбъектИлиПолноеИмя); - - ДеревоВарианта = ДеревоВарианта(); - Информация.Вставить("ДеревоВарианта", ДеревоВарианта); - - НастройкиВарианта = ТаблицаНастроекВарианта(); - Информация.Вставить("НастройкиВарианта", НастройкиВарианта); - - ПользовательскиеНастройки = ТаблицаПользовательскихНастроек(); - Информация.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки); - - Информация.Вставить("ОтключаемыеСвязи", Новый Массив); - - СвязиПоТипу = ТаблицаСвязейПоТипу(); - СвязиПараметровВыбора = ТаблицаСвязейПараметровВыбора(); - СвязиОбъектовМетаданных = ТаблицаСвязейОбъектовМетаданных(НастройкиОтчета, Информация.ОтчетОбъектИлиПолноеИмя); - - Связи = Новый Структура; - Связи.Вставить("ПоТипу", СвязиПоТипу); - Связи.Вставить("ПараметровВыбора", СвязиПараметровВыбора); - Связи.Вставить("ОбъектовМетаданных", СвязиОбъектовМетаданных); - - Информация.Вставить("Связи", Связи); - - Информация.Вставить("ДополнительныеНастройкиЭлементов", ДополнительныеНастройкиЭлементов); - Информация.Вставить("СоответствиеИменОбъектовМетаданных", Новый Соответствие); - - Поиск = Новый Структура; - Поиск.Вставить("НастройкиВариантаПоПолюКД", Новый Соответствие); - Поиск.Вставить("ПользовательскиеНастройки", Новый Соответствие); - - Информация.Вставить("Поиск", Поиск); - - Информация.Вставить("ЕстьБыстрыеНастройки", Ложь); - Информация.Вставить("ЕстьОбычныеНастройки", Ложь); - Информация.Вставить("ЕстьНесуществующиеПоля", Ложь); - - Информация.Вставить("ЕстьВложенныеОтчеты", Ложь); - Информация.Вставить("ЕстьВложенныеОтборы", Ложь); - Информация.Вставить("ЕстьВложенноеОформление", Ложь); - Информация.Вставить("ЕстьВложенныеПоля", Ложь); - Информация.Вставить("ЕстьВложенныеСортировки", Ложь); - - // Настройки группы элементов быстрых (выводимых на форму) настроек по умолчанию. - СвойстваГруппЭлементов = СвойстваГруппыЭлементовФормы(); - Информация.Вставить("СвойстваГруппЭлементов", СвойстваГруппЭлементов); - - // Коллекция для установки частных свойств групп элементов быстрых настроек. - Информация.Вставить("ГруппыЭлементов", Новый Соответствие); - - Возврат Информация; - -КонецФункции - -// Очистить от циклических ссылок для освобождения памяти. -Процедура ОчиститьРасширеннуюИнформациюОНастройках(ИнформацияОНастройках) Экспорт - - ОчиститьДеревоЗначений(ИнформацияОНастройках.ДеревоВарианта); - ОчиститьДеревоЗначений(ИнформацияОНастройках.НастройкиВарианта); - ИнформацияОНастройках.Поиск.Очистить(); - - ПользовательскиеНастройки = ИнформацияОНастройках.ПользовательскиеНастройки; // см. ТаблицаПользовательскихНастроек - ПользовательскиеНастройки.Колонки.Очистить(); - - ИнформацияОНастройках.Связи.Очистить(); - ИнформацияОНастройках.Очистить(); - -КонецПроцедуры - -// Очистить дерево значений от циклических ссылок для освобождения памяти. -// -// Параметры: -// Дерево - ДеревоЗначений - -// -Процедура ОчиститьДеревоЗначений(Знач Дерево) - - СтрокиДерева = Дерево.Строки; - ОчищаемыеКолонки = Новый Массив; - ИндексКолонки = 0; - Для каждого КолонкаДерева Из Дерево.Колонки Цикл - Если КолонкаДерева.ТипЗначения <> Новый ОписаниеТипов("Строка") - И КолонкаДерева.ТипЗначения <> Новый ОписаниеТипов("Булево") - И КолонкаДерева.ТипЗначения <> Новый ОписаниеТипов("Число") - И КолонкаДерева.ТипЗначения <> Новый ОписаниеТипов("Дата") Тогда - ОчищаемыеКолонки.Добавить(ИндексКолонки); - КонецЕсли; - ИндексКолонки = ИндексКолонки + 1; - КонецЦикла; - - Если ОчищаемыеКолонки.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Для каждого СтрокаДерева Из СтрокиДерева Цикл - ОчиститьСтрокиДереваЗначений(СтрокаДерева.Строки, ОчищаемыеКолонки); - КонецЦикла; - Дерево.Колонки.Очистить(); - -КонецПроцедуры - -Процедура ОчиститьСтрокиДереваЗначений(Знач СтрокиДерева, Знач ОчищаемыеКолонки) - - Для каждого СтрокаДерева Из СтрокиДерева Цикл - ОчиститьСтрокиДереваЗначений(СтрокаДерева.Строки, ОчищаемыеКолонки); - КонецЦикла; - - Для каждого СтрокаДерева Из СтрокиДерева Цикл - Для каждого Колонка Из ОчищаемыеКолонки Цикл - СтрокаДерева[Колонка] = Неопределено; - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Дерево варианта - -// Конструктор дерева вариантов отчетов. -// -// Возвращаемое значение: -// ДеревоЗначений - где: -// * УзелКД - НастройкиКомпоновкиДанных - -// - ТаблицаКомпоновкиДанных - -// - ДиаграммаКомпоновкиДанных - -// * ДоступнаяНастройкаКД - ДоступноеПолеКомпоновкиДанных - -// - ДоступныеПараметрыКомпоновкиДанных - -// * ПользовательскаяНастройкаКД - ЭлементОтбораКомпоновкиДанных - -// - ЗначениеПараметраНастроекКомпоновкиДанных - -// * ПользовательскаяНастройка - СтрокаТаблицыЗначений - -// * ИдентификаторКД - ИдентификаторКомпоновкиДанных - -// * Идентификатор - Строка - -// * Тип - Строка - -// * Подтип - Строка - -// * Состояние - Строка - -// * ЕстьСтруктура - Булево - -// * ЕстьПоляИОформление - Булево - -// * Глобальная - Булево - -// * СодержитОтборы - Булево - -// * СодержитПоля - Булево - -// * СодержитСортировки - Булево - -// * СодержитУсловноеОформление - Булево - -// * Представление - Строка - -// * ПредставлениеПоУмолчанию - Строка - -// * Заголовок - Строка - -// * ВыводРазрешен - Булево - -// * ВыводитьТолькоФлажок - Булево - -// -Функция ДеревоВарианта() - Результат = Новый ДеревоЗначений; - - // Узлы СКД. - Результат.Колонки.Добавить("УзелКД"); - Результат.Колонки.Добавить("ДоступнаяНастройкаКД"); - Результат.Колонки.Добавить("ПользовательскаяНастройкаКД"); - - // Прикладная структура. - Результат.Колонки.Добавить("ПользовательскаяНастройка"); - - // Поиск этой настройки в узле. - Результат.Колонки.Добавить("ИдентификаторКД"); - - // Связь с узлами СКД. - Результат.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); - - // Тип настройки. - Результат.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Подтип", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Состояние", Новый ОписаниеТипов("Строка")); - - Результат.Колонки.Добавить("ЕстьСтруктура", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ЕстьПоляИОформление", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("Глобальная", Новый ОписаниеТипов("Булево")); - - // Содержимое настройки. - Результат.Колонки.Добавить("СодержитОтборы", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("СодержитПоля", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("СодержитСортировки", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("СодержитУсловноеОформление", Новый ОписаниеТипов("Булево")); - - // Вывод. - Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ПредставлениеПоУмолчанию", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Заголовок", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ВыводРазрешен", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ВыводитьТолькоФлажок", Новый ОписаниеТипов("Булево")); - - Возврат Результат; -КонецФункции - -// Добавляет строку в дерево вариантов. -// -// Параметры: -// Информация - см. СвойстваРасширеннойИнформацииОНастройках -// УзелКД - ДиаграммаКомпоновкиДанных - -// - НастройкиКомпоновкиДанных - -// - НастройкиВложенногоОбъектаКомпоновкиДанных - -// - ТаблицаКомпоновкиДанных - -// - ГруппировкаКомпоновкиДанных - -// НаборСтрокДерева - см. ДеревоВарианта -// Подтип - Строка - -// Возвращаемое значение: -// СтрокаДереваЗначений - -// -Функция ЗарегистрироватьУзелДереваВарианта(Информация, НастройкиКД, УзелКД, НаборСтрокДерева, Подтип = "") - СтрокаДерева = НаборСтрокДерева.Добавить(); - СтрокаДерева.УзелКД = УзелКД; - СтрокаДерева.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(УзелКД)); - СтрокаДерева.Подтип = Подтип; - - Если СтрокаДерева.Тип <> "Настройки" Тогда - СтрокаДерева.Идентификатор = УзелКД.ИдентификаторПользовательскойНастройки; - КонецЕсли; - - СтрокаДерева.ИдентификаторКД = НастройкиКД.ПолучитьИдентификаторПоОбъекту(УзелКД); - СтрокаДерева.Глобальная = (Подтип = "Отчет"); - - Если СтрокаДерева.Тип = "Настройки" Тогда - СтрокаДерева.ЕстьСтруктура = Истина; - СтрокаДерева.ЕстьПоляИОформление = Истина; - ИначеЕсли СтрокаДерева.Тип = "Группировка" - Или СтрокаДерева.Тип = "ГруппировкаДиаграммы" - Или СтрокаДерева.Тип = "ГруппировкаТаблицы" Тогда - СтрокаДерева.ЕстьСтруктура = Истина; - СтрокаДерева.ЕстьПоляИОформление = Истина; - ИначеЕсли СтрокаДерева.Тип = "Таблица" Тогда - СтрокаДерева.ЕстьПоляИОформление = Истина; - ИначеЕсли СтрокаДерева.Тип = "Диаграмма" Тогда - СтрокаДерева.ЕстьПоляИОформление = Истина; - ИначеЕсли СтрокаДерева.Тип = "НастройкиВложенногоОбъекта" Тогда - СтрокаДерева.ДоступнаяНастройкаКД = НастройкиКД.ДоступныеОбъекты.Элементы.Найти(УзелКД.ИдентификаторОбъекта); - ИначеЕсли СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" Тогда - // см. далее. - Иначе - Возврат СтрокаДерева; - КонецЕсли; - - ЗаполнитьПредставлениеИСостояниеНастройки( - СтрокаДерева, - СтрокаДерева.УзелКД, - Неопределено, - СтрокаДерева.ДоступнаяНастройкаКД); - - Если СтрокаДерева.ЕстьПоляИОформление Тогда - СтрокаДерева.Заголовок = ЗаголовокИзПараметровВывода(УзелКД.ПараметрыВывода); - СтрокаДерева.СодержитПоля = НастройкиКД.НаличиеВыбораУЭлемента(УзелКД); - СтрокаДерева.СодержитУсловноеОформление = НастройкиКД.НаличиеУсловногоОформленияУЭлемента(УзелКД); - КонецЕсли; - - Если Не Информация.ТолькоБыстрые Тогда - СтрокаДерева.ВыводРазрешен = (СтрокаДерева.ИдентификаторКД = Информация.ИдентификаторТекущегоУзлаКД); - КонецЕсли; - - Если ТипЗнч(СтрокаДерева.Идентификатор) = Тип("Строка") И Не ПустаяСтрока(СтрокаДерева.Идентификатор) Тогда - СвойстваНастройки = Информация.Поиск.ПользовательскиеНастройки.Получить(СтрокаДерева.Идентификатор); - Если СвойстваНастройки <> Неопределено Тогда - СтрокаДерева.ПользовательскаяНастройка = СвойстваНастройки; - СтрокаДерева.ПользовательскаяНастройкаКД = СвойстваНастройки.ПользовательскаяНастройкаКД; - ЗарегистрироватьПользовательскуюНастройку(Информация, СвойстваНастройки, СтрокаДерева, Неопределено); - Если ЗначениеЗаполнено(СтрокаДерева.Заголовок) Тогда - СвойстваНастройки.Представление = СтрокаДерева.Заголовок; - КонецЕсли; - Если Информация.ТолькоПользовательские Тогда - СтрокаДерева.ВыводРазрешен = СвойстваНастройки.ВыводРазрешен; - СтрокаДерева.Состояние = СвойстваНастройки.Состояние; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если СтрокаДерева.ЕстьСтруктура Тогда - Для Каждого ВложенныйЭлемент Из УзелКД.Структура Цикл - ЗарегистрироватьУзелДереваВарианта(Информация, НастройкиКД, ВложенныйЭлемент, СтрокаДерева.Строки); - КонецЦикла; - СтрокаДерева.СодержитОтборы = НастройкиКД.НаличиеОтбораУЭлемента(УзелКД); - СтрокаДерева.СодержитСортировки = НастройкиКД.НаличиеПорядкаУЭлемента(УзелКД); - КонецЕсли; - - Если СтрокаДерева.Тип = "Таблица" Тогда - ЗарегистрироватьУзелДереваВарианта(Информация, НастройкиКД, УзелКД.Строки, СтрокаДерева.Строки, "ТаблицаСтроки"); - ЗарегистрироватьУзелДереваВарианта(Информация, НастройкиКД, УзелКД.Колонки, СтрокаДерева.Строки, "ТаблицаКолонки"); - ИначеЕсли СтрокаДерева.Тип = "Диаграмма" Тогда - ЗарегистрироватьУзелДереваВарианта(Информация, НастройкиКД, УзелКД.Точки, СтрокаДерева.Строки, "ДиаграммаТочки"); - ЗарегистрироватьУзелДереваВарианта(Информация, НастройкиКД, УзелКД.Серии, СтрокаДерева.Строки, "ДиаграммаСерии"); - ИначеЕсли СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" Тогда - Для Каждого ВложенныйЭлемент Из УзелКД Цикл - ЗарегистрироватьУзелДереваВарианта(Информация, НастройкиКД, ВложенныйЭлемент, СтрокаДерева.Строки); - КонецЦикла; - ИначеЕсли СтрокаДерева.Тип = "НастройкиВложенногоОбъекта" Тогда - Информация.ЕстьВложенныеОтчеты = Истина; - ЗарегистрироватьУзелДереваВарианта(Информация, НастройкиКД, УзелКД.Настройки, СтрокаДерева.Строки); - КонецЕсли; - - Если Не СтрокаДерева.Глобальная Тогда - Если СтрокаДерева.СодержитПоля Тогда - Информация.ЕстьВложенныеПоля = Истина; - КонецЕсли; - Если СтрокаДерева.СодержитУсловноеОформление Тогда - Информация.ЕстьВложенноеОформление = Истина; - КонецЕсли; - Если СтрокаДерева.СодержитОтборы Тогда - Информация.ЕстьВложенныеОтборы = Истина; - КонецЕсли; - Если СтрокаДерева.СодержитСортировки Тогда - Информация.ЕстьВложенныеСортировки = Истина; - КонецЕсли; - КонецЕсли; - - Возврат СтрокаДерева; -КонецФункции - -// Возвращает значение параметра вывода Заголовок. -// -// Параметры: -// ПараметрыВывода - ЗначенияПараметровВыводаГруппировкиКомпоновкиДанных - -// - ЗначенияПараметровВыводаДиаграммыКомпоновкиДанных - -// - ЗначенияПараметровВыводаТаблицыКомпоновкиДанных - -// - ЗначенияПараметровВыводаКомпоновкиДанных - -// -// Возвращаемое значение: -// Строка - -// -Функция ЗаголовокИзПараметровВывода(ПараметрыВывода) - ВыводитьЗаголовокКД = ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьЗаголовок")); - Если ВыводитьЗаголовокКД = Неопределено Тогда - Возврат ""; - КонецЕсли; - Если ВыводитьЗаголовокКД.Использование = Истина - И ВыводитьЗаголовокКД.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить Тогда - Возврат ""; - КонецЕсли; - // В значении Авто считается что заголовок выводится. - // Когда параметр ВыводитьЗаголовок отключен это эквивалент значения Авто. - ЗаголовокКД = ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок")); - Если ЗаголовокКД = Неопределено Тогда - Возврат ""; - КонецЕсли; - Возврат ЗаголовокКД.Значение; -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Настройки варианта -// Конструктор коллекции настроек вариантов отчетов. -// -// Возвращаемое значение: -// ДеревоЗначений - Описание: -// * ЭлементКД -// * ДоступнаяНастройкаКД - ДоступноеПолеКомпоновкиДанных - -// - ДоступноеПолеОтбораКомпоновкиДанных - -// - ДоступныйПараметрКомпоновкиДанных - -// * ПользовательскаяНастройкаКД - см. ТаблицаПользовательскихНастроек -// * СтрокаДерева - см. ТаблицаНастроекВарианта -// * ПользовательскаяНастройка -// * Владелец - см. ТаблицаНастроекВарианта -// * Глобальная - Булево - -// * ИмяКоллекции - Строка - -// * ИдентификаторКД - ИдентификаторКомпоновкиДанных - -// * Идентификатор - Строка - -// * ИдентификаторЭлемента - Строка - -// * Тип - Строка - -// * Подтип - Строка - -// * Состояние - Строка - -// * ПолеКД - ПолеКомпоновкиДанных - -// * Значение - Неопределено - -// * ВидСравнения - ВидСравненияКомпоновкиДанных - -// * ВводСписком - Булево - -// * ИнформацияОТипах - Структура - -// * ФормаВыбора - Строка - -// * ОтмеченныеЗначения - СписокЗначений - -// * ПараметрыВыбора - -// * СвязьПоТипу -// * СвязиПараметровВыбора -// * СвязиПоМетаданным -// * ОграничениеТипа - ОписаниеТипов - -// * ОписаниеТипов - ОписаниеТипов - -// * ЗначенияДляВыбора - СписокЗначений - -// * ЗапросЗначенийВыбора - Запрос - -// * СписокЗначенийПереопределен - Булево - -// * БыстрыйВыбор - Булево - -// * ОграничиватьВыборУказаннымиЗначениями - Булево - -// * СобытиеПриИзменении - Булево - -// * Ширина - Число - -// * ВыводитьВГруппеОсновныхНастроек - Булево - -// * ПредставлениеПоУмолчанию - Строка - -// * Представление - Строка - -// * ВыводРазрешен - Булево - -// * ВыводитьФлажок - Булево - -// * ВыборГруппИЭлементов - -// * ВыводитьТолькоФлажок - Булево - -// -Функция ТаблицаНастроекВарианта() - Результат = Новый ДеревоЗначений; - - // Узлы СКД. - Результат.Колонки.Добавить("ЭлементКД"); - Результат.Колонки.Добавить("ДоступнаяНастройкаКД"); - Результат.Колонки.Добавить("ПользовательскаяНастройкаКД"); - - // Прикладная структура. - Результат.Колонки.Добавить("СтрокаДерева"); - Результат.Колонки.Добавить("ПользовательскаяНастройка"); - Результат.Колонки.Добавить("Владелец"); - Результат.Колонки.Добавить("Глобальная", Новый ОписаниеТипов("Булево")); - - // Поиск этой настройки в узле. - Результат.Колонки.Добавить("ИмяКоллекции", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ИдентификаторКД"); - - // Связь с узлами СКД. - Результат.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ИдентификаторЭлемента", Новый ОписаниеТипов("Строка")); - - // Описание настройки. - Результат.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Подтип", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Состояние", Новый ОписаниеТипов("Строка")); - - Результат.Колонки.Добавить("ПолеКД"); - Результат.Колонки.Добавить("Значение"); - Результат.Колонки.Добавить("ВидСравнения"); - Результат.Колонки.Добавить("ВводСписком", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ИнформацияОТипах"); - Результат.Колонки.Добавить("ФормаВыбора", Новый ОписаниеТипов("Строка")); - - Результат.Колонки.Добавить("ОтмеченныеЗначения"); - Результат.Колонки.Добавить("ПараметрыВыбора"); - - Результат.Колонки.Добавить("СвязьПоТипу"); - Результат.Колонки.Добавить("СвязиПараметровВыбора"); - Результат.Колонки.Добавить("СвязиПоМетаданным"); - Результат.Колонки.Добавить("ОграничениеТипа"); - - // API - Результат.Колонки.Добавить("ОписаниеТипов"); - Результат.Колонки.Добавить("ЗначенияДляВыбора"); - Результат.Колонки.Добавить("ЗапросЗначенийВыбора"); - Результат.Колонки.Добавить("СписокЗначенийПереопределен", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("БыстрыйВыбор", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ОграничиватьВыборУказаннымиЗначениями", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("СобытиеПриИзменении", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("Ширина", Новый ОписаниеТипов("Число")); - Результат.Колонки.Добавить("ВыводитьВГруппеОсновныхНастроек", Новый ОписаниеТипов("Булево")); - - // Вывод. - Результат.Колонки.Добавить("ПредставлениеПоУмолчанию", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ВыводРазрешен", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ВыводитьФлажок", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ВыборГруппИЭлементов"); - Результат.Колонки.Добавить("ВыводитьТолькоФлажок", Новый ОписаниеТипов("Булево")); - - Возврат Результат; -КонецФункции - -// Возвращает таблицу с описанием пользовательских настроек. -// -// Возвращаемое значение: -// ТаблицаЗначений - где: -// * УзелКД -// * НастройкаВариантаКД -// * ПользовательскаяНастройкаКД -// * ДоступнаяНастройкаКД - ДоступноеПолеКомпоновкиДанных - -// - ДоступноеПолеОтбораКомпоновкиДанных - -// - ДоступныйПараметрКомпоновкиДанных - -// * СтрокаДерева - -// * НастройкаВарианта - -// * ИдентификаторКД - ИдентификаторКомпоновкиДанных - -// * ИндексВКоллекции - Число - -// * Идентификатор - Строка - -// * ИдентификаторЭлемента - Строка - -// * Тип - Строка - -// * Подтип - Строка - -// * Состояние - Строка - -// * ПолеКД - ПолеКомпоновкиДанных - -// * Значение -// * ВидСравнения -// * ВводСписком - Булево - -// * ИнформацияОТипах -// * ОтмеченныеЗначения - СписокЗначений - -// * ПараметрыВыбора -// * ОписаниеТипов - ОписаниеТипов - -// * ЗначенияДляВыбора - СписокЗначений - -// * ЗапросЗначенийВыбора - Запрос - -// * БыстрыйВыбор - Булево - -// * ОграничиватьВыборУказаннымиЗначениями - Булево - -// * ПредставлениеПоУмолчанию - Строка - -// * Представление - Строка - -// * Быстрая - Булево - -// * Обычная - Булево - -// * ВыводРазрешен - Булево - -// * ВыводитьФлажок - Булево - -// * ВыводитьТолькоФлажок - Булево - -// * ГруппаЭлементов - Строка - -// * ПоложениеЗаголовка - ПоложениеЗаголовкаЭлементаФормы - -// * ТипЭлементов - Строка - -// * ВыборГруппИЭлементов -// * Дополнительно - Структура - -// -Функция ТаблицаПользовательскихНастроек() - Результат = Новый ТаблицаЗначений; - - // Узлы СКД. - Результат.Колонки.Добавить("УзелКД"); - Результат.Колонки.Добавить("НастройкаВариантаКД"); - Результат.Колонки.Добавить("ПользовательскаяНастройкаКД"); - Результат.Колонки.Добавить("ДоступнаяНастройкаКД"); - - // Прикладная структура. - Результат.Колонки.Добавить("СтрокаДерева"); - Результат.Колонки.Добавить("НастройкаВарианта"); - - // Поиск этой настройки в узле. - Результат.Колонки.Добавить("ИдентификаторКД"); - Результат.Колонки.Добавить("ИндексВКоллекции", Новый ОписаниеТипов("Число")); - - // Связь с узлами СКД. - Результат.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ИдентификаторЭлемента", Новый ОписаниеТипов("Строка")); - - // Описание настройки. - Результат.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Подтип", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Состояние", Новый ОписаниеТипов("Строка")); - - Результат.Колонки.Добавить("ПолеКД"); - Результат.Колонки.Добавить("Значение"); - Результат.Колонки.Добавить("ВидСравнения"); - Результат.Колонки.Добавить("ВводСписком", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ИнформацияОТипах"); - - Результат.Колонки.Добавить("ОтмеченныеЗначения"); - Результат.Колонки.Добавить("ПараметрыВыбора"); - - // API - Результат.Колонки.Добавить("ОписаниеТипов"); - Результат.Колонки.Добавить("ЗначенияДляВыбора"); - Результат.Колонки.Добавить("ЗапросЗначенийВыбора"); - Результат.Колонки.Добавить("БыстрыйВыбор", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ОграничиватьВыборУказаннымиЗначениями", Новый ОписаниеТипов("Булево")); - - // Вывод. - Результат.Колонки.Добавить("ПредставлениеПоУмолчанию", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Быстрая", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("Обычная", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ВыводРазрешен", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ВыводитьФлажок", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ВыводитьТолькоФлажок", Новый ОписаниеТипов("Булево")); - - // Имя группы элементов, которой будет подчинена быстрая настройка. - Результат.Колонки.Добавить("ГруппаЭлементов", Новый ОписаниеТипов("Строка")); - // Свойство, определяющее поведение заголовка элемента быстрой настройки. - Результат.Колонки.Добавить("ПоложениеЗаголовка", Новый ОписаниеТипов("ПоложениеЗаголовкаЭлементаФормы")); - - Результат.Колонки.Добавить("ТипЭлементов", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ВыборГруппИЭлементов"); - - // Дополнительные свойства. - Результат.Колонки.Добавить("Дополнительно", Новый ОписаниеТипов("Структура")); - - Возврат Результат; -КонецФункции - -Функция ТаблицаСвязейПоТипу() - // Связи из СКД. - ТаблицаСвязейПоТипу = Новый ТаблицаЗначений; - ТаблицаСвязейПоТипу.Колонки.Добавить("Ведущий"); - ТаблицаСвязейПоТипу.Колонки.Добавить("ВедущийПолеКД"); - ТаблицаСвязейПоТипу.Колонки.Добавить("Подчиненный"); - ТаблицаСвязейПоТипу.Колонки.Добавить("ПодчиненныйИмяПараметра"); - - Возврат ТаблицаСвязейПоТипу; -КонецФункции - -Функция ТаблицаСвязейПараметровВыбора() - ТаблицаСвязей = Новый ТаблицаЗначений; - ТаблицаСвязей.Колонки.Добавить("Ведущий"); - ТаблицаСвязей.Колонки.Добавить("ВедущийПолеКД"); - ТаблицаСвязей.Колонки.Добавить("Подчиненный"); - ТаблицаСвязей.Колонки.Добавить("ПодчиненныйИмяПараметра"); - ТаблицаСвязей.Колонки.Добавить("Действие"); - - Возврат ТаблицаСвязей; -КонецФункции - -// Конструктор коллекции связей элементов настроек. -// -// Параметры: -// НастройкиОтчета - Структура - -// ОтчетОбъектИлиПолноеИмя - ОтчетОбъект, Строка - -// -// Возвращаемое значение: -// ТаблицаЗначений - содержит: -// * ВедущийТип - Тип - -// * ПодчиненныйТип - Тип - -// * ПодчиненныйРеквизит - Строка - -// * ЕстьВедущие - Булево - -// * ЕстьПодчиненные - Булево - -// * Ведущие - Массив - -// * Подчиненные - Массив - -// * ВедущийПолноеИмя - Строка - -// * ПодчиненныйПолноеИмя - Строка - -// -Функция ТаблицаСвязейОбъектовМетаданных(НастройкиОтчета, ОтчетОбъектИлиПолноеИмя) - // Связи из метаданных. - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("ВедущийТип", Новый ОписаниеТипов("Тип")); - Результат.Колонки.Добавить("ПодчиненныйТип", Новый ОписаниеТипов("Тип")); - Результат.Колонки.Добавить("ПодчиненныйРеквизит", Новый ОписаниеТипов("Строка")); - - // Механизмы расширения. - ИнтеграцияПодсистемБСП.ПриДополненииСвязиОбъектовМетаданных(Результат); - ОтчетыПереопределяемый.ДополнитьСвязиОбъектовМетаданных(Результат); // Глобальные связи... - Если НастройкиОтчета.События.ДополнитьСвязиОбъектовМетаданных Тогда // ... можно переопределить локально для отчета. - ОтчетОбъект(ОтчетОбъектИлиПолноеИмя).ДополнитьСвязиОбъектовМетаданных(Результат); - КонецЕсли; - - Результат.Колонки.Добавить("ЕстьВедущие", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ЕстьПодчиненные", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("Ведущие", Новый ОписаниеТипов("Массив")); - Результат.Колонки.Добавить("Подчиненные", Новый ОписаниеТипов("Массив")); - Результат.Колонки.Добавить("ВедущийПолноеИмя", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ПодчиненныйПолноеИмя", Новый ОписаниеТипов("Строка")); - - Возврат Результат; -КонецФункции - -Процедура ЗарегистрироватьНастройкиВарианта(НастройкиКД, Информация) - - ДеревоВарианта = Информация.ДеревоВарианта; - - Найденные = ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("ЕстьСтруктура", Истина), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - - // Настройки, свойство Отбор - // Группировка, свойство Отбор - // ГруппировкаТаблицы, свойство Отбор. - // ГруппировкаДиаграммы, свойство Отбор. - - // Настройки, свойство Отбор.Элементы. - // Группировка, свойство Отбор.Элементы - // ГруппировкаТаблицы, свойство Отбор.Элементы - // ГруппировкаДиаграммы, свойство Отбор.Элементы. - - ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, "Отбор"); - - // Настройки, свойство Порядок. - // Группировка, свойство Порядок - // ГруппировкаТаблицы, свойство Порядок. - // ГруппировкаДиаграммы, свойство Порядок. - - ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, "Порядок"); - - // Настройки, свойство Структура. - // Группировка, свойство Структура. - // ГруппировкаТаблицы, свойство Структура. - // ГруппировкаДиаграммы, свойство Структура. - - ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, "Структура"); - - КонецЦикла; - - Найденные = ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("ЕстьПоляИОформление", Истина), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - - // Настройки, свойство Выбор - // Таблица, свойство Выбор - // Диаграмма, свойство Выбор - // Группировка, свойство Выбор - // ГруппировкаДиаграммы, свойство Выбор. - // ГруппировкаТаблицы, свойство Выбор. - - ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, "Выбор"); - - // Настройки, свойство УсловноеОформление. - // Таблица, свойство УсловноеОформление. - // Диаграмма, свойство УсловноеОформление. - // Группировка, свойство УсловноеОформление. - // ГруппировкаДиаграммы, свойство УсловноеОформление. - // ГруппировкаТаблицы, свойство УсловноеОформление. - - // Настройки, свойство УсловноеОформление.Элементы. - // Таблица, свойство УсловноеОформление.Элементы. - // Диаграмма, свойство УсловноеОформление.Элементы. - // Группировка, свойство УсловноеОформление.Элементы - // ГруппировкаДиаграммы, свойство УсловноеОформление.Элементы - // ГруппировкаТаблицы, свойство УсловноеОформление.Элементы. - - ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, "УсловноеОформление"); - - // Настройки, свойство ПараметрыВывода. - // Таблица, свойство ПараметрыВывода. - // Диаграмма, свойство ПараметрыВывода. - // Группировка, свойство ПараметрыВывода - // ГруппировкаДиаграммы, свойство ПараметрыВывода - // ГруппировкаТаблицы, свойство ПараметрыВывода. - - ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, "ПараметрыВывода"); - - КонецЦикла; - - Найденные = ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("Тип", "Настройки"), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - - // Настройки, свойство ПараметрыДанных, метод НайтиЗначениеПараметра(). - - ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, "ПараметрыДанных"); - - КонецЦикла; - -КонецПроцедуры - -// Добавляет строку дерева значений с описанием настройки варианта отчета. -// -// Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных - -// Информация - см. СвойстваРасширеннойИнформацииОНастройках -// СтрокаДерева - СтрокаДереваЗначений - -// ИмяКоллекции - Строка - -// НаборЭлементов - Неопределено - -// Родитель - Неопределено - -// Владелец - Неопределено - -// -Процедура ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, ИмяКоллекции, НаборЭлементов = Неопределено, Родитель = Неопределено, Владелец = Неопределено) - УзелКД = СтрокаДерева.УзелКД[ИмяКоллекции]; - - Владелец = Информация.НастройкиВарианта.Строки.Добавить(); - Владелец.СтрокаДерева = СтрокаДерева; - Если ИмяКоллекции <> "ПараметрыДанных" И ИмяКоллекции <> "ПараметрыВывода" Тогда - Владелец.Идентификатор = УзелКД.ИдентификаторПользовательскойНастройки; - КонецЕсли; - Владелец.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(УзелКД)); - Владелец.ИмяКоллекции = ИмяКоллекции; - Владелец.Глобальная = СтрокаДерева.Глобальная; - Владелец.ЭлементКД = УзелКД; - Владелец.ВыводРазрешен = Не Информация.ТолькоБыстрые И СтрокаДерева.ВыводРазрешен; - - Если ТипЗнч(Владелец.Идентификатор) = Тип("Строка") И Не ПустаяСтрока(Владелец.Идентификатор) Тогда - СвойстваНастройки = Информация.Поиск.ПользовательскиеНастройки.Получить(Владелец.Идентификатор); - Если СвойстваНастройки <> Неопределено Тогда - Владелец.ПользовательскаяНастройка = СвойстваНастройки; - ЗарегистрироватьПользовательскуюНастройку(Информация, СвойстваНастройки, Неопределено, Владелец); - СвойстваНастройки.ПараметрыВыбора = Новый Массив; - Владелец.ПараметрыВыбора = Новый Массив; - Владелец.СвязиПараметровВыбора = Новый Массив; - Владелец.СвязиПоМетаданным = Новый Массив; - Если Информация.ТолькоПользовательские Тогда - Владелец.ВыводРазрешен = СвойстваНастройки.ВыводРазрешен; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если Владелец.ВыводРазрешен Тогда - Если Владелец.ПользовательскаяНастройка = Неопределено Тогда - ЗаполнитьПредставлениеИСостояниеНастройки( - Владелец, - Владелец.ЭлементКД, - Неопределено, - Неопределено); - Иначе - ЗаполнитьЗначенияСвойств(Владелец, Владелец.ПользовательскаяНастройка, "Представление, ВыводитьТолькоФлажок"); - КонецЕсли; - КонецЕсли; - - Если ИмяКоллекции = "Отбор" - Или ИмяКоллекции = "ПараметрыДанных" - Или ИмяКоллекции = "ПараметрыВывода" - Или ИмяКоллекции = "УсловноеОформление" Тогда - ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, УзелКД.Элементы, Владелец, Владелец); - ИначеЕсли Не Информация.ТолькоБыстрые // (Оптимизация) Поля и сортировки не выводятся в быстрых настройках. - И (ИмяКоллекции = "Порядок" Или ИмяКоллекции = "Выбор") Тогда - ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, УзелКД.Элементы, Владелец, Владелец); - КонецЕсли; - -КонецПроцедуры - -// Добавляет запись в коллекцию свойств элементов настроек отчета. -// -// Параметры: -// Информация - см. СвойстваРасширеннойИнформацииОНастройках -// УзелКД - НастройкиКомпоновкиДанных - -// - ВыбранныеПоляКомпоновкиДанных - -// - ГруппаВыбранныхПолейКомпоновкиДанных - -// - ОтборКомпоновкиДанных - -// - УсловноеОформлениеКомпоновкиДанных - -// - ЗначенияПараметровВыводаКомпоновкиДанных - -// - ПорядокКомпоновкиДанных - -// НаборЭлементов - КоллекцияЗначенийПараметровКомпоновкиДанных - -// - КоллекцияЭлементовОтбораКомпоновкиДанных - -// - ГруппаЭлементовОтбораКомпоновкиДанных - -// - ВыбранныеПоляКомпоновкиДанных - -// Владелец - СтрокаДереваЗначений - -// Родитель - СтрокаДереваЗначений - -// -Процедура ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, НаборЭлементов, Владелец, Родитель) - ЕстьНеПомеченные = Ложь; - ЕстьПомеченные = Ложь; - - Для Каждого ЭлементКД Из НаборЭлементов Цикл - НастройкаВарианта = Родитель.Строки.Добавить(); - ЗаполнитьЗначенияСвойств(НастройкаВарианта, Владелец, "СтрокаДерева, ИмяКоллекции, Глобальная"); - НастройкаВарианта.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); - НастройкаВарианта.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); - НастройкаВарианта.Владелец = Владелец; - НастройкаВарианта.ЭлементКД = ЭлементКД; - НастройкаВарианта.ВыводРазрешен = Не Информация.ТолькоБыстрые И Владелец.ВыводРазрешен; - НастройкаВарианта.ВыводитьФлажок = Истина; - - Если НастройкаВарианта.Тип = "АвтоЭлементПорядка" - Или НастройкаВарианта.Тип = "АвтоВыбранноеПоле" - Или НастройкаВарианта.Тип = "ГруппаВыбранныхПолей" Тогда - // Действие не требуется. - ИначеЕсли НастройкаВарианта.Тип = "ЭлементПорядка" Тогда - НастройкаВарианта.Значение = ЭлементКД.ТипУпорядочивания; - НастройкаВарианта.ПолеКД = ЭлементКД.Поле; - НастройкаВарианта.ДоступнаяНастройкаКД = УзелКД.ДоступныеПоляПорядка.НайтиПоле(ЭлементКД.Поле); - Если НастройкаВарианта.ДоступнаяНастройкаКД = Неопределено Тогда - НастройкаВарианта.Состояние = "ПометкаУдаления"; - КонецЕсли; - ИначеЕсли НастройкаВарианта.Тип = "ВыбранноеПоле" Тогда - НастройкаВарианта.ПолеКД = ЭлементКД.Поле; - НастройкаВарианта.ДоступнаяНастройкаКД = УзелКД.ДоступныеПоляВыбора.НайтиПоле(ЭлементКД.Поле); - Если НастройкаВарианта.ДоступнаяНастройкаКД = Неопределено Тогда - НастройкаВарианта.Состояние = "ПометкаУдаления"; - КонецЕсли; - Иначе - НастройкаВарианта.Идентификатор = ЭлементКД.ИдентификаторПользовательскойНастройки; - КонецЕсли; - - Если НастройкаВарианта.Тип = "ВыбранныеПоля" - Или НастройкаВарианта.Тип = "Порядок" - Или НастройкаВарианта.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или НастройкаВарианта.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или НастройкаВарианта.Тип = "Отбор" - Или НастройкаВарианта.Тип = "УсловноеОформление" - Или НастройкаВарианта.Тип = "СтруктураНастроек" Тогда - НастройкаВарианта.ВыводитьФлажок = Ложь; - КонецЕсли; - - СвойстваНастройки = Неопределено; - Если ТипЗнч(НастройкаВарианта.Идентификатор) = Тип("Строка") И Не ПустаяСтрока(НастройкаВарианта.Идентификатор) Тогда - СвойстваНастройки = Информация.Поиск.ПользовательскиеНастройки.Получить(НастройкаВарианта.Идентификатор); - КонецЕсли; - - Если НастройкаВарианта.Тип = "ЭлементОтбора" Или НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда - // Пропускаем все настройки СКД, которые не включены в пользовательские настройки, кроме параметров СКД. - Если СвойстваНастройки = Неопределено И Владелец.ИмяКоллекции <> "ПараметрыДанных" Тогда - Родитель.Строки.Удалить(НастройкаВарианта); // В целях оптимизации. - Продолжить; - КонецЕсли; - ЗарегистрироватьПоле(Информация, УзелКД, ЭлементКД, НастройкаВарианта); - ЗарегистрироватьТипыИСвязи(Информация, НастройкаВарианта); - КонецЕсли; - - Если СвойстваНастройки <> Неопределено Тогда - НастройкаВарианта.ПользовательскаяНастройка = СвойстваНастройки; - ЗарегистрироватьПользовательскуюНастройку(Информация, СвойстваНастройки, Неопределено, НастройкаВарианта); - Если Информация.ТолькоПользовательские Тогда - НастройкаВарианта.ВыводРазрешен = СвойстваНастройки.ВыводРазрешен; - НастройкаВарианта.Значение = СвойстваНастройки.Значение; - НастройкаВарианта.ВидСравнения = СвойстваНастройки.ВидСравнения; - КонецЕсли; - КонецЕсли; - - Если НастройкаВарианта.ВыводРазрешен Тогда - ЗаполнитьПредставлениеИСостояниеНастройки( - НастройкаВарианта, - НастройкаВарианта.ЭлементКД, - Неопределено, - НастройкаВарианта.ДоступнаяНастройкаКД); - Если НастройкаВарианта.Состояние = "ПометкаУдаления" Тогда - Информация.ЕстьНесуществующиеПоля = Истина; - НастройкаВарианта.ВыводРазрешен = Ложь; - ИначеЕсли НастройкаВарианта.Тип = "ЭлементОтбора" - Или НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда - ПриОпределенииПараметровВыбора(Информация, НастройкаВарианта); - КонецЕсли; - КонецЕсли; - - Если НастройкаВарианта.Тип = "ГруппаЭлементовОтбора" Тогда - НастройкаВарианта.Значение = ЭлементКД.ТипГруппы; - ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, ЭлементКД.Элементы, Владелец, НастройкаВарианта); - ИначеЕсли НастройкаВарианта.Тип = "ГруппаВыбранныхПолей" Тогда - НастройкаВарианта.Значение = ЭлементКД.Расположение; - ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, ЭлементКД.Элементы, Владелец, НастройкаВарианта); - ИначеЕсли НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда - Если СвойстваНастройки <> Неопределено Тогда // В целях оптимизации. - ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, ЭлементКД.ЗначенияВложенныхПараметров, Владелец, НастройкаВарианта); - КонецЕсли; - КонецЕсли; - - Если СвойстваНастройки <> Неопределено Тогда - СвойстваНастройки.ЗначенияДляВыбора = НастройкаВарианта.ЗначенияДляВыбора; - СвойстваНастройки.ПараметрыВыбора = НастройкаВарианта.ПараметрыВыбора; - СвойстваНастройки.БыстрыйВыбор = НастройкаВарианта.БыстрыйВыбор; - СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями; - КонецЕсли; - - Если НастройкаВарианта.Состояние = "ПометкаУдаления" Тогда - Информация.ЕстьНесуществующиеПоля = Истина; - ЕстьПомеченные = Истина; - Иначе - ЕстьНеПомеченные = Истина; - КонецЕсли; - КонецЦикла; - - Если ЕстьПомеченные И Не ЕстьНеПомеченные И Родитель <> Владелец Тогда - Родитель.Состояние = "ПометкаУдаления"; - КонецЕсли; -КонецПроцедуры - -// Добавляет элемент в коллекцию. -// -// Параметры: -// Информация - см. СвойстваРасширеннойИнформацииОНастройках -// УзелКД - НастройкиКомпоновкиДанных - -// - ВыбранныеПоляКомпоновкиДанных - -// - ПорядокКомпоновкиДанных - -// - УсловноеОформлениеКомпоновкиДанных - -// - ЗначенияПараметровВыводаКомпоновкиДанных - -// - ГруппаВыбранныхПолейКомпоновкиДанных - -// - ОтборКомпоновкиДанных - -// ЭлементКД - ЭлементОтбораКомпоновкиДанных - -// - ЗначениеПараметраНастроекКомпоновкиДанных - -// - ВыбранноеПолеКомпоновкиДанных - -// - ЭлементПорядкаКомпоновкиДанных - -// НастройкаВарианта - см. ТаблицаНастроекВарианта -// -Процедура ЗарегистрироватьПоле(Информация, УзелКД, ЭлементКД, НастройкаВарианта) - Если ПустаяСтрока(НастройкаВарианта.Идентификатор) Тогда - Идентификатор = Строка(НастройкаВарианта.СтрокаДерева.ИдентификаторКД); - Если Не ПустаяСтрока(Идентификатор) Тогда - Идентификатор = Идентификатор + "_"; - КонецЕсли; - НастройкаВарианта.Идентификатор = Идентификатор + НастройкаВарианта.ИмяКоллекции + "_" + Строка(НастройкаВарианта.ИдентификаторКД); - КонецЕсли; - НастройкаВарианта.ИдентификаторЭлемента = ПривестиИдентификаторКИмени(НастройкаВарианта.Идентификатор); - - Если НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда - НастройкаВарианта.ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(ЭлементКД.Параметр)); - ДоступныеПараметры = УзелКД.ДоступныеПараметры; - Если ДоступныеПараметры = Неопределено Тогда - Возврат; - КонецЕсли; - ДоступнаяНастройкаКД = ДоступныеПараметры.НайтиПараметр(ЭлементКД.Параметр); - Если ДоступнаяНастройкаКД = Неопределено Тогда - Возврат; - КонецЕсли; - // ДоступнаяНастройкаКД имеет тип ДоступныйПараметрКомпоновкиДанных: - // Видимость - Булево - Видимость параметра при редактировании значений. - // Параметр - ПараметрКомпоновкиДанных - Имя параметра. - // Значение - Произвольный - Начальное значение. - // ДоступенСписокЗначений - Булево - Можно ли указывать несколько значений. - // ДоступныеЗначения - СписокЗначений, Неопределено - Значения, доступные для выбора. - // БыстрыйВыбор, ВыборГруппИЭлементов, ЗапрещатьНезаполненныеЗначения, - // Использование, Маска, СвязьПоТипу, ФормаВыбора, ФорматРедактирования. - Если Не ДоступнаяНастройкаКД.Видимость Тогда - НастройкаВарианта.ВыводРазрешен = Ложь; - КонецЕсли; - НастройкаВарианта.ДоступнаяНастройкаКД = ДоступнаяНастройкаКД; - НастройкаВарианта.Значение = ЭлементКД.Значение; - Если ДоступнаяНастройкаКД.ДоступенСписокЗначений Тогда - НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; - Иначе - НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - КонецЕсли; - Если ДоступнаяНастройкаКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда Тогда - НастройкаВарианта.ВыводитьФлажок = Ложь; - КонецЕсли; - Иначе - НастройкаВарианта.ПолеКД = ЭлементКД.ЛевоеЗначение; - НастройкаВарианта.Значение = ЭлементКД.ПравоеЗначение; - НастройкаВарианта.ВидСравнения = ЭлементКД.ВидСравнения; - ДоступныеПоляОтбора = УзелКД.ДоступныеПоляОтбора; - Если ДоступныеПоляОтбора = Неопределено Тогда - Возврат; - КонецЕсли; - ДоступнаяНастройкаКД = ДоступныеПоляОтбора.НайтиПоле(ЭлементКД.ЛевоеЗначение); - Если ДоступнаяНастройкаКД = Неопределено Тогда - Возврат; - КонецЕсли; - // ДоступнаяНастройкаКД имеет тип ДоступноеПолеОтбораКомпоновкиДанных. - НастройкаВарианта.ДоступнаяНастройкаКД = ДоступнаяНастройкаКД; - КонецЕсли; - - Если НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке - Или НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии - Или НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке - Или НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - НастройкаВарианта.ВводСписком = Истина; - НастройкаВарианта.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы; - ИначеЕсли НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии - Или НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда - НастройкаВарианта.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; - Иначе - НастройкаВарианта.ВыборГруппИЭлементов = ПривестиЗначениеКТипуГруппыИЭлементы(ДоступнаяНастройкаКД.ВыборГруппИЭлементов); - КонецЕсли; - - НастройкаВарианта.ОписаниеТипов = ДоступнаяНастройкаКД.ТипЗначения; - НастройкаВарианта.ФормаВыбора = ДоступнаяНастройкаКД.ФормаВыбора; - НастройкаВарианта.БыстрыйВыбор = ДоступнаяНастройкаКД.БыстрыйВыбор; - - Если Информация.Поиск.НастройкиВариантаПоПолюКД.Получить(НастройкаВарианта.ПолеКД) = Неопределено Тогда - Информация.Поиск.НастройкиВариантаПоПолюКД.Вставить(НастройкаВарианта.ПолеКД, НастройкаВарианта); - КонецЕсли; - -КонецПроцедуры - -// Добавляет запись в коллекции связей. -// -// Параметры: -// Информация - см. СвойстваРасширеннойИнформацииОНастройках -// НастройкаВарианта - см. ТаблицаНастроекВарианта -// -Процедура ЗарегистрироватьТипыИСвязи(Информация, НастройкаВарианта) - - /////////////////////////////////////////////////////////////////// - // Информация о типах. - - НастройкаВарианта.СвязиПоМетаданным = Новый Массив; - НастройкаВарианта.СвязиПараметровВыбора = Новый Массив; - НастройкаВарианта.ПараметрыВыбора = Новый Массив; - - Если НастройкаВарианта.ВводСписком Тогда - НастройкаВарианта.ОтмеченныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(НастройкаВарианта.Значение); - КонецЕсли; - НастройкаВарианта.ЗапросЗначенийВыбора = Новый Запрос; - НастройкаВарианта.ЗначенияДляВыбора = Новый СписокЗначений; - - ИнформацияОТипах = РасширенноеОписаниеТипов(НастройкаВарианта.ОписаниеТипов, Истина); - ИнформацияОТипах.Вставить("СодержитСсылочныеТипы", Ложь); - ИнформацияОТипах.Вставить("КоличествоСБыстрымВыбором", 0); - ВсеТипыСБыстрымВыбором = ИнформацияОТипах.КоличествоТипов < 10 - И (ИнформацияОТипах.КоличествоТипов = ИнформацияОТипах.ОбъектныеТипы.Количество()); - - Для Каждого Тип Из ИнформацияОТипах.ОбъектныеТипы Цикл - ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); - ПолноеИмя = Информация.СоответствиеИменОбъектовМетаданных.Получить(Тип); - Если ПолноеИмя = Неопределено Тогда // Регистрация имени объекта метаданных. - Если ОбъектМетаданных = Неопределено Тогда - ПолноеИмя = -1; - Иначе - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - КонецЕсли; - Информация.СоответствиеИменОбъектовМетаданных.Вставить(Тип, ПолноеИмя); - КонецЕсли; - Если ПолноеИмя = -1 Тогда - ВсеТипыСБыстрымВыбором = Ложь; - Продолжить; - КонецЕсли; - - ИнформацияОТипах.СодержитСсылочныеТипы = Истина; - - Если ВсеТипыСБыстрымВыбором Тогда - Вид = ВРег(СтрРазделить(ПолноеИмя, ".")[0]); - Если Вид <> "ПЕРЕЧИСЛЕНИЕ" Тогда - Если Вид = "СПРАВОЧНИК" - Или Вид = "ПЛАНВИДОВРАСЧЕТА" - Или Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" - Или Вид = "ПЛАНОБМЕНА" - Или Вид = "ПЛАНСЧЕТОВ" Тогда - Если ОбъектМетаданных.СпособВыбора <> Метаданные.СвойстваОбъектов.СпособВыбора.БыстрыйВыбор Тогда - ВсеТипыСБыстрымВыбором = Ложь; - КонецЕсли; - Иначе - ВсеТипыСБыстрымВыбором = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - // Поиск типа в глобальных связях среди подчиненных. - Найденные = Информация.Связи.ОбъектовМетаданных.НайтиСтроки(Новый Структура("ПодчиненныйТип", Тип)); - Для Каждого СвязьПоМетаданным Из Найденные Цикл - СвязьПоМетаданным.ЕстьПодчиненные = Истина; - СвязьПоМетаданным.Подчиненные.Добавить(НастройкаВарианта); - КонецЦикла; - - // Поиск типа в глобальных связях среди ведущих. - Если НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда - // Поле может быть ведущим если имеет вид сравнения "Равно". - Найденные = Информация.Связи.ОбъектовМетаданных.НайтиСтроки(Новый Структура("ВедущийТип", Тип)); - Для Каждого СвязьПоМетаданным Из Найденные Цикл // Регистрация настройки как ведущей. - СвязьПоМетаданным.ЕстьВедущие = Истина; - СвязьПоМетаданным.Ведущие.Добавить(НастройкаВарианта); - КонецЦикла; - КонецЕсли; - КонецЦикла; - - // Только перечисления или типы с быстрым выбором. - Если ВсеТипыСБыстрымВыбором И ИнформацияОТипах.ОбъектныеТипы.Количество() = ИнформацияОТипах.КоличествоТипов Тогда - НастройкаВарианта.БыстрыйВыбор = Истина; - КонецЕсли; - - НастройкаВарианта.ИнформацияОТипах = ИнформацияОТипах; - НастройкаВарианта.ОписаниеТипов = ИнформацияОТипах.ОписаниеТиповДляФормы; - - /////////////////////////////////////////////////////////////////// - // Информация о связях и параметрах выбора. - - ДоступнаяНастройкаКД = НастройкаВарианта.ДоступнаяНастройкаКД; - Если ДоступнаяНастройкаКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ЗначениеЗаполнено(ДоступнаяНастройкаКД.СвязьПоТипу) Тогда - СтрокаСвязи = Информация.Связи.ПоТипу.Добавить(); - СтрокаСвязи.Подчиненный = НастройкаВарианта; - СтрокаСвязи.ВедущийПолеКД = ДоступнаяНастройкаКД.СвязьПоТипу.Поле; - СтрокаСвязи.ПодчиненныйИмяПараметра = ДоступнаяНастройкаКД.СвязьПоТипу.ЭлементСвязи; - КонецЕсли; - - Для Каждого СтрокаСвязи Из ДоступнаяНастройкаКД.ПолучитьСвязиПараметровВыбора() Цикл - Если ПустаяСтрока(Строка(СтрокаСвязи.Поле)) Тогда - Продолжить; - КонецЕсли; - СтрокаСвязиПараметров = Информация.Связи.ПараметровВыбора.Добавить(); - СтрокаСвязиПараметров.Подчиненный = НастройкаВарианта; - СтрокаСвязиПараметров.ПодчиненныйИмяПараметра = СтрЗаменить(СтрокаСвязи.Имя, "@", ""); - СтрокаСвязиПараметров.ВедущийПолеКД = СтрокаСвязи.Поле; - СтрокаСвязиПараметров.Действие = СтрокаСвязи.ИзменениеЗначения; - КонецЦикла; - - Для Каждого ПараметрВыбораКД Из ДоступнаяНастройкаКД.ПолучитьПараметрыВыбора() Цикл - НастройкаВарианта.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(ПараметрВыбораКД.Имя, ПараметрВыбораКД.Значение)); - КонецЦикла; - - /////////////////////////////////////////////////////////////////// - // Список значений. - - Если ТипЗнч(ДоступнаяНастройкаКД.ДоступныеЗначения) = Тип("СписокЗначений") Тогда - НастройкаВарианта.ЗначенияДляВыбора = ДоступнаяНастройкаКД.ДоступныеЗначения; - НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями = НастройкаВарианта.ЗначенияДляВыбора.Количество() > 0; - Иначе - НастройкиСохраненныеРанее = Информация.ДополнительныеНастройкиЭлементов[НастройкаВарианта.ИдентификаторЭлемента]; - Ограничивать = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиСохраненныеРанее, "ОграничиватьВыборУказаннымиЗначениями"); - Если НастройкиСохраненныеРанее <> Неопределено И Ограничивать = Ложь Тогда - СтарыеЗначенияДляВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиСохраненныеРанее, "ЗначенияДляВыбора"); - Если ТипЗнч(СтарыеЗначенияДляВыбора) = Тип("СписокЗначений") Тогда - НастройкаВарианта.ЗначенияДляВыбора.ТипЗначения = НастройкаВарианта.ОписаниеТипов; - Для Каждого СтарыйЭлементСписка Из СтарыеЗначенияДляВыбора Цикл - Если Не НастройкаВарианта.ОписаниеТипов.СодержитТип(ТипЗнч(СтарыйЭлементСписка.Значение)) Тогда - Продолжить; - КонецЕсли; - Если НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(СтарыйЭлементСписка.Значение) <> Неопределено Тогда - Продолжить; - КонецЕсли; - ЭлементПриемник = НастройкаВарианта.ЗначенияДляВыбора.Добавить(); - ЭлементПриемник.Значение = СтарыйЭлементСписка.Значение; - КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ПриОпределенииПараметровВыбора(Информация, НастройкаВарианта) - ПредставлениеДо = Строка(НастройкаВарианта.ЗначенияДляВыбора); - КоличествоДо = НастройкаВарианта.ЗначенияДляВыбора.Количество(); - - // Механизмы расширения. - ИнтеграцияПодсистемБСП.ПриОпределенииПараметровВыбораВариантыОтчетов(Неопределено, НастройкаВарианта); - // Глобальные настройки вывода типов. - ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(Неопределено, НастройкаВарианта); - // Локальное переопределение для отчета. - Если Информация.НастройкиОтчета.События.ПриОпределенииПараметровВыбора Тогда - ОтчетОбъект(Информация.ОтчетОбъектИлиПолноеИмя).ПриОпределенииПараметровВыбора(Неопределено, НастройкаВарианта); - КонецЕсли; - - // Автоматическое заполнение. - Если НастройкаВарианта.ЗапросЗначенийВыбора.Текст <> "" Тогда - ДобавляемыеЗначения = НастройкаВарианта.ЗапросЗначенийВыбора.Выполнить().Выгрузить().ВыгрузитьКолонку(0); - Для Каждого ЗначениеВФорме Из ДобавляемыеЗначения Цикл - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(НастройкаВарианта.ЗначенияДляВыбора, ЗначениеВФорме, Неопределено, Ложь); - КонецЦикла; - НастройкаВарианта.ЗначенияДляВыбора.СортироватьПоПредставлению(НаправлениеСортировки.Возр); - КонецЕсли; - - // Удаление значений, выбор которых запрещен. - Если НастройкаВарианта.ВводСписком - И НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями - И ТипЗнч(НастройкаВарианта.Значение) = Тип("СписокЗначений") - И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда - Список = НастройкаВарианта.Значение; - Количество = Список.Количество(); - Для Номер = 1 По Количество Цикл - ОбратныйИндекс = Количество - Номер; - Значение = Список[ОбратныйИндекс].Значение; - Если НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(Значение) = Неопределено Тогда - Список.Удалить(ОбратныйИндекс); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если КоличествоДо <> НастройкаВарианта.ЗначенияДляВыбора.Количество() - Или ПредставлениеДо <> Строка(НастройкаВарианта.ЗначенияДляВыбора) Тогда - НастройкаВарианта.СписокЗначенийПереопределен = Истина; - КонецЕсли; -КонецПроцедуры - -Процедура ЗарегистрироватьСвязиОтВедущих(Информация) - Связи = Информация.Связи; - - // Регистрация связи параметров выбора (динамическая связь, отключаемая флажком Использование). - Найденные = Связи.ОбъектовМетаданных.НайтиСтроки(Новый Структура("ЕстьПодчиненные, ЕстьВедущие", Истина, Истина)); - Для Каждого СвязьПоМетаданным Из Найденные Цикл - Для Каждого Ведущий Из СвязьПоМетаданным.Ведущие Цикл - Для Каждого Подчиненный Из СвязьПоМетаданным.Подчиненные Цикл - Если Ведущий.ВыводРазрешен Тогда // Отключаемая связь. - ОписаниеСвязи = Новый Структура; - ОписаниеСвязи.Вставить("ТипСвязи", "ПоМетаданным"); - ОписаниеСвязи.Вставить("Ведущий", Ведущий); - ОписаниеСвязи.Вставить("Подчиненный", Подчиненный); - ОписаниеСвязи.Вставить("ВедущийТип", СвязьПоМетаданным.ВедущийТип); - ОписаниеСвязи.Вставить("ПодчиненныйТип", СвязьПоМетаданным.ПодчиненныйТип); - ОписаниеСвязи.Вставить("ПодчиненныйИмяПараметра", СвязьПоМетаданным.ПодчиненныйРеквизит); - Информация.ОтключаемыеСвязи.Добавить(ОписаниеСвязи); - Подчиненный.СвязиПоМетаданным.Добавить(ОписаниеСвязи); - Иначе // Фиксированный параметр выбора. - Подчиненный.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(СвязьПоМетаданным.ПодчиненныйРеквизит, Ведущий.Значение)); - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - - // Связи по типу. - Для Каждого СвязьПоТипу Из Связи.ПоТипу Цикл - Ведущий = Информация.Поиск.НастройкиВариантаПоПолюКД.Получить(СвязьПоТипу.ВедущийПолеКД); - Если Ведущий = Неопределено Тогда - Продолжить; - КонецЕсли; - Подчиненный = СвязьПоТипу.Подчиненный; - Если Ведущий.ВыводРазрешен Тогда // Отключаемая связь. - ОписаниеСвязи = Новый Структура; - ОписаниеСвязи.Вставить("ТипСвязи", "ПоТипу"); - ОписаниеСвязи.Вставить("Ведущий", Ведущий); - ОписаниеСвязи.Вставить("Подчиненный", Подчиненный); - ОписаниеСвязи.Вставить("ПодчиненныйИмяПараметра", СвязьПоТипу.ПодчиненныйИмяПараметра); - Информация.ОтключаемыеСвязи.Добавить(ОписаниеСвязи); - Подчиненный.СвязьПоТипу = ОписаниеСвязи; - Иначе // Фиксированное ограничения типа. - МассивТипов = Новый Массив; - МассивТипов.Добавить(ТипЗнч(Ведущий.Значение)); - Подчиненный.ОграничениеТипа = Новый ОписаниеТипов(МассивТипов); - КонецЕсли; - КонецЦикла; - - // Связи параметров выбора. - Для Каждого СвязьПараметровВыбора Из Связи.ПараметровВыбора Цикл - Ведущий = СвязьПараметровВыбора.Ведущий; - Подчиненный = СвязьПараметровВыбора.Подчиненный; - Если Ведущий = Неопределено Тогда - ЛучшийВариант = 99; - Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(Новый Структура("ПолеКД", СвязьПараметровВыбора.ВедущийПолеКД), Истина); - Для Каждого ПотенциальныйРодитель Из Найденные Цикл - Если ПотенциальныйРодитель.Тип <> "ЭлементОтбора" - И ПотенциальныйРодитель.Тип <> "ЗначениеПараметраНастроек" Тогда - Продолжить; - КонецЕсли; - Если ПотенциальныйРодитель.Родитель = Подчиненный.Родитель Тогда // Элементы в одной группе. - Если Не ПустаяСтрока(ПотенциальныйРодитель.ИдентификаторЭлемента) Тогда // Ведущий выведен в пользовательские. - Ведущий = ПотенциальныйРодитель; - ЛучшийВариант = 0; - Прервать; // Самый лучший вариант. - Иначе - Ведущий = ПотенциальныйРодитель; - ЛучшийВариант = 1; - КонецЕсли; - ИначеЕсли ЛучшийВариант > 2 И ПотенциальныйРодитель.Владелец = Подчиненный.Владелец Тогда // Элементы в одной коллекции. - Если Не ПустаяСтрока(ПотенциальныйРодитель.ИдентификаторЭлемента) Тогда // Ведущий выведен в пользовательские. - Если ЛучшийВариант > 2 Тогда - Ведущий = ПотенциальныйРодитель; - ЛучшийВариант = 2; - КонецЕсли; - Иначе - Если ЛучшийВариант > 3 Тогда - Ведущий = ПотенциальныйРодитель; - ЛучшийВариант = 3; - КонецЕсли; - КонецЕсли; - ИначеЕсли ЛучшийВариант > 4 И ПотенциальныйРодитель.СтрокаДерева = Подчиненный.СтрокаДерева Тогда // Элементы в одном узле. - Если Не ПустаяСтрока(ПотенциальныйРодитель.ИдентификаторЭлемента) Тогда // Ведущий выведен в пользовательские. - Если ЛучшийВариант > 4 Тогда - Ведущий = ПотенциальныйРодитель; - ЛучшийВариант = 4; - КонецЕсли; - Иначе - Если ЛучшийВариант > 5 Тогда - Ведущий = ПотенциальныйРодитель; - ЛучшийВариант = 5; - КонецЕсли; - КонецЕсли; - ИначеЕсли ЛучшийВариант > 6 Тогда - Ведущий = ПотенциальныйРодитель; - ЛучшийВариант = 6; - КонецЕсли; - КонецЦикла; - Если Ведущий = Неопределено Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - Если Ведущий.ВыводРазрешен Тогда // Отключаемая связь. - ОписаниеСвязи = Новый Структура; - ОписаниеСвязи.Вставить("ТипСвязи", "ПараметровВыбора"); - ОписаниеСвязи.Вставить("Ведущий", Ведущий); - ОписаниеСвязи.Вставить("Подчиненный", Подчиненный); - ОписаниеСвязи.Вставить("ПодчиненныйИмяПараметра", СвязьПараметровВыбора.ПодчиненныйИмяПараметра); - ОписаниеСвязи.Вставить("ПодчиненныйДействие", СвязьПараметровВыбора.Действие); - Информация.ОтключаемыеСвязи.Добавить(ОписаниеСвязи); - Подчиненный.СвязиПараметровВыбора.Добавить(ОписаниеСвязи); - Иначе // Фиксированный параметр выбора. - Если ТипЗнч(Ведущий.Значение) = Тип("ПолеКомпоновкиДанных") Тогда - Продолжить; // Расширенная работа с отборами по полю компоновки данных не поддерживается. - КонецЕсли; - Попытка - ЗначениеЗаполнено = ЗначениеЗаполнено(Ведущий.Значение); - Исключение - ЗначениеЗаполнено = Истина; - КонецПопытки; - Если Не ЗначениеЗаполнено Тогда - Продолжить; - КонецЕсли; - Подчиненный.ПараметрыВыбора.Добавить( - Новый ПараметрВыбора(СвязьПараметровВыбора.ПодчиненныйИмяПараметра, Ведущий.Значение)); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - // Определяет свойства параметров вывода, влияющих на отображение заголовка, параметров данных и отборов: // * Выводить заголовок; // * Заголовок; @@ -2069,7 +606,7 @@ Объект.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; Объект.ИдентификаторПользовательскойНастройки = ""; - УстановитьЗаголовокОтчетаПоУмолчанию(Объект, Контекст); + УстановитьСтандартныйЗаголовокОтчета(Объект, Контекст); // Параметр ВыводитьЗаголовок всегда недоступный. Свойства зависят от параметра Заголовок. СвязанныйОбъект = ПараметрыВывода.Найти("TITLEOUTPUT"); @@ -2104,7 +641,7 @@ КонецЕсли; КонецПроцедуры -Процедура УстановитьЗаголовокОтчетаПоУмолчанию(Заголовок, Контекст) +Процедура УстановитьСтандартныйЗаголовокОтчета(Заголовок, Контекст) Если ЗначениеЗаполнено(Заголовок.Значение) Тогда Возврат; КонецЕсли; @@ -2187,330 +724,6 @@ //////////////////////////////////////////////////////////////////////////////// // Пользовательские настройки -// Добавляет запись с описанием пользовательской настройки. -// -// Параметры: -// Информация - см. СвойстваРасширеннойИнформацииОНастройках -// СвойстваНастройки - СтрокаДереваЗначений - где: -// * Обычная - Булево - -// СтрокаДерева - СтрокаДереваЗначений, Неопределено - -// НастройкаВарианта - СтрокаДереваЗначений, Неопределено - -// -// Возвращаемое значение: -// СтрокаДереваЗначений - -// -Функция ЗарегистрироватьПользовательскуюНастройку(Информация, СвойстваНастройки, СтрокаДерева, НастройкаВарианта) - ПользовательскаяНастройкаКД = СвойстваНастройки.ПользовательскаяНастройкаКД; - - РежимОтображения = ПользовательскаяНастройкаКД.РежимОтображения; - Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда - Возврат СвойстваНастройки; - КонецЕсли; - - Если Не ЗначениеЗаполнено(СвойстваНастройки.Идентификатор) Тогда - Возврат СвойстваНастройки; - КонецЕсли; - СвойстваНастройки.ИдентификаторЭлемента = ПривестиИдентификаторКИмени(СвойстваНастройки.Идентификатор); - - Если НастройкаВарианта <> Неопределено Тогда - Если НастройкаВарианта.Владелец <> Неопределено Тогда - СвойстваНастройки.УзелКД = НастройкаВарианта.Владелец.ЭлементКД; - КонецЕсли; - СвойстваНастройки.СтрокаДерева = НастройкаВарианта.СтрокаДерева; - СвойстваНастройки.НастройкаВариантаКД = НастройкаВарианта.ЭлементКД; - СвойстваНастройки.НастройкаВарианта = НастройкаВарианта; - СвойстваНастройки.Подтип = НастройкаВарианта.Подтип; - СвойстваНастройки.ПолеКД = НастройкаВарианта.ПолеКД; - СвойстваНастройки.ДоступнаяНастройкаКД = НастройкаВарианта.ДоступнаяНастройкаКД; - СвойстваНастройки.ИнформацияОТипах = НастройкаВарианта.ИнформацияОТипах; - СвойстваНастройки.ОписаниеТипов = НастройкаВарианта.ОписаниеТипов; - Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто Тогда - РежимОтображения = СвойстваНастройки.НастройкаВариантаКД.РежимОтображения; - КонецЕсли; - Иначе - СвойстваНастройки.УзелКД = СтрокаДерева.УзелКД; - СвойстваНастройки.СтрокаДерева = СтрокаДерева; - СвойстваНастройки.Тип = СтрокаДерева.Тип; - СвойстваНастройки.Подтип = СтрокаДерева.Подтип; - СвойстваНастройки.НастройкаВариантаКД = СвойстваНастройки.УзелКД; - Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто Тогда - РежимОтображения = СвойстваНастройки.УзелКД.РежимОтображения; - КонецЕсли; - КонецЕсли; - - Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда - СвойстваНастройки.Быстрая = Истина; - Информация.ЕстьБыстрыеНастройки = Истина; - ИначеЕсли РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда - СвойстваНастройки.Обычная = Истина; - Информация.ЕстьОбычныеНастройки = Истина; - ИначеЕсли Информация.ТолькоПользовательские Тогда - Возврат СвойстваНастройки; - КонецЕсли; - - // Определение доступной настройки. - Если СвойстваНастройки.Тип = "НастройкиВложенногоОбъекта" Тогда - СвойстваНастройки.ДоступнаяНастройкаКД = Информация.НастройкиКД.ДоступныеОбъекты.Элементы.Найти(СвойстваНастройки.СтрокаДерева.УзелКД.ИдентификаторОбъекта); - КонецЕсли; - - Если Информация.ТолькоПользовательские Тогда - Если Информация.ТолькоБыстрые Тогда - СвойстваНастройки.ВыводРазрешен = СвойстваНастройки.Быстрая; - Иначе - СвойстваНастройки.ВыводРазрешен = Истина; - КонецЕсли; - КонецЕсли; - - СвойстваНастройки.ВыводитьФлажок = Истина; - СвойстваНастройки.ВыводитьТолькоФлажок = Ложь; - - ЗаполнитьПредставлениеИСостояниеНастройки( - СвойстваНастройки, - СвойстваНастройки.НастройкаВариантаКД, - СвойстваНастройки.ПользовательскаяНастройкаКД, - СвойстваНастройки.ДоступнаяНастройкаКД); - - Если СвойстваНастройки.Состояние = "ПометкаУдаления" Тогда - Информация.ЕстьНесуществующиеПоля = Истина; - СвойстваНастройки.ВыводРазрешен = Ложь; - КонецЕсли; - - Если СвойстваНастройки.Тип = "ГруппаЭлементовОтбора" - Или СвойстваНастройки.Тип = "НастройкиВложенногоОбъекта" - Или СвойстваНастройки.Тип = "Группировка" - Или СвойстваНастройки.Тип = "Таблица" - Или СвойстваНастройки.Тип = "ГруппировкаТаблицы" - Или СвойстваНастройки.Тип = "Диаграмма" - Или СвойстваНастройки.Тип = "ГруппировкаДиаграммы" - Или СвойстваНастройки.Тип = "ЭлементУсловногоОформления" Тогда - - СвойстваНастройки.ВыводитьТолькоФлажок = Истина; - - ИначеЕсли СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" - Или СвойстваНастройки.Тип = "ЭлементОтбора" Тогда - - Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда - СвойстваНастройки.Значение = ПользовательскаяНастройкаКД.Значение; - Иначе - СвойстваНастройки.Значение = ПользовательскаяНастройкаКД.ПравоеЗначение; - КонецЕсли; - - // Определение типа значения настройки. - Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда - Если СвойстваНастройки.ДоступнаяНастройкаКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда Тогда - СвойстваНастройки.ВыводитьФлажок = Ложь; - ПользовательскаяНастройкаКД.Использование = Истина; - КонецЕсли; - Если СвойстваНастройки.ДоступнаяНастройкаКД.ДоступенСписокЗначений Тогда - СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; - Иначе - СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - КонецЕсли; - ИначеЕсли СвойстваНастройки.Тип = "ЭлементОтбора" Тогда - СвойстваНастройки.ВидСравнения = ПользовательскаяНастройкаКД.ВидСравнения; - КонецЕсли; - - Если СвойстваНастройки.ИнформацияОТипах.СодержитТипПериод - И СвойстваНастройки.ИнформацияОТипах.КоличествоТипов = 1 Тогда - - СвойстваНастройки.ТипЭлементов = "СтандартныйПериод"; - - ИначеЕсли Не СвойстваНастройки.ВыводитьФлажок - И СвойстваНастройки.ИнформацияОТипах.СодержитТипБулево - И СвойстваНастройки.ИнформацияОТипах.КоличествоТипов = 1 Тогда - - СвойстваНастройки.ТипЭлементов = "ТолькоФлажокЗначения"; - - ИначеЕсли СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено - Или СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда - - СвойстваНастройки.ТипЭлементов = "УсловиеВРежимеПросмотра"; - - ИначеЕсли СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке - Или СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии - Или СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке - Или СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - - СвойстваНастройки.ВводСписком = Истина; - СвойстваНастройки.ТипЭлементов = "СписокСПодбором"; - СвойстваНастройки.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы; - - Иначе - - СвойстваНастройки.ТипЭлементов = "СвязьСКомпоновщиком"; - Если СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии - Или СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда - СвойстваНастройки.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; - КонецЕсли; - - КонецЕсли; - - Если СвойстваНастройки.ВыборГруппИЭлементов = Неопределено Тогда - СвойстваНастройки.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; - КонецЕсли; - - ИначеЕсли СвойстваНастройки.Тип = "ВыбранныеПоля" - Или СвойстваНастройки.Тип = "Порядок" - Или СвойстваНастройки.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СвойстваНастройки.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или СвойстваНастройки.Тип = "Отбор" - Или СвойстваНастройки.Тип = "УсловноеОформление" - Или СвойстваНастройки.Тип = "СтруктураНастроек" Тогда - - СвойстваНастройки.ТипЭлементов = "СвязьСКомпоновщиком"; - СвойстваНастройки.ВыводитьФлажок = Ложь; - - Иначе - - СвойстваНастройки.ТипЭлементов = "СвязьСКомпоновщиком"; - - КонецЕсли; - - Если СвойстваНастройки.ВыводитьТолькоФлажок Тогда - СвойстваНастройки.ТипЭлементов = ""; - ИначеЕсли СвойстваНастройки.Быстрая И СвойстваНастройки.ТипЭлементов = "СписокСПодбором" Тогда - СвойстваНастройки.ТипЭлементов = "СвязьСКомпоновщиком"; - КонецЕсли; - - Возврат СвойстваНастройки; -КонецФункции - -// Определяет заголовок и признак пометки на удаление элемента настройки отчета. -// -// Параметры: -// СвойстваНастройки - СтрокаДереваЗначений, Неопределено - -// * Обычная - Булево - -// НастройкаВариантаКД - ЭлементОтбораКомпоновкиДанных - -// - ЗначениеПараметраКомпоновкиДанных - -// - ВыбранноеПолеКомпоновкиДанных - -// - ГруппаВыбранныхПолейКомпоновкиДанных - -// ПользовательскаяНастройкаКД - Неопределено - -// ДоступнаяНастройкаКД - ДоступноеПолеОтбораКомпоновкиДанных, ДоступныйПараметрКомпоновкиДанных - -// -Процедура ЗаполнитьПредставлениеИСостояниеНастройки(СвойстваНастройки, НастройкаВариантаКД, ПользовательскаяНастройкаКД, ДоступнаяНастройкаКД) - Если ПользовательскаяНастройкаКД = Неопределено Тогда - ПользовательскаяНастройкаКД = НастройкаВариантаКД; - КонецЕсли; - - СтруктураПредставлений = Новый Структура("Представление, ПредставлениеПользовательскойНастройки", "", ""); - ЗаполнитьЗначенияСвойств(СтруктураПредставлений, НастройкаВариантаКД); - - СвойстваНастройки.ВыводитьТолькоФлажок = ЗначениеЗаполнено(СтруктураПредставлений.Представление); - - Если ЗначениеЗаполнено(СтруктураПредставлений.ПредставлениеПользовательскойНастройки) Тогда - Представление = СтруктураПредставлений.ПредставлениеПользовательскойНастройки; - ИначеЕсли ЗначениеЗаполнено(СтруктураПредставлений.Представление) И СтруктураПредставлений.Представление <> "1" Тогда - Представление = СтруктураПредставлений.Представление; - Иначе - Представление = ""; - КонецЕсли; - СвойстваНастройки.Представление = СокрЛП(Представление); - - // Представление "По умолчанию". - Если ДоступнаяНастройкаКД <> Неопределено И ЗначениеЗаполнено(ДоступнаяНастройкаКД.Заголовок) Тогда - ПредставлениеПоУмолчанию = ДоступнаяНастройкаКД.Заголовок; - ИначеЕсли ЗначениеЗаполнено(СвойстваНастройки.Подтип) Тогда - Если СвойстваНастройки.Подтип = "ДиаграммаСерии" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Серии'"); - ИначеЕсли СвойстваНастройки.Подтип = "ДиаграммаТочки" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Точки'"); - ИначеЕсли СвойстваНастройки.Подтип = "ТаблицаСтроки" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Строки'"); - ИначеЕсли СвойстваНастройки.Подтип = "ТаблицаКолонки" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Колонки'"); - ИначеЕсли СвойстваНастройки.Подтип = "Отчет" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Отчет'"); - Иначе - ПредставлениеПоУмолчанию = Строка(СвойстваНастройки.Подтип); - КонецЕсли; - - // Параметры и отборы. - ИначеЕсли СвойстваНастройки.Тип = "Отбор" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Отбор'"); - ИначеЕсли СвойстваНастройки.Тип = "ГруппаЭлементовОтбора" Тогда - ПредставлениеПоУмолчанию = Строка(НастройкаВариантаКД.ТипГруппы); - ИначеЕсли СвойстваНастройки.Тип = "ЭлементОтбора" Тогда - ПредставлениеПоУмолчанию = Строка(НастройкаВариантаКД.ЛевоеЗначение); - ИначеЕсли СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда - ПредставлениеПоУмолчанию = Строка(НастройкаВариантаКД.Параметр); - - // Сортировки. - ИначеЕсли СвойстваНастройки.Тип = "Порядок" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Сортировка'"); - ИначеЕсли СвойстваНастройки.Тип = "АвтоЭлементПорядка" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Авто (сортировки родителя)'"); - ИначеЕсли СвойстваНастройки.Тип = "ЭлементПорядка" Тогда - ПредставлениеПоУмолчанию = Строка(НастройкаВариантаКД.Поле); - - // Выбранные поля. - ИначеЕсли СвойстваНастройки.Тип = "ВыбранныеПоля" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Поля'"); - ИначеЕсли СвойстваНастройки.Тип = "ВыбранноеПоле" Тогда - ПредставлениеПоУмолчанию = Строка(НастройкаВариантаКД.Поле); - ИначеЕсли СвойстваНастройки.Тип = "АвтоВыбранноеПоле" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Авто (поля родителя)'"); - ИначеЕсли СвойстваНастройки.Тип = "ГруппаВыбранныхПолей" Тогда - ПредставлениеПоУмолчанию = НастройкаВариантаКД.Заголовок; - Если НастройкаВариантаКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда - ПредставлениеПоУмолчанию = ПредставлениеПоУмолчанию + " (" + Строка(НастройкаВариантаКД.Расположение) + ")"; - КонецЕсли; - - // Оформление. - ИначеЕсли СвойстваНастройки.Тип = "УсловноеОформление" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Оформление'"); - ИначеЕсли СвойстваНастройки.Тип = "ЭлементУсловногоОформления" Тогда - ПредставлениеПоУмолчанию = ОтчетыКлиентСервер.ПредставлениеЭлементаУсловногоОформления( - ПользовательскаяНастройкаКД, - НастройкаВариантаКД, - СвойстваНастройки.Состояние); - - // Структура. - ИначеЕсли СвойстваНастройки.Тип = "Группировка" - Или СвойстваНастройки.Тип = "ГруппировкаТаблицы" - Или СвойстваНастройки.Тип = "ГруппировкаДиаграммы" Тогда - ПредставлениеПоУмолчанию = СокрЛП(Строка(НастройкаВариантаКД.ПоляГруппировки)); - Если ПустаяСтрока(ПредставлениеПоУмолчанию) Тогда - ПредставлениеПоУмолчанию = НСтр("ru = '<Детальные записи>'"); - Иначе - ДоступныеПоляКД = НастройкаВариантаКД.ПоляГруппировки.ДоступныеПоляПолейГруппировок; - Для Каждого ПолеГруппировкиКД Из НастройкаВариантаКД.ПоляГруппировки.Элементы Цикл - Если ТипЗнч(ПолеГруппировкиКД) = Тип("ПолеГруппировкиКомпоновкиДанных") - И ДоступныеПоляКД.НайтиПоле(ПолеГруппировкиКД.Поле) = Неопределено Тогда - СвойстваНастройки.Состояние = "ПометкаУдаления"; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - ИначеЕсли СвойстваНастройки.Тип = "Таблица" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Таблица'"); - ИначеЕсли СвойстваНастройки.Тип = "Диаграмма" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Диаграмма'"); - ИначеЕсли СвойстваНастройки.Тип = "НастройкиВложенногоОбъекта" Тогда - ПредставлениеПоУмолчанию = Строка(ПользовательскаяНастройкаКД); - Если ПустаяСтрока(ПредставлениеПоУмолчанию) Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Вложенная группировка'"); - КонецЕсли; - ИначеЕсли СвойстваНастройки.Тип = "СтруктураНастроек" Тогда - ПредставлениеПоУмолчанию = НСтр("ru = 'Структура'"); - Иначе - ПредставлениеПоУмолчанию = Строка(СвойстваНастройки.Тип); - КонецЕсли; - СвойстваНастройки.ПредставлениеПоУмолчанию = СокрЛП(ПредставлениеПоУмолчанию); - - Если СвойстваНастройки.ДоступнаяНастройкаКД = Неопределено - И (СвойстваНастройки.Тип = "ЭлементОтбора" - Или СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" - Или СвойстваНастройки.Тип = "ЭлементПорядка" - Или СвойстваНастройки.Тип = "ВыбранноеПоле")Тогда - СвойстваНастройки.Состояние = "ПометкаУдаления"; - КонецЕсли; - - Если Не ЗначениеЗаполнено(СвойстваНастройки.Представление) Тогда - СвойстваНастройки.Представление = СвойстваНастройки.ПредставлениеПоУмолчанию; - КонецЕсли; - -КонецПроцедуры - // Собирает статистику по количеству пользовательских настроек в разрезе режимов отображения. // // Параметры: @@ -2680,35 +893,22 @@ // которые доступны для переопределения в модуле объекта отчета. // // Параметры: -// ТипФормы - ТипФормыОтчета - -// КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - +// ТипФормы - ТипФормыОтчета +// КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных // ДополнительныеПараметры - см. ВариантыОтчетов.НастройкиФормыОтчета // // Возвращаемое значение: -// Структура - содержит: -// * Группы - ТаблицаЗначений - -// * Поля - ТаблицаЗначений - +// Структура: +// * Группы - см. СвойстваГруппыЭлементовФормы +// * Поля - см. ПоляЭлементовФормыНастроек // -Функция СвойстваЭлементовФормыНастроек(ТипФормы, КомпоновщикНастроек, ДополнительныеПараметры) +Функция СвойстваЭлементовФормыНастроек(ТипФормы, КомпоновщикНастроек, ДополнительныеПараметры) Экспорт #Область ПодготовкаСтруктуры СвойстваЭлементов = Новый Структура("Группы, Поля"); СвойстваЭлементов.Группы = Новый Структура; - ОписаниеСтроки = Новый ОписаниеТипов("Строка"); - ОписаниеЧисла = Новый ОписаниеТипов("Число"); - - Поля = Новый ТаблицаЗначений; - Поля.Колонки.Добавить("ИндексНастройки", ОписаниеЧисла); - Поля.Колонки.Добавить("ИдентификаторНастройки", ОписаниеСтроки); - Поля.Колонки.Добавить("Настройки"); - Поля.Колонки.Добавить("ЭлементНастройки"); - Поля.Колонки.Добавить("ОписаниеНастройки"); - Поля.Колонки.Добавить("Представление", ОписаниеСтроки); - Поля.Колонки.Добавить("ИдентификаторГруппы", ОписаниеСтроки); - Поля.Колонки.Добавить("ПоложениеЗаголовка", Новый ОписаниеТипов("ПоложениеЗаголовкаЭлементаФормы")); - Поля.Колонки.Добавить("РастягиватьПоГоризонтали"); - Поля.Колонки.Добавить("Ширина", ОписаниеЧисла); + Поля = ПоляЭлементовФормыНастроек(); ДоступныеРежимы = Новый Массив; ДоступныеРежимы.Добавить(РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); @@ -2793,13 +993,54 @@ Возврат СвойстваЭлементов; КонецФункции +// Возвращаемое значение: +// ТаблицаЗначений: +// * ИндексНастройки - Число +// * ИдентификаторНастройки - Строка +// * Настройки - НастройкиКомпоновкиДанных +// * ЭлементНастройки - ЭлементОтбораКомпоновкиДанных +// - ЗначениеПараметраНастроекКомпоновкиДанных +// - ВыбранноеПолеКомпоновкиДанных +// - ЭлементПорядкаКомпоновкиДанных +// - ЭлементУсловногоОформления +// * ОписаниеНастройки - ДоступноеПолеОтбораКомпоновкиДанных +// - ДоступныеПараметрыКомпоновкиДанных +// - ДоступноеПолеКомпоновкиДанных +// * Представление - Строка +// * ИдентификаторГруппы - Строка +// * ПоложениеЗаголовка - ПоложениеЗаголовкаЭлементаФормы +// * РастягиватьПоГоризонтали - Булево +// - Неопределено +// * Ширина - Число +// +Функция ПоляЭлементовФормыНастроек() + + ОписаниеСтроки = Новый ОписаниеТипов("Строка"); + ОписаниеЧисла = Новый ОписаниеТипов("Число"); + + Поля = Новый ТаблицаЗначений; + Поля.Колонки.Добавить("ИндексНастройки", ОписаниеЧисла); + Поля.Колонки.Добавить("ИдентификаторНастройки", ОписаниеСтроки); + Поля.Колонки.Добавить("Настройки"); + Поля.Колонки.Добавить("ЭлементНастройки"); + Поля.Колонки.Добавить("ОписаниеНастройки"); + Поля.Колонки.Добавить("Представление", ОписаниеСтроки); + Поля.Колонки.Добавить("ИдентификаторГруппы", ОписаниеСтроки); + Поля.Колонки.Добавить("ПоложениеЗаголовка", Новый ОписаниеТипов("ПоложениеЗаголовкаЭлементаФормы")); + Поля.Колонки.Добавить("РастягиватьПоГоризонтали"); + Поля.Колонки.Добавить("Ширина", ОписаниеЧисла); + + Возврат Поля; + +КонецФункции + // Получение сведений об основных настройках, включенных в состав пользовательских. // Возвращает проиндексированные свойства пользовательских настроек отчета такие как соответствующие // элементы основных настроек, дополнительные поля компоновки данных. // // Параметры: -// Настройки - НастройкиКомпоновкиДанных - +// Настройки - НастройкиКомпоновкиДанных // // Возвращаемое значение: // см. ВидыСведений @@ -2947,14 +1188,14 @@ // Добавляет сведения о элементах отборов, значениях параметров и т.д. // // Параметры: -// Настройки - НастройкиКомпоновкиДанных - -// Свойство - ОтборКомпоновкиДанных - -// - ЗначенияПараметровДанныхКомпоновкиДанных - -// - ЗначенияПараметровВыводаКомпоновкиДанных - -// - УсловноеОформлениеКомпоновкиДанных - -// ИдентификаторСвойства - Строка - +// Настройки - НастройкиКомпоновкиДанных +// Свойство - ОтборКомпоновкиДанных +// - ЗначенияПараметровДанныхКомпоновкиДанных +// - ЗначенияПараметровВыводаКомпоновкиДанных +// - УсловноеОформлениеКомпоновкиДанных +// ИдентификаторСвойства - Строка // Сведения - см. ВидыСведений -// ДополнительныеСвойства - Структура - +// ДополнительныеСвойства - Структура // Процедура ПолучитьСведенияОЭлементахСвойстваНастроек(Настройки, Свойство, ИдентификаторСвойства, Сведения, ДополнительныеСвойства) СвойстваСЭлементами = Новый Структура("Отбор, ПараметрыДанных, ПараметрыВывода, УсловноеОформление"); @@ -3033,13 +1274,13 @@ // Конструктор индекса свойств пользовательских настроек. // // Возвращаемое значение: -// Структура - содержит: -// * Настройки - НастройкиКомпоновкиДанных - -// * ЭлементНастройки - ЭлементОтбораКомпоновкиДанных - -// - ЗначениеПараметраКомпоновкиДанных - -// - ВыбранноеПолеКомпоновкиДанных - -// * ОписаниеНастройки - ДоступноеПолеОтбораКомпоновкиДанных - -// - ДоступныйПараметрКомпоновкиДанных - +// Структура: +// * Настройки - НастройкиКомпоновкиДанных +// * ЭлементНастройки - ЭлементОтбораКомпоновкиДанных +// - ЗначениеПараметраКомпоновкиДанных +// - ВыбранноеПолеКомпоновкиДанных +// * ОписаниеНастройки - ДоступноеПолеОтбораКомпоновкиДанных +// - ДоступныйПараметрКомпоновкиДанных // Функция ВидыСведений() Возврат Новый Структура("Настройки, ЭлементНастройки, ОписаниеНастройки"); @@ -3050,13 +1291,14 @@ // Формирует коллекции имен реквизитов, сгруппированных по стилям: Период, Флажок, Список. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - -// ВидыЭлементов - Массив из Строка - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета +// ВидыЭлементов - Массив из Строка // // Возвращаемое значение: -// Структура - содержит: -// * Сгенерированных - Структура - -// * Предопределенных - Структура - +// Структура: +// * Сгенерированных - Структура +// * Предопределенных - Структура // Функция ИменаРеквизитовЭлементовНастроек(Форма, ВидыЭлементов) ИменаРеквизитовПредопределенных = Новый Структура; @@ -3071,13 +1313,17 @@ Для Каждого Реквизит Из Реквизиты Цикл Для Каждого ВидЭлемента Из ВидыЭлементов Цикл Если СтрНачинаетсяС(Реквизит.Имя, ВидЭлемента) - И СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрЗаменить(Реквизит.Имя, ВидЭлемента, "")) Тогда - ИменаРеквизитовПредопределенных[ВидЭлемента].Добавить(Реквизит.Имя); + И СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрЗаменить(Реквизит.Имя, ВидЭлемента, "")) Тогда + + ИменаРеквизитовПоВидам = ИменаРеквизитовПредопределенных[ВидЭлемента]; // Массив из Строка + ИменаРеквизитовПоВидам.Добавить(Реквизит.Имя); КонецЕсли; Если СтрНачинаетсяС(Реквизит.Имя, "КомпоновщикНастроекПользовательскиеНастройкиЭлемент") И СтрЗаканчиваетсяНа(Реквизит.Имя, ВидЭлемента) Тогда - ИменаРеквизитовСгенерированных[ВидЭлемента].Добавить(Реквизит.Имя); + + ИменаРеквизитовПоВидам = ИменаРеквизитовСгенерированных[ВидЭлемента]; // Массив из Строка + ИменаРеквизитовПоВидам.Добавить(Реквизит.Имя); КонецЕсли; КонецЦикла; КонецЦикла; @@ -3285,12 +1531,13 @@ // созданных методом СоздатьЭлементыФормыПользовательскихНастроек. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - где: -// * Элементы - ВсеЭлементыФормы - -// * Отчет - ОтчетОбъект - -// ГруппаЭлементов - ГруппаФормы - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета: +// * Элементы - ВсеЭлементыФормы +// * Отчет - ОтчетОбъект +// ГруппаЭлементов - ГруппаФормы // ЭлементыНастроек - см. ПалитраКоллекцииЭлементовНастроек -// ОписаниеНастроек - ТаблицаЗначений - +// ОписаниеНастроек - ТаблицаЗначений // Процедура НайтиЭлементыФормыНастроек(Форма, ГруппаЭлементов, ЭлементыНастроек, ОписаниеНастроек) ПользовательскиеНастройки = Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; @@ -3393,11 +1640,13 @@ // видимость, Ширина, РастягиватьПоГоризонтали и др. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - -// ЭлементыНастроек - см. ПалитраКоллекцииЭлементовНастроек -// СвойстваЭлементов - Структура - содержит: -// * Группы - Структура - -// * Поля - ТаблицаЗначений - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета: +// * Отчет - ОтчетОбъект +// ЭлементыНастроек - см. ПалитраКоллекцииЭлементовНастроек +// СвойстваЭлементов - Структура: +// * Группы - Структура +// * Поля - ТаблицаЗначений // Процедура УстановитьСвойстваЭлементовФормыНастроек(Форма, ЭлементыНастроек, СвойстваЭлементов) КомпоновщикНастроек = Форма.Отчет.КомпоновщикНастроек; @@ -3436,10 +1685,22 @@ Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда Поле.Заголовок = Поле.Заголовок + ":"; ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Если Исключения.Найти(ЭлементНастройки.ВидСравнения) <> Неопределено Тогда + + Условие = ЭлементНастройки.ВидСравнения; + Если ЗначениеЗаполнено(ЭлементНастройки.ИдентификаторПользовательскойНастройки) Тогда + + ЭлементПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти( + ЭлементНастройки.ИдентификаторПользовательскойНастройки); + + Если ЭлементПользовательскойНастройки <> Неопределено Тогда + Условие = ЭлементПользовательскойНастройки.ВидСравнения; + КонецЕсли; + КонецЕсли; + + Если Исключения.Найти(Условие) <> Неопределено Тогда Поле.Заголовок = Поле.Заголовок + ":"; ИначеЕсли Не ЗначениеЗаполнено(ЭлементНастройки.Представление) Тогда - Поле.Заголовок = Поле.Заголовок + " (" + НРег(ЭлементНастройки.ВидСравнения) + "):"; + Поле.Заголовок = Поле.Заголовок + " (" + НРег(Условие) + "):"; КонецЕсли; КонецЕсли; КонецЦикла; @@ -3520,7 +1781,7 @@ Если РасширенноеОписаниеТипа.КоличествоТипов = 1 Тогда Если РасширенноеОписаниеТипа.СодержитТипЧисло Тогда - Поле.КнопкаВыбора = Истина; + Поле.КнопкаВыбора = (Поле.СписокВыбора.Количество() = 0); Если Поле.РастягиватьПоГоризонтали = Истина Тогда Поле.РастягиватьПоГоризонтали = Ложь; КонецЕсли; @@ -3545,9 +1806,9 @@ // // Параметры: // ЭлементыНастроек - см. ПалитраКоллекцииЭлементовНастроек -// СвойстваЭлементов - Структура - Описание: -// * Группы - Структура - -// * Поля - ТаблицаЗначений - +// СвойстваЭлементов - Структура: +// * Группы - Структура +// * Поля - ТаблицаЗначений // Процедура ВынестиСписокВОтдельнуюГруппу(ЭлементыНастроек, СвойстваЭлементов) Поиск = Новый Структура("ЭтоСписок", Истина); @@ -4062,10 +2323,11 @@ // Устанавливает значения свойствам стандартного периода: ДатаНачала, ДатаОкончания // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - где: -// * Элементы - ВсеЭлементыФормы - -// * Отчет - ОтчетОбъект - -// Индекс - Число - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета: +// * Элементы - ВсеЭлементыФормы +// * Отчет - ОтчетОбъект +// Индекс - Число // Процедура ИнициализироватьПериод(Форма, Индекс) ПользовательскиеНастройки = Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; @@ -4102,14 +2364,16 @@ // Создает элементы формы типа ТаблицаФормы, ссылающиеся на реквизит типа СписокЗначений // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - где: -// * Отчет - ОтчетОбъект - -// ЭлементНастройки - СтрокаТаблицыЗначений - -// ОписаниеЭлементаНастройки - СтрокаТаблицыЗначений, Неопределено - -// ИмяСписка - Строка - -// ИменаРеквизитов - Структура - содержит: -// * Сгенерированных - Структура - -// * Предопределенных - Структура - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета: +// * Отчет - ОтчетОбъект +// ЭлементНастройки - СтрокаТаблицыЗначений +// ОписаниеЭлементаНастройки - СтрокаТаблицыЗначений +// - Неопределено +// ИмяСписка - Строка +// ИменаРеквизитов - Структура: +// * Сгенерированных - Структура +// * Предопределенных - Структура // Процедура ДобавитьЭлементыСписка(Форма, ЭлементНастройки, ОписаниеЭлементаНастройки, ИмяСписка, ИменаРеквизитов) Элементы = Форма.Элементы; @@ -4356,9 +2620,10 @@ // Устанавливает значение флажка. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - где: -// * Отчет - ОтчетОбъект - -// Индекс - Число - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета: +// * Отчет - ОтчетОбъект +// Индекс - Число // Процедура ИнициализироватьФлажок(Форма, Индекс) ПользовательскиеНастройки = Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; @@ -4378,14 +2643,14 @@ // Запоминает состояние формы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// ИмяТаблицы - Строка - -// КлючевыеКолонки - Строка - +// Форма - ФормаКлиентскогоПриложения +// ИмяТаблицы - Строка +// КлючевыеКолонки - Строка // // Возвращаемое значение: -// Структура - содержит: -// * Текущая - Неопределено - -// * Выделенные - Массив - +// Структура: +// * Текущая - Неопределено +// * Выделенные - Массив // Функция ЗапомнитьВыделенныеСтроки(Форма, ИмяТаблицы, КлючевыеКолонки) Экспорт ТаблицаРеквизит = Форма[ИмяТаблицы]; @@ -4426,9 +2691,9 @@ // Восстанавливает состояние формы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// ИмяТаблицы - Строка - -// КлючевыеКолонки - Строка - +// Форма - ФормаКлиентскогоПриложения +// ИмяТаблицы - Строка +// КлючевыеКолонки - Строка // Процедура ВосстановитьВыделенныеСтроки(Форма, ИмяТаблицы, СтрокиТаблицы) Экспорт ТаблицаРеквизит = Форма[ИмяТаблицы]; @@ -4467,7 +2732,7 @@ // Проверяет наличие внешних наборов данных. // // Параметры: -// НаборыДанных - НаборыДанныхМакетаКомпоновкиДанных - Коллекция проверяемых наборов данных. +// НаборыДанных - НаборыДанныхМакетаКомпоновкиДанных - коллекция проверяемых наборов данных. // // Возвращаемое значение: // Булево - Истина, если есть внешние наборы данных. @@ -4565,13 +2830,16 @@ // Добавляет выбранное поле компоновки данных. // // Параметры: -// Куда - КомпоновщикНастроекКомпоновкиДанных, НастройкиКомпоновкиДанных, ВыбранныеПоляКомпоновкиДанных - +// Куда - КомпоновщикНастроекКомпоновкиДанных +// - НастройкиКомпоновкиДанных +// - ВыбранныеПоляКомпоновкиДанных - // Коллекция в которую требуется добавить выбранное поле. -// ИмяИлиПолеКД - Строка, ПолеКомпоновкиДанных - Имя поля. -// Заголовок - Строка - Необязательный. Представление поля. +// ИмяИлиПолеКД - Строка +// - ПолеКомпоновкиДанных - имя поля. +// Заголовок - Строка - необязательный. Представление поля. // // Возвращаемое значение: -// ВыбранноеПолеКомпоновкиДанных - Добавленное выбранное поле. +// ВыбранноеПолеКомпоновкиДанных - добавленное выбранное поле. // Функция ДобавитьВыбранноеПоле(Куда, ИмяИлиПолеКД, Заголовок = "") Экспорт @@ -4599,6 +2867,50 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Контекстные варианты + +Процедура ДобавитьВариантыКонтекста(Отчет, Варианты, ВариантыКонтекста) Экспорт + + Если ВариантыКонтекста.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ОтсутствующиеВарианты = Новый Массив; + + Для Каждого ВариантКонтекста Из ВариантыКонтекста Цикл + + Если Варианты.Найти(ВариантКонтекста.Значение, "КлючВарианта") = Неопределено Тогда + ОтсутствующиеВарианты.Добавить(ВариантКонтекста.Значение); + КонецЕсли; + + КонецЦикла; + + Если ОтсутствующиеВарианты.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.*, + | ВариантыОтчетов.Представление КАК Наименование + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.КлючВарианта В (&ОтсутствующиеВарианты)"); + + Запрос.УстановитьПараметр("Отчет", Отчет); + Запрос.УстановитьПараметр("ОтсутствующиеВарианты", ОтсутствующиеВарианты); + + Вариант = Запрос.Выполнить().Выбрать(); + + Пока Вариант.Следующий() Цикл + ЗаполнитьЗначенияСвойств(Варианты.Добавить(), Вариант); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Прочее @@ -4788,46 +3100,14 @@ Возврат СтрЗаменить(СтрЗаменить(Строка(Идентификатор), "-", ""), ".", "_"); КонецФункции -// Приводит значение типа ИспользованиеГруппИЭлементов к типу ГруппыИЭлементы. -// Для других типов возвращает значение Авто. -// -Функция ПривестиЗначениеКТипуГруппыИЭлементы(ИсходноеЗначение, ЗначениеПоУмолчанию = Неопределено) - Тип = ТипЗнч(ИсходноеЗначение); - Если Тип = Тип("ГруппыИЭлементы") Тогда - Возврат ИсходноеЗначение; - ИначеЕсли Тип = Тип("ИспользованиеГруппИЭлементов") Тогда - Если ИсходноеЗначение = ИспользованиеГруппИЭлементов.Элементы Тогда - Возврат ГруппыИЭлементы.Элементы; - ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.ГруппыИЭлементы Тогда - Возврат ГруппыИЭлементы.ГруппыИЭлементы; - ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.Группы Тогда - Возврат ГруппыИЭлементы.Группы; - КонецЕсли; - ИначеЕсли Тип = Тип("ВидСравненияКомпоновкиДанных") Тогда - Если ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВСписке - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВСписке - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - // Виды сравнения ВСпискеПоИерархии (В группе из списка) и НеВСпискеПоИерархии (Не в группе из списка) - // следует понимать как "В списке или в группах" и "Не в списке и не в группах". - // - Тогда более понятно почему для них используется "ГруппыИЭлементы", а не "Группы". - Возврат ГруппыИЭлементы.ГруппыИЭлементы; - ИначеЕсли ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВИерархии - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда - Возврат ГруппыИЭлементы.Группы; - КонецЕсли; - КонецЕсли; - Возврат ?(ЗначениеПоУмолчанию = Неопределено, ГруппыИЭлементы.Авто, ЗначениеПоУмолчанию); -КонецФункции - // Находит элемент компоновки данных по полному пути. // // Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных - Корневой узел настроек, в который вложен искомый элемент. +// НастройкиКД - НастройкиКомпоновкиДанных - корневой узел настроек, в который вложен искомый элемент. // ПолныйПутьКЭлементу - Строка - полный путь к элементу. Может быть получена в функции ПолныйПутьКЭлементу(). // // Возвращаемое значение: -// ЭлементКД - Произвольный - Найденный узел настроек. +// ЭлементКД - Произвольный - найденный узел настроек. // Функция ЭлементНастроекПоПолномуПути(Знач Настройки, Знач ПолныйПутьКЭлементу) Экспорт Индексы = СтрРазделить(ПолныйПутьКЭлементу, "/", Ложь); @@ -4854,4 +3134,31 @@ Возврат ЭлементНастроек; КонецФункции +Процедура УстановитьУсловияОтборов(ПараметрыЗагрузки, КомпоновщикНастроек) Экспорт + УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗагрузки, "УсловияОтборов"); + Если УсловияОтборов = Неопределено Тогда + Возврат; + КонецЕсли; + + Настройки = КомпоновщикНастроек.Настройки; + ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки; + + Для Каждого Условие Из УсловияОтборов Цикл + ЭлементПользовательскойНастройки = ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(Условие.Ключ); + ЭлементПользовательскойНастройки.ВидСравнения = Условие.Значение; + + Если ОтчетыКлиентСервер.ЭтоВидСравненияСписка(ЭлементПользовательскойНастройки.ВидСравнения) + И ТипЗнч(ЭлементПользовательскойНастройки.ПравоеЗначение) <> Тип("СписокЗначений") Тогда + + ЭлементПользовательскойНастройки.ПравоеЗначение = ОтчетыКлиентСервер.ЗначенияСписком( + ЭлементПользовательскойНастройки.ПравоеЗначение); + КонецЕсли; + + ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( + Настройки, ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,, ПользовательскиеНастройки); + + ЗаполнитьЗначенияСвойств(ЭлементНастройки, ЭлементПользовательскойНастройки, "ВидСравнения, ПравоеЗначение"); + КонецЦикла; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl index 329e6754b..e00018457 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl @@ -30,11 +30,13 @@ // и записывает результат в регистр сведений ЗамерыВремени. // // Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция. +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации +// - Строка - ключевая операция. // ВремяНачала - Число - универсальная дата в миллисекундах, // возвращаемая при начале замера функцией ОценкаПроизводительности.НачатьЗамерВремени. // ВесЗамера - Число - количественный показатель замера, например количество строк в документе. -// Комментарий - Строка, Соответствие - произвольная информация замера. +// Комментарий - Строка +// - Соответствие - произвольная информация замера. // ВыполненСОшибкой - Булево - признак того, что замер не был выполнен до конца, // Процедура ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, ВесЗамера = 1, Комментарий = Неопределено, ВыполненСОшибкой = Ложь) Экспорт @@ -61,11 +63,13 @@ // и записывает результат в регистр сведений ЗамерыВремениТехнологические. // // Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция. +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации +// - Строка - ключевая операция. // ВремяНачала - Число - универсальная дата в миллисекундах, // возвращаемая при начале замера функцией ОценкаПроизводительности.НачатьЗамерВремени. // ВесЗамера - Число - количественный показатель замера, например количество строк в документе. -// Комментарий - Строка, Соответствие - произвольная информация замера. +// Комментарий - Строка +// - Соответствие - произвольная информация замера. // Процедура ЗакончитьЗамерВремениТехнологический(КлючеваяОперация, ВремяНачала, ВесЗамера = 1, Комментарий = Неопределено) Экспорт Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда @@ -228,7 +232,7 @@ // КлючеваяОперация - Строка - ключевая операция. // // Возвращаемое значение: -// ОписаниеЗамера - соответствие. +// ОписаниеЗамера - соответствие: // КлючеваяОперация - имя ключевой операции. // ВремяНачала - время начала ключевой операции в миллисекундах. // ВремяПоследнегоЗамера - время последнего замера ключевой операции в миллисекундах. @@ -934,7 +938,7 @@ // Регламентное задание экспорта // Параметры: -// ДопПараметры - Структура - где: +// ДопПараметры - Структура: // * ДатаНачала - Дата - дата начала замеров // * ДатаОкончания - Дата - дата окончания замеров. // @@ -1033,9 +1037,10 @@ // Сохраняет результаты вычисления APDEX в файл // // Параметры: -// КаталогиЭкспорта - Структура со значением типа Массив. -// ВыборкаАпдекс - Результат запроса -// МассивыЗамеров - Структура со значением типа Массив. +// КаталогиЭкспорта - структура со значением типа Массив. +// ВыборкаАпдекс - результат запроса +// МассивыЗамеров - структура со значением типа Массив. +// Процедура ВыгрузитьРезультаты(КаталогиЭкспорта, МассивыЗамеров, ТекДата, ПорядковыйНомерФайла) ПространствоИмен = "www.v8.1c.ru/ssl/performace-assessment/apdexExport/1.0.0.4"; @@ -1177,8 +1182,8 @@ // // Параметры: // Каталог - Строка, -// ДатаФормированияФайла - Дата, дата и время выполнения замера -// РасширениеСТочкой - Строка, задающая расширение файла, в виде ".xxx". +// ДатаФормированияФайла - Дата - дата и время выполнения замера +// РасширениеСТочкой - Строка - задающая расширение файла, в виде ".xxx". // Возвращаемое значение: // Строка - полный путь к файлу экспорта. // @@ -1197,6 +1202,7 @@ // Параметры: // ИмяФайла - Строка // Разделитель - Строка +// Функция УбратьРазделителиНаКонцеИмениФайла(Знач ИмяФайла, Разделитель) ДлинаПути = СтрДлина(ИмяФайла); @@ -1224,11 +1230,11 @@ Попытка ЧтениеZIP = Новый ЧтениеZipФайла(ФайлХранилища); ЧтениеZIP.ИзвлечьВсе(КаталогФайлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); - ЧтениеZIP.Закрыть(); + ЧтениеZIP.Закрыть(); Исключение УдалитьФайлы(ФайлХранилища); УдалитьФайлы(КаталогФайлов); - ОписаниеОшибки = ОписаниеОшибки(); + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ШаблонСтроки = НСтр("ru = 'Не удалось распаковать архив %1 %2'"); ОписаниеИсключения = ОценкаПроизводительностиКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ИмяФайла, ОписаниеОшибки); ВызватьИсключение ОписаниеИсключения; @@ -1281,7 +1287,7 @@ // С версии 1.0.0.4 факт выполнения замера с ошибкой хранится в самом замере, а не в ключевой операции. ПризнакОшибкиВЗамере = Метаданные.ПакетыXDTO.ApdexExport_1_0_0_4.ПространствоИмен = ПространствоИмен; - measurement = "measurement"; + Замеры = "measurement"; ТипКлючеваяОперация = ФабрикаXDTO.Тип(ПространствоИмен, "KeyOperation"); ЧтениеXML.Прочитать(); @@ -1302,10 +1308,10 @@ КонецЕсли; МаксимальнаяДатаЗамера = Неопределено; - ЧислоЗамеров = КлючеваяОперация[measurement].Количество(); + ЧислоЗамеров = КлючеваяОперация[Замеры].Количество(); НомерЗамера = 0; Пока НомерЗамера < ЧислоЗамеров Цикл - Замер = КлючеваяОперация[measurement].Получить(НомерЗамера); + Замер = КлючеваяОперация[Замеры].Получить(НомерЗамера); ДатаЗамера = Замер.tUTC; Если МаксимальнаяДатаЗамера = Неопределено ИЛИ МаксимальнаяДатаЗамера < ДатаЗамера Тогда МаксимальнаяДатаЗамера = ДатаЗамера; diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl index e75226759..bd88744b6 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl @@ -187,6 +187,7 @@ // // Возвращаемое значение: // Структура - параметры, полученные на сервере. +// Функция ПолучитьПараметрыНаСервере() Экспорт Параметры = Новый Структура("ДатаИВремяНаСервере, ПериодЗаписи"); diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/Module.bsl index 651f4f176..134f5984b 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/Module.bsl @@ -10,6 +10,7 @@ // Процедура заканчивает замер времени выполнения ключевой операции. // Вызывается из обработчика ожидания. +// Процедура ЗакончитьЗамерВремениАвто() Экспорт ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремениНаКлиентеАвто(); @@ -18,6 +19,7 @@ // Процедура вызывает функцию записи результатов замеров на сервере. // Вызывается из обработчика ожидания. +// Процедура ЗаписатьРезультатыАвто() Экспорт ОценкаПроизводительностиКлиент.ЗаписатьРезультатыАвтоНеГлобальный(); diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl index 24f361f99..ba71cc22a 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl @@ -122,10 +122,11 @@ // // Параметры: // УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. -// ПараметрыЗамера - Структура - структура со свойствами: +// ПараметрыЗамера - Структура: // * КлючеваяОперация - Строка - имя ключевой операции. // * ВесЗамера - Число - количественный показатель сложности замера -// * Комментарий - Строка, Соответствие - дополнительная произвольной информации замера. +// * Комментарий - Строка +// - Соответствие - дополнительная произвольной информации замера. // * ВыполненаСОшибкой - Булево - признак выполнения замера с ошибкой, // см. процедуру УстановитьПризнакОшибкиЗамера. // @@ -198,10 +199,13 @@ // // Параметры: // УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. -// Комментарий - Строка, Соответствие - дополнительная произвольной информации замера. -// В случае указания соответствия: +// Комментарий - Строка +// - Соответствие - дополнительная произвольной информации замера. +// В случае указания соответствия: // * Ключ - Строка - имя дополнительного параметра информации замера. -// * Значение - Строка, Число, Булево - значение дополнительного параметра замера. +// * Значение - Строка +// - Число +// - Булево - значение дополнительного параметра замера. // Процедура УстановитьКомментарийЗамера(УИДЗамера, Комментарий) Экспорт @@ -255,7 +259,7 @@ // срабатыванием обработчика ожидания будет записано под именем "Последний шаг". // // Возвращаемое значение: -// ОписаниеЗамера - соответствие. +// ОписаниеЗамера - соответствие: // КлючеваяОперация - имя ключевой операции. // ВремяНачала - время начала ключевой операции в миллисекундах. // ВремяПоследнегоЗамера - время последнего замера ключевой операции в миллисекундах. diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index ceba9f95c..2fc54115c 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -283,24 +283,24 @@ // Добавить или заменить существующий элемент отбора динамического списка. // // Параметры: -// ДинамическийСписок - ДинамическийСписок - Список, в котором требуется установить отбор. -// ИмяПоля - Строка - Поле, по которому необходимо установить отбор. -// ПравоеЗначение - Произвольный - Значение отбора. +// ДинамическийСписок - ДинамическийСписок - список, в котором требуется установить отбор. +// ИмяПоля - Строка - поле, по которому необходимо установить отбор. +// ПравоеЗначение - Произвольный - значение отбора. // Необязательный. Значение по умолчанию: Неопределено. // Внимание! Если передать Неопределено, то значение не будет изменено. -// ВидСравнения - ВидСравненияКомпоновкиДанных - Условие отбора. -// Представление - Строка - Представление элемента компоновки данных. +// ВидСравнения - ВидСравненияКомпоновкиДанных - условие отбора. +// Представление - Строка - представление элемента компоновки данных. // Необязательный. Значение по умолчанию: Неопределено. // Если указано, то выводится только флажок использования с указанным представлением (значение не выводится). // Для очистки (чтобы значение снова выводилось) следует передать пустую строку. -// Использование - Булево - Флажок использования этого отбора. +// Использование - Булево - флажок использования этого отбора. // Необязательный. Значение по умолчанию: Неопределено. -// РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - Способ отображения этого отбора -// пользователю. -// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ - В группе быстрых настроек над списком. -// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный - В настройка списка (в подменю Еще). -// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный - Запретить пользователю менять этот отбор. -// ИдентификаторПользовательскойНастройки - Строка - Уникальный идентификатор этого отбора. +// РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - способ отображения этого отбора +// пользователю: +// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ - в группе быстрых настроек над списком. +// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный - в настройка списка (в подменю Еще). +// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный - запретить пользователю менять этот отбор. +// ИдентификаторПользовательскойНастройки - Строка - уникальный идентификатор этого отбора. // Используется для связи с пользовательскими настройками. // // См. также: @@ -372,9 +372,9 @@ // Проверяет, содержит ли строка только цифры. // // Параметры: -// СтрокаПроверки - Строка - Строка для проверки. -// УчитыватьЛидирующиеНули - Булево - Флаг учета лидирующих нулей, если Истина, то ведущие нули пропускаются. -// УчитыватьПробелы - Булево - Флаг учета пробелов, если Истина, то пробелы при проверке игнорируются. +// СтрокаПроверки - Строка - строка для проверки. +// УчитыватьЛидирующиеНули - Булево - флаг учета лидирующих нулей, если Истина, то ведущие нули пропускаются. +// УчитыватьПробелы - Булево - флаг учета пробелов, если Истина, то пробелы при проверке игнорируются. // // Возвращаемое значение: // Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы. diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl index 001c75317..d10d36c11 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl @@ -10,9 +10,9 @@ // Получает N худших замеров производительности за период. // Параметры: -// ДатаНачала - ДатаВремя - Начало периода выборки. -// ДатаОкончания - ДатаВремя - Окончание периода выборка. -// ТопApdexКоличество - Число - Количество худших замеров, если но, то возвращаются все замеры. +// ДатаНачала - ДатаВремя - начало периода выборки. +// ДатаОкончания - ДатаВремя - окончание периода выборка. +// ТопApdexКоличество - Число - количество худших замеров, если но, то возвращаются все замеры. // Функция ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество) Экспорт Возврат РегистрыСведений.ЗамерыВремени.ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество); @@ -20,9 +20,9 @@ // Получает N худших замеров производительности технологической за период. // Параметры: -// ДатаНачала - ДатаВремя - Начало периода выборки. -// ДатаОкончания - ДатаВремя - Окончание периода выборка. -// ТопApdexКоличество - Число - Количество худших замеров, если но, то возвращаются все замеры. +// ДатаНачала - ДатаВремя - начало периода выборки. +// ДатаОкончания - ДатаВремя - окончание периода выборка. +// ТопApdexКоличество - Число - количество худших замеров, если но, то возвращаются все замеры. // Функция ПолучитьТопAPDEXТехнологический(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество) Экспорт Возврат РегистрыСведений.ЗамерыВремениТехнологические.ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество); @@ -33,7 +33,8 @@ // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. // Параметры: -// Обработчики - См. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления +// Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления +// Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); @@ -43,15 +44,12 @@ Обработчик = Обработчики.Добавить(); Обработчик.РежимВыполнения = "Оперативно"; Обработчик.ОбщиеДанные = Истина; - Обработчик.Версия = "3.1.2.284"; - Обработчик.Процедура = "ОценкаПроизводительностиСлужебный.УстановитьЗначенияКонстанты_3_1_2_284"; + Обработчик.Версия = "3.1.3.38"; + Обработчик.Процедура = "ОценкаПроизводительностиСлужебный.УстановитьЗначенияКонстанты_3_1_3_38"; КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. -// Параметры: -// УстановленныеПараметры - Массив - -// Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт Обработчики.Вставить("КомментарийЗамераВремени", "ОценкаПроизводительностиСлужебный.УстановкаПараметровСеанса"); @@ -60,7 +58,7 @@ // См. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей. // Параметры: -// НазначениеРолей - См. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей.НазначениеРолей +// НазначениеРолей - см. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей.НазначениеРолей // Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт @@ -72,7 +70,8 @@ // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. // Параметры: -// Зависимости - См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий.Настройки +// Зависимости - см. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий.Настройки +// Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЭкспортОценкиПроизводительности; @@ -81,7 +80,7 @@ // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. // Параметры: -// ЗапросыРазрешений - См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам.ЗапросыРазрешений +// ЗапросыРазрешений - см. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам.ЗапросыРазрешений // Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт @@ -142,6 +141,9 @@ #Область СлужебныеПроцедурыИФункции // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. +// Параметры: +// УстановленныеПараметры - Массив +// Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт // Инициализация параметров сеанса должна выполняться без обращения к параметрам работы программы. @@ -242,11 +244,11 @@ // Нет // // Возвращаемое значение: -// Структура - -// "ВыполнятьЭкспортНаFTP" - Булево - Признак выполнения экспорта на FTP +// Структура: +// "ВыполнятьЭкспортНаFTP" - Булево - признак выполнения экспорта на FTP // "FTPКаталогЭкспорта" - Строка - FTP-каталог экспорта -// "ВыполнятьЭкспортВЛокальныйКаталог" - Булево - Признак выполнения экспорта в локальный каталог -// "ЛокальныйКаталогЭкспорта" - Строка - Локальный каталог экспорта. +// "ВыполнятьЭкспортВЛокальныйКаталог" - Булево - признак выполнения экспорта в локальный каталог +// "ЛокальныйКаталогЭкспорта" - Строка - локальный каталог экспорта. // Функция КаталогиЭкспортаОценкиПроизводительности() Экспорт @@ -355,7 +357,7 @@ КонецФункции -Процедура УстановитьЗначенияКонстанты_3_1_2_284() Экспорт +Процедура УстановитьЗначенияКонстанты_3_1_3_38() Экспорт Если Константы.ПериодХраненияЗамеров.Получить() = 3650 Тогда Константы.ПериодХраненияЗамеров.Установить(100); @@ -371,7 +373,8 @@ // Параметры - КаталогиЭкспорта - Структура // // Возвращаемое значение: -// Массив - +// Массив +// Функция РазрешенияНаРесурсыСервера(Каталоги) Разрешения = Новый Массив; @@ -427,7 +430,7 @@ // КонецЕсли; // // Возвращаемое значение: -// Булево - +// Булево // Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт @@ -444,7 +447,7 @@ // Возвращает общие параметры базовой функциональности. // // Возвращаемое значение: -// Структура - структура со свойствами: +// Структура: // * ИмяФормыПерсональныхНастроек - Строка - имя формы для редактирования персональных настроек. // Ранее определялись в // ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек. @@ -452,7 +455,7 @@ // Например, "8.3.4.365". // Ранее определялись в // ОбщегоНазначенияПереопределяемый.ПолучитьМинимальноНеобходимуюВерсиюПлатформы. -// * РаботаВПрограммеЗапрещена - Булево - Начальное значение Ложь. +// * РаботаВПрограммеЗапрещена - Булево - начальное значение Ложь. // * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - по умолчанию Истина. Если установить Ложь, то // подтверждение при завершении работы программы не // будет запрашиваться, если явно не разрешить в @@ -460,7 +463,7 @@ // * ОтключитьИдентификаторыОбъектовМетаданных - Булево - отключает заполнение справочников ИдентификаторыОбъектовМетаданных // и ИдентификаторыОбъектовРасширений, процедуру выгрузки и загрузки в узлах РИБ. // Для частичного встраивания отдельных функций библиотеки в конфигурации без постановки на поддержку. -// * ОтключенныеПодсистемы - Соответствие - Позволяет виртуально отключать подсистемы для целей +// * ОтключенныеПодсистемы - Соответствие - позволяет виртуально отключать подсистемы для целей // тестирования. // Если подсистема отключена, то метод ОбщегоНазначения.ПодсистемаСуществует // вернет Ложь. В соответствии ключ - имя отключенной подсистемы, @@ -575,7 +578,7 @@ // "ОбщегоНазначенияКлиент". // // Возвращаемое значение: -// ОбщийМодуль - . +// ОбщийМодуль // Функция ОбщийМодуль(Имя) Экспорт @@ -693,7 +696,7 @@ // Возвращает значение для идентификации общего типа "Регистры сведений". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаРегистрыСведений() @@ -704,7 +707,7 @@ // Возвращает значение для идентификации общего типа "Регистры накопления". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаРегистрыНакопления() @@ -715,7 +718,7 @@ // Возвращает значение для идентификации общего типа "Регистры бухгалтерии". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаРегистрыБухгалтерии() @@ -726,7 +729,7 @@ // Возвращает значение для идентификации общего типа "Регистры расчета". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаРегистрыРасчета() @@ -737,7 +740,7 @@ // Возвращает значение для идентификации общего типа "Документы". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаДокументы() @@ -748,7 +751,7 @@ // Возвращает значение для идентификации общего типа "Справочники". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаСправочники() @@ -759,7 +762,7 @@ // Возвращает значение для идентификации общего типа "Отчеты". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаОтчеты() @@ -770,7 +773,7 @@ // Возвращает значение для идентификации общего типа "Обработки". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаОбработки() @@ -781,7 +784,7 @@ // Возвращает значение для идентификации общего типа "ПланыОбмена". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаПланыОбмена() @@ -792,7 +795,7 @@ // Возвращает значение для идентификации общего типа "Планы видов характеристик". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаПланыВидовХарактеристик() @@ -803,7 +806,7 @@ // Возвращает значение для идентификации общего типа "Бизнес-процессы". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаБизнесПроцессы() @@ -814,7 +817,7 @@ // Возвращает значение для идентификации общего типа "Задачи". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаЗадачи() @@ -825,7 +828,7 @@ // Возвращает значение для идентификации общего типа "Планы счетов". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаПланыСчетов() @@ -836,7 +839,7 @@ // Возвращает значение для идентификации общего типа "Планы видов расчета". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаПланыВидовРасчета() @@ -847,7 +850,7 @@ // Возвращает значение для идентификации общего типа "Константы". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаКонстанты() @@ -858,7 +861,7 @@ // Возвращает значение для идентификации общего типа "Журналы документов". // // Возвращаемое значение: -// Строка - . +// Строка // Функция ИмяТипаЖурналыДокументов() diff --git a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl index f8b13ab1e..0cc885626 100644 --- a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl @@ -9,14 +9,16 @@ #Область ПрограммныйИнтерфейс // Выводит подключенные команды в форме. +// Для вызова из обработчика формы ПриСозданииНаСервере. +// +// Если в форме несколько списков, то в обработчике формы ПриСозданииНаСервере +// следует разместить несколько вызовов этой процедуры с указанием параметра ПараметрыРазмещения. +// Параметр ПараметрыРазмещения также применяется, когда типы источников зависят от параметров открытия формы. // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма, в которой необходимо разместить команды. -// ПараметрыРазмещения - Структура - параметры размещения команд. -// Используется, когда в форме несколько списков -// (в этом случае размещается несколько вызовов этой процедуры с указанием 2го параметра), -// или когда типы источников зависят от параметров открытия формы. -// Состав ключей см. в функции ПараметрыРазмещения(). +// ПараметрыРазмещения - см. ПодключаемыеКоманды.ПараметрыРазмещения +// - Неопределено // Процедура ПриСозданииНаСервере(Форма, ПараметрыРазмещения = Неопределено) Экспорт ИмяФормы = Форма.ИмяФормы; @@ -94,11 +96,12 @@ КонецПроцедуры -// Конструктор одноименного параметра процедуры ПриСозданииНаСервере. +// Конструктор одноименного параметра процедуры ПодключаемыеКоманды.ПриСозданииНаСервере. // // Возвращаемое значение: -// Структура - параметры размещения подключаемых команд. -// * Источники - ОписаниеТипов, Массив - источники команд. +// Структура - параметры размещения подключаемых команд: +// * Источники - ОписаниеТипов +// - Массив - источники команд. // Используется для второстепенных списков, а также в формах объектов, не являющихся поставщиками // команд (обработки, общие формы). В массиве ожидаются элементы типа "ОбъектМетаданных". // * КоманднаяПанель - ГруппаФормы - командная панель или группа команд, в которой выводятся подменю. @@ -120,16 +123,13 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма, из которой выполняется команда. -// ПараметрыВызова - Структура - параметры вызова. -// Источник - ТаблицаФормы, ДанныеФормыСтруктура - объект или список формы с полем "Ссылка". +// ПараметрыВызова - Структура +// Источник - ТаблицаФормы +// - ДанныеФормыСтруктура - объект или список формы с полем "Ссылка". // Результат - Структура - результат выполнения команды. // Процедура ВыполнитьКоманду(Знач Форма, Знач ПараметрыВызова, Знач Источник, Результат = Неопределено) Экспорт - Результат = Новый Структура; - Результат.Вставить("Текст", Неопределено); - Результат.Вставить("Подробно", Неопределено); - Если ТипЗнч(ПараметрыВызова) <> Тип("Структура") Или ПараметрыВызова.Количество() <> 3 Или ТипЗнч(Форма) <> Тип("ФормаКлиентскогоПриложения") Тогда @@ -139,16 +139,15 @@ АдресНастроек = Форма.ПараметрыПодключаемыхКоманд.АдресТаблицыКоманд; ОписаниеКоманды = ОписаниеКоманды(ПараметрыВызова.ИмяКомандыВФорме, АдресНастроек); - Контекст = ПодключаемыеКомандыКлиентСервер.ШаблонПараметровВыполненияКоманды(); - Контекст.ОписаниеКоманды = Новый Структура(ОписаниеКоманды); - Контекст.Форма = Форма; - Контекст.ЭтоФормаОбъекта = ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура"); - Контекст.Источник = Источник; - Контекст.Вставить("Результат", Результат); + ПараметрыВыполнения = ПараметрыВыполненияКоманды(); + ПараметрыВыполнения.ОписаниеКоманды = Новый Структура(ОписаниеКоманды); + ПараметрыВыполнения.Форма = Форма; + ПараметрыВыполнения.ЭтоФормаОбъекта = ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура"); + ПараметрыВыполнения.Источник = Источник; ПараметрыЭкспортнойПроцедуры = Новый Массив; ПараметрыЭкспортнойПроцедуры.Добавить(ПараметрыВызова.ПараметрКоманды); - ПараметрыЭкспортнойПроцедуры.Добавить(Контекст); + ПараметрыЭкспортнойПроцедуры.Добавить(ПараметрыВыполнения); Обработчик = ОписаниеКоманды.Обработчик; ПрефиксОбщегоМодуля = НРег("ОбщийМодуль."); @@ -158,7 +157,8 @@ ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик, ПараметрыЭкспортнойПроцедуры); - ПараметрыВызова.Результат = Результат; + Результат = ПараметрыВыполнения.Результат; + ПараметрыВызова.Результат = ПараметрыВыполнения.Результат; КонецПроцедуры @@ -194,6 +194,33 @@ Команда.УсловияВидимости.Добавить(УсловиеВидимости); КонецПроцедуры +// Свойства второго параметра обработчика подключаемой команды, выполняемой на сервере. +// +// Возвращаемое значение: +// Структура: +// * ОписаниеКоманды - Структура - состав свойств совпадает с колонками таблицы значений параметра Команды процедуры +/// ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. +// Ключевые свойства: +// ** Идентификатор - Строка - идентификатор команды. +// ** Представление - Строка - представление команды в форме. +// ** Имя - Строка - имя команды в форме. +// ** ДополнительныеПараметры - Структура - дополнительные свойства, состав которых определяется видом +// конкретной команды. +// * Форма - ФормаКлиентскогоПриложения - форма, из которой вызвана команда. +// * ЭтоФормаОбъекта - Булево - Истина, если команда вызвана из формы объекта. +// * Источник - ТаблицаФормы +// - ДанныеФормыСтруктура - объект или список формы с полем "Ссылка". +// +Функция ПараметрыВыполненияКоманды() Экспорт + ПараметрыВыполнения = ПодключаемыеКомандыКлиентСервер.ПараметрыВыполненияКоманды(); + // Служебные параметры. + Результат = Новый Структура; + Результат.Вставить("Текст", ""); + Результат.Вставить("Подробно", ""); + ПараметрыВыполнения.Вставить("Результат", Результат); + Возврат ПараметрыВыполнения; +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -247,17 +274,18 @@ // // Параметры: // ПолноеИмя - Строка - полное имя объекта метаданных. -// НастройкиПрограммногоИнтерфейса - Произвольный - Результат выполнения функции +// НастройкиПрограммногоИнтерфейса - Произвольный - результат выполнения функции // НастройкиПрограммногоИнтерфейсаПодключаемыхОбъектов(). // // Возвращаемое значение: -// Структура - Настройки интеграции этого объекта. +// Структура - настройки интеграции этого объекта. // Состав полей см. в блоке "Параметры процедуры ПриОпределенииНастроек" // процедуры ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(). // Дополнительно содержит следующие поля: -// * Вид - Строка - Вид имя объекта метаданных в верхнем регистре. -// * ПолноеИмя - Строка - Полное имя объекта метаданных. -// * Менеджер - ОбработкаМенеджер, ОтчетМенеджер - Менеджер объекта метаданных. +// * Вид - Строка - вид имя объекта метаданных в верхнем регистре. +// * ПолноеИмя - Строка - полное имя объекта метаданных. +// * Менеджер - ОбработкаМенеджер +// - ОтчетМенеджер - менеджер объекта метаданных. // Функция НастройкиПодключаемогоОбъекта(ПолноеИмя, НастройкиПрограммногоИнтерфейса = Неопределено) Экспорт ЧастиИмени = СтрРазделить(ПолноеИмя, "."); @@ -312,8 +340,9 @@ // Добавляет типы в массив. // // Параметры: -// Массив - Массив - Массив типов. -// ТипИлиОписаниеТипов - Тип, ОписаниеТипов - Добавляемые типы. +// Массив - Массив - массив типов. +// ТипИлиОписаниеТипов - Тип +// - ОписаниеТипов - добавляемые типы. // Процедура ДополнитьМассивТипов(Массив, ТипИлиОписаниеТипов) Экспорт Если ТипЗнч(ТипИлиОписаниеТипов) = Тип("ОписаниеТипов") Тогда @@ -327,16 +356,14 @@ // подключенных к указанному объекту метаданных. // // Параметры: -// ОбъектМетаданных - ОбъектМетаданных - Объект метаданных, к которому подключены источники команд. -// Источники - ДеревоЗначений - См. описание одноименного параметра +// ОбъектМетаданных - ОбъектМетаданных - объект метаданных, к которому подключены источники команд. +// Источники - ДеревоЗначений - см. описание одноименного параметра // процедуры ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту(). -// ПодключенныеОбъекты - см. описание возвращаемого значения -// функции ПодключаемыеКоманды.ТаблицаПодключаемыхОбъектов(). -// НастройкиПрограммногоИнтерфейса - Структура - Необязательный. См. описание возвращаемого значения -// функции ПодключаемыеКоманды.НастройкиПрограммногоИнтерфейсаПодключаемыхОбъектов(). +// ПодключенныеОбъекты - см. ПодключаемыеКоманды.ТаблицаПодключаемыхОбъектов +// НастройкиПрограммногоИнтерфейса - см. ПодключаемыеКоманды.НастройкиПрограммногоИнтерфейсаПодключаемыхОбъектов // // Возвращаемое значение: -// СтрокаДереваЗначений - Настройки объекта метаданных. См. описание 2 параметра +// СтрокаДереваЗначений - настройки объекта метаданных. См. описание 2 параметра // процедуры ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту(). // Функция ЗарегистрироватьИсточник(ОбъектМетаданных, Источники, ПодключенныеОбъекты, НастройкиПрограммногоИнтерфейса) Экспорт @@ -398,11 +425,12 @@ // Шаблон сведений об отчетах и обработках, подключенных к источникам команд. // // Возвращаемое значение: -// ТаблицаЗначений - Вспомогательные параметры. -// * ПолноеИмя - Строка - Полное имя объекта. Например: "Документ.ИмяДокумента". -// * Менеджер - Произвольный - Модуль менеджера объекта. -// * Размещение - Массив - Список объектов, к которым подключен отчет или обработка. -// * ТипСсылкиДанных - Тип, ОписаниеТипов - Тип объектов, к которым подключен отчет или обработка.. +// ТаблицаЗначений - вспомогательные параметры: +// * ПолноеИмя - Строка - полное имя объекта. Например: "Документ.ИмяДокумента". +// * Менеджер - Произвольный - модуль менеджера объекта. +// * Размещение - Массив - список объектов, к которым подключен отчет или обработка. +// * ТипСсылкиДанных - Тип +// - ОписаниеТипов - тип объектов, к которым подключен отчет или обработка.. // Функция ТаблицаПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса = Неопределено) Экспорт Если НастройкиПрограммногоИнтерфейса = Неопределено Тогда @@ -437,11 +465,11 @@ // Шаблон сведений об отчетах и обработках, подключенных к источникам команд. // // Возвращаемое значение: -// ТаблицаЗначений - Описание параметра Настройки процедуры ПриОпределенииНастроек объектов, -// включенных в состав подсистемы ПодключаемыеОтчетыИОбработки. -// * Ключ - Строка - Имя настройки. -// * ОписаниеТипов - ОписаниеТипов - Тип настройки. -// * ВидыПодключаемыхОбъектов - Строка - Вид объекта метаданных в верхнем регистре. +// ТаблицаЗначений - описание параметра Настройки процедуры ПриОпределенииНастроек объектов, +// включенных в состав подсистемы ПодключаемыеОтчетыИОбработки: +// * Ключ - Строка - имя настройки. +// * ОписаниеТипов - ОписаниеТипов - тип настройки. +// * ВидыПодключаемыхОбъектов - Строка - вид объекта метаданных в верхнем регистре. // Например: "ОТЧЕТ" или "ОБРАБОТКА". // Функция НастройкиПрограммногоИнтерфейсаПодключаемыхОбъектов() Экспорт @@ -739,6 +767,7 @@ ПараметрыКлиента = Новый Структура; ПараметрыКлиента.Вставить("ЕстьУсловияВидимости", ПараметрыРазмещения.ЕстьУсловияВидимости); ПараметрыКлиента.Вставить("ПодменюСУсловиямиВидимости", Новый Массив); + ПараметрыКлиента.Вставить("ОписаниеКоманд", Новый Массив); ПараметрыКлиента.Вставить("КорневыеПодменюИКоманды", Новый Массив); ПараметрыКлиента.Вставить("ДоступностьКоманд", Истина); ПараметрыКлиента.Вставить("АдресТаблицыКоманд", Неопределено); @@ -823,6 +852,10 @@ КнопкаФормы.Доступность = Ложь; КонецЕсли; + Если ЗначениеЗаполнено(Команда.ЗначениеПометки) И ЭтоПутьДоРеквизита(Команда.ЗначениеПометки) Тогда + ПараметрыКлиента.ОписаниеКоманд.Добавить(ОписаниеКомандыНаКлиенте(Команда, КнопкаФормы)); + КонецЕсли; + СведенияОПодменюКоманды.ВыведеноКоманд = СведенияОПодменюКоманды.ВыведеноКоманд + 1; СведенияОПодменюКоманды.ПоследняяКоманда = КомандаФормы; Если Команда.ЕстьУсловияВидимости Тогда @@ -905,6 +938,30 @@ КонецПроцедуры +Функция ЭтоПутьДоРеквизита(ПутьДоРеквизита) + Результат = Истина; + Идентификаторы = СтрРазделить(СтрЗаменить(ПутьДоРеквизита, "[""%Источник%""]",""), "."); + Для Каждого Элемент Из Идентификаторы Цикл + Попытка + Пустышка = Новый Структура(Элемент); + Исключение + Результат = Ложь; + Прервать; + КонецПопытки; + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ОписаниеКомандыНаКлиенте(Команда, КнопкаФормы) + ОписаниеКоманды = Новый Структура; + ОписаниеКоманды.Вставить("ИмяВФорме", КнопкаФормы.Имя); + ОписаниеКоманды.Вставить("Вид", Команда.Вид); + ОписаниеКоманды.Вставить("Идентификатор", Команда.Идентификатор); + ОписаниеКоманды.Вставить("ЗначениеПометки", Команда.ЗначениеПометки); + Возврат ОписаниеКоманды; +КонецФункции + Функция ЗарегистрироватьПодменю(Элементы, СведенияОВсехПодменю, ИмяПодменю, ШаблонНового = Неопределено, КоманднаяПанель = Неопределено, ПодменюПоУмолчанию = Неопределено) ВыведеноКоманд = 0; Группы = Новый Структура; @@ -1026,16 +1083,16 @@ // Обновляет кэш объектов метаданных указанного типа. // // Параметры: -// ФильтрПоТипуИдентификаторов - * - Тип объектов метаданных. -// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Обновлять кэш конфигурации. +// ФильтрПоТипуИдентификаторов - * - тип объектов метаданных. +// - СправочникСсылка.ИдентификаторыОбъектовМетаданных - обновлять кэш конфигурации. // Структура с ключом "ПодключенныеОбъекты" записывается в константу ПараметрыПодключаемыхКоманд. -// - СправочникСсылка.ИдентификаторыОбъектовРасширений - Обновлять кэш расширений. +// - СправочникСсылка.ИдентификаторыОбъектовРасширений - обновлять кэш расширений. // Структура с ключом "ПодключенныеОбъекты" записывается в регистр ПараметрыРаботыВерсийРасширений. // // Возвращаемое значение: -// Структура - описание +// Структура: // * ЕстьИзменения - Булево - Истина когда обновление прошло не "в холостую". -// * ПодключенныеОбъекты - Соответствие - Кэш для быстрого определения списка объектов, +// * ПодключенныеОбъекты - Соответствие - кэш для быстрого определения списка объектов, // подключенных к объектам конфигурации. // Ключами и значениям являются ссылки объектов метаданных конфигурации и расширений. // @@ -1110,7 +1167,7 @@ Команда = Команды.Найти(ИмяКомандыВФорме, "ИмяВФорме"); Если Команда = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сведения о команде ""%1"" не найдены.'"), + НСтр("ru = 'Сведения о команде ""%1"" не существуют.'"), ИмяКомандыВФорме); КонецЕсли; ОписаниеКоманды = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Команда); @@ -1140,7 +1197,7 @@ ОбъектМетаданныхОбщийМодуль = Метаданные.ОбщиеМодули.Найти(ИмяМодуля); Если ОбъектМетаданныхОбщийМодуль = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не найден.'"), + НСтр("ru = 'Общий модуль ""%1"" не существует.'"), ИмяМодуля); КонецЕсли; Если ОбъектМетаданныхОбщийМодуль.КлиентУправляемоеПриложение Тогда @@ -1216,7 +1273,7 @@ // Шаблон таблицы подключаемых команд. // // Возвращаемое значение: -// ТаблицаЗначений - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Команды +// см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Команды // Функция ТаблицаКоманд() Таблица = Новый ТаблицаЗначений; @@ -1253,6 +1310,7 @@ Таблица.Колонки.Добавить("ПорядокВажности", Новый ОписаниеТипов("Число")); Таблица.Колонки.Добавить("ИмяВФорме", Новый ОписаниеТипов("Строка")); Таблица.Колонки.Добавить("ЕстьУсловияВидимости", Новый ОписаниеТипов("Булево")); + Таблица.Колонки.Добавить("ЗначениеПометки", Новый ОписаниеТипов("Строка")); Возврат Таблица; КонецФункции diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl index 8914136f6..9ca5a266a 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl @@ -11,91 +11,144 @@ // Обработчик команды формы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма, из которой выполняется команда. -// Команда - КомандаФормы - Выполняемая команда. -// Источник - ТаблицаФормы, ДанныеФормыСтруктура - Объект или список формы с полем "Ссылка". +// Форма - ФормаКлиентскогоПриложения - форма, из которой выполняется команда. +// Команда - КомандаФормы - выполняемая команда. +// Источник - ТаблицаФормы +// - ДанныеФормыСтруктура - объект или список формы с полем "Ссылка". // Процедура НачатьВыполнениеКоманды(Форма, Команда, Источник) Экспорт ИмяКоманды = Команда.Имя; АдресНастроек = Форма.ПараметрыПодключаемыхКоманд.АдресТаблицыКоманд; ОписаниеКоманды = ПодключаемыеКомандыКлиентПовтИсп.ОписаниеКоманды(ИмяКоманды, АдресНастроек); - Контекст = ПодключаемыеКомандыКлиентСервер.ШаблонПараметровВыполненияКоманды(); - Контекст.ОписаниеКоманды = Новый Структура(ОписаниеКоманды); - Контекст.Форма = Форма; - Контекст.Источник = Источник; - Контекст.ЭтоФормаОбъекта = ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура"); + ПараметрыВыполнения = ПараметрыВыполненияКоманды(); + ПараметрыВыполнения.ОписаниеКоманды = Новый Структура(ОписаниеКоманды); + ПараметрыВыполнения.Форма = Форма; + ПараметрыВыполнения.Источник = Источник; + ПараметрыВыполнения.ЭтоФормаОбъекта = ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура"); + // Служебные параметры. + ПараметрыВыполнения.ТребуетсяЗапись = ПараметрыВыполнения.ЭтоФормаОбъекта И ОписаниеКоманды.РежимЗаписи <> "НеЗаписывать"; + ПараметрыВыполнения.ТребуетсяПроведение = (ОписаниеКоманды.РежимЗаписи = "Проводить"); + ПараметрыВыполнения.ТребуетсяРаботаСФайлами = ОписаниеКоманды.ТребуетсяРаботаСФайлами; + ПараметрыВыполнения.ВызовСервераЧерезОбработкуОповещения = Истина; - Контекст.Вставить("ТребуетсяЗапись", Контекст.ЭтоФормаОбъекта И ОписаниеКоманды.РежимЗаписи <> "НеЗаписывать"); - Контекст.Вставить("ТребуетсяПроведение", ОписаниеКоманды.РежимЗаписи = "Проводить"); - Контекст.Вставить("ТребуетсяРаботаСФайлами", ОписаниеКоманды.ТребуетсяРаботаСФайлами); - Контекст.Вставить("ВызовСервераЧерезОбработкуОповещения"); - - ПродолжитьВыполнениеКоманды(Контекст); + ПродолжитьВыполнениеКоманды(ПараметрыВыполнения); КонецПроцедуры // Обработчик команды формы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма, из которой выполняется команда. -// Команда - КомандаФормы - Выполняемая команда. -// Источник - ТаблицаФормы, ДанныеФормыСтруктура, Ссылка, Массив - Объект или список формы с полем "Ссылка", -// Ссылка или массив ссылок. +// Форма - ФормаКлиентскогоПриложения - форма, из которой выполняется команда. +// Команда - КомандаФормы - выполняемая команда. +// Источник - ТаблицаФормы +// - ДанныеФормыСтруктура +// - Ссылка +// - Массив - объект или список формы с полем "Ссылка", +// Ссылка или массив ссылок. // Процедура ВыполнитьКоманду(Форма, Команда, Источник) Экспорт ИмяКоманды = Команда.Имя; АдресНастроек = Форма.ПараметрыПодключаемыхКоманд.АдресТаблицыКоманд; ОписаниеКоманды = ПодключаемыеКомандыКлиентПовтИсп.ОписаниеКоманды(ИмяКоманды, АдресНастроек); - Контекст = ПодключаемыеКомандыКлиентСервер.ШаблонПараметровВыполненияКоманды(); - Контекст.ОписаниеКоманды = Новый Структура(ОписаниеКоманды); - Контекст.Форма = Форма; - Контекст.Источник = Источник; - Контекст.ЭтоФормаОбъекта = ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура"); + ПараметрыВыполнения = ПараметрыВыполненияКоманды(); + ПараметрыВыполнения.ОписаниеКоманды = Новый Структура(ОписаниеКоманды); + ПараметрыВыполнения.Форма = Форма; + ПараметрыВыполнения.Источник = Источник; + ПараметрыВыполнения.ЭтоФормаОбъекта = ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура"); + // Служебные параметры. + ПараметрыВыполнения.ТребуетсяЗапись = ПараметрыВыполнения.ЭтоФормаОбъекта И ОписаниеКоманды.РежимЗаписи <> "НеЗаписывать"; + ПараметрыВыполнения.ТребуетсяПроведение = (ОписаниеКоманды.РежимЗаписи = "Проводить"); + ПараметрыВыполнения.ТребуетсяРаботаСФайлами = ОписаниеКоманды.ТребуетсяРаботаСФайлами; - Контекст.Вставить("ТребуетсяЗапись", Контекст.ЭтоФормаОбъекта И ОписаниеКоманды.РежимЗаписи <> "НеЗаписывать"); - Контекст.Вставить("ТребуетсяПроведение", ОписаниеКоманды.РежимЗаписи = "Проводить"); - Контекст.Вставить("ТребуетсяРаботаСФайлами", ОписаниеКоманды.ТребуетсяРаботаСФайлами); - - ПродолжитьВыполнениеКоманды(Контекст); + ПродолжитьВыполнениеКоманды(ПараметрыВыполнения); КонецПроцедуры -// Запускает отложенный процесс обновления команд печати на форме. +// Обновляет список команд в зависимости от текущего контекста формы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - форма, на которой необходимо обновить команды печати. +// Форма - ФормаКлиентскогоПриложения // Процедура НачатьОбновлениеКоманд(Форма) Экспорт Форма.ОтключитьОбработчикОжидания("Подключаемый_ОбновитьКоманды"); Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбновитьКоманды", 0.2, Истина); КонецПроцедуры +// Продолжает выполнение команды после записи в форме. Необходимо размещать в обработчике события ПослеЗаписи в формах, +// в которых в событии ПередЗаписью взводится Отказ для выполнения дополнительных действий через обработчик ожидания. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма, на которой необходимо обновить команды печати. +// Объект - ДанныеФормыСтруктура +// - Ссылка - объект формы с полем "Ссылка". +// ПараметрыЗаписи - Структура - произвольные параметры записи. См. описание события ПослеЗаписи в синтакс-помощнике. +// +Процедура ПослеЗаписи(Форма, Объект, ПараметрыЗаписи) Экспорт + + Если ТипЗнч(ПараметрыЗаписи) = Тип("Структура") И ПараметрыЗаписи.Свойство("ПараметрыВыполненияПодключаемойКоманды") Тогда + Контекст = ПараметрыЗаписи.ПараметрыВыполненияПодключаемойКоманды; + Контекст.Вставить("Форма", Форма); + Контекст.Вставить("Источник", Объект); + ПродолжитьВыполнениеКоманды(Контекст); + КонецЕсли; + +КонецПроцедуры + +// Свойства второго параметра обработчика подключаемой команды, выполняемой на клиенте. +// +// Возвращаемое значение: +// Структура: +// * ОписаниеКоманды - Структура - состав свойств совпадает с колонками таблицы значений параметра Команды процедуры +/// ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. +// Ключевые свойства: +// ** Идентификатор - Строка - идентификатор команды. +// ** Представление - Строка - представление команды в форме. +// ** Имя - Строка - имя команды в форме. +// ** ДополнительныеПараметры - Структура - дополнительные свойства, состав которых определяется видом +// конкретной команды. +// * Форма - ФормаКлиентскогоПриложения - форма, из которой вызвана команда. +// * ЭтоФормаОбъекта - Булево - Истина, если команда вызвана из формы объекта. +// * Источник - ТаблицаФормы +// - ДанныеФормыСтруктура - объект или список формы с полем "Ссылка". +// +Функция ПараметрыВыполненияКоманды() Экспорт + Результат = ПодключаемыеКомандыКлиентСервер.ПараметрыВыполненияКоманды(); + // Служебные параметры. + Результат.Вставить("ТребуетсяЗапись", Ложь); + Результат.Вставить("ТребуетсяПроведение", Ложь); + Результат.Вставить("ТребуетсяРаботаСФайлами", Ложь); + Результат.Вставить("МассивСсылок", Новый Массив); + Результат.Вставить("ВызовСервераЧерезОбработкуОповещения", Ложь); + Результат.Вставить("НепроведенныеДокументы", Новый Массив); + Возврат Результат; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции // Выполняет команду, подключенную к форме. -Процедура ПродолжитьВыполнениеКоманды(Контекст) - Источник = Контекст.Источник; - ОписаниеКоманды = Контекст.ОписаниеКоманды; +Процедура ПродолжитьВыполнениеКоманды(ПараметрыВыполнения) + Источник = ПараметрыВыполнения.Источник; + ОписаниеКоманды = ПараметрыВыполнения.ОписаниеКоманды; // Установка расширения работы с файлами. - Если Контекст.ТребуетсяРаботаСФайлами Тогда - Контекст.ТребуетсяРаботаСФайлами = Ложь; - Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеУстановкиРасширенияРаботыСФайлами", ЭтотОбъект, Контекст); + Если ПараметрыВыполнения.ТребуетсяРаботаСФайлами Тогда + ПараметрыВыполнения.ТребуетсяРаботаСФайлами = Ложь; + Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеУстановкиРасширенияРаботыСФайлами", ЭтотОбъект, ПараметрыВыполнения); ТекстСообщения = НСтр("ru = 'Для продолжения необходимо установить расширение для работы с 1С:Предприятием.'"); ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Обработчик, ТекстСообщения); Возврат; КонецЕсли; // Запись в форме объекта. - Если Контекст.ТребуетсяЗапись Тогда - Контекст.ТребуетсяЗапись = Ложь; + Если ПараметрыВыполнения.ТребуетсяЗапись Тогда + ПараметрыВыполнения.ТребуетсяЗапись = Ложь; Если Источник.Ссылка.Пустая() - Или (ОписаниеКоманды.РежимЗаписи <> "ЗаписыватьТолькоНовые" И Контекст.Форма.Модифицированность) Тогда + Или (ОписаниеКоманды.РежимЗаписи <> "ЗаписыватьТолькоНовые" И ПараметрыВыполнения.Форма.Модифицированность) Тогда Кнопки = Новый СписокЗначений; - Если Контекст.ТребуетсяПроведение Тогда + Если ПараметрыВыполнения.ТребуетсяПроведение Тогда ШаблонВопроса = НСтр("ru = 'Для выполнения команды ""%1"" |документ будет проведен. Продолжить?'"); Кнопки.Добавить(КодВозвратаДиалога.ОК, НСтр("ru = 'Провести и продолжить'")); @@ -107,21 +160,21 @@ Кнопки.Добавить(КодВозвратаДиалога.Отмена); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВопроса, ОписаниеКоманды.Представление); - Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеПодтвержденияЗаписи", ЭтотОбъект, Контекст); + Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеПодтвержденияЗаписи", ЭтотОбъект, ПараметрыВыполнения); ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки); Возврат; КонецЕсли; КонецЕсли; - Если Не Контекст.Свойство("МассивСсылок") Тогда - Контекст.Вставить("МассивСсылок", ВыбранныеОбъекты(Источник, ОписаниеКоманды)); + Если ПараметрыВыполнения.МассивСсылок.Количество() = 0 Тогда + ПараметрыВыполнения.МассивСсылок = ВыбранныеОбъекты(Источник, ОписаниеКоманды); КонецЕсли; // Проведение документов. - Если Контекст.ТребуетсяПроведение Тогда - Контекст.ТребуетсяПроведение = Ложь; - ИнформацияОДокументах = ПодключаемыеКомандыВызовСервера.ИнформацияОДокументах(Контекст.МассивСсылок); + Если ПараметрыВыполнения.ТребуетсяПроведение Тогда + ПараметрыВыполнения.ТребуетсяПроведение = Ложь; + ИнформацияОДокументах = ПодключаемыеКомандыВызовСервера.ИнформацияОДокументах(ПараметрыВыполнения.МассивСсылок); Если ИнформацияОДокументах.Непроведенные.Количество() > 0 Тогда Если ИнформацияОДокументах.ДоступноПравоПроведения Тогда Если ИнформацияОДокументах.Непроведенные.Количество() = 1 Тогда @@ -129,8 +182,8 @@ Иначе ТекстВопроса = НСтр("ru = 'Для выполнения команды необходимо предварительно провести документы. Выполнить проведение документов и продолжить?'"); КонецЕсли; - Контекст.Вставить("НепроведенныеДокументы", ИнформацияОДокументах.Непроведенные); - Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеПодтверждениеПроведения", ЭтотОбъект, Контекст); + ПараметрыВыполнения.НепроведенныеДокументы = ИнформацияОДокументах.Непроведенные; + Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеПодтверждениеПроведения", ЭтотОбъект, ПараметрыВыполнения); Кнопки = Новый СписокЗначений; Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Продолжить'")); Кнопки.Добавить(КодВозвратаДиалога.Отмена); @@ -149,11 +202,11 @@ // Выполнение команды. Если ОписаниеКоманды.МножественныйВыбор Тогда - ПараметрКоманды = Контекст.МассивСсылок; - ИначеЕсли Контекст.МассивСсылок.Количество() = 0 Тогда + ПараметрКоманды = ПараметрыВыполнения.МассивСсылок; + ИначеЕсли ПараметрыВыполнения.МассивСсылок.Количество() = 0 Тогда ПараметрКоманды = Неопределено; Иначе - ПараметрКоманды = Контекст.МассивСсылок[0]; + ПараметрКоманды = ПараметрыВыполнения.МассивСсылок[0]; КонецЕсли; Если ОписаниеКоманды.Серверная Тогда Результат = Новый Структура; @@ -163,34 +216,36 @@ СерверныйКонтекст.Вставить("ИмяКомандыВФорме", ОписаниеКоманды.ИмяВФорме); СерверныйКонтекст.Вставить("Результат", Результат); - Если Контекст.Свойство("ВызовСервераЧерезОбработкуОповещения") Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("Подключаемый_ПродолжитьВыполнениеКомандыНаСервере", Контекст.Форма); + Если ПараметрыВыполнения.ВызовСервераЧерезОбработкуОповещения Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("Подключаемый_ПродолжитьВыполнениеКомандыНаСервере", ПараметрыВыполнения.Форма); ВыполнитьОбработкуОповещения(ОписаниеОповещения, СерверныйКонтекст); Результат = СерверныйКонтекст.Результат; Иначе - Контекст.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат); + ПараметрыВыполнения.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат); КонецЕсли; Если ЗначениеЗаполнено(Результат.Текст) Тогда ПоказатьПредупреждение(, Результат.Текст); Иначе - ОбновитьФорму(Контекст); + ОбновитьФорму(ПараметрыВыполнения); КонецЕсли; Иначе Если ЗначениеЗаполнено(ОписаниеКоманды.Обработчик) Тогда МассивПодстрок = СтрРазделить(ОписаниеКоманды.Обработчик, "."); Если МассивПодстрок.Количество() = 1 Тогда - ПараметрыФормы = ПараметрыФормы(Контекст, ПараметрКоманды); - КлиентскийМодуль = ПолучитьФорму(ОписаниеКоманды.ИмяФормы, ПараметрыФормы, Контекст.Форма, Истина); + ПараметрыФормы = ПараметрыФормы(ПараметрыВыполнения, ПараметрКоманды); + // АПК:65-выкл ПолучитьФорму используется для вызова обработчика описания оповещения + КлиентскийМодуль = ПолучитьФорму(ОписаниеКоманды.ИмяФормы, ПараметрыФормы, ПараметрыВыполнения.Форма, Истина); + // АПК:65-вкл ИмяПроцедуры = ОписаниеКоманды.Обработчик; Иначе КлиентскийМодуль = ОбщегоНазначенияКлиент.ОбщийМодуль(МассивПодстрок[0]); ИмяПроцедуры = МассивПодстрок[1]; КонецЕсли; - Обработчик = Новый ОписаниеОповещения(ИмяПроцедуры, КлиентскийМодуль, Контекст); + Обработчик = Новый ОписаниеОповещения(ИмяПроцедуры, КлиентскийМодуль, ПараметрыВыполнения); ВыполнитьОбработкуОповещения(Обработчик, ПараметрКоманды); ИначеЕсли ЗначениеЗаполнено(ОписаниеКоманды.ИмяФормы) Тогда - ПараметрыФормы = ПараметрыФормы(Контекст, ПараметрКоманды); - ОткрытьФорму(ОписаниеКоманды.ИмяФормы, ПараметрыФормы, Контекст.Форма, Истина); + ПараметрыФормы = ПараметрыФормы(ПараметрыВыполнения, ПараметрКоманды); + ОткрытьФорму(ОписаниеКоманды.ИмяФормы, ПараметрыФормы, ПараметрыВыполнения.Форма, Истина); КонецЕсли; КонецЕсли; КонецПроцедуры @@ -205,7 +260,9 @@ РежимЗаписи = РежимЗаписиДокумента.Проведение; КонецЕсли; - Контекст.Форма.Записать(Новый Структура("РежимЗаписи", РежимЗаписи)); + ПараметрыВыполненияПодключаемойКоманды = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(Контекст); + ПараметрыВыполненияПодключаемойКоманды.Удалить("Форма"); + Контекст.Форма.Записать(Новый Структура("РежимЗаписи,ПараметрыВыполненияПодключаемойКоманды", РежимЗаписи, ПараметрыВыполненияПодключаемойКоманды)); Если Контекст.Источник.Ссылка.Пустая() Или Контекст.Форма.Модифицированность Тогда Возврат; // Запись не удалась, сообщения о причинах выводит платформа. @@ -253,7 +310,6 @@ Если Контекст.ЭтоФормаОбъекта Тогда Контекст.Форма.Прочитать(); КонецЕсли; - Контекст.Форма.ОбновитьОтображениеДанных(); КонецЕсли; Если НепроведенныеДокументы.Количество() > 0 Тогда @@ -351,7 +407,6 @@ ОповеститьОбИзменении(Тип); КонецЦикла; КонецЕсли; - Контекст.Форма.ОбновитьОтображениеДанных(); КонецПроцедуры Функция ВыбранныеОбъекты(Источник, ОписаниеКоманды) diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl index e952a1f7a..671889a72 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl @@ -12,7 +12,8 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма, для которой требуется обновление команд. -// Источник - ДанныеФормыСтруктура, ТаблицаФормы - контекст для проверки условий (Форма.Объект или Форма.Элементы.Список). +// Источник - ДанныеФормыСтруктура +// - ТаблицаФормы - контекст для проверки условий (Форма.Объект или Форма.Элементы.Список). // Процедура ОбновитьКоманды(Форма, Источник) Экспорт Структура = Новый Структура("ПараметрыПодключаемыхКоманд", Null); @@ -107,22 +108,28 @@ #Область СлужебныеПроцедурыИФункции -// Шаблон второго параметра обработчика команды. +// Свойства второго параметра обработчика подключаемой команды, общие для клиентских и серверных обработчиков. // // Возвращаемое значение: -// Структура - Вспомогательные параметры: -// * ОписаниеКоманды - Структура - описание команды(см. ПодключаемыеКоманды.ТаблицаКоманд): -// ** Идентификатор - Строка - Идентификатор команды. -// ** Представление - Строка - Представление команды в форме. -// ** ДополнительныеПараметры - Структура - Дополнительные параметры команды. -// * Форма - ФормаКлиентскогоПриложения - Форма, из которой вызвана команда. +// Структура: +// * ОписаниеКоманды - Структура - состав свойств совпадает с колонками таблицы значений параметра Команды +/// процедуры ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. +// Ключевые свойства: +// ** Идентификатор - Строка - идентификатор команды. +// ** Представление - Строка - представление команды в форме. +// ** Имя - Строка - имя команды в форме. +// * Форма - ФормаКлиентскогоПриложения - форма, из которой вызвана команда. // * ЭтоФормаОбъекта - Булево - Истина, если команда вызвана из формы объекта. -// * Источник - ТаблицаФормы, ДанныеФормыСтруктура - Объект или список формы с полем "Ссылка". +// * Источник - ТаблицаФормы +// - ДанныеФормыСтруктура - объект или список формы с полем "Ссылка". // -Функция ШаблонПараметровВыполненияКоманды() Экспорт - Структура = Новый Структура("ОписаниеКоманды, Форма, Источник"); - Структура.Вставить("ЭтоФормаОбъекта", Ложь); - Возврат Структура; +Функция ПараметрыВыполненияКоманды() Экспорт + Результат = Новый Структура; + Результат.Вставить("ОписаниеКоманды", Неопределено); + Результат.Вставить("Форма", Неопределено); + Результат.Вставить("Источник", Неопределено); + Результат.Вставить("ЭтоФормаОбъекта", Ложь); + Возврат Результат; КонецФункции Функция УсловияВыполняются(Условия, ЗначенияРеквизитов) diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl index b83790263..e76bfc309 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl @@ -46,7 +46,7 @@ // программный интерфейс. // // Параметры: -// НастройкиПрограммногоИнтерфейса - ТаблицаЗначений - с колонками: +// НастройкиПрограммногоИнтерфейса - ТаблицаЗначений: // * Ключ - Строка - имя настройки, например "ДобавитьМотиваторы". // * ОписаниеТипов - ОписаниеТипов - тип настройки, например: Новый ОписаниеТипов("Булево"). // * ВидыПодключаемыхОбъектов - Строка - имена видов объектов метаданных, для которых будет доступна эта настройка, @@ -76,13 +76,13 @@ // Результат кэшируется с помощью модуля с повторными использованием возвращаемых значений (в разрезе имен форм). // // Параметры: -// НастройкиФормы - Структура - сведения о форме, в которой выводятся команды. Для чтения. +// НастройкиФормы - Структура - сведения о форме, в которой выводятся команды. Для чтения: // * ИмяФормы - Строка - полное имя формы, в которой выводятся подключаемые команды. // Например, "Документ.Анкета.ФормаСписка". // // Источники - ДеревоЗначений - сведения о поставщиках команд этой формы. // На втором уровне дерева могут располагаться источники, регистрируемые автоматически при регистрации владельца. -// Например, документы-регистраторы журналов. +// Например, документы-регистраторы журналов: // * Метаданные - ОбъектМетаданных - метаданные объекта. // * ПолноеИмя - Строка - полное имя объекта. Например: "Документ.ИмяДокумента". // * Вид - Строка - вид объекта в верхнем регистре. Например: "СПРАВОЧНИК". @@ -90,7 +90,8 @@ // нет модуля менеджера или если его не удалось получить. // * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - ссылка объекта метаданных. // * ЭтоЖурналДокументов - Булево - Истина, если объект является журналом документов. -// * ТипСсылкиДанных - Тип, ОписаниеТипов - тип ссылки элемента. +// * ТипСсылкиДанных - Тип +// - ОписаниеТипов - тип ссылки элемента. // // ПодключенныеОтчетыИОбработки - ТаблицаЗначений - отчеты и обработки, предоставляющие свои команды // для объектов Источники: @@ -136,7 +137,7 @@ // * МножественныйВыбор - Булево - если Истина, то команда поддерживает множественный выбор. // В этом случае в параметре выполнения будет передан список ссылок. // Необязательный. Значение по умолчанию - Истина. -// * РежимЗаписи - Строка - действия, связанные с записью объекта, которые выполняются перед обработчиком команды. +// * РежимЗаписи - Строка - действия, связанные с записью объекта, которые выполняются перед обработчиком команды: // ** "НеЗаписывать" - объект не записывается, а в параметрах обработчика вместо ссылок передается // вся форма. В этом режиме рекомендуется работать напрямую с формой, // которая передается в структуре 2-го параметра обработчика команды. @@ -153,7 +154,8 @@ // * ИмяФормы - Строка - имя формы, которую требуется получить для выполнения команды. // Если Обработчик не указан, то у формы вызывается метод "Открыть". // * ИмяПараметраФормы - Строка - имя параметра формы, в который следует передать ссылку или массив ссылок. -// * ПараметрыФормы - Неопределено, Структура - параметры формы, указанной в ИмяФормы. Необязательный. +// * ПараметрыФормы - Неопределено +// - Структура - параметры формы, указанной в ИмяФормы. Необязательный. // * Обработчик - Строка - описание процедуры, обрабатывающей основное действие команды, в виде: // "<ИмяОбщегоМодуля>.<ИмяПроцедуры>", если процедура размещена в общем модуле; // либо "<ИмяПроцедуры>" - в следующих случаях: diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl index fad18f881..ab77ccd66 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl @@ -80,10 +80,103 @@ Возврат Результат; КонецФункции +// Добавляет к коллекции дублей, связанные подчиненные объекты +// +// Параметры: +// ПарыЗамен - см. ОбщегоНазначения.ЗаменитьСсылки.ПарыЗамен +// ПараметрыЗамены - см. ОбщегоНазначения.ПараметрыЗаменыСсылок +// +Процедура ДополнитьДублиСвязаннымиПодчиненнымиОбъектами(ПарыЗамен, ПараметрыЗамены) Экспорт + + СвязиОбъектов = ОбщегоНазначения.ПодчиненныеОбъекты(); + СвязиПодчиненныхОбъектов = СвязиПодчиненныхОбъектовПоТипам(); + ОписаниеПодчиненныхОбъектов = Новый Соответствие; + + Для каждого СтрокаСвязи Из СвязиОбъектов Цикл + ДобавитьСвязиПодчиненныхОбъектов(СвязиПодчиненныхОбъектов, СтрокаСвязи); + ЗаполнитьОписаниеОбъекта(ОписаниеПодчиненныхОбъектов, СтрокаСвязи); + КонецЦикла; + + ТаблицыЗамен = Новый Соответствие; + Для каждого ОригиналДубль Из ПарыЗамен Цикл + ОтметитьИспользуемыеСвязи(ОригиналДубль.Значение, СвязиПодчиненныхОбъектов); + ДобавитьВТаблицыЗамены(ОригиналДубль, ТаблицыЗамен, СвязиПодчиненныхОбъектов); + КонецЦикла; + + Фильтр = Новый Структура("Используется", Истина); + ИспользуемыеСвязи = СвязиПодчиненныхОбъектов.Скопировать(Фильтр); + Если ИспользуемыеСвязи.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ИспользуемыеСвязи.Сортировать("Ключ"); + + МВТ = Новый МенеджерВременныхТаблиц; + ПоместитьТаблицыЗаменВЗапрос(МВТ, ТаблицыЗамен); + + ТаблицыНайденныхДублей = Новый Соответствие; + ЧастиПакета = Новый Массив; + Позиция = 0; + Пока Позиция <= ИспользуемыеСвязи.Количество() - 1 Цикл + + ИмяПодчиненногоОбъекта = ИспользуемыеСвязи[Позиция].Ключ; + ОписаниеПодчиненногоОбъекта = ОписаниеПодчиненныхОбъектов[ИмяПодчиненногоОбъекта]; + Фильтр = Новый Структура("Ключ, Используется", ИмяПодчиненногоОбъекта, Истина); + СвязиПодчиненногоОбъекта = СвязиПодчиненныхОбъектов.НайтиСтроки(Фильтр); + ЧастиПакета.Добавить(ТекстЗапросаОбъектовДляЗамены( + ОписаниеПодчиненногоОбъекта + ,СвязиПодчиненногоОбъекта)); + + ТаблицыНайденныхДублей.Вставить(ОписаниеПодчиненногоОбъекта.Ключ, ЧастиПакета.Количество()*3-1);// 3 - количество добавляемых пакетов + Позиция = Позиция + СвязиПодчиненногоОбъекта.Количество(); + + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МВТ; + Запрос.Текст = СтрСоединить(ЧастиПакета, ОбщегоНазначения.РазделительПакетаЗапросов()); + Результат = Запрос.ВыполнитьПакет(); + + Для каждого Замена Из ТаблицыНайденныхДублей Цикл + + НеподобранныеЗамены = Новый Массив; + ОписаниеПодчиненногоОбъекта = ОписаниеПодчиненныхОбъектов[Замена.Ключ]; + ПодобранныеЗамены = Результат[Замена.Значение].Выгрузить(); + + ДобавитьНайденныеКлючиВДубли(ПодобранныеЗамены, ПарыЗамен, НеподобранныеЗамены); + + Если ЗначениеЗаполнено(ОписаниеПодчиненногоОбъекта.ИмяМодуляМетодаПоиска) + И НеподобранныеЗамены.Количество() > 0 Тогда + + ВыполнитьПоискПоПрикладнымПравилам( + ИспользуемыеСвязи, + НеподобранныеЗамены, + ОписаниеПодчиненногоОбъекта, + ПарыЗамен); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс +// Вызывается при поиске возможных дублей для фильтрации мест появления возможных дублей +// в рабочем месте поиска дублей на последнем шаге помощника +// +// Возвращаемое значение: +// Массив из Тип +// +Функция ТипыИсключаемыеИзВозможныхДублей() Экспорт + + ИсключаемыеТипы = Новый Массив; + ИнтеграцияПодсистемБСП.ПриДобавленииТиповИсключаемыхИзВозможныхДублей(ИсключаемыеТипы); + Возврат ИсключаемыеТипы; + +КонецФункции + Функция ПроверитьВозможностьЗаменыЭлементовСтрока(ПарыЗамен, ПараметрыЗамены) Экспорт Результат = ""; @@ -129,11 +222,76 @@ МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.МестаИспользованияСсылок); КонецПроцедуры +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд. +// +// Параметры: +// ВидыПодключаемыхКоманд - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд.ВидыПодключаемыхКоманд +// +Процедура ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд) Экспорт + + Если ВидыПодключаемыхКоманд.Найти("Администрирование", "Имя") = Неопределено Тогда + + Вид = ВидыПодключаемыхКоманд.Добавить(); + Вид.Имя = "Администрирование"; + Вид.ИмяПодменю = "Сервис"; + Вид.Заголовок = НСтр("ru = 'Сервис'"); + Вид.Порядок = 80; + Вид.Картинка = БиблиотекаКартинок.ПодменюСервис; + Вид.Отображение = ОтображениеКнопки.КартинкаИТекст; + + КонецЕсли; + +КонецПроцедуры + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. +// +// Параметры: +// НастройкиФормы - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.НастройкиФормы +// Источники - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Источники +// ПодключенныеОтчетыИОбработки - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.ПодключенныеОтчетыИОбработки +// Команды - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Команды +// +Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт + + ПодключенныеОбъекты = ОбъектыСКомандамиОбъединенияДублей(); + Для каждого ПодключенныйОбъект Из ПодключенныеОбъекты Цикл + + Если ПравоДоступа("Изменение", ПодключенныйОбъект) + И Источники.Строки.Найти(ПодключенныйОбъект, "Метаданные") <> Неопределено Тогда + + Команда = Команды.Добавить(); + Команда.Вид = "Администрирование"; + Команда.Важность = "СмТакже"; + Команда.Представление = НСтр("ru = 'Объединить выделенные...'"); + Команда.РежимЗаписи = "НеЗаписывать"; + Команда.ВидимостьВФормах = "ФормаСписка"; + Команда.МножественныйВыбор = Истина; + Команда.Обработчик = "ПоискИУдалениеДублейКлиент.ОбъединитьВыделенные"; + Команда.ТолькоВоВсехДействиях = Истина; + Команда.Порядок = 40; + + Команда = Команды.Добавить(); + Команда.Вид = "Администрирование"; + Команда.Важность = "СмТакже"; + Команда.Представление = НСтр("ru = 'Заменить выделенные...'"); + Команда.РежимЗаписи = "НеЗаписывать"; + Команда.ВидимостьВФормах = "ФормаСписка"; + Команда.МножественныйВыбор = Истина; + Команда.Обработчик = "ПоискИУдалениеДублейКлиент.ЗаменитьВыделенные"; + Команда.ТолькоВоВсехДействиях = Истина; + Команда.Порядок = 40; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции -// См. Обработка.ПоискИУдалениеДублей +// см. Обработка.ПоискИУдалениеДублей. Функция ДоступныеИменаРеквизитовОтбора(Знач КоллекцияМетаданных) Результат = ""; ТипХранилища = Тип("ХранилищеЗначения"); @@ -174,27 +332,27 @@ // Производит замену ссылок во всех данных информационной базы. // // Параметры: -// Параметры - Структура - где: -// * ПарыЗамен - Соответствие - Пары замен. -// * Ключ - ЛюбаяСсылка - Что ищем (дубль). -// * Значение - ЛюбаяСсылка - На что заменяем (оригинал). +// Параметры - Структура: +// * ПарыЗамен - Соответствие: +// * Ключ - ЛюбаяСсылка - что ищем (дубль). +// * Значение - ЛюбаяСсылка - на что заменяем (оригинал). // Ссылки сами на себя и пустые ссылки для поиска будут проигнорированы. -// * СпособУдаления - Строка - Необязательный. Что делать с дублем после успешной замены. +// * СпособУдаления - Строка - необязательный. Что делать с дублем после успешной замены. // "" - По умолчанию. Не предпринимать никаких действий. // "Пометка" - Помечать на удаление. // "Непосредственно" - Удалять непосредственно. // АдресРезультата - Строка - адрес временного хранилища, куда будет помещен результат замены - ТаблицаЗначений: -// * Ссылка - ЛюбаяСсылка - Ссылка, которую заменяли. -// * ОбъектОшибки - Произвольный - Объект - причина ошибки. -// * ПредставлениеОбъектаОшибки - Строка - Строковое представление объекта ошибки. -// * ТипОшибки - Строка - Маркер типа ошибки. Возможны варианты: +// * Ссылка - ЛюбаяСсылка - ссылка, которую заменяли. +// * ОбъектОшибки - Произвольный - объект - причина ошибки. +// * ПредставлениеОбъектаОшибки - Строка - строковое представление объекта ошибки. +// * ТипОшибки - Строка - маркер типа ошибки. Возможны варианты: // "ОшибкаБлокировки" - при обработке ссылки некоторые объекты были заблокированы // "ДанныеИзменены" - в процессе обработки данные были изменены другим пользователем // "ОшибкаЗаписи" - не смогли записать объект // "НеизвестныеДанные" - при обработке были найдены данные, которые // не планировались к анализу, замена не реализована // "ЗаменаЗапрещена" - обработчик ВозможностьЗаменыЭлементов вернул отказ. -// * ТекстОшибки - Строка - Подробное описание ошибки. +// * ТекстОшибки - Строка - подробное описание ошибки. // Процедура ЗаменитьСсылки(Параметры, Знач АдресРезультата) Экспорт @@ -211,7 +369,7 @@ // Формирует таблицу обслуживаемых объектов метаданных и их общие настройки. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: +// ТаблицаЗначений: // * ПолноеИмя - Строка - полное имя метаданных объекта-таблицы. // * ПредставлениеЭлемента - Строка - представление элемента для пользователя. // * ПредставлениеСписка - Строка - представление списка для пользователя. @@ -290,24 +448,24 @@ КонецФункции // Параметры: -// ПравилаПоиска - ТаблицаЗначений - где: -// ** Реквизит - Строка - -// ** Правило - Строка - -// КомпоновщикПредварительногоОтбора - КомпоновщикНастроекКомпоновкиДанных - +// ПравилаПоиска - ТаблицаЗначений: +// * Реквизит - Строка +// * Правило - Строка +// КомпоновщикПредварительногоОтбора - КомпоновщикНастроекКомпоновкиДанных // // Возвращаемое значение: -// Структура - где: -// * ПравилаПоиска - ТаблицаЗначений - где: -// ** Реквизит - Строка - -// ** Правило - Строка - -// * СравнениеСтрокНаПодобие - Структура, где: -// ** ПроцентСовпаденияСтрок - Число - -// ** ПроцентСовпаденияНебольшихСтрок - Число - -// ** ДлинаНебольшихСтрок - Число - -// ** СловаИсключения - Массив - -// * КомпоновщикОтбора - КомпоновщикНастроекКомпоновкиДанных - -// * ОграниченияСравнения - Массив - -// * КоличествоЭлементовДляСравнения - Число - +// Структура: +// * ПравилаПоиска - ТаблицаЗначений: +// ** Реквизит - Строка +// ** Правило - Строка +// * СравнениеСтрокНаПодобие - Структура: +// ** ПроцентСовпаденияСтрок - Число +// ** ПроцентСовпаденияНебольшихСтрок - Число +// ** ДлинаНебольшихСтрок - Число +// ** СловаИсключения - Массив +// * КомпоновщикОтбора - КомпоновщикНастроекКомпоновкиДанных +// * ОграниченияСравнения - Массив +// * КоличествоЭлементовДляСравнения - Число // Функция ПараметрыПоискаДублей(ПравилаПоиска, КомпоновщикПредварительногоОтбора) Экспорт @@ -323,8 +481,410 @@ Результат.Вставить("КомпоновщикОтбора", КомпоновщикПредварительногоОтбора); Результат.Вставить("ОграниченияСравнения", Новый Массив); Результат.Вставить("КоличествоЭлементовДляСравнения", 1500); + Результат.Вставить("СкрыватьНезначимыеДубли", Истина); Возврат Результат; КонецФункции +#Область ЗаменаДублейВКлючахАналитики + +// Возвращает связи подчиненных объектов с указанием типа поля связи. +// +// Параметры: +// СвязиПодчиненныхОбъектов - см. ОбщегоНазначения.СвязиПодчиненныхОбъектов +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ключ - Тип +// * ТипРеквизита - Строка +// * ИмяРеквизита - Строка +// * Используется - Булево +// * Метаданные - ОбъектМетаданных +// +Функция СвязиПодчиненныхОбъектовПоТипам() Экспорт + + СвязиПодчиненныхОбъектовПоТипам = Новый ТаблицаЗначений; + СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("ТипРеквизита", Новый ОписаниеТипов("Тип")); + СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("ИмяРеквизита", ОбщегоНазначения.ОписаниеТипаСтрока(0)); + СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("Ключ", ОбщегоНазначения.ОписаниеТипаСтрока(0)); + СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево")); + СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("Метаданные"); + + Возврат СвязиПодчиненныхОбъектовПоТипам; + +КонецФункции + +Процедура ДобавитьСвязиПодчиненныхОбъектов(СвязиПодчиненныхОбъектов, СтрокаСвязи) + + КлючевыеРеквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСвязи.ПоляСвязей,",",,Истина); + ИмяПодчиненногоОбъекта = СтрокаСвязи.ПодчиненныйОбъект.ПолноеИмя(); + Для каждого ИмяРеквизита Из КлючевыеРеквизиты Цикл + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта( + СтрокаСвязи.ПодчиненныйОбъект.СтандартныеРеквизиты, ИмяРеквизита) Тогда + + ТипРеквизита = СтрокаСвязи.ПодчиненныйОбъект.СтандартныеРеквизиты[ИмяРеквизита]; + Для каждого ТипРеквизита Из ТипРеквизита.Тип.Типы() Цикл + + Запись = СвязиПодчиненныхОбъектов.Добавить(); + Запись.Ключ = ИмяПодчиненногоОбъекта; + Запись.ТипРеквизита = ТипРеквизита; + Запись.ИмяРеквизита = ИмяРеквизита; + + КонецЦикла; + + ИначеЕсли ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта( + СтрокаСвязи.ПодчиненныйОбъект.Реквизиты, ИмяРеквизита) Тогда + + ТипРеквизита = СтрокаСвязи.ПодчиненныйОбъект.Реквизиты[ИмяРеквизита]; + Для каждого ТипРеквизита Из ТипРеквизита.Тип.Типы() Цикл + + Запись = СвязиПодчиненныхОбъектов.Добавить(); + Запись.Ключ = ИмяПодчиненногоОбъекта; + Запись.ТипРеквизита = ТипРеквизита; + Запись.ИмяРеквизита = ИмяРеквизита; + + КонецЦикла; + + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Не существует поле связи %1 в объекте метаданных %2'"), + ИмяРеквизита, ИмяПодчиненногоОбъекта); + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьОписаниеОбъекта(ОписаниеПодчиненныхОбъектов, СтрокаСвязи) + + ИмяПодчиненногоОбъекта = СтрокаСвязи.ПодчиненныйОбъект.ПолноеИмя(); + КлючевыеРеквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСвязи.ПоляСвязей,",",,Истина); + + ОписаниеОбъекта = НовыйОписаниеПодчиненногоОбъекта(); + ОписаниеОбъекта.Ключ = ИмяПодчиненногоОбъекта; + ОписаниеОбъекта.КлючевыеРеквизиты = КлючевыеРеквизиты; + ОписаниеОбъекта.ИмяМодуляМетодаПоиска = СтрокаСвязи.ПриПоискеЗаменыСсылок; + ОписаниеОбъекта.ВыполнятьАвтоматическийПоиск = СтрокаСвязи.ВыполнятьАвтоматическийПоискЗаменСсылок; + + ОписаниеПодчиненныхОбъектов.Вставить(ИмяПодчиненногоОбъекта, ОписаниеОбъекта); + +КонецПроцедуры + +Функция НовыйОписаниеПодчиненногоОбъекта() + + ОписаниеОбъекта = Новый Структура; + ОписаниеОбъекта.Вставить("Ключ"); + ОписаниеОбъекта.Вставить("КлючевыеРеквизиты"); + ОписаниеОбъекта.Вставить("ИмяМодуляМетодаПоиска"); + ОписаниеОбъекта.Вставить("ВыполнятьАвтоматическийПоиск"); + Возврат ОписаниеОбъекта; + +КонецФункции + +Процедура ОтметитьИспользуемыеСвязи(Дубль, СвязиПодчиненныхОбъектов) + + Если СвязиПодчиненныхОбъектов.Найти(ТипЗнч(Дубль), "ТипРеквизита") = Неопределено Тогда + Возврат; + КонецЕсли; + + МетаданныеСсылки = Дубль.Метаданные(); + Если СвязиПодчиненныхОбъектов.Найти(МетаданныеСсылки, "Метаданные") <> Неопределено Тогда + Возврат; + КонецЕсли; + + ИспользуемыеСвязи = СвязиПодчиненныхОбъектов.НайтиСтроки(Новый Структура("ТипРеквизита",ТипЗнч(Дубль))); + Для каждого Связь Из ИспользуемыеСвязи Цикл + + Связь.Метаданные = МетаданныеСсылки; + Связь.Используется = Истина; + + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// ТаблицаЗамен - ТаблицаЗначений: +// * Ссылка - ЛюбаяСсылка +// * Замена - ЛюбаяСсылка +// ПарыЗамен - Соответствие +// НеподобранныеЗамены - Массив из ЛюбаяСсылка +// +Процедура ДобавитьНайденныеКлючиВДубли(ТаблицаЗамен, ПарыЗамен, НеподобранныеЗамены) + + Для каждого НайденныйДубль Из ТаблицаЗамен Цикл + + Если НайденныйДубль.Замена = NULL Тогда + НеподобранныеЗамены.Добавить(НайденныйДубль); + Иначе + ПарыЗамен.Вставить(НайденныйДубль.Ссылка, НайденныйДубль.Замена); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// НайденныйДубль - СтрокаТаблицыЗначений: +// * Ссылка - ЛюбаяСсылка +// * Замена - ЛюбаяСсылка +// ОписаниеПодчиненногоОбъекта - Произвольный +// ИспользуемыеСвязи - ТаблицаЗначений: +// * Ключ - Тип +// * ТипРеквизита - Строка +// * ИмяРеквизита - Строка +// * Используется - Булево +// * Метаданные - ОбъектМетаданных +// Возвращаемое значение: +// Структура: +// * ИспользуемыеСвязи - ТаблицаЗначений: +// ** Ключ - Тип +// ** ТипРеквизита - Строка +// ** ИмяРеквизита - Строка +// ** Используется - Булево +// ** Метаданные - ОбъектМетаданных +// * ЗаменяемоеЗначение - ЛюбаяСсылка +// +Функция НовыйПараметрыЗамены(НайденныйДубль, ОписаниеПодчиненногоОбъекта, ИспользуемыеСвязи) + + ПараметрыЗамены = Новый Структура; + ПараметрыЗамены.Вставить("ЗаменяемоеЗначение", НайденныйДубль.Ссылка); + ПараметрыЗамены.Вставить("ИспользуемыеСвязи", + ИспользуемыеСвязи.Скопировать(Новый Структура("Ключ",ОписаниеПодчиненногоОбъекта.Ключ))); + ПараметрыЗамены.Вставить("ЗначениеКлючевыхРеквизитов", Новый Структура); + + КлючевыеРеквизиты = ОписаниеПодчиненногоОбъекта.КлючевыеРеквизиты; + Для каждого КлючевойРеквизит Из КлючевыеРеквизиты Цикл + ПараметрыЗамены.ЗначениеКлючевыхРеквизитов.Вставить(КлючевойРеквизит, НайденныйДубль[КлючевойРеквизит]); + КонецЦикла; + + Возврат ПараметрыЗамены; + +КонецФункции + +Функция ТекстЗапросаОбъектовДляЗамены(ОписаниеПодчиненногоОбъекта, Связи) + + ТекстЗапроса = ШаблонЗапроса(); + + ИмяКлюча = СтрЗаменить(ОписаниеПодчиненногоОбъекта.Ключ, ".", ""); + ТаблицаКлюча = ОписаниеПодчиненногоОбъекта.Ключ; + + НеИзменяемыеРеквизиты = ""; + ИзменяемыеРеквизиты = ""; + ЗначениеКлючей = ""; + ЗначениеИзменяемыеРеквизиты = ""; + СоединениеЗначениеЗаменяемыхРеквизитов = ""; + СвязиПоКлючу = ""; + + ИзменяемыеРеквизитыМассив = Новый Массив; + Если ОписаниеПодчиненногоОбъекта.ВыполнятьАвтоматическийПоиск Тогда + + Для каждого Связь Из Связи Цикл + ИзменяемыеРеквизитыМассив.Добавить(Связь.ИмяРеквизита); + КонецЦикла; + + КонецЕсли; + + Для каждого КлючевойРеквизит Из ОписаниеПодчиненногоОбъекта.КлючевыеРеквизиты Цикл + + Значение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ОБЪЕДИНИТЬ + |ВЫБРАТЬ + | Таб.Ссылка КАК Ссылка + | {НеИзменяемыеРеквизиты} + | {ИзменяемыеРеквизиты} + |ИЗ + | {ТаблицаКлюча} КАК Таб + |ГДЕ + | Таб.%1 В + | (ВЫБРАТЬ + | Таб.Оригинал + | ИЗ + | ТаблицаЗамен КАК Таб)", КлючевойРеквизит); + ЗначениеКлючей = ЗначениеКлючей + Значение; + + Значение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("И Таб.%1 = Замена.%1 ", КлючевойРеквизит); + СвязиПоКлючу = СвязиПоКлючу + Значение; + + Если ИзменяемыеРеквизитыМассив.Найти(КлючевойРеквизит) <> Неопределено Тогда + + Значение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(",Таб.%1 КАК %1", КлючевойРеквизит); + ИзменяемыеРеквизиты = ИзменяемыеРеквизиты + Значение; + + Значение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(",ВЫБОР КОГДА Замена%1.Оригинал IS NULL ТОГДА Таб.%1 ИНАЧЕ Замена%1.Дубль КОНЕЦ КАК %1", КлючевойРеквизит); + ЗначениеИзменяемыеРеквизиты = ЗначениеИзменяемыеРеквизиты + Значение; + + Значение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(" ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаЗамен КАК Замена%1 + |ПО Таб.%1 = Замена%1.Оригинал", КлючевойРеквизит); + СоединениеЗначениеЗаменяемыхРеквизитов = СоединениеЗначениеЗаменяемыхРеквизитов + Значение; + + Иначе + + Значение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(",Таб.%1 КАК %1", КлючевойРеквизит); + НеИзменяемыеРеквизиты = НеИзменяемыеРеквизиты + Значение; + + КонецЕсли; + + КонецЦикла; + + ВставитьВТекстЗапроса(ТекстЗапроса, "ЗначениеКлючей", ЗначениеКлючей); + ВставитьВТекстЗапроса(ТекстЗапроса, "ЗначениеИзменяемыеРеквизиты", ЗначениеИзменяемыеРеквизиты); + ВставитьВТекстЗапроса(ТекстЗапроса, "СоединениеЗначениеЗаменяемыхРеквизитов", СоединениеЗначениеЗаменяемыхРеквизитов); + ВставитьВТекстЗапроса(ТекстЗапроса, "СвязиПоКлючу", СвязиПоКлючу); + ВставитьВТекстЗапроса(ТекстЗапроса, "НеИзменяемыеРеквизиты", НеИзменяемыеРеквизиты); + ВставитьВТекстЗапроса(ТекстЗапроса, "ИзменяемыеРеквизиты", ИзменяемыеРеквизиты); + + ВставитьВТекстЗапроса(ТекстЗапроса, "ТаблицаКлюча", ТаблицаКлюча); + ВставитьВТекстЗапроса(ТекстЗапроса, "ИмяКлюча", ИмяКлюча); + + Возврат ТекстЗапроса; + +КонецФункции + +Функция ШаблонЗапроса() + + Возврат "// НАЧАЛО {ИмяКлюча} + |ВЫБРАТЬ + | Таб.Ссылка КАК Ссылка + | {НеИзменяемыеРеквизиты} + | {ИзменяемыеРеквизиты} + |ПОМЕСТИТЬ {ИмяКлюча}_ИсходныеДанные + |ИЗ + | {ТаблицаКлюча} КАК Таб + |ГДЕ + | ЛОЖЬ + | + |{ЗначениеКлючей} + |; + |ВЫБРАТЬ + | Таб.Ссылка КАК Ссылка + | {НеИзменяемыеРеквизиты} + | {ЗначениеИзменяемыеРеквизиты} + |ПОМЕСТИТЬ {ИмяКлюча}_ЗначениеРеквизитовПослеЗамены + |ИЗ + | {ИмяКлюча}_ИсходныеДанные КАК Таб + | {СоединениеЗначениеЗаменяемыхРеквизитов} + |; + |ВЫБРАТЬ + | Таб.Ссылка КАК Ссылка, + | Замена.Ссылка КАК Замена + | {НеИзменяемыеРеквизиты} + | {ИзменяемыеРеквизиты} + |ИЗ + | {ИмяКлюча}_ЗначениеРеквизитовПослеЗамены КАК Таб + | ЛЕВОЕ СОЕДИНЕНИЕ {ТаблицаКлюча} КАК Замена + | ПО Таб.Ссылка <> Замена.Ссылка + | {СвязиПоКлючу} + |//КОНЕЦ {ИмяКлюча} + |"; + +КонецФункции + +Процедура ВставитьВТекстЗапроса(ТекстЗапроса, ИмяПараметра, Текст) + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "{"+ИмяПараметра+"}", Текст); + +КонецПроцедуры + +Процедура ДобавитьВТаблицыЗамены(ОригиналДубль, ТаблицыЗамен, СвязиПодчиненныхОбъектов) + + МетаданныеКлючевогоРеквизита = ОригиналДубль.Ключ.Метаданные(); + ИмяТаблицыКлючевогоРеквизита = МетаданныеКлючевогоРеквизита.ПолноеИмя(); + КлючПоиска = СтрЗаменить(ИмяТаблицыКлючевогоРеквизита,".",""); + Если СвязиПодчиненныхОбъектов.Найти(МетаданныеКлючевогоРеквизита, "Метаданные") = Неопределено Тогда + Возврат; + КонецЕсли; + + ТаблицаЗамен = ТаблицыЗамен[КлючПоиска]; + Если ТаблицаЗамен = Неопределено Тогда + ЗапросТаблицы = Новый Запрос("ВЫБРАТЬ Таб.Ссылка КАК Оригинал, Таб.Ссылка КАК Дубль ИЗ " + ИмяТаблицыКлючевогоРеквизита + " КАК Таб ГДЕ ЛОЖЬ"); + ТаблицаЗамен = ЗапросТаблицы.Выполнить().Выгрузить(); + ТаблицыЗамен.Вставить(КлючПоиска, ТаблицаЗамен); + КонецЕсли; + + СтрокаЗамены = ТаблицаЗамен.Добавить(); + СтрокаЗамены.Оригинал = ОригиналДубль.Ключ; + СтрокаЗамены.Дубль = ОригиналДубль.Значение; + +КонецПроцедуры + +Процедура ПоместитьТаблицыЗаменВЗапрос(МВТ, ТаблицыЗамен) + + ЧастиЗапроса = Новый Массив; + Разделитель = Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МВТ; + + ТекстЗапроса = " + |ВЫБРАТЬ + | НЕОПРЕДЕЛЕНО КАК Оригинал, + | НЕОПРЕДЕЛЕНО КАК Дубль + |ПОМЕСТИТЬ ТаблицаЗамен + |ГДЕ + | ЛОЖЬ"; + + ШаблонЗапросаВставки = " + |ВЫБРАТЬ + | Таб.Оригинал КАК Оригинал, + | Таб.Дубль КАК Дубль + |ПОМЕСТИТЬ ВТ_ИмяТаблицы + |ИЗ + | &ИмяТаблицы КАК Таб"; + + ШаблонЗапросаОбъединения = " + |ВЫБРАТЬ + | Таб.Оригинал КАК Оригинал, + | Таб.Дубль КАК Дубль + |ИЗ + | ВТ_ИмяТаблицы КАК Таб"; + + Для каждого ТаблицаЗначения Из ТаблицыЗамен Цикл + + ЧастиЗапроса.Добавить(СтрЗаменить(ШаблонЗапросаВставки, "ИмяТаблицы", ТаблицаЗначения.Ключ)); + Запрос.УстановитьПараметр(ТаблицаЗначения.Ключ, ТаблицаЗначения.Значение); + ТекстЗапроса = ТекстЗапроса + Разделитель + СтрЗаменить(ШаблонЗапросаОбъединения, "ИмяТаблицы", ТаблицаЗначения.Ключ); + + КонецЦикла; + + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ИНДЕКСИРОВАТЬ ПО Оригинал"; + + ЧастиЗапроса.Добавить(ТекстЗапроса); + Запрос.Текст = СтрСоединить(ЧастиЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов()); + Запрос.Выполнить(); + +КонецПроцедуры + +Процедура ВыполнитьПоискПоПрикладнымПравилам(Знач ИспользуемыеСвязи, Знач НеподобранныеЗамены, Знач ОписаниеПодчиненногоОбъекта, Знач ПарыЗамен) + + Перем ПараметрыМетодаПоиска, Сч; + + Для Сч = 0 По НеподобранныеЗамены.Количество() - 1 Цикл + + НеподобранныеЗамены[Сч] = НовыйПараметрыЗамены( + НеподобранныеЗамены[Сч], + ОписаниеПодчиненногоОбъекта, + ИспользуемыеСвязи); + + КонецЦикла; + + ПараметрыМетодаПоиска = Новый Массив; + ПараметрыМетодаПоиска.Добавить(ПарыЗамен); + ПараметрыМетодаПоиска.Добавить(НеподобранныеЗамены); + ОбщегоНазначения.ВыполнитьМетодКонфигурации( + ОписаниеПодчиненногоОбъекта.ИмяМодуляМетодаПоиска+".ПриПоискеЗаменыСсылок", + ПараметрыМетодаПоиска); + +КонецПроцедуры + +Функция ОбъектыСКомандамиОбъединенияДублей() + + ОбъектыСКомандами = Новый Массив; + ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСКомандамиОбъединенияДублейЗаменыСсылок(ОбъектыСКомандами); + Возврат ОбъектыСКомандами; + +КонецФункции + +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl index 81f4a3157..53440de98 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl @@ -11,29 +11,63 @@ // Открывает форму объединения элементов справочников, планов видов характеристик, видов расчетов и счетов. // // Параметры: -// ОбъединяемыеЭлементы - ТаблицаФормы, Массив, СписокЗначений - список элементов к объединению. +// ОбъединяемыеЭлементы - ТаблицаФормы +// - Массив из ЛюбаяСсылка +// - СписокЗначений - список элементов к объединению. // Также можно передать произвольную коллекцию элементов с реквизитом "Ссылка". +// ДополнительныеПараметры - см. ПодключаемыеКомандыКлиентСервер.ШаблонПараметровВыполненияКоманды // -Процедура ОбъединитьВыделенные(Знач ОбъединяемыеЭлементы) Экспорт +Процедура ОбъединитьВыделенные(Знач ОбъединяемыеЭлементы, ДополнительныеПараметры = Неопределено) Экспорт ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("НаборСсылок", МассивСсылок(ОбъединяемыеЭлементы)); - ОткрытьФорму("Обработка.ЗаменаИОбъединениеЭлементов.Форма.ОбъединениеЭлементов", ПараметрыФормы); + + ПараметрыОткрытияФормы = Новый Структура("Владелец, Уникальность, Окно, НавигационнаяСсылка, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкна"); + Если ДополнительныеПараметры <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ПараметрыОткрытияФормы, ДополнительныеПараметры); + КонецЕсли; + + ОткрытьФорму( + "Обработка.ЗаменаИОбъединениеЭлементов.Форма.ОбъединениеЭлементов", + ПараметрыФормы, + ПараметрыОткрытияФормы.Владелец, + ПараметрыОткрытияФормы.Уникальность, + ПараметрыОткрытияФормы.Окно, + ПараметрыОткрытияФормы.НавигационнаяСсылка, + ПараметрыОткрытияФормы.ОписаниеОповещенияОЗакрытии, + ПараметрыОткрытияФормы.РежимОткрытияОкна); КонецПроцедуры // Открывает форму замены и удаления элементов справочников, планов видов характеристик, видов расчетов и счетов. // // Параметры: -// ЗаменяемыеЭлементы - ТаблицаФормы, Массив, СписокЗначений - список элементов, которые нужно заменить и удалить. +// ЗаменяемыеЭлементы - ТаблицаФормы +// - Массив +// - СписокЗначений - список элементов, которые нужно заменить и удалить. // Также можно передать произвольную коллекцию элементов с реквизитом "Ссылка". +// ДополнительныеПараметры - см. ПодключаемыеКомандыКлиентСервер.ШаблонПараметровВыполненияКоманды // -Процедура ЗаменитьВыделенные(Знач ЗаменяемыеЭлементы) Экспорт +Процедура ЗаменитьВыделенные(Знач ЗаменяемыеЭлементы, ДополнительныеПараметры = Неопределено) Экспорт ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("НаборСсылок", МассивСсылок(ЗаменяемыеЭлементы)); ПараметрыФормы.Вставить("ОткрытаПоСценарию"); - ОткрытьФорму("Обработка.ЗаменаИОбъединениеЭлементов.Форма.ЗаменаЭлементов", ПараметрыФормы); + + ПараметрыОткрытияФормы = Новый Структура("Владелец, Уникальность, Окно, НавигационнаяСсылка, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкна"); + Если ДополнительныеПараметры <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ПараметрыОткрытияФормы, ДополнительныеПараметры); + КонецЕсли; + + ОткрытьФорму( + "Обработка.ЗаменаИОбъединениеЭлементов.Форма.ЗаменаЭлементов", + ПараметрыФормы, + ПараметрыОткрытияФормы.Владелец, + ПараметрыОткрытияФормы.Уникальность, + ПараметрыОткрытияФормы.Окно, + ПараметрыОткрытияФормы.НавигационнаяСсылка, + ПараметрыОткрытияФормы.ОписаниеОповещенияОЗакрытии, + ПараметрыОткрытияФормы.РежимОткрытияОкна); КонецПроцедуры @@ -41,7 +75,10 @@ // В отчет не включаются вспомогательные данные, такие как наборы записей с ведущим измерением и т.п. // // Параметры: -// Элементы - ТаблицаФормы, ДанныеФормыКоллекция, Массив, СписокЗначений - список элементов для анализа. +// Элементы - ТаблицаФормы +// - ДанныеФормыКоллекция +// - Массив из ЛюбаяСсылка +// - СписокЗначений - список элементов для анализа. // Также можно передать произвольную коллекцию элементов с реквизитом "Ссылка". // ПараметрыОткрытия - Структура - необязательный. Параметры открытия формы. Состоит из необязательных полей. // Владелец, Уникальность, Окно, НавигационнаяСсылка, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкна, @@ -82,6 +119,16 @@ #Область СлужебныеПроцедурыИФункции +// Параметры: +// Элементы - ДанныеФормыКоллекция: +// * Ссылка - ЛюбаяСсылка +// - СписокЗначений из ЛюбаяСсылка +// - ТаблицаФормы +// * Ссылка - ЛюбаяСсылка +// - Массив из ЛюбаяСсылка +// Возвращаемое значение: +// СписокЗначений, Массив из ЛюбаяСсылка, СписокЗначений +// Функция МассивСсылок(Знач Элементы) ТипПараметра = ТипЗнч(Элементы); @@ -89,7 +136,7 @@ Если ТипЗнч(Элементы) = Тип("ТаблицаФормы") Тогда Ссылки = Новый Массив; - Для Каждого Элемент Из Элементы.ВыделенныеСтроки Цикл + Для Каждого Элемент Из Элементы.ВыделенныеСтроки Цикл ДанныеСтроки = Элементы.ДанныеСтроки(Элемент); Если ДанныеСтроки <> Неопределено Тогда Ссылки.Добавить(ДанныеСтроки.Ссылка); diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl index 3c6dad212..3611eace1 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl @@ -8,12 +8,12 @@ #Область ПрограммныйИнтерфейс -// Определить объекты, в модулях менеджеров которых предусмотрена возможность параметризации +// Определить объекты метаданных, в модулях менеджеров которых предусмотрена возможность параметризации // алгоритма поиска дублей с помощью экспортных процедур ПараметрыПоискаДублей, ПриПоискеДублей // и ВозможностьЗаменыЭлементов. // // Параметры: -// Объекты - Соответствие - объекты, в модулях менеджеров которых размещены экспортные процедуры. +// Объекты - Соответствие - объекты, в модулях менеджеров которых размещены экспортные процедуры: // ** Ключ - Строка - полное имя объекта метаданных, подключенного к подсистеме "Поиск и удаление дублей". // Например, "Справочник.Контрагенты". // ** Значение - Строка - имена экспортных процедур-обработчиков, определенных в модуле менеджера: @@ -35,6 +35,23 @@ +КонецПроцедуры + +// Определить объекты, в формах списков которых +// будут выведены команды объединения дублей и замены ссылок +// см. ПоискИУдалениеДублейКлиент.ОбъединитьВыделенные и ПоискИУдалениеДублейКлиент.ЗаменитьВыделенные +// +// Параметры: +// Объекты - Массив из ОбъектМетаданных +// +// Пример: +// Объекты.Добавить(Метаданные.Справочники._ДемоНоменклатура); +// Объекты.Добавить(Метаданные.Справочники._ДемоКонтрагенты); +// +Процедура ПриОпределенииОбъектовСКомандамиОбъединенияДублейЗаменыСсылок(Объекты) Экспорт + + + КонецПроцедуры // Позволяет реализовать дополнительные проверки для пар ссылок на возможность замены одной на другую. @@ -68,8 +85,8 @@ // Например, "Справочник.Контрагенты". // ПараметрыПоиска - Структура - параметры поиска дублей (выходной параметр): // * ПравилаПоиска - ТаблицаЗначений - правила сравнения для объектов: -// ** Реквизит - Строка - Имя реквизита для сравнения. -// ** Правило - Строка - Правило сравнения: "Равно" - на точное равенство, "Подобно" - подобные строки, +// ** Реквизит - Строка - имя реквизита для сравнения. +// ** Правило - Строка - правило сравнения: "Равно" - на точное равенство, "Подобно" - подобные строки, // "" - не сравнивать. // * СравнениеСтрокНаПодобие - Структура - правила нечеткого поиска строк (сравнение строк на подобие): // ** ПроцентСовпаденияСтрок - Число - минимальный процент совпадения для строк (от 0 до 100). @@ -84,16 +101,16 @@ // По умолчанию, 30. // ** СловаИсключения - Массив Из Строка - список слов, которые следует пропускать при сравнении на подобие. // Например, для организаций и контрагентов это могут быть: ИП, ГУП, ООО, ОАО и т.д. -// * КомпоновщикОтбора - КомпоновщикНастроекКомпоновкиДанных - Инициализированный компоновщик для +// * КомпоновщикОтбора - КомпоновщикНастроекКомпоновкиДанных - инициализированный компоновщик для // предварительного отбора. Может быть изменен, например, для усиления отборов. // * ОграниченияСравнения - Массив Из Структура - описания прикладных правил-ограничений: // ** Представление - Строка - текстовое описание правила-ограничения. // ** ДополнительныеПоля - Строка - список реквизитов через запятую, значения которых // необходимы для анализа в ПриПоискеДублей. -// * КоличествоЭлементовДляСравнения - Число - Количество кандидатов в дубли, передаваемых одним вызовом +// * КоличествоЭлементовДляСравнения - Число - количество кандидатов в дубли, передаваемых одним вызовом // в параметр ТаблицаКандидатов обработчика ПриПоискеДублей. // По умолчанию, 1500. -// ДополнительныеПараметры - Произвольный - Значение, переданное при вызове ОбщегоНазначения.НайтиДублиЭлементов. +// ДополнительныеПараметры - Произвольный - значение, переданное при вызове ОбщегоНазначения.НайтиДублиЭлементов. // При вызове из обработки ПоискИУдалениеДублей равно Неопределено. // СтандартнаяОбработка - Булево - указать Ложь, если заполнен выходной параметр ПараметрыПоиска и необходим вызов // обработчика ПриПоискеДублей. По умолчанию Истина. diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index 85bf8fbee..6057d231e 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -128,6 +128,18 @@ КонецФункции +// Возвращает состояние функциональной опции использования полнотекстового поиска. +// +// Возвращаемое значение: +// Булево - если Истина, то полнотекстовый поиск используется. +// +Функция ИспользоватьПолнотекстовыйПоиск() Экспорт + + Возврат ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск"); + +КонецФункции + + #Область ОбработчикиСобытийПодсистемКонфигурации // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. @@ -137,7 +149,8 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск") + Или Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда Возврат; КонецЕсли; @@ -587,10 +600,11 @@ // Создает запись в журнале регистрации и сообщениях пользователю; // // Параметры: -// УровеньЖурнала - УровеньЖурналаРегистрации - Важность сообщения для администратора. -// КомментарийСПараметрами - Строка - Комментарий, который может содержать параметры %1. -// ИнформацияОбОшибке - ИнформацияОбОшибке, Строка - Информация об ошибке, которая будет размещена после комментария. -// Параметр - Строка - Для подстановки в КомментарийСПараметрами вместо %1. +// УровеньЖурнала - УровеньЖурналаРегистрации - важность сообщения для администратора. +// КомментарийСПараметрами - Строка - комментарий, который может содержать параметры %1. +// ИнформацияОбОшибке - ИнформацияОбОшибке +// - Строка - информация об ошибке, которая будет размещена после комментария. +// Параметр - Строка - для подстановки в КомментарийСПараметрами вместо %1. // Процедура ЗаписьЖурнала( УровеньЖурнала, diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl index e4201e1d4..87d201eae 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl @@ -12,16 +12,16 @@ // // Параметры: // URL - Строка - url файла в формате [Протокол://]<Сервер>/<Путь к файлу на сервере>. -// ПараметрыПолучения - см. ПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла. -// ЗаписыватьОшибку - Булево - Признак необходимости записи ошибки в журнал регистрации при получении файла. +// ПараметрыПолучения - см. ПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла +// ЗаписыватьОшибку - Булево - признак необходимости записи ошибки в журнал регистрации при получении файла. // // Возвращаемое значение: -// Структура - Структура со свойствами: +// Структура: // * Статус - Булево - результат получения файла. // * Путь - Строка - путь к файлу на сервере, ключ используется только если статус Истина. // * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь. // * Заголовки - Соответствие - см. в синтакс-помощнике описание параметра Заголовки объекта HTTPОтвет. -// * КодСостояния - Число - Добавляется при возникновении ошибки. +// * КодСостояния - Число - добавляется при возникновении ошибки. // См. в синтакс-помощнике описание параметра КодСостояния объекта HTTPОтвет. // Функция СкачатьФайлНаСервере(Знач URL, ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт @@ -45,13 +45,13 @@ // ЗаписыватьОшибку - Булево - признак необходимости записи ошибки в журнал регистрации при получении файла. // // Возвращаемое значение: -// Структура - Структура со свойствами: +// Структура: // * Статус - Булево - результат получения файла. // * Путь - Строка - адрес временного хранилища с двоичными данными файла, // ключ используется, только если статус Истина. // * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь. // * Заголовки - Соответствие - см. в синтакс-помощнике описание параметра Заголовки объекта HTTPОтвет. -// * КодСостояния - Число - Добавляется при возникновении ошибки. +// * КодСостояния - Число - добавляется при возникновении ошибки. // См. в синтакс-помощнике описание параметра КодСостояния объекта HTTPОтвет. // Функция СкачатьФайлВоВременноеХранилище(Знач URL, ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт @@ -68,7 +68,7 @@ // клиента для текущего пользователя. // // Возвращаемое значение: -// Соответствие - свойства: +// Соответствие: // ИспользоватьПрокси - использовать ли прокси-сервер. // НеИспользоватьПроксиДляЛокальныхАдресов - использовать ли прокси-сервер для локальных адресов. // ИспользоватьСистемныеНастройки - использовать ли системные настройки прокси-сервера. @@ -118,7 +118,7 @@ // Возвращает параметры настройки прокси-сервера на стороне сервера 1С:Предприятия. // // Возвращаемое значение: -// Соответствие - свойства: +// Соответствие: // ИспользоватьПрокси - использовать ли прокси-сервер. // НеИспользоватьПроксиДляЛокальныхАдресов - использовать ли прокси-сервер для локальных адресов. // ИспользоватьСистемныеНастройки - использовать ли системные настройки прокси-сервера. @@ -183,9 +183,10 @@ // // Параметры: // URL - Строка - адрес URL ресурса, диагностику которого надо выполнить. +// ЗаписыватьОшибку - Булево - признак необходимости записи ошибок в журнал регистрации. // // Возвращаемое значение: -// Структура - результат диагностики: +// Структура: // * ОписаниеОшибки - Строка - краткое описание ошибки. // * ЖурналДиагностики - Строка - подробный журнал диагностики с техническими подробностями. // @@ -196,7 +197,7 @@ // ОписаниеОшибки = Результат.ОписаниеОшибки; // ЖурналДиагностики = Результат.ЖурналДиагностики; // -Функция ДиагностикаСоединения(URL) Экспорт +Функция ДиагностикаСоединения(URL, ЗаписыватьОшибку = Истина) Экспорт Описание = Новый Массив; Описание.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -292,9 +293,11 @@ ЖурналДиагностики = СтрСоединить(Журнал, Символы.ПС); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Диагностика соединения'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ЖурналДиагностики); + Если ЗаписыватьОшибку Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Диагностика соединения'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ЖурналДиагностики); + КонецЕсли; Результат = Новый Структура; Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки); diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl index 546b8e962..82722c188 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl @@ -18,9 +18,9 @@ // ЗаписыватьОшибку - Булево - признак необходимости записи ошибки в журнал регистрации при получении файла. // // Возвращаемое значение: -// Структура - Структура со свойствами: -// * Статус - Булево - результат получения файла. -// * Путь - Строка - путь к файлу на клиенте, ключ используется только если статус Истина. +// Структура - сведения о полученном файле: +// * Статус - Булево - Истина, если файл получен успешно. +// * Путь - Строка - путь к файлу на клиенте, ключ используется только если статус Истина. // * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь. // * Заголовки - Соответствие - см. в синтакс-помощнике описание параметра Заголовки объекта HTTPОтвет. // * КодСостояния - Число - добавляется при возникновении ошибки. @@ -43,7 +43,9 @@ КонецЕсли; Если Результат.Статус Тогда - ПолучитьФайл(Результат.Путь, ПутьДляСохранения, Ложь); + // АПК:1348-выкл ФайловаяСистемаКлиент.СохранитьФайл не используется для совместимости (синхронный вызов). + ПолучитьФайл(Результат.Путь, ПутьДляСохранения, Ложь); + // АПК:1348-вкл Результат.Путь = ПутьДляСохранения; КонецЕсли; diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index 6c801af95..e5830542c 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -11,7 +11,7 @@ // Возвращает структуру параметров для получения файла из Интернета. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ПутьДляСохранения - Строка - путь на сервере (включая имя файла) для сохранения скачанного файла. // Не заполняется при сохранении файла во временное хранилище. // * Пользователь - Строка - пользователь, от имени которого установлено соединение. @@ -30,7 +30,7 @@ // // Параметры только для ftp (ftps) соединения: // * ПассивноеСоединение - Булево - флаг указывает, что соединение должно пассивным (или активным). -// * УровеньИспользованияЗащищенногоСоединения - УровеньИспользованияЗащищенногоСоединенияFTP - См. описание +// * УровеньИспользованияЗащищенногоСоединения - УровеньИспользованияЗащищенногоСоединенияFTP - см. описание // одноименного свойства в синтакс-помощнике платформы. Значение по умолчанию - Авто. // Функция ПараметрыПолученияФайла() Экспорт @@ -62,7 +62,7 @@ // либо идентификатор протокола (http, ftp, ...). // // Возвращаемое значение: -// ИнтернетПрокси - Описывает параметры прокси-серверов для различных протоколов. +// ИнтернетПрокси - описывает параметры прокси-серверов для различных протоколов. // Если не удалось распознать схему сетевой протокол, // то будет создать прокси на основании протокола HTTP. // @@ -103,7 +103,7 @@ // URL - Строка - ссылка на ресурс в сети Интернет. // // Возвращаемое значение: -// Структура - Структура с полями: +// Структура: // * Протокол - Строка - протокол доступа к ресурсу. // * ИмяСервера - Строка - сервер, на котором располагается ресурс. // * ПутьКФайлуНаСервере - Строка - путь к ресурсу на сервере. @@ -130,14 +130,14 @@ // <схема>://<логин>:<пароль>@<хост>:<порт>/<путь>?<параметры>#<якорь>. // // Возвращаемое значение: -// Структура - Составные части URI согласно формату: -// * Схема - Строка - Схема URI. -// * Логин - Строка - Имя пользователя. -// * Пароль - Строка - Пароль пользователя. -// * ИмяСервера - Строка - Часть <хост>:<порт> входного параметра. -// * Хост - Строка - Имя сервера. -// * Порт - Строка - Порт сервера. -// * ПутьНаСервере - Строка - Часть <путь>?<параметры>#<якорь> входного параметра. +// Структура - составные части URI согласно формату: +// * Схема - Строка - схема URI. +// * Логин - Строка - имя пользователя. +// * Пароль - Строка - пароль пользователя. +// * ИмяСервера - Строка - часть <хост>:<порт> входного параметра. +// * Хост - Строка - имя сервера. +// * Порт - Строка - порт сервера. +// * ПутьНаСервере - Строка - часть <путь>?<параметры>#<якорь> входного параметра. // Функция СтруктураURI(Знач СтрокаURI) Экспорт @@ -156,9 +156,9 @@ // Служебная информация для отображения текущих настроек и состояний прокси для выполнения диагностики. // // Возвращаемое значение: -// Структура - со свойствами: -// * СоединениеЧерезПрокси - Булево - Признак того, что соединение должно выполняться через прокси. -// * Представление - Строка - Представление текущего настроенного прокси. +// Структура: +// * СоединениеЧерезПрокси - Булево - признак того, что соединение должно выполняться через прокси. +// * Представление - Строка - представление текущего настроенного прокси. // Функция СостояниеНастроекПрокси() Экспорт @@ -209,7 +209,7 @@ // "ftp". // // Возвращаемое значение: -// ИнтернетПрокси - +// ИнтернетПрокси // Функция НовыйИнтернетПрокси(НастройкаПроксиСервера, Протокол) diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl index d958c67d9..bbe71ea24 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl @@ -59,7 +59,7 @@ // // Параметры: // URL - строка - url файла в формате: -// НастройкиПолучения - Структура со свойствами. +// НастройкиПолучения - Структура: // * ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла. // * Пользователь - Строка - пользователь от имени которого установлено соединение. // * Пароль - Строка - пароль пользователя от которого установлено соединение. @@ -82,7 +82,7 @@ // если не задано будет сгенерировано автоматически. // // Возвращаемое значение: -// структура - +// структура // успех - булево - успех или неудача операции // строка - строка - в случае успеха либо строка-путь сохранения файла // либо адрес во временном хранилище @@ -139,7 +139,7 @@ // либо адрес во временном хранилище, если не задано будет сгенерировано автоматически. // // Возвращаемое значение: -// структура - +// структура // успех - булево - успех или неудача операции // строка - строка - в случае успеха либо строка-путь сохранения файла // либо адрес во временном хранилище @@ -240,7 +240,7 @@ Исключение - РезультатДиагностики = ПолучениеФайловИзИнтернета.ДиагностикаСоединения(URL); + РезультатДиагностики = ПолучениеФайловИзИнтернета.ДиагностикаСоединения(URL, ЗаписыватьОшибку); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить файл %1 с сервера %2:%3 @@ -314,7 +314,7 @@ Исключение - РезультатДиагностики = ПолучениеФайловИзИнтернета.ДиагностикаСоединения(URL); + РезультатДиагностики = ПолучениеФайловИзИнтернета.ДиагностикаСоединения(URL, ЗаписыватьОшибку); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось установить HTTP-соединение с сервером %1:%2 @@ -495,7 +495,7 @@ // // Параметры: // УспехОперации - булево - успех или неуспех операции. -// СообщениеПуть - строка - +// СообщениеПуть - строка // // Возвращаемое значение - структура: // поле успех - булево @@ -586,7 +586,7 @@ ИначеЕсли КодСостояния = 403 Тогда // Forbidden Расшифровка = НСтр("ru = 'К запрашиваемому ресурсу нет доступа.'"); ИначеЕсли КодСостояния = 404 Тогда // Not Found - Расшифровка = НСтр("ru = 'Запрашиваемый ресурс не найден на сервере.'"); + Расшифровка = НСтр("ru = 'Запрашиваемый ресурс не существует на сервере.'"); ИначеЕсли КодСостояния = 405 Тогда // Method Not Allowed Расшифровка = НСтр("ru = 'Метод запроса не поддерживается сервером.'"); ИначеЕсли КодСостояния = 406 Тогда // Not Acceptable @@ -793,7 +793,7 @@ // "ftp". // // Возвращаемое значение: -// ИнтернетПрокси - +// ИнтернетПрокси // Функция НовыйИнтернетПрокси(НастройкаПроксиСервера, Протокол) Экспорт @@ -877,9 +877,9 @@ // Служебная информация для отображения текущих настроек и состояний прокси для выполнения диагностики. // // Возвращаемое значение: -// Структура - со свойствами: -// * СоединениеЧерезПрокси - Булево - Признак того, что соединение должно выполняться через прокси. -// * Представление - Строка - Представление текущего настроенного прокси. +// Структура: +// * СоединениеЧерезПрокси - Булево - признак того, что соединение должно выполняться через прокси. +// * Представление - Строка - представление текущего настроенного прокси. // Функция СостояниеНастроекПрокси() Экспорт @@ -952,9 +952,9 @@ ПараметрыЗапускаПрограммы.КодировкаИсполнения = "OEM"; Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда - ШаблонКоманды = "ping %1 -n 2 -w 500"; + ШаблонКоманды = "ping %1 -n 4 -w 1000"; Иначе - ШаблонКоманды = "ping -c 2 -w 500 %1"; + ШаблонКоманды = "ping -c 4 -W 1 %1"; КонецЕсли; СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКоманды, АдресСервера); @@ -967,15 +967,15 @@ ЖурналДоступности = Результат.ПотокВывода + Результат.ПотокОшибок; Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда - ФактНедоступности = (СтрНайти(ЖурналДоступности, "Destination host unreachable") > 0); // Не локализуется. - БезПотерь = (СтрНайти(ЖурналДоступности, "(0% loss)") > 0); // Не локализуется. + Доступен = СтрНайти(ЖурналДоступности, "Destination host unreachable") = 0 // Не локализуется. + И (СтрНайти(ЖурналДоступности, "(0% loss)") > 0 // Не локализуется. + Или СтрНайти(ЖурналДоступности, "(25% loss)") > 0); // Не локализуется. Иначе - ФактНедоступности = (СтрНайти(ЖурналДоступности, "Destination Host Unreachable") > 0); // Не локализуется. - БезПотерь = (СтрНайти(ЖурналДоступности, "0% packet loss") > 0) // не локализуется. + Доступен = СтрНайти(ЖурналДоступности, "Destination Host Unreachable") = 0 // Не локализуется. + И (СтрНайти(ЖурналДоступности, "(0% packet loss)") > 0 // Не локализуется. + Или СтрНайти(ЖурналДоступности, "(25% packet loss)") > 0); // Не локализуется. КонецЕсли; - Доступен = Не ФактНедоступности И БезПотерь; - Журнал = Новый Массив; Если Доступен Тогда Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index 57e91c6cc..0e2683491 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -60,9 +60,10 @@ // // Параметры: // Пользователь - Неопределено - проверяется текущий пользователь ИБ. -// - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - осуществляется +// - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - осуществляется // поиск пользователя ИБ по уникальному идентификатору, заданному в реквизите -// ИдентификаторПользователяИБ. Если пользователь ИБ не найден, возвращается Ложь. +// ИдентификаторПользователяИБ. Если пользователь ИБ не существует, возвращается Ложь. // - ПользовательИнформационнойБазы - проверяется указанный пользователь ИБ. // // ПроверятьПраваАдминистрированияСистемы - Булево - если задано Истина, тогда проверяется наличие @@ -155,9 +156,10 @@ // ИменаРолей - Строка - имена ролей, разделенные запятыми, доступность которых проверяется. // // Пользователь - Неопределено - проверяется текущий пользователь ИБ. -// - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - осуществляется +// - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - осуществляется // поиск пользователя ИБ по уникальному идентификатору, заданному в реквизите. -// ИдентификаторПользователяИБ. Если пользователь ИБ не найден, возвращается Ложь. +// ИдентификаторПользователяИБ. Если пользователь ИБ не существует, возвращается Ложь. // - ПользовательИнформационнойБазы - проверяется указанный пользователь ИБ. // // УчитыватьПривилегированныйРежим - Булево - если задано Истина, тогда для текущего пользователя @@ -285,7 +287,8 @@ // ВключаяГруппы - Булево - если Истина, включать группы пользователей и внешних пользователей. // Если ФО ИспользоватьГруппыПользователей отключена, параметр игнорируется. // -// ВключаяВнешнихПользователей - Неопределено, Булево - когда Неопределено, используется значение, +// ВключаяВнешнихПользователей - Неопределено +// - Булево - когда Неопределено, используется значение, // возвращаемое функцией ВнешниеПользователи.ИспользоватьВнешнихПользователей. // // БезПользователей - Булево - если Истина, то элементы справочника Пользователи @@ -389,15 +392,17 @@ // во всех строках или указанной (см. параметр ИдентификаторСтроки) строке коллекции ТаблицаИлиДерево. // // Параметры: -// ТаблицаИлиДерево - ДанныеФормыКоллекция, ДанныеФормыДерево - коллекция для заполнения. +// ТаблицаИлиДерево - ДанныеФормыКоллекция +// - ДанныеФормыДерево - коллекция для заполнения. // ИмяПоляПользователь - Строка - имя колонки в коллекции ТаблицаИлиДерево, содержащей ссылку на пользователя, // группу пользователей, внешнего пользователя или группу внешних пользователей. // По ее значению вычисляется номер картинки. // ИмяПоляНомераКартинки - Строка - имя колонки в коллекции ТаблицаИлиДерево с номером картинки, // которое требуется заполнить. -// ИдентификаторСтроки - Неопределено, Число - идентификатор строки (не порядковый номер), которую требуется -// заполнить (у дерева также будут заполнены и дочерние строки), -// если Неопределено, то картинки будут заполнены во всех строках. +// ИдентификаторСтроки - Неопределено +// - Число - идентификатор строки (не порядковый номер), которую требуется +// заполнить (у дерева также будут заполнены и дочерние строки), +// если Неопределено, то картинки будут заполнены во всех строках. // ОбработатьИерархиюВторогоИТретьегоУровней - Булево - если Истина и в параметре ТаблицаИлиДерево указана // коллекция типа ДанныеФормыДерево, то // будут заполнены поля по четвертый уровень дерева включительно, @@ -710,10 +715,11 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с пользователями информационной базы. -// Возвращает текстовое представление для случаев, когда пользователь не указан или не выбран. +// Возвращает текстовое представление "<Не указан>" для случаев, когда пользователь не указан или не выбран. +// См. также Пользователи.СсылкаНеуказанногоПользователя. // // Возвращаемое значение: -// Строка - "<Не указан>" +// Строка // Функция ПолноеИмяНеуказанногоПользователя() Экспорт @@ -722,13 +728,14 @@ КонецФункции // Возвращает ссылку неуказанного пользователя. +// См. также Пользователи.ПолноеИмяНеуказанногоПользователя. +// // Параметры: -// СоздатьЕслиНеСуществует - Булево - начальное значение Ложь. Если указать Истина, -// тогда будет выполнено создание пользователя "<Не указан>". +// СоздатьЕслиНеСуществует - Булево - если Истина, то будет создан пользователь "<Не указан>". // // Возвращаемое значение: -// СправочникСсылка.Пользователи - неуказанный пользователь существует в справочнике. -// Неопределено - неуказанный пользователь не существует в справочнике. +// СправочникСсылка.Пользователи +// Неопределено - если неуказанный пользователь не существует в справочнике. // Функция СсылкаНеуказанногоПользователя(СоздатьЕслиНеСуществует = Ложь) Экспорт @@ -748,7 +755,7 @@ // Параметры: // ПользовательИБ - Строка - имя пользователя ИБ. // - УникальныйИдентификатор - уникальный идентификатор пользователя ИБ. -// - ПользовательИнформационнойБазы - +// - ПользовательИнформационнойБазы // // УчетнаяЗапись - ПользовательИнформационнойБазы - (возвращаемое значение). // @@ -782,7 +789,7 @@ // Назначение свойств структуры соответствует свойствам объекта ПользовательИнформационнойБазы. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор пользователя информационной базы. // * Имя - Строка - имя пользователя информационной базы. Например, "Иванов". // * ПолноеИмя - Строка - полное имя пользователя информационной базы. @@ -791,8 +798,10 @@ // // * АутентификацияСтандартная - Булево - разрешена ли стандартная аутентификация (по пользователю и паролю). // * ПоказыватьВСпискеВыбора - Булево - показывать ли полное имя пользователя в списке для выбора при запуске. -// * Пароль - Строка, Неопределено - пароль, используемый при стандартной аутентификации. -// * СохраняемоеЗначениеПароля - Строка, Неопределено - хранимые значения пароля (хеш). +// * Пароль - Строка +// - Неопределено - пароль, используемый при стандартной аутентификации. +// * СохраняемоеЗначениеПароля - Строка +// - Неопределено - хранимые значения пароля (хеш). // * ПарольУстановлен - Булево - установлен ли пароль у пользователя. // * ЗапрещеноИзменятьПароль - Булево - определяет возможность пользователя изменять свой пароль. // @@ -800,10 +809,13 @@ // * ПользовательОС - Строка - имя соответствующей учетной записи пользователя операционной системы // (не учитывается в учебной версии платформы). // -// * ОсновнойИнтерфейс - Строка, Неопределено - имя основного интерфейса пользователя информационной базы +// * ОсновнойИнтерфейс - Строка +// - Неопределено - имя основного интерфейса пользователя информационной базы // (из коллекции Метаданные.Интерфейсы). -// * РежимЗапуска - Строка, Неопределено - "Авто", "ОбычноеПриложение" или "УправляемоеПриложение". -// * Язык - Строка, Неопределено - имя языка из коллекции Метаданные.Языки. +// * РежимЗапуска - Строка +// - Неопределено - "Авто", "ОбычноеПриложение" или "УправляемоеПриложение". +// * Язык - Строка +// - Неопределено - имя языка из коллекции Метаданные.Языки. // * Роли - Неопределено - роли не указаны. // - Массив - коллекция имен ролей пользователя информационной базы. // @@ -845,7 +857,8 @@ // Если пользователь с указанным идентификатором или именем не существует, то возвращается Неопределено. // // Параметры: -// ИмяИлиИдентификатор - Строка, УникальныйИдентификатор - имя или идентификатор пользователя ИБ. +// ИмяИлиИдентификатор - Строка +// - УникальныйИдентификатор - имя или идентификатор пользователя ИБ. // // Возвращаемое значение: // Структура, Неопределено - свойства пользователя, см. Пользователи.НовоеОписаниеПользователяИБ. @@ -898,17 +911,10 @@ // Если пользователь не существует, а также при попытке создания существующего пользователя будет вызвано исключение. // // Параметры: -// ИмяИлиИдентификатор - Строка, УникальныйИдентификатор - имя или уникальный идентификатор пользователя ИБ, свойства -// которого нужно установить. Либо имя нового пользователя ИБ. +// ИмяИлиИдентификатор - Строка +// - УникальныйИдентификатор - имя или уникальный идентификатор пользователя ИБ, свойства +// которого нужно установить. Либо имя нового пользователя ИБ. // ОбновляемыеСвойства - см. Пользователи.НовоеОписаниеПользователяИБ. -// Если какое-либо свойство в структуре не задано, то используется прочитанное или начальное значение. -// Следующие свойства структуры имеют особенности: -// * ПользовательИБ - ПользовательИнформационнойБазы - возвращаемый параметр: пользователь ИБ, свойства -// которого были записаны. -// * УникальныйИдентификатор - УникальныйИдентификатор - возвращаемый параметр: уникальный идентификатор -// записанного пользователя ИБ. -// * СтарыйПароль - Неопределено, Строка - если заданный пароль -// не совпадет с существующим, то будет вызвано исключение. // // СоздатьНового - Булево - указать Истина, чтобы создать нового пользователя ИБ с именем ИмяИлиИдентификатор. // @@ -1050,7 +1056,8 @@ // Удаляет указанного пользователя информационной базы. // // Параметры: -// ИмяИлиИдентификатор - Строка, УникальныйИдентификатор - имя или идентификатор удаляемого пользователя ИБ. +// ИмяИлиИдентификатор - Строка +// - УникальныйИдентификатор - имя или идентификатор удаляемого пользователя ИБ. // Процедура УдалитьПользователяИБ(Знач ИмяИлиИдентификатор) Экспорт @@ -1102,10 +1109,14 @@ // ПользовательИнформационнойБазы. // // Параметры: -// Приемник - Структура, ПользовательИнформационнойБазы, ФормаКлиентскогоПриложения - подмножество +// Приемник - Структура +// - ПользовательИнформационнойБазы +// - ФормаКлиентскогоПриложения - подмножество // свойств из НовоеОписаниеПользователяИБ(). // -// Источник - Структура, ПользовательИнформационнойБазы, ФормаКлиентскогоПриложения - как и приемник, +// Источник - Структура +// - ПользовательИнформационнойБазы +// - ФормаКлиентскогоПриложения - как и приемник, // но типы обратные, т.е. когда Приемник типа ПользовательИнформационнойБазы, // тогда в Источник не типа ПользовательИнформационнойБазы. // @@ -1357,7 +1368,7 @@ // Возвращаемое значение: // СправочникСсылка.Пользователи - если пользователь найден. // Справочники.Пользователи.ПустаяСсылка() - если пользователь ИБ найден. -// Неопределено - если пользователь ИБ не найден. +// Неопределено - если пользователь ИБ не существует. // Функция НайтиПоИмени(Знач ИмяДляВхода) Экспорт @@ -1382,7 +1393,8 @@ // // Параметры: // Пользователь - Неопределено - проверка для всех пользователей и внешних пользователей. -// - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - проверка +// - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - проверка // только для указанной ссылки. // // УникальныйИдентификатор - Неопределено - проверка всех заданных идентификаторов пользователей ИБ. @@ -1738,9 +1750,9 @@ // проверка выполняется, если разделение включено. // // СписокОшибок - Неопределено - если ошибки найдены, формируется текст ошибок и вызывается исключение. -// - СписокЗначений - (возвращаемое значение) найденные ошибки добавляются в список без вызова исключения. +// - СписокЗначений - (возвращаемое значение) найденные ошибки добавляются в список без вызова исключения: // * Значение - Строка - имя роли. -// - Неопределено - роль, указанная в процедуре, не найдена в метаданных. +// - Неопределено - роль, указанная в процедуре, не существует в метаданных. // * Представление - Строка - текст ошибки. // Процедура ПроверитьНазначениеРолей(ПроверитьВсе = Ложь, СписокОшибок = Неопределено) Экспорт @@ -1823,16 +1835,17 @@ // а также может записать подробное описание ошибки в журнал регистрации. // // Параметры: -// ШаблонОшибки - Шаблон, содержащий параметр "%1" для представления пользователя ИБ и +// ШаблонОшибки - шаблон, содержащий параметр "%1" для представления пользователя ИБ и // параметр %2 для описания ошибки. // // ИмяДляВхода - имя пользователя информационной базы, используемое для входа. // -// ИдентификаторПользователяИБ - Неопределено, УникальныйИдентификатор. +// ИдентификаторПользователяИБ - Неопределено +// - УникальныйИдентификатор. // // ИнформацияОбОшибке - ИнформацияОбОшибке. // -// ЗаписатьВЖурнал - Булево. Если Истина, то выполняется запись подробного описания ошибки +// ЗаписатьВЖурнал - Булево - если Истина, то выполняется запись подробного описания ошибки // в журнал регистрации. // // Возвращаемое значение: @@ -1869,18 +1882,18 @@ // Описание // // Параметры: -// Пользователь - Неопределено - -// - ПользовательИнформационнойБазы - -// - СправочникСсылка.ВнешниеПользователи - -// - СправочникСсылка.Пользователи - +// Пользователь - Неопределено +// - ПользовательИнформационнойБазы +// - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.Пользователи // // Возвращаемое значение: -// - Неопределено - -// - ФиксированнаяСтруктура - -// - Структура - где: -// * УказанТекущийПользовательИБ - Булево - -// * ПользовательИБ - Неопределено - -// - ПользовательИнформационнойБазы - +// - Неопределено +// - ФиксированнаяСтруктура +// - Структура: +// * УказанТекущийПользовательИБ - Булево +// * ПользовательИБ - Неопределено +// - ПользовательИнформационнойБазы // Функция СвойстваПроверяемогоПользователяИБ(Пользователь) diff --git a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl index 2af7798fd..46f0d6243 100644 --- a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl @@ -11,7 +11,7 @@ // Переопределяет стандартное поведение подсистемы Пользователи. // // Параметры: -// Настройки - Структура - со свойствами: +// Настройки - Структура: // * ОбщиеНастройкиВхода - Булево - определяет, будут ли в панели администрирования // "Настройки прав и пользователей" доступны настройки входа, и доступность // настроек ограничения срока действия в формах пользователя и внешнего пользователя. @@ -32,7 +32,7 @@ // кроме внешних пользователей. // // Параметры: -// НазначениеРолей - Структура - со свойствами: +// НазначениеРолей - Структура: // * ТолькоДляАдминистраторовСистемы - Массив - имена ролей, которые при выключенном разделении // предназначены для любых пользователей, кроме внешних пользователей, а в разделенном режиме // предназначены только для администраторов сервиса, например: @@ -80,12 +80,12 @@ // некоторые свойства в случаях, которые определены прикладной логикой. // // Параметры: -// ПользовательИлиГруппа - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи, -// СправочникСсылка.ГруппыВнешнихПользователей - ссылка на пользователя, +// ПользовательИлиГруппа - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.ГруппыВнешнихПользователей - ссылка на пользователя, // внешнего пользователя или группу внешних пользователей при создании формы. // -// ДействияВФорме - Структура - со свойствами: +// ДействияВФорме - Структура: // * Роли - Строка - "", "Просмотр", "Редактирование". // Например, когда роли редактируются в другой форме, можно скрыть // их в этой форме или только блокировать редактирование. @@ -134,7 +134,7 @@ // Например, можно установить начальные настройки расположения разделов командного интерфейса. // // Параметры: -// НачальныеНастройки - Структура - настройки по умолчанию: +// НачальныеНастройки - Структура: // * НастройкиКлиента - НастройкиКлиентскогоПриложения - настройки клиентского приложения. // * НастройкиИнтерфейса - НастройкиКомандногоИнтерфейса - настройки командного интерфейса (панели // разделов, панели навигации, панели действий). @@ -157,15 +157,15 @@ // Например, признак того, нужно ли показывать предупреждение при завершении работы программы. // // Параметры: -// СведенияОПользователе - Структура - строковое и ссылочное представление пользователя. +// СведенияОПользователе - Структура - строковое и ссылочное представление пользователя: // * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, // у которого нужно получить настройки. // * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, // у которого нужно получить настройки. -// Настройки - Структура - прочие пользовательские настройки. +// Настройки - Структура - прочие пользовательские настройки: // * Ключ - Строка - строковый идентификатор настройки, используемый в дальнейшем // для копирования и очистки этой настройки. -// * Значение - Структура - информация о настройке. +// * Значение - Структура: // ** НазваниеНастройки - Строка - название, которое будет отображаться в дереве настроек. // ** КартинкаНастройки - Картинка - картинка, которая будет отображаться в дереве настроек. // ** СписокНастроек - СписокЗначений - список полученных настроек. @@ -180,10 +180,10 @@ // См. также ПриПолученииПрочихНастроек. // // Параметры: -// Настройки - Структура - структура с полями: +// Настройки - Структура: // * ИдентификаторНастройки - Строка - строковый идентификатор копируемой настройки. // * ЗначениеНастройки - СписокЗначений - список значений копируемых настроек. -// СведенияОПользователе - Структура - строковое и ссылочное представление пользователя. +// СведенияОПользователе - Структура - строковое и ссылочное представление пользователя: // * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, // которому нужно скопировать настройку. // * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, @@ -199,10 +199,10 @@ // См. также ПриПолученииПрочихНастроек. // // Параметры: -// Настройки - Структура - структура с полями: +// Настройки - Структура: // * ИдентификаторНастройки - Строка - строковый идентификатор очищаемой настройки. // * ЗначениеНастройки - СписокЗначений - список значений очищаемых настроек. -// СведенияОПользователе - Структура - строковое и ссылочное представление пользователя. +// СведенияОПользователе - Структура - строковое и ссылочное представление пользователя: // * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, // которому нужно очистить настройку. // * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, @@ -212,6 +212,57 @@ +КонецПроцедуры + +// Позволяет указать свою форму выбора пользователей. +// +// В разрабатываемой форме необходимо: +// - устанавливать отбор Служебный = Ложь, отбор должен сниматься только под полными правами; +// - устанавливать отбор Недействителен = Ложь, отбор должен сниматься под любым пользователем. +// +// При реализации собственной формы необходимо поддержать параметры формы или использовать стандартную форму: +// - ЗакрыватьПриВыборе +// - МножественныйВыбор +// - ВыборУчастниковОбсуждения +// +// Для работы в качестве формы подбора участников обсуждения необходимо: +// - передавать результат выбора в оповещение о закрытии +// - результат выбора должен быть представлен массивом идентификаторов пользователей +// системы взаимодействия. +// +// Параметры: +// ВыбраннаяФорма - Строка - имя открываемой формы. +// ПараметрыФормы - Структура - параметры формы при открытии, только Чтение: +// * ЗакрыватьПриВыборе - Булево - содержит признак того, что форму +// необходимо закрывать после осуществления выбора. +// Если свойство имеет значение Ложь, можно использовать +// форму для выбора нескольких позиций или элементов. +// * МножественныйВыбор - Булево - разрешает или запрещает выбор нескольких строк из списка. +// * ВыборУчастниковОбсуждения - Булево - если Истина, то формы вызывается как форма выбора участников обсуждения. +// Форма должна возвращать массив идентификаторов пользователей системы +// Взаимодействия. +// +// * ЗаголовокКнопкиЗавершенияПодбора - Строка - заголовок кнопки завершения подбора. +// * СкрытьПользователейБезПользователяИБ - Булево - если Истина, то пользователи без идентификатора +// пользователя ИБ не должны отображаться в списке. +// * ВыборГруппПользователей - Булево - разрешить выбирать группы пользователей. +// Если группы пользователей используются и параметр не поддерживается, +// то для группы пользователей нельзя назначать права через форму подбора. +// * РасширенныйПодбор - Булево - если Истина, то доступен просмотр Групп пользователей. +// * ПараметрыРасширеннойФормыПодбора - Строка - адрес временного хранилища со структурой: +// ** СкрываемыеПользователи - Массив - пользователи, которые не отображаются в форме подбора. +// ** ВыборГруппВнешнихПользователей - Булево - разрешить выбирать группы внешних пользователей. +// ** ПодборГруппНевозможен - Булево +// ** ЗаголовокФормыПодбора - Строка - позволяет переопределять заголовок формы подбора. +// ** ВыбранныеПользователи - Массив - пользователи, которые должны отображаться в подобранных. +// ** ТекущаяСтрока - СправочникСсылка.ГруппыПользователей - строка, на которой будет выполнена позиционирование +// в динамическом списке групп пользователей +// при открытии формы. +// +Процедура ПриОпределенииФормыВыбораПользователей(ВыбраннаяФорма, ПараметрыФормы) Экспорт + + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index 4b11e55a9..a90eb30eb 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -319,7 +319,7 @@ // Возвращает таблицу значений имен всех ролей конфигурации. // // Возвращаемое значение: -// ФиксированнаяСтруктура со свойствами: +// ФиксированнаяСтруктура: // Массив - ФиксированныйМассив - имена ролей. // Соответствие - ФиксированноеСоответствие - имена ролей со значением Истина. // ТаблицаЗначений - ХранилищеЗначение - содержит ТаблицаЗначений с колонками: @@ -407,8 +407,8 @@ // Параметры: // УникальныйИдентификатор - идентификатор пользователя ИБ. // -// СсылкаНаТекущего - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи - исключить +// СсылкаНаТекущего - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - исключить // указанную ссылку из поиска. // Неопределено - искать среди всех элементов справочников. // @@ -422,7 +422,7 @@ // Истина - проверять ИдентификаторПользователяСервиса. // // Возвращаемое значение: -// Булево - +// Булево // Функция ПользовательПоИдентификаторуСуществует(УникальныйИдентификатор, СсылкаНаТекущего = Неопределено, @@ -473,9 +473,9 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// ДобавлятьПользователей - Булево - -// ТолькоВнешниеПользователи - Булево - +// Форма - ФормаКлиентскогоПриложения +// ДобавлятьПользователей - Булево +// ТолькоВнешниеПользователи - Булево // Процедура ОбновитьНазначениеПриСозданииНаСервере(Форма, ДобавлятьПользователей = Истина, ТолькоВнешниеПользователи = Ложь) Экспорт @@ -539,12 +539,12 @@ // Проверяет корректность заполнения назначения ролей, а также корректность прав в ролях по назначению. // // Параметры: -// НазначениеРолей - Неопределено - -// ПроверитьВсе - Булево - -// СписокОшибок - Неопределено - +// НазначениеРолей - Неопределено +// ПроверитьВсе - Булево +// СписокОшибок - Неопределено // - СписокЗначений - найденные ошибки добавляются в список без вызова исключения, где: // * Значение - Строка - имя роли. -// - Неопределено - роль, указанная в процедуре, не найдена в метаданных. +// - Неопределено - роль, указанная в процедуре, не существует в метаданных. // * Представление - Строка - текст ошибки. // Процедура ПроверитьНазначениеРолей(НазначениеРолей = Неопределено, ПроверитьВсе = Ложь, СписокОшибок = Неопределено) Экспорт @@ -565,7 +565,7 @@ Роль = Метаданные.Роли.Найти(КлючИЗначение.Ключ); Если Роль = Неопределено Тогда ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В метаданных не найдена роль ""%1"", + НСтр("ru = 'В метаданных не существует роль ""%1"", |указанная в назначении %2.'"), КлючИЗначение.Ключ, ОписаниеНазначенияРолей.Ключ); Если СписокОшибок = Неопределено Тогда @@ -717,13 +717,80 @@ КонецПроцедуры +// Возвращает описание контактной информации пользователя. +// Например, адрес электронной почты и телефон. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователь +// +// Возвращаемое значение: +// Структура: +// * Наименование - Строка +// * ИдентификаторПользователяИБ - Строка +// * Фотография - ДвоичныеДанные +// - Неопределено +// * Недействителен - Строка +// * ПометкаУдаления - Строка +// * Телефон - Строка +// * АдресЭлектроннойПочты - Строка +// * Подразделение - Неопределено +// - ОпределяемыйТип.Подразделение +// +Функция ОписаниеПользователя(Пользователь) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Наименование", ""); + Результат.Вставить("ИдентификаторПользователяИБ", ""); + Результат.Вставить("Фотография"); + Результат.Вставить("Подразделение"); + Результат.Вставить("Недействителен", Истина); + Результат.Вставить("ПометкаУдаления", Истина); + Результат.Вставить("Телефон", ""); + Результат.Вставить("АдресЭлектроннойПочты", ""); + + СвойстваПользователя = ?(ТипЗнч(Пользователь) = Тип("СправочникОбъект.Пользователи"), + Пользователь, + ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Пользователь, + " Наименование, + | ИдентификаторПользователяИБ, + | Фотография, + | ПометкаУдаления, + | Недействителен, + | Подразделение")); + ЗаполнитьЗначенияСвойств(Результат, СвойстваПользователя); + Результат.Фотография = СвойстваПользователя.Фотография.Получить(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ЗначениеКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Пользователь,,,Ложь); + + ВидТелефон = МодульУправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени("ТелефонПользователя"); + ВидАдресПочты = МодульУправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени("EmailПользователя"); + Для каждого Контакт Из ЗначениеКонтактнойИнформации Цикл + + Если Контакт.Вид = ВидТелефон И НЕ ЗначениеЗаполнено(Результат.Телефон) Тогда + + Результат.Телефон = Контакт.Представление; + ИначеЕсли Контакт.Вид = ВидАдресПочты И НЕ ЗначениеЗаполнено(Результат.АдресЭлектроннойПочты) Тогда + + Результат.АдресЭлектроннойПочты = Контакт.Представление; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Возврат Результат; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Универсальные процедуры и функции. // Возвращает ссылку старого объекта или ссылку нового объекта. // // Параметры: -// Объект - СправочникОбъект.Пользователи, СправочникОбъект.ВнешниеПользователи - +// Объект - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи // ЭтоНовый - Булево - (Возвращаемое значение). // Функция СсылкаОбъекта(Знач Объект, ЭтоНовый = Неопределено) Экспорт @@ -806,7 +873,7 @@ // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа. // // Параметры: -// ВидыДоступа - ТаблицаЗначений - с колонками: +// ВидыДоступа - ТаблицаЗначений: // * Имя - Строка - имя, используемое в описании поставляемых // профилей групп доступа и текстах ОДД. // * Представление - Строка - представляет вид доступа в профилях и группах доступа. @@ -1013,10 +1080,10 @@ // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. // // Параметры: -// Обработчики - ТаблицаЗначений - где: -// * Версия - Строка - -// * Процедура - Строка - -// * РежимВыполнения - Строка - +// Обработчики - ТаблицаЗначений: +// * Версия - Строка +// * Процедура - Строка +// * РежимВыполнения - Строка // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -1069,11 +1136,12 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. // // Параметры: -// Массив - Массив из Строка - +// Массив - Массив из Строка // Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт Массив.Добавить(Метаданные.РегистрыСведений.СоставыГруппПользователей.ПолноеИмя()); + Массив.Добавить(Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.ПолноеИмя()); КонецПроцедуры @@ -1115,7 +1183,7 @@ // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. // // Параметры: -// ТекущиеДела - ТаблицаЗначений - +// ТекущиеДела - ТаблицаЗначений // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт @@ -1172,12 +1240,13 @@ // См. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств. // // Параметры: -// Наборы - ДеревоЗначений - где: -// * Имя - Строка - Имя набора свойств. Формируется из полного имени объекта +// Наборы - ДеревоЗначений: +// * Имя - Строка - имя набора свойств. Формируется из полного имени объекта // метаданных заменой символа "." на "_". // Например, "Документ_ЗаказПокупателя". -// * Идентификатор - УникальныйИдентификатор - Идентификатор ссылки предопределенного элемента. -// * Используется - Неопределено, Булево - Признак того, что набор свойств используется. +// * Идентификатор - УникальныйИдентификатор - идентификатор ссылки предопределенного элемента. +// * Используется - Неопределено +// - Булево - признак того, что набор свойств используется. // Например, можно использовать для скрытия набора по функциональным опциям. // Значение по умолчанию - Неопределено, соответствует значению Истина. // * ЭтоГруппа - Булево - Истина, если набор свойств является группой. @@ -1215,7 +1284,7 @@ // См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов. // // Параметры: -// ШаблоныЗаданий - Массив из Строка - +// ШаблоныЗаданий - Массив из Строка // Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт @@ -1228,7 +1297,7 @@ // См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. // // Параметры: -// Объекты - Массив из ОбъектМетаданных - +// Объекты - Массив из ОбъектМетаданных // Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт @@ -1253,8 +1322,8 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. // // Параметры: -// ИмяПараметра - Строка - -// УстановленныеПараметры - Массив - +// ИмяПараметра - Строка +// УстановленныеПараметры - Массив // Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт @@ -1302,13 +1371,10 @@ // Обработчики подписок на события. // Вызывает обновление представления внешнего пользователя при изменении -// представления его объекта авторизации. +// представления его объекта авторизации, а также помечает, как недействительного, +// если объект авторизации помечен на удаление. // -// В состав подписки следует включить типы объектов авторизации: -// "Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип". -// Например: "СправочникОбъект.ФизическиеЛица", "СправочникОбъект.Контрагенты". -// -Процедура ОбновитьПредставлениеВнешнегоПользователяПриЗаписи(Знач Объект, Отказ) Экспорт +Процедура ОбновитьВнешнегоПользователяПриЗаписи(Знач Объект, Отказ) Экспорт Если Объект.ОбменДанными.Загрузка Тогда Возврат; @@ -1318,7 +1384,7 @@ Возврат; КонецЕсли; - ОбновитьПредставлениеВнешнегоПользователя(Объект.Ссылка); + ОбновитьВнешнегоПользователя(Объект.Ссылка, Объект.ПометкаУдаления); КонецПроцедуры @@ -1619,8 +1685,8 @@ // Проверяет наличие учетной записи и прав, необходимых для изменения пароля. // // Параметры: -// Пользователь - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи - пользователь для смены пароля. +// Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - пользователь для смены пароля. // // ДополнительныеПараметры - Структура - (возвращаемое значение) со свойствами: // * ТекстОшибки - Строка - описание ошибки, если нет возможности изменить пароль. @@ -1680,7 +1746,7 @@ И ПользовательИБ = Неопределено Тогда ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдена учетная запись пользователя ""%1"".'"), Пользователь)); + НСтр("ru = 'Не существует учетная запись пользователя ""%1"".'"), Пользователь)); Возврат Ложь; КонецЕсли; @@ -1777,9 +1843,10 @@ // Для форм элементов справочников Пользователи и ВнешниеПользователи. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - где: -// * Объект - СправочникОбъект.Пользователи - -// - СправочникОбъект.ВнешниеПользователи - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов: +// * Объект - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи // Процедура ПрочитатьСведенияОПользователе(Форма) Экспорт @@ -1824,9 +1891,10 @@ // Для форм элементов справочников Пользователи и ВнешниеПользователи. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - -// ТекущийОбъект - СправочникОбъект.Пользователи - -// - СправочникОбъект.ВнешниеПользователи - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов +// ТекущийОбъект - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи // Процедура ЗаписатьСведенияОПользователе(Форма, ТекущийОбъект) Экспорт @@ -1879,11 +1947,11 @@ // а также устанавливает его, если вызов выполнен из формы СменаПароля. // // Параметры: -// Параметры - Структура - со свойствами: -// * Пользователь - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи - при вызове из формы СменаПароля. -// - СправочникОбъект.Пользователи, -// СправочникОбъект.ВнешниеПользователи - при записи объекта. +// Параметры - Структура: +// * Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - при вызове из формы СменаПароля. +// - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи - при записи объекта. // // * НовыйПароль - Строка - пароль, который планируется установить пользователю ИБ. // * СтарыйПароль - Строка - пароль, который установлен пользователю ИБ (для проверки). @@ -2257,15 +2325,15 @@ // Возвращает текущий уровень доступа на изменение свойств пользователя ИБ. // // Параметры: -// ОписаниеОбъекта - СправочникОбъект.Пользователи - -// - СправочникОбъект.ВнешниеПользователи - +// ОписаниеОбъекта - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи // - ДанныеФормыСтруктура - созданная из объектов указанных выше. // // ПараметрыОбработки - Неопределено - получить данные из описания объекта, // иначе взять уже готовые данные из параметров обработки. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * АдминистраторСистемы - Булево - любые действия с любым пользователем и его пользователем ИБ. // * ПолныеПрава - Булево - то же, АдминистраторСистемы, исключая администраторов системы. // * УправлениеСписком - Булево - добавление новых пользователей и изменение существующих: @@ -2289,7 +2357,7 @@ // Администратор системы (системные данные). УровеньДоступа.Вставить("АдминистраторСистемы", Пользователи.ЭтоПолноправныйПользователь(, Истина)); - // Полноправный пользователь (основных данные). + // Полноправный пользователь (пользовательские данные). УровеньДоступа.Вставить("ПолныеПрава", Пользователи.ЭтоПолноправныйПользователь()); Если ТипЗнч(ОписаниеОбъекта.Ссылка) = Тип("СправочникСсылка.Пользователи") Тогда @@ -2388,10 +2456,10 @@ // Вызывается ПередЗаписью Пользователя или Внешнего пользователя. // // Параметры: -// ПользовательОбъект - СправочникОбъект.Пользователи - -// - СправочникОбъект.ВнешниеПользователи - -// ПараметрыОбработки - Структура - -// УдалениеПользователяИзСправочника - Булево - +// ПользовательОбъект - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи +// ПараметрыОбработки - Структура +// УдалениеПользователяИзСправочника - Булево // Процедура НачатьОбработкуПользователяИБ(ПользовательОбъект, ПараметрыОбработки, @@ -2654,9 +2722,9 @@ // Вызывается ПриЗаписи Пользователя или Внешнего пользователя. // // Параметры: -// ПользовательОбъект - СправочникОбъект.Пользователи - -// - СправочникОбъект.ВнешниеПользователи - -// ПараметрыОбработки - Структура - +// ПользовательОбъект - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи +// ПараметрыОбработки - Структура // Процедура ЗавершитьОбработкуПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт @@ -2708,15 +2776,17 @@ // Вызывается при обработке свойства СвойстваПользователяИБ пользователя в справочнике. // // Параметры: -// ОписаниеПользователя - СправочникОбъект.Пользователи, СправочникОбъект.ВнешниеПользователи, -// ДанныеФормыСтруктура, содержит свойство СвойстваПользователяИБ. -// - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - +// ОписаниеПользователя - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи +// - ДанныеФормыСтруктура - содержит свойство СвойстваПользователяИБ. +// - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - // из объекта которой нужно прочитать свойство СвойстваПользователяИБ. // ВходВПрограммуРазрешен - Булево - если указано Ложь, а сохранено Истина, тогда свойства // аутентификации безусловно Ложь, т.к. были сняты в конфигураторе. // // Возвращаемое значение: -// Структура - . +// Структура // Функция ХранимыеСвойстваПользователяИБ(ОписаниеПользователя, ВходВПрограммуРазрешен = Ложь) Экспорт @@ -2851,7 +2921,7 @@ // пользователя ИБ для внешнего пользователя. // // Возвращаемое значение: -// Булево - если Истина, ошибок не найдено. +// Булево - Истина, если нет ошибок. // Функция ПроверитьОписаниеПользователяИБ(Знач ОписаниеПользователяИБ, Отказ, ЭтоВнешнийПользователь) Экспорт @@ -3115,10 +3185,10 @@ | ТОГДА ЛОЖЬ | ИНАЧЕ ИСТИНА | КОНЕЦ <> СоставыГруппПользователей.Используется"; - // АПК:1377-вкл. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей"); + // АПК:1377-вкл. Если ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.Пользователи") ИЛИ ТипЗнч(ПользовательИлиГруппа) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда @@ -3515,9 +3585,8 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При обновлении ролей внешнего пользователя |""%1"" - |роль ""%2"" - |группы внешних пользователей ""%3"" - |не найдена в метаданных.'"), + |не существует роль ""%2"" + |группы внешних пользователей ""%3"".'"), СокрЛП(ВнешнийПользователь.Наименование), Выборка.Роль, Строка(Выборка.ГруппаВнешнихПользователей)); @@ -3600,14 +3669,15 @@ // какого-нибудь внешнего пользователя, кроме заданного внешнего пользователя (если задан). // // Параметры: -// СсылкаНаОбъектАвторизации - ОпределяемыйТип.ВнешнийПользователь - -// СсылкаНаТекущегоВнешнегоПользователя - СправочникСсылка.ВнешниеПользователи - -// НайденныйВнешнийПользователь - Неопределено, СправочникСсылка.ВнешниеПользователи - -// ЕстьПравоДобавленияВнешнегоПользователя - Булево - -// ТекстОшибки - Строка - +// СсылкаНаОбъектАвторизации - ОпределяемыйТип.ВнешнийПользователь +// СсылкаНаТекущегоВнешнегоПользователя - СправочникСсылка.ВнешниеПользователи +// НайденныйВнешнийПользователь - Неопределено +// - СправочникСсылка.ВнешниеПользователи +// ЕстьПравоДобавленияВнешнегоПользователя - Булево +// ТекстОшибки - Строка // // Возвращаемое значение: -// Булево - +// Булево // Функция ОбъектАвторизацииИспользуется(Знач СсылкаНаОбъектАвторизации, Знач СсылкаНаТекущегоВнешнегоПользователя, @@ -3648,13 +3718,13 @@ // Возвращает ссылку на внешнего пользователя. // // Параметры: -// СсылкаНаОбъектАвторизации - ОпределяемыйТип.ВнешнийПользователь - -// СсылкаНаТекущегоВнешнегоПользователя - СправочникСсылка.ВнешниеПользователи - +// СсылкаНаОбъектАвторизации - ОпределяемыйТип.ВнешнийПользователь +// СсылкаНаТекущегоВнешнегоПользователя - СправочникСсылка.ВнешниеПользователи // // Возвращаемое значение: -// Структура - где: -// * Используется - Булево - -// * Ссылка - СправочникСсылка.ВнешниеПользователи - +// Структура: +// * Используется - Булево +// * Ссылка - СправочникСсылка.ВнешниеПользователи // Функция СвойстваОбъектаАвторизации(СсылкаНаОбъектАвторизации, СсылкаНаТекущегоВнешнегоПользователя) @@ -3687,7 +3757,7 @@ // параметра Переносить = Истина, настройки у пользователя источника удаляются. // // Параметры: -// ИмяПользователяИсточник - Строка - Имя пользователя ИБ от которого будет производиться копирование настроек. +// ИмяПользователяИсточник - Строка - имя пользователя ИБ от которого будет производиться копирование настроек. // // ИмяПользователяПриемник - Строка - Имя пользователя ИБ которому будут записаны настройки. // @@ -3725,7 +3795,7 @@ // Перемещение - Булево - если Истина, то пользователь удаляется из старой группы. // // ВозвращаемоеЗначение: -// Строка - Сообщение о результате переноса. +// Строка - сообщение о результате переноса. // Функция ПеремещениеПользователяВНовуюГруппу(МассивПользователей, ГруппаИсточник, ГруппаПриемник, Перемещение) Экспорт @@ -3912,7 +3982,7 @@ // перенос пользователей. // // ВозвращаемоеЗначение: -// Строка - Сообщение пользователю. +// Строка - сообщение пользователю. // Функция ФормированиеСообщенияПользователю(МассивПользователей, ГруппаПриемник, Перемещение, МассивНеПеремещенныхПользователей, ГруппаИсточник = Неопределено) Экспорт @@ -4042,8 +4112,8 @@ // // Параметры: // ИмяКолонки - Строка - имя сравниваемой колонки. -// Таблица1 - ТаблицаЗначений - -// Таблица2 - ТаблицаЗначений - +// Таблица1 - ТаблицаЗначений +// Таблица2 - ТаблицаЗначений // // Возвращаемое значение: // Массив значений, которые есть только в колонке только одной из таблиц. @@ -4087,6 +4157,96 @@ КонецФункции +Процедура ВыбратьПользователейГруппы(ВыбранныеЭлементы, ХранимыеПараметры, ПолеСписка) Экспорт + + Если ВыбранныеЭлементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ВыбранныйЭлемент = ВыбранныеЭлементы[0].ВыбранныйЭлемент; + ТипВыбранногоЭлемента = ТипЗнч(ВыбранныйЭлемент); + + Если ТипВыбранногоЭлемента = Тип("СправочникСсылка.ГруппыПользователей") + И ХранимыеПараметры.ВыборГруппПользователей + Или ТипВыбранногоЭлемента = Тип("СправочникСсылка.ГруппыВнешнихПользователей") + И ХранимыеПараметры.ВыборГруппВнешнихПользователей + Или ТипВыбранногоЭлемента <> Тип("СправочникСсылка.ГруппыПользователей") + И ТипВыбранногоЭлемента <> Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + Возврат; + КонецЕсли; + + ПользователиГруппы = ПользователиГруппы(ПолеСписка); + + ВыбранныеЭлементы.Очистить(); + + Для Каждого ПользовательГруппы Из ПользователиГруппы Цикл + + Элемент = Новый Структура; + Элемент.Вставить("ВыбранныйЭлемент", ПользовательГруппы.Ссылка); + Элемент.Вставить("НомерКартинки", ПользовательГруппы.НомерКартинки); + + ВыбранныеЭлементы.Добавить(Элемент); + + КонецЦикла; + +КонецПроцедуры + +Функция ПользователиГруппы(ПолеСписка) + + Схема = ПолеСписка.ПолучитьИсполняемуюСхемуКомпоновкиДанных(); + Настройки = ПолеСписка.ПолучитьИсполняемыеНастройкиКомпоновкиДанных(); + + ДобавитьПоляПользователейГруппы(Настройки); + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных(); + МакетКомпоновки = КомпоновщикМакета.Выполнить( + Схема, Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + + Возврат ПроцессорВывода.Вывести(ПроцессорКомпоновки); + +КонецФункции + +Процедура ДобавитьПоляПользователейГруппы(Настройки) + + ДобавляемыеПоля = СтрРазделить("Ссылка, НомерКартинки", ", ", Ложь); + ВыбранныеПоля = Настройки.Структура[0].Выбор; + + Для Каждого ДобавляемоеПоле Из ДобавляемыеПоля Цикл + + ДоступноеПоле = ВыбранныеПоля.ДоступныеПоляВыбора.НайтиПоле(Новый ПолеКомпоновкиДанных(ДобавляемоеПоле)); + + Если ДоступноеПоле = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПолеНайдено = Ложь; + + Для Каждого Элемент Из ВыбранныеПоля.Элементы Цикл + + Если Элемент.Поле = ДоступноеПоле.Поле Тогда + ПолеНайдено = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ПолеНайдено Тогда + Продолжить; + КонецЕсли; + + ВыбранноеПоле = ВыбранныеПоля.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ЗаполнитьЗначенияСвойств(ВыбранноеПоле, ДоступноеПоле); + + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -4301,7 +4461,7 @@ // * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, у которого нужно получить настройки. // Настройки - Структура - прочие пользовательские настройки, где: // * Ключ - Строка - строковый идентификатор настройки. -// * Значение - Структура - где: +// * Значение - Структура: // ** НазваниеНастройки - Строка - название, которое будет отображаться в дереве настроек. // ** КартинкаНастройки - Картинка - картинка, которая будет отображаться в дереве настроек. // ** СписокНастроек - СписокЗначений - список полученных настроек. @@ -4381,27 +4541,34 @@ КонецПроцедуры -// Обновляет представление внешнего пользователя при изменении представления его объекта авторизации. -Процедура ОбновитьПредставлениеВнешнегоПользователя(СсылкаНаОбъектАвторизации) +// Обновляет представление внешнего пользователя при изменении представления его объекта авторизации, +// а также помечает, как недействительного, если объект авторизации помечен на удаление. +// +Процедура ОбновитьВнешнегоПользователя(СсылкаНаОбъектАвторизации, ПометкаУдаленияОбъектаАвторизации) УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1 - | ВнешниеПользователи.Ссылка + | ВнешниеПользователи.Ссылка КАК Ссылка, + | ВнешниеПользователи.Недействителен КАК Недействителен |ИЗ | Справочник.ВнешниеПользователи КАК ВнешниеПользователи |ГДЕ | ВнешниеПользователи.ОбъектАвторизации = &СсылкаНаОбъектАвторизации - | И ВнешниеПользователи.Наименование <> &НовоеПредставлениеОбъектаАвторизации"); - Запрос.УстановитьПараметр("СсылкаНаОбъектАвторизации", СсылкаНаОбъектАвторизации); + | И (ВнешниеПользователи.Наименование <> &НовоеПредставлениеОбъектаАвторизации + | ИЛИ ВнешниеПользователи.Недействителен = ЛОЖЬ + | И &ПометкаУдаленияОбъектаАвторизации)"); + + Запрос.УстановитьПараметр("СсылкаНаОбъектАвторизации", СсылкаНаОбъектАвторизации); Запрос.УстановитьПараметр("НовоеПредставлениеОбъектаАвторизации", Строка(СсылкаНаОбъектАвторизации)); + Запрос.УстановитьПараметр("ПометкаУдаленияОбъектаАвторизации", ПометкаУдаленияОбъектаАвторизации); НачатьТранзакцию(); Попытка РезультатЗапроса = Запрос.Выполнить(); - Если НЕ РезультатЗапроса.Пустой() Тогда + Если Не РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); @@ -4412,6 +4579,13 @@ ВнешнийПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВнешнийПользовательОбъект.Наименование = Строка(СсылкаНаОбъектАвторизации); + Если ПометкаУдаленияОбъектаАвторизации И ВнешнийПользовательОбъект.Недействителен = Ложь Тогда + ВнешнийПользовательОбъект.Недействителен = Истина; + Если Пользователи.ВходВПрограммуРазрешен(ВнешнийПользовательОбъект.ИдентификаторПользователяИБ) Тогда + ВнешнийПользовательОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", + Новый Структура("Действие, ВходВПрограммуРазрешен", "Записать", Ложь)); + КонецЕсли; + КонецЕсли; ВнешнийПользовательОбъект.Записать(); КонецЕсли; @@ -4654,13 +4828,13 @@ Если ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда ШаблонСообщенияОбОшибке = - НСтр("ru = 'Пользователь ""%1"" не найден в справочниках + НСтр("ru = 'Пользователь ""%1"" не существует в справочниках |""Пользователи"" и ""Внешние пользователи"". | |Обратитесь к администратору.'"); Иначе ШаблонСообщенияОбОшибке = - НСтр("ru = 'Пользователь ""%1"" не найден в справочнике ""Пользователи"". + НСтр("ru = 'Пользователь ""%1"" не существует в справочнике ""Пользователи"". | |Обратитесь к администратору.'"); КонецЕсли; @@ -4762,9 +4936,11 @@ // Таблица - Строка - полное имя объекта метаданных. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: -// * Ссылка - СправочникСсылка.ГруппыВнешнихПользователей, СправочникСсылка.ГруппыПользователей - ссылка на элемент справочника. -// * Родитель - СправочникСсылка.ГруппыВнешнихПользователей, СправочникСсылка.ГруппыПользователей - ссылка на родителя +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ГруппыВнешнихПользователей +// - СправочникСсылка.ГруппыПользователей - ссылка на элемент справочника. +// * Родитель - СправочникСсылка.ГруппыВнешнихПользователей +// - СправочникСсылка.ГруппыПользователей - ссылка на родителя // элемента справочника. // Функция СсылкиВИерархииРодителей(Таблица) @@ -4790,11 +4966,11 @@ // Таблица - Строка - полное имя объекта метаданных. // // Возвращаемое значение: -// ТаблицаЗначений - где: -// * Ссылка - СправочникСсылка.ГруппыВнешнихПользователей - -// - СправочникСсылка.ГруппыПользователей - -// * Родитель - СправочникСсылка.ГруппыВнешнихПользователей - -// - СправочникСсылка.ГруппыПользователей - +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ГруппыВнешнихПользователей +// - СправочникСсылка.ГруппыПользователей +// * Родитель - СправочникСсылка.ГруппыВнешнихПользователей +// - СправочникСсылка.ГруппыПользователей // Функция СсылкиРодителей(Таблица) @@ -5552,8 +5728,9 @@ // Копирует настройки пользователя. // // Параметры: -// ПользовательОбъект - СправочникОбъект.Пользователи, СправочникОбъект.ВнешниеПользователи - Описание -// ПараметрыОбработки - Структура - где: +// ПользовательОбъект - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи +// ПараметрыОбработки - Структура: // * ОписаниеНовогоПользователяИБ - см. Пользователи.НовоеОписаниеПользователяИБ // Процедура СкопироватьНастройкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки) @@ -6776,12 +6953,16 @@ // Заполняет коллекцию ролей. // // Параметры: -// Параметры - Строка - где: -// * ОсновнойПараметр - Неопределено, Булево, Строка, Массив, Соответствие - -// * Форма - ФормаКлиентскогоПриложения - -// * КоллекцияРолей - ТаблицаЗначений - где: -// ** Роль - Строка - -// * НазначениеРолей - Строка - +// Параметры - Структура: +// * ОсновнойПараметр - Неопределено +// - Булево +// - Строка +// - Массив +// - Соответствие +// * Форма - ФормаКлиентскогоПриложения +// * КоллекцияРолей - ТаблицаЗначений: +// ** Роль - Строка +// * НазначениеРолей - Строка // Процедура ЗаполнитьРоли(Параметры) @@ -7140,11 +7321,11 @@ // Возвращает иерархическую коллекцию. // // Параметры: -// ДанныеФормыДерево - ДанныеФормыДерево - -// СтрокаДереваЗначений - СтрокаДереваЗначений - +// ДанныеФормыДерево - ДанныеФормыДерево +// СтрокаДереваЗначений - СтрокаДереваЗначений // // Возвращаемое значение: -// ДанныеФормыКоллекцияЭлементовДерева - +// ДанныеФормыКоллекцияЭлементовДерева // Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений) @@ -7263,12 +7444,12 @@ // Изменяет состав ролей. // // Параметры: -// Параметры - Структура - -// Коллекция - ДанныеФормыЭлементДерева - где: -// * Пометка - Булево - -// * Имя - Строка - -// * Синоним - Строка - -// Добавить - Булево - +// Параметры - Структура +// Коллекция - ДанныеФормыЭлементДерева: +// * Пометка - Булево +// * Имя - Строка +// * Синоним - Строка +// Добавить - Булево // Процедура ДобавитьУдалитьРолиПодсистемы(Параметры, Знач Коллекция, Знач Добавить) diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl index 85c0dc34c..39995bd00 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl @@ -272,7 +272,7 @@ // // Параметры: // ПользовательИБ - ПользовательИнформационнойБазы, текущий пользователь информационной базы, -// СтандартнаяОбработка - Булево, значение может быть установлено внутри обработчика, в этом случае +// СтандартнаяОбработка - Булево - значение может быть установлено внутри обработчика, в этом случае // стандартная обработка авторизации нового пользователя ИБ выполняться не будет. // Процедура ПриАвторизацииНовогоПользователяИБ(Знач ТекущийПользовательИБ, СтандартнаяОбработка) Экспорт @@ -320,9 +320,9 @@ // Вызывается при начале обработки пользователя информационной базы. // // Параметры: -// ПараметрыОбработки - Структура, см. комментарий к процедуре НачатьОбработкуПользователяИБ() +// ПараметрыОбработки - Структура - см. комментарий к процедуре НачатьОбработкуПользователяИБ() // ОписаниеПользователяИБ - Структура - см. комментарий к процедуре НачатьОбработкуПользователяИБ(), где: -// * Действие - Строка - +// * Действие - Строка // Процедура ПриНачалеОбработкиПользователяИБ(ПараметрыОбработки, ОписаниеПользователяИБ) Экспорт @@ -458,9 +458,9 @@ // Вызывается из процедуры ЗавершитьОбработкуПользователяИБ для поддержки модели сервиса. // // Параметры: -// ПользовательОбъект - СправочникОбъект.Пользователи - -// - СправочникОбъект.ВнешниеПользователи - -// ПараметрыОбработки - Структура - +// ПользовательОбъект - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи +// ПараметрыОбработки - Структура // Процедура ПередЗавершениемОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт @@ -524,7 +524,7 @@ // // Параметры: // ИдентификаторПользователя - УникальныйИдентификатор, -// Псевдоним - Строка, псевдоним пользователя. +// Псевдоним - Строка - псевдоним пользователя. // Процедура ПриОпределенииПсевдонимаПользователя(ИдентификаторПользователя, Псевдоним) Экспорт @@ -554,7 +554,7 @@ // Вызывается при регистрации произвольных обработчиков выгрузки данных. // // Параметры: -// ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется +// ТаблицаОбработчиков - ТаблицаЗначений - в данной процедуре требуется // дополнить эту таблицу значений информацией о регистрируемых произвольных // обработчиках выгрузки данных. Колонки: // ОбъектМетаданных - ОбъектМетаданных, при выгрузке данных которого должен @@ -565,7 +565,7 @@ // колонок таблицы значений, // Версия - Строка - номер версии интерфейса обработчиков выгрузки / загрузки данных, // поддерживаемого обработчиком, -// ПередВыгрузкойТипа - Булево, флаг необходимости вызова обработчика перед +// ПередВыгрузкойТипа - Булево - флаг необходимости вызова обработчика перед // выгрузкой всех объектов информационной базы, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередВыгрузкойТипа(), @@ -581,10 +581,10 @@ // контекста СериализаторXDTO, // ОбъектМетаданных - ОбъектМетаданных, перед выгрузкой данных которого // был вызван обработчик, -// Отказ - Булево. Если в процедуре ПередВыгрузкойТипа() установить значение +// Отказ - Булево - если в процедуре ПередВыгрузкойТипа() установить значение // данного параметра равным Истина - выгрузка объектов, соответствующих // текущему объекту метаданных, выполняться не будет. -// ПередВыгрузкойОбъекта - Булево, флаг необходимости вызова обработчика перед +// ПередВыгрузкойОбъекта - Булево - флаг необходимости вызова обработчика перед // выгрузкой конкретного объекта информационной базы. Если присвоено значение // Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура // ПередВыгрузкойОбъекта(), поддерживающая следующие параметры: @@ -620,10 +620,10 @@ // помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. В дальнейшем // артефакты, сформированные в процедуре ПередВыгрузкойОбъекта(), будут доступны в процедурах // обработчиков загрузки данных (см. комментарий к процедуре ПриРегистрацииОбработчиковЗагрузкиДанных(). -// Отказ - Булево. Если в процедуре ПередВыгрузкойОбъекта() установить значение +// Отказ - Булево - если в процедуре ПередВыгрузкойОбъекта() установить значение // данного параметра равным Истина - выгрузка объекта, для которого был вызван обработчик, // выполняться не будет. -// ПослеВыгрузкиТипа() - Булево, флаг необходимости вызова обработчика после выгрузки всех +// ПослеВыгрузкиТипа() - Булево - флаг необходимости вызова обработчика после выгрузки всех // объектов информационной базы, относящихся к данному объекту метаданных. Если присвоено значение // Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура // ПослеВыгрузкиТипа(), поддерживающая следующие параметры: @@ -649,7 +649,7 @@ // Вызывается при регистрации произвольных обработчиков загрузки данных. // // Параметры: -// ТаблицаОбработчиков - ТаблицаЗначений, в данной процедуре требуется +// ТаблицаОбработчиков - ТаблицаЗначений - в данной процедуре требуется // дополнить эту таблицу значений информацией о регистрируемых произвольных // обработчиках загрузки данных. Колонки: // ОбъектМетаданных - ОбъектМетаданных, при загрузке данных которого должен @@ -660,7 +660,7 @@ // колонок таблицы значений, // Версия - Строка - номер версии интерфейса обработчиков выгрузки / загрузки данных, // поддерживаемого обработчиком, -// ПередСопоставлениемСсылок - Булево, флаг необходимости вызова обработчика перед +// ПередСопоставлениемСсылок - Булево - флаг необходимости вызова обработчика перед // сопоставлением ссылок (в исходной ИБ и в текущей), относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередСопоставлениемСсылок(), @@ -670,7 +670,7 @@ // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. // ОбъектМетаданных - ОбъектМетаданных, перед сопоставлением ссылок которого // был вызван обработчик, -// СтандартнаяОбработка - Булево. Если процедуре ПередСопоставлениемСсылок() +// СтандартнаяОбработка - Булево - если процедуре ПередСопоставлениемСсылок() // установить значение данного параметра равным Ложь, вместо стандартного // сопоставления ссылок (поиск объектов в текущей ИБ с теми же значениями // естественного ключа, которые были выгружены из ИБ-источника) будет @@ -681,7 +681,7 @@ // Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер // контейнера, используемый в процессе загрузки данных. Подробнее см. комментарий // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера, -// ТаблицаИсходныхСсылок - ТаблицаЗначений, содержащая информацию о ссылках, +// ТаблицаИсходныхСсылок - ТаблицаЗначений - содержащая информацию о ссылках, // выгруженных из исходной ИБ. Колонки: // ИсходнаяСсылка - ЛюбаяСсылка, ссылка объекта исходной ИБ, которую требуется // сопоставить c ссылкой в текущей ИБ, @@ -691,10 +691,10 @@ // Возвращаемое значение функции СопоставитьСсылки() - ТаблицаЗначений, колонки: // ИсходнаяСсылка - ЛюбаяСсылка, ссылка объекта, выгруженная из исходной ИБ, // Ссылка - ЛюбаяСсылка, сопоставленная исходной ссылка в текущей ИБ. -// Отказ - Булево. Если в процедуре ПередСопоставлениемСсылок() установить значение +// Отказ - Булево - если в процедуре ПередСопоставлениемСсылок() установить значение // данного параметра равным Истина - сопоставление ссылок, соответствующих // текущему объекту метаданных, выполняться не будет. -// ПередЗагрузкойТипа - Булево, флаг необходимости вызова обработчика перед +// ПередЗагрузкойТипа - Булево - флаг необходимости вызова обработчика перед // загрузкой всех объектов данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередЗагрузкойТипа(), @@ -704,10 +704,10 @@ // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. // ОбъектМетаданных - ОбъектМетаданных, перед загрузкой всех данных которого // был вызван обработчик, -// Отказ - Булево. Если в процедуре ПередЗагрузкойТипа() установить значение данного +// Отказ - Булево - если в процедуре ПередЗагрузкойТипа() установить значение данного // параметра равным Истина - загрузка всех объектов данных соответствующих текущему // объекту метаданных выполняться не будет. -// ПередЗагрузкойОбъекта - Булево, флаг необходимости вызова обработчика перед +// ПередЗагрузкойОбъекта - Булево - флаг необходимости вызова обработчика перед // загрузкой объекта данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередЗагрузкойОбъекта(), @@ -730,9 +730,9 @@ // для типа которого в качестве базового типа используется абстрактный XDTO-тип // {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}Artefact. Допускается использовать XDTO-пакеты, // помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. -// Отказ - Булево. Если в процедуре ПередЗагрузкойОбъекта() установить значение данного +// Отказ - Булево - если в процедуре ПередЗагрузкойОбъекта() установить значение данного // параметра равным Истина - загрузка объекта данных выполняться не будет. -// ПослеЗагрузкиОбъекта - Булево, флаг необходимости вызова обработчика после +// ПослеЗагрузкиОбъекта - Булево - флаг необходимости вызова обработчика после // загрузки объекта данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПослеЗагрузкиОбъекта(), @@ -753,7 +753,7 @@ // для типа которого в качестве базового типа используется абстрактный XDTO-тип // {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}Artefact. Допускается использовать XDTO-пакеты, // помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. -// ПослеЗагрузкиТипа - Булево, флаг необходимости вызова обработчика после +// ПослеЗагрузкиТипа - Булево - флаг необходимости вызова обработчика после // загрузки всех объектов данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПослеЗагрузкиТипа(), @@ -780,7 +780,7 @@ // Сериализация - ОбъектXDTO - ОбъектXDTO {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}InfoBaseUser, // сериализация пользователя информационной базы, // ПользовательИБ - ПользовательИнформационнойБазы, десериализованный из выгрузки, -// Отказ - Булево, при установке значения данного параметры внутри этой процедуры в +// Отказ - Булево - при установке значения данного параметры внутри этой процедуры в // значение Ложь загрузка пользователя информационной базы будет пропущена. // Процедура ПриЗагрузкеПользователяИнформационнойБазы(Контейнер, Сериализация, ПользовательИБ, Отказ) Экспорт @@ -882,7 +882,7 @@ // Только для внутреннего использования. // // Возвращаемое значение: -// Структура - действия с пользователем сервиса см. НовыеДействияСПользователемСервиса. +// см. НовыеДействияСПользователемСервиса. // Функция ДействияСПользователемСервисаПриНедоступностиНастройкиПользователей() @@ -913,7 +913,7 @@ // Пользователь - СправочникСсылка.Пользователи - пользователь. // // Возвращаемое значение: -// Структура - действия с пользователем сервиса см. НовыеДействияСПользователемСервиса. +// см. НовыеДействияСПользователемСервиса. // Функция ДействияССуществующимПользователемСервиса(Знач Пользователь) @@ -941,7 +941,7 @@ // Только для внутреннего использования. // // Возвращаемое значение: -// Структура - действия с пользователем сервиса см. НовыеДействияСПользователемСервиса. +// см. НовыеДействияСПользователемСервиса. // Функция ДействияСНовымПользователемСервиса() @@ -1137,7 +1137,7 @@ // Пользователь - СправочникСсылка.Пользователи; // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоСуществующийПользовательТекущейОбластиДанных(Знач Пользователь) @@ -1312,7 +1312,7 @@ // Идентификатор - уникальный идентификатор пользователя ИБ или СправочникСсылка.Пользователи. // // Возвращаемое значение: -// Строка - +// Строка // Функция ПолноеИмяСлужебногоПользователя(Знач Идентификатор = Неопределено) Экспорт @@ -1336,7 +1336,7 @@ // Проверяет, является ли текущий пользователь ИБ неразделенным. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоНеразделенныйПользовательИБ() diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl index 2229e6c87..33432207b 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl @@ -11,7 +11,7 @@ // Открывает форму ввода пароля пользователя сервиса. // // Параметры: -// ОбработкаПродолжения - ОписаниеОповещения, которое нужно обработать после получения пароля. +// ОбработкаПродолжения - ОписаниеОповещения - которое нужно обработать после получения пароля. // ФормаВладелец - ФормаКлиентскогоПриложения, которая запрашивает пароль. // ПарольПользователяСервиса - Строка - текущий пароль пользователя сервиса. // diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl index 6c3b6e037..b117e4884 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl @@ -51,8 +51,8 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// Безусловно - Булево - +// Форма - ФормаКлиентскогоПриложения +// Безусловно - Булево // Процедура РазвернутьПодсистемыРолей(Форма, Безусловно = Истина) Экспорт @@ -236,15 +236,16 @@ // Записывает в форму результат выбора назначения. // // Параметры: -// РезультатЗакрытия - Неопределено - -// - СписокЗначений - -// ДополнительныеПараметры - Структура - где: -// * ДанныеФормы - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - где: -// ** Объект - ДанныеФормыСтруктура - -// ** Элементы - ВсеЭлементыФормы - где: -// *** ВыбратьНазначение - КнопкаФормы - -// * ЭтоОтбор - Булево - -// * ОписаниеОповещения - ОписаниеОповещения - +// РезультатЗакрытия - Неопределено +// - СписокЗначений +// ДополнительныеПараметры - Структура: +// * ДанныеФормы - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов: +// ** Объект - ДанныеФормыСтруктура +// ** Элементы - ВсеЭлементыФормы: +// *** ВыбратьНазначение - КнопкаФормы +// * ЭтоОтбор - Булево +// * ОписаниеОповещения - ОписаниеОповещения // Процедура ПослеВыбораНазначения(РезультатЗакрытия, ДополнительныеПараметры) Экспорт @@ -299,6 +300,7 @@ // должен совпадать значением параметра "Пользователь". // ИмяФормыПерсональныхНастроек - Строка - путь для открытия формы персональных настроек. // Вида "ОбщаяФорма.НазваниеФормы". +// Процедура ОткрытьОтчетИлиФорму(ТекущийЭлемент, Пользователь, ТекущийПользователь, ИмяФормыПерсональныхНастроек) Экспорт ЭлементДереваЗначений = ТекущийЭлемент; diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl index f3fdd25da..174bda666 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl @@ -18,7 +18,7 @@ // например: НСтр("ru = 'день,дня,дней,,,,,,0'"). // // Возвращаемое значение: -// Строка - . +// Строка // Функция ПредметЦелогоЧисла(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления) Экспорт @@ -84,10 +84,13 @@ // Для форма элементов справочников Пользователи и ВнешниеПользователи. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОбъектов - где: -// * Элементы - ВсеЭлементыФормы - где: -// ** ВходВПрограммуРазрешен - ПолеФормы, РасширениеПоляФормыДляПоляФлажка - -// ** ИзменитьОграничениеНаВходВПрограмму - ПолеФормы, РасширениеПоляФормыДляПоляФлажка - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОбъектов: +// * Элементы - ВсеЭлементыФормы: +// ** ВходВПрограммуРазрешен - ПолеФормы +// - РасширениеПоляФормыДляПоляФлажка +// ** ИзменитьОграничениеНаВходВПрограмму - ПолеФормы +// - РасширениеПоляФормыДляПоляФлажка // Процедура ОбновитьОграничениеСрокаДействия(Форма) Экспорт @@ -133,15 +136,19 @@ // Для форма элементов справочников Пользователи и ВнешниеПользователи. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - где: -// * Объект - ДанныеФормыСтруктура - где: -// ** Ссылка - СправочникОбъект.Пользователи, СправочникОбъект.ВнешниеПользователи - -// * Элементы - ВсеЭлементыФормы - где: -// ** НадписьНаличиеПароля - ДекорацияФормы, РасширениеДекорацииФормыДляНадписи - -// ** ПотребоватьСменуПароляПриВходе - ПолеФормы, РасширениеПоляФормыДляПоляФлажка - -// ** СменитьПароль - КнопкаФормы - -// ПарольУстановлен - Булево - -// АвторизованныйПользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - +// Форма - ФормаКлиентскогоПриложения: +// * Объект - ДанныеФормыСтруктура: +// ** Ссылка - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи +// * Элементы - ВсеЭлементыФормы: +// ** НадписьНаличиеПароля - ДекорацияФормы +// - РасширениеДекорацииФормыДляНадписи +// ** ПотребоватьСменуПароляПриВходе - ПолеФормы +// - РасширениеПоляФормыДляПоляФлажка +// ** СменитьПароль - КнопкаФормы +// ПарольУстановлен - Булево +// АвторизованныйПользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи // Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен, АвторизованныйПользователь) Экспорт diff --git a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl index 7d0154cf8..04a8e3f83 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl @@ -46,7 +46,7 @@ // Истина - для модели сервиса (включая роли неразделенных пользователей). // // Возвращаемое значение: -// Соответствие - со свойствами: +// Соответствие: // * Ключ - Строка - имя роли. // * Значение - Булево - Истина. // @@ -94,7 +94,7 @@ // ДляВнешнихПользователей - Булево - если истина, значит для внешних пользователей. // // Возвращаемое значение: -// Соответствие - со свойствами: +// Соответствие: // * Ключ - Строка - имя роли. // * Значение - Булево - Истина. // @@ -125,17 +125,17 @@ // См. комментарий к процедуре ПриОпределенииНазначенияРолей общего модуля ПользователиПереопределяемый. // // Возвращаемое значение: -// ФиксированнаяСтруктура - со свойствами: -// * ТолькоДляАдминистраторовСистемы - ФиксированноеСоответствие - со свойствами: +// ФиксированнаяСтруктура: +// * ТолькоДляАдминистраторовСистемы - ФиксированноеСоответствие: // * Ключ - Строка - имя роли. // * Значение - Булево - Истина. -// * ТолькоДляПользователейСистемы - ФиксированноеСоответствие - со свойствами: +// * ТолькоДляПользователейСистемы - ФиксированноеСоответствие: // * Ключ - Строка - имя роли. // * Значение - Булево - Истина. -// * ТолькоДляВнешнихПользователей - ФиксированноеСоответствие - со свойствами: +// * ТолькоДляВнешнихПользователей - ФиксированноеСоответствие: // * Ключ - Строка - имя роли. // * Значение - Булево - Истина. -// * СовместноДляПользователейИВнешнихПользователей - ФиксированноеСоответствие - со свойствами: +// * СовместноДляПользователейИВнешнихПользователей - ФиксированноеСоответствие: // * Ключ - Строка - имя роли. // * Значение - Булево - Истина. // @@ -199,7 +199,7 @@ // См. также описание процедуры ПриОпределенииНастроек в общем модуле ПользователиПереопределяемый. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ОбщиеНастройкиВхода - Булево - если Ложь, // тогда в панели администрирования "Настройки прав и пользователей" возможность // открытия формы настроек входа будет скрыта, как и поле СрокДействия в карточках @@ -210,7 +210,7 @@ // группы внешних пользователей будет скрыт (в том числе для администратора). // // * ВнешниеПользователи - Структура - со свойствами, как у свойства Пользователи (см. далее). -// * Пользователи - Структура - со свойствами: +// * Пользователи - Структура: // // * ПарольДолженОтвечатьТребованиямСложности - Булево - проверять сложность нового пароля. // * МинимальнаяДлинаПароля - Число - проверять длину нового пароля. @@ -259,8 +259,8 @@ // "СовместноДляПользователейИВнешнихПользователей". // // Возвращаемое значение: -// ДеревоЗначений - где: -// * ЭтоРоль - Булево - +// ДеревоЗначений: +// * ЭтоРоль - Булево // * Имя - Строка - имя роли или подсистемы. // * Синоним - Строка - синоним роли или подсистемы. // diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl index c33312202..d33c4f87a 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl @@ -24,7 +24,7 @@ // по умолчанию равен Ложь. // // Возвращаемое значение: -// Строка - Номер объекта без префиксов. +// Строка - номер объекта без префиксов. // // Пример: // УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Истина, Истина) = "000001234" @@ -88,7 +88,7 @@ // НомерОбъекта - Строка - номер или код объекта из которого требуется лидирующие нули. // // Возвращаемое значение: -// Строка - Номер объекта без лидирующих нулей. +// Строка - номер объекта без лидирующих нулей. // Функция УдалитьЛидирующиеНулиИзНомераОбъекта(Знач НомерОбъекта) Экспорт @@ -128,7 +128,7 @@ // НомерОбъекта - Строка - номер или код объекта из которого требуется лидирующие нули. // // Возвращаемое значение: -// Строка - Номер объекта без пользовательских префиксов. +// Строка - номер объекта без пользовательских префиксов. // Функция УдалитьПользовательскиеПрефиксыИзНомераОбъекта(Знач НомерОбъекта) Экспорт @@ -179,7 +179,7 @@ // НомерОбъекта - Строка - номер или код объекта из которого требуется получить пользовательский префикс. // // Возвращаемое значение: -// Строка - Пользовательский префикс. +// Строка - пользовательский префикс. // Функция ПользовательскийПрефикс(Знач НомерОбъекта) Экспорт @@ -226,7 +226,7 @@ // УдалитьПользовательскийПрефикс - Булево - признак удаления пользовательского префикса. // // Возвращаемое значение: -// Строка - Номер на печать. +// Строка - номер на печать. // Функция НомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь) Экспорт diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl index f6cad5515..83785fffa 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl @@ -15,14 +15,16 @@ // были сформированы нестандартным образом, не в формате номеров и кодов БСП. // // Параметры: -// Объект - ДокументОбъект, БизнесПроцессОбъект, ЗадачаОбъект - Объект данных, +// Объект - ДокументОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект - объект данных, // для которого необходимо определить базовый номер. -// Номер - Строка - Номер текущего объекта, из которого необходимо извлечь базовый номер. -// БазовыйНомер - Строка - Базовый номер объекта. +// Номер - Строка - номер текущего объекта, из которого необходимо извлечь базовый номер. +// БазовыйНомер - Строка - базовый номер объекта. // Под базовым номером объекта подразумевается номер объекта // за вычетом всех префиксов (префикса ИБ, префикса организации, // префикса подразделения, пользовательского префикса и пр). -// СтандартнаяОбработка - Булево - Флаг стандартной обработки. Значения по умолчанию Истина. +// СтандартнаяОбработка - Булево - флаг стандартной обработки. Значения по умолчанию Истина. // Если в обработчике установить данному параметру значение Ложь, // то стандартная обработка выполнена не будет. // Стандартная обработка получает базовый код справа до первого нечислового символа. @@ -42,13 +44,14 @@ // были сформированы нестандартным образом, не в формате номеров и кодов БСП. // // Параметры: -// Объект - СправочникОбъект, ПланВидовХарактеристикОбъект - Объект данных, +// Объект - СправочникОбъект +// - ПланВидовХарактеристикОбъект - объект данных, // для которого необходимо определить базовый код. -// Код - Строка - Код текущего объекта, из которого необходимо извлечь базовый код. -// БазовыйКод - Строка - Базовый код объекта. Под базовым кодом объекта подразумевается код объекта +// Код - Строка - код текущего объекта, из которого необходимо извлечь базовый код. +// БазовыйКод - Строка - базовый код объекта. Под базовым кодом объекта подразумевается код объекта // за вычетом всех префиксов (префикса ИБ, префикса организации, // префикса подразделения, пользовательского префикса и пр). -// СтандартнаяОбработка - Булево - Флаг стандартной обработки. Значения по умолчанию Истина. +// СтандартнаяОбработка - Булево - флаг стандартной обработки. Значения по умолчанию Истина. // Если в обработчике установить данному параметру значение Ложь, // то стандартная обработка выполнена не будет. // Стандартная обработка получает базовый код справа до первого нечислового символа. @@ -63,10 +66,10 @@ // для которых ссылка на организацию располагается в реквизите с именем отличным от стандартного имени "Организация". // // Параметры: -// Объекты - ТаблицаЗначений - Таблица с колонками: -// * Объект - ОбъектМетаданных - Объект метаданных, для которого указывается реквизит, +// Объекты - ТаблицаЗначений: +// * Объект - ОбъектМетаданных - объект метаданных, для которого указывается реквизит, // содержащий ссылку на организацию. -// * Реквизит - Строка - Имя реквизита, который содержит ссылку на организацию. +// * Реквизит - Строка - имя реквизита, который содержит ссылку на организацию. // Процедура ПолучитьПрефиксообразующиеРеквизиты(Объекты) Экспорт diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl index 9012dd63d..39f722079 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl @@ -17,9 +17,9 @@ // Дополнительно позволяет выполнить обработку данных для продолжения нумерации. // // Параметры: -// Параметры - Структура - Параметры выполнения процедуры: -// * НовыйПрефиксИБ - Строка - Новый префикс информационной базы. -// * ПродолжитьНумерацию - Булево - Признак необходимости продолжения нумерации. +// Параметры - Структура - параметры выполнения процедуры: +// * НовыйПрефиксИБ - Строка - новый префикс информационной базы. +// * ПродолжитьНумерацию - Булево - признак необходимости продолжения нумерации. // АдресРезультата - Строка - адрес временного хранилища, в которое нужно // поместить результат работы процедуры. // @@ -322,14 +322,13 @@ // Определяет необходимость выполнения обработчика события "ПослеЗагрузкиДанных" при обмене в РИБ. // // Параметры: -// НовыйПрефиксИБ - Строка - Необходим для вычисления новых кодов (номеров) элементов после изменения префикса. -// РежимАнализаДанных - Булево - Если Истина, изменения данных не происходит, функция только просчитывает, +// НовыйПрефиксИБ - Строка - необходим для вычисления новых кодов (номеров) элементов после изменения префикса. +// РежимАнализаДанных - Булево - если Истина, изменения данных не происходит, функция только просчитывает, // какие данные будут изменены и как они будут изменены. Если Ложь - изменения объекта, // записываются в информационную базу. // // Возвращаемое значение: -// ТаблицаЗначений - информация об объектах, подлежащих действиям по замене префикса в номере или коде -// (см. функцию ПрефиксацияОбъектовСлужебный.ОписаниеМетаданныхИспользующихПрефиксы). +// см. ПрефиксацияОбъектовСлужебный.ОписаниеМетаданныхИспользующихПрефиксы // Функция ОбработатьДанныеДляПродолженияНумерации(Знач НовыйПрефиксИБ = "", РежимАнализаДанных = Ложь) diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl index 6119e0435..ee5827fb6 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl @@ -13,7 +13,7 @@ // обязательный реквизит шапки "Организация", с типом "СправочникСсылка.Организации". // // Параметры: -// Источник - Произвольный - Источник события подписки. +// Источник - Произвольный - источник события подписки. // Любой объект из множества [Справочник, Документ, План видов характеристик, Бизнес процесс, Задача]. // СтандартнаяОбработка - Булево - флаг стандартной обработки подписки. // Префикс - Строка - префикс объекта, который нужно изменить. @@ -28,7 +28,7 @@ // Ограничения на реквизиты источника не накладываются. // // Параметры: -// Источник - Произвольный - Источник события подписки. +// Источник - Произвольный - источник события подписки. // Любой объект из множества [Справочник, Документ, План видов характеристик, Бизнес процесс, Задача]. // СтандартнаяОбработка - Булево - флаг стандартной обработки подписки. // Префикс - Строка - префикс объекта, который нужно изменить. @@ -44,7 +44,7 @@ // обязательный реквизит шапки "Организация", с типом "СправочникСсылка.Организации". // // Параметры: -// Источник - Произвольные - Источник события подписки. +// Источник - Произвольные - источник события подписки. // Любой объект из множества [Справочник, Документ, План видов характеристик, Бизнес процесс, Задача]. // СтандартнаяОбработка - Булево - флаг стандартной обработки подписки. // Префикс - Строка - префикс объекта, который нужно изменить. @@ -113,8 +113,8 @@ // Параметры: // Источник - ДокументОбъект - источник события подписки. // Отказ - Булево - флаг отказа. -// РежимЗаписи - РежимЗаписиДокумента - В параметр передается текущий режим записи документа. -// РежимПроведения - РежимПроведенияДокумента - В данный параметр передается текущий режим проведения. +// РежимЗаписи - РежимЗаписиДокумента - в параметр передается текущий режим записи документа. +// РежимПроведения - РежимПроведенияДокумента - в данный параметр передается текущий режим проведения. // Процедура ПроверитьНомерДокументаПоДате(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт @@ -129,8 +129,8 @@ // Параметры: // Источник - ДокументОбъект - источник события подписки. // Отказ - Булево - флаг отказа. -// РежимЗаписи - РежимЗаписиДокумента - В параметр передается текущий режим записи документа. -// РежимПроведения - РежимПроведенияДокумента - В данный параметр передается текущий режим проведения. +// РежимЗаписи - РежимЗаписиДокумента - в параметр передается текущий режим записи документа. +// РежимПроведения - РежимПроведенияДокумента - в данный параметр передается текущий режим проведения. // Процедура ПроверитьНомерДокументаПоДатеИОрганизации(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт @@ -144,7 +144,7 @@ // Возвращает префикс этой информационной базы. // // Параметры: -// ПрефиксИнформационнойБазы - Строка - Возвращаемое значение. Содержит префикс информационной базы. +// ПрефиксИнформационнойБазы - Строка - возвращаемое значение. Содержит префикс информационной базы. // Процедура ПриОпределенииПрефиксаИнформационнойБазы(ПрефиксИнформационнойБазы) Экспорт diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl index b6a04c540..c16f9c7f6 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl @@ -163,6 +163,7 @@ // РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(), // РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и // РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(). +// Функция РазрешениеНаИспользованиеВнешнегоМодуля(Знач Имя, Знач КонтрольнаяСумма, Знач Описание = "") Экспорт Пакет = РаботаВБезопасномРежимеСлужебный.Пакет(); @@ -461,7 +462,7 @@ // Проверяет возможность перехода в привилегированный режим из текущего безопасного режима. // // Возвращаемое значение: -// Булево - +// Булево // Функция ДоступенПереходВПривилегированныйРежим() @@ -473,7 +474,7 @@ // Возвращает "предопределенный" псевдоним (alias) для каталога программы. // // Возвращаемое значение: -// Строка - . +// Строка // Функция ПсевдонимКаталогаПрограммы() @@ -495,8 +496,8 @@ // // Возвращаемое значение: // ФиксированнаяСтруктура: -// * Ключ - Строка, имя Интернет-протокола, -// * Значение - Число, номер сетевого порта. +// * Ключ - Строка - имя Интернет-протокола, +// * Значение - Число - номер сетевого порта. // Функция СтандартныеПортыИнтернетПротоколов() diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl index 12efa74cd..5fc2d892b 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl @@ -24,7 +24,7 @@ // Вызывается при проверке возможности настройки профилей безопасности. // // Параметры: -// Отказ - Булево - Если для информационной базы недоступно использование профилей безопасности +// Отказ - Булево - если для информационной базы недоступно использование профилей безопасности // значение данного параметра нужно установить равным Истина. // Процедура ПриПроверкеВозможностиНастройкиПрофилейБезопасности(Отказ) Экспорт @@ -45,7 +45,7 @@ // при создании информационной базы или обновлении программы. // // Параметры: -// ЗапросыРазрешений - Массив из см. РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов - +// ЗапросыРазрешений - Массив из см. РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов // Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl index 4e4edcc4d..57a38c6a3 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl @@ -290,7 +290,7 @@ // Проверяет возможность использования профилей безопасности для текущей информационной базы. // // Возвращаемое значение: -// Булево - +// Булево // Функция ВозможноИспользованиеПрофилейБезопасности() Экспорт @@ -419,7 +419,7 @@ // Идентификатор - УникальныйИдентификатор - уникальный идентификатор ссылки. // // Возвращаемое значение: -// ЛюбаяСсылка - . +// ЛюбаяСсылка // Функция СсылкаИзРегистраРазрешений(Знач Тип, Знач Идентификатор) Экспорт @@ -574,7 +574,7 @@ // менеджер. // // Возвращаемое значение: -// ОбщийМодуль - . +// ОбщийМодуль // Функция МенеджерВнешнегоМодуля(Знач ВнешнийМодуль) Экспорт @@ -616,7 +616,7 @@ // Проверяет, требуется ли использовать интерактивный режим запроса разрешений. // // Возвращаемое значение: -// Булево - +// Булево // Функция ИспользуетсяИнтерактивныйРежимЗапросаРазрешений() diff --git a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl index 2fe23028e..34f7b3071 100644 --- a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl @@ -12,10 +12,11 @@ // Если переданная строка не содержит информации об адресе, то будет вызвано исключение. // // Параметры: -// Адрес - Строка, Структура - Строка в формате JSON или XML соответствующая XDTO пакету Адрес. +// Адрес - Строка +// - Структура - строка в формате JSON или XML соответствующая XDTO пакету Адрес. // // Возвращаемое значение: -// Строка - Наименование региона. +// Строка - наименование региона. // Функция РегионАдресаКонтактнойИнформации(Знач Адрес) Экспорт @@ -46,10 +47,11 @@ // Если переданная строка не содержит информации об адресе, то будет вызвано исключение. // // Параметры: -// Адрес - Строка, Структура - Строка в формате JSON или строка XML соответствующая XDTO пакету Адрес. +// Адрес - Строка +// - Структура - строка в формате JSON или строка XML соответствующая XDTO пакету Адрес. // // Возвращаемое значение: -// Строка - Наименование города. +// Строка - наименование города. // Функция ГородАдресаКонтактнойИнформации(Знач Адрес) Экспорт @@ -89,24 +91,24 @@ // Адреса - Массив - адреса во внутреннем формате JSON или в XML, соответствующий XDTO-пакету Адрес // или XDTO объектов, соответствующих XDTO-пакету Адрес. // ДополнительныеПараметры - Структура - для уточнения возвращаемого значения: -// * БезПредставлений - Булево - Если Истина, то поле Представление будет отсутствовать. По умолчанию, Ложь. -// * КодыАдреса - Булево - Если Истина, то результат содержит поля ИдентификаторАдресногоОбъекта, ИдентификаторДома +// * БезПредставлений - Булево - если Истина, то поле Представление будет отсутствовать. По умолчанию, Ложь. +// * КодыАдреса - Булево - если Истина, то результат содержит поля ИдентификаторАдресногоОбъекта, ИдентификаторДома // и структура с кодами адреса(Идентификаторы, ДополнительныеКоды, КодыКЛАДР). // Подробнее см. в возвращаемом значении структуры Идентификаторы и // ДополнительныеКоды. По умолчанию, Ложь. Если в адресе отсутствуют идентификаторы // и в программу не загружены идентификаторы адресных объектов адреса, то получение // идентификаторов может инициировать http запрос к веб-сервису 1С orgaddress. -// * КодыКЛАДР - Булево - Если Истина, то возвращается структура КодыКЛАДР. По умолчанию Ложь. +// * КодыКЛАДР - Булево - если Истина, то возвращается структура КодыКЛАДР. По умолчанию Ложь. // Если в адресе отсутствуют коды и в программу не загружены адресные объекты адреса, // Получение кодов может инициировать http запрос к веб-сервису 1С orgaddress. -// * ПолноеНаименованиеСокращений - Булево - Если Истина, то возвращается полное наименование адресных объектов. -// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращения в наименованиях адресных объектов. -// * ПроверитьАдрес - Булево - Если Истина, то адрес будет проверен на соответствие ФИАС. По умолчанию, Ложь. +// * ПолноеНаименованиеСокращений - Булево - если Истина, то возвращается полное наименование адресных объектов. +// * НаименованиеВключаетСокращение - Булево - если Истина, то поля содержат сокращения в наименованиях адресных объектов. +// * ПроверитьАдрес - Булево - если Истина, то адрес будет проверен на соответствие ФИАС. По умолчанию, Ложь. // Если в программу не загружены проверяемые адресные объекты, // то проверка адреса может инициировать http запрос к веб-сервису 1С orgaddress. // // Возвращаемое значение: -// Массив - Содержит массив структур, содержимое структуры см. в описании функции СведенияОбАдресе. +// Массив - содержит массив структур, содержимое структуры см. в описании функции СведенияОбАдресе. // Функция СведенияОбАдресах(Адреса, ДополнительныеПараметры = Неопределено) Экспорт Возврат СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры); @@ -115,28 +117,28 @@ // Возвращает сведения об адресе в виде отдельных частей адреса и различных кодов (код региона, ОКТМО и др.). // // Параметры: -// Адрес - Строка - Адрес во внутреннем формате JSON или в XML, соответствующем XDTO-пакету Адрес. +// Адрес - Строка - адрес во внутреннем формате JSON или в XML, соответствующем XDTO-пакету Адрес. // - ОбъектXDTO - XDTO-объект, соответствующий XDTO пакету Адрес. // - Неопределено - конструктор для получения пустых полей адреса. // ДополнительныеПараметры - Структура - для уточнения возвращаемого значения: -// * БезПредставлений - Булево - Если Истина, то поле Представление будет отсутствовать. По умолчанию Ложь. -// * КодыАдреса - Булево - Если Истина, то результат содержит поля ИдентификаторАдресногоОбъекта, ИдентификаторДома +// * БезПредставлений - Булево - если Истина, то поле Представление будет отсутствовать. По умолчанию Ложь. +// * КодыАдреса - Булево - если Истина, то результат содержит поля ИдентификаторАдресногоОбъекта, ИдентификаторДома // и структура с кодами адреса(Идентификаторы, ДополнительныеКоды, КодыКЛАДР). // Подробнее см. в возвращаемом значении структуры Идентификаторы и // ДополнительныеКоды. По умолчанию, Ложь. Если в адресе отсутствуют идентификаторы // и в программу не загружены идентификаторы адресных объектов адреса, то получение // идентификаторов может инициировать http запрос к веб-сервису 1С orgaddress. -// * КодыКЛАДР - Булево - Если Истина, то возвращается структура КодыКЛАДР. По умолчанию Ложь. +// * КодыКЛАДР - Булево - если Истина, то возвращается структура КодыКЛАДР. По умолчанию Ложь. // Если в адресе отсутствуют коды и в программу не загружены адресные объекты адреса, // Получение кодов может инициировать http запрос к веб-сервису 1С orgaddress. -// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. -// * ПроверитьАдрес - Булево - Если Истина, то адрес будет проверен на соответствие ФИАС. По умолчанию Ложь. +// * НаименованиеВключаетСокращение - Булево - если Истина, то поля содержат сокращениям в наименованиях адресных объектов. +// * ПроверитьАдрес - Булево - если Истина, то адрес будет проверен на соответствие ФИАС. По умолчанию Ложь. // Если в программу не загружены проверяемые адресные объекты, // то проверка адреса может инициировать http запрос к веб-сервису 1С orgaddress. -// * ПолноеНаименованиеСокращений - Булево - Устаревший параметр. Следует использовать свойства ТипПолный и ТипКраткий. +// * ПолноеНаименованиеСокращений - Булево - устаревший параметр. Следует использовать свойства ТипПолный и ТипКраткий. // // Возвращаемое значение: -// Структура - сведения об адресе: +// Структура: // * Представление - Строка - текстовое представление адреса по административно-территориальному делению. // * МуниципальноеПредставление - Строка - текстовое представление адреса по муниципальному делению. // * ТипАдреса - Строка - основной тип адреса (только для адресов РФ). @@ -224,25 +226,26 @@ // дополнительной территории. // * ЭлементДополнительнойТерриторииСокращение - Строка - устаревшее свойство. Сокращение элемента дополнительной // территории. -// * Здание - Структура - структура с информацией о здании адреса. +// * Здание - Структура - структура с информацией о здании адреса: // ** ТипЗдания - Строка - тип объекта адресации адреса РФ согласно приказу Минфина России от 5.11.2015 г. N171н. // ** Номер - Строка - текстовое представление номера дома (только для адресов РФ). // * Корпуса - Массив - содержит структуры (поля структуры: ТипКорпуса, Номер) с перечнем корпусов адреса. // * Помещения - Массив - содержит структуры (поля структуры: ТипПомещения, Номер) с перечнем помещений адреса. // * НомерЗемельногоУчастка - Строка - текстовое представление номера земельного участка (только для адресов РФ). // * Комментарий - Строка - комментарий об адресе. -// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Идентификационный код последнего адресного объекта +// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - идентификационный код последнего адресного объекта // в иерархи адреса. Например, для адреса: Москва г., Дмитровское ш., д.9 это // будет идентификатор улицы. // Поле отсутствует, если дополнительный параметр КодыАдреса равен Ложь. -// * ИдентификаторДома - УникальныйИдентификатор - Идентификационный код дома(строения) адресного объекта. +// * ИдентификаторДома - УникальныйИдентификатор - идентификационный код дома(строения) адресного объекта. // Поле отсутствует, если дополнительный параметр КодыАдреса равен Ложь. // Пустая строка если значение отсутствует. -// * ИдентификаторЗемельногоУчастка - УникальныйИдентификатор - Идентификационный код земельного участка +// * ИдентификаторЗемельногоУчастка - УникальныйИдентификатор - идентификационный код земельного участка // адресного объекта. При отсутствии значения - пустая строка. -// * Идентификаторы - Структура - Идентификаторы адресных объектов адреса, если установлен параметр КодыАдреса +// * Идентификаторы - Структура - где: +// Идентификаторы адресных объектов адреса, если установлен параметр КодыАдреса // или КодыКЛАДР. Поле отсутствует, если дополнительный параметр КодыАдреса или -// КодыКЛАДР равен Ложь. +// КодыКЛАДР равен Ложь: // ** Регион - УникальныйИдентификатор - идентификатор региона. // ** Район - УникальныйИдентификатор - идентификатор района. // ** МуниципальныйРайон - УникальныйИдентификатор - идентификатор муниципального района. @@ -252,13 +255,13 @@ // ** НаселенныйПункт - УникальныйИдентификатор - идентификатор населенного пункта. // ** Территория - УникальныйИдентификатор - идентификатор территории. // ** Улица - УникальныйИдентификатор - идентификатор улица. -// * КодыКЛАДР - Структура - Коды КЛАДР, если параметр КодыКЛАДР установлен в Истина. -// ** Регион - Строка - Код КЛАДР региона. -// ** Район - Строка - Код КЛАДР район. -// ** Город - Строка - Код КЛАДР города. -// ** НаселенныйПункт - Строка - Код КЛАДР населенного пункта. -// ** Улица - Строка - Код КЛАДР улицу. -// * ДополнительныеКоды - Структура - Коды ОКТМО, ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ. +// * КодыКЛАДР - Структура - коды КЛАДР, если параметр КодыКЛАДР установлен в Истина. Где: +// ** Регион - Строка - код КЛАДР региона. +// ** Район - Строка - код КЛАДР район. +// ** Город - Строка - код КЛАДР города. +// ** НаселенныйПункт - Строка - код КЛАДР населенного пункта. +// ** Улица - Строка - код КЛАДР улицу. +// * ДополнительныеКоды - Структура - коды ОКТМО, ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ. // Поле отсутствует, если дополнительный параметр КодыАдреса равен Ложь. // * РезультатПроверкиАдреса - Строка - "Успех", если адрес корректный, "Ошибка" - при наличии ошибок проверки, // "Отказ", если не удалось проверить адрес, т.к. не доступен классификатор. @@ -274,21 +277,120 @@ // // Параметры: // Адрес - Строка - строка JSON или XML контактной информации, соответствующая XDTO-пакету КонтактнаяИнформация. -// ПараметрыПроверки - Структура, СправочникСсылка.ВидыКонтактнойИнформации - флаги проверки адреса: +// ПараметрыПроверки - Структура +// - СправочникСсылка.ВидыКонтактнойИнформации - флаги проверки адреса: // ТолькоНациональныйАдрес - Булево - адрес должен быть только российским. По умолчанию Истина. -// ФорматАдреса - Строка - Устарело. По какому классификатору проверять: "КЛАДР" или "ФИАС". По умолчанию "КЛАДР". +// ФорматАдреса - Строка - устарело. По какому классификатору проверять: "КЛАДР" или "ФИАС". По умолчанию "КЛАДР". // Возвращаемое значение: // Структура - содержит структуру с полями: -// * Результат - Строка - Результат проверки: "Корректный", "НеПроверен", "СодержитОшибки". -// * СписокОшибок - СписокЗначений - Информация о ошибках. +// * Результат - Строка - результат проверки: "Корректный", "НеПроверен", "СодержитОшибки". +// * СписокОшибок - СписокЗначений - информация о ошибках. +// Функция ПроверитьАдрес(Знач Адрес, ПараметрыПроверки = Неопределено) Экспорт Возврат УправлениеКонтактнойИнформациейСлужебный.ПроверитьАдрес(Адрес, ПараметрыПроверки); КонецФункции +// Проверяет адреса на соответствие ФИАС и для устаревших адресов возвращает актуальные варианты. +// Если адресные сведения региона адреса не загружены в программу, то проверка адреса будет +// выполнена через веб-сервис orgaddress и может занимать до 120 секунд. +// Поэтому для исключения зависаний пользовательского интерфейса, например при открытии формы, +// функцию следует вызвать в фоновом задании. +// +// Параметры: +// Адреса - Соответствие: +// * Ключ - Число - уникальный идентификатор адреса; +// * Значение - Строка - проверяемый адрес во внутреннем формате JSON. +// В целях обратной совместимости допускается передача адреса в виде XML, +// соответствующем XDTO-пакету Адрес (http://www.v8.1c.ru/ssl/contactinfo), +// но это негативно сказывается на времени выполнения функции. +// ДополнительныеПараметры - Структура: +// * ПроверятьУстареваниеАдресов - Булево - если адрес устарел, то свойство АктуальныеАдреса будут содержать актуальные +// варианты адреса. Для загруженных регионов адресного классификатора должна быть загружена +// история изменений адресных сведений. По умолчанию, Ложь. +// * ВключатьСтрануВПредставление - Булево - в поле Представление у свойства АктуальныеАдреса включать страну +// в представление актуального адреса. По умолчанию, Ложь. +// +// Возвращаемое значение: +// Соответствие: +// * Ключ - Число - уникальный идентификатор адреса; +// * Значение - Структура: +// * АдресПроверен - Булево - признак, что адрес был проверен в классификаторе или через веб-сервис. +// * АдресКорректный - Булево - признак, что адрес соответствует ФИАС. Устаревшие адреса считаются некорректными. +// * Ошибки - Массив из Строка - список ошибок в адресе. +// * АктуальныеАдреса - Массив из Структура - где: +// Если адрес устарел, то содержит варианты актуального адреса в виде полей адреса, где: +// * Представление - Строка - представление актуального варианта адреса; +// * Адрес - Строка - адрес во внутреннем формате JSON. +// +Функция ПроверитьАдреса(Знач Адреса, ДополнительныеПараметры = Неопределено) Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + Возврат ПроверитьАдресаКлассификаторНедоступен(Адреса); + КонецЕсли; + + ПараметрыПроверки = Новый Структура; + ПараметрыПроверки.Вставить("ПроверятьУстареваниеАдресов", Ложь); + ПараметрыПроверки.Вставить("ВключатьСтрануВПредставление", Ложь); + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ПараметрыПроверки, ДополнительныеПараметры); + КонецЕсли; + + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + + АдресаПолями = Новый Соответствие; + Для каждого ПроверяемыйАдрес Из Адреса Цикл + Адрес = ПроверяемыйАдрес.Значение; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Адрес) Тогда + Адрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(Адрес, Перечисления.ТипыКонтактнойИнформации.Адрес); + КонецЕсли; + + АдресПоПолям = МодульАдресныйКлассификаторСлужебный.КонтактнаяИнформацияВСтруктуруJSON(Адрес); + АдресаПолями.Вставить(ПроверяемыйАдрес.Ключ, АдресПоПолям); + + КонецЦикла; + + РезультатыПроверки = МодульАдресныйКлассификаторСлужебный.ПроверкаАдресов(АдресаПолями, ПараметрыПроверки.ПроверятьУстареваниеАдресов); + + Результат = Новый Соответствие; + + Для каждого КлючЗначение Из РезультатыПроверки Цикл + + СтрокаАдреса = КлючЗначение.Значение; + + ОписаниеРезультатаПроверки = ОписаниеРезультатаПроверкиАдреса(); + ЗаполнитьЗначенияСвойств(ОписаниеРезультатаПроверки, СтрокаАдреса, "АдресПроверен,АдресКорректный"); + + Для Каждого ОписаниеОшибки Из СтрокаАдреса.Ошибки Цикл + ОписаниеРезультатаПроверки.Ошибки.Добавить(ОписаниеОшибки.Текст); + КонецЦикла; + + Для Каждого ОписаниеВарианта Из СтрокаАдреса.Варианты Цикл + + Представление = РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(ОписаниеВарианта, ПараметрыПроверки.ВключатьСтрануВПредставление); + ОписаниеВарианта.value = Представление; + Адрес = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ОписаниеВарианта); + + АктуальныйАдрес = Новый Структура; + АктуальныйАдрес.Вставить("Адрес", Адрес); + АктуальныйАдрес.Вставить("Представление", Представление); + + ОписаниеРезультатаПроверки.АктуальныеАдреса.Добавить(АктуальныйАдрес); + + КонецЦикла; + + Результат.Вставить(КлючЗначение.Ключ, ОписаниеРезультатаПроверки); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + // Преобразует структуру описывающую адрес во внутренний формат хранения контактной информации JSON. // // Параметры: -// ПоляАдреса - Структура - адрес с разбивкой по полям. Список полей см. РаботаСАдресамиКлиентСервер.ПоляАдреса. +// ПоляАдреса - см. РаботаСАдресамиКлиентСервер.ПоляАдреса. // // Возвращаемое значение: // Строка - адрес во внутреннем формате JSON. @@ -357,7 +459,7 @@ Если ПоляАдреса.Свойство("Идентификаторы") Тогда Если ТипЗнч(ПоляАдреса.Идентификаторы.РегионИдентификатор) = ТипУникальныйИдентификатор И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.РегионИдентификатор) Тогда - Результат.AreaID = Строка(ПоляАдреса.Идентификаторы.РегионИдентификатор); + Результат.AreaID = Формат(ПоляАдреса.Идентификаторы.РегионИдентификатор, "ЧРГ=' '; ЧГ=0"); Результат.ID = Результат.AreaID; КонецЕсли; @@ -568,7 +670,7 @@ // Возвращает общепринятые сокращения адресных объектов. // // Возвращаемое значение: -// Соответствие - Список общепринятых сокращений. +// Соответствие - список общепринятых сокращений: // * Ключ - Строка - полное наименование адресного объекта. Например, "Дом", "Квартира" // * Значение - Строка - сокращенное наименование адресного объекта. Например, "Д.", "Кв." // @@ -609,8 +711,8 @@ // Преобразует данные формата XML в предыдущий формат контактной информации. // // Параметры: -// Данные - Строка - Строка XML соответствующая XDTO пакету Адрес. -// СокращенныйСоставПолей - Булево - Если Ложь, то из состава полей будут исключены +// Данные - Строка - строка XML соответствующая XDTO пакету Адрес. +// СокращенныйСоставПолей - Булево - если Ложь, то из состава полей будут исключены // поля, отсутствующие в версиях БСП младше 2.1.3. // // Возвращаемое значение: @@ -630,37 +732,38 @@ // Преобразует данные нового формата XML контактной информации в структуру старого формата. // // Параметры: -// Данные - Строка - Строка XML соответствующая XDTO пакету Адрес. -// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - Параметры контактной информации. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. +// Данные - Строка - строка XML соответствующая XDTO пакету Адрес. +// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации +// - Структура - параметры контактной информации: +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. // // Возвращаемое значение: -// Структура - набор пар ключ-значение. Состав свойств для адреса: -// ** Страна - Строка - Представление страны. -// ** КодСтраны - Строка - Код страны по ОКСМ. -// ** Индекс - Строка - Почтовый индекс (только для адресов РФ). -// ** Регион - Строка - Представление региона РФ (только для адресов РФ). -// ** КодРегиона - Строка - Код региона РФ (только для адресов РФ). -// ** РегионСокращение - Строка - Сокращение региона (если СтарыйСоставПолей = Ложь). -// ** Район - Строка - Представление района (только для адресов РФ). -// ** РайонСокращение - Строка - Сокращение района (если СтарыйСоставПолей = Ложь). -// ** Город - Строка - Представление города (только для адресов РФ). -// ** ГородСокращение - Строка - Сокращение города (только для адресов РФ). -// ** НаселенныйПункт - Строка - Представление населенного пункта (только для адресов РФ). -// ** НаселенныйПунктСокращение - Строка - сокращение населенного пункта (если СтарыйСоставПолей = Ложь). -// ** Улица - Строка - Представление улицы (только для адресов РФ). -// ** УлицаСокращение - Строка - Сокращение улицы (если СтарыйСоставПолей = Ложь). -// ** ТипДома - Строка - Тип дома см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. -// ** Дом - Строка - Представление дома (только для адресов РФ). -// ** ТипКорпуса - Строка - Тип корпуса см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. -// ** Корпус - Строка - Представление корпуса (только для адресов РФ). -// ** ТипКвартиры - Строка - Тип квартиры см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. -// ** Квартира - Строка - Представление квартиры (только для адресов РФ). -// Состав свойств для телефона: -// ** КодСтраны - Строка - Код страны. Например, +7. -// ** КодГорода - Строка - Код города. Например, 495. -// ** НомерТелефона - Строка - Номер телефона. -// ** Добавочный - Строка - Добавочный номер телефона. +// Структура - состав свойств для адреса: +// * Страна - Строка - представление страны. +// * КодСтраны - Строка - код страны по ОКСМ. +// * Индекс - Строка - почтовый индекс (только для адресов РФ). +// * Регион - Строка - представление региона РФ (только для адресов РФ). +// * КодРегиона - Строка - код региона РФ (только для адресов РФ). +// * РегионСокращение - Строка - сокращение региона (если СтарыйСоставПолей = Ложь). +// * Район - Строка - представление района (только для адресов РФ). +// * РайонСокращение - Строка - сокращение района (если СтарыйСоставПолей = Ложь). +// * Город - Строка - представление города (только для адресов РФ). +// * ГородСокращение - Строка - сокращение города (только для адресов РФ). +// * НаселенныйПункт - Строка - представление населенного пункта (только для адресов РФ). +// * НаселенныйПунктСокращение - Строка - сокращение населенного пункта (если СтарыйСоставПолей = Ложь). +// * Улица - Строка - представление улицы (только для адресов РФ). +// * УлицаСокращение - Строка - сокращение улицы (если СтарыйСоставПолей = Ложь). +// * ТипДома - Строка - тип дома см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. +// * Дом - Строка - представление дома (только для адресов РФ). +// * ТипКорпуса - Строка - тип корпуса см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. +// * Корпус - Строка - представление корпуса (только для адресов РФ). +// * ТипКвартиры - Строка - тип квартиры см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. +// * Квартира - Строка - представление квартиры (только для адресов РФ). +// Состав свойств для телефона: +// * КодСтраны - Строка - код страны. Например, +7. +// * КодГорода - Строка - код города. Например, 495. +// * НомерТелефона - Строка - номер телефона. +// * Добавочный - Строка - добавочный номер телефона. // Функция ПредыдущаяСтруктураКонтактнойИнформацииXML(Знач Данные, Знач ВидКонтактнойИнформации = Неопределено) Экспорт @@ -705,28 +808,28 @@ // // Возвращаемое значение: // Структура - набор пар ключ-значение. Состав свойств для адреса: -// ** Страна - Строка - Представление страны. -// ** КодСтраны - Строка - Код страны по ОКСМ. -// ** Индекс - Строка - Почтовый индекс (только для адресов РФ). -// ** Регион - Строка - Представление региона РФ (только для адресов РФ). -// ** КодРегиона - Строка - Код региона РФ (только для адресов РФ). -// ** РегионСокращение - Строка - Сокращение региона. -// ** Район - Строка - Представление района (только для адресов РФ). -// ** РайонСокращение - Строка - Сокращение района. -// ** Город - Строка - Представление города (только для адресов РФ). -// ** ГородСокращение - Строка - Сокращение города (только для адресов РФ). -// ** НаселенныйПункт - Строка - Представление населенного пункта (только для адресов РФ). -// ** НаселенныйПунктСокращение - Строка - Сокращение населенного пункта. -// ** Улица - Строка - Представление улицы (только для адресов РФ). -// ** УлицаСокращение - Строка - Сокращение улицы. -// ** ТипДома - Строка - Тип дома см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. -// ** Дом - Строка - Представление дома (только для адресов РФ). -// ** ТипКорпуса - Строка - Тип корпуса см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. -// ** Корпус - Строка - Представление корпуса (только для адресов РФ). -// ** ТипКвартиры - Строка - Тип квартиры см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. -// ** Квартира - Строка - Представление квартиры (только для адресов РФ). -// ** АдресРФ - Булево - Если Истина, то адрес российский. -// ** Представление - Строка - Представление адреса. +// * Страна - Строка - представление страны. +// * КодСтраны - Строка - код страны по ОКСМ. +// * Индекс - Строка - почтовый индекс (только для адресов РФ). +// * Регион - Строка - представление региона РФ (только для адресов РФ). +// * КодРегиона - Строка - код региона РФ (только для адресов РФ). +// * РегионСокращение - Строка - сокращение региона. +// * Район - Строка - представление района (только для адресов РФ). +// * РайонСокращение - Строка - сокращение района. +// * Город - Строка - представление города (только для адресов РФ). +// * ГородСокращение - Строка - сокращение города (только для адресов РФ). +// * НаселенныйПункт - Строка - представление населенного пункта (только для адресов РФ). +// * НаселенныйПунктСокращение - Строка - сокращение населенного пункта. +// * Улица - Строка - представление улицы (только для адресов РФ). +// * УлицаСокращение - Строка - сокращение улицы. +// * ТипДома - Строка - тип дома см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. +// * Дом - Строка - представление дома (только для адресов РФ). +// * ТипКорпуса - Строка - тип корпуса см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. +// * Корпус - Строка - представление корпуса (только для адресов РФ). +// * ТипКвартиры - Строка - тип квартиры см. РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ. +// * Квартира - Строка - представление квартиры (только для адресов РФ). +// * АдресРФ - Булево - если Истина, то адрес российский. +// * Представление - Строка - представление адреса. // Функция АдресВФорматеКЛАДР(Знач Данные) Экспорт @@ -841,6 +944,11 @@ // Преобразует XML. Обратная совместимость. // +// Параметры: +// ТекстXML - Строка +// Возвращаемое значение: +// Строка +// Функция ПередЧтениемXDTOКонтактнаяИнформация(ТекстXML) Экспорт Если СтрНайти(ТекстXML, "Адрес") = 0 Тогда @@ -1063,8 +1171,8 @@ // См. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов. // // Параметры: -// Классификаторы - См. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов.Классификаторы -// ОписаниеКлассификатора - Строка - +// Классификаторы - см. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов.Классификаторы +// ОписаниеКлассификатора - Строка // Процедура ПриДобавленииКлассификаторов(Классификаторы, ОписаниеКлассификатора) Экспорт @@ -1098,6 +1206,14 @@ #Область СлужебныеПроцедурыИФункции +Процедура ЗаполнитьМаскиНомераТелефона(СписокВыбора) Экспорт + + СписокВыбора.Добавить("+7(999) 999-99-99", СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='+7(999) 999-99-99, (Пример: +7(910) 123-23-23)'"))); + СписокВыбора.Добавить("##(99999) 999-99-99", СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='##(99999) 999-99-99, (Пример: 8(4822) 12-34-56)'"))); + СписокВыбора.Добавить("(999) 999-9999", СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='999999999, (Пример: 9001234567)'"))); + +КонецПроцедуры + Функция ИдентификаторКлассификатора() Возврат "Countries"; КонецФункции @@ -1116,14 +1232,14 @@ // Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. // // Возвращаемое значение: -// Массив из Структура - где: -// * Код - Строка - -// * Наименование - Строка- -// * Тип - Строка - -// * Порядок - Строка - -// * КодФИАС - Строка - -// * Сокращение - Строка - -// * Ключ - Строка - +// Массив из Структура: +// * Код - Строка +// * Наименование - Строка +// * Тип - Строка +// * Порядок - Строка +// * КодФИАС - Строка +// * Сокращение - Строка +// * Ключ - Строка // Функция ТипыОбъектовАдресацииАдресаРФ() Экспорт @@ -1250,11 +1366,11 @@ КонецФункции // Возвращает строку с описанием типа по коду части адреса. -// Противоположность функции "КодСериализацииОбъектаАдресации". -// Если объект не найден, то возвращается Неопределено. +// Противоположность функции КодСериализацииОбъектаАдресации. +// Если объект не существует, то возвращается Неопределено. // // Параметры: -// Код - Число - +// Код - Число // // Возвращаемое значение: // см. ТипыОбъектовАдресацииАдресаРФ @@ -1269,6 +1385,7 @@ Возврат Неопределено; КонецФункции + // Изменяет в адресе часто используемые сокращения // // Параметры: @@ -1504,7 +1621,7 @@ Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда - + // XML РезультатПреобразования = Новый Структура; XDTOКонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип, РезультатПреобразования, Представление); Результат.Value = XDTOКонтактнаяИнформация.Представление; @@ -1514,9 +1631,9 @@ Формат9Запятых = Истина; АдресРФ = КонтактнаяИнформация; Иначе - XDTOКонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип,, Представление); - Результат.Value = XDTOКонтактнаяИнформация.Представление; - Результат.Comment = XDTOКонтактнаяИнформация.Комментарий; + // ключ-значение формат + Результат = ПреобразоватьКлючЗначениеВСтруктуру(КонтактнаяИнформация, Представление); + Возврат Результат; КонецЕсли; КонецЕсли; @@ -1701,6 +1818,168 @@ КонецФункции +Функция ПреобразоватьКлючЗначениеВСтруктуру(Знач ЗначенияПолей, Знач Представление) + + Перем АдресРоссийский, ИмяПоля, НазваниеОсновнойСтраны, ПолеПредставления, Результат, СписокПолей, ТипАдреса, ТипДомаНеопределен, ТипЗначенийПолей, ТипКвартирыНеопределен, ТипКорпусаНеопределен, ЭлементДом, ЭлементКвартира, ЭлементКорпус, ЭлементСписка; + + // Старый формат через разделитель строк и равенство. + + Результат = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); + Результат.Comment = ""; + + НазваниеОсновнойСтраны = ВРег(РаботаСАдресамиКлиентСервер.ОсновнаяСтрана().Наименование); + ЭлементКвартира = Неопределено; + ЭлементКорпус = Неопределено; + ЭлементДом = Неопределено; + + Результат.Country = НазваниеОсновнойСтраны; // Страна по умолчанию + АдресРоссийский = Истина; + + ТипЗначенийПолей = ТипЗнч(ЗначенияПолей); + Если ТипЗначенийПолей = Тип("СписокЗначений") Тогда + СписокПолей = ЗначенияПолей; + ИначеЕсли ТипЗначенийПолей = Тип("Структура") Тогда + СписокПолей = УправлениеКонтактнойИнформациейСлужебный.ПреобразоватьСтрокуВСписокПолей( + СтрокаПолей(ЗначенияПолей, Ложь)); + Иначе + // Уже преобразовано в строку + СписокПолей = УправлениеКонтактнойИнформациейСлужебный.ПреобразоватьСтрокуВСписокПолей(ЗначенияПолей); + КонецЕсли; + + ТипКвартирыНеопределен = Истина; + ТипКорпусаНеопределен = Истина; + ТипДомаНеопределен = Истина; + ПолеПредставления = ""; + + Для Каждого ЭлементСписка Из СписокПолей Цикл + ИмяПоля = ВРег(ЭлементСписка.Представление); + + Если ИмяПоля = "ИНДЕКС" Тогда + Результат.ZIPcode = ЭлементСписка.Значение; + + ИначеЕсли ИмяПоля = "СТРАНА" Тогда + Результат.Country = ЭлементСписка.Значение; + Если ВРег(ЭлементСписка.Значение) <> НазваниеОсновнойСтраны Тогда + АдресРоссийский = Ложь; + КонецЕсли; + + ИначеЕсли ИмяПоля = "КОДСТРАНЫ" Тогда + + Результат.countryCode = ЭлементСписка.Значение; + + ИначеЕсли ИмяПоля = "КОДРЕГИОНА" Тогда + + Результат.areaCode = ЭлементСписка.Значение; + НаименованиеИТип = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(РегионКода(ЭлементСписка.Значение)); + Результат.area = НаименованиеИТип.Наименование; + Результат.areaType = СокрЛП(НаименованиеИТип.Сокращение); + + ИначеЕсли ИмяПоля = "РЕГИОН" Тогда + + НаименованиеИТип = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементСписка.Значение); + Результат.area = НаименованиеИТип.Наименование; + Результат.areaType = НаименованиеИТип.Сокращение; + + ИначеЕсли ИмяПоля = "РАЙОН" Тогда + + НаименованиеИТип = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементСписка.Значение); + Результат.district = НаименованиеИТип.Наименование; + Результат.districtType = НаименованиеИТип.Сокращение; + + ИначеЕсли ИмяПоля = "ГОРОД" Тогда + + НаименованиеИТип = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементСписка.Значение); + Результат.city = НаименованиеИТип.Наименование; + Результат.cityType = НаименованиеИТип.Сокращение; + + ИначеЕсли ИмяПоля = "НАСЕЛЕННЫЙПУНКТ" Тогда + + НаименованиеИТип = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементСписка.Значение); + Результат.locality = НаименованиеИТип.Наименование; + Результат.localityType = НаименованиеИТип.Сокращение; + + ИначеЕсли ИмяПоля = "УЛИЦА" Тогда + + НаименованиеИТип = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементСписка.Значение); + Результат.street = НаименованиеИТип.Наименование; + Результат.streetType = НаименованиеИТип.Сокращение; + + ИначеЕсли ИмяПоля = "ТИПДОМА" Тогда + + Результат.houseType = ТРег(СокрЛП(ЭлементСписка.Значение)); + + ИначеЕсли ИмяПоля = "ДОМ" Тогда + Результат.houseNumber = ЭлементСписка.Значение; + + ИначеЕсли ИмяПоля = "ТИПКОРПУСА" Тогда + Если ЭлементКорпус = Неопределено Тогда + ЭлементКорпус = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения("", ""); + Результат.buildings.Добавить(ЭлементКорпус); + КонецЕсли; + ЭлементКорпус.type = ТРег(СокрЛП(ЭлементСписка.Значение)); + ТипКорпусаНеопределен = Ложь; + + ИначеЕсли ИмяПоля = "КОРПУС" Тогда + Если ЭлементКорпус = Неопределено Тогда + ЭлементКорпус = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения("", ""); + Результат.buildings.Добавить(ЭлементКорпус); + КонецЕсли; + ЭлементКорпус.number = ЭлементСписка.Значение; + + ИначеЕсли ИмяПоля = "ТИПКВАРТИРЫ" Тогда + Если ЭлементКвартира = Неопределено Тогда + ЭлементКвартира = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения("", ""); + Результат.apartments.Добавить(ЭлементКвартира); + КонецЕсли; + ЭлементКвартира.type = ТРег(СокрЛП(ЭлементСписка.Значение)); + ТипКвартирыНеопределен = Ложь; + + ИначеЕсли ИмяПоля = "КВАРТИРА" Тогда + Если ЭлементКвартира = Неопределено Тогда + ЭлементКвартира = УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения("", ""); + Результат.apartments.Добавить(ЭлементКвартира); + КонецЕсли; + ЭлементКвартира.number = ЭлементСписка.Значение; + + ИначеЕсли ИмяПоля = "ПРЕДСТАВЛЕНИЕ" Тогда + ПолеПредставления = СокрЛП(ЭлементСписка.Значение); + Результат.value = ПолеПредставления; + + КонецЕсли; + + КонецЦикла; + + // Умолчания + Если ТипДомаНеопределен И ЭлементДом <> Неопределено Тогда + Результат.houseType = "Дом"; + КонецЕсли; + + Если ТипКорпусаНеопределен И ЭлементКорпус <> Неопределено Тогда + ЭлементКорпус.type = "Корпус"; + КонецЕсли; + + Если ТипКвартирыНеопределен И ЭлементКвартира <> Неопределено Тогда + ЭлементКвартира.type = "Квартира"; + КонецЕсли; + + ТипАдреса = ?(АдресРоссийский, РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес(), + УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес()); + Результат.addressType = ТипАдреса; + + // Представление с приоритетами. + Если Не ПустаяСтрока(Представление) Тогда + Результат.value = Представление; + ИначеЕсли ЗначениеЗаполнено(ПолеПредставления) Тогда + Результат.value = ПолеПредставления; + Иначе + Результат.value = РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(Результат, + Ложь, ТипАдреса); + КонецЕсли; + Возврат Результат; + +КонецФункции + + Функция ПодготовитьАдресДляВвода(Данные) Экспорт Если Данные.Свойство("id") И ПустаяСтрока(Данные.id) И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда @@ -1740,7 +2019,7 @@ // Читает и устанавливает район адреса. // // Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// XDTOАдрес - ОбъектXDTO - контактная информация или XDTO адреса. // НовоеЗначение - Строка - устанавливаемое значение. // // Возвращаемое значение: @@ -1817,10 +2096,10 @@ // Возвращает список всех регионов адресного классификатора. // // Возвращаемое значение: -// ТаблицаЗначений - содержит колонки: -// * КодСубъектаРФ - Число - Код региона. -// * Идентификатор - УникальныйИдентификатор - Идентификатор региона. -// * Представление - Строка - Наименование и сокращение региона. +// ТаблицаЗначений: +// * КодСубъектаРФ - Число - код региона. +// * Идентификатор - УникальныйИдентификатор - идентификатор региона. +// * Представление - Строка - наименование и сокращение региона. // * Загружено - Булево - Истина, если классификатор по данному региону сейчас загружен. // * ДатаВерсии - Дата - UTC версия загруженных данных. // Неопределено - если нет подсистемы адресного классификатора. @@ -1851,7 +2130,8 @@ // Возвращает наименование региона по его коду. // // Параметры: -// Код - Строка, Число - код региона. +// Код - Строка +// - Число - код региона. // // Возвращаемое значение: // Строка - полное наименование региона с сокращением. @@ -1889,7 +2169,6 @@ СформироватьПоляСведенийОбАдресе(ПодготовленныеПоляАдреса, Параметры); АдресаБезИдентификаторов = Новый Соответствие; - АдресаРезультат = Новый Соответствие; Для ИндексАдреса = 0 По Адреса.ВГраница() Цикл АдресСтрокой = Адреса.Получить(ИндексАдреса); @@ -1922,7 +2201,7 @@ КонецЕсли; СоответствиеУровней = СоответствиеУровней(); - СоответствиеСокращений = Новый Соответствие; + СоответствиеСокращений = Новый Соответствие; Если Параметры.ВозвращатьКоды Тогда Идентификаторы = Новый Структура(); @@ -1933,7 +2212,7 @@ АдресИзJSON = СтрокаАдреса.АдресJSON; - АдресПоПолям = Новый Структура(Новый ФиксированнаяСтруктура(ПодготовленныеПоляАдреса)); + АдресПоПолям = Новый Структура(Новый ФиксированнаяСтруктура(ПодготовленныеПоляАдреса)); // см. РаботаСАдресамиКлиентСервер.КонструкторПолейАдреса // Основные сведения АдресПоПолям.Комментарий = АдресИзJSON.Comment; @@ -1945,7 +2224,7 @@ ЭтоНациональныйАдрес = ?(СтрСравнить(АдресИзJSON.Country, РаботаСАдресамиКлиентСервер.ОсновнаяСтрана().Наименование) = 0, Истина, Ложь); АдресПоПолям.КодРегиона = ?(ЭтоНациональныйАдрес, КодРегиона(НаименованиеРегиона), "");; - + ИдентификаторАдресногоОбъекта = ""; МаксимальныйУровеньИдентификатора = 0; Для каждого ЧастьАдреса Из СоответствиеУровней Цикл @@ -2091,10 +2370,10 @@ // Возвращаемое значение: // Соответствие из Структура - где: -// * Ключ - Строка - -// * Значение - Структура - содержит поля: -// ** Имя - Строка - -// ** Уровень - Число - +// * Ключ - Строка +// * Значение - Структура: +// ** Имя - Строка +// ** Уровень - Число // Функция СоответствиеУровней() @@ -2515,11 +2794,11 @@ // Возвращает строку списка полей. // // Параметры: -// СтруктураЗначенийПолей - Структура - структура значений полей. +// СтруктураЗначенийПолей - Структура // БезПустыхПолей - Булево - необязательный флаг сохранения полей с пустыми значениями. // // Возвращаемое значение: -/// Строка - результат преобразования из структуры. +// Строка - результат преобразования из структуры. // Функция СтрокаПолей(СтруктураЗначенийПолей, БезПустыхПолей = Истина) Экспорт @@ -2797,13 +3076,13 @@ // Возвращает поля поиска в порядке предпочтения для справочника стран мира. // // Возвращаемое значение: -// Структура - где: -// * СписокПолей - Массив из Структура, поля: +// Структура: +// * СписокПолей - Массив из Структура: // ** Имя - Строка - имя реквизита поиска; // ** ШаблонПредставления - Строка - шаблон для формирования значения представления по именам реквизитов, // например: "%1.Наименование (%1.Код)". Здесь "Наименование" и "Код" - имена // реквизитов, "%1" - заполнитель для передачи псевдонима таблицы. -// * ИменаПолейДляОтбораВКлассификаторе - Массив - +// * ИменаПолейДляОтбораВКлассификаторе - Массив // Функция ПоляПоиска(ПоляОтбора) @@ -2859,37 +3138,35 @@ Возврат Результат; КонецФункции -Процедура ЗаменитьАдресНаАктуальный(ОбъектКИ, СтрокаВидаКИ, АдресПоПолям, СвойстваВида, ЕстьДействуетС) +Функция ПроверитьАдресаКлассификаторНедоступен(Знач Адреса) - НовоеПредставление = РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(АдресПоПолям, СвойстваВида.ВключатьСтрануВПредставление); - АдресПоПолям.value = НовоеПредставление; - НовыйАдресВJSON = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(АдресПоПолям); + Результат = Новый Соответствие; + Для каждого Адрес Из Адреса Цикл + Результат.Вставить(Адрес.Ключ, ОписаниеРезультатаПроверкиАдреса()); + КонецЦикла; - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Адрес ""%1"" устарел и был переименован в ""%2""'"), - СтрокаВидаКИ.Представление, НовоеПредставление); - Если ЗначениеЗаполнено(АдресПоПолям.comment) Тогда - ТекстКомментария = АдресПоПолям.comment + Символы.ПС + ТекстКомментария; - КонецЕсли; - - УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(НовыйАдресВJSON, ТекстКомментария); - - Если СвойстваВида.ХранитьИсториюИзменений И ЕстьДействуетС Тогда - УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(ОбъектКИ, НовыйАдресВJSON, СвойстваВида.Ссылка, ТекущаяДатаСеанса(), Ложь); - Иначе - - СтрокаВидаКИ.Значение = НовыйАдресВJSON; - СтрокаВидаКИ.Представление = НовоеПредставление; - СтрокаВидаКИ.ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(НовыйАдресВJSON); - - УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаВидаКИ, - АдресПоПолям, Перечисления.ТипыКонтактнойИнформации.Адрес); - - КонецЕсли; + Возврат Результат; -КонецПроцедуры +КонецФункции + +Функция ОписаниеРезультатаПроверкиАдреса() + + ОписаниеРезультатаПроверки = Новый Структура; + ОписаниеРезультатаПроверки.Вставить("АдресПроверен", Ложь); + ОписаниеРезультатаПроверки.Вставить("АдресКорректный", Ложь); + + Ошибки = Новый Массив; + ОписаниеРезультатаПроверки.Вставить("Ошибки", Ошибки); + + АктуальныеАдреса = Новый Массив; + ОписаниеРезультатаПроверки.Вставить("АктуальныеАдреса", АктуальныеАдреса); + + Возврат ОписаниеРезультатаПроверки; + +КонецФункции //////////////////////////////////////////////////////// -// Контроль ведения учета +// Контроль ведения учета // Тип здания ЛИТЕРА @@ -3025,7 +3302,7 @@ КоличествоИсправленныхАдресов = 0; ОбъектБылИсправлен = Ложь; - СвойстваВида = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформации, "ВключатьСтрануВПредставление, ХранитьИсториюИзменений, Ссылка"); + СвойстваВида = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформации, "ВключатьСтрануВПредставление, ХранитьИсториюИзменений, Ссылка"); СсылкаНаОбъект = ОписаниеОбъекта.ПроблемныйОбъект; ЕстьДействуетС = СсылкаНаОбъект.Метаданные().ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено; @@ -3037,7 +3314,7 @@ ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", СсылкаНаОбъект); БлокировкаДанных.Заблокировать(); - ОбъектКИ = СсылкаНаОбъект.ПолучитьОбъект(); + ОбъектКИ = СсылкаНаОбъект.ПолучитьОбъект(); // СправочникОбъект, ДокументОбъект Если ОбъектКИ = Неопределено Тогда ЗафиксироватьТранзакцию(); Возврат ОбъектБылИсправлен; @@ -3063,17 +3340,21 @@ Иначе АдресВJSON = СтрокаКонтактнойИнформации.Значение; КонецЕсли; + АдресПоПолям = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(АдресВJSON); Для каждого ПоляСтроений Из АдресПоПолям.buildings Цикл Если СтрСравнить(ПоляСтроений.type, "Литер") = 0 Тогда - ПоляСтроений.type = "Литера"; - АдресБылИзменен = Истина; + ПоляСтроений.type = "Литера"; + АдресБылИзменен = Истина; КоличествоИсправленныхАдресов = КоличествоИсправленныхАдресов + 1; КонецЕсли; КонецЦикла; + Если АдресБылИзменен Тогда + ЗаменитьАдресНаАктуальный(ОбъектКИ, СтрокаКонтактнойИнформации, АдресПоПолям, СвойстваВида, ЕстьДействуетС); ЗаписыватьОбъект = Истина; + КонецЕсли; КонецЦикла; @@ -3189,7 +3470,7 @@ СоответствиеАдресаИСсылки.Вставить(Счетчик, ОписаниеОбъекта); Если Счетчик = 100 Тогда - Результат = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(ПорцияАдресов); + Результат = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(ПорцияАдресов, Истина); ОбработкаУстаревшегоАдресаПослеПроверки(Результат, СоответствиеАдресаИСсылки, ПараметрыПроверки, Проверки); ПорцияАдресов = Новый Соответствие; СоответствиеАдресаИСсылки = Новый Соответствие; @@ -3201,7 +3482,7 @@ // последняя порция Если ПорцияАдресов.Количество() > 0 Тогда - Результат = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(ПорцияАдресов); + Результат = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(ПорцияАдресов, Истина); КонецЕсли; Если Результат <> Неопределено Тогда @@ -3298,7 +3579,7 @@ КонецЦикла; - РезультатАнализа = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(АдресаДляПроверки); + РезультатАнализа = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(АдресаДляПроверки, Истина); Для каждого СтрокаТаблицы Из ГруппировкаПоОбъекту Цикл СсылкаНаОбъект = СтрокаТаблицы.Ключ; @@ -3327,7 +3608,7 @@ Для каждого АдресОбъекта Из АдресаОбъекта Цикл Если СтрСравнить(АдресОбъекта.Представление, СтрокаВидаКИ.Представление) = 0 Тогда - СведенияОбАдресе = РезультатАнализа[АдресОбъекта.Счетчик]; + СведенияОбАдресе = РезультатАнализа[АдресОбъекта.Счетчик]; // см. АдресныйКлассификаторСлужебный.РезультатПроверкиАдреса Если СведенияОбАдресе.Варианты.Количество() > 0 Тогда @@ -3339,8 +3620,6 @@ КонецЕсли; - - КонецЦикла; КонецЦикла; @@ -3369,6 +3648,35 @@ КонецФункции +Процедура ЗаменитьАдресНаАктуальный(ОбъектКИ, СтрокаВидаКИ, АдресПоПолям, СвойстваВида, ЕстьДействуетС) + + НовоеПредставление = РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(АдресПоПолям, СвойстваВида.ВключатьСтрануВПредставление); + АдресПоПолям.value = НовоеПредставление; + НовыйАдресВJSON = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(АдресПоПолям); + + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Адрес ""%1"" устарел и был переименован в ""%2""'"), + СтрокаВидаКИ.Представление, НовоеПредставление); + Если ЗначениеЗаполнено(АдресПоПолям.comment) Тогда + ТекстКомментария = АдресПоПолям.comment + Символы.ПС + ТекстКомментария; + КонецЕсли; + + УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(НовыйАдресВJSON, ТекстКомментария); + + Если СвойстваВида.ХранитьИсториюИзменений И ЕстьДействуетС Тогда + УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(ОбъектКИ, НовыйАдресВJSON, СвойстваВида.Ссылка, ТекущаяДатаСеанса(), Ложь); + Иначе + + СтрокаВидаКИ.Значение = НовыйАдресВJSON; + СтрокаВидаКИ.Представление = НовоеПредставление; + СтрокаВидаКИ.ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(НовыйАдресВJSON); + + УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаВидаКИ, + АдресПоПолям, Перечисления.ТипыКонтактнойИнформации.Адрес); + + КонецЕсли; + +КонецПроцедуры + Процедура ОбработкаУстаревшегоАдресаПослеПроверки(Адреса, СоответствиеАдресаИСсылки, ПараметрыПроверки, Проверки) Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда @@ -3378,8 +3686,8 @@ МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета"); Для каждого КлючЗначение Из Адреса Цикл - ПроверенныйАдрес = КлючЗначение.Значение; - Если ПроверенныйАдрес.АдресКорректный ИЛИ КлючЗначение.Значение.Варианты.Количество() = 0 Тогда + ПроверенныйАдрес = КлючЗначение.Значение; // см. АдресныйКлассификаторСлужебный.РезультатПроверкиАдреса + Если ПроверенныйАдрес.АдресКорректный ИЛИ ПроверенныйАдрес.Варианты.Количество() = 0 Тогда Продолжить; КонецЕсли; @@ -3455,7 +3763,7 @@ СоответствиеАдресаИСсылки.Вставить(Счетчик, ОписаниеОбъекта); Если Счетчик = 100 Тогда - Результат = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(ПорцияАдресов); + Результат = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(ПорцияАдресов, Истина); ОбработкаАдресаПослеПроверки(Результат, СоответствиеАдресаИСсылки, Проверка, ПараметрыПроверки, Проверки); ПорцияАдресов = Новый Соответствие; СоответствиеАдресаИСсылки = Новый Соответствие; @@ -3467,7 +3775,7 @@ // последняя порция Если ПорцияАдресов.Количество() > 0 Тогда - Результат = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(ПорцияАдресов); + Результат = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(ПорцияАдресов, Истина); КонецЕсли; Если Результат <> Неопределено Тогда @@ -3558,4 +3866,268 @@ КонецФункции +// Автоматическая замена адресов. + +Процедура УстановитьСостояниеРегламентногоЗадания(Знач Статус) Экспорт + + Если Статус = Неопределено Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВидыКонтактнойИнформации.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ИсправлятьУстаревшиеАдреса = ИСТИНА"; + + РезультатЗапроса = Запрос.Выполнить(); + Статус = Не РезультатЗапроса.Пустой(); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ИдентификаторЗадания = РегламентныеЗаданияСервер.УникальныйИдентификатор(Метаданные.РегламентныеЗадания.ИсправлениеУстаревшихАдресов); + + ПараметрыЗадания = Новый Структура("Использование", Статус); + РегламентныеЗаданияСервер.ИзменитьЗадание(ИдентификаторЗадания , ПараметрыЗадания); + +КонецПроцедуры + +Процедура ВывитьИИсправитьУстаревшиеАдреса() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + Возврат; + КонецЕсли; + + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + + ОбъектыДляПроверки = ОбъектыСАвтоматическимИсправлениемАдресов(); + Запрос = Новый Запрос; + ШаблонЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1000 + | КонтактнаяИнформация.Ссылка КАК Ссылка, + | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, + | КонтактнаяИнформация.Значение КАК Значение, + | КонтактнаяИнформация.Вид КАК Вид, + | КонтактнаяИнформация.Представление КАК Представление + |ПОМЕСТИТЬ Адреса + |ИЗ + | &ПолноеИмяОбъектаCКонтактнойИнформацией КАК КонтактнаяИнформация + |ГДЕ + | КонтактнаяИнформация.Ссылка > &Ссылка + | И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес) + | + |УПОРЯДОЧИТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Адреса.Ссылка КАК Ссылка, + | Адреса.ЗначенияПолей КАК ЗначенияПолей, + | Адреса.Значение КАК Значение, + | Адреса.Вид КАК Вид, + | Адреса.Представление КАК Представление + |ИЗ + | Адреса КАК Адреса + |ГДЕ + | Адреса.Вид В (&Виды)"; + + ПорцияАдресов = Новый Соответствие; + СоответствиеАдресаИСсылки = Новый Соответствие; + УникальныйКлючАдреса = 1; + + Для каждого ОбъектДляПроверки Из ОбъектыДляПроверки Цикл + ОбъектыМетаданных = ОбъектДляПроверки.Ключ.Метаданные(); + ПоследнийОбъект = Неопределено; + + ПереборОбъектов = Истина; + Пока ПереборОбъектов Цикл + ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "&ПолноеИмяОбъектаCКонтактнойИнформацией", + ОбъектыМетаданных.ПолноеИмя() + ".КонтактнаяИнформация"); + Запрос.Текст = ТекстЗапроса; + + Запрос.УстановитьПараметр("Виды", ОбъектДляПроверки.Значение); + Запрос.УстановитьПараметр("Ссылка", ПоследнийОбъект); + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + ПереборОбъектов = Ложь; + Прервать; + КонецЕсли; + + СтрокаСАдресом = РезультатЗапроса.Выбрать(); + + Пока СтрокаСАдресом.Следующий() Цикл + + ПоследнийОбъект = СтрокаСАдресом.Ссылка; + + АдресВJSON = СтрокаСАдресом.Значение; + Если ПустаяСтрока(АдресВJSON) Тогда + АдресВJSON = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(СтрокаСАдресом.ЗначенияПолей, СтрокаСАдресом.Вид); + КонецЕсли; + + ПорцияАдресов.Вставить(УникальныйКлючАдреса, АдресВJSON); + ОписаниеОбъекта = ОписаниеОбъекта(); + ЗаполнитьЗначенияСвойств(ОписаниеОбъекта, СтрокаСАдресом); + + СоответствиеАдресаИСсылки.Вставить(УникальныйКлючАдреса, ОписаниеОбъекта); + + Если УникальныйКлючАдреса = 100 Тогда + Адреса = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(ПорцияАдресов, Истина); + ИсправитьУстаревшиеАдресаПослеПроверкиАвто(Адреса, СоответствиеАдресаИСсылки); + ПорцияАдресов = Новый Соответствие; + СоответствиеАдресаИСсылки = Новый Соответствие; + УникальныйКлючАдреса = 1; + Иначе + УникальныйКлючАдреса = УникальныйКлючАдреса + 1; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + + Адреса = МодульАдресныйКлассификаторСлужебный.АнализАдресовПоКлассификатору(ПорцияАдресов, Истина); + ИсправитьУстаревшиеАдресаПослеПроверкиАвто(Адреса, СоответствиеАдресаИСсылки); + +КонецПроцедуры + +Процедура ИсправитьУстаревшиеАдресаПослеПроверкиАвто(Адреса, СоответствиеАдресаИСсылки) + + ГруппировкаПоОбъекту = Новый Соответствие; + Для каждого Адрес Из Адреса Цикл + + РезультатПроверки = Адрес.Значение; // см. АдресныйКлассификаторСлужебный.РезультатПроверкиАдреса + Если РезультатПроверки.Варианты.Количество() > 0 Тогда + НовыйАдрес = СоответствиеАдресаИСсылки[Адрес.Ключ]; + + ДанныеНовогоАдреса = Новый Структура("Варианты", РезультатПроверки.Варианты); + ДанныеНовогоАдреса.Вставить("Представление", НовыйАдрес.Представление); + ДанныеНовогоАдреса.Вставить("Вид", НовыйАдрес.Вид); + + Если ГруппировкаПоОбъекту[НовыйАдрес.Ссылка] = Неопределено Тогда + ГруппировкаПоОбъекту.Вставить(НовыйАдрес.Ссылка, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДанныеНовогоАдреса)); + Иначе + ОбъектыГруппировки = ГруппировкаПоОбъекту[НовыйАдрес.Ссылка]; // Массив + ОбъектыГруппировки.Добавить(ДанныеНовогоАдреса); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если ГруппировкаПоОбъекту.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для каждого СтрокаТаблицы Из ГруппировкаПоОбъекту Цикл + + СсылкаНаОбъект = СтрокаТаблицы.Ключ; + + ТребуетсяЗаписьОбъекта = Ложь; + ПолноеИмяОбъектаCКонтактнойИнформацией = СсылкаНаОбъект.Метаданные().ПолноеИмя(); + + НачатьТранзакцию(); + + Попытка + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(ПолноеИмяОбъектаCКонтактнойИнформацией); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", СсылкаНаОбъект); + БлокировкаДанных.Заблокировать(); + + ЕстьДействуетС = СсылкаНаОбъект.Метаданные().ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено; + + ОбъектКИ = СсылкаНаОбъект.ПолучитьОбъект(); + Если ОбъектКИ = Неопределено Тогда + ЗафиксироватьТранзакцию(); + Продолжить; + КонецЕсли; + + Для каждого СтрокаВидаКИ Из СтрокаТаблицы.Значение Цикл + + СвойстваВида = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаВидаКИ.Вид, "ВключатьСтрануВПредставление, ХранитьИсториюИзменений, Ссылка"); + + Отбор = Новый Структура("Вид", СтрокаВидаКИ.Вид); + АдресаОбъекта = ОбъектКИ.КонтактнаяИнформация.НайтиСтроки(Отбор); + Для каждого АдресОбъекта Из АдресаОбъекта Цикл + Если СтрСравнить(АдресОбъекта.Представление, СтрокаВидаКИ.Представление) = 0 Тогда + + ЗаменитьАдресНаАктуальный(ОбъектКИ, АдресОбъекта, СтрокаВидаКИ.Варианты[0], СвойстваВида, ЕстьДействуетС); + ТребуетсяЗаписьОбъекта = Истина; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Если ТребуетсяЗаписьОбъекта Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ОбъектКИ); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(УправлениеКонтактнойИнформациейСлужебный.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +Функция ОбъектыСАвтоматическимИсправлениемАдресов() + + ОбъектыМетаданных = Новый Соответствие; // Соответствие из СправочникСсылка, ДокументСсылка + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Ссылка, + | ВЫБОР КОГДА ВидыКонтактнойИнформацииРодитель.ИмяПредопределенногоВида <> """""""" + | ТОГДА ВидыКонтактнойИнформацииРодитель.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформацииРодитель.ИмяПредопределенныхДанных + | КОНЕЦ КАК ИмяПредопределенногоВида + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформацииРодитель + | ПО ВидыКонтактнойИнформации.Родитель = ВидыКонтактнойИнформацииРодитель.Ссылка + |ГДЕ + | ВидыКонтактнойИнформации.ИсправлятьУстаревшиеАдреса = ИСТИНА"; + + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + + ОбъектМетаданных = Неопределено; + Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, "Справочник") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, СтрДлина("Справочник") + 1); + ОбъектМетаданных = Справочники[ИмяОбъекта].ПустаяСсылка(); + ИначеЕсли СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, "Документ") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, СтрДлина("Документ") + 1); + Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда + ОбъектМетаданных = Документы[ИмяОбъекта].ПустаяСсылка(); + КонецЕсли; + КонецЕсли; + + Если ОбъектМетаданных <> Неопределено Тогда + Если ОбъектыМетаданных[ОбъектМетаданных] = Неопределено Тогда + Виды = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ВыборкаДетальныеЗаписи.Ссылка); + ОбъектыМетаданных.Вставить(ОбъектМетаданных, Виды); + Иначе + НаборОбъектовМетаданных = ОбъектыМетаданных[ОбъектМетаданных]; // Массив + НаборОбъектовМетаданных.Добавить(ВыборкаДетальныеЗаписи.Ссылка); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат ОбъектыМетаданных; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСАдресамиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСАдресамиКлиент/Module.bsl index f031db411..066e61e25 100644 --- a/SSL/src/CommonModules/РаботаСАдресамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресамиКлиент/Module.bsl @@ -30,6 +30,24 @@ КонецПроцедуры +Процедура ОчиститьАдрес(НаселенныйПунктДетально) Экспорт + + Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл + + Если СтрСравнить(ЭлементАдреса.Ключ, "type") = 0 Тогда + Продолжить; + ИначеЕсли СтрСравнить(ЭлементАдреса.Ключ, "buildings") = 0 ИЛИ СтрСравнить(ЭлементАдреса.Ключ, "apartments") = 0 Тогда + НаселенныйПунктДетально[ЭлементАдреса.Ключ] = Новый Массив; + Иначе + НаселенныйПунктДетально[ЭлементАдреса.Ключ] = ""; + КонецЕсли; + + КонецЦикла; + + НаселенныйПунктДетально.addressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl index 58e683ffb..1555787ae 100644 --- a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl @@ -11,7 +11,7 @@ // Возвращает структуру полей адреса для программного формирования адреса. // // Возвращаемое значение: -// Структура - поля адреса: +// Структура: // * Представление - Строка - текстовое представление адреса по административно-территориальному делению. // * МуниципальноеПредставление - Строка - текстовое представление адреса по муниципальному делению. // * ТипАдреса - Строка - основной тип адреса (только для адресов РФ). @@ -44,27 +44,36 @@ // * ДополнительнаяТерриторияСокращение - Строка - сокращение дополнительной территории (устарело). // * ЭлементДополнительнойТерритории - Строка - текстовое представление элемента дополнительной территории (устарело). // * ЭлементДополнительнойТерриторииСокращение - Строка - сокращение элемента дополнительной территории (устарело). -// * Здание - Структура - структура с информацией о здании адреса. +// * Здание - Структура - структура с информацией о здании адреса: // ** ТипЗдания - Строка - тип объекта адресации адреса РФ согласно приказу Минфина России от 5.11.2015 г. N171н. // ** Номер - Строка - текстовое представление номера дома (только для адресов РФ). // * Корпуса - Массив - содержит структуры(поля структуры: ТипКорпуса, Номер) с перечнем корпусов адреса. // * Помещения - Массив - содержит структуры(поля структуры: ТипПомещения, Номер) с перечнем помещений адреса. -// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Идентификационный код последнего адресного объекта +// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - идентификационный код последнего адресного объекта // в иерархи адреса. Например, для адреса: Москва г., Дмитровское ш., д.9 это // будет идентификатор улицы. -// * ИдентификаторДома - УникальныйИдентификатор - Идентификационный код дома(строения) адресного объекта. -// * Идентификаторы - Структура - Идентификаторы адресных объектов адреса. -// ** РегионИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор региона. -// ** РайонИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор района. -// ** МуниципальныйРайонИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор муниципального района. -// ** ГородИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор города. -// ** ПоселениеИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор поселения. -// ** ВнутригородскойРайонИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор -// внутригородского района. -// ** НаселенныйПунктИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор населенного пункта. -// ** ТерриторияИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор территории. -// ** УлицаИдентификатор - УникальныйИдентификатор, Неопределено - идентификатор улица. -// * КодыКЛАДР - Структура - коды КЛАДР, если установлен параметр КодыКЛАДР. +// * ИдентификаторДома - УникальныйИдентификатор - идентификационный код дома(строения) адресного объекта. +// * Идентификаторы - Структура - идентификаторы адресных объектов адреса: +// ** РегионИдентификатор - УникальныйИдентификатор +// - Неопределено - идентификатор региона. +// ** РайонИдентификатор - УникальныйИдентификатор +// - Неопределено - идентификатор района. +// ** МуниципальныйРайонИдентификатор - УникальныйИдентификатор +// - Неопределено - идентификатор муниципального района. +// ** ГородИдентификатор - УникальныйИдентификатор +// - Неопределено - идентификатор города. +// ** ПоселениеИдентификатор - УникальныйИдентификатор +// - Неопределено - идентификатор поселения. +// ** ВнутригородскойРайонИдентификатор - УникальныйИдентификатор +// - Неопределено - идентификатор +// внутригородского района. +// ** НаселенныйПунктИдентификатор - УникальныйИдентификатор +// - Неопределено - идентификатор населенного пункта. +// ** ТерриторияИдентификатор - УникальныйИдентификатор +// - Неопределено - идентификатор территории. +// ** УлицаИдентификатор - УникальныйИдентификатор +// - Неопределено - идентификатор улица. +// * КодыКЛАДР - Структура - коды КЛАДР, если установлен параметр КодыКЛАДР: // ** Регион - Строка - код КЛАДР региона. // ** Район - Строка - код КЛАДР район. // ** Город - Строка - код КЛАДР города. @@ -84,7 +93,7 @@ // // Параметры: // ТипКИ - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. -// ФорматАдреса - Строка - Тип возвращаемой структуры в зависимости от формата адреса: "КЛАДР" или "ФИАС". +// ФорматАдреса - Строка - тип возвращаемой структуры в зависимости от формата адреса: "КЛАДР" или "ФИАС". // // Возвращаемое значение: // Структура - пустая структура контактной информации, ключи - имена полей, значения поля. @@ -129,6 +138,91 @@ #Область СлужебныеПроцедурыИФункции +// Возвращаемое значение: +// Структура: +// * КодыКЛАДР - Структура: +// ** Улица - Строка +// ** НаселенныйПункт - Строка +// ** Город - Строка +// ** Район - Строка +// ** Регион - Строка +// * ДополнительныеКоды - Структура: +// ** КодУчасткаИФНСЮЛ - Строка +// ** КодУчасткаИФНСФЛ - Строка +// ** КодИФНСЮЛ - Строка +// ** КодИФНСФЛ - Строка +// ** ОКАТО - Строка +// ** ОКТМО - Строка +// * Идентификаторы - Структура: +// ** УлицаИдентификатор - Неопределено +// ** ТерриторияИдентификатор - Неопределено +// ** НаселенныйПунктИдентификатор - Неопределено +// ** ВнутригородскойРайонИдентификатор - Неопределено +// ** ПоселениеИдентификатор - Неопределено +// ** ГородИдентификатор - Неопределено +// ** МуниципальныйРайонИдентификатор - Неопределено +// ** РайонИдентификатор - Неопределено +// ** РегионИдентификатор - Неопределено +// * ИдентификаторЗемельногоУчастка - Неопределено +// * НомерЗемельногоУчастка - Неопределено +// * ИдентификаторДома - Неопределено +// * ИдентификаторАдресногоОбъекта - Неопределено +// * Помещения - Массив +// * Корпуса - Массив +// * Здание - Структура: +// ** Номер - Строка +// ** ТипЗдания - Строка +// * ЭлементДополнительнойТерриторииСокращение - Строка +// * ЭлементДополнительнойТерритории - Строка +// * ДополнительнаяТерриторияСокращение - Строка +// * ДополнительнаяТерритория - Строка +// * УлицаСокращение - Строка +// * ТерриторияСокращение - Строка +// * НаселенныйПунктСокращение - Строка +// * ВнутригородскойРайонСокращение - Строка +// * ПоселениеСокращение - Строка +// * ГородСокращение - Строка +// * МуниципальныйРайонСокращение - Строка +// * РайонСокращение - Строка +// * ОкругСокращение - Строка +// * Округ - Строка +// * РегионСокращение - Строка +// * УлицаТипКраткий - Строка +// * УлицаТипПолный - Строка +// * Улица - Строка +// * ТерриторияТипКраткий - Строка +// * ТерриторияТипПолный - Строка +// * Территория - Строка +// * НаселенныйПунктТипКраткий - Строка +// * НаселенныйПунктТипПолный - Строка +// * НаселенныйПункт - Строка +// * ВнутригородскойРайонТипКраткий - Строка +// * ВнутригородскойРайонТипПолный - Строка +// * ВнутригородскойРайон - Строка +// * ПоселениеТипКраткий - Строка +// * ПоселениеТипПолный - Строка +// * Поселение - Строка +// * ГородТипКраткий - Строка +// * ГородТипПолный - Строка +// * Город - Строка +// * МуниципальныйРайонТипКраткий - Строка +// * МуниципальныйРайонТипПолный - Строка +// * МуниципальныйРайон - Строка +// * РайонТипКраткий - Строка +// * РайонТипПолный - Строка +// * Район - Строка +// * РегионТипКраткий - Строка +// * РегионТипПолный - Строка +// * Регион - Строка +// * КодРегиона - Строка +// * Индекс - Строка +// * КодСтраны - Строка +// * Страна - Строка +// * МуниципальноеПредставление - Строка +// * Представление - Строка +// * Комментарий - Строка +// * ТипАдреса - Строка +// Функция КонструкторПолейАдреса() Экспорт Результат = Новый Структура; @@ -250,9 +344,9 @@ // Тип контактной информации, определяющий состав полей контактной информации. // // Возвращаемое значение: -// Структура - Поля контактной информации добавленные к основным полям: +// Структура - поля контактной информации добавленные к основным полям: // Для типа контактной информации адрес: -// * ID - Строка - Идентификационный код последнего адресного объекта в иерархи адреса. +// * ID - Строка - идентификационный код последнего адресного объекта в иерархи адреса. // * AddressType - Строка - установленный пользователем тип адреса(только для адресов РФ). // Варианты: "Муниципальный", "Административно-территориальный". // * AreaCode - Строка - код региона РФ. @@ -282,13 +376,13 @@ // * HouseID - Строка - идентификатор дома. // * Buildings - Массив - содержит структуры(поля структуры: type, number) с перечнем корпусов (строений) адреса. // * Apartments - Массив - содержит структуры(поля структуры: type, number) с перечнем помещений адреса. -// * CodeKLADR - Строка - Код КЛАДР. -// * OKTMO - Строка - Код ОКТМО. -// * OKATO - Строка - Код ОКАТО. -// * IFNSFLCode - Строка - Код ИФНСФЛ. -// * IFNSULCode - Строка - Код ИФНСЮЛ. -// * IFNSFLAreaCode - Строка - Код участка ИФНСФЛ. -// * IFNSULAreaCode - Строка - Код участка ИФНСЮЛ. +// * CodeKLADR - Строка - код КЛАДР. +// * OKTMO - Строка - код ОКТМО. +// * OKATO - Строка - код ОКАТО. +// * IFNSFLCode - Строка - код ИФНСФЛ. +// * IFNSULCode - Строка - код ИФНСЮЛ. +// * IFNSFLAreaCode - Строка - код участка ИФНСФЛ. +// * IFNSULAreaCode - Строка - код участка ИФНСЮЛ. // Функция ОписаниеНовойКонтактнойИнформации(Знач ТипКонтактнойИнформации) Экспорт @@ -603,4 +697,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСБанками/Module.bsl b/SSL/src/CommonModules/РаботаСБанками/Module.bsl index 59b604a1a..110f82eef 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -13,7 +13,9 @@ // Параметры: // БИК - Строка - банковский идентификационный код. // КоррСчет - Строка - корреспондентский счет банка. -// ЗаписьОБанке - СправочникСсылка, Строка - (возвращаемый) найденный банк. +// ЗаписьОБанке - СправочникСсылка +// - Строка - (возвращаемый) найденный банк. +// Процедура ПолучитьДанныеКлассификатора(БИК = "", КоррСчет = "", ЗаписьОБанке = "") Экспорт ИмяОбработки = "ЗагрузкаКлассификатораБанков"; diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index 74174c591..5514d5a13 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -50,7 +50,7 @@ // ДатаКурса - Дата - дата, на которую получается курс. // // Возвращаемое значение: -// Структура - параметры курса: +// Структура: // * Курс - Число - курс валюты на указанную дату. // * Кратность - Число - кратность валюты на указанную дату. // * Валюта - СправочникСсылка.Валюты - ссылка валюты. @@ -307,7 +307,7 @@ // Возвращает список разрешений для загрузки курсов валют из внешних ресурсов. // // Возвращаемое значение: -// Массив - . +// Массив // Функция Разрешения() @@ -353,7 +353,7 @@ // о курсе которой необходимо получить. // // Возвращаемое значение: -// ДанныеКурса - структура, содержащая информацию о последней доступной +// ДанныеКурса - структура - содержащая информацию о последней доступной // записи курса. // Функция ЗаполнитьДанныеКурсаДляВалюты(ВыбраннаяВалюта) Экспорт diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl index 97377e130..93f253e69 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl @@ -14,18 +14,18 @@ // Параметры: // Сумма - Число - сумма, которую следует пересчитать. // -// ПараметрыТекущегоКурса - Структура - параметры курса валюты, из которой надо пересчитать. +// ПараметрыТекущегоКурса - Структура - параметры курса валюты, из которой надо пересчитать: // * Валюта - СправочникСсылка.Валюты - ссылка пересчитываемой валюты. // * Курс - Число - курс пересчитываемой валюты. // * Кратность - Число - кратность пересчитываемой валюты. // -// ПараметрыНовогоКурса - Структура - параметры курса валюты, в которую надо пересчитать. +// ПараметрыНовогоКурса - Структура - параметры курса валюты, в которую надо пересчитать: // * Валюта - СправочникСсылка.Валюты - ссылка валюты, в которую идет пересчет. // * Курс - Число - курс валюты, в которую идет пересчет. // * Кратность - Число - кратность валюты, в которую идет пересчет. // // Возвращаемое значение: -// Число - Сумма, пересчитанная по новому курсу. +// Число - сумма, пересчитанная по новому курсу. // Функция ПересчитатьПоКурсу(Сумма, ПараметрыТекущегоКурса, ПараметрыНовогоКурса) Экспорт Если ПараметрыТекущегоКурса.Валюта = ПараметрыНовогоКурса.Валюта diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютСлужебный/Module.bsl index d006b3c12..e9d9a413d 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютСлужебный/Module.bsl @@ -139,7 +139,7 @@ // и если да - установить флажок Загружать. // // Параметры: -// Дескриптор - ОбъектXDTO - Дескриптор. +// Дескриптор - ОбъектXDTO - дескриптор. // Загружать - Булево - Истина, если загружать, Ложь - иначе. // Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт @@ -164,7 +164,7 @@ // Вызывается после вызова ДоступныНовыеДанные, позволяет разобрать данные. // // Параметры: -// Дескриптор - ОбъектXDTO - Дескриптор. +// Дескриптор - ОбъектXDTO - дескриптор. // ПутьКФайлу - Строка - полное имя извлеченного файла. Файл будет автоматически удален // после завершения процедуры. Если в менеджере сервиса не был // указан файл - значение аргумента равно Неопределено. @@ -182,7 +182,7 @@ // Вызывается при отмене обработки данных в случае сбоя. // // Параметры: -// Дескриптор - ОбъектXDTO - Дескриптор. +// Дескриптор - ОбъектXDTO - дескриптор. // Процедура ОбработкаДанныхОтменена(Знач Дескриптор) Экспорт @@ -225,7 +225,7 @@ // Регистрирует обработчики поставляемых данных за день и за все время. // // Параметры: -// Обработчики - ТаблицаЗначений - таблица для добавления обработчиков. Содержит колонки. +// Обработчики - ТаблицаЗначений - таблица для добавления обработчиков. Содержит колонки: // * ВидДанных - Строка - код вида данных, обрабатываемый обработчиком. // * КодОбработчика - Строка - будет использоваться при восстановлении обработки данных после сбоя. // * Обработчик - ОбщийМодуль - модуль, содержащий экспортные процедуры: @@ -253,7 +253,7 @@ // Записывает файл в формате поставляемых данных. // // Параметры: -// ТаблицаКурсов - ТаблицаЗначений с колонками Код, Дата, Кратность, Курс. +// ТаблицаКурсов - ТаблицаЗначений - с колонками Код, Дата, Кратность, Курс. // Файл - Строка или ЗаписьТекста. // Процедура ЗаписатьТаблицуКурсов(Знач ТаблицаКурсов, Знач Файл) @@ -287,11 +287,11 @@ // Читает файл в формате поставляемых данных. // // Параметры: -// ПутьКФайлу - Строка, имя файла. -// ИскатьДубликаты - Булево, сворачивает записи с одинаковой датой. +// ПутьКФайлу - Строка - имя файла. +// ИскатьДубликаты - Булево - сворачивает записи с одинаковой датой. // // Возвращаемое значение -// ТаблицаЗначений с колонками Код, Дата, Кратность, Курс. +// ТаблицаЗначений - с колонками Код, Дата, Кратность, Курс. // Функция ПрочитатьТаблицуКурсов(Знач ПутьКФайлу, Знач ИскатьДубликаты = Ложь) @@ -335,7 +335,7 @@ // // Параметры: // Дескриптор - ОбъектXDTO Descriptor. -// ПутьКФайлу - строка. Полное имя извлеченного файла. +// ПутьКФайлу - строка - полное имя извлеченного файла. // Процедура ОбработатьПоставляемыеКурсы(Знач Дескриптор, Знач ПутьКФайлу) @@ -379,7 +379,7 @@ // // Параметры: // Дескриптор - ОбъектXDTO Descriptor. -// ПутьКФайлу - строка. Полное имя извлеченного файла. +// ПутьКФайлу - строка - полное имя извлеченного файла. // Процедура ОбработатьПоставляемыеКурсыЗаДень(Знач Дескриптор, Знач ПутьКФайлу) @@ -460,11 +460,11 @@ // Копирует курсы во все ОД // // Параметры: -// ДатаКурсов - Дата или Неопределено. Курсы добавляются за указанную дату либо за все время. +// ДатаКурсов - Дата или Неопределено - курсы добавляются за указанную дату либо за все время. // ТаблицаКурсов - ТаблицаЗначений с курсами. -// ОбластиДляОбновления - Массив со списком кодов областей. +// ОбластиДляОбновления - массив со списком кодов областей. // ИдентификаторФайла - УникальныйИдентификатор файла обрабатываемых курсов. -// КодОбработчика - Строка, код обработчика. +// КодОбработчика - Строка - код обработчика. // Процедура РаспространитьКурсыПоОД(Знач ДатаКурсов, Знач ТаблицаКурсов, Знач ОбластиДляОбновления, Знач ИдентификаторФайла, Знач КодОбработчика) diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl index d206c244f..bbc88acaa 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl @@ -42,7 +42,7 @@ // ТекстОшибки - Строка - сообщение об ошибке в случае, когда удалось отправить не все письма. // // Возвращаемое значение: -// Соответствие - отправленные письма: +// Соответствие: // * Ключ - ИнтернетПочтовоеСообщение - отправляемое письмо; // * Значение - Структура - результат отправки письма: // ** ОшибочныеПолучатели - Соответствие - адреса получателей с ошибками: @@ -64,7 +64,8 @@ // учетную запись электронной почты. // ПараметрыПисьма - Структура - содержит всю необходимую информацию о письме: // -// * Кому - Массив, Строка - интернет адреса получателей письма. +// * Кому - Массив +// - Строка - интернет адреса получателей письма. // - Массив - коллекция структур адресов: // * Адрес - Строка - почтовый адрес (должно быть обязательно заполнено). // * Представление - Строка - имя адресата. @@ -74,13 +75,15 @@ // ** Адрес - Строка - почтовый адрес получателя сообщения. // ** Представление - Строка - представление адресата. // -// * Копии - Массив, Строка - адреса получателей копий письма. См. описание поля Кому. +// * Копии - Массив +// - Строка - адреса получателей копий письма. См. описание поля Кому. // -// * СкрытыеКопии - Массив, Строка - адреса получателей скрытых копий письма. См. описание поля Кому. +// * СкрытыеКопии - Массив +// - Строка - адреса получателей скрытых копий письма. См. описание поля Кому. // // * Тема - Строка - (обязательный) тема почтового сообщения. // * Тело - Строка - (обязательный) текст почтового сообщения (простой текст в кодировке win-1251). -// * Важность - ВажностьИнтернетПочтовогоСообщения - +// * Важность - ВажностьИнтернетПочтовогоСообщения // // * Вложения - Массив - файлы, которые необходимо приложить к письму (описания в виде структур): // ** Представление - Строка - имя файла вложения; @@ -88,19 +91,22 @@ // ** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма). // ** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма. // -// * АдресОтвета - Соответствие, Строка - см. описание поля Кому. +// * АдресОтвета - Соответствие +// - Строка - см. описание поля Кому. // * ИдентификаторыОснований - Строка - идентификаторы оснований данного письма. // * ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке. // * УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке. // * УведомитьОПрочтении - Булево - необходимость запроса уведомления о прочтении. -// * ТипТекста - Строка, ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем, ТипТекстаПочтовогоСообщения - определяет тип +// * ТипТекста - Строка +// - ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем +// - ТипТекстаПочтовогоСообщения - определяет тип // переданного теста допустимые значения: // HTML/ТипыТекстовЭлектронныхПисем.HTML - текст почтового сообщения в формате HTML. // ПростойТекст/ТипыТекстовЭлектронныхПисем.ПростойТекст - простой текст почтового сообщения. -// Отображается "как есть" (значение по -// умолчанию). +// Отображается "как есть" (значение по +// умолчанию). // РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате -// Rich Text. +// Rich Text. // // Возвращаемое значение: // ИнтернетПочтовоеСообщение - подготовленное письмо. @@ -157,7 +163,7 @@ // Параметры: // УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись электронной почты. // -// ПараметрыЗагрузки - Структура - со свойствами: +// ПараметрыЗагрузки - Структура: // * Колонки - Массив - массив строк названий колонок // названия колонок должны соответствовать полям объекта // ИнтернетПочтовоеСообщение. @@ -171,23 +177,24 @@ // // Возвращаемое значение: // ТаблицаЗначений, Булево - список почтовых сообщений с колонками: -// * Важность - ВажностьИнтернетПочтовогоСообщения - +// * Важность - ВажностьИнтернетПочтовогоСообщения // * Вложения - ИнтернетПочтовыеВложения - в случае если вложениями являются другие почтовые сообщения, // они сами не возвращаются, но возвращаются их вложения - двоичные // данные и их тексты в виде двоичных данных, рекурсивно. -// * ДатаОтправления - Дата - -// * ДатаПолучения - Дата - -// * Заголовок - Строка - -// * ИмяОтправителя - Строка - -// * Идентификатор - Массив из Строка - -// * Копии - ИнтернетПочтовыеАдреса - -// * ОбратныйАдрес - ИнтернетПочтовыеАдреса - -// * Отправитель - Строка, ИнтернетПочтовыйАдрес - -// * Получатели - ИнтернетПочтовыеАдреса - -// * Размер - Число - -// * Тексты - ИнтернетТекстыПочтовогоСообщения - -// * Кодировка - Строка - -// * СпособКодированияНеASCIIСимволов - СпособКодированияНеASCIIСимволовИнтернетПочтовогоСообщения - +// * ДатаОтправления - Дата +// * ДатаПолучения - Дата +// * Заголовок - Строка +// * ИмяОтправителя - Строка +// * Идентификатор - Массив из Строка +// * Копии - ИнтернетПочтовыеАдреса +// * ОбратныйАдрес - ИнтернетПочтовыеАдреса +// * Отправитель - Строка +// - ИнтернетПочтовыйАдрес +// * Получатели - ИнтернетПочтовыеАдреса +// * Размер - Число +// * Тексты - ИнтернетТекстыПочтовогоСообщения +// * Кодировка - Строка +// * СпособКодированияНеASCIIСимволов - СпособКодированияНеASCIIСимволовИнтернетПочтовогоСообщения // * Частичное - Булево - заполняется если статус Истина. В режиме тестирования возвращается Истина. // Функция ЗагрузитьПочтовыеСообщения(Знач УчетнаяЗапись, Знач ПараметрыЗагрузки = Неопределено) Экспорт @@ -421,7 +428,8 @@ // учетную запись электронной почты. // ПараметрыОтправки - Структура - содержит всю необходимую информацию о письме: // -// * Кому - Массив, Строка - интернет адреса получателей письма. +// * Кому - Массив +// - Строка - интернет адреса получателей письма. // - Массив - коллекция структур адресов: // * Адрес - Строка - почтовый адрес (должно быть обязательно заполнено). // * Представление - Строка - имя адресата. @@ -431,13 +439,15 @@ // ** Адрес - Строка - почтовый адрес получателя сообщения. // ** Представление - Строка - представление адресата. // -// * Копии - Массив, Строка - адреса получателей копий письма. См. описание поля Кому. +// * Копии - Массив +// - Строка - адреса получателей копий письма. См. описание поля Кому. // -// * СкрытыеКопии - Массив, Строка - адреса получателей скрытых копий письма. См. описание поля Кому. +// * СкрытыеКопии - Массив +// - Строка - адреса получателей скрытых копий письма. См. описание поля Кому. // // * Тема - Строка - (обязательный) тема почтового сообщения. // * Тело - Строка - (обязательный) текст почтового сообщения (простой текст в кодировке win-1251). -// * Важность - ВажностьИнтернетПочтовогоСообщения - +// * Важность - ВажностьИнтернетПочтовогоСообщения // // * Вложения - Массив - файлы, которые необходимо приложить к письму (описания в виде структур): // ** Представление - Строка - имя файла вложения; @@ -445,19 +455,22 @@ // ** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма). // ** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма. // -// * АдресОтвета - Соответствие, Строка - см. описание поля Кому. +// * АдресОтвета - Соответствие +// - Строка - см. описание поля Кому. // * ИдентификаторыОснований - Строка - идентификаторы оснований данного письма. // * ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке. // * УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке. // * УведомитьОПрочтении - Булево - необходимость запроса уведомления о прочтении. -// * ТипТекста - Строка, ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем, ТипТекстаПочтовогоСообщения - определяет тип +// * ТипТекста - Строка +// - ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем +// - ТипТекстаПочтовогоСообщения - определяет тип // переданного теста допустимые значения: // HTML/ТипыТекстовЭлектронныхПисем.HTML - текст почтового сообщения в формате HTML. // ПростойТекст/ТипыТекстовЭлектронныхПисем.ПростойТекст - простой текст почтового сообщения. -// Отображается "как есть" (значение по -// умолчанию). +// Отображается "как есть" (значение по +// умолчанию). // РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате -// Rich Text. +// Rich Text. // * Соединение - ИнтернетПочта - существующее соединение с почтовым сервером. Если не указано, то создается новое. // * ПротоколПочты - Строка - если указано значение "IMAP", то письмо будет передано по протоколу IMAP, если по // указано значение "Все", то по протоколу SMTP и по протоколу IMAP, если ничего не указано diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl index e80a4288a..d828fca1c 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl @@ -11,7 +11,7 @@ // Открывает форму создания нового письма. // // Параметры: -// ПараметрыОтправкиПисьма - Структура - см. РаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма. +// ПараметрыОтправкиПисьма - см. РаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма. // ОповещениеОЗакрытииФормы - ОписаниеОповещения - процедура, в которую необходимо передать управление после закрытия // формы отправки письма. // @@ -55,7 +55,7 @@ // // * Получатель - Строка - список адресов в формате: // [ПредставлениеПолучателя1] <Адрес1>; [[ПредставлениеПолучателя2] <Адрес2>;...] -// - СписокЗначений - список адресов. +// - СписокЗначений: // ** Представление - Строка - представление получателя, // ** Значение - Строка - почтовый адрес. // - Массив - массив структур, описывающий получателей: @@ -63,8 +63,10 @@ // ** Представление - Строка - представление адресата; // ** ИсточникКонтактнойИнформации - СправочникСсылка - владелец контактной информации. // -// * Копии - СписокЗначений, Строка - см. описание поля Получатель. -// * СкрытыеКопии - СписокЗначений, Строка - см. описание поля Получатель. +// * Копии - СписокЗначений +// - Строка - см. описание поля Получатель. +// * СкрытыеКопии - СписокЗначений +// - Строка - см. описание поля Получатель. // * Тема - Строка - тема письма. // * Текст - Строка - тело письма. // @@ -76,6 +78,7 @@ // // * УдалятьФайлыПослеОтправки - Булево - удалять временные файлы после отправки сообщения. // * Предмет - ЛюбаяСсылка - предмет письма. +// Функция ПараметрыОтправкиПисьма() Экспорт ПараметрыПисьма = Новый Структура; @@ -101,6 +104,7 @@ // ОбработчикРезультата - ОписаниеОповещение - процедура, в которую необходимо передать выполнение кода после проверки. // В качестве результата возвращается Истина, если есть доступная учетная // запись для отправки почты. Иначе возвращается Ложь. +// Процедура ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОбработчикРезультата) Экспорт Если РаботаСПочтовымиСообщениямиВызовСервера.ЕстьДоступныеУчетныеЗаписиДляОтправки() Тогда ВыполнитьОбработкуОповещения(ОбработчикРезультата, Истина); @@ -109,7 +113,7 @@ ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ПомощникНастройкиУчетнойЗаписи", Новый Структура("КонтекстныйРежим", Истина), , , , , ОбработчикРезультата); Иначе - ТекстСообщения = НСтр("ru = 'Для отправки письма требуется настройка учетной записи электронной почты. + ТекстСообщения = НСтр("ru = 'Для отправки письма требуется настройка почты. |Обратитесь к администратору.'"); ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочтыЗавершение", ЭтотОбъект, ОбработчикРезультата); ПоказатьПредупреждение(ОписаниеОповещения, ТекстСообщения); diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl index 5bbac0ebc..cf006e36f 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl @@ -17,6 +17,7 @@ // отправки письма. // СтандартнаяОбработка - Булево - признак продолжения открытия формы нового письма после выхода из этой // процедуры. Если установить Ложь, форма письма открыта не будет. +// Процедура ПередОткрытиемФормыОтправкиПисьма(ПараметрыОтправки, ОбработчикЗавершения, СтандартнаяОбработка) Экспорт КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl index d5731714c..d90d433e4 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl @@ -11,7 +11,7 @@ // Переопределяет настройки подсистемы. // // Параметры: -// Настройки - Структура - настройки подсистемы: +// Настройки - Структура: // * ДоступноПолучениеПисем - Булево - показывать настройки получения писем в учетных записях. // Значение по умолчанию: для базовых версий конфигурации - Ложь, // для остальных - Истина. @@ -39,14 +39,16 @@ // // - Строка - интернет-адреса получателей письма, разделитель - ";". // -// * СкрытыеКопии - Массив, Строка - см. описание поля Копии. +// * СкрытыеКопии - Массив +// - Строка - см. описание поля Копии. // // * Тема - Строка - (обязательный) тема почтового сообщения. // * Тело - Строка - (обязательный) текст почтового сообщения (простой текст в кодировке win-1251). // * Важность - ВажностьИнтернетПочтовогоСообщения. -// * Вложения - Соответствие - список вложений, где: +// * Вложения - Соответствие: // * ключ - Строка - наименование вложения -// * значение - ДвоичныеДанные, АдресВоВременномХранилище - данные вложения; +// * значение - ДвоичныеДанные +// - АдресВоВременномХранилище - данные вложения; // - Структура - содержащая следующие свойства: // * ДвоичныеДанные - ДвоичныеДанные - двоичные данные вложения. // * Идентификатор - Строка - идентификатор вложения, используется для хранения картинок, @@ -58,14 +60,16 @@ // * ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке. // * УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке. // * УведомитьОПрочтении - Булево - необходимость запроса уведомления о прочтении. -// * ТипТекста - Строка, Перечисление.ТипыТекстовЭлектронныхПисем, ТипТекстаПочтовогоСообщения - определяет тип +// * ТипТекста - Строка +// - Перечисление.ТипыТекстовЭлектронныхПисем +// - ТипТекстаПочтовогоСообщения - определяет тип // переданного теста допустимые значения: // HTML/ТипыТекстовЭлектронныхПисем.HTML - текст почтового сообщения в формате HTML; // ПростойТекст/ТипыТекстовЭлектронныхПисем.ПростойТекст - простой текст почтового сообщения. -// Отображается "как есть" (значение по -// умолчанию); +// Отображается "как есть" (значение по +// умолчанию); // РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате -// Rich Text. +// Rich Text. // Процедура ПослеОтправкиПисьма(ПараметрыПисьма) Экспорт diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl index 3aacb894a..6ac686687 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl @@ -33,9 +33,10 @@ | УчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты КАК ПортSMTP, | УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты КАК ИспользоватьSSLSMTP, | УчетныеЗаписиЭлектроннойПочты.ТребуетсяВходНаСерверПередОтправкой КАК POP3ПередSMTP, - | УчетныеЗаписиЭлектроннойПочты.ПользовательSMTP КАК ПользовательSMTP, + | УчетныеЗаписиЭлектроннойПочты.Пользователь КАК ПользовательSMTP, | УчетныеЗаписиЭлектроннойПочты.ВремяОжидания КАК Таймаут, - | УчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты КАК Протокол + | УчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты КАК Протокол, + | УчетныеЗаписиЭлектроннойПочты.ПриОтправкеПисемТребуетсяАвторизация КАК ПриОтправкеПисемТребуетсяАвторизация |ИЗ | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты |ГДЕ @@ -49,7 +50,7 @@ Если Выборка.Следующий() Тогда СписокСвойствIMAP = "АдресСервераIMAP,ПортIMAP,ИспользоватьSSLIMAP,ПользовательIMAP"; СписокСвойствPOP3 = "АдресСервераPOP3,ПортPOP3,ИспользоватьSSLPOP3,Пользователь"; - СписокСвойствSMTP = "АдресСервераSMTP,ПортSMTP,ИспользоватьSSLSMTP,ПользовательSMTP"; + СписокСвойствSMTP = "АдресСервераSMTP,ПортSMTP,ИспользоватьSSLSMTP"; УстановитьПривилегированныйРежим(Истина); Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись, "Пароль,ПарольSMTP"); @@ -66,6 +67,9 @@ КонецЕсли; Иначе ТребуемыеСвойства = СписокСвойствSMTP; + Если Выборка.ПриОтправкеПисемТребуетсяАвторизация И Не Выборка.POP3ПередSMTP Тогда + ТребуемыеСвойства = ТребуемыеСвойства + ",ПользовательSMTP"; + КонецЕсли; Результат.ПарольSMTP = Пароли.ПарольSMTP; Если Выборка.Протокол <> "IMAP" И Выборка.POP3ПередSMTP Тогда ТребуемыеСвойства = ТребуемыеСвойства + ",POP3ПередSMTP," + СписокСвойствPOP3; @@ -193,7 +197,10 @@ ЗапросыРазрешений.Добавить(МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов( ОписаниеРазрешений.Значение, ОписаниеРазрешений.Ключ)); КонецЦикла; - + + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения())); + КонецПроцедуры // См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного. @@ -220,25 +227,30 @@ // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.3.40"; + Обработчик.Процедура = "Справочники.УчетныеЗаписиЭлектроннойПочты.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("d57f7a36-46ca-4a52-baab-db960e3d376d"); + Обработчик.Комментарий = НСтр("ru = 'Обновляет сведения об учетных записях электронной почты. + |До завершения обработки список учетных записей электронной почты может быть неполным.'"); + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.УчетныеЗаписиЭлектроннойПочты.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + + ЧитаемыеОбъекты = Новый Массив; + ЧитаемыеОбъекты.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты"); + + ИзменяемыеОбъекты = Новый Массив; + ИзменяемыеОбъекты.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.1.1"; - Обработчик.Процедура = "Справочники.УчетныеЗаписиЭлектроннойПочты.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Идентификатор = Новый УникальныйИдентификатор("d57f7a36-46ca-4a52-baab-db960e3d376d"); - Обработчик.Комментарий = НСтр("ru = 'Обновляет сведения о персональных учетных записях электронной почты. - |До завершения обработки список персональных учетных записей электронной почты может быть неполным.'"); - Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.УчетныеЗаписиЭлектроннойПочты.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; - Обработчик.ИзменяемыеОбъекты = "Справочник.УчетныеЗаписиЭлектроннойПочты"; - - ЧитаемыеОбъекты = Новый Массив; - ЧитаемыеОбъекты.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты"); МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); МодульВзаимодействия.ПриПолученииЧитаемыхОбъектовОбработчикаОбновленияУчетныхЗаписейЭлектроннойПочты(ЧитаемыеОбъекты); - - Обработчик.ЧитаемыеОбъекты = СтрСоединить(ЧитаемыеОбъекты, ","); + МодульВзаимодействия.ПриПолученииИзменяемыхОбъектовОбработчикаОбновленияУчетныхЗаписейЭлектроннойПочты(ИзменяемыеОбъекты); КонецЕсли; + + Обработчик.ЧитаемыеОбъекты = СтрСоединить(ЧитаемыеОбъекты, ","); + Обработчик.ИзменяемыеОбъекты = СтрСоединить(ИзменяемыеОбъекты, ","); КонецПроцедуры @@ -783,9 +795,8 @@ ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива); КонецЕсли; - // подготовка временной папки - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяВременнойПапки); + ИмяВременногоКаталога = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ИмяВременногоКаталога); ВыбранныеФорматыСохранения = НастройкиСохранения.ФорматыСохранения; ТаблицаФорматов = СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента(); @@ -828,7 +839,7 @@ ИмяФайла = СтроковыеФункции.СтрокаЛатиницей(ИмяФайла); КонецЕсли; - ПолноеИмяФайла = УникальноеИмяФайла(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + ИмяФайла); + ПолноеИмяФайла = УникальноеИмяФайла(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + ИмяФайла); ТабличныйДокумент.Записать(ПолноеИмяФайла, ТипФайла); Если ТипФайла = ТипФайлаТабличногоДокумента.HTML Тогда @@ -870,7 +881,7 @@ Вложения.Добавить(ОписаниеФайла); КонецЦикла; - УдалитьФайлы(ИмяВременнойПапки); + УдалитьФайлы(ИмяВременногоКаталога); Если ЗначениеЗаполнено(ИмяАрхива) Тогда УдалитьФайлы(ИмяАрхива); КонецЕсли; @@ -890,12 +901,12 @@ Файл = Новый Файл(ИмяФайла); ИмяБезРасширения = Файл.ИмяБезРасширения; Расширение = Файл.Расширение; - Папка = Файл.Путь; + ИмяКаталога = Файл.Путь; Счетчик = 1; Пока Файл.Существует() Цикл Счетчик = Счетчик + 1; - Файл = Новый Файл(Папка + ИмяБезРасширения + " (" + Счетчик + ")" + Расширение); + Файл = Новый Файл(ИмяКаталога + ИмяБезРасширения + " (" + Счетчик + ")" + Расширение); КонецЦикла; Возврат Файл.ПолноеИмя; @@ -910,17 +921,17 @@ ФайлHTML = Новый Файл(ИмяФайлаHTML); - ИмяПапкиКартинок = ФайлHTML.ИмяБезРасширения + "_files"; - ПутьКПапкеКартинок = СтрЗаменить(ФайлHTML.ПолноеИмя, ФайлHTML.Имя, ИмяПапкиКартинок); + ИмяКаталогаКартинок = ФайлHTML.ИмяБезРасширения + "_files"; + ПутьКаталогаКартинок = СтрЗаменить(ФайлHTML.ПолноеИмя, ФайлHTML.Имя, ИмяКаталогаКартинок); - // Ожидается, что в папке будут только картинки. - ФайлыКартинок = НайтиФайлы(ПутьКПапкеКартинок, "*"); + // Ожидается, что в каталоге будут только картинки. + ФайлыКартинок = НайтиФайлы(ПутьКаталогаКартинок, "*"); Для Каждого ФайлКартинки Из ФайлыКартинок Цикл КартинкаТекстом = Base64Строка(Новый ДвоичныеДанные(ФайлКартинки.ПолноеИмя)); КартинкаТекстом = "data:image/" + Сред(ФайлКартинки.Расширение,2) + ";base64," + Символы.ПС + КартинкаТекстом; - ТекстHTML = СтрЗаменить(ТекстHTML, ИмяПапкиКартинок + "\" + ФайлКартинки.Имя, КартинкаТекстом); + ТекстHTML = СтрЗаменить(ТекстHTML, ИмяКаталогаКартинок + "\" + ФайлКартинки.Имя, КартинкаТекстом); КонецЦикла; ТекстовыйДокумент.УстановитьТекст(ТекстHTML); @@ -1047,6 +1058,7 @@ // Преобразует к единому виду коллекцию переданных вложений. // Требуется для обхода случаев, когда исходная форма не заботится о времени жизни временного хранилища, в // которое помещены вложения. Вложения перекладываются во временное хранилище "на время сеанса". +// Функция ОписанияВложений(КоллекцияВложений) Экспорт Если ТипЗнч(КоллекцияВложений) <> Тип("СписокЗначений") И ТипЗнч(КоллекцияВложений) <> Тип("Массив") Тогда Возврат КоллекцияВложений; @@ -1512,6 +1524,28 @@ КонецФункции +// Возвращает список разрешений для автоматического поиска настроек почты. +// +// Возвращаемое значение: +// Массив +// +Функция Разрешения() Экспорт + + Протокол = "HTTPS"; + Адрес = "downloads.v8.1c.ru"; + Порт = Неопределено; + Описание = НСтр("ru = 'Поиск настроек почты.'"); + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + + Разрешения = Новый Массив; + Разрешения.Добавить( + МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание)); + + Возврат Разрешения; + +КонецФункции + Функция ПолучательПисьмаОтклоненСервером(Знач ТекстОшибки) ТекстОшибки = НРег(ТекстОшибки); diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl index fe765c85e..4c101567b 100644 --- a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -74,8 +74,7 @@ ФайлОбъект.ВладелецФайла); ВызватьИсключение РаботаСФайламиСлужебный.ОшибкаФайлНеНайденВХранилищеФайлов( - ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение, - Ложь, + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ФайлОбъект.Наименование, ФайлОбъект.Расширение), Ложь, ПредставлениеВладельцаФайла); Иначе Возврат РаботаСФайламиВТомахСлужебный.ДанныеФайла(ПрисоединенныйФайл, ВызыватьИсключение); @@ -83,7 +82,7 @@ КонецФункции -// Возвращает структурированную информацию о файле. Используется в различных командах работы с файлами +// Возвращает сведения о файле. Используется в различных командах работы с файлами // и как значение параметра ДанныеФайла в других процедурах и функциях. // // Параметры: @@ -98,6 +97,7 @@ // ДополнительныеПараметры принимает значение Ложь, возвращаемое значение - Неопределено. Если файл // не найден или отсутствует часть обязательной информации о файле и ВызыватьИсключение отсутствует // или принимает значение Истина, вызывает исключение. Свойства структуры: +// * Ссылка - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлом. // * СсылкаНаДвоичныеДанныеФайла - Строка - адрес во временном хранилище, по которому помещены данные. // * ОтносительныйПуть - Строка - относительный путь файла. // * ДатаМодификацииУниверсальная - Дата - дата изменения фала. @@ -105,8 +105,9 @@ // * Наименование - Строка - наименование файла в справочнике хранения файлов. // * Расширение - Строка - расширение файла без точки. // * Размер - Число - размер файла. -// * Редактирует - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, -// Неопределено - ссылка на пользователя, занявшего файл. +// * Редактирует - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// - Неопределено - ссылка на пользователя, занявшего файл. // * ПодписанЭП - Булево - признак того, что файл подписан. // * Зашифрован - Булево - признак того, что файл зашифрован. // * Версия - ОпределяемыйТип.ПрисоединенныйФайл - если справочник файлов поддерживает создание @@ -115,8 +116,9 @@ // * НомерВерсии - Число - если справочник файлов поддерживает создание версий, содержит номер // текущей версии файла, иначе - 0. // * Том - СправочникСсылка.ТомаХраненияФайлов - том хранения файла. -// * Автор - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов, СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи - автор файла. +// * Автор - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов +// - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - автор файла. // * СтатусИзвлеченияТекста - ПеречислениеСсылка.СтатусыИзвлеченияТекстаФайлов - статус извлечения текста // из файла. // * ПолноеНаименованиеВерсии - Строка - если справочник файлов поддерживает создание версий, содержит полное @@ -199,7 +201,7 @@ Результат.Вставить("СсылкаНаДвоичныеДанныеФайла", СсылкаНаДвоичныеДанныеФайла); Результат.Вставить("ОтносительныйПуть", ПолучитьИдентификаторОбъекта(ФайлОбъект.ВладелецФайла) + "\"); Результат.Вставить("ДатаМодификацииУниверсальная", ФайлОбъект.ДатаМодификацииУниверсальная); - Результат.Вставить("ИмяФайла", ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение); + Результат.Вставить("ИмяФайла", ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ФайлОбъект.Наименование, ФайлОбъект.Расширение)); Результат.Вставить("Наименование", ФайлОбъект.Наименование); Результат.Вставить("Расширение", ФайлОбъект.Расширение); Результат.Вставить("Размер", ФайлОбъект.Размер); @@ -233,9 +235,8 @@ КонецЕсли; КонецЕсли; - Кодировка = ?(ИспользуетсяВерсионированиеФайлов, КодировкаФайла(ПрисоединенныйФайл.ТекущаяВерсия, ФайлОбъект.Расширение), - КодировкаФайла(ПрисоединенныйФайл, ФайлОбъект.Расширение)); - Результат.Вставить("Кодировка", Кодировка); + Файл = ?(ИспользуетсяВерсионированиеФайлов, ПрисоединенныйФайл.ТекущаяВерсия, ПрисоединенныйФайл); + Результат.Вставить("Кодировка", РегистрыСведений.КодировкиФайлов.ОпределитьКодировкуФайла(Файл, ФайлОбъект.Расширение)); Результат.Вставить("Служебный", Ложь); Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ФайлОбъект, "Служебный") Тогда @@ -250,9 +251,7 @@ // // Параметры: // ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - ссылка на объект-владелец файлов. -// Файлы - Массив - массив в который будут добавлены ссылки на файлы объекта: -// * ОпределяемыйТип.ПрисоединенныйФайл - (возвращаемое значение) -// ссылка на элемента справочника с файлом. +// Файлы - Массив из ОпределяемыйТип.ПрисоединенныйФайл - массив в который будут добавлены ссылки на файлы объекта. // Процедура ЗаполнитьПрисоединенныеФайлыКОбъекту(Знач ВладелецФайла, Знач Файлы) Экспорт @@ -277,7 +276,7 @@ // В частности, ссылка используется при добавлении файла в функции ДобавитьФайл. // // Параметры: -// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, к которому +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - объект, к которому // требуется прикрепить добавляемый файл. // // ИмяСправочника - Неопределено - вычислить справочник по владельцу (допустимо, @@ -330,7 +329,7 @@ // Возвращает имя формы объекта присоединенных файлов по владельцу. // // Параметры: -// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, к которому +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - объект, к которому // требуется прикрепить добавляемый файл. // // Возвращаемое значение: @@ -361,7 +360,7 @@ // Определяет возможность прикрепления добавляемого файла к владельцу файлов. // // Параметры: -// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, к которому +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - объект, к которому // требуется прикрепить добавляемый файл. // ИмяСправочника - Строка - если указано, то выполняется проверка добавления в определенное хранилище файлов. // Иначе имя справочника будет определено по владельцу. @@ -389,7 +388,7 @@ // Если справочник файлов поддерживает хранение версий, то будет создана первая версия файла. // // Параметры: -// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, к которому +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - объект, к которому // требуется прикрепить добавляемый файл. // ПутьКФайлуНаДиске - Строка - полный путь к файлу на диске, включающий имя и расширение файла. // Файл должен находиться на сервере. @@ -477,18 +476,20 @@ // Для использования в РаботаСФайлами.ДобавитьВФайл. // // Параметры: -// ДополнительныеРеквизиты - Строка, Массив - имена реквизитов присоединенного файла, перечисленные через +// ДополнительныеРеквизиты - Строка +// - Массив - имена реквизитов присоединенного файла, перечисленные через // запятую, или массив имен реквизитов. // - Структура - коллекция дополнительных реквизитов. Стандартные свойства будут // вставлены в коллекцию в случае отсутствия. // // Возвращаемое значение: -// Структура - со свойствами: -// * Автор - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, -// СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов - пользователь или +// Структура: +// * Автор - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов - пользователь или // учетная запись синхронизации файлов, от имени которого создается файл. // Значение по умолчанию - Неопределено. -// * ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, к которому +// * ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - объект, к которому // требуется прикрепить добавляемый файл. // Значение по умолчанию - Неопределено. // * ИмяБезРасширения - Строка - имя файла без расширения. @@ -521,14 +522,11 @@ // АдресФайлаВоВременномХранилище - Строка - адрес, указывающий на двоичные данные во временном хранилище. // АдресВременногоХранилищаТекста - Строка - адрес, указывающий на извлеченный текст из файла во временном хранилище. // Описание - Строка - текстовое описание файла. -// НоваяСсылкаНаФайл - Неопределено - создать новую ссылку на файл в стандартном справочнике -// или в нестандартном, но единственном справочнике. Когда у владельца файла несколько -// справочников, требуется обязательно передать ссылку, иначе будет вызвано -// исключение. +// НоваяСсылкаНаФайл - Неопределено - если у владельца файла только один справочник хранения файлов. // - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника хранения файлов, -// которую следует использовать для добавляемого файла. -// Должна соответствовать одному из типов справочников хранения файлов владельца -// файлов. Ссылка может быть получена функцией НоваяСсылкаНаФайл. +// которую следует использовать для добавляемого файла. +// Должна соответствовать одному из типов справочников хранения файлов владельца +// файлов. Ссылка может быть получена функцией НоваяСсылкаНаФайл. // // Возвращаемое значение: // ОпределяемыйТип.ПрисоединенныйФайл - ссылка на созданный присоединенный файл. @@ -539,7 +537,7 @@ Знач Описание = "", Знач НоваяСсылкаНаФайл = Неопределено) Экспорт - ВладелецФайлов = ПараметрыФайла.ВладелецФайлов; + ВладелецФайлов = ПараметрыФайла.ВладелецФайлов; ИмяБезРасширения = ПараметрыФайла.ИмяБезРасширения; РасширениеБезТочки = ПараметрыФайла.РасширениеБезТочки; @@ -718,10 +716,10 @@ КонецФункции -// Возвращает структуру, содержащую персональные настройки работы с файлами. +// Возвращает персональные настройки работы с файлами. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ПоказыватьЗанятыеФайлыПриЗавершенииРаботы - Булево - существует, только если внедрена подсистема Работа с // файлами. // * СпрашиватьРежимРедактированияПриОткрытииФайла - Булево - существует, только если внедрена подсистема Работа с @@ -739,7 +737,6 @@ // * ТекстовыеФайлыСпособОткрытия - ПеречислениеСсылка.СпособыОткрытияФайлаНаПросмотр - способ // открытия текстовых файлов. // * МаксимальныйРазмерЛокальногоКэшаФайлов - Число - определяет максимальный размер локального кэша файлов. -// * ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов - Булево - задавать вопрос при удалении файлов из локального кэша. // * ПоказыватьИнформациюЧтоФайлНеБылИзменен - Булево - показывать файлы при завершении работы. // * ПоказыватьПодсказкиПриРедактированииФайлов - Булево - а веб-клиенте показывать подсказки при // редактировании файлов. @@ -809,7 +806,7 @@ // Сохраняет настройки работы с файлами. // // Параметры: -// НастройкиРаботыСФайлами - Структура - настройки работы с файлами с их значениями. +// НастройкиРаботыСФайлами - Структура - настройки работы с файлами с их значениями: // * ПоказыватьИнформациюЧтоФайлНеБылИзменен - Булево - необязательный. Показывать сообщение, если файл не // был изменен. // * ПоказыватьЗанятыеФайлыПриЗавершенииРаботы - Булево - необязательный. Показывать файлы при завершении работы. @@ -855,7 +852,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; @@ -875,11 +873,11 @@ // (элемента справочника, ПВХ, документа и т.п.). // // Параметры: -// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - объект-владелец - приемник файлов. -// ИмяСправочника - Строка - если требуется конвертация в указанное хранилище. +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - объект-приемник файлов. +// ИмяСправочника - Строка - если требуется конвертация в указанную таблицу. // // Возвращаемое значение: -// Соответствие - файлы: +// Соответствие: // * Ключ - СправочникСсылка.Файлы - перенесенный файл, который помечен на удаление после переноса. // * Значение - ОпределяемыйТип.ПрисоединенныйФайл - созданный файл. // @@ -899,26 +897,28 @@ УстановитьПривилегированныйРежим(Истина); МенеджерПрисоединенныхФайлов = Справочники[ИмяСправочника]; - НачатьТранзакцию(); - Попытка + Для Каждого ФайлИсточник Из ФайлыИсточник Цикл + НачатьТранзакцию(); + Попытка - Для Каждого ФайлИсточник Из ФайлыИсточник Цикл - ФайлИсточникОбъект = ФайлИсточник.ПолучитьОбъект(); - // Установить исключительную блокировку на файл-источник, - // для того чтобы гарантировать, что в момент записи значения его реквизитов не изменится.. БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.Файлы.ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИсточникОбъект.Ссылка); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИсточник); БлокировкаДанных.Заблокировать(); + ФайлИсточникОбъект = ФайлИсточник.ПолучитьОбъект(); + Если ФайлИсточникОбъект = Неопределено Или ФайлИсточникОбъект.ПометкаУдаления Тогда + ЗафиксироватьТранзакцию(); + Продолжить; + КонецЕсли; + Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда - ТекущаяВерсияОбъект = ФайлИсточникОбъект.ТекущаяВерсия.ПолучитьОбъект(); - // Установить исключительную блокировку на текущую версию файла-источник, - // для того чтобы гарантировать, что в момент записи значения его реквизитов не изменится.. БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.ВерсииФайлов.ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ТекущаяВерсияОбъект.Ссылка); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИсточникОбъект.ТекущаяВерсия); БлокировкаДанных.Заблокировать(); + + ТекущаяВерсияОбъект = ФайлИсточникОбъект.ТекущаяВерсия.ПолучитьОбъект(); Иначе ТекущаяВерсияОбъект = ФайлИсточникОбъект; КонецЕсли; @@ -1002,154 +1002,18 @@ ФайлИсточникОбъект.Записать(); Результат.Вставить(ФайлИсточникОбъект.Ссылка, СсылкаНового); - КонецЦикла; - - ЗафиксироватьТранзакцию(); - - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЦикла; Возврат Результат; КонецФункции -// Конвертирует файлы из подсистемы Работа с файлами в подсистему Присоединенные файлы. -// -// Для использования в процедурах обновления ИБ, если выполняется переход от использования -// одной подсистемы к другой в каком-либо объекте-владельце файлов. -// Выполняется последовательно для каждого элемента объекта-владельца файлов -// (элемента справочника, ПВХ, документа и т.п.). -// -// Параметры: -// ВладелецФайлов - Ссылка - ссылка на объект, для которого выполняется конвертация. -// ИмяСправочника - Строка - если требуется конвертация в указанное хранилище. -// -Процедура ИзменитьСправочникХраненияФайлов(Знач ВладелецФайлов, ИмяСправочника = Неопределено) Экспорт - - Если Не ЗначениеЗаполнено(ВладелецФайлов) Тогда - ВызватьИсключение НСтр("ru = 'Не задано значение параметра ВладелецФайлов в РаботаСФайлами.ИзменитьСправочникХраненияФайлов.'"); - КонецЕсли; - - ЗаголовокОшибки = НСтр("ru = 'Ошибка при конвертации присоединенных файлов.'"); - ИмяСправочника = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( - ВладелецФайлов, ИмяСправочника, ЗаголовокОшибки); - - УстановитьПривилегированныйРежим(Истина); - - ФайлыИсточник = РаботаСФайламиСлужебный.ПолучитьВсеПодчиненныеФайлы(ВладелецФайлов); - МенеджерПрисоединенныхФайлов = Справочники[ИмяСправочника]; - - НачатьТранзакцию(); - Попытка - - Для Каждого ФайлИсточник Из ФайлыИсточник Цикл - ФайлИсточникОбъект = ФайлИсточник.ПолучитьОбъект(); - // Установить исключительную блокировку на файл-источник, - // для того чтобы гарантировать, что в момент записи значения его реквизитов не изменится.. - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.Файлы.ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИсточникОбъект.Ссылка); - БлокировкаДанных.Заблокировать(); - - Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда - ТекущаяВерсияОбъект = ФайлИсточникОбъект.ТекущаяВерсия.ПолучитьОбъект(); - // Установить исключительную блокировку на текущую версию файла-источник, - // для того чтобы гарантировать, что в момент записи значения его реквизитов не изменится.. - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.ВерсииФайлов.ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ТекущаяВерсияОбъект.Ссылка); - БлокировкаДанных.Заблокировать(); - Иначе - ТекущаяВерсияОбъект = ФайлИсточникОбъект; - КонецЕсли; - - СсылкаНового = МенеджерПрисоединенныхФайлов.ПолучитьСсылку(); - ПрисоединенныйФайл = МенеджерПрисоединенныхФайлов.СоздатьЭлемент(); // ОпределяемыйТип.ПрисоединенныйФайлОбъект - ПрисоединенныйФайл.УстановитьСсылкуНового(СсылкаНового); - - ПрисоединенныйФайл.ВладелецФайла = ВладелецФайлов; - ПрисоединенныйФайл.Наименование = ФайлИсточникОбъект.Наименование; - ПрисоединенныйФайл.Автор = ФайлИсточникОбъект.Автор; - ПрисоединенныйФайл.ДатаМодификацииУниверсальная = ТекущаяВерсияОбъект.ДатаМодификацииУниверсальная; - ПрисоединенныйФайл.ДатаСоздания = ФайлИсточникОбъект.ДатаСоздания; - - ПрисоединенныйФайл.Зашифрован = ФайлИсточникОбъект.Зашифрован; - ПрисоединенныйФайл.Изменил = ТекущаяВерсияОбъект.Автор; - ПрисоединенныйФайл.Описание = ФайлИсточникОбъект.Описание; - ПрисоединенныйФайл.ПодписанЭП = ФайлИсточникОбъект.ПодписанЭП; - ПрисоединенныйФайл.Размер = ТекущаяВерсияОбъект.Размер; - - ПрисоединенныйФайл.Расширение = ТекущаяВерсияОбъект.Расширение; - ПрисоединенныйФайл.Редактирует = ФайлИсточникОбъект.Редактирует; - ПрисоединенныйФайл.ТекстХранилище = ФайлИсточникОбъект.ТекстХранилище; - ПрисоединенныйФайл.ТипХраненияФайла = ТекущаяВерсияОбъект.ТипХраненияФайла; - ПрисоединенныйФайл.ПометкаУдаления = ФайлИсточникОбъект.ПометкаУдаления; - - // Если файл хранится на томе - делается ссылка на существующий файл. - ПрисоединенныйФайл.Том = ТекущаяВерсияОбъект.Том; - ПрисоединенныйФайл.ПутьКФайлу = ТекущаяВерсияОбъект.ПутьКФайлу; - - Для Каждого СертификатШифрованияСтрока Из ФайлИсточникОбъект.УдалитьСертификатыШифрования Цикл - НоваяСтрока = ПрисоединенныйФайл.УдалитьСертификатыШифрования.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СертификатШифрованияСтрока); - КонецЦикла; - - Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда - Для Каждого ЭПСтрока Из ТекущаяВерсияОбъект.УдалитьЭлектронныеПодписи Цикл - НоваяСтрока = ПрисоединенныйФайл.УдалитьЭлектронныеПодписи.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭПСтрока); - КонецЦикла; - КонецЕсли; - ПрисоединенныйФайл.Заполнить(Неопределено); - - ПрисоединенныйФайл.Записать(); - - Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ХранилищеФайла = ХранилищеФайлаИзИнформационнойБазы(ТекущаяВерсияОбъект.Ссылка); - - МенеджерЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Файл = СсылкаНового; - МенеджерЗаписи.Прочитать(); - МенеджерЗаписи.Файл = СсылкаНового; - МенеджерЗаписи.ДвоичныеДанныеФайла = Новый ХранилищеЗначения(ХранилищеФайла.Получить(), Новый СжатиеДанных(9)); - МенеджерЗаписи.Записать(); - КонецЕсли; - - ТекущаяВерсияОбъект.ПометкаУдаления = Истина; - ФайлИсточникОбъект.ПометкаУдаления = Истина; - - // Удаление ссылок на том в старом файле, что бы при удалении, файлы остались на месте. - Если ТекущаяВерсияОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - ТекущаяВерсияОбъект.ПутьКФайлу = ""; - ТекущаяВерсияОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ФайлИсточникОбъект.ПутьКФайлу = ""; - ФайлИсточникОбъект.Том = ""; - Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда - РаботаСФайламиСлужебный.ПометитьНаУдалениеВерсииФайла(ФайлИсточникОбъект.Ссылка, ТекущаяВерсияОбъект.Ссылка); - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда - ТекущаяВерсияОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); - ТекущаяВерсияОбъект.Записать(); - КонецЕсли; - - ФайлИсточникОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); - ФайлИсточникОбъект.Записать(); - - КонецЦикла; - - ЗафиксироватьТранзакцию(); - - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - // Обработчик события ПриЗаписиНаСервере управляемой формы владельца файла. // // Параметры: @@ -1172,7 +1036,8 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма для подключения. -// ДобавляемыеЭлементы - Структура, Массив - параметры элементов управления +// ДобавляемыеЭлементы - Структура +// - Массив - параметры элементов управления // присоединенными файлами для размещения на форме или массив // таких структур. Свойства: см. РаботаСФайлами.ГиперссылкаФайлов // и РаботаСФайлами.ПолеФайла. @@ -1387,7 +1252,8 @@ // Структура - параметры размещения гиперссылки. Свойства: // * Владелец - Строка - имя реквизита, содержащего ссылку на владельца присоединенных файлов. // Значение по умолчанию - "Объект.Ссылка". -// * Размещение - Строка, Неопределено - если указано имя группы формы или командная панель, +// * Размещение - Строка +// - Неопределено - если указано имя группы формы или командная панель, // гиперссылка будет помещена в указанную группу или панель. Если указано имя элемента // формы, гиперссылка будет вставлена перед указанным элементом. Если значение // параметра - Неопределено или элемент не найден, гиперссылка будет добавлена на форму @@ -1431,16 +1297,19 @@ // Структура - параметры размещения гиперссылки. Свойства: // * Владелец - Строка - имя реквизита, содержащего ссылку на владельца присоединенных файлов. // Значение по умолчанию - "Объект.Ссылка". -// * Размещение - Строка, Неопределено - если указано имя группы формы, поле будет +// * Размещение - Строка +// - Неопределено - если указано имя группы формы, поле будет // размещено в указанной группе. Если указано имя элемента формы, поле будет // вставлено перед указанным элементом. Если значение параметра - Неопределено // или элемент не найден, поле будет добавлено на форму после всех существующих // элементов. Значение по умолчанию - "УправлениеПрисоединеннымиФайлами". -// * ПутьКДанным - Строка, Неопределено - имя реквизита формы, содержащего ссылку на файл для +// * ПутьКДанным - Строка +// - Неопределено - имя реквизита формы, содержащего ссылку на файл для // отображения. Если параметр принимает значение Неопределено или реквизит не найден, // добавляет реквизит формы с именем "ПолеПрисоединенногоФайла" и типом // "ОпределяемыйТип.ПрисоединенныйФайл". Значение по умолчанию - "ПолеПрисоединенногоФайла". -// * ПутьКДаннымИзображения - Строка, Неопределено - имя реквизита формы, содержащего изображение, которое будет +// * ПутьКДаннымИзображения - Строка +// - Неопределено - имя реквизита формы, содержащего изображение, которое будет // выведено в поле предпросмотра. Если параметр принимает значение Неопределено или реквизит // не найден, добавляет реквизит формы с именем "ПолеКартинкиПрисоединенногоФайла" и типом // "Строка". Значение по умолчанию - Неопределено. @@ -1519,8 +1388,7 @@ КонецФункции -// Возвращает ссылки на объекты с файлами. -// +// Возвращает ссылки на объекты, у которых есть хотя бы один присоединенный файл. // Используется совместно с функцией СконвертироватьФайлыВПрисоединенные. // // Параметры: @@ -1528,8 +1396,7 @@ // который может являться владельцем присоединенных файлов. // // Возвращаемое значение: -// Массив - со значениями: -// * Ссылка - ссылка на объект, у которого есть хотя бы один присоединенный файл. +// Массив Из ОпределяемыйТип.ВладелецФайлов // Функция СсылкиНаОбъектыСФайлами(Знач ИмяТаблицыВладельцевФайлов) Экспорт @@ -1654,288 +1521,150 @@ КонецПроцедуры +// Устарела. Следует использовать СконвертироватьФайлыВПрисоединенные. +// +// Переносит файлы из справочника Файлы в присоединенные файлы при объекте-владельце файлов и помечает +// перенесенные файлы к удалению. +// +// Для использования в процедурах обновления ИБ. +// Выполняется последовательно для каждого элемента объекта-владельца файлов +// (элемента справочника, ПВХ, документа и т.п.). +// +// Параметры: +// ВладелецФайлов - Ссылка - ссылка на объект, для которого выполняется конвертация. +// ИмяСправочника - Строка - если требуется конвертация в указанное хранилище. +// +Процедура ИзменитьСправочникХраненияФайлов(Знач ВладелецФайлов, ИмяСправочника = Неопределено) Экспорт + + Если Не ЗначениеЗаполнено(ВладелецФайлов) Тогда + ВызватьИсключение НСтр("ru = 'Не задано значение параметра ВладелецФайлов в РаботаСФайлами.ИзменитьСправочникХраненияФайлов.'"); + КонецЕсли; + + ЗаголовокОшибки = НСтр("ru = 'Ошибка при конвертации присоединенных файлов.'"); + ИмяСправочника = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( + ВладелецФайлов, ИмяСправочника, ЗаголовокОшибки); + + УстановитьПривилегированныйРежим(Истина); + + ФайлыИсточник = РаботаСФайламиСлужебный.ПолучитьВсеПодчиненныеФайлы(ВладелецФайлов); + МенеджерПрисоединенныхФайлов = Справочники[ИмяСправочника]; + + Для Каждого ФайлИсточник Из ФайлыИсточник Цикл + НачатьТранзакцию(); + Попытка + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.Файлы.ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИсточник); + БлокировкаДанных.Заблокировать(); + + ФайлИсточникОбъект = ФайлИсточник.ПолучитьОбъект(); + Если ФайлИсточникОбъект = Неопределено Или ФайлИсточникОбъект.ПометкаУдаления Тогда + ЗафиксироватьТранзакцию(); + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.ВерсииФайлов.ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИсточникОбъект.ТекущаяВерсия); + БлокировкаДанных.Заблокировать(); + + ТекущаяВерсияОбъект = ФайлИсточникОбъект.ТекущаяВерсия.ПолучитьОбъект(); + Иначе + ТекущаяВерсияОбъект = ФайлИсточникОбъект; + КонецЕсли; + + СсылкаНового = МенеджерПрисоединенныхФайлов.ПолучитьСсылку(); + ПрисоединенныйФайл = МенеджерПрисоединенныхФайлов.СоздатьЭлемент(); // ОпределяемыйТип.ПрисоединенныйФайлОбъект + ПрисоединенныйФайл.УстановитьСсылкуНового(СсылкаНового); + + ПрисоединенныйФайл.ВладелецФайла = ВладелецФайлов; + ПрисоединенныйФайл.Наименование = ФайлИсточникОбъект.Наименование; + ПрисоединенныйФайл.Автор = ФайлИсточникОбъект.Автор; + ПрисоединенныйФайл.ДатаМодификацииУниверсальная = ТекущаяВерсияОбъект.ДатаМодификацииУниверсальная; + ПрисоединенныйФайл.ДатаСоздания = ФайлИсточникОбъект.ДатаСоздания; + + ПрисоединенныйФайл.Зашифрован = ФайлИсточникОбъект.Зашифрован; + ПрисоединенныйФайл.Изменил = ТекущаяВерсияОбъект.Автор; + ПрисоединенныйФайл.Описание = ФайлИсточникОбъект.Описание; + ПрисоединенныйФайл.ПодписанЭП = ФайлИсточникОбъект.ПодписанЭП; + ПрисоединенныйФайл.Размер = ТекущаяВерсияОбъект.Размер; + + ПрисоединенныйФайл.Расширение = ТекущаяВерсияОбъект.Расширение; + ПрисоединенныйФайл.Редактирует = ФайлИсточникОбъект.Редактирует; + ПрисоединенныйФайл.ТекстХранилище = ФайлИсточникОбъект.ТекстХранилище; + ПрисоединенныйФайл.ТипХраненияФайла = ТекущаяВерсияОбъект.ТипХраненияФайла; + ПрисоединенныйФайл.ПометкаУдаления = ФайлИсточникОбъект.ПометкаУдаления; + + // Если файл хранится на томе - делается ссылка на существующий файл. + ПрисоединенныйФайл.Том = ТекущаяВерсияОбъект.Том; + ПрисоединенныйФайл.ПутьКФайлу = ТекущаяВерсияОбъект.ПутьКФайлу; + + Для Каждого СертификатШифрованияСтрока Из ФайлИсточникОбъект.УдалитьСертификатыШифрования Цикл + НоваяСтрока = ПрисоединенныйФайл.УдалитьСертификатыШифрования.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СертификатШифрованияСтрока); + КонецЦикла; + + Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда + Для Каждого ЭПСтрока Из ТекущаяВерсияОбъект.УдалитьЭлектронныеПодписи Цикл + НоваяСтрока = ПрисоединенныйФайл.УдалитьЭлектронныеПодписи.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭПСтрока); + КонецЦикла; + КонецЕсли; + ПрисоединенныйФайл.Заполнить(Неопределено); + + ПрисоединенныйФайл.Записать(); + + Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ХранилищеФайла = ХранилищеФайлаИзИнформационнойБазы(ТекущаяВерсияОбъект.Ссылка); + + МенеджерЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Файл = СсылкаНового; + МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.Файл = СсылкаНового; + МенеджерЗаписи.ДвоичныеДанныеФайла = Новый ХранилищеЗначения(ХранилищеФайла.Получить(), Новый СжатиеДанных(9)); + МенеджерЗаписи.Записать(); + КонецЕсли; + + ТекущаяВерсияОбъект.ПометкаУдаления = Истина; + ФайлИсточникОбъект.ПометкаУдаления = Истина; + + // Удаление ссылок на том в старом файле, что бы при удалении, файлы остались на месте. + Если ТекущаяВерсияОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + ТекущаяВерсияОбъект.ПутьКФайлу = ""; + ТекущаяВерсияОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ФайлИсточникОбъект.ПутьКФайлу = ""; + ФайлИсточникОбъект.Том = ""; + Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда + РаботаСФайламиСлужебный.ПометитьНаУдалениеВерсииФайла(ФайлИсточникОбъект.Ссылка, ТекущаяВерсияОбъект.Ссылка); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ФайлИсточникОбъект.ТекущаяВерсия) Тогда + ТекущаяВерсияОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); + ТекущаяВерсияОбъект.Записать(); + КонецЕсли; + + ФайлИсточникОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); + ФайлИсточникОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #КонецОбласти #Область СлужебныеПроцедурыИФункции -#Область РаботаСКодировкамиФайлов - -// Возвращает кодировку файла. -// -// Параметры: -// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныеФайлы - Файл, кодировку которого -// необходимо определить. -// Расширение - Строка - Расширение файла. -// -// Возвращаемое значение: -// Кодировка - Строка - Кодировка файла. -// -Функция КодировкаФайла(ПрисоединенныйФайл, Расширение = "") Экспорт - - Кодировка = РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ПрисоединенныйФайл); - Если Не ЗначениеЗаполнено(Кодировка) Тогда - - ДвоичныеДанные = ДвоичныеДанныеФайла(ПрисоединенныйФайл, Ложь); - Если ДвоичныеДанные <> Неопределено Тогда - - Кодировка = КодировкаИзДвоичныхДанных(ДвоичныеДанные); - Если Не ЗначениеЗаполнено(Кодировка) Тогда - Если СтрЗаканчиваетсяНа(НРег(Расширение), "xml") Тогда - Кодировка = КодировкаИзОбъявленияXML(ДвоичныеДанные); - Иначе - Кодировка = КодировкаИзСоответствияАлфавиту(ДвоичныеДанные); - КонецЕсли; - - Если НРег(Кодировка) = "utf-8" Тогда - Кодировка = НРег(Кодировка) + "_WithoutBOM"; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Возврат Кодировка; - -КонецФункции - -// Возвращает кодировку, полученную из двоичных данных файла, если -// файл содержит сигнатуру BOM в начале. -// -// Параметры: -// ДвоичныеДанные - Двоичные данные файла. -// -// Возвращаемое значение: -// Строка - Кодировка файла. Если файл не содержит сигнатуру BOM, -// возвращает пустую строку. -// -Функция КодировкаИзДвоичныхДанных(ДвоичныеДанные) - - ЧтениеДанных = Новый ЧтениеДанных(ДвоичныеДанные); - БуферДвоичныхДанных = ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных(5); - - Возврат КодировкаBOM(БуферДвоичныхДанных); - -КонецФункции - -// Возвращает кодировку, полученную из двоичных данных файла, если -// файл содержит объявление XML. -// -// Параметры: -// ДвоичныеДанные - Двоичные данные файла. -// -// Возвращаемое значение: -// КодировкаXML - Строка - Кодировка файла. Если невозможно прочитать -// объявление XML, возвращает пустую строку. -// -Функция КодировкаИзОбъявленияXML(ДвоичныеДанные) - - БуферДвоичныхДанных = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные); - ПотокВПамяти = Новый ПотокВПамяти(БуферДвоичныхДанных); - ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьПоток(ПотокВПамяти); - Попытка - ЧтениеXML.ПерейтиКСодержимому(); - КодировкаXML = ЧтениеXML.КодировкаXML; - Исключение - КодировкаXML = ""; - КонецПопытки; - ЧтениеXML.Закрыть(); - ПотокВПамяти.Закрыть(); - - Возврат КодировкаXML; - -КонецФункции - -// Возвращает кодировку текста, полученную из сигнатуры BOM в начале. -// -// Параметры: -// БуферДвоичныхДанных - Коллекция байтов для определения кодировки. -// -// Возвращаемое значение: -// Кодировка - Строка - Кодировка файла. Если файл не содержит сигнатуру BOM, -// возвращает пустую строку. -// -Функция КодировкаBOM(БуферДвоичныхДанных) - - ПрочитанныеБайты = Новый Массив(5); - Для Индекс = 0 По 4 Цикл - Если Индекс < БуферДвоичныхДанных.Размер Тогда - ПрочитанныеБайты[Индекс] = БуферДвоичныхДанных[Индекс]; - Иначе - ПрочитанныеБайты[Индекс] = ЧислоИзШестнадцатеричнойСтроки("0xA5"); - КонецЕсли; - КонецЦикла; - - Если ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0xFE") - И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0xFF") Тогда - Кодировка = "UTF-16BE"; - ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0xFF") - И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0xFE") Тогда - Если ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0x00") - И ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x00") Тогда - Кодировка = "UTF-32LE"; - Иначе - Кодировка = "UTF-16LE"; - КонецЕсли; - ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0xEF") - И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0xBB") - И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0xBF") Тогда - Кодировка = "UTF-8"; - ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0x00") - И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0x00") - И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0xFE") - И ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0xFF") Тогда - Кодировка = "UTF-32BE"; - ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0x0E") - И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0xFE") - И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0xFF") Тогда - Кодировка = "SCSU"; - ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0xFB") - И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0xEE") - И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0x28") Тогда - Кодировка = "BOCU-1"; - ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0x2B") - И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0x2F") - И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0x76") - И (ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x38") - Или ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x39") - Или ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x2B") - Или ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x2F")) Тогда - Кодировка = "UTF-7"; - ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0xDD") - И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0x73") - И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0x66") - И ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x73") Тогда - Кодировка = "UTF-EBCDIC"; - Иначе - Кодировка = ""; - КонецЕсли; - - Возврат Кодировка; - -КонецФункции - -// Возвращает наиболее подходящую кодировку текста, полученную путем сравнения с алфавитом. -// -// Параметры: -// ДанныеТекста - ДвоичныеДанные - Двоичные данные файла. -// -// Возвращаемое значение: -// СоответствующаяКодировка - Строка - Кодировка файла. -// -Функция КодировкаИзСоответствияАлфавиту(ДанныеТекста) - - Кодировки = РаботаСФайламиСлужебный.Кодировки(); - Кодировки.Удалить(Кодировки.НайтиПоЗначению("utf-8_WithoutBOM")); - - КодировкаKOI8R = Кодировки.НайтиПоЗначению("koi8-r"); - Кодировки.Сдвинуть(КодировкаKOI8R, -Кодировки.Индекс(КодировкаKOI8R)); - - КодировкаWin1251 = Кодировки.НайтиПоЗначению("windows-1251"); - Кодировки.Сдвинуть(КодировкаWin1251, -Кодировки.Индекс(КодировкаWin1251)); - - КодировкаUTF8 = Кодировки.НайтиПоЗначению("utf-8"); - Кодировки.Сдвинуть(КодировкаUTF8, -Кодировки.Индекс(КодировкаUTF8)); - - СоответствующаяКодировка = ""; - МаксимальноеСоответствиеКодировки = 0; - Для Каждого Кодировка Из Кодировки Цикл - - СоответствиеКодировки = ПроцентСоответствияАлфавиту(ДанныеТекста, Кодировка.Значение); - Если СоответствиеКодировки > 0.95 Тогда - Возврат Кодировка.Значение; - КонецЕсли; - - Если СоответствиеКодировки > МаксимальноеСоответствиеКодировки Тогда - СоответствующаяКодировка = Кодировка.Значение; - МаксимальноеСоответствиеКодировки = СоответствиеКодировки; - КонецЕсли; - - КонецЦикла; - - Возврат СоответствующаяКодировка; - -КонецФункции - -Функция ПроцентСоответствияАлфавиту(ДвоичныеДанные, ПроверяемаяКодировка) - - // АПК:1036-выкл, АПК:163-выкл - алфавит не требует проверки орфографии. - Алфавит = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя" - + "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" - + "1234567890 "; - // АПК:1036-вкл, АПК:163-вкл - - ПотокАлфавита = Новый ПотокВПамяти(); - ЗаписьАлфавита = Новый ЗаписьДанных(ПотокАлфавита); - ЗаписьАлфавита.ЗаписатьСтроку(Алфавит, ПроверяемаяКодировка); - ЗаписьАлфавита.Закрыть(); - - ДанныеАлфавита = ПотокАлфавита.ЗакрытьИПолучитьДвоичныеДанные(); - ЧтениеДанныхАлфавита = Новый ЧтениеДанных(ДанныеАлфавита); - БуферАлфавитаВКодировке = ЧтениеДанныхАлфавита.ПрочитатьВБуферДвоичныхДанных(); - - Индекс = 0; - СимволыАлфавита = Новый Массив; - Пока Индекс <= БуферАлфавитаВКодировке.Размер - 1 Цикл - - ТекущийСимвол = БуферАлфавитаВКодировке[Индекс]; - - // Символы кириллицы в кодировке UTF-8 - двухбайтовые. - Если ПроверяемаяКодировка = "utf-8" - И (ТекущийСимвол = 208 - Или ТекущийСимвол = 209) Тогда - - Индекс = Индекс + 1; - ТекущийСимвол = Формат(ТекущийСимвол, "ЧН=0; ЧГ=") + Формат(БуферАлфавитаВКодировке[Индекс], "ЧН=0; ЧГ="); - КонецЕсли; - - Индекс = Индекс + 1; - СимволыАлфавита.Добавить(ТекущийСимвол); - - КонецЦикла; - - ЧтениеДанныхТекста = Новый ЧтениеДанных(ДвоичныеДанные); - БуферДанныхТекста = ЧтениеДанныхТекста.ПрочитатьВБуферДвоичныхДанных(?(ПроверяемаяКодировка = "utf-8", 200, 100)); - РазмерБуфераТекста = БуферДанныхТекста.Размер; - КоличествоСимволов = РазмерБуфераТекста; - - Индекс = 0; - КоличествоВхождений = 0; - Пока Индекс <= РазмерБуфераТекста - 1 Цикл - - ТекущийСимвол = БуферДанныхТекста[Индекс]; - Если ПроверяемаяКодировка = "utf-8" - И (ТекущийСимвол = 208 - Или ТекущийСимвол = 209) Тогда - - // Если последний байт в буфере является первым байтом двухбайтового символа, игнорируем его. - Если Индекс = РазмерБуфераТекста - 1 Тогда - Прервать; - КонецЕсли; - - Индекс = Индекс + 1; - КоличествоСимволов = КоличествоСимволов - 1; - ТекущийСимвол = Формат(ТекущийСимвол, "ЧН=0; ЧГ=") + Формат(БуферДанныхТекста[Индекс], "ЧН=0; ЧГ="); - - КонецЕсли; - - Индекс = Индекс + 1; - Если СимволыАлфавита.Найти(ТекущийСимвол) <> Неопределено Тогда - КоличествоВхождений = КоличествоВхождений + 1; - КонецЕсли; - - КонецЦикла; - - Возврат ?(КоличествоСимволов = 0, 100, КоличествоВхождений/КоличествоСимволов); - -КонецФункции - -#КонецОбласти - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -1947,6 +1676,7 @@ КлючиОбъектовНастроекРаботыСФайлами.Вставить("СпрашиватьРежимРедактированияПриОткрытииФайла" ,"НастройкиОткрытияФайлов"); КлючиОбъектовНастроекРаботыСФайлами.Вставить("ДействиеПоДвойномуЩелчкуМыши", "НастройкиОткрытияФайлов"); + КлючиОбъектовНастроекРаботыСФайлами.Вставить("ВариантОткрытияФайла", "НастройкиОткрытияФайлов"); КлючиОбъектовНастроекРаботыСФайлами.Вставить("ПоказыватьКолонкуРазмер" , "НастройкиПрограммы"); КлючиОбъектовНастроекРаботыСФайлами.Вставить("ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", "НастройкиПрограммы"); КлючиОбъектовНастроекРаботыСФайлами.Вставить("СпособСравненияВерсийФайлов", "НастройкиСравненияФайлов"); diff --git a/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl index 1e50c522e..98ed798fe 100644 --- a/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl @@ -16,7 +16,6 @@ // Функция ЕстьТомаХраненияФайлов() Экспорт - УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; @@ -123,19 +122,22 @@ // параметрам хранения в информационной базе. // // Параметры: -// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект, Структура - элемент -// справочника присоединенных файлов, данные которого сохраняются -// в том, или структура со свойствами, необходимыми для сохранения -// данных в том. -// Свойства структуры: См. РаботаСФайламиВТомахСлужебный.ПараметрыДобавленияФайла. -// ДвоичныеДанныеИлиПуть - ДвоичныеДанные, Строка - двоичные данные файла или полный путь -// к файлу на диске. +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект +// - Структура - элемент +// справочника присоединенных файлов, данные которого сохраняются +// в том, или структура со свойствами, необходимыми для сохранения +// данных в том. +// Свойства структуры: См. РаботаСФайламиВТомахСлужебный.ПараметрыДобавленияФайла. +// ДвоичныеДанныеИлиПуть - ДвоичныеДанные +// - Строка - двоичные данные файла или полный путь +// к файлу на диске. // ДатаДляРазмещенияВТоме - Дата - если не указано, то используется текущее время сеанса. // ЗаполнятьСлужебныйРеквизитХранилище - Булево - если параметр принимает значение Истина, двоичные данные // файла будут дополнительно помещены в служебный реквизит ФайлХранилище. -// ТомДляРазмещения - СправочникСсылка.ТомаХраненияФайлов, Неопределено - если параметр -// заполнен, файлы будут принудительно помещаться в указанный том, -// иначе - том будет выбран автоматически. +// ТомДляРазмещения - СправочникСсылка.ТомаХраненияФайлов +// - Неопределено - если параметр +// заполнен, файлы будут принудительно помещаться в указанный том, +// иначе - том будет выбран автоматически. // Процедура ДобавитьФайл(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть, @@ -483,15 +485,19 @@ // Инициализирует структуру свойств файла для получения полного пути к файлу в томе. // // Параметры: -// Файл - ОпределяемыйТип.ПрисоединенныйФайл, Неопределено - если значение параметра заполнено, свойства +// Файл - ОпределяемыйТип.ПрисоединенныйФайл +// - Неопределено - если значение параметра заполнено, свойства // заполняются значениями одноименных реквизитов файла, иначе - свойства принимают значение Неопределено. // // Возвращаемое значение: -// СвойстваФайла - Структура со свойствами: +// СвойстваФайла - Структура: // * Наименование - Строка - наименование файла; -// * Том - СправочникСсылка.ТомаХраненияФайлов, Неопределено - том, в котором хранится файл; +// * Том - СправочникСсылка.ТомаХраненияФайлов +// - Неопределено - том, в котором хранится файл; // * ПутьКФайлу - Строка - путь к файлу в томе; -// * ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов, ОпределяемыйТип.ВладелецФайлов, Неопределено - +// * ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов +// - ОпределяемыйТип.ВладелецФайлов +// - Неопределено - // владелец файла; // * Расширение - Строка - расширение файла; // * НомерВерсии - Строка - номер версии файла. @@ -816,7 +822,8 @@ // Помещает двоичные данные файла из тома в служебный реквизит ФайлХранилище. // // Параметры: -// ЭлементДанных - СправочникОбъект.ВерсииФайлов, ОпределяемыйТип.ПрисоединенныйФайл - +// ЭлементДанных - СправочникОбъект.ВерсииФайлов +// - ОпределяемыйТип.ПрисоединенныйФайл // Процедура ПоместитьФайлВРеквизитСправочника(ЭлементДанных) Экспорт @@ -853,12 +860,12 @@ ИмяКаталога = ФайловаяСистема.СоздатьВременныйКаталог(); СоздатьКаталог(ИмяКаталога); - ZIPАрхив = Новый ЧтениеZipФайла(ПолноеИмяФайлаZip); - ZIPАрхив.ИзвлечьВсе(ИмяКаталога, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + ZipФайл = Новый ЧтениеZipФайла(ПолноеИмяФайлаZip); + ZipФайл.ИзвлечьВсе(ИмяКаталога, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); СоответствиеПутейФайлов = Новый Соответствие; - Для Каждого ZIPЭлемент Из ZIPАрхив.Элементы Цикл + Для Каждого ZIPЭлемент Из ZipФайл.Элементы Цикл ПолныйПутьФайла = ИмяКаталога + "\" + ZIPЭлемент.Имя; УникальныйИдентификатор = ZIPЭлемент.ИмяБезРасширения; @@ -879,8 +886,8 @@ КонецПроцедуры // Возвращаемое значение: -// ТаблицаЗначений - колонки: -// * Ссылка - СправочникСсылка.ВерсииФайлов -. +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ВерсииФайлов // Функция ВерсииФайловВТомахНаДиске() @@ -972,18 +979,18 @@ // Конструктор таблицы, содержащей лишние файлы на диске. // // Возвращаемое значение: -// ТаблицаЗначений - колонки: -// * Имя - Строка - . -// * Файл - Строка - . -// * ИмяБезРасширения - Строка - . -// * ПолноеИмя - Строка - . -// * Путь - Строка - . -// * Том - Строка - . -// * Расширение - Строка - . -// * СтатусПроверки - Строка - . -// * Количество - Строка - . -// * Отредактировал - Строка - . -// * ДатаРедактирования - Строка - . +// ТаблицаЗначений: +// * Имя - Строка +// * Файл - Строка +// * ИмяБезРасширения - Строка +// * ПолноеИмя - Строка +// * Путь - Строка +// * Том - Строка +// * Расширение - Строка +// * СтатусПроверки - Строка +// * Количество - Строка +// * Отредактировал - Строка +// * ДатаРедактирования - Строка // Функция ЛишниеФайлыНаДиске() Экспорт @@ -1005,7 +1012,7 @@ КонецФункции // Параметры: -// ТаблицаФайловНаДиске - См. РаботаСФайламиВТомахСлужебный.ЛишниеФайлыНаДиске +// ТаблицаФайловНаДиске - см. РаботаСФайламиВТомахСлужебный.ЛишниеФайлыНаДиске // Том - СправочникСсылка.ТомаХраненияФайлов - ссылка на том. // Процедура ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, Том) Экспорт @@ -1373,7 +1380,8 @@ // объекта метаданных владельца файла + хеш CRC32 от остатка. // // Параметры: -// ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов, ОпределяемыйТип.ВладелецФайлов - ссылка на +// ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов +// - ОпределяемыйТип.ВладелецФайлов - ссылка на // владельца файла, от метаданных которого необходимо образовать имя подкаталога. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index 9e284cda0..391e972e8 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -23,7 +23,7 @@ // получает его с сервера. // // Параметры: -// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. +// ДанныеФайла - см. РаботаСФайлами.ДанныеФайла. // ДляРедактирования - Булево - Истина, если файл открывается для редактирования, иначе Ложь. // Процедура ОткрытьФайл(Знач ДанныеФайла, Знач ДляРедактирования = Ложь) Экспорт @@ -40,7 +40,7 @@ // в котором размещен указанный файл. // // Параметры: -// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. +// ДанныеФайла - см. РаботаСФайлами.ДанныеФайла. // Процедура ОткрытьКаталогФайла(ДанныеФайла) Экспорт @@ -92,7 +92,7 @@ // Параметры: // ОбработчикРезультата - ОписаниеОповещения - содержит описание процедуры, вызов которой будет произведен // после добавления файла со следующими параметрами: -// * Результат - Структура с полями: +// * Результат - Структура: // ** ФайлСсылка - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлом, // если он был добавлен, иначе Неопределено. // ** ФайлДобавлен - Булево - Истина, если файл добавлен. @@ -102,14 +102,15 @@ // ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, к которому // требуется прикрепить добавляемый файл. // ФормаВладелец - ФормаКлиентскогоПриложения - форма, из которой вызвано создание файла. -// РежимСоздания - Неопределено, Число - режим создания файла: +// РежимСоздания - Неопределено +// - Число - режим создания файла: // - Неопределено - показать диалог выбора режима создания файла. // - Число - создать файл указанным способом: // * 1 - из шаблона (копированием другого файла); // * 2 - с диска (из файловой системы клиента); // * 3 - со сканера. // -// ПараметрыДобавления - Структура - дополнительные параметры добавления файлов. +// ПараметрыДобавления - Структура - дополнительные параметры добавления файлов: // * МаксимальныйРазмер - Число - ограничение на размер файла (в мегабайтах), загружаемого из файловой системы. // Если принимает значение 0, проверка размера не проводится. Свойство игнорируется, // если принимает значение больше, чем указано в константе МаксимальныйРазмерФайла. @@ -220,7 +221,7 @@ // Параметры: // ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, к которому присоединен файл. // ФайлОснование - ОпределяемыйТип.ПрисоединенныйФайл - копируемый файл. -// ДополнительныеПараметры - Структура - параметры открытия формы. +// ДополнительныеПараметры - Структура - параметры открытия формы: // * ИмяСправочникаХранилищаФайлов - Строка - определяет справочник для хранения копии файла. // ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана при закрытии формы // со следующими параметрами: @@ -297,8 +298,9 @@ // Открывает диалог сохранения файл, где пользователь может определить путь и имя для сохранения файла. // // Параметры: -// ДанныеФайла - Структура - данные файла. Описание см. РаботаСФайлами.ДанныеФайла. -// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - содержит описание процедуры, которая +// ДанныеФайла - см. РаботаСФайлами.ДанныеФайла. +// ОбработчикЗавершения - ОписаниеОповещения +// - Неопределено - содержит описание процедуры, которая // будет вызвана после завершения со следующими параметрами: // * ПутьКФайлу - Строка - полный путь к сохраненному файлу. // * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. @@ -318,12 +320,14 @@ // Параметры: // ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, // к которому прикреплены выбираемые файлы. -// ЭлементФормы - ТаблицаФормы, ПолеФормы - элемент формы, которому будет отправлено +// ЭлементФормы - ТаблицаФормы +// - ПолеФормы - элемент формы, которому будет отправлено // оповещение о выборе. // СтандартнаяОбработка - Булево - (возвращаемое значение), всегда устанавливается в Ложь. // ОписаниеОповещенияОВыборе - ОписаниеОповещения - описание процедуры, которая будет вызвана при закрытии формы // со следующими параметрами: -// * ЗначениеВыбора - ОпределяемыйТип.ПрисоединенныйФайл, Неопределено - если произошел выбор, тогда будет +// * ЗначениеВыбора - ОпределяемыйТип.ПрисоединенныйФайл +// - Неопределено - если произошел выбор, тогда будет // возвращено значение выбора. Иначе - Неопределено. // * ДополнительныеПараметры - Произвольный - значение, указанное при создании ОписаниеОповещенияОЗакрытии. // @@ -388,7 +392,8 @@ // Выполняет печать файлов на принтер. // // Параметры: -// Файлы - ОпределяемыйТип.ПрисоединенныйФайл, Массив - ссылка или массив ссылок на объекты с файлами. +// Файлы - ОпределяемыйТип.ПрисоединенныйФайл +// - Массив - ссылка или массив ссылок на объекты с файлами. // ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, во временное хранилище // которой будет помещен файл. // @@ -416,7 +421,7 @@ // ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, // который используется для блокировки файла. // ДополнительныеПараметры - Неопределено - стандартное поведение (см. ниже). -// - Структура - со свойствами: +// - Структура: // * ДанныеФайла - Структура - данные файла, если свойства нет, будет вставлено. // * ОбработкаРезультата - ОписаниеОповещения - при вызове передается значение типа Булево, // если Истина - файл успешно подписан, иначе не подписан, @@ -746,7 +751,7 @@ // Открывает форму файла из формы элемента справочника файлов. Форма элемента закрывается. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма справочника присоединенных файлов. +// Форма - ФормаКлиентскогоПриложения - форма справочника присоединенных файлов. // Процедура ПерейтиКФормеФайла(Знач Форма) Экспорт @@ -840,9 +845,9 @@ // // Параметры: // ОбработчикРезультата - ОписаниеОповещения для дальнейшего вызова. -// ПараметрыВыполнения - Структура - со свойствами: +// ПараметрыВыполнения - Структура: // * НомерФайла - Число - номер текущего файла, -// * ДанныеФайла - Структура - данные файла, +// * ДанныеФайла - Структура // * УникальныйИдентификатор - УникальныйИдентификатор. // Процедура НапечататьФайлыВыполнение(ОбработчикРезультата, ПараметрыВыполнения) Экспорт @@ -891,9 +896,9 @@ // Процедура печати Файла после получения на диск // // Параметры: -// ПараметрыВыполнения - Структура - со свойствами: +// ПараметрыВыполнения - Структура: // * НомерФайла - Число - номер текущего файла, -// * ДанныеФайла - Структура - данные файла, +// * ДанныеФайла - Структура // * УникальныйИдентификатор - УникальныйИдентификатор. // Процедура НапечататьФайлПослеПолученияВерсииВРабочийКаталог(Результат, ПараметрыВыполнения) Экспорт @@ -1017,14 +1022,15 @@ КонецПроцедуры // Параметры: -// Ответ - КодВозвратаДиалога, Неопределено - . -// ДополнительныеПараметры - Структура - . +// Ответ - КодВозвратаДиалога +// - Неопределено +// ДополнительныеПараметры - Структура // Процедура ПоказатьВопросЗаписиНовогоВладельца(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.ОК Тогда - Форма = ДополнительныеПараметры.Форма; // РасширениеФормыКлиентскогоПриложенияДляСправочника + Форма = ДополнительныеПараметры.Форма; // РасширениеУправляемойФормыДляСправочника Если Не Форма.Записать() Тогда Возврат; КонецЕсли; @@ -1191,9 +1197,9 @@ КонецПроцедуры // Параметры: -// РасширениеУстановлено - Булево - . -// ДополнительныеПараметры - Структура - где: -// * Элемент - ПолеФормы - . +// РасширениеУстановлено - Булево +// ДополнительныеПараметры - Структура: +// * Элемент - ПолеФормы // Процедура ПолеПредпросмотраПеретаскиваниеЗавершение(РасширениеУстановлено, ДополнительныеПараметры) Экспорт @@ -1381,7 +1387,7 @@ // Параметры: // -// Форма - ФормаКлиентскогоПриложения -. +// Форма - ФормаКлиентскогоПриложения // Процедура ИзменитьДоступностьКнопок(Форма, НомерЭлемента, НачалоРедактирования) diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl index 1086f90c9..8936591d8 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl @@ -16,7 +16,7 @@ // Вызывается при ошибке захвате файла. // // Параметры: -// ДанныеФайла - Структура - сведения о файле, см. РаботаСФайлами.ДанныеФайла. +// ДанныеФайла - см. РаботаСФайлами.ДанныеФайла. // СтандартнаяОбработка - Булево - признак стандартной обработки события. // Процедура ПриОшибкеЗахватаФайла(ДанныеФайла, СтандартнаяОбработка) Экспорт diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl index a57f4d6e8..d33f7d35e 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl @@ -16,7 +16,7 @@ // Инициализирует структуру параметров для получения данных файла. См. РаботаСФайлами.ДанныеФайла. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, во временное хранилище // которой надо поместить файл и вернуть адрес в свойстве СсылкаНаДвоичныеДанныеФайла. // Значение по умолчанию - Неопределено. @@ -73,15 +73,17 @@ // ИсходныйФайл - Файл - файл, на основании которого заполняются свойства структуры. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ИмяБезРасширения - Строка - имя файла без расширения. // * РасширениеБезТочки - Строка - расширение файла. // * ВремяИзменения - Дата - дата и время изменения файла. // * ВремяИзмененияУниверсальное - Дата - UTC дата и время изменения файла. // * Размер - Число - размер файла в байтах. -// * АдресВременногоХранилищаФайла - Строка, ХранилищеЗначения - адрес во временном хранилище с двоичными данными +// * АдресВременногоХранилищаФайла - Строка +// - ХранилищеЗначения - адрес во временном хранилище с двоичными данными // файла или непосредственно двоичные данные файла. -// * АдресВременногоХранилищаТекста - Строка, ХранилищеЗначения - адрес во временном хранилище с извлеченным текстов +// * АдресВременногоХранилищаТекста - Строка +// - ХранилищеЗначения - адрес во временном хранилище с извлеченным текстов // для ППД или непосредственно сами данные с текстом. // * ЭтоВебКлиент - Булево - Истина, если вызов идет из веб клиента. // * Автор - СправочникСсылка.Пользователи - автор файла. Если Неопределено, то текущий diff --git a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl index 3584c271e..bd41dd961 100644 --- a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl @@ -16,7 +16,7 @@ // Переопределение настроек присоединенных файлов. // // Параметры: -// Настройки - Структура - со свойствам: +// Настройки - Структура: // * НеОчищатьФайлы - Массив - объекты, файлы которых не должны выводиться в настройках очистки файлов // (например, служебные документы). // * НеСинхронизироватьФайлы - Массив - объекты, файлы которых не должны выводиться в настройках синхронизации @@ -59,7 +59,7 @@ // Позволяет отменить захват файла на основе анализа структуры с данными файла. // // Параметры: -// ДанныеФайла - Структура - сведения о файле, см. РаботаСФайлами.ДанныеФайла. +// ДанныеФайла - см. РаботаСФайлами.ДанныеФайла. // ОписаниеОшибки - Строка - текст ошибки в случае невозможности занять файл. // Если не пустая, файл невозможно занять. // @@ -91,7 +91,7 @@ // Вызывается при захвате файла. Позволяет изменить структуру с данными файла перед захватом. // // Параметры: -// ДанныеФайла - Структура - сведения о файле, см. РаботаСФайлами.ДанныеФайла. +// ДанныеФайла - см. РаботаСФайлами.ДанныеФайла. // УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. // Процедура ПриЗахватеФайла(ДанныеФайла, УникальныйИдентификатор) Экспорт @@ -101,7 +101,7 @@ // Вызывается при освобождении файла. Позволяет изменить структуру с данными файла при освобождении. // // Параметры: -// ДанныеФайла - Структура - сведения о файле, см. РаботаСФайлами.ДанныеФайла. +// ДанныеФайла - см. РаботаСФайлами.ДанныеФайла. // УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. // Процедура ПриОсвобожденииФайла(ДанныеФайла, УникальныйИдентификатор) Экспорт @@ -112,7 +112,7 @@ // // Параметры: // ФайлыДляОтправки - Массив из ОпределяемыйТип.ПрисоединенныйФайл - список файлов для отправки. -// ПараметрыОтправки - Структура - возвращаемый параметр, см. РаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма. +// ПараметрыОтправки - см. РаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма. // ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - объект-владелец файлов. // УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор, // который необходимо использовать, есть требуется помещение данных во временное хранилище. @@ -140,6 +140,7 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма списка файлов. +// Процедура ПриСозданииФормыСпискаФайлов(Форма) Экспорт КонецПроцедуры @@ -148,6 +149,7 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма файла. +// Процедура ПриСозданииФормыЭлементаФайлов(Форма) Экспорт КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index dd6ade1d1..6beb9663b 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -24,11 +24,19 @@ Объекты.Вставить(Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов.ПолноеИмя(), ""); КонецПроцедуры +// См. ПоискИУдалениеДублей.ТипыИсключаемыеИзВозможныхДублей +Процедура ПриДобавленииТиповИсключаемыхИзВозможныхДублей(ИсключаемыеТипы) Экспорт + + ОбщегоНазначенияКлиентСервер.ДополнитьМассив( + ИсключаемыеТипы, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы()); + +КонецПроцедуры + // Используется при выгрузке файлов для перехода в сервис (БТС). // // Параметры: -// ОбъектФайла - СправочникОбъект -. -// ИмяНовогоФайла - Строка -. +// ОбъектФайла - СправочникОбъект +// ИмяНовогоФайла - Строка // Процедура ВыгрузитьФайл(Знач ОбъектФайла, Знач ИмяНовогоФайла) Экспорт @@ -72,9 +80,9 @@ КонецПроцедуры // Параметры: -// Результат - Структура - . -// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект - . -// ВерсияФайла - СправочникСсылка.ВерсииФайлов - . +// Результат - Структура +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект +// ВерсияФайла - СправочникСсылка.ВерсииФайлов // Процедура ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, ВерсияФайла = Неопределено) Экспорт @@ -120,7 +128,7 @@ НавигационнаяСсылкаТекущейВерсии = ПолучитьНавигационнуюСсылку(КлючЗаписи, "ДвоичныеДанныеФайла"); Результат.Вставить("НавигационнаяСсылкаТекущейВерсии", НавигационнаяСсылкаТекущейВерсии); - КодировкаТекущейВерсии = ПолучитьКодировкуВерсииФайла(ТекущаяВерсияФайла); + КодировкаТекущейВерсии = РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ТекущаяВерсияФайла); Результат.Вставить("КодировкаТекущейВерсии", КодировкаТекущейВерсии); ТекущийПользователь = Пользователи.АвторизованныйПользователь(); НаЧтение = Результат.Редактирует <> ТекущийПользователь; @@ -171,6 +179,7 @@ ПерсональныеНастройки.Вставить("СпрашиватьРежимРедактированияПриОткрытииФайла", СпрашиватьРежимРедактированияПриОткрытииФайла()); + ПерсональныеНастройки.Вставить("ВариантОткрытияФайла", ВариантОткрытияФайла()); ПерсональныеНастройки.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь(,, Ложь)); @@ -194,25 +203,6 @@ КонецПроцедуры -// Читает кодировку версии файла. -// -// Параметры: -// ВерсияСсылка - ссылка на версию файла. -// -// Возвращаемое значение: -// Строка кодировки -Функция ПолучитьКодировкуВерсииФайла(ВерсияСсылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписи = РегистрыСведений.КодировкиФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Файл = ВерсияСсылка; - МенеджерЗаписи.Прочитать(); - - Возврат МенеджерЗаписи.Кодировка; - -КонецФункции - // Получает все подчиненные файлы. // // Параметры: @@ -366,8 +356,9 @@ // при использовании ограничения для папки или файла. // // Параметры: -// Папка - СправочникСсылка.ПапкиФайлов, СправочникСсылка.Файлы - Папка файлов. -// - СправочникСсылка - Владелец файлов. +// Папка - СправочникСсылка.ПапкиФайлов +// - СправочникСсылка.Файлы - папка файлов. +// - СправочникСсылка - владелец файлов. // // Места использования: // РассылкаОтчетов.ЗаполнитьПараметрыРассылкиПараметрамиПоУмолчанию(). @@ -469,15 +460,25 @@ // Устанавливает пометку удаления всем версиям указанного файла. Процедура ПометитьНаУдалениеВерсииФайла(Знач ФайлСсылка, Знач ВерсияИсключение) Экспорт - ВыборкаВерсий = ВерсииФайла(ФайлСсылка, ВерсияИсключение); + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.Владелец = &Владелец + | И НЕ ВерсииФайлов.ПометкаУдаления + | И ВерсииФайлов.Ссылка <> &Исключение"); + Запрос.УстановитьПараметр("Владелец", ФайлСсылка); + Запрос.УстановитьПараметр("Исключение", ВерсияИсключение); + + ВыборкаВерсий = Запрос.Выполнить().Выгрузить(); НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - Для Каждого Версия Из ВыборкаВерсий Цикл - ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииФайлов"); - ЭлементБлокировки.УстановитьЗначение("Ссылка", Версия.Ссылка); - КонецЦикла; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииФайлов"); + ЭлементБлокировки.УстановитьЗначение("Владелец", ФайлСсылка); Блокировка.Заблокировать(); Для Каждого Версия Из ВыборкаВерсий Цикл @@ -945,7 +946,7 @@ // Проверяет, что хотя бы в одном томе есть хотя бы один файл. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЕстьФайлыВТомах() Экспорт @@ -1008,9 +1009,9 @@ // использования электронной подписи и шифрования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - . -// ЭтоФормаСписка - Булево - . -// ТолькоКартинкаСтрок - Булево - . +// Форма - ФормаКлиентскогоПриложения +// ЭтоФормаСписка - Булево +// ТолькоКартинкаСтрок - Булево // Процедура КриптографияПриСозданииФормыНаСервере(Форма, ЭтоФормаСписка = Истина, ТолькоКартинкаСтрок = Ложь) Экспорт @@ -1052,8 +1053,8 @@ Если ЭтоФормаСписка Тогда Элементы.СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование.Видимость = Используется; Иначе - Элементы.ГруппаЭлектронныеПодписи.Видимость = ЭлектронноеПодписание; - Элементы.ГруппаСертификатыШифрования.Видимость = Шифрование; + Элементы.ГруппаЭлектронныеПодписи.Видимость = ЭлектронноеПодписание И Доступна; + Элементы.ГруппаСертификатыШифрования.Видимость = Шифрование И Доступна; КонецЕсли; КонецЕсли; @@ -1116,7 +1117,8 @@ // Только для внутреннего использования. // // Параметры: -// ПодписиВФорме - ТаблицаЗначений - . +// ПодписиВФорме - ТаблицаЗначений +// Процедура ПеренестиРезультатыПроверкиПодписей(ПодписиВФорме, ПодписанныйФайл) Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда @@ -1150,18 +1152,26 @@ СтрокаВОбъекте = ПодписиВОбъекте.Получить(ПодписиВФорме.Индекс(Строка)); Если Строка.ДатаПодписи <> СтрокаВОбъекте.ДатаПодписи Или Строка.Комментарий <> СтрокаВОбъекте.Комментарий - Или Строка.КомуВыданСертификат <> СтрокаВОбъекте.КомуВыданСертификат - Или Строка.Отпечаток <> СтрокаВОбъекте.Отпечаток + Или Строка.КомуВыданСертификат <> СтрокаВОбъекте.КомуВыданСертификат И ЗначениеЗаполнено(СтрокаВОбъекте.КомуВыданСертификат) + Или Строка.Отпечаток <> СтрокаВОбъекте.Отпечаток И ЗначениеЗаполнено(СтрокаВОбъекте.Отпечаток) Или Строка.УстановившийПодпись <> СтрокаВОбъекте.УстановившийПодпись Тогда Возврат; // Если объект был изменен, результаты проверки не переносятся. КонецЕсли; КонецЦикла; + Свойства.Вставить("Отпечаток"); + Свойства.Вставить("КомуВыданСертификат"); + Для Каждого Строка Из ПодписиВФорме Цикл СтрокаВОбъекте = ПодписиВОбъекте.Получить(ПодписиВФорме.Индекс(Строка)); ЗаполнитьЗначенияСвойств(Свойства, СтрокаВОбъекте); - Если Строка.ДатаПроверкиПодписи = Свойства.ДатаПроверкиПодписи - И Строка.ПодписьВерна = Свойства.ПодписьВерна Тогда + ЕстьИзменения = Ложь; + Для Каждого КлючИЗначение Из Свойства Цикл + Если Строка[КлючИЗначение.Ключ] <> Свойства[КлючИЗначение.Ключ] Тогда + ЕстьИзменения = Истина; + КонецЕсли; + КонецЦикла; + Если Не ЕстьИзменения Тогда Продолжить; // Не нужно устанавливать модифицированность, если результаты проверки совпадают. КонецЕсли; ЗаполнитьЗначенияСвойств(Свойства, Строка); @@ -1329,8 +1339,6 @@ Возврат; // Извлечение текста работает только под Windows. КонецЕсли; - ИмяСРасширениемФайла = ""; - ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначения.КодОсновногоЯзыка()), @@ -1351,6 +1359,8 @@ ИзвлечьТекстИзФайла(ФайлБезТекста, ФайлЗаблокирован, ИмяФайлаСДвоичнымиДанными); Исключение Если ФайлЗаблокирован Тогда + ПоляФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлБезТекста.Ссылка, + "Наименование, Расширение"); ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначения.КодОсновногоЯзыка()), @@ -1362,7 +1372,7 @@ |""%1"" |по причине: |""%2"".'"), - ИмяСРасширениемФайла, + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ПоляФайла.Наименование, ПоляФайла.Расширение), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) )); КонецЕсли; КонецПопытки; @@ -1542,6 +1552,12 @@ КонецФункции +Функция СписокРасширенийТекстовыхФайлов() Экспорт + + Возврат "TXT XML INI"; + +КонецФункции + Функция ПодготовитьСтруктуруПараметровОтправки() Экспорт Возврат Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); @@ -1708,8 +1724,8 @@ ПланыОбмена.СоздатьНачальныйОбраз(Параметры.Узел, СтрокаСоединения); // Собственно создание начального образа. Если Параметры.ЕстьФайлыВТомах Тогда - ZIP = Новый ЗаписьZipФайла; - ZIP.Открыть(Параметры.ПутьКАрхивуСФайламиТомов); + ZipФайл = Новый ЗаписьZipФайла; + ZipФайл.Открыть(Параметры.ПутьКАрхивуСФайламиТомов); ВременныеФайлы = Новый Массив; ВременныеФайлы = НайтиФайлы(Параметры.ИмяКаталогаФайлов, ПолучитьМаскуВсеФайлы()); @@ -1717,11 +1733,11 @@ Для Каждого ВременныйФайл Из ВременныеФайлы Цикл Если ВременныйФайл.ЭтоФайл() Тогда ПутьВременногоФайла = ВременныйФайл.ПолноеИмя; - ZIP.Добавить(ПутьВременногоФайла); + ZipФайл.Добавить(ПутьВременногоФайла); КонецЕсли; КонецЦикла; - ZIP.Записать(); + ZipФайл.Записать(); УдалитьФайлы(Параметры.ИмяКаталогаФайлов); // Удаляем вместе с файлами внутри. КонецЕсли; @@ -1828,9 +1844,9 @@ ПланыОбмена.СоздатьНачальныйОбраз(Параметры.Узел, Параметры.СтрокаСоединения); Если Параметры.ЕстьФайлыВТомах Тогда - ZIP = Новый ЗаписьZipФайла; + ZipФайл = Новый ЗаписьZipФайла; ПутьZIP = Параметры.ПутьФайла; - ZIP.Открыть(ПутьZIP); + ZipФайл.Открыть(ПутьZIP); ВременныеФайлы = Новый Массив; ВременныеФайлы = НайтиФайлы(Параметры.ИмяКаталогаФайлов, ПолучитьМаскуВсеФайлы()); @@ -1838,11 +1854,11 @@ Для Каждого ВременныйФайл Из ВременныеФайлы Цикл Если ВременныйФайл.ЭтоФайл() Тогда ПутьВременногоФайла = ВременныйФайл.ПолноеИмя; - ZIP.Добавить(ПутьВременногоФайла); + ZipФайл.Добавить(ПутьВременногоФайла); КонецЕсли; КонецЦикла; - ZIP.Записать(); + ZipФайл.Записать(); УдалитьФайлы(Параметры.ИмяКаталогаФайлов); // Удаляем вместе с файлами внутри. КонецЕсли; @@ -2297,6 +2313,13 @@ Обработчик.Процедура = "РаботаСФайламиСлужебный.ОбновитьСписокЗапрещенныхРасширенийВОбластиДанных"; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.3.119"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ОбновитьСписокРасширенийТекстовыхФайлов"; + Обработчик.РежимВыполнения = "Оперативно"; + ПодсистемаЭПСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись"); Если ПодсистемаЭПСуществует Тогда @@ -2599,7 +2622,7 @@ // См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек // // Параметры: -// Объекты - Массив - . +// Объекты - Массив // Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт @@ -2894,7 +2917,7 @@ // Только для внутреннего использования. // // Параметры: -// Отправитель - ПланОбменаСсылка - . +// Отправитель - ПланОбменаСсылка // Процедура ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента, Отправитель = Неопределено) @@ -2974,7 +2997,7 @@ НСтр("ru = 'Не удалось добавить файл ""%1"" ни в один из томов, т.к. он отсутствует. |Возможно, файл удален антивирусной программой. |Обратитесь к администратору.'"), - ЭлементДанных.Наименование + "." + ЭлементДанных.Расширение); + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ЭлементДанных.Наименование, ЭлементДанных.Расширение)); ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, ТипМетаданных, ЭлементДанных.Ссылка, ТекстОшибки); @@ -3020,8 +3043,8 @@ // Записывает двоичные данные файла в информационную базу. // // Параметры: -// ПрисоединенныйФайл - Ссылка на присоединенный файл. -// ДвоичныеДанные - ДвоичныеДанные, которые требуется записать. +// ПрисоединенныйФайл - ссылка на присоединенный файл. +// ДвоичныеДанные - ДвоичныеДанные - которые требуется записать. // Процедура ЗаписатьФайлВИнформационнуюБазу(Знач ПрисоединенныйФайл, Знач ДвоичныеДанные) Экспорт @@ -3041,7 +3064,7 @@ // на одну единицу и возвращает полученный результат. // // Возвращаемое значение: -// Строка - Строка (10) - новый идентификатор объекта. +// Строка - строка (10) - новый идентификатор объекта. // Функция ПолучитьОчереднойИдентификаторОбъекта() Экспорт @@ -3118,77 +3141,12 @@ #Область ДругиеПроцедурыИФункции -// Возвращаемое значение: -// ТаблицаЗначений - с колонками: -// * Ссылка - СправочникСсылка - . -// -Функция ВерсииФайла(ФайлСсылка, ВерсияИсключение) - - ТекстЗапроса = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка КАК Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.Владелец = &Владелец - | И НЕ ВерсииФайлов.ПометкаУдаления - | И ВерсииФайлов.Ссылка <> &Исключение"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("Владелец", ФайлСсылка); - Запрос.УстановитьПараметр("Исключение", ВерсияИсключение); - - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции - -Процедура ОбновитьСписокЗапрещенныхРасширений() Экспорт - - СписокЗапрещенныхРасширенийДляЗагрузки = СписокЗапрещенныхРасширений(); - - СписокЗапрещенныхРасширенийВБазе = Константы.СписокЗапрещенныхРасширений.Получить(); - МассивЗапрещенныхРасширений = СтрРазделить(СписокЗапрещенныхРасширенийВБазе, " "); - ОбновитьСписокЗапрещенныхРасширений = Ложь; - Для Каждого Расширение Из СписокЗапрещенныхРасширенийДляЗагрузки Цикл - Если МассивЗапрещенныхРасширений.Найти(ВРег(Расширение)) = Неопределено Тогда - ОбновитьСписокЗапрещенныхРасширений = Истина; - МассивЗапрещенныхРасширений.Добавить(ВРег(Расширение)); - КонецЕсли; - КонецЦикла; - СписокЗапрещенныхРасширенийВБазе = СтрСоединить(МассивЗапрещенныхРасширений, " "); - Если ОбновитьСписокЗапрещенныхРасширений Тогда - Константы.СписокЗапрещенныхРасширений.Установить(СписокЗапрещенныхРасширенийВБазе); - КонецЕсли; - -КонецПроцедуры - -Процедура ОбновитьСписокЗапрещенныхРасширенийВОбластиДанных() Экспорт - - СписокЗапрещенныхРасширенийДляЗагрузки = СписокЗапрещенныхРасширений(); - - ОбновитьСписокЗапрещенныхРасширенийОбластиДанных = Ложь; - СписокЗапрещенныхРасширенийОбластиДанных = Константы.СписокЗапрещенныхРасширенийОбластиДанных.Получить(); - МассивЗапрещенныхРасширенийОбластиДанных = СтрРазделить(СписокЗапрещенныхРасширенийОбластиДанных, " "); - Для Каждого Расширение Из СписокЗапрещенныхРасширенийДляЗагрузки Цикл - Если МассивЗапрещенныхРасширенийОбластиДанных.Найти(ВРег(Расширение)) = Неопределено Тогда - МассивЗапрещенныхРасширенийОбластиДанных.Добавить(ВРег(Расширение)); - ОбновитьСписокЗапрещенныхРасширенийОбластиДанных = Истина; - КонецЕсли; - КонецЦикла; - СписокЗапрещенныхРасширенийОбластиДанных = СтрСоединить(МассивЗапрещенныхРасширенийОбластиДанных, " "); - Если ОбновитьСписокЗапрещенныхРасширенийОбластиДанных Тогда - Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить(СписокЗапрещенныхРасширенийОбластиДанных); - КонецЕсли; - -КонецПроцедуры - // Возвращает имя справочника для указанного владельца или вызывает исключение, // если их более одного. // // Параметры: // ВладелецФайлов - Ссылка - объект, к которому добавляется файл. -// ИмяСправочника - Строка, если заполнено, то выполняется проверка +// ИмяСправочника - Строка - если заполнено, то выполняется проверка // наличия справочника среди справочников владельца для хранения файлов. // Если не заполнено, возвращает имя основного справочника. // ЗаголовокОшибки - Строка - заголовок ошибки. @@ -3338,7 +3296,7 @@ // // Параметры: // ВладелецФайлов - Ссылка - объект, к которому добавляется файл. -// ИмяСправочника - Строка, если заполнено, то выполняется проверка +// ИмяСправочника - Строка - если заполнено, то выполняется проверка // наличия справочника среди справочников владельца для хранения файлов. // Если не заполнено, возвращает имя основного справочника. // ЗаголовокОшибки - Строка - заголовок ошибки. @@ -3390,7 +3348,8 @@ // Отменяет редактирование файла. // // Параметры: -// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл, ОпределяемыйТип.ПрисоединенныйФайлОбъект - ссылка или +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл +// - ОпределяемыйТип.ПрисоединенныйФайлОбъект - ссылка или // объект присоединенного файла, который требуется освободить. // Процедура ОсвободитьФайл(Знач ПрисоединенныйФайл) Экспорт @@ -3532,7 +3491,7 @@ // Заполняет условное оформление списка файлов. // // Параметры: -// Список - ДинамическийСписок - . +// Список - ДинамическийСписок // Процедура ЗаполнитьУсловноеОформлениеСпискаФайлов(Список) Экспорт @@ -3601,7 +3560,7 @@ // Заполняет условное оформление списка папок. // // Параметры: -// Папки - ДинамическийСписок -. +// Папки - ДинамическийСписок // Процедура ЗаполнитьУсловноеОформлениеСпискаПапок(Папки) Экспорт @@ -3698,10 +3657,12 @@ // Делает ПоместитьВоВременноеХранилище (если файл хранится на диске) и возвращает нужную ссылку. // Параметры: // ВерсияСсылка - СправочникСсылка.ВерсииФайлов - версия файла. -// ИдентификаторФормы - УникальныйИдентификатор, Неопределено - уникальный идентификатор формы. +// ИдентификаторФормы - УникальныйИдентификатор +// - Неопределено - уникальный идентификатор формы. // // Возвращаемое значение: // Строка - навигационная ссылка. +// Функция ПолучитьНавигационнуюСсылкуВоВременномХранилище(ВерсияСсылка, ИдентификаторФормы = Неопределено) Экспорт Адрес = ""; @@ -3721,7 +3682,7 @@ // Получает значение настройки ПоказыватьКолонкуРазмер. // Возвращаемое значение: -// Булево - Показывать колонку размер. +// Булево - показывать колонку размер. // Функция ПолучитьПоказыватьКолонкуРазмер() Экспорт @@ -3824,7 +3785,7 @@ // Определяет наличие опционального реквизита Служебный в метаданных справочника. // // Параметры: -// ИмяСправочника - Строка - Имя справочника в метаданных. +// ИмяСправочника - Строка - имя справочника в метаданных. // // Возвращаемое значение: // Булево - наличие реквизита Служебный. @@ -3855,7 +3816,7 @@ // Внешним пользователям доступна только общая информация о файле и его характеристиках. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма, для которой изменяется видимость элементов. +// Форма - ФормаКлиентскогоПриложения - форма, для которой изменяется видимость элементов. // ЭтоФормаСписка - Булево - признак того, что процедура вызывается из формы списка. // Процедура ИзменитьФормуДляВнешнегоПользователя(Форма, Знач ЭтоФормаСписка = Ложь) Экспорт @@ -3891,7 +3852,7 @@ // Считаем ДействиеПоДвойномуЩелчкуМыши - если первый раз - поставим правильное значение. // // Возвращаемое значение: -// Строка - Действие по двойному щелчку мыши. +// Строка - действие по двойному щелчку мыши. // Функция ДействиеПоДвойномуЩелчкуМыши() @@ -3918,7 +3879,7 @@ // Считаем из настроек СпособСравненияВерсийФайлов. // // Возвращаемое значение: -// Строка - Способ сравнения версий файлов. +// Строка - способ сравнения версий файлов. // Функция СпособСравненияВерсийФайлов() @@ -3938,7 +3899,7 @@ // Возвращает настройку - Спрашивать режим редактирования при открытии файла. // Возвращаемое значение: -// Булево - Спрашивать режим редактирования при открытии файла. +// Булево - спрашивать режим редактирования при открытии файла. // Функция СпрашиватьРежимРедактированияПриОткрытииФайла() СпрашиватьРежимРедактированияПриОткрытииФайла = @@ -3951,15 +3912,33 @@ Возврат СпрашиватьРежимРедактированияПриОткрытииФайла; КонецФункции +// Возвращает настройку - режим при открытии файла: просмотр или редактирование. +// +// Возвращаемое значение: +// Строка - режим при открытии файла. Варианты: "Просмотр", "Редактирование". +// +Функция ВариантОткрытияФайла() + + ВариантОткрытияФайла = + ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов", "ВариантОткрытияФайла"); + Если ВариантОткрытияФайла = Неопределено Тогда + ВариантОткрытияФайла = "Открыть"; + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиОткрытияФайлов", "ВариантОткрытияФайла", ВариантОткрытияФайла); + КонецЕсли; + + Возврат ВариантОткрытияФайла; +КонецФункции + #КонецОбласти #Область РаботаСКодировками -// Функция возвращает таблицу имен кодировок. +// Возвращает таблицу имен кодировок. +// // Возвращаемое значение: -// Результат (СписокЗначений) -// - Значение (Строка) - например "ibm852". -// - Представление (Строка) - например "ibm852 (Центральноевропейская DOS)". +// СписокЗначений: +// * Значение - Строка - например "ibm852". +// * Представление - Строка - например "ibm852 (Центральноевропейская DOS)". // Функция Кодировки() Экспорт @@ -3998,7 +3977,7 @@ // Отмечает файл, как редактируемый. // // Параметры: -// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется отметить. +// ПрисоединенныйФайл - ссылка или Объект присоединенного файла, который требуется отметить. // Процедура ЗанятьФайлДляРедактированияСервер(Знач ПрисоединенныйФайл, Пользователь = Неопределено) Экспорт @@ -4099,12 +4078,13 @@ КонецПроцедуры // Возвращает массив присоединенных файлов для указанного владельца. +// ссылок на присоединенные файлы. // // Параметры: -// ВладелецФайлов - Ссылка на владельца присоединенных файлов. +// ВладелецФайлов - ОпределяемыйТип.ПрисоединенныйФайл // // Возвращаемое значение: -// Массив ссылок на присоединенные файлы. +// Массив из ОпределяемыйТип.ПрисоединенныйФайл // Функция ВсеПодчиненныеФайлы(Знач ВладелецФайлов) Экспорт @@ -4152,7 +4132,7 @@ // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: -// Строка - +// Строка // Функция СобытиеЖурналаРегистрацииДляОбмена() @@ -4246,7 +4226,7 @@ // // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл, для которого создается новая версия. -// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "ФайлСВерсией". +// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле // // Возвращаемое значение: // СправочникСсылка.ВерсииФайлов - созданная версия. @@ -4416,11 +4396,8 @@ РеквизитыЗначения.Вставить("Расширение", ИнформацияОФайле.Расширение); КонецЕсли; - Если ИнформацияОФайле.Свойство("Кодировка") - И Не ПустаяСтрока(ИнформацияОФайле.Кодировка) Тогда - - РаботаСФайламиСлужебныйВызовСервера.ЗаписатьКодировкуВерсииФайла(ПрисоединенныйФайл, ИнформацияОФайле.Кодировка); - + Если ИнформацияОФайле.Свойство("Кодировка") И Не ПустаяСтрока(ИнформацияОФайле.Кодировка) Тогда + РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(ПрисоединенныйФайл, ИнформацияОФайле.Кодировка); КонецЕсли; ДвоичныеДанные = ПолучитьИзВременногоХранилища(ИнформацияОФайле.АдресФайлаВоВременномХранилище); @@ -4446,8 +4423,7 @@ // // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл, для которого создается новая версия. -// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме -// "ФайлСВерсией". +// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле // ВерсияСсылка - СправочникСсылка.ВерсииФайлов - версия файла, которую надо обновить. // УникальныйИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, // в контексте которой выполняется операция. @@ -4497,7 +4473,7 @@ ВерсияСсылкаДляСравненияРазмера = ФайлСсылка; КонецЕсли; - КодировкаПредВерсии = ПолучитьКодировкуВерсииФайла(ВерсияСсылкаДляСравненияРазмера); + КодировкаПредВерсии = РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ВерсияСсылкаДляСравненияРазмера); СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВерсияСсылкаДляСравненияРазмера, "Размер, ТипХраненияФайла, Том, ПутьКФайлу"); @@ -4591,19 +4567,14 @@ КонецЕсли; Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - - // очистим поля Версия.ПутьКФайлу = ""; Версия.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - Иначе // хранение на диске - + Иначе ФайлЗашифрован = Ложь; Если СведенияОФайле.Зашифрован <> Неопределено Тогда ФайлЗашифрован = СведенияОФайле.Зашифрован; КонецЕсли; - РаботаСФайламиВТомахСлужебный.ДобавитьФайл(Версия, ДвоичныеДанные); - КонецЕсли; Если МетаданныеОбъекта.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда @@ -4636,7 +4607,7 @@ РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификаторФормы); КонецЕсли; - РаботаСФайламиСлужебныйВызовСервера.ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии); + РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии); Если ЕстьПравоСохранения Тогда НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(ФайлСсылка); @@ -4650,7 +4621,7 @@ // Подставляет ссылку на версию в карточку Файла. // // Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия. +// ФайлСсылка - СправочникСсылка.Файлы - файл, в котором создается версия. // Версия - СправочникСсылка.ВерсииФайлов - версия файла. // АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с // файлом текста или ХранилищеЗначения - непосредственно содержит двоичные @@ -4781,8 +4752,8 @@ #Область ОбработчикиСобытийФормыЭлементаФайла // Параметры: -// Контекст - ФормаКлиентскогоПриложения - где: -// * Объект - ОпределяемыйТип.ПрисоединенныйФайлОбъект - . +// Контекст - ФормаКлиентскогоПриложения: +// * Объект - ОпределяемыйТип.ПрисоединенныйФайлОбъект // Процедура ФормаЭлементаПриСозданииНаСервере(Контекст, Отказ, СтандартнаяОбработка, Параметры, ТолькоПросмотр, НастраиватьОбъектФормы = Ложь) Экспорт @@ -4797,9 +4768,9 @@ Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Параметры.ЗначениеКопирования); Если Параметры.РежимСоздания = "ИзШаблона" Тогда - ОбъектЗначение = ЗаполнитьДанныеФайлаПоШаблону(Контекст, ОбъектЗначение, Параметры, НастраиватьОбъектФормы) + ОбъектЗначение = ЗаполнитьДанныеФайлаПоШаблону(Контекст, Параметры, НастраиватьОбъектФормы) Иначе - ОбъектЗначение = ЗаполнитьДанныеФайлаИзКопии(Контекст, ОбъектЗначение, Параметры, НастраиватьОбъектФормы); + ОбъектЗначение = ЗаполнитьДанныеФайлаИзКопии(Контекст, Параметры, НастраиватьОбъектФормы); КонецЕсли; Иначе Если ЗначениеЗаполнено(Параметры.ПрисоединенныйФайл) Тогда @@ -4845,7 +4816,7 @@ КонецЕсли; Если ЗначениеЗаполнено(ТекущаяВерсияФайла) Тогда - КодировкаЗначение = ПолучитьКодировкуВерсииФайла(ТекущаяВерсияФайла); + КодировкаЗначение = РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ТекущаяВерсияФайла); СписокКодировок = Кодировки(); ЭлементСписка = СписокКодировок.НайтиПоЗначению(КодировкаЗначение); @@ -4902,7 +4873,7 @@ КонецПроцедуры -Функция ЗаполнитьДанныеФайлаПоШаблону(Контекст, ОбъектЗначение, Параметры, НастраиватьОбъектФормы) +Функция ЗаполнитьДанныеФайлаПоШаблону(Контекст, Параметры, НастраиватьОбъектФормы) КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); Контекст.ЗначениеКопирования = Параметры.ЗначениеКопирования; @@ -4936,7 +4907,7 @@ КонецФункции -Функция ЗаполнитьДанныеФайлаИзКопии(Контекст, ОбъектЗначение, Параметры, НастраиватьОбъектФормы) +Функция ЗаполнитьДанныеФайлаИзКопии(Контекст, Параметры, НастраиватьОбъектФормы) КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); Контекст.ЗначениеКопирования = Параметры.ЗначениеКопирования; @@ -5201,7 +5172,7 @@ КонецФункции // Параметры: -// Результат - Массив - . +// Результат - Массив // Процедура СформироватьСписокФайловДляОтправкиПоПочте(Результат, ФайлВложение, ИдентификаторФормы) Экспорт @@ -5243,14 +5214,14 @@ // Параметры: // НастройкаОчистки - СтрокаТаблицыЗначений - колонки: -// * ВладелецФайла - ОпределяемыйТип.ПрисоединенныйФайл - . -// * ИдентификаторВладельца - СправочникСсылка.ИдентификаторыОбъектовМетаданных - . -// * ЭтоНастройкаДляЭлементаСправочника - Булево - . -// * ТипВладельцаФайла - СправочникСсылка.ИдентификаторыОбъектовМетаданных -. -// * ПравилоОтбора - ХранилищеЗначения - . -// * Действие - ПеречислениеСсылка.ВариантыОчисткиФайлов -. -// * ПериодОчистки - ПеречислениеСсылка.ПериодОчисткиФайлов - . -// * ЭтоФайл - Булево - . +// * ВладелецФайла - ОпределяемыйТип.ПрисоединенныйФайл +// * ИдентификаторВладельца - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ЭтоНастройкаДляЭлементаСправочника - Булево +// * ТипВладельцаФайла - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ПравилоОтбора - ХранилищеЗначения +// * Действие - ПеречислениеСсылка.ВариантыОчисткиФайлов +// * ПериодОчистки - ПеречислениеСсылка.ПериодОчисткиФайлов +// * ЭтоФайл - Булево // Процедура ОчиститьДанныеНенужныхФайлов(НастройкаОчистки, МассивИсключений = Неопределено) @@ -5400,9 +5371,9 @@ #Область СинхронизацияФайлов // Возвращаемое значение: -// ТаблицаЗначений - с колонками: -// * Ссылка - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов -. -// * Сервис - Строка - . +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов +// * Сервис - Строка // Функция УчетныеЗаписиСинхронизации() @@ -5659,7 +5630,7 @@ КонецФункции // Параметры: -// ТипОбъекта - ОбъектМетаданныхСправочник - . +// ТипОбъекта - ОбъектМетаданныхСправочник // Процедура ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ТипОбъекта) @@ -5707,24 +5678,22 @@ КонецФункции // Выполняет метод протокола webdav. -Функция ВыполнитьМетодWebdav(ИмяМетода, Href, СоответствиеЗаголовков, СтруктураОбмена, XMLЗапрос="", ТекстПротокола = Неопределено) +Функция ВыполнитьМетодWebdav(ИмяМетода, АдресФайлаHRef, СоответствиеЗаголовков, СтруктураОбмена, XMLЗапрос="", ТекстПротокола = Неопределено) - СтруктураHref = СтруктураURIРаскодированная(Href); - - HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, СтруктураОбмена, 20); - + СтруктураHref = СтруктураURIРаскодированная(АдресФайлаHRef); + Соединение = СоздатьHTTPСоединениеWebdav(СтруктураHref, СтруктураОбмена, 20); HTTPЗапросWebdav = Новый HTTPЗапрос(СтруктураHref.ПутьНаСервере, СоответствиеЗаголовков); Если ЗначениеЗаполнено(XMLЗапрос) Тогда HTTPЗапросWebdav.УстановитьТелоИзСтроки(XMLЗапрос); КонецЕсли; - Если ТекстПротокола<>Неопределено Тогда + Если ТекстПротокола <> Неопределено Тогда ТекстПротокола = ТекстПротокола + ?(ПустаяСтрока(ТекстПротокола), "", Символы.ПС) - + ИмяМетода + " " + Href + Символы.ПС + Символы.ПС + XMLЗапрос + Символы.ПС; + + ИмяМетода + " " + АдресФайлаHRef + Символы.ПС + Символы.ПС + XMLЗапрос + Символы.ПС; КонецЕсли; - ВызватьМетодHTTP(СтруктураОбмена, HTTP, ИмяМетода, HTTPЗапросWebdav); + ВызватьМетодHTTP(СтруктураОбмена, Соединение, ИмяМетода, HTTPЗапросWebdav); Если ТекстПротокола <> Неопределено Тогда ТекстПротокола = ТекстПротокола + ?(ПустаяСтрока(ТекстПротокола), "", Символы.ПС) + "HTTP RESPONSE " @@ -5735,13 +5704,13 @@ ТекстПротокола = ТекстПротокола + Символы.ПС + СтруктураОбмена.Ответ.ПолучитьТелоКакСтроку() + Символы.ПС; КонецЕсли; - Возврат ПроверитьИсключениеHTTP1С(СтруктураОбмена.Ответ, Href); + Возврат ПроверитьИсключениеHTTP1С(СтруктураОбмена.Ответ, АдресФайлаHRef); КонецФункции -Процедура ВызватьМетодHTTP(СтруктураОбмена, HTTP, ИмяМетода, HTTPЗапросWebdav, ТекущаяПопытка = 1) +Процедура ВызватьМетодHTTP(СтруктураОбмена, Соединение, ИмяМетода, HTTPЗапросWebdav, ТекущаяПопытка = 1) - СтруктураОбмена.Ответ = HTTP.ВызватьHTTPМетод(ИмяМетода, HTTPЗапросWebdav); + СтруктураОбмена.Ответ = Соединение.ВызватьHTTPМетод(ИмяМетода, HTTPЗапросWebdav); Если СтруктураОбмена.Ответ.КодСостояния = 429 И ТекущаяПопытка <= 5 Тогда @@ -5751,14 +5720,14 @@ ТекущееВремя = ТекущаяДатаСеанса(); КонецЦикла; - ВызватьМетодHTTP(СтруктураОбмена, HTTP, ИмяМетода, HTTPЗапросWebdav, ТекущаяПопытка + 1) + ВызватьМетодHTTP(СтруктураОбмена, Соединение, ИмяМетода, HTTPЗапросWebdav, ТекущаяПопытка + 1) КонецЕсли; КонецПроцедуры // Обновляет уникальный служебный реквизит файла на сервере webdav. -Функция ОбновитьUID1CФайла(Href, UID1C, ПараметрыСинхронизации) +Функция ОбновитьUID1CФайла(АдресФайлаHRef, UID1C, ПараметрыСинхронизации) ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; @@ -5773,12 +5742,12 @@ |"; XMLЗапрос = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(XMLЗапрос, UID1C); - Возврат ВыполнитьМетодWebdav("PROPPATCH", Href, ЗаголовкиHTTP, ПараметрыСинхронизации, XMLЗапрос); + Возврат ВыполнитьМетодWebdav("PROPPATCH", АдресФайлаHRef, ЗаголовкиHTTP, ПараметрыСинхронизации, XMLЗапрос); КонецФункции // Считывает уникальный служебный реквизит файла на сервере webdav. -Функция ПолучитьUID1C(Href, ПараметрыСинхронизации) +Функция ПолучитьUID1C(АдресФайлаHRef, ПараметрыСинхронизации) ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; @@ -5786,7 +5755,7 @@ ЗаголовкиHTTP["Accept"] = "text/xml"; ЗаголовкиHTTP["Depth"] = "0"; - Результат = ВыполнитьМетодWebdav("PROPFIND",Href,ЗаголовкиHTTP,ПараметрыСинхронизации, + Результат = ВыполнитьМетодWebdav("PROPFIND",АдресФайлаHRef,ЗаголовкиHTTP,ПараметрыСинхронизации, " | | @@ -5808,26 +5777,26 @@ КонецФункции // Проверяет, поддерживает ли сервер webdav пользовательские свойства для файла. -Функция ПроверитьВозможностьUID1C(Href, UID1C, ПараметрыСинхронизации) +Функция ПроверитьВозможностьUID1C(АдресФайлаHRef, UID1C, ПараметрыСинхронизации) - ОбновитьUID1CФайла(Href, UID1C, ПараметрыСинхронизации); - Возврат ЗначениеЗаполнено(ПолучитьUID1C(Href, ПараметрыСинхронизации)); + ОбновитьUID1CФайла(АдресФайлаHRef, UID1C, ПараметрыСинхронизации); + Возврат ЗначениеЗаполнено(ПолучитьUID1C(АдресФайлаHRef, ПараметрыСинхронизации)); КонецФункции // Выполняет MCKOL на сервере webdav. -Функция ВызватьМетодMKCOL(Href, ПараметрыСинхронизации) +Функция ВызватьМетодMKCOL(АдресФайлаHRef, ПараметрыСинхронизации) ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; - Возврат ВыполнитьМетодWebdav("MKCOL", Href, ЗаголовкиHTTP, ПараметрыСинхронизации); + Возврат ВыполнитьМетодWebdav("MKCOL", АдресФайлаHRef, ЗаголовкиHTTP, ПараметрыСинхронизации); КонецФункции // Выполняет DELETE на сервере webdav. -Функция ВызватьМетодDELETE(Href, ПараметрыСинхронизации) +Функция ВызватьМетодDELETE(АдресФайлаHRef, ПараметрыСинхронизации) - HrefБезСлеша = ЗакончитьБезСлеша(Href); + HrefБезСлеша = ЗакончитьБезСлеша(АдресФайлаHRef); ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; Возврат ВыполнитьМетодWebdav("DELETE", HrefБезСлеша, ЗаголовкиHTTP, ПараметрыСинхронизации); @@ -5835,7 +5804,7 @@ КонецФункции // Получает Etag файла на сервере. -Функция ПолучитьEtag(Href, ПараметрыСинхронизации) +Функция ПолучитьEtag(АдресФайлаHRef, ПараметрыСинхронизации) ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; @@ -5843,7 +5812,7 @@ ЗаголовкиHTTP["Accept"] = "text/xml"; ЗаголовкиHTTP["Depth"] = "0"; - Результат = ВыполнитьМетодWebdav("PROPFIND",Href,ЗаголовкиHTTP,ПараметрыСинхронизации, + Результат = ВыполнитьМетодWebdav("PROPFIND",АдресФайлаHRef,ЗаголовкиHTTP,ПараметрыСинхронизации, " | | @@ -5882,7 +5851,7 @@ КонецЕсли; Если Не ЗначениеЗаполнено(СтруктураHref.Порт) Тогда - HTTP = Новый HTTPСоединение( + Результат = Новый HTTPСоединение( СтруктураHref.Хост, , ПараметрыСинхронизации.Логин, @@ -5891,7 +5860,7 @@ Таймаут, ЗащищенноеСоединение); Иначе - HTTP = Новый HTTPСоединение( + Результат = Новый HTTPСоединение( СтруктураHref.Хост, СтруктураHref.Порт, ПараметрыСинхронизации.Логин, @@ -5901,18 +5870,18 @@ ЗащищенноеСоединение); КонецЕсли; - Возврат HTTP; + Возврат Результат; КонецФункции // Вызывает метод GET на сервере webdav и возвращает адрес загруженного файла во временном хранилище. -Функция ВызватьМетодGET(Href, Etag, ПараметрыСинхронизации, ДатаМодификацииФайла = Неопределено, ДлинаФайла = Неопределено) +Функция ВызватьМетодGET(АдресФайлаHRef, ИдентификаторEtag, ПараметрыСинхронизации, ДатаМодификацииФайла = Неопределено, ДлинаФайла = Неопределено) Результат = Новый Структура("Успешно, АдресВременныхДанных, ТекстОшибки"); - СтруктураHref = СтруктураURIРаскодированная(Href); + СтруктураHref = СтруктураURIРаскодированная(АдресФайлаHRef); Таймаут = ?(ДлинаФайла <> Неопределено, РассчитатьТаймаут(ДлинаФайла), 43200); - HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации, Таймаут); + Соединение = СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации, Таймаут); ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; @@ -5920,16 +5889,16 @@ HTTPЗапросWebdav = Новый HTTPЗапрос(СтруктураHref.ПутьНаСервере, ЗаголовкиHTTP); - ПараметрыСинхронизации.Ответ = HTTP.Получить(HTTPЗапросWebdav); + ПараметрыСинхронизации.Ответ = Соединение.Получить(HTTPЗапросWebdav); - Результат = ПроверитьИсключениеHTTP1С(ПараметрыСинхронизации.Ответ, Href); + Результат = ПроверитьИсключениеHTTP1С(ПараметрыСинхронизации.Ответ, АдресФайлаHRef); Если НЕ Результат.Успешно Тогда Возврат Результат; КонецЕсли; ФайлСДвоичнымиДанными = ПараметрыСинхронизации.Ответ.ПолучитьТелоКакДвоичныеДанные(); - Etag = ?(ПараметрыСинхронизации.Ответ.Заголовки["ETag"] = Неопределено, "", ПараметрыСинхронизации.Ответ.Заголовки["ETag"]); + ИдентификаторEtag = ?(ПараметрыСинхронизации.Ответ.Заголовки["ИдентификаторEtag"] = Неопределено, "", ПараметрыСинхронизации.Ответ.Заголовки["ИдентификаторEtag"]); ДатаМодификацииФайла = ?(ПараметрыСинхронизации.Ответ.Заголовки["Last-Modified"] = Неопределено,ТекущаяУниверсальнаяДата(),ДатаRFC1123(ПараметрыСинхронизации.Ответ.Заголовки["Last-Modified"])); ДлинаФайла = ФайлСДвоичнымиДанными.Размер(); @@ -5941,28 +5910,24 @@ КонецФункции // Помещает файл на сервер webdav с помощью метода PUT и возвращает присвоенный etag в переменную. -Функция ВызватьМетодPUT(Href, ФайлСсылка, ПараметрыСинхронизации, ЭтоФайл) +Функция ВызватьМетодPUT(АдресФайлаHRef, ФайлСсылка, ПараметрыСинхронизации, ЭтоФайл) ФайлСДвоичнымиДанными = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлСсылка); - СтруктураHref = СтруктураURIРаскодированная(Href); + СтруктураHref = СтруктураURIРаскодированная(АдресФайлаHRef); Таймаут = РассчитатьТаймаут(ФайлСДвоичнымиДанными.Размер()); - HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации, Таймаут); + Соединение = СоздатьHTTPСоединениеWebdav(СтруктураHref, ПараметрыСинхронизации, Таймаут); ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; ЗаголовкиHTTP["Content-Type"] = "application/octet-stream"; HTTPЗапросWebdav = Новый HTTPЗапрос(СтруктураHref.ПутьНаСервере, ЗаголовкиHTTP); - HTTPЗапросWebdav.УстановитьТелоИзДвоичныхДанных(ФайлСДвоичнымиДанными); - - ПараметрыСинхронизации.Ответ = HTTP.Записать(HTTPЗапросWebdav); - - ПроверитьИсключениеHTTP1С(ПараметрыСинхронизации.Ответ, Href); - - Возврат ПолучитьEtag(Href,ПараметрыСинхронизации); + ПараметрыСинхронизации.Ответ = Соединение.Записать(HTTPЗапросWebdav); + ПроверитьИсключениеHTTP1С(ПараметрыСинхронизации.Ответ, АдресФайлаHRef); + Возврат ПолучитьEtag(АдресФайлаHRef,ПараметрыСинхронизации); КонецФункции @@ -5970,8 +5935,8 @@ Функция ЗагрузитьФайлССервера(ПараметрыФайла, ЭтоФайл = Неопределено) ИмяФайла = ПараметрыФайла.ИмяФайла; - Href = ПараметрыФайла.Href; - Etag = ПараметрыФайла.Etag; + АдресФайла = ПараметрыФайла.Href; + ИдентификаторEtag = ПараметрыФайла.Etag; ДатаМодификацииФайла = ПараметрыФайла.ДатаМодификацииФайла; ДлинаФайла = ПараметрыФайла.ДлинаФайла; ОбъектВладелец = ПараметрыФайла.ОбъектВладелец; @@ -5983,7 +5948,7 @@ ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, ПараметрыФайла.ИмяФайла), ПараметрыСинхронизации.УчетнаяЗапись); - РезультатЗагрузки = ВызватьМетодGET(Href, Etag, ПараметрыСинхронизации, ДатаМодификацииФайла, ДлинаФайла); + РезультатЗагрузки = ВызватьМетодGET(АдресФайла, ИдентификаторEtag, ПараметрыСинхронизации, ДатаМодификацииФайла, ДлинаФайла); Если ЭтоФайл = Неопределено Тогда ЭтоФайл = ЭтоВладелецФайлов(ПараметрыФайла.ОбъектВладелец); @@ -6035,9 +6000,9 @@ КонецЕсли; ФайлUID1C = Строка(НовыйФайл.Ссылка.УникальныйИдентификатор()); - ОбновитьUID1CФайла(Href, ФайлUID1C, ПараметрыСинхронизации); + ОбновитьUID1CФайла(АдресФайла, ФайлUID1C, ПараметрыСинхронизации); - ЗапомнитьСерверныеДанныеСсылки(НовыйФайл.Ссылка, Href, Etag, ЭтоФайл, ОбъектВладелец, Ложь, ПараметрыСинхронизации.УчетнаяЗапись); + ЗапомнитьСерверныеДанныеСсылки(НовыйФайл.Ссылка, АдресФайла, ИдентификаторEtag, ЭтоФайл, ОбъектВладелец, Ложь, ПараметрыСинхронизации.УчетнаяЗапись); ТекстСообщения = НСтр("ru = 'Загружен файл из облачного сервиса: ""%1""'"); СтатусДляЖурналаРегистрации = УровеньЖурналаРегистрации.Информация; @@ -6186,7 +6151,7 @@ КонецЦикла; Исключение - ОписаниеОшибки = ОписаниеОшибки(); + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); РезультатПроверки.РезультатТекст = РезультатПроверки.РезультатТекст + ?(ПустаяСтрока(РезультатПроверки.РезультатТекст), "", Символы.ПС) + ОписаниеОшибки; ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки, СтруктураОбмена.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); РезультатПроверки.Отказ = Истина; @@ -6296,7 +6261,8 @@ КонецФункции // Возвращает результат сравнения путей двух URI, вне зависимости от наличия начального и конечного прямого слеша, -// кодирования спецсимволов, а так же адреса сервера. +// кодирования спецсимволов, а также адреса сервера. +// Функция ЭтоОдинаковыеПутиURI(URI1, URI2, ЧувствительноКРегистру = Истина) // Гарантирует идентичность вне зависимости от слэшей и кодирования. @@ -6311,30 +6277,29 @@ КонецФункции -// Возвращает имя файла по Href. -Функция ИмяФайлаПоHref(Href) +// Возвращает имя файла по адресу файла. +Функция ИмяФайлаИзАдреса(АдресФайла) - URI = ЗакончитьБезСлеша(Href); - ДлинаURI = СтрДлина(URI); + URIСтрока = ЗакончитьБезСлеша(АдресФайла); + ДлинаURI = СтрДлина(URIСтрока); // Находим последний слэш, после него будет имя файла. - - Для Сч = 1 По ДлинаURI Цикл - СимволURI = Сред(URI,ДлинаURI - Сч + 1, 1); + Для Индекс = 1 По ДлинаURI Цикл + СимволURI = Сред(URIСтрока,ДлинаURI - Индекс + 1, 1); Если СимволURI = "/" Тогда - Возврат РаскодироватьСтроку(Сред(URI,ДлинаURI - Сч + 2), СпособКодированияСтроки.КодировкаURL); + Возврат РаскодироватьСтроку(Сред(URIСтрока,ДлинаURI - Индекс + 2), СпособКодированияСтроки.КодировкаURL); КонецЕсли; КонецЦикла; - Возврат РаскодироватьСтроку(URI,СпособКодированияСтроки.КодировкаURL); + Возврат РаскодироватьСтроку(URIСтрока, СпособКодированияСтроки.КодировкаURL); КонецФункции // Сохраняет данные о Href и Etag файла или папки в базе данных. Процедура ЗапомнитьСерверныеДанныеСсылки( Ссылка, - Href, - Etag, + АдресФайлаHRef, + ИдентификаторEtag, ЭтоФайл, ВладелецФайла, ЭтоПапка, @@ -6342,8 +6307,8 @@ ЗаписьРегистра = РегистрыСведений.СтатусыСинхронизацииФайловСОблачнымСервисом.СоздатьМенеджерЗаписи(); ЗаписьРегистра.Файл = Ссылка; - ЗаписьРегистра.Href = Href; - ЗаписьРегистра.Etag = Etag; + ЗаписьРегистра.Href = АдресФайлаHRef; + ЗаписьРегистра.Etag = ИдентификаторEtag; ЗаписьРегистра.УникальныйИдентификатор1С = ?(ТипЗнч(Ссылка) = Тип("Строка"), "", Ссылка.УникальныйИдентификатор()); ЗаписьРегистра.ЭтоФайл = ЭтоФайл; ЗаписьРегистра.ЭтоВладелецФайла = ЭтоПапка; @@ -6425,6 +6390,7 @@ // Возвращает строку таблицы файлов по URI, при этом, учитывается возможное различное написание URI // (например, закодированное, относительное или абсолютное и т.п.). +// Функция НайтиСтрокуПоURI(ИскомоеURI, ТаблицаСURI, КолонкаURI) Для каждого СтрокаТаблицы Из ТаблицаСURI Цикл @@ -6560,7 +6526,7 @@ НоваяСтрокаДереваФайлов = ТекущиеСтрокиДереваФайлов.Добавить(); // Всегда закодирована НоваяСтрокаДереваФайлов.Href = АдресОблачногоСервиса + ТекстHref; - НоваяСтрокаДереваФайлов.ИмяФайла = ИмяФайлаПоHref(НоваяСтрокаДереваФайлов.Href); + НоваяСтрокаДереваФайлов.ИмяФайла = ИмяФайлаИзАдреса(НоваяСтрокаДереваФайлов.Href); НоваяСтрокаДереваФайлов.Etag = ""; НоваяСтрокаДереваФайлов.UID1C = ""; НоваяСтрокаДереваФайлов.ЭтоПапка = Неопределено; @@ -6593,7 +6559,7 @@ КонецЦикла; Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); Отказ = Истина; КонецПопытки; @@ -6697,7 +6663,7 @@ ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, НоваяСтрокаТаблицыФайлов.НаименованиеСервер), ПараметрыСинхронизации.УчетнаяЗапись); Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки() ,ПараметрыСинхронизации.УчетнаяЗапись); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ,ПараметрыСинхронизации.УчетнаяЗапись); КонецПопытки; Иначе @@ -6775,7 +6741,7 @@ НоваяСтрокаТаблицыФайлов.ЭтоФайл = Истина; Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); КонецПопытки; Иначе @@ -7672,7 +7638,7 @@ КонецФункции // Параметры: -// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов - . +// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов // Процедура ВыполнитьПроверкуПодключения(УчетнаяЗапись, РезультатПроверки) Экспорт @@ -7800,14 +7766,14 @@ Исключение ОтменитьТранзакцию(); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); КонецПопытки; КонецЦикла; КонецЕсли; Исключение - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); КонецПопытки; ТекстСобытия = НСтр("ru = 'Завершено освобождения файлов, захваченных облачным сервисом'"); @@ -8034,9 +8000,11 @@ // Извлекает текст из временного хранилища или из двоичных данных, возвращает статус извлечения. // // Параметры: -// АдресВременногоХранилищаТекста - Строка - . -// ДвоичныеДанные - ДвоичныеДанные, Неопределено - . -// Расширение - Строка, Неопределено - . +// АдресВременногоХранилищаТекста - Строка +// ДвоичныеДанные - ДвоичныеДанные +// - Неопределено +// Расширение - Строка +// - Неопределено // Функция ИзвлечьТекст(Знач АдресВременногоХранилищаТекста, Знач ДвоичныеДанные = Неопределено, Знач Расширение = Неопределено) Экспорт @@ -8172,7 +8140,7 @@ КонецФункции // Параметры: -// ФайлБезТекста - ОпределяемыйТип.ПрисоединенныйФайлОбъект - . +// ФайлБезТекста - ОпределяемыйТип.ПрисоединенныйФайлОбъект // Процедура ИзвлечьТекстИзФайла(ФайлБезТекста, ФайлЗаблокирован, ИмяФайлаСДвоичнымиДанными) @@ -8198,7 +8166,6 @@ ФайлОбъект = ФайлБезТекста.Ссылка.ПолучитьОбъект(); Если ФайлОбъект <> Неопределено Тогда - ИмяСРасширениемФайла = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; Если ЭтоЭлементРаботаСФайлами(ФайлОбъект.Ссылка) Тогда МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлОбъект.Ссылка)); ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); @@ -8244,7 +8211,7 @@ // Обработчик подписки "при записи" версии файла. // // Параметры: -// Источник - СправочникОбъект.ВерсииФайлов - . +// Источник - СправочникОбъект.ВерсииФайлов // Процедура ВерсииФайловПриЗаписи(Источник, Отказ) Экспорт @@ -8360,8 +8327,9 @@ // при использовании ограничения для папки или файла. // // Параметры: -// Право - Имя права. -// ВладелецПрав - СправочникСсылка.ПапкиФайлов, СправочникСсылка.Файлы, +// Право - имя права. +// ВладелецПрав - СправочникСсылка.ПапкиФайлов +// - СправочникСсылка.Файлы // <ссылка на владельца>. // Функция ЕстьПраво(Право, ВладелецПрав) Экспорт @@ -8436,6 +8404,64 @@ #Область ОбновлениеИнформационнойБазы +Процедура ОбновитьСписокЗапрещенныхРасширений() Экспорт + + СписокЗапрещенныхРасширенийДляЗагрузки = СписокЗапрещенныхРасширений(); + + СписокЗапрещенныхРасширенийВБазе = Константы.СписокЗапрещенныхРасширений.Получить(); + МассивЗапрещенныхРасширений = СтрРазделить(СписокЗапрещенныхРасширенийВБазе, " "); + ОбновитьСписокЗапрещенныхРасширений = Ложь; + Для Каждого Расширение Из СписокЗапрещенныхРасширенийДляЗагрузки Цикл + Если МассивЗапрещенныхРасширений.Найти(ВРег(Расширение)) = Неопределено Тогда + ОбновитьСписокЗапрещенныхРасширений = Истина; + МассивЗапрещенныхРасширений.Добавить(ВРег(Расширение)); + КонецЕсли; + КонецЦикла; + СписокЗапрещенныхРасширенийВБазе = СтрСоединить(МассивЗапрещенныхРасширений, " "); + Если ОбновитьСписокЗапрещенныхРасширений Тогда + Константы.СписокЗапрещенныхРасширений.Установить(СписокЗапрещенныхРасширенийВБазе); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьСписокЗапрещенныхРасширенийВОбластиДанных() Экспорт + + СписокЗапрещенныхРасширенийДляЗагрузки = СписокЗапрещенныхРасширений(); + + ОбновитьСписокЗапрещенныхРасширенийОбластиДанных = Ложь; + СписокЗапрещенныхРасширенийОбластиДанных = Константы.СписокЗапрещенныхРасширенийОбластиДанных.Получить(); + МассивЗапрещенныхРасширенийОбластиДанных = СтрРазделить(СписокЗапрещенныхРасширенийОбластиДанных, " "); + Для Каждого Расширение Из СписокЗапрещенныхРасширенийДляЗагрузки Цикл + Если МассивЗапрещенныхРасширенийОбластиДанных.Найти(ВРег(Расширение)) = Неопределено Тогда + МассивЗапрещенныхРасширенийОбластиДанных.Добавить(ВРег(Расширение)); + ОбновитьСписокЗапрещенныхРасширенийОбластиДанных = Истина; + КонецЕсли; + КонецЦикла; + СписокЗапрещенныхРасширенийОбластиДанных = СтрСоединить(МассивЗапрещенныхРасширенийОбластиДанных, " "); + Если ОбновитьСписокЗапрещенныхРасширенийОбластиДанных Тогда + Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить(СписокЗапрещенныхРасширенийОбластиДанных); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьСписокРасширенийТекстовыхФайлов() Экспорт + + СписокРасширений = Константы.СписокРасширенийТекстовыхФайлов.Получить(); + РасширенияТекстовыхФайлов = СтрРазделить(СписокРасширений, " "); + + ОбновитьСписокРасширений = Ложь; + Для Каждого Расширение Из СтрРазделить(СписокРасширенийТекстовыхФайлов(), " ") Цикл + Если РасширенияТекстовыхФайлов.Найти(ВРег(Расширение)) = Неопределено Тогда + ОбновитьСписокРасширений = Истина; + РасширенияТекстовыхФайлов.Добавить(ВРег(Расширение)); + КонецЕсли; + КонецЦикла; + Если ОбновитьСписокРасширений Тогда + Константы.СписокРасширенийТекстовыхФайлов.Установить(СтрСоединить(РасширенияТекстовыхФайлов, " ")); + КонецЕсли; + +КонецПроцедуры + // Удаляет запись в регистре ХранимыеФайлыВерсий. // // Параметры: diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Module.bsl index ff5a5b4d0..d0aac901c 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Module.bsl @@ -15,7 +15,7 @@ // // Параметры: // ИсточникТекста - ОпределяемыйТип.ПрисоединенныйФайл - файл, у которого изменилось состояние извлечения текста. -// СостояниеИзвлеченияТекста - ПеречислениеСсылка.СтатусыИзвлеченияТекстаФайлов, новый +// СостояниеИзвлеченияТекста - ПеречислениеСсылка.СтатусыИзвлеченияТекстаФайлов - новый // статус извлечения текста у файла. // Процедура ОбновитьСостояниеОчередиИзвлеченияТекста(ИсточникТекста, СостояниеИзвлеченияТекста) Экспорт @@ -67,7 +67,13 @@ НоваяСтрока = ТаблицаИспользования.Добавить(); НоваяСтрока.РегламентноеЗадание = "ПланированиеИзвлеченияТекстаВМоделиСервиса"; - НоваяСтрока.Использование = ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда + МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); + НоваяСтрока.Использование = МодульПолнотекстовыйПоискСервер.ИспользоватьПолнотекстовыйПоиск(); + Иначе + НоваяСтрока.Использование = Ложь; + КонецЕсли; КонецПроцедуры @@ -113,7 +119,7 @@ // колонок таблицы значений, // Версия - Строка - номер версии интерфейса обработчиков выгрузки / загрузки данных, // поддерживаемого обработчиком, -// ПередВыгрузкойТипа - Булево, флаг необходимости вызова обработчика перед +// ПередВыгрузкойТипа - Булево - флаг необходимости вызова обработчика перед // выгрузкой всех объектов информационной базы, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередВыгрузкойТипа(), @@ -129,10 +135,10 @@ // контекста СериализаторXDTO, // ОбъектМетаданных - ОбъектМетаданных, перед выгрузкой данных которого // был вызван обработчик, -// Отказ - Булево. Если в процедуре ПередВыгрузкойТипа() установить значение +// Отказ - Булево - если в процедуре ПередВыгрузкойТипа() установить значение // данного параметра равным Истина - выгрузка объектов, соответствующих // текущему объекту метаданных, выполняться не будет. -// ПередВыгрузкойОбъекта - Булево, флаг необходимости вызова обработчика перед +// ПередВыгрузкойОбъекта - Булево - флаг необходимости вызова обработчика перед // выгрузкой конкретного объекта информационной базы. Если присвоено значение // Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура // ПередВыгрузкойОбъекта(), поддерживающая следующие параметры: @@ -168,10 +174,10 @@ // помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. В дальнейшем // артефакты, сформированные в процедуре ПередВыгрузкойОбъекта(), будут доступны в процедурах // обработчиков загрузки данных (см. комментарий к процедуре ПриРегистрацииОбработчиковЗагрузкиДанных(). -// Отказ - Булево. Если в процедуре ПередВыгрузкойОбъекта() установить значение +// Отказ - Булево - если в процедуре ПередВыгрузкойОбъекта() установить значение // данного параметра равным Истина - выгрузка объекта, для которого был вызван обработчик, // выполняться не будет. -// ПослеВыгрузкиТипа() - Булево, флаг необходимости вызова обработчика после выгрузки всех +// ПослеВыгрузкиТипа() - Булево - флаг необходимости вызова обработчика после выгрузки всех // объектов информационной базы, относящихся к данному объекту метаданных. Если присвоено значение // Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура // ПослеВыгрузкиТипа(), поддерживающая следующие параметры: @@ -222,7 +228,7 @@ // колонок таблицы значений, // Версия - Строка - номер версии интерфейса обработчиков выгрузки / загрузки данных, // поддерживаемого обработчиком, -// ПередСопоставлениемСсылок - Булево, флаг необходимости вызова обработчика перед +// ПередСопоставлениемСсылок - Булево - флаг необходимости вызова обработчика перед // сопоставлением ссылок (в исходной ИБ и в текущей), относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередСопоставлениемСсылок(), @@ -232,7 +238,7 @@ // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. // ОбъектМетаданных - ОбъектМетаданных, перед сопоставлением ссылок которого // был вызван обработчик, -// СтандартнаяОбработка - Булево. Если процедуре ПередСопоставлениемСсылок() +// СтандартнаяОбработка - Булево - если процедуре ПередСопоставлениемСсылок() // установить значение данного параметра равным Ложь, вместо стандартного // сопоставления ссылок (поиск объектов в текущей ИБ с теми же значениями // естественного ключа, которые были выгружены из ИБ-источника) будет @@ -243,7 +249,7 @@ // Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер // контейнера, используемый в процессе загрузки данных. Подробнее см. комментарий // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера, -// ТаблицаИсходныхСсылок - ТаблицаЗначений, содержащая информацию о ссылках, +// ТаблицаИсходныхСсылок - ТаблицаЗначений - содержащая информацию о ссылках, // выгруженных из исходной ИБ. Колонки: // ИсходнаяСсылка - ЛюбаяСсылка, ссылка объекта исходной ИБ, которую требуется // сопоставить c ссылкой в текущей ИБ, @@ -253,10 +259,10 @@ // Возвращаемое значение функции СопоставитьСсылки() - ТаблицаЗначений, колонки: // ИсходнаяСсылка - ЛюбаяСсылка, ссылка объекта, выгруженная из исходной ИБ, // Ссылка - ЛюбаяСсылка, сопоставленная исходной ссылка в текущей ИБ. -// Отказ - Булево. Если в процедуре ПередСопоставлениемСсылок() установить значение +// Отказ - Булево - если в процедуре ПередСопоставлениемСсылок() установить значение // данного параметра равным Истина - сопоставление ссылок, соответствующих // текущему объекту метаданных, выполняться не будет. -// ПередЗагрузкойТипа - Булево, флаг необходимости вызова обработчика перед +// ПередЗагрузкойТипа - Булево - флаг необходимости вызова обработчика перед // загрузкой всех объектов данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередЗагрузкойТипа(), @@ -266,10 +272,10 @@ // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. // ОбъектМетаданных - ОбъектМетаданных, перед загрузкой всех данных которого // был вызван обработчик, -// Отказ - Булево. Если в процедуре ПередЗагрузкойТипа() установить значение данного +// Отказ - Булево - если в процедуре ПередЗагрузкойТипа() установить значение данного // параметра равным Истина - загрузка всех объектов данных соответствующих текущему // объекту метаданных выполняться не будет. -// ПередЗагрузкойОбъекта - Булево, флаг необходимости вызова обработчика перед +// ПередЗагрузкойОбъекта - Булево - флаг необходимости вызова обработчика перед // загрузкой объекта данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередЗагрузкойОбъекта(), @@ -292,9 +298,9 @@ // для типа которого в качестве базового типа используется абстрактный XDTO-тип // {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}Artefact. Допускается использовать XDTO-пакеты, // помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. -// Отказ - Булево. Если в процедуре ПередЗагрузкойОбъекта() установить значение данного +// Отказ - Булево - если в процедуре ПередЗагрузкойОбъекта() установить значение данного // параметра равным Истина - загрузка объекта данных выполняться не будет. -// ПослеЗагрузкиОбъекта - Булево, флаг необходимости вызова обработчика после +// ПослеЗагрузкиОбъекта - Булево - флаг необходимости вызова обработчика после // загрузки объекта данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПослеЗагрузкиОбъекта(), @@ -315,7 +321,7 @@ // для типа которого в качестве базового типа используется абстрактный XDTO-тип // {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}Artefact. Допускается использовать XDTO-пакеты, // помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. -// ПослеЗагрузкиТипа - Булево, флаг необходимости вызова обработчика после +// ПослеЗагрузкиТипа - Булево - флаг необходимости вызова обработчика после // загрузки всех объектов данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПослеЗагрузкиТипа(), @@ -347,7 +353,7 @@ #Область ОбработчикиВыгрузкиДанных // Параметры: -// Артефакты - Массив -. +// Артефакты - Массив // Процедура ПередВыгрузкойОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты, Отказ) Экспорт @@ -371,9 +377,7 @@ КонецЕсли; МодульОбработчика = ОбщегоНазначения.ОбщийМодуль(Обработчик); - РасширениеФайла = МодульОбработчика.РасширениеФайла(Объект); - ИмяФайла = Контейнер.СоздатьПроизвольныйФайл(РасширениеФайла); Попытка @@ -392,7 +396,8 @@ МодульТехнологияСервиса = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервиса"); Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(МодульТехнологияСервиса.ВерсияБиблиотеки(), "2.0.2.15") >= 0 Тогда - Предупреждение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выгрузка файла %1 (тип %2) пропущена по причине + Предупреждение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выгрузка файла %1 (тип %2) пропущена по причине |%3'"), Объект, Объект.Метаданные().ПолноеИмя(), @@ -461,6 +466,7 @@ // Заполняет очередь извлечения текста для текущей области данных. Используется для начального заполнения при // обновлении. +// Процедура ЗаполнитьОчередьИзвлеченияТекста() Экспорт ЭтоРазделеннаяКонфигурация = Ложь; diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index 24c13f667..3134999c7 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -6,11 +6,6 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Работа с файлами". -// -//////////////////////////////////////////////////////////////////////////////// - #Область СлужебныйПрограммныйИнтерфейс Процедура ОбновитьПрисоединенныйФайл(Знач ПрисоединенныйФайл, Знач ИнформацияОФайле) Экспорт @@ -36,15 +31,16 @@ // Получает данные файла и его двоичные данные. // // Параметры: -// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы, СправочникСсылка.ВерсииФайлов - файл или версия файла. +// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы +// - СправочникСсылка.ВерсииФайлов - файл или версия файла. // АдресПодписи - Строка - навигационная ссылка, содержащая адрес файла подписи во временном хранилище. // ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы. // // Возвращаемое значение: -// Структура - с полями: +// Структура: // * ДанныеФайла - см. ДанныеФайла -// * ДвоичныеДанные - ДвоичныеДанные - . -// * ДвоичныеДанныеПодписи - ДвоичныеДанные - . +// * ДвоичныеДанные - ДвоичныеДанные +// * ДвоичныеДанныеПодписи - ДвоичныеДанные // Функция ДанныеФайлаИДвоичныеДанные(ФайлИлиВерсияСсылка, АдресПодписи = Неопределено, ИдентификаторФормы = Неопределено) Экспорт @@ -97,7 +93,7 @@ // Родитель - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - родительская папка. // Пользователь - СправочникСсылка.Пользователи - ответственный за папку. // ГруппаФайлов - ОпределяемыйТип.ПрисоединенныйФайл - группа (для иерархических справочников файлов). -// РабочийКаталог - Строка - Рабочий каталог папки в файловой системе. +// РабочийКаталог - Строка - рабочий каталог папки в файловой системе. // // Возвращаемое значение: // СправочникСсылка.ПапкиФайлов. @@ -138,9 +134,10 @@ // Создает файл в ИБ вместе с версией. // // Параметры: -// Владелец - СправочникСсылка.ПапкиФайлов, ЛюбаяСсылка - будет установлен в реквизит ВладелецФайла у +// Владелец - СправочникСсылка.ПапкиФайлов +// - ЛюбаяСсылка - будет установлен в реквизит ВладелецФайла у // созданного файла. -// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "ФайлСВерсией". +// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле // // Возвращаемое значение: // СправочникСсылка.Файлы - созданный файл. @@ -150,18 +147,15 @@ НачатьТранзакцию(); Попытка - // Создадим карточку Файла в БД. ФайлСсылка = СоздатьФайл(ВладелецФайла, СведенияОФайле); Версия = Справочники.ВерсииФайлов.ПустаяСсылка(); Если СведенияОФайле.ХранитьВерсии Тогда - // Создадим версию сохраняемого файла для сохранения в карточке Файла. Версия = РаботаСФайламиСлужебный.СоздатьВерсию(ФайлСсылка, СведенияОФайле); - // Подставим ссылку на версию в карточку Файла. КонецЕсли; РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ФайлСсылка, Версия, СведенияОФайле.АдресВременногоХранилищаТекста); Если СведенияОФайле.Кодировка <> Неопределено Тогда - ЗаписатьКодировкуВерсииФайла( + РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла( ?(Версия = Справочники.ВерсииФайлов.ПустаяСсылка(), ФайлСсылка, Версия), СведенияОФайле.Кодировка); КонецЕсли; @@ -228,7 +222,7 @@ // // Параметры: // ДанныеФайла - структура с данными файла. -// СтрокаОшибки - строка, в которой возвращается причина ошибки в случае неуспеха (скажем "Файл занят другим +// СтрокаОшибки - строка - в которой возвращается причина ошибки в случае неуспеха (скажем "Файл занят другим // пользователем"). // УникальныйИдентификатор - уникальный идентификатор формы. // @@ -285,7 +279,8 @@ // Функция возвращает структуру, содержащую различные сведения о файле и версии. // // Параметры: -// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы, СправочникСсылка.ВерсииФайлов - файл или версия файла. +// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы +// - СправочникСсылка.ВерсииФайлов - файл или версия файла. // // Возвращаемое значение: // Структура - структура с данными файла: @@ -336,13 +331,13 @@ ПоместитьВоВременноеХранилище(РаботаСФайлами.ДвоичныеДанныеФайла(ФайлСсылка, ВызыватьИсключение), ИдентификаторФормы)); ДанныеФайла.Вставить("НавигационнаяСсылка", ПолучитьНавигационнуюСсылку(ФайлСсылка)); ДанныеФайла.Вставить("АвторТекущейВерсии", ФайлСсылка.Изменил); - ДанныеФайла.Вставить("Кодировка", РаботаСФайлами.КодировкаФайла(ФайлСсылка, ФайлОбъект.Расширение)); + ДанныеФайла.Вставить("Кодировка", РегистрыСведений.КодировкиФайлов.ОпределитьКодировкуФайла(ФайлСсылка, ФайлОбъект.Расширение)); Иначе ДанныеФайла.Вставить("СсылкаНаДвоичныеДанныеФайла", ПоместитьВоВременноеХранилище(РаботаСФайлами.ДвоичныеДанныеФайла(ВерсияСсылка, ВызыватьИсключение), ИдентификаторФормы)); ДанныеФайла.Вставить("НавигационнаяСсылка", ПолучитьНавигационнуюСсылку(ФайлОбъект.Ссылка)); ДанныеФайла.Вставить("АвторТекущейВерсии", ВерсияСсылка.Автор); - ДанныеФайла.Вставить("Кодировка", РаботаСФайлами.КодировкаФайла(ВерсияСсылка, ФайлОбъект.Расширение)); + ДанныеФайла.Вставить("Кодировка", РегистрыСведений.КодировкиФайлов.ОпределитьКодировкуФайла(ВерсияСсылка, ФайлОбъект.Расширение)); КонецЕсли; Если ДанныеФайла.Зашифрован Тогда @@ -409,8 +404,8 @@ // Функция возвращает структуру, содержащую различные сведения о Файле и версии. // // Возвращаемое значение: -// Структура - с полями: -// * Ссылка - ОпределяемыйТип.ПрисоединенныйФайл - . +// Структура: +// * Ссылка - ОпределяемыйТип.ПрисоединенныйФайл // Функция ДанныеФайлаДляОткрытия(ФайлСсылка, ВерсияСсылка, ИдентификаторФормы = Неопределено, РабочийКаталогВладельца = Неопределено, ПредыдущийАдресФайла = Неопределено) Экспорт @@ -596,7 +591,8 @@ // Создает файл в ИБ. // // Параметры: -// Владелец - СправочникСсылка.ПапкиФайлов, ЛюбаяСсылка - будет установлен в реквизит ВладелецФайла у +// Владелец - СправочникСсылка.ПапкиФайлов +// - ЛюбаяСсылка - будет установлен в реквизит ВладелецФайла у // созданного файла. // СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле // @@ -647,8 +643,7 @@ // // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл, для которого создается новая версия. -// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме -// "ФайлСВерсией". +// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле // ВерсияСсылка - СправочникСсылка.ВерсииФайлов - версия файла, которую надо обновить. // УникальныйИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, // в контексте которой выполняется операция. @@ -656,16 +651,11 @@ // Возвращаемое значение: // СправочникСсылка.ВерсииФайлов - созданная или измененная версия; Неопределено, если файл бинарно не был изменен. // -Функция ОбновитьОбъектФайла(ФайлСсылка, - СведенияОФайле, - ВерсияСсылка = Неопределено, - УникальныйИдентификаторФормы = Неопределено, - Пользователь = Неопределено) +Функция ОбновитьОбъектФайла(ФайлСсылка, СведенияОФайле, ВерсияСсылка = Неопределено, + УникальныйИдентификаторФормы = Неопределено, Пользователь = Неопределено) ЕстьПравоСохранения = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); - ЕстьПраваНаОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, "Ссылка", Истина); - Если ЕстьПраваНаОбъект = Неопределено Тогда Возврат Неопределено; КонецЕсли; @@ -699,7 +689,7 @@ ВерсияСсылкаДляСравненияРазмера = ФайлСсылка; КонецЕсли; - КодировкаПредВерсии = РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ВерсияСсылкаДляСравненияРазмера); + КодировкаПредВерсии = РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ВерсияСсылкаДляСравненияРазмера); СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВерсияСсылкаДляСравненияРазмера, "Размер, ТипХраненияФайла"); @@ -721,10 +711,10 @@ КонецЕсли; - ВерсияЗаблокирована = Ложь; - СсылкаНаВерсию = ?(ВерсияСсылка = Неопределено, ФайлСсылка, ВерсияСсылка); + ВерсияЗаблокирована = Ложь; + Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(СсылкаНаВерсию.Метаданные().ПолноеИмя()); ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаВерсию); @@ -739,14 +729,9 @@ ВерсияЗаблокирована = Истина; - // Удалим файл с диска - мы заместим его новым. Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - СвойстваВерсии = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(); ЗаполнитьЗначенияСвойств(СвойстваВерсии, Версия); - - РаботаСФайламиВТомахСлужебный.УдалитьФайл(РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваВерсии)); - КонецЕсли; Если Пользователь = Неопределено Тогда @@ -793,7 +778,6 @@ Если СведенияОФайле.Зашифрован <> Неопределено Тогда ФайлЗашифрован = СведенияОФайле.Зашифрован; КонецЕсли; - КонецЕсли; ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; @@ -833,8 +817,8 @@ РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификаторФормы); КонецЕсли; - ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии); - + РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии); + ЗафиксироватьТранзакцию(); Исключение @@ -848,7 +832,7 @@ РаботаСФайламиВТомахСлужебный.УдалитьФайл(РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваВерсии)); РаботаСФайламиВТомахСлужебный.ДобавитьФайл(Версия, ДвоичныеДанные, , Истина); КонецЕсли; - + Если ЕстьПравоСохранения Тогда НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(ФайлСсылка); ИсторияРаботыПользователя.Добавить(НавигационнаяСсылкаФайла); @@ -862,7 +846,7 @@ // // Параметры: // ДанныеФайла - Структура - структура с данными файла. -// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "ФайлСВерсией". +// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле // НеМенятьЗаписьВРабочемКаталоге - Булево - не менять запись в регистре сведений ФайлыВРабочемКаталоге. // ПолныйПутьКФайлу - Строка - указывается, если НеМенятьЗаписьВРабочемКаталоге = Ложь. // РабочийКаталогПользователя - Строка - указывается, если НеМенятьЗаписьВРабочемКаталоге = Ложь. @@ -904,8 +888,8 @@ ОсвободитьФайл(ДанныеФайла, УникальныйИдентификаторФормы); Если СведенияОФайле.Кодировка <> Неопределено Тогда - Если Не ЗначениеЗаполнено(РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия)) Тогда - ЗаписатьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия, СведенияОФайле.Кодировка); + Если Не ЗначениеЗаполнено(РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ДанныеФайла.ТекущаяВерсия)) Тогда + РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия, СведенияОФайле.Кодировка); КонецЕсли; КонецЕсли; @@ -929,13 +913,13 @@ // // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл, в котором обновляется версия. -// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "ФайлСВерсией". +// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле // ПолныйПутьКФайлу - Строка // РабочийКаталогПользователя - Строка // УникальныйИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Успешно - Булево - Истина, если создание версии выполнено (и файл бинарно изменен). // * ДанныеФайла - Структура - структура с данными файла. // @@ -953,7 +937,7 @@ // // Параметры: // ДанныеФайла - Структура - структура с данными файла. -// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "ФайлСВерсией". +// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле // НеМенятьЗаписьВРабочемКаталоге - Булево - не менять запись в регистре сведений ФайлыВРабочемКаталоге. // ОтносительныйПутьКФайлу - Строка - относительный путь без пути рабочего каталога, например // "А1/Приказ.doc"; указывается, если НеМенятьЗаписьВРабочемКаталоге = @@ -1006,8 +990,8 @@ КонецЕсли; Если СведенияОФайле.Кодировка <> Неопределено Тогда - Если Не ЗначениеЗаполнено(РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ТекущаяВерсия)) Тогда - ЗаписатьКодировкуВерсииФайла(ТекущаяВерсия, СведенияОФайле.Кодировка); + Если Не ЗначениеЗаполнено(РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ТекущаяВерсия)) Тогда + РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(ТекущаяВерсия, СведенияОФайле.Кодировка); КонецЕсли; КонецЕсли; @@ -1024,7 +1008,7 @@ // Обновляет текстовую порцию из файла в карточке файла. // // Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия. +// ФайлСсылка - СправочникСсылка.Файлы - файл, в котором создается версия. // АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с // файлом текста или ХранилищеЗначения - непосредственно содержит двоичные // данные с файлом текста. @@ -1213,7 +1197,7 @@ // Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файлы. // // Возвращаемое значение: -// Массив из см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла - . +// Массив из см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Функция ПеренестиФайлы(ОбъектыСсылка, Папка) Экспорт @@ -1269,7 +1253,7 @@ // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл. // ДанныеФайла - Структура - структура с данными файла. -// СтрокаОшибки - строка, в которой возвращается причина ошибки в случае неуспеха (скажем "Файл занят другим +// СтрокаОшибки - строка - в которой возвращается причина ошибки в случае неуспеха (скажем "Файл занят другим // пользователем"). // УникальныйИдентификатор - уникальный идентификатор формы. // @@ -1300,7 +1284,7 @@ // Получает ДанныеФайла для файлов и помещает в МассивДанныхФайла. // // Параметры: -// МассивФайлов - Массив из ОпределяемыйТип.ПрисоединенныйФайл -. +// МассивФайлов - Массив из ОпределяемыйТип.ПрисоединенныйФайл // МассивДанныхФайла - Массив - структуры с данными файлов. // Процедура ПолучитьДанныеДляМассиваФайлов(Знач МассивФайлов, МассивДанныхФайла) Экспорт @@ -1317,15 +1301,15 @@ // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл. // ДанныеФайла - Структура - структура с данными файла. -// СтрокаОшибки - строка, в которой возвращается причина ошибки в случае неуспеха (скажем "Файл занят другим +// СтрокаОшибки - строка - в которой возвращается причина ошибки в случае неуспеха (скажем "Файл занят другим // пользователем"). // УникальныйИдентификатор - уникальный идентификатор формы. // РабочийКаталогВладельца - Строка - рабочий каталог владельца файла. // // Возвращаемое значение: -// Структура - с полями: +// Структура: // ДанныеПолучены - Булево - успешно ли выполнена операция получения данных; -// ФайлУжеРедактируетТекущийПользователь - Булево - Файл уже был захвачен для редактирования текущим пользователем. +// ФайлУжеРедактируетТекущийПользователь - Булево - файл уже был захвачен для редактирования текущим пользователем. // Функция ПолучитьДанныеФайлаДляОткрытияИЗанятьФайл(ФайлСсылка, ДанныеФайла, @@ -1382,12 +1366,13 @@ // Выполняет ДанныеФайла и вычисляет РабочийКаталогВладельца. // // Параметры: -// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы, СправочникСсылка.ВерсииФайлов - файл или версия файла. +// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы +// - СправочникСсылка.ВерсииФайлов - файл или версия файла. // РабочийКаталогВладельца - Строка - в ней возвращается рабочий каталог владельца файла. // // Возвращаемое значение: // Структура - структура с данными файла: -// * Ссылка - ОпределяемыйТип.ПрисоединенныйФайл - . +// * Ссылка - ОпределяемыйТип.ПрисоединенныйФайл // Функция ДанныеФайлаИРабочийКаталог(ФайлИлиВерсияСсылка, РабочийКаталогВладельца = Неопределено) Экспорт @@ -1465,7 +1450,7 @@ // // Параметры: // ФайлСсылка - Структура - структура с данными файла. -// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "ФайлСВерсией". +// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле // ОтносительныйПутьКФайлу - Строка - относительный путь без пути рабочего каталога, например // "А1/Приказ.doc"; указывается, если НеМенятьЗаписьВРабочемКаталоге = // Ложь. @@ -1475,7 +1460,7 @@ // УникальныйИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Успешно - Булево - Истина, если создание версии выполнено (и файл бинарно изменен). // * ДанныеФайла - Структура - структура с данными файла. // @@ -1557,12 +1542,12 @@ КонецПроцедуры // Возвращаемое значение: -// Структура - с полями: -// * Файл - Неопределено - . -// * Путь - Неопределено - . -// * Размер - Неопределено - . -// * ДатаПомещенияВРабочийКаталог - Неопределено - . -// * НаЧтение - Неопределено - . +// Структура: +// * Файл - Неопределено +// * Путь - Неопределено +// * Размер - Неопределено +// * ДатаПомещенияВРабочийКаталог - Неопределено +// * НаЧтение - Неопределено // Функция СтруктураЗаписи() @@ -1750,28 +1735,28 @@ // ИмяФайла - Строка - имя файла с относительным путем (без пути к рабочему каталогу). // // Возвращаемое значение: -// Структура со свойствами: +// Структура: // Версия - СправочникСсылка.ВерсииФайлов - найденная версия. -// ДатаПомещения - Дата помещения файла в рабочий каталог. +// ДатаПомещения - дата помещения файла в рабочий каталог. // Владелец - Ссылка - владелец файла. // НомерВерсии - Число - номер версии. // ВРегистреНаЧтение - Булево - значение ресурса НаЧтение. -// ВРегистреКодФайла - Число сюда помещается код файла. +// ВРегистреКодФайла - число сюда помещается код файла. // ВРегистреПапка - СправочникСсылка.ПапкиФайлов - папка файла. // Функция НайтиВРегистреПоПути(ИмяФайла) Экспорт УстановитьПривилегированныйРежим(Истина); - НайденныеСвойства = Новый Структура; - НайденныеСвойства.Вставить("ФайлЕстьВРегистре", Ложь); - НайденныеСвойства.Вставить("Файл", Справочники.ВерсииФайлов.ПустаяСсылка()); - НайденныеСвойства.Вставить("ДатаПомещения"); - НайденныеСвойства.Вставить("Владелец"); - НайденныеСвойства.Вставить("НомерВерсии"); - НайденныеСвойства.Вставить("ВРегистреНаЧтение"); - НайденныеСвойства.Вставить("ВРегистреКодФайла"); - НайденныеСвойства.Вставить("ВРегистреПапка"); + Результат = Новый Структура; + Результат.Вставить("ФайлЕстьВРегистре", Ложь); + Результат.Вставить("Файл", Справочники.ВерсииФайлов.ПустаяСсылка()); + Результат.Вставить("ДатаПомещения"); + Результат.Вставить("Владелец"); + Результат.Вставить("НомерВерсии"); + Результат.Вставить("ВРегистреНаЧтение"); + Результат.Вставить("ВРегистреКодФайла"); + Результат.Вставить("ВРегистреПапка"); // Для каждого по пути находим запись в регистре сведений - оттуда берем поле. // Версия и Размер и ДатаПомещенияВРабочийКаталог. @@ -1818,10 +1803,10 @@ Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); - ЗаполнитьЗначенияСвойств(НайденныеСвойства, Выборка); + ЗаполнитьЗначенияСвойств(Результат, Выборка); - НайденныеСвойства.ФайлЕстьВРегистре = Истина; - НайденныеСвойства.ВРегистреПапка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + Результат.ФайлЕстьВРегистре = Истина; + Результат.ВРегистреПапка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( Выборка.Владелец, "ВладелецФайла"); КонецЕсли; @@ -1833,7 +1818,7 @@ ВызватьИсключение; КонецПопытки; - Возврат НайденныеСвойства; + Возврат Результат; КонецФункции @@ -2073,7 +2058,7 @@ Блокировка = Новый БлокировкаДанных; Для Каждого ФайлПринятый Из МассивСсылокНаФайлы Цикл ЭлементБлокировки = Блокировка.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлПринятый)).ПолноеИмя()); - ЭлементБлокировки.УстановитьЗначение("Ссылка",ФайлПринятый); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ФайлПринятый); КонецЦикла; Блокировка.Заблокировать(); @@ -2127,7 +2112,7 @@ Блокировка = Новый БлокировкаДанных; Для Каждого ФайлПринятый Из МассивСсылокНаФайлы Цикл ЭлементБлокировки = Блокировка.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлПринятый)).ПолноеИмя()); - ЭлементБлокировки.УстановитьЗначение("Ссылка",ФайлПринятый); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ФайлПринятый); КонецЦикла; Блокировка.Заблокировать(); @@ -2151,7 +2136,8 @@ // Получает данные файла для открытия и читает из общих настроек ПапкаДляСохранитьКак. // // Параметры: -// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы, СправочникСсылка.ВерсииФайлов - файл или версия файла. +// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы +// - СправочникСсылка.ВерсииФайлов - файл или версия файла. // ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы. // РабочийКаталогВладельца - Строка - рабочий каталог владельца файла. // @@ -2175,6 +2161,7 @@ // // Возвращаемое значение: // Массив - массив структур с данными файлов. +// Функция ДанныеФайлаИНавигационнаяСсылкаВсехВерсийФайла(ФайлСсылка, ИдентификаторФормы) Экспорт Запрос = Новый Запрос; @@ -2464,6 +2451,7 @@ // // Возвращаемое значение: // Число - число версий +// Функция ПолучитьКоличествоВерсий(ФайлСсылка) УстановитьПривилегированныйРежим(Истина); @@ -2526,6 +2514,22 @@ ПерваяПапкаСТакимЖеИменем = Справочники.ПапкиФайлов.ПустаяСсылка(); + ВыборкаЗапроса = ЗапросВПапки(ИмяПапки, Родитель); + + Если ВыборкаЗапроса.Количество() > 0 Тогда + ПерваяПапкаСТакимЖеИменем = ВыборкаЗапроса.Ссылка; + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * Ссылка - ЛюбаяСсылка. +// +Функция ЗапросВПапки(Знач ИмяПапки, Родитель) ЗапросВПапки = Новый Запрос; ЗапросВПапки.УстановитьПараметр("Наименование", ИмяПапки); ЗапросВПапки.УстановитьПараметр("Родитель", Родитель); @@ -2544,15 +2548,9 @@ КонецЕсли; РезультатЗапроса = ЗапросВПапки.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - ВыборкаЗапроса = РезультатЗапроса.Выгрузить(); - ПерваяПапкаСТакимЖеИменем = ВыборкаЗапроса[0].Ссылка; - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - + ВыборкаЗапроса = РезультатЗапроса.Выбрать(); + ВыборкаЗапроса.Следующий(); + Возврат ВыборкаЗапроса КонецФункции Функция ФайлСинхронизируетсяОблачнымСервисом(Файл) @@ -2656,8 +2654,8 @@ // // Параметры: // ДанныеФайла - см. ДанныеФайла -// РазмерФайла - Число - . -// УникальныйИдентификатор - УникальныйИдентификатор -. +// РазмерФайла - Число +// УникальныйИдентификатор - УникальныйИдентификатор // Процедура ОбновитьРазмерФайлаИВерсии(ДанныеФайла, РазмерФайла, УникальныйИдентификатор) Экспорт @@ -2698,20 +2696,9 @@ КонецПроцедуры -// Записывает кодировку версии файла. -// -// Параметры: -// ВерсияСсылка - СправочникСсылка.ВерсииФайлов - ссылка на версию файла. -// Кодировка - Строка - новая кодировка версии файла. -// Процедура ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка) Экспорт - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписи = РегистрыСведений.КодировкиФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Файл = ВерсияСсылка; - МенеджерЗаписи.Кодировка = Кодировка; - МенеджерЗаписи.Записать(Истина); + РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка); КонецПроцедуры @@ -2719,12 +2706,12 @@ // // Параметры: // ВерсияСсылка - ссылка на версию файла. -// Кодировка - Строка кодировки. +// Кодировка - строка кодировки. // ИзвлеченныйТекст - текст, извлеченный из файла. // Процедура ЗаписатьКодировкуВерсииФайлаИИзвлеченныйТекст(ВерсияСсылка, Кодировка, ИзвлеченныйТекст) Экспорт - ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка); + РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка); ЗаписатьРезультатИзвлеченияТекстаПриРедактировании(ВерсияСсылка, Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен, ИзвлеченныйТекст); @@ -2758,9 +2745,23 @@ НачатьТранзакцию(); Попытка + Если ТипЗнч(Файл) = Тип("СправочникСсылка.Файлы") Тогда + ФайлДляСравнения = Файл.ТекущаяВерсия; + Иначе + ФайлДляСравнения = ВерсияСсылка; + КонецЕсли; + БлокировкаВерсии = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаВерсии.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ВерсияСсылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ВерсияСсылка); + + Если ФайлДляСравнения = ВерсияСсылка Тогда + БлокировкаФайла = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаФайла.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Файл)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Файл); + БлокировкаФайла.Заблокировать(); + КонецЕсли; + БлокировкаВерсии.Заблокировать(); ВерсияОбъект = ВерсияСсылка.ПолучитьОбъект(); @@ -2795,18 +2796,7 @@ ВерсияОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); ВерсияОбъект.Записать(); - Если ТипЗнч(Файл) = Тип("СправочникСсылка.Файлы") Тогда - ФайлДляСравнения = Файл.ТекущаяВерсия; - Иначе - ФайлДляСравнения = ВерсияСсылка; - КонецЕсли; - Если ФайлДляСравнения = ВерсияСсылка Тогда - БлокировкаФайла = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаФайла.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Файл)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Файл); - БлокировкаФайла.Заблокировать(); - ФайлОбъект = Файл.ПолучитьОбъект(); ФайлОбъект.ТекстХранилище = ВерсияОбъект.ТекстХранилище; // Чтобы прошла запись ранее подписанного объекта. @@ -2834,6 +2824,7 @@ ////////////////////////////////////////////////////////////////////////////////////////////////// ///// Общие файловые функции // См. эту процедуру в модуле РаботаСФайламиСлужебный. +// Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, РезультатИзвлечения, АдресВременногоХранилищаТекста) Экспорт diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index 197e5ba55..ab20fe908 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -23,8 +23,8 @@ // Открывает форму папки со списком файлов. // // Параметры: -// СтандартнаяОбработка - Булево - Передается "как есть" из параметров обработчика "Открытие". -// Папка - СправочникСсылка.Файлы - Открываемая папка. +// СтандартнаяОбработка - Булево - передается "как есть" из параметров обработчика "Открытие". +// Папка - СправочникСсылка.Файлы - открываемая папка. // // Места использования: // Справочник.РассылкиОтчетов.Форма.ФормаЭлемента.ПапкаОткрытие(). @@ -88,7 +88,7 @@ // * ИмяСоздаваемогоФайла - Строка - Необязательный. Новое имя файла. // // Возвращаемое значение: -// Структура - Результат. +// Структура: // * ФайлДобавлен - Булево - успешно ли выполнена операция. // * ФайлСсылка - СправочникСсылка.Файлы // * ТекстОшибки - Строка. @@ -315,8 +315,9 @@ // Показывает стандартное предупреждение. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// ПредставлениеКоманды - Строка - Необязательный. Имя команды, для выполнения которой необходимо расширение. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. +// ПредставлениеКоманды - Строка - необязательный. Имя команды, для выполнения которой необходимо расширение. // Процедура ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(ОбработчикРезультата, ПредставлениеКоманды = "") Экспорт Если Не КлиентПоддерживаетСинхронныеВызовы() Тогда @@ -578,7 +579,7 @@ // Нажатие команды "Показывать служебные файлы" в списке файлов. // // Параметры: -// Список - ДинамическийСписок -. +// Список - ДинамическийСписок // // Возвращаемое значение: // Булево - отображение служебных файлов в списке. @@ -647,7 +648,7 @@ // * Объект - ДанныеФормыСтруктура - как у объекта со свойствами Ссылка, Зашифрован. // Например, СправочникОбъект.Файл, СправочникОбъект.ДокументПрисоединенныеФайлы. // -// * ЭлектронныеПодписи - ДанныеФормыКоллекция - с полями: +// * ЭлектронныеПодписи - ДанныеФормыКоллекция: // * ДатаПроверкиПодписи - Дата - (возвращаемое значение) - дата проверки. // * Статус - Строка - (возвращаемое значение) - результат проверки. // * АдресПодписи - Строка - адрес данных подписи во временном хранилище. @@ -709,7 +710,7 @@ // Для формы файла. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - . +// Форма - ФормаКлиентскогоПриложения // Процедура УстановитьДоступностьКомандСпискаЭлектронныхПодписей(Форма) Экспорт @@ -736,7 +737,7 @@ // Для формы файла. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - . +// Форма - ФормаКлиентскогоПриложения // Процедура УстановитьДоступностьКомандСпискаСертификатовШифрования(Форма) Экспорт @@ -797,11 +798,6 @@ #Иначе - Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); - Возврат; - КонецЕсли; - СистемнаяИнформация = Новый СистемнаяИнформация(); ПараметрыФормы = Новый Структура("ВладелецФайла, ЭтоФайл, НеОткрыватьКарточкуПослеСозданияИзФайла, ТолькоОдинФайл"); @@ -824,8 +820,9 @@ // Открыть версию файла. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// ДанныеФайла - Структура с данными файла. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. +// ДанныеФайла - структура с данными файла. // УникальныйИдентификатор - УникальныйИдентификатор формы. // Процедура ОткрытьВерсиюФайла(ОбработчикРезультата, ДанныеФайла, УникальныйИдентификатор = Неопределено) Экспорт @@ -1103,7 +1100,6 @@ Процедура ПроверитьПодписиЦиклНачало(ДополнительныеПараметры) Если ДополнительныеПараметры.Коллекция.Количество() <= ДополнительныеПараметры.Индекс + 1 Тогда - ДополнительныеПараметры.Форма.ОбновитьОтображениеДанных(); Возврат; КонецЕсли; @@ -1127,10 +1123,11 @@ // если требуется уточняет у пользователя и возвращает действие. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ИмяФайлаСПутем - Строка - полное имя файла с путем в рабочем каталоге. // -// ДанныеФайла - Структура со свойствами: +// ДанныеФайла - Структура: // Размер - Число. // ДатаМодификацииУниверсальная - Дата. // ВРабочемКаталогеНаЧтение - Булево. @@ -1334,7 +1331,8 @@ // если включена настройка "Показывать подсказки при редактировании файлов". // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // Процедура ВывестиНапоминаниеПриРедактировании(ОбработчикРезультата) ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); @@ -1453,7 +1451,7 @@ // // Параметры: // ВыбранныеФайлы - Массив - пути к файлам на диске. -// ВладелецФайла - Ссылка на владельца файла. +// ВладелецФайла - ссылка на владельца файла. // НастройкиРаботыСФайлами - Структура. // ПрисоединенныеФайлыМассив - Массив Из возвращаемое значение - заполняется ссылками // на добавленные файлы. @@ -1583,7 +1581,7 @@ // Неопределено, если файл не был помещен; // ДополнительныеПараметры - Произвольный - значение, которое было указано при создании // объекта оповещения. -// ВладелецФайла - Ссылка на владельца файла. +// ВладелецФайла - ссылка на владельца файла. // НастройкиРаботыСФайлами - Структура. // ИдентификаторФормы - УникальныйИдентификатор формы. // @@ -1669,7 +1667,7 @@ // // Редактирует - СправочникСсылка.Пользователи - тот, кто занял файл. // -// СтрокаОшибки - Строка, в которой возвращается причина ошибки в случае неуспеха +// СтрокаОшибки - Строка - в которой возвращается причина ошибки в случае неуспеха // (например, "Файл занят другим пользователем"). // // Возвращаемое значение: @@ -1734,7 +1732,7 @@ // Освобождает файл без обновления. // // Параметры: -// ДанныеФайла - Структура с данными файла. +// ДанныеФайла - структура с данными файла. // УникальныйИдентификатор - УникальныйИдентификатор управляемой формы. // Процедура ОсвободитьФайлБезВопроса(ДанныеФайла, УникальныйИдентификатор = Неопределено) @@ -1815,7 +1813,7 @@ // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: -// Строка - +// Строка // Функция СобытиеЖурналаРегистрации() @@ -1841,9 +1839,9 @@ // Проверяет расширение файла и размер. // // Параметры: -// Файл - Файл - . -// ВызыватьИсключение - Булево - . -// МассивИменФайловСОшибками - Массив - . +// Файл - Файл +// ВызыватьИсключение - Булево +// МассивИменФайловСОшибками - Массив // Функция ПроверитьВозможностьЗагрузкиФайла(Файл, ВызыватьИсключение = Истина, МассивИменФайловСОшибками = Неопределено) @@ -2180,28 +2178,15 @@ Если ПараметрыВыполнения.ПереданныйПолныйПутьКФайлу = "" Тогда - Если ПараметрыВыполнения.Свойство("УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования2") Тогда - - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ПараметрыВыполнения.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования2; - ЗадаватьВопрос = Ложь; - Иначе - - ПерсональныеНастройкиРаботыСФайлами = ПерсональныеНастройкиРаботыСФайлами(); - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ПерсональныеНастройкиРаботыСФайлами.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования; - ЗадаватьВопрос = ПерсональныеНастройкиРаботыСФайлами.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов; - - Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Неопределено Тогда - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; - КонецЕсли; - - Если ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> "" Тогда - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; - КонецЕсли; + ПерсональныеНастройкиРаботыСФайлами = ПерсональныеНастройкиРаботыСФайлами(); + УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ПерсональныеНастройкиРаботыСФайлами.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования; + Если ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> "" Тогда + УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; КонецЕсли; Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования Тогда Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеСРасширениемПослеУдаленияФайлаИзРабочегоКаталога", ЭтотОбъект, ПараметрыВыполнения); - УдалитьФайлИзРабочегоКаталога(Обработчик, НоваяВерсия, УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования, ЗадаватьВопрос); + УдалитьФайлИзРабочегоКаталога(Обработчик, НоваяВерсия, УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования); Возврат; Иначе Файл = Новый Файл(ПараметрыВыполнения.ПолныйПутьКФайлу); @@ -2224,7 +2209,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - где: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог // Процедура ЗакончитьРедактированиеСРасширениемПослеУдаленияФайлаИзРабочегоКаталога(Результат, ПараметрыВыполнения) Экспорт @@ -2271,7 +2256,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - где: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог // Процедура ЗакончитьРедактированиеСРасширениемОбработкаИсключения(ИнформацияОбОшибке, ПараметрыВыполнения) @@ -2476,7 +2461,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - где: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог // Процедура ЗакончитьРедактированиеБезРасширенияПослеШифрованияФайла(ОписаниеДанных, ПараметрыВыполнения) Экспорт @@ -2591,7 +2576,8 @@ // Выбирает на диске файл и создает из него новую версию. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей // результат работы метода, с параметрами: // * Результат - Булево - Истина, если файл обновлен. // * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта @@ -2744,7 +2730,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - где: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог // Процедура ОбновитьИзФайлаНаДискеПередРасшифровкой(ПомещаемыеФайлы, ПараметрыВыполнения) Экспорт @@ -2812,7 +2798,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - где: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог // Процедура ОбновитьИзФайлаНаДискеПродолжение(ПараметрыВыполнения) @@ -2911,7 +2897,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - где: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог // Процедура ОбновитьИзФайлаНаДискеПослеУдаленияФайлаИзРабочегоКаталога(Результат, ПараметрыВыполнения) Экспорт @@ -2962,7 +2948,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - где: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог // Процедура ОбновитьИзФайлаНаДискеПослеПолученияФайлаВРабочийКаталог(Результат, ПараметрыВыполнения) Экспорт @@ -3011,7 +2997,8 @@ // Помечает файл, как занятый для редактирования. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода: // * Результат - Булево - Истина, если операция выполнена успешно. // * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта // ОписаниеОповещения. @@ -3072,7 +3059,8 @@ // Помечает файлы, как занятые для редактирования. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // МассивФайлов - Массив - массив файлов. // Процедура ЗанятьФайлыПоСсылкам(ОбработчикРезультата, Знач МассивФайлов) @@ -3145,7 +3133,8 @@ // Открывает файл для редактирования. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ОбъектСсылка - СправочникСсылка.Файлы - файл. // УникальныйИдентификатор - УникальныйИдентификатор формы. // РабочийКаталогВладельца - Строка - рабочий каталог владельца. @@ -3270,8 +3259,9 @@ // Открывает файл для редактирования. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// ДанныеФайла - Структура с данными файла. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. +// ДанныеФайла - структура с данными файла. // УникальныйИдентификатор - УникальныйИдентификатор формы. // Процедура РедактироватьФайл(ОбработчикРезультата, ДанныеФайла, УникальныйИдентификатор = Неопределено) Экспорт @@ -3313,7 +3303,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - где: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия // Процедура РедактироватьФайлПослеЗанятияФайла(ДанныеФайла, ПараметрыВыполнения) Экспорт @@ -3379,8 +3369,8 @@ // Продолжение процедуры (см. выше). // // Параметры: -// РасширениеУстановлено - Булево - . -// ПараметрыВыполнения - Структура - где: +// РасширениеУстановлено - Булево +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия // Процедура ОткрытьВерсиюФайлаПослеУстановкиРасширения(РасширениеУстановлено, ПараметрыВыполнения) Экспорт @@ -3425,7 +3415,8 @@ // Освобождает файлы без обновления. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // МассивФайлов - Массив - массив файлов. // Процедура ОсвободитьФайлыПоСсылкам(ОбработчикРезультата, Знач МассивФайлов) @@ -3486,9 +3477,10 @@ // Продолжение процедуры (см. выше). // // Параметры: -// Ответ - КодВозвратаДиалога, Неопределено - . -// ПараметрыВыполнения - Структура - со свойствами: -// * ДанныеФайлов - Массив из см. РаботаСФайлами.ДанныеФайла - . +// Ответ - КодВозвратаДиалога +// - Неопределено +// ПараметрыВыполнения - Структура: +// * ДанныеФайлов - Массив из см. РаботаСФайлами.ДанныеФайла // Процедура ОсвободитьФайлыПоСсылкамПослеОтветаНаВопросОтменитьРедактирование(Ответ, ПараметрыВыполнения) Экспорт @@ -3525,8 +3517,9 @@ // Освобождение файла без обновления. // Возвращаемое значение: -// Структура - со свойствами: -// * ОбработчикРезультата - ОписаниеОповещения, Неопределено - описание процедуры, принимающей результат работы +// Структура: +// * ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы // метода. // * ОбъектСсылка - СправочникСсылка.Файлы - файл. // * Версия - СправочникСсылка.ВерсииФайлов - версия файла. @@ -3843,7 +3836,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - где: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог // Процедура СохранитьИзмененияФайлаСРасширениемПослеПроверкиЗашифрован(Неопределен, ПараметрыВыполнения) Экспорт @@ -4225,12 +4218,13 @@ // Пометка файла как занятого для редактирования. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ДанныеФайла - структура с данными файла. // // Возвращаемое значение: -// * Неопределено - Если файл не занят. -// * Структура с данными файла - Если файл занят. +// * Неопределено - если файл не занят. +// * Структура с данными файла - если файл занят. // Процедура ЗанятьФайл(ОбработчикРезультата, ДанныеФайла, УникальныйИдентификатор) @@ -4248,8 +4242,8 @@ // Продолжение процедуры (см. выше). // // Параметры: -// РасширениеУстановлено - Булево - . -// ПараметрыВыполнения - Структура - с полями: +// РасширениеУстановлено - Булево +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура ЗанятьФайлПослеУстановкиРасширения(РасширениеУстановлено, ПараметрыВыполнения) Экспорт @@ -4346,7 +4340,7 @@ // Удаление файла со снятием атрибута readonly без диалогов. // // Параметры: -// ПолноеИмяФайла - Строка - Полное имя файла. +// ПолноеИмяФайла - Строка - полное имя файла. // Процедура УдалитьФайлБезПодтверждения(ПолноеИмяФайла) @@ -4361,54 +4355,18 @@ // Удаление файла со снятием атрибута readonly. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Структура, Неопределено - Описание процедуры, принимающей результат +// ОбработчикРезультата - ОписаниеОповещения +// - Структура +// - Неопределено - описание процедуры, принимающей результат // работы метода. -// ПолноеИмяФайла - Строка - Полное имя файла. -// ЗадаватьВопрос - Булево- Задавать вопрос об удалении. -// ШапкаВопроса - Строка - Шапка вопроса - добавляет текст к вопросу об удалении. +// ПолноеИмяФайла - Строка - полное имя файла. +// ЗадаватьВопрос - Булево- задавать вопрос об удалении. +// ШапкаВопроса - Строка - шапка вопроса - добавляет текст к вопросу об удалении. // -Процедура УдалитьФайл(ОбработчикРезультата, ПолноеИмяФайла, ЗадаватьВопрос = Неопределено, ШапкаВопроса = Неопределено) +Процедура УдалитьФайл(Знач ОбработчикРезультата, ПолноеИмяФайла) - Если ЗадаватьВопрос = Неопределено Тогда - ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); - ЗадаватьВопрос = ПерсональныеНастройки.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов; - КонецЕсли; - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); - ПараметрыВыполнения.Вставить("ПолноеИмяФайла", ПолноеИмяФайла); - - Если ЗадаватьВопрос = Истина Тогда - ТекстВопроса = - НСтр("ru = 'Удалить файл ""%1"" - |из рабочего каталога?'"); - ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ПолноеИмяФайла); - Если ШапкаВопроса <> Неопределено Тогда - ТекстВопроса = ШапкаВопроса + Символы.ПС + Символы.ПС + ТекстВопроса; - КонецЕсли; - ПараметрыВыполнения.ОбработчикРезультата = ОбработчикЗавершения(ПараметрыВыполнения.ОбработчикРезультата); - Обработчик = Новый ОписаниеОповещения("УдалитьФайлПослеОтветаНаВопрос", ЭтотОбъект, ПараметрыВыполнения); - ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет); - Возврат; - КонецЕсли; - - УдалитьФайлПослеОтветаНаВопрос(-1, ПараметрыВыполнения); - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -Процедура УдалитьФайлПослеОтветаНаВопрос(Ответ, ПараметрыВыполнения) Экспорт - - Если Ответ <> -1 Тогда - Если Ответ = КодВозвратаДиалога.Нет Тогда - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Ложь); - Возврат; - КонецЕсли; - КонецЕсли; - - УдалитьФайлБезПодтверждения(ПараметрыВыполнения.ПолноеИмяФайла); - - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Истина); + УдалитьФайлБезПодтверждения(ПолноеИмяФайла); + ВернутьРезультат(ОбработчикРезультата, Истина); КонецПроцедуры @@ -4419,16 +4377,17 @@ // и возвращает путь к этому файлу. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// ДанныеФайла - Структура с данными файла. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. +// ДанныеФайла - структура с данными файла. // ПолноеИмяФайла - Строка. // НаЧтение - Булево - Ложь - для чтения, Истина для редактирования. // ИдентификаторФормы - УникальныйИдентификатор формы. // // Возвращаемое значение: -// Структура - Результат. -// * ФайлПолучен - Булево - Успешно ли выполнена операция. -// * ПолноеИмяФайла - Строка - Полное имя файла. +// Структура: +// * ФайлПолучен - Булево - успешно ли выполнена операция. +// * ПолноеИмяФайла - Строка - полное имя файла. // Процедура ПолучитьФайлВерсииВЛокальныйКэшФайлов( ОбработчикРезультата, @@ -4528,8 +4487,8 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - со свойствами: -// * ДополнительныеПараметры - см. ПолучитьФайлВерсииВЛокальныйКэшФайлов.ДополнительныеПараметры - . +// ПараметрыВыполнения - Структура: +// * ДополнительныеПараметры - см. ПолучитьФайлВерсииВЛокальныйКэшФайлов.ДополнительныеПараметры // Процедура ПолучитьФайлВерсииВЛокальныйКэшФайловПослеУдаления(ФайлУдален, ПараметрыВыполнения) Экспорт @@ -4551,15 +4510,16 @@ // к этому файлу в параметре. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ДанныеФайла - структура с данными файла. // ПолноеИмяФайла - Строка - здесь возвращается полное имя файла. // ИдентификаторФормы - уникальный идентификатор формы. // // Возвращаемое значение: -// Структура - Результат получения файла. -// * ФайлПолучен - Булево - Успешно ли выполнена операция. -// * ПолноеИмяФайла - Строка - Полное имя файла. +// Структура - результат получения файла: +// * ФайлПолучен - Булево - успешно ли выполнена операция. +// * ПолноеИмяФайла - Строка - полное имя файла. // Процедура ПолучитьФайлВерсииВРабочийКаталог( ОбработчикРезультата, @@ -4944,7 +4904,8 @@ // Процедура открывает проводник Windows, позиционируясь на Файл. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура КаталогФайла(ОбработчикРезультата, ДанныеФайла) Экспорт @@ -5020,15 +4981,16 @@ // Удалить с диска и из регистра сведений. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // Ссылка - СправочникСсылка.Файлы - файл. -// УдалитьВРабочемКаталоге - Булево - Удалить даже в рабочем каталоге. +// УдалитьВРабочемКаталоге - Булево - удалить даже в рабочем каталоге. // // Возвращаемое значение: -// Структура - Результат удаления файла с диска и регистра сведений. +// Структура - результат удаления файла с диска и регистра сведений: // * Успех - Булево - успешно ли выполнена операция. // -Процедура УдалитьФайлИзРабочегоКаталога(ОбработчикРезультата, Ссылка, УдалитьВРабочемКаталоге = Ложь, ЗадаватьВопрос = Истина) Экспорт +Процедура УдалитьФайлИзРабочегоКаталога(ОбработчикРезультата, Ссылка, УдалитьВРабочемКаталоге = Ложь) ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); @@ -5055,7 +5017,7 @@ ОбработчикЗавершения = Новый ОписаниеОповещения("УдалитьФайлИзРабочегоКаталогаПослеУдаленияФайла", ЭтотОбъект); ЗарегистрироватьОбработчикЗавершения(ПараметрыВыполнения, ОбработчикЗавершения); - УдалитьФайл(ПараметрыВыполнения, ПараметрыВыполнения.ПолноеИмяФайлаИзРегистра, ЗадаватьВопрос); + УдалитьФайл(ПараметрыВыполнения, ПараметрыВыполнения.ПолноеИмяФайлаИзРегистра); Если ПараметрыВыполнения.АсинхронныйДиалог.Открыт = Истина Тогда Возврат; КонецЕсли; @@ -5115,19 +5077,20 @@ // Освободить место для помещения файла - если место есть, ничего не делает. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // РеквизитыВерсии - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура ОсвободитьМестоВРабочемКаталоге(ОбработчикРезультата, РеквизитыВерсии) - #Если ВебКлиент Тогда - // В веб-клиенте нельзя определить количество свободного места на диске. - ВернутьРезультатПослеПоказаПредупреждения( - ОбработчикРезультата, - НСтр("ru = 'Очистка рабочего каталога не поддерживается в веб-клиенте.'"), - Неопределено); - Возврат; - #КонецЕсли +#Если ВебКлиент Тогда + // В веб-клиенте нельзя определить количество свободного места на диске. + ВернутьРезультатПослеПоказаПредупреждения( + ОбработчикРезультата, + НСтр("ru = 'Очистка рабочего каталога возможна только в тонком клиенте.'"), + Неопределено); + Возврат; +#КонецЕсли МаксРазмер = ПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерЛокальногоКэшаФайлов; @@ -5157,17 +5120,18 @@ // наиболее давно помещенные в рабочий каталог. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // РазмерФайловВРабочемКаталоге - Число - размер файлов в рабочем каталоге. -// РазмерДобавляемогоФайла - Число - Размер добавляемого файла. -// ОчищатьВсе - Булево - Удалять все файлы в каталоге (а не только до освобождения нужного объема места на диске). +// РазмерДобавляемогоФайла - Число - размер добавляемого файла. +// ОчищатьВсе - Булево - удалять все файлы в каталоге (а не только до освобождения нужного объема места на диске). // Процедура ОчиститьРабочийКаталог(ОбработчикРезультата, РазмерФайловВРабочемКаталоге, РазмерДобавляемогоФайла, ОчищатьВсе) Экспорт - #Если ВебКлиент Тогда - ВернутьРезультатПослеПоказаПредупреждения(ОбработчикРезультата, НСтр("ru = 'Очистка рабочего каталога не поддерживается в веб-клиенте.'"), Неопределено); - Возврат; - #КонецЕсли +#Если ВебКлиент Тогда + ВернутьРезультатПослеПоказаПредупреждения(ОбработчикРезультата, НСтр("ru = 'Очистка рабочего каталога не поддерживается в веб-клиенте.'"), Неопределено); + Возврат; +#КонецЕсли ПараметрыОбработчика = Новый Структура; ПараметрыОбработчика.Вставить("ОбработчикРезультата", ОбработчикРезультата); @@ -5223,8 +5187,8 @@ КонецПроцедуры // Параметры: -// ПараметрыВыполнения - Структура - с полями: -// * ТаблицаФайлов - Массив из см. ДанныеФайловВРабочемКаталоге - +// ПараметрыВыполнения - Структура: +// * ТаблицаФайлов - Массив из см. ДанныеФайловВРабочемКаталоге // Процедура ОчиститьРабочийКаталогДляОткрываемогоФайла(ПараметрыВыполнения) @@ -5233,7 +5197,7 @@ ПолныйПуть = ПараметрыВыполнения.ИмяКаталога + Элемент.Путь; ФайлНаДиске = Новый Файл(ПолныйПуть); ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - УдалитьФайл(ПараметрыВыполнения, ПолныйПуть, Ложь); + УдалитьФайл(ПараметрыВыполнения, ПолныйПуть); ПутьСПодкаталогом = ПараметрыВыполнения.ИмяКаталога; Позиция = СтрНайти(Элемент.Путь, ПолучитьРазделительПути()); @@ -5269,7 +5233,8 @@ // Получить Файл с сервера и зарегистрировать в локальном кэше. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ДанныеФайла - структура с данными файла. // ПолноеИмяФайлаВРабочемКаталоге - Строка - здесь возвращается полное имя файла. // ДатаФайлаВБазе - Дата - дата файла в базе. @@ -5277,9 +5242,9 @@ // ИдентификаторФормы - уникальный идентификатор формы. // // Возвращаемое значение: -// Структура - Результат. -// * ФайлПолучен - Булево - Успешно ли выполнена операция. -// * ПолноеИмяФайла - Строка - Полное имя файла. +// Структура: +// * ФайлПолучен - Булево - успешно ли выполнена операция. +// * ПолноеИмяФайла - Строка - полное имя файла. // Процедура ПолучитьССервераИЗарегистрироватьВЛокальномКэшеФайлов(ОбработчикРезультата, ДанныеФайла, @@ -5306,7 +5271,7 @@ // Освободить место для помещения файла - если место есть, ничего не делает. // // Параметры: -// ПараметрыВыполнения - Структура - где: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура ПолучитьССервераИЗарегистрироватьВЛокальномКэшеФайловЗапуск(ПараметрыВыполнения) @@ -5447,7 +5412,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура ПолучитьССервераИЗарегистрироватьВЛокальномКэшеФайловПродолжение(ПараметрыВыполнения) @@ -5651,16 +5616,17 @@ // и возвращает путь к этому файлу. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// ДанныеФайла - Структура с данными файла. -// ПолноеИмяФайла - Строка (возвращаемое значение). +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. +// ДанныеФайла - структура с данными файла. +// ПолноеИмяФайла - строка (возвращаемое значение). // НаЧтение - Булево - Ложь - для чтения, Истина для редактирования. // ИдентификаторФормы - УникальныйИдентификатор формы. // // Возвращаемое значение: -// Структура - Результат. -// * ФайлПолучен - Булево - Успешно ли выполнена операция. -// * ПолноеИмяФайла - Строка - Полное имя файла. +// Структура: +// * ФайлПолучен - Булево - успешно ли выполнена операция. +// * ПолноеИмяФайла - Строка - полное имя файла. // Процедура ПолучитьФайлВерсииВРабочийКаталогПапки(ОбработчикРезультата, ДанныеФайла, @@ -5684,7 +5650,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура ПолучитьФайлВерсииВРабочийКаталогПапкиЗапуск(ПараметрыВыполнения) @@ -5726,7 +5692,7 @@ НайденныеСвойства = РаботаСФайламиСлужебныйВызовСервера.НайтиВРегистреПоПути(ПараметрыВыполнения.ПолноеИмяФайла); ПараметрыВыполнения.Вставить("ФайлЕстьВРегистре", НайденныеСвойства.ФайлЕстьВРегистре); Версия = НайденныеСвойства.Файл; - ДатаПомещения = ?(ПараметрыВыполнения.ФайлЕстьВРегистре, НайденныеСвойства.ДатаПомещения, ДатаПомещения); + ДатаПомещения = ?(ПараметрыВыполнения.ФайлЕстьВРегистре, НайденныеСвойства.ДатаПомещения, Дата(1, 1, 1, 1, 1, 1)); Владелец = НайденныеСвойства.Владелец; ВРегистреНаЧтение = НайденныеСвойства.ВРегистреНаЧтение; ВРегистреПапка = НайденныеСвойства.ВРегистреПапка; @@ -5810,7 +5776,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: +// ПараметрыВыполнения - Структура: // * ДополнительныеПараметры - см. ПолучитьФайлВерсииВРабочийКаталогПапки.ДополнительныеПараметры // Процедура ПолучитьФайлВерсииВРабочийКаталогПапкиПослеВыбораДействия(Результат, ПараметрыВыполнения) Экспорт @@ -5858,7 +5824,8 @@ // Получить Файл с сервера и зарегистрировать в рабочем каталоге. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ДанныеФайла - структура с данными файла. // ПолноеИмяФайлаВРабочемКаталоге - Строка - здесь возвращается полное имя файла. // ДатаФайлаВБазе - Дата - дата файла в базе. @@ -5867,9 +5834,9 @@ // ДополнительныеПараметры - Произвольный - дополнительные параметры обработки. // // Возвращаемое значение: -// Структура - Результат. -// * ФайлПолучен - Булево - Успешно ли выполнена операция. -// * ПолноеИмяФайла - Строка - Полное имя файла. +// Структура: +// * ФайлПолучен - Булево - успешно ли выполнена операция. +// * ПолноеИмяФайла - Строка - полное имя файла. // Процедура ПолучитьССервераИЗарегистрироватьВРабочемКаталогеПапки( ОбработчикРезультата, @@ -5943,7 +5910,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: +// ПараметрыВыполнения - Структура: // * ДополнительныеПараметры - см. ПолучитьССервераИЗарегистрироватьВРабочемКаталогеПапки.ДополнительныеПараметры // Процедура ПолучитьССервераИЗарегистрироватьВРабочемКаталогеПапкиПослеВыбораДействия(Результат, ПараметрыВыполнения) Экспорт @@ -5990,13 +5957,14 @@ // Проверяет максимальную длину, если нужно - меняет рабочий каталог и переносит файлы. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ДанныеФайла - структура с данными файла. // ПолноеИмяФайла - Строка - полное имя файла. // НормальноеИмяФайла - Строка - имя файла (без пути). // // Возвращаемое значение: -// Булево - Успешно ли выполнена операция. +// Булево - успешно ли выполнена операция: // * Истина если длина полного имени файла не превышает 260. // Процедура ПроверитьМаксимальнуюДлинуПолногоПутиВРабочемКаталоге(ОбработчикРезультата, @@ -6015,7 +5983,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура ПроверитьМаксимальнуюДлинуПолногоПутиВРабочемКаталогеЗапуск(ПараметрыВыполнения) @@ -6134,17 +6102,18 @@ // Копирует все файлы в указанном каталоге в другой каталог. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // КаталогИсточника - Строка - прежнее имя каталога. // КаталогПриемника - Строка - новое имя каталога. // // Возвращаемое значение: -// Структура - Результат копирования. +// Структура: // * ВозниклаОшибка - Булево - Истина когда все файлы скопированы. -// * ИнформацияОбОшибке - ИнформацияОбОшибке - Информация об ошибке. -// * ПолноеИмяСбойногоФайла - Строка - Полное имя файла, при копировании которого возникла ошибка. -// * СкопированныеФайлыИПапки - Массив - Полные имена файлов и папок приемника. -// * ОригинальныеФайлыИПапки - Массив - Полные имена файлов и папок источника. +// * ИнформацияОбОшибке - ИнформацияОбОшибке - информация об ошибке. +// * ПолноеИмяСбойногоФайла - Строка - полное имя файла, при копировании которого возникла ошибка. +// * СкопированныеФайлыИПапки - Массив - полные имена файлов и папок приемника. +// * ОригинальныеФайлыИПапки - Массив - полные имена файлов и папок источника. // Процедура СкопироватьСодержимоеКаталога(ОбработчикРезультата, Знач КаталогИсточника, Знач КаталогПриемника) @@ -6200,7 +6169,7 @@ // Копирует все файлы в указанном каталоге в другой каталог. // // Параметры: -// Результат - Структура - Результат копирования. См. СкопироватьСодержимоеКаталога(), возвращаемое значение. +// Результат - Структура - результат копирования. См. СкопироватьСодержимоеКаталога(), возвращаемое значение. // КаталогИсточника - Строка - прежнее имя каталога. // КаталогПриемника - Строка - новое имя каталога. // @@ -6260,12 +6229,13 @@ // Переносит все файлы в рабочем каталоге в другой каталог (в том числе и взятые на редактирование). // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// КаталогИсточника - Строка - Прежнее имя каталога. -// КаталогПриемника - Строка - Новое имя каталога. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. +// КаталогИсточника - Строка - прежнее имя каталога. +// КаталогПриемника - Строка - новое имя каталога. // // Возвращаемое значение: -// Булево - Успешно ли выполнена операция. +// Булево - успешно ли выполнена операция. // Процедура ПеренестиСодержимоеРабочегоКаталога(ОбработчикРезультата, КаталогИсточника, КаталогПриемника) Экспорт @@ -6366,11 +6336,12 @@ // Обход с конца. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // СкопированныеФайлыИПапки - Массив - (Строка) Массив путей файлов и папок. // // Возвращаемое значение: -// Булево - Успешно ли выполнена операция. +// Булево - успешно ли выполнена операция. // Процедура УдалитьСодержимоеКаталога(ОбработчикРезультата, СкопированныеФайлыИПапки) @@ -6444,9 +6415,9 @@ // ПараметрыВыполнения - см. ПараметрыИмпортаФайлов. // // Возвращаемое значение: -// Неопределено - Если импорт не выполнен. -// Структура - Если импорт выполнен. -// * ПапкаДляДобавленияТекущая - СправочникСсылка.ПапкиФайлов - Папка для добавления. +// Неопределено - если импорт не выполнен. +// Структура: +// * ПапкаДляДобавленияТекущая - СправочникСсылка.ПапкиФайлов - папка для добавления. // Процедура ВыполнитьИмпортФайлов(Знач ПараметрыВыполнения) Экспорт @@ -6564,8 +6535,8 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: -// * МассивВсехПапок - Массив - . +// ПараметрыВыполнения - Структура: +// * МассивВсехПапок - Массив // Процедура ИмпортФайловЦиклПродолжитьИмпорт(ПараметрыВыполнения) @@ -6595,8 +6566,8 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: -// * МассивВсехПапок - Массив - . +// ПараметрыВыполнения - Структура: +// * МассивВсехПапок - Массив // Процедура ИмпортФайловЦиклПродолжитьИмпортПослеВопросовВРекурсии(Результат, ПараметрыВыполнения) Экспорт @@ -6669,7 +6640,8 @@ // Сохранение на диск Файла // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ДанныеФайла - структура с данными файла. // УникальныйИдентификатор - уникальный идентификатор формы. // @@ -6694,7 +6666,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура СохранитьКакСРасширением(ПараметрыВыполнения) @@ -6779,7 +6751,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура СохранитьКакСРасширениемПослеВыбораРежимаСохранения(Результат, ПараметрыВыполнения) Экспорт @@ -6828,7 +6800,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура СохранитьКакСРасширениемПослеРасшифровки(ОписаниеДанных, ПараметрыВыполнения) Экспорт @@ -7030,7 +7002,8 @@ // Покажет напоминание - если стоит настройка. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // Процедура ПоказатьНапоминаниеПередПоместитьФайл(ОбработчикРезультата) @@ -7069,17 +7042,18 @@ // и пользователь в диалоге предупреждения о наличии таких файлов выбрал "Отмена". // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// ПараметрыПроверки - Структура - со свойствами: +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. +// ПараметрыПроверки - Структура: // * ВыбранныеФайлы - Массив - массив объектов "Файл". -// * Рекурсивно - Булево - Рекурсивно обходить подкаталоги. +// * Рекурсивно - Булево - рекурсивно обходить подкаталоги. // * ПсевдоФайловаяСистема - Соответствие - эмуляция файловой системы - для строки (каталога) возвращает массив // строк (подкаталоги и файлы). // // Возвращаемое значение: -// Структура - результат: -// * Успех - Булево - Успешно ли выполнена операция. -// * КоличествоСуммарное - Число - Количество импортированных файлов. +// Структура: +// * Успех - Булево - успешно ли выполнена операция. +// * КоличествоСуммарное - Число - количество импортированных файлов. // Процедура ПроверитьПредельныйРазмерФайлов(ОбработчикРезультата, ПараметрыПроверки) @@ -7159,7 +7133,8 @@ // Покажет напоминание - если стоит настройка. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // Процедура ПоказатьИнформациюФайлНеБылИзменен(ОбработчикРезультата) @@ -7228,10 +7203,7 @@ ДанныеФайлов = ПараметрыВыполнения.ДанныеФайлов; // Массив из см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла - Для Каждого ДанныеФайла Из ДанныеФайлов Цикл - ПараметрыОбработчика = ПараметрыОбновленияФайла( - Неопределено, - ДанныеФайла.Ссылка, - ПараметрыВыполнения.ИдентификаторФормы); + ПараметрыОбработчика = ПараметрыОбновленияФайла(Неопределено, ДанныеФайла.Ссылка, ПараметрыВыполнения.ИдентификаторФормы); ЗаполнитьЗначенияСвойств(ПараметрыОбработчика, ПараметрыВыполнения); ПараметрыОбработчика.Вставить("ДанныеФайла", Неопределено); ПараметрыОбработчика.ХранитьВерсии = ДанныеФайла.ХранитьВерсии; @@ -7239,7 +7211,6 @@ ПараметрыОбработчика.Редактирует = ДанныеФайла.Редактирует; ПараметрыОбработчика.АвторТекущейВерсии = ДанныеФайла.Редактирует; ПараметрыОбработчика.Кодировка = ДанныеФайла.КодировкаТекущейВерсии; - ПараметрыОбработчика.Вставить("УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования2", ПараметрыВыполнения.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования2); Если ПараметрыВыполнения.ВозможностьСоздаватьВерсииФайлов Тогда ПараметрыОбработчика.СоздатьНовуюВерсию = ПараметрыВыполнения.ХранитьВерсии; Иначе @@ -7254,13 +7225,12 @@ КонецЕсли; КонецЦикла; - ПоказатьОповещениеПользователя( - НСтр("ru = 'Завершить редактирование файлов'"),, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Завершено редактирование файлов (%1 из %2).'"), - ПараметрыВыполнения.ДанныеФайлов.Количество(), - ПараметрыВыполнения.МассивФайлов.Количество()), - БиблиотекаКартинок.Информация32); + ПоказатьОповещениеПользователя(НСтр("ru = 'Завершить редактирование файлов'"),, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Завершено редактирование файлов (%1 из %2).'"), + ПараметрыВыполнения.ДанныеФайлов.Количество(), + ПараметрыВыполнения.МассивФайлов.Количество()), + БиблиотекаКартинок.Информация32); ОбработчикРезультата = Новый ОписаниеОповещения("ЗакончитьРедактированиеМассиваФайловСОповещениемЗавершение", ЭтотОбъект, ПараметрыВыполнения); ВернутьРезультат(ОбработчикРезультата, Истина); @@ -7364,7 +7334,8 @@ // Выполняет блокировку файла или нескольких файлов. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ПараметрКоманды - либо ссылка на файл, либо массив ссылок на файлы. // УникальныйИдентификатор. // @@ -7476,9 +7447,10 @@ // Открывает файл. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// ДанныеФайла - Структура с данными файла. -// УникальныйИдентификатор - УникальныйИдентификатор - Формы. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. +// ДанныеФайла - структура с данными файла. +// УникальныйИдентификатор - УникальныйИдентификатор - формы. // Процедура ОткрытьФайлСОповещением(ОбработчикРезультата, ДанныеФайла, УникальныйИдентификатор = Неопределено, ДляРедактирования = Истина) Экспорт @@ -7545,7 +7517,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура ОткрытьФайлСОповещениемЗавершение(Результат, ПараметрыВыполнения) Экспорт @@ -7756,7 +7728,7 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - с полями: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура ОбновитьИзФайлаНаДискеСОповещениемЗавершение(Результат, ПараметрыВыполнения) Экспорт @@ -7777,15 +7749,16 @@ // Зашифровать файл. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // УникальныйИдентификатор - УникальныйИдентификатор формы. // // Возвращаемое значение: -// Структура - Результат. +// Структура: // * Успех - Булево - успешно ли выполнена операция. -// * МассивДанныхДляЗанесенияВБазу - Массив - Массив данных для записи в программу. -// * МассивОтпечатков - Массив - Массив отпечатков. +// * МассивДанныхДляЗанесенияВБазу - Массив - массив данных для записи в программу. +// * МассивОтпечатков - Массив - массив отпечатков. // Процедура Зашифровать(ОбработчикРезультата, ДанныеФайла, УникальныйИдентификатор) Экспорт @@ -7868,9 +7841,9 @@ КонецПроцедуры // Параметры: -// ТекущиеПараметрыВыполнения - Структура - где: -// * ПараметрыВыполнения - Структура - где: -// ** МассивДанныхДляЗанесенияВБазу - Массив -. +// ТекущиеПараметрыВыполнения - Структура: +// * ПараметрыВыполнения - Структура: +// ** МассивДанныхДляЗанесенияВБазу - Массив // Процедура ПриПолученииЗашифрованныхДанных(Параметры, ТекущиеПараметрыВыполнения) Экспорт @@ -7921,15 +7894,16 @@ // Расшифрует объект - Файл, Версия. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // ФайлСсылка - СправочникСсылка.Файлы - файл. // УникальныйИдентификатор - уникальный идентификатор формы. // ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // // Возвращаемое значение: -// Структура - Результат. +// Структура: // * Успех - Булево - успешно ли выполнена операция. -// * МассивДанныхДляЗанесенияВБазу - Массив структур. +// * МассивДанныхДляЗанесенияВБазу - массив структур. // Процедура Расшифровать(ОбработчикРезультата, ФайлСсылка, УникальныйИдентификатор, ДанныеФайла) Экспорт @@ -8001,10 +7975,10 @@ КонецПроцедуры // Параметры: -// ТекущиеПараметрыВыполнения - Структура - где: -// * ПараметрыВыполнения - Структура - где: +// ТекущиеПараметрыВыполнения - Структура: +// * ПараметрыВыполнения - Структура: // ** ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла -// ** МассивДанныхДляЗанесенияВБазу - Массив -. +// ** МассивДанныхДляЗанесенияВБазу - Массив // Процедура ПриПолученииРасшифрованныхДанных(Параметры, ТекущиеПараметрыВыполнения) Экспорт @@ -8134,7 +8108,7 @@ // Создает новый файл интерактивно указанным образом. // // Параметры: -// РежимСоздания - Число - Режим создания файла. +// РежимСоздания - Число - режим создания файла. // И 1 - из шаблона (копированием другого файла), // * 2 - с диска (из файловой системы клиента), // * 3 - со сканера. @@ -8324,6 +8298,7 @@ // МассивФайловВРабочемКаталогеДляУдаления - Массив - массив строк - путей к файлам. // ВладелецФайла - ЛюбаяСсылка - владелец файла. // ФайлСсылка - СправочникСсылка.Файлы - файл. +// Процедура ИнформироватьОШифровании(МассивФайловВРабочемКаталогеДляУдаления, ВладелецФайла, ФайлСсылка) Экспорт @@ -8351,6 +8326,7 @@ // Параметры: // ВладелецФайла - ЛюбаяСсылка - владелец файла. // ФайлСсылка - СправочникСсылка.Файлы - файл. +// Процедура ИнформироватьОРасшифровке(ВладелецФайла, ФайлСсылка) Экспорт ОповеститьОбИзменении(ФайлСсылка); @@ -8369,6 +8345,7 @@ //////////////////////////////////////////////////////////////////////////////// // Работа с электронными подписями. +// Процедура ПодписатьФайл(ПрисоединенныйФайл, ДанныеФайла, ИдентификаторФормы, ОбработчикЗавершения = Неопределено, ОбработчикПриПолученииПодписи = Неопределено) Экспорт @@ -8463,7 +8440,7 @@ // способа добавления подписи в объект. // // Параметры: -// Контекст - Структура - с полями: +// Контекст - Структура: // * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура ПриПолученииПодписей(Параметры, Контекст) Экспорт @@ -8582,7 +8559,7 @@ // Загружает структуру файлов и каталогов с диска в программу. // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ОбработчикРезультата - ОписаниеОповещения - обработчик, которому нужно передать результат импорта. // * Владелец - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка или объект-владелец, к которому // добавляются импортированные файлы. @@ -8590,15 +8567,15 @@ // импортированные файлы. // * ВыбранныеФайлы - СписокЗначений - импортируемые объекты Файл. // * Индикатор - Число - число от 0 до 100 - прогресс выполнения. -// * Комментарий - Строка - Комментарий. -// * ХранитьВерсии - Булево - Хранить версии. -// * УдалятьФайлыПослеДобавления - Булево - Удалять файлы ВыбранныеФайлы после завершения импорта. -// * Рекурсивно - Булево - Рекурсивно обходить подкаталоги. +// * Комментарий - Строка - комментарий. +// * ХранитьВерсии - Булево - хранить версии. +// * УдалятьФайлыПослеДобавления - Булево - удалять файлы ВыбранныеФайлы после завершения импорта. +// * Рекурсивно - Булево - рекурсивно обходить подкаталоги. // * ИдентификаторФормы - УникальныйИдентификатор - идентификатор формы. // * ПсевдоФайловаяСистема - Соответствие - эмуляция файловой системы - для строки (каталога) возвращает массив // строк (подкаталоги и файлы). // * Кодировка - Строка - кодировка для текстовых файлов. -// * ДобавленныеФайлы - Массив - Добавленные файлы, выходной параметр. +// * ДобавленныеФайлы - Массив - добавленные файлы, выходной параметр. // Функция ПараметрыИмпортаФайлов() Экспорт ПараметрыВыполнения = Новый Структура; @@ -8621,25 +8598,27 @@ // - если файл, просто добавляет его, если каталог - создает группу и рекурсивно вызывает саму себя. // // Параметры: -// ПараметрыВыполнения - Структура - со свойствами: -// * ОбработчикРезультата - ОписаниеОповещения, Структура - обработчик, которому нужно передать результат +// ПараметрыВыполнения - Структура: +// * ОбработчикРезультата - ОписаниеОповещения +// - Структура - обработчик, которому нужно передать результат // импорта. // * Владелец - ЛюбаяСсылка - владелец файла. -// * ВыбранныеФайлы - Массив, СписокЗначений - объекты Файл. +// * ВыбранныеФайлы - Массив +// - СписокЗначений - объекты Файл. // * Индикатор - Число - число от 0 до 100 - прогресс выполнения. -// * МассивИменФайловСОшибками - Массив - Массив имен файлов с ошибками. -// * МассивСтруктурВсехФайлов - Массив - Массив структур всех файлов. -// * Комментарий - Строка - Комментарий. -// * ХранитьВерсии - Булево - Хранить версии. -// * УдалятьФайлыПослеДобавления - Булево - Удалять файлы ВыбранныеФайлы после завершения импорта. -// * Рекурсивно - Булево - Рекурсивно обходить подкаталоги. -// * КоличествоСуммарное - Число - Количество суммарное импортированных файлов. -// * Счетчик - Число - Счетчик обработанных файлов (не обязательно файл будет загружен). +// * МассивИменФайловСОшибками - Массив - массив имен файлов с ошибками. +// * МассивСтруктурВсехФайлов - Массив - массив структур всех файлов. +// * Комментарий - Строка - комментарий. +// * ХранитьВерсии - Булево - хранить версии. +// * УдалятьФайлыПослеДобавления - Булево - удалять файлы ВыбранныеФайлы после завершения импорта. +// * Рекурсивно - Булево - рекурсивно обходить подкаталоги. +// * КоличествоСуммарное - Число - количество суммарное импортированных файлов. +// * Счетчик - Число - счетчик обработанных файлов (не обязательно файл будет загружен). // * ИдентификаторФормы - УникальныйИдентификатор - идентификатор формы. // * ПсевдоФайловаяСистема - Соответствие - эмуляция файловой системы - для строки (каталога) возвращает массив // строк (подкаталоги и файлы). -// * ДобавленныеФайлы - Массив - Добавленные файлы, выходной параметр. -// * МассивВсехПапок - Массив - Массив всех папок. +// * ДобавленныеФайлы - Массив - добавленные файлы, выходной параметр. +// * МассивВсехПапок - Массив - массив всех папок. // * Кодировка - Строка - кодировка для текстовых файлов. // Процедура ИмпортФайловРекурсивно(Владелец, ВыбранныеФайлы, ПараметрыВыполнения) @@ -8690,8 +8669,8 @@ // Продолжение процедуры (см. выше). // // Параметры: -// ПараметрыВыполнения - Структура - со свойствами: -// * ВыбранныеФайлы - Массив - . +// ПараметрыВыполнения - Структура: +// * ВыбранныеФайлы - Массив // Процедура ИмпортФайловРекурсивноПослеОтветаНаВопрос(Ответ, ПараметрыВыполнения) Экспорт @@ -8910,7 +8889,7 @@ // // Параметры: // ТекущаяВерсия - СправочникСсылка.ВерсииФайлов - версия файла. -// НовоеИмя - Строка - Новое имя файла. +// НовоеИмя - Строка - новое имя файла. // Процедура ОбновитьИнформациюВРабочемКаталоге(ТекущаяВерсия, НовоеИмя) Экспорт @@ -8949,6 +8928,7 @@ // ДанныеФайла - структура с данными файла. // НаЧтение - Булево - файл помещен на чтение. // ВРабочемКаталогеВладельца - Булево - файл в рабочем каталоге владельца (а не в основном рабочем каталоге). +// Процедура ПеререгистрироватьФайлВРабочемКаталоге(ДанныеФайла, НаЧтение, ВРабочемКаталогеВладельца) // Если Файл без файла - ничего не делаем в рабочем каталоге. @@ -9116,11 +9096,12 @@ КонецПроцедуры // Возвращаемое значение: -// Структура - со свойствами: -// * Путь - Строка - . -// * Размер - Число - . -// * Версия - ОпределяемыйТип.ПрисоединенныйФайл - . -// * ДатаПомещенияВРабочийКаталог - Дата - . +// Структура: +// * Путь - Строка +// * Размер - Число +// * Версия - ОпределяемыйТип.ПрисоединенныйФайл +// * ДатаПомещенияВРабочийКаталог - Дата +// Функция ДанныеФайловВРабочемКаталоге() Возврат Новый Структура("Путь, Размер, Версия, ДатаПомещенияВРабочийКаталог"); @@ -9206,6 +9187,7 @@ // // Возвращаемое значение: // Строка - путь файла +// Функция ПолучитьПутьФайлаВРабочемКаталоге(ДанныеФайла) ПутьДляВозврата = ""; @@ -9261,16 +9243,12 @@ //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Возвращает структуру, содержащую различные персональные настройки. +// Возвращаемое значение: +// см. РаботаСФайлами.НастройкиРаботыСФайлами +// Функция ПерсональныеНастройкиРаботыСФайлами() Экспорт - ПерсональныеНастройки = - СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ПерсональныеНастройкиРаботыСФайлами; - - // Проверка и обновление настроек сохраненных на сервере, - // которые вычисляются на клиенте. - - Возврат ПерсональныеНастройки; + Возврат СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ПерсональныеНастройкиРаботыСФайлами; КонецФункции @@ -9296,6 +9274,7 @@ // ПолноеИмяФайла - Строка - имя файла с путем. // ВРабочемКаталогеНаЧтение - Булево - файл помещен на чтение. // ВРабочемКаталогеВладельца - Булево - файл в рабочем каталоге владельца (а не в основном рабочем каталоге). +// Функция ФайлНаходитсяВЛокальномКэшеФайлов(ДанныеФайла, ТекущаяВерсия, ПолноеИмяФайла, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца) ПолноеИмяФайла = ""; @@ -9330,10 +9309,11 @@ // Параметры: // ИмяКаталога - Строка - прежнее имя каталога. // Заголовок - Строка - заголовок формы выбора пути каталога. -// РабочийКаталогВладельца - Строка- Рабочий каталог владельца. +// РабочийКаталогВладельца - Строка- рабочий каталог владельца. // // Возвращаемое значение: // Булево - успешно ли выполнена операция. +// Функция ВыбратьПутьКРабочемуКаталогу(ИмяКаталога, Заголовок, РабочийКаталогВладельца) Экспорт Режим = РежимДиалогаВыбораФайла.ВыборКаталога; @@ -9395,6 +9375,7 @@ // ПолноеИмяФайла - Строка - полное имя файла. // НаЧтение - Булево - файл помещен на чтение. // ВРабочемКаталогеВладельца - Булево - файл в рабочем каталоге владельца (а не в основном рабочем каталоге). +// Процедура ПеререгистрироватьВРабочемКаталоге(ТекущаяВерсия, ПолноеИмяФайла, НаЧтение, ВРабочемКаталогеВладельца) ИмяКаталога = РабочийКаталогПользователя(); @@ -9409,8 +9390,8 @@ // Параметры: // МассивФайлов - Массив - массив объектов "Файл". // МассивСлишкомБольшихФайлов - Массив - массив файлов. -// Рекурсивно - Булево - Рекурсивно обходить подкаталоги. -// КоличествоСуммарное - Число - Количество суммарное импортированных файлов. +// Рекурсивно - Булево - рекурсивно обходить подкаталоги. +// КоличествоСуммарное - Число - количество суммарное импортированных файлов. // ПсевдоФайловаяСистема - Соответствие - эмуляция файловой системы - для строки (каталога) возвращает массив строк // (подкаталоги и файлы). // @@ -9463,6 +9444,7 @@ // Возвращает массив файлов, эмулируя работу НайтиФайлы - но не по файловой системе, а по Соответствию // если ПсевдоФайловаяСистема пуста - работает с файловой системой. +// Функция НайтиФайлыПсевдо(Знач ПсевдоФайловаяСистема, Путь) Если ПсевдоФайловаяСистема.Количество() = 0 Тогда @@ -9490,6 +9472,7 @@ // // Возвращаемое значение: // Строка - на что ссылается lnk файл. +// Функция РазыменоватьLnkФайл(ВыбранныйФайл) #Если Не ВебКлиент И НЕ МобильныйКлиент Тогда @@ -9684,93 +9667,125 @@ Процедура ВыполнитьСравнениеФайлов(ПутьКФайлу1, ПутьКФайлу2, СпособСравненияВерсийФайлов, ЗаголовокЛевый = "", ЗаголовокПравый = "") Экспорт -#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда - Попытка Если СпособСравненияВерсийФайлов = "MicrosoftOfficeWord" Тогда - ОбъектWord = Новый COMОбъект("Word.Application"); - ОбъектWord.Visible = 0; - ОбъектWord.WordBasic.DisableAutoMacros(1); - - Документ = ОбъектWord.Documents.Open(ПутьКФайлу1); - - Документ.Merge(ПутьКФайлу2, 2, 0, 0); // MergeTarget:=wdMergeTargetSelected, DetectFormatChanges:=False, UseFormattingFrom:=wdFormattingFromCurrent - - ОбъектWord.Visible = 1; - ОбъектWord.Activate(); - - Документ.Close(); + СравнитьФайлыMicrosoftWord(ПутьКФайлу1, ПутьКФайлу2); ИначеЕсли СпособСравненияВерсийФайлов = "OpenOfficeOrgWriter" Тогда - - // Снимем readonly - иначе не сработает. - Файл1 = Новый Файл(ПутьКФайлу1); - Файл1.УстановитьТолькоЧтение(Ложь); - - Файл2 = Новый Файл(ПутьКФайлу2); - Файл2.УстановитьТолькоЧтение(Ложь); - - // Открыть OpenOffice - ОбъектServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); - ИнстансDesktop = ОбъектServiceManager.createInstance("com.sun.star.frame.Desktop"); - ИнстансDispatcher = ОбъектServiceManager.createInstance("com.sun.star.frame.DispatchHelper"); - - // Параметры открытия: отключение исполнения макросов. - ПараметрыДокумента = Новый COMSafeArray("VT_VARIANT", 1); - РежимЗапуска = ПрисвоитьЗначениеСвойству(ОбъектServiceManager, - "MacroExecutionMode", - 0); // const short NEVER_EXECUTE = 0 - ПараметрыДокумента.SetValue(0, РежимЗапуска); - - // Открыть документ OpenOffice. - ИнстансDesktop.loadComponentFromURL(ПреобразоватьВURL(ПутьКФайлу2), "_blank", 0, ПараметрыДокумента); - - ТекущееОкно = ИнстансDesktop.getCurrentFrame(); - - // Установить показ изменений. - ПараметрыСравнения = Новый COMSafeArray("VT_VARIANT", 1); - ПараметрыСравнения.SetValue(0, ПрисвоитьЗначениеСвойству(ОбъектServiceManager, "ShowTrackedChanges", Истина)); - ИнстансDispatcher.executeDispatch(ТекущееОкно, ".uno:ShowTrackedChanges", "", 0, ПараметрыСравнения); - - // Сравнить с документом. - ПараметрыВызова = Новый COMSafeArray("VT_VARIANT", 1); - ПараметрыВызова.SetValue(0, ПрисвоитьЗначениеСвойству(ОбъектServiceManager, "URL", ПреобразоватьВURL(ПутьКФайлу1))); - ИнстансDispatcher.executeDispatch(ТекущееОкно, ".uno:CompareDocuments", "", 0, ПараметрыВызова); - + СравнитьФайлыOpenOfficeOrgWriter(ПутьКФайлу1, ПутьКФайлу2); ИначеЕсли СпособСравненияВерсийФайлов = "СравнениеТабличныхДокументов" Тогда - - ПомещаемыеФайлы = Новый Массив; - ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу1)); - ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу2)); - ПомещенныеФайлы = Новый Массив; - Если Не ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда - Возврат; - КонецЕсли; - ТабличныйДокументЛевый = ПомещенныеФайлы[0].Хранение; - ТабличныйДокументПравый = ПомещенныеФайлы[1].Хранение; - - ТабличныеДокументыСтруктура = Новый Структура("Левый, Правый", ТабличныйДокументЛевый, ТабличныйДокументПравый); - АдресТабличныхДокументов = ПоместитьВоВременноеХранилище(ТабличныеДокументыСтруктура, Неопределено); - - ПараметрыОткрытияФормы = Новый Структура("АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый", - АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый); - ОткрытьФорму("ОбщаяФорма.СравнениеТабличныхДокументов", ПараметрыОткрытияФормы, ЭтотОбъект); + СравнитьТабличныеДокументы(ПутьКФайлу1, ПутьКФайлу2, ЗаголовокЛевый, ЗаголовокПравый); КонецЕсли; Исключение - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось сравнить файлы по причине: %1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( НСтр("ru = 'Файлы. Сравнение файлов'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), "Ошибка", СообщениеОбОшибке, , Истина); - ВызватьИсключение СообщениеОбОшибке; - КонецПопытки; +КонецПроцедуры + +Процедура СравнитьФайлыOpenOfficeOrgWriter(Знач ПутьКФайлу1, Знач ПутьКФайлу2) + +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда + + // Снимем readonly - иначе не сработает. + Файл1 = Новый Файл(ПутьКФайлу1); + Файл1.УстановитьТолькоЧтение(Ложь); + + Файл2 = Новый Файл(ПутьКФайлу2); + Файл2.УстановитьТолькоЧтение(Ложь); + + // Открыть OpenOffice + Попытка + ОбъектServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); + ОбъектDesktop = ОбъектServiceManager.createInstance("com.sun.star.frame.Desktop"); + ОбъектDispatcherHelper = ОбъектServiceManager.createInstance("com.sun.star.frame.DispatchHelper"); + Исключение + ТекстИсключения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение ТекстИсключения + Символы.ПС + НСтр("ru = 'Необходимо установить (переустановить) приложение OpenOffice.org Writer.'"); + КонецПопытки; + + // Параметры открытия: отключение исполнения макросов. + ПараметрыДокумента = Новый COMSafeArray("VT_VARIANT", 1); + РежимЗапуска = ПрисвоитьЗначениеСвойству(ОбъектServiceManager, + "MacroExecutionMode", + 0); // const short NEVER_EXECUTE = 0 + ПараметрыДокумента.SetValue(0, РежимЗапуска); + + // Открыть документ OpenOffice. + ОбъектDesktop.loadComponentFromURL(ПреобразоватьВURL(ПутьКФайлу2), "_blank", 0, ПараметрыДокумента); + + ТекущееОкно = ОбъектDesktop.getCurrentFrame(); + + // Установить показ изменений. + ПараметрыСравнения = Новый COMSafeArray("VT_VARIANT", 1); + ПараметрыСравнения.SetValue(0, ПрисвоитьЗначениеСвойству(ОбъектServiceManager, "ShowTrackedChanges", Истина)); + ОбъектDispatcherHelper.executeDispatch(ТекущееОкно, ".uno:ShowTrackedChanges", "", 0, ПараметрыСравнения); + + // Сравнить с документом. + ПараметрыВызова = Новый COMSafeArray("VT_VARIANT", 1); + ПараметрыВызова.SetValue(0, ПрисвоитьЗначениеСвойству(ОбъектServiceManager, "URL", ПреобразоватьВURL(ПутьКФайлу1))); + ОбъектDispatcherHelper.executeDispatch(ТекущееОкно, ".uno:CompareDocuments", "", 0, ПараметрыВызова); + #КонецЕсли + +КонецПроцедуры + +Процедура СравнитьФайлыMicrosoftWord(ПутьКФайлу1, ПутьКФайлу2) + +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда + + Попытка + ОбъектWord = Новый COMОбъект("Word.Application"); + Исключение + ТекстИсключения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение ТекстИсключения + Символы.ПС + НСтр("ru = 'Необходимо установить (переустановить) приложение Microsoft Word.'"); + КонецПопытки; + ОбъектWord.Visible = 0; + ОбъектWord.WordBasic.DisableAutoMacros(1); + + Документ = ОбъектWord.Documents.Open(ПутьКФайлу1); + Попытка + Документ.Merge(ПутьКФайлу2, 2, 0, 0); // MergeTarget:=wdMergeTargetSelected, DetectFormatChanges:=False, UseFormattingFrom:=wdFormattingFromCurrent + Исключение + ТекстИсключения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + // Произошла исключительная ситуация (Microsoft Word): Метод или свойство Merge недоступны, потому что эту команду + // нельзя использовать в режиме чтения. + ВызватьИсключение ТекстИсключения + Символы.ПС + + НСтр("ru = 'Необходимо в настройках Microsoft Word (меню Файл — Параметры) на закладке ""Общие"" снять флажок ""Открывать вложения электронной почты в режиме чтения"".'"); + КонецПопытки; + + ОбъектWord.Visible = 1; + ОбъектWord.Activate(); + + Документ.Close(); + +#КонецЕсли + +КонецПроцедуры + +Процедура СравнитьТабличныеДокументы(ПутьКФайлу1, ПутьКФайлу2, ЗаголовокЛевый, ЗаголовокПравый) + + ПомещаемыеФайлы = Новый Массив; + ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу1)); + ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу2)); + ПомещенныеФайлы = Новый Массив; + Если Не ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда + Возврат; + КонецЕсли; + ТабличныйДокументЛевый = ПомещенныеФайлы[0].Хранение; + ТабличныйДокументПравый = ПомещенныеФайлы[1].Хранение; + + ТабличныеДокументыСтруктура = Новый Структура("Левый, Правый", ТабличныйДокументЛевый, ТабличныйДокументПравый); + АдресТабличныхДокументов = ПоместитьВоВременноеХранилище(ТабличныеДокументыСтруктура, Неопределено); + + ПараметрыОткрытияФормы = Новый Структура("АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый", + АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый); + ОткрытьФорму("ОбщаяФорма.СравнениеТабличныхДокументов", ПараметрыОткрытияФормы, ЭтотОбъект); КонецПроцедуры @@ -9981,7 +9996,7 @@ // - Неопределено - ошибка инициализации файла. // * Существует - Булево - Ложь, если файл не существует. // -// ДействияСФайлом - Массив - содержащий структуры с именем действия и параметрами действия; +// ДействияСФайлом - Массив - содержащий структуры с именем действия и параметрами действия: // * Действие - Строка - ПолучитьСвойства, УстановитьСвойства, Удалить, СкопироватьИзИсточника, // СоздатьКаталог, Получить, Поместить. // * Файл - Строка - полное имя файла на компьютере. @@ -10010,9 +10025,9 @@ // Продолжение процедуры ОбработатьФайл. // // Параметры: -// Контекст - Структура - где: -// * РезультатДействий - Структура - где: -// ** Результаты - Массив -. +// Контекст - Структура: +// * РезультатДействий - Структура: +// ** Результаты - Массив // Процедура ОбработатьФайлЦиклНачало(Контекст) @@ -10235,8 +10250,9 @@ // Продолжение процедуры ОбработатьФайл. // // Параметры: -// Контекст - Структура - где: -// * Файл - Файл - . +// Контекст - Структура: +// * Файл - Файл +// Процедура ОбработатьФайлПослеПолученияНевидимости(Невидимость, Контекст) Экспорт Если Невидимость <> Null Тогда @@ -10416,10 +10432,11 @@ // Установка компоненты сканирования. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// ОбработчикРезультата - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы метода. // // Возвращаемое значение: -// Булево - Успешно ли выполнена операция. +// Булево - успешно ли выполнена операция. // // См. также: // Переменную глобального контекста КомпонентаTwain. @@ -10472,12 +10489,12 @@ // Возвращает настройку сканера по имени. // // Параметры: -// ИмяУстройства - Строка - Имя сканера. -// ИмяНастройки - Строка - Имя настройки, +// ИмяУстройства - Строка - имя сканера. +// ИмяНастройки - Строка - имя настройки, // например "XRESOLUTION", или "PIXELTYPE", или "ROTATION", или "SUPPORTEDSIZES". // // Возвращаемое значение: -// Число - Значение настройки сканера. +// Число - значение настройки сканера. // Функция ПолучитьНастройку(ИмяУстройства, ИмяНастройки) Экспорт @@ -10517,17 +10534,16 @@ //////////////////////////////////////////////////////////////////////////////// // Обработка событий общих форм работы с файлами. +// Выбрать режим открытия файла и начать редактирование. +// Варианты "Редактировать", "Отмена". +// // Параметры: // ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла // Процедура ВыбратьРежимИРедактироватьФайл(ОбработчикРезультата, ДанныеФайла, ДоступностьКомандыРедактировать) Экспорт - // Выбрать режим открытия файла и начать редактирование. - РезультатОткрыть = "Открыть"; - // Другие режимы открытия доступны - // "Редактировать" - // "Отмена". ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); + РезультатОткрыть = ПерсональныеНастройки.ВариантОткрытияФайла; СпособОткрытия = ПерсональныеНастройки.ТекстовыеФайлыСпособОткрытия; Если СпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда @@ -10595,8 +10611,8 @@ КонецПроцедуры // Параметры: -// Элементы - ЭлементыФормы - где: -// * Список - ТаблицаФормы - . +// Элементы - ЭлементыФормы: +// * Список - ТаблицаФормы // Функция ФайловыеКомандыДоступны(Элементы) Экспорт // Доступны файловые команды - есть хотя бы одна строка в списке и выделена не группировка. @@ -10868,7 +10884,7 @@ Процедура НачатьУдалениеФайлаИзКеша(Контекст) Оповещение = Новый ОписаниеОповещения("ПослеУдаленияФайлаИзКеша", ЭтотОбъект, Контекст); - УдалитьФайлИзРабочегоКаталога(Оповещение, Контекст.Файлы[Контекст.ИндексУдаляемогоФайла], Истина, Ложь); + УдалитьФайлИзРабочегоКаталога(Оповещение, Контекст.Файлы[Контекст.ИндексУдаляемогоФайла], Истина); КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl index a5e140f0d..46a6dfe6b 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl @@ -41,14 +41,10 @@ // Заполнение общих настроек. - // ИзвлекатьТекстыФайловНаСервере. ОбщиеНастройки.Вставить( "ИзвлекатьТекстыФайловНаСервере", РаботаСФайламиСлужебный.ИзвлекатьТекстыФайловНаСервере()); - - // МаксимальныйРазмерФайла. ОбщиеНастройки.Вставить("МаксимальныйРазмерФайла", РаботаСФайлами.МаксимальныйРазмерФайла()); - // ЗапрещатьЗагрузкуФайловПоРасширению. ЗапрещатьЗагрузкуФайловПоРасширению = Константы.ЗапрещатьЗагрузкуФайловПоРасширению.Получить(); Если ЗапрещатьЗагрузкуФайловПоРасширению = Неопределено Тогда ЗапрещатьЗагрузкуФайловПоРасширению = Ложь; @@ -56,88 +52,46 @@ КонецЕсли; ОбщиеНастройки.Вставить("ЗапретЗагрузкиФайловПоРасширению", ЗапрещатьЗагрузкуФайловПоРасширению); - // СписокЗапрещенныхРасширений. ОбщиеНастройки.Вставить("СписокЗапрещенныхРасширений", СписокЗапрещенныхРасширений()); - - // СписокРасширенийФайловOpenDocument. ОбщиеНастройки.Вставить("СписокРасширенийФайловOpenDocument", СписокРасширенийФайловOpenDocument()); - - // СписокРасширенийТекстовыхФайлов. ОбщиеНастройки.Вставить("СписокРасширенийТекстовыхФайлов", СписокРасширенийТекстовыхФайлов()); // Заполнение персональных настроек. - // МаксимальныйРазмерЛокальногоКэшаФайлов. МаксимальныйРазмерЛокальногоКэшаФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ЛокальныйКэшФайлов", "МаксимальныйРазмерЛокальногоКэшаФайлов"); - Если МаксимальныйРазмерЛокальногоКэшаФайлов = Неопределено Тогда МаксимальныйРазмерЛокальногоКэшаФайлов = 100*1024*1024; // 100 МБ. - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "ЛокальныйКэшФайлов", - "МаксимальныйРазмерЛокальногоКэшаФайлов", - МаксимальныйРазмерЛокальногоКэшаФайлов); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЛокальныйКэшФайлов", + "МаксимальныйРазмерЛокальногоКэшаФайлов", МаксимальныйРазмерЛокальногоКэшаФайлов); КонецЕсли; - - ПерсональныеНастройки.Вставить( - "МаксимальныйРазмерЛокальногоКэшаФайлов", + ПерсональныеНастройки.Вставить("МаксимальныйРазмерЛокальногоКэшаФайлов", МаксимальныйРазмерЛокальногоКэшаФайлов); - // ПутьКЛокальномуКэшуФайлов. ПутьКЛокальномуКэшуФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); // Не следует получать эту переменную непосредственно. - // Нужно использовать функцию РабочийКаталогПользователя - // модуля РаботаСФайламиСлужебныйКлиент. + // Использовать функцию РаботаСФайламиСлужебныйКлиент.РабочийКаталогПользователя. ПерсональныеНастройки.Вставить("ПутьКЛокальномуКэшуФайлов", ПутьКЛокальномуКэшуФайлов); - // УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования. УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "ЛокальныйКэшФайлов", "УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования"); - - Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Неопределено Тогда - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; - КонецЕсли; - - ПерсональныеНастройки.Вставить( - "УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования", + "ЛокальныйКэшФайлов", "УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования", Ложь); + ПерсональныеНастройки.Вставить("УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования", УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования); - // ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов. - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = - ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "ЛокальныйКэшФайлов", "ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов"); - - Если ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Неопределено Тогда - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Ложь; - КонецЕсли; - - ПерсональныеНастройки.Вставить( - "ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов", - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов); - - // ПоказыватьПодсказкиПриРедактированииФайлов. ПоказыватьПодсказкиПриРедактированииФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов"); - Если ПоказыватьПодсказкиПриРедактированииФайлов = Неопределено Тогда ПоказыватьПодсказкиПриРедактированииФайлов = Истина; - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "НастройкиПрограммы", - "ПоказыватьПодсказкиПриРедактированииФайлов", - ПоказыватьПодсказкиПриРедактированииФайлов); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", + "ПоказыватьПодсказкиПриРедактированииФайлов", ПоказыватьПодсказкиПриРедактированииФайлов); КонецЕсли; - ПерсональныеНастройки.Вставить( - "ПоказыватьПодсказкиПриРедактированииФайлов", + ПерсональныеНастройки.Вставить("ПоказыватьПодсказкиПриРедактированииФайлов", ПоказыватьПодсказкиПриРедактированииФайлов); - // ПоказыватьИнформациюЧтоФайлНеБылИзменен. ПоказыватьИнформациюЧтоФайлНеБылИзменен = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиПрограммы", "ПоказыватьИнформациюЧтоФайлНеБылИзменен"); - Если ПоказыватьИнформациюЧтоФайлНеБылИзменен = Неопределено Тогда ПоказыватьИнформациюЧтоФайлНеБылИзменен = Истина; @@ -146,27 +100,23 @@ "ПоказыватьИнформациюЧтоФайлНеБылИзменен", ПоказыватьИнформациюЧтоФайлНеБылИзменен); КонецЕсли; - ПерсональныеНастройки.Вставить( - "ПоказыватьИнформациюЧтоФайлНеБылИзменен", + ПерсональныеНастройки.Вставить("ПоказыватьИнформациюЧтоФайлНеБылИзменен", ПоказыватьИнформациюЧтоФайлНеБылИзменен); // Настройки открытия файлов. + ТекстовыеФайлыРасширение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиОткрытияФайлов\ТекстовыеФайлы", "Расширение", "TXT XML INI"); - ТекстовыеФайлыСпособОткрытия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиОткрытияФайлов\ТекстовыеФайлы", "СпособОткрытия", Перечисления.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе); - ГрафическиеСхемыРасширение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиОткрытияФайлов\ГрафическиеСхемы", "Расширение", "GRS"); - ГрафическиеСхемыСпособОткрытия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиОткрытияФайлов\ГрафическиеСхемы", - "СпособОткрытия", - Перечисления.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе); + "СпособОткрытия", Перечисления.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе); ПерсональныеНастройки.Вставить("ТекстовыеФайлыРасширение", ТекстовыеФайлыРасширение); ПерсональныеНастройки.Вставить("ТекстовыеФайлыСпособОткрытия", ТекстовыеФайлыСпособОткрытия); @@ -179,32 +129,23 @@ УстановитьПривилегированныйРежим(Истина); - СписокЗапрещенныхРасширенийОбластиДанных = - Константы.СписокЗапрещенныхРасширенийОбластиДанных.Получить(); - - Если СписокЗапрещенныхРасширенийОбластиДанных = Неопределено - ИЛИ СписокЗапрещенныхРасширенийОбластиДанных = "" Тогда - - СписокЗапрещенныхРасширенийОбластиДанных = "COM EXE BAT CMD VBS VBE JS JSE WSF WSH SCR"; - - Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить( - СписокЗапрещенныхРасширенийОбластиДанных); + СписокРасширений = Константы.СписокЗапрещенныхРасширенийОбластиДанных.Получить(); + Если СписокРасширений = Неопределено ИЛИ СписокРасширений = "" Тогда + СписокРасширений = ВРег(СтрСоединить(РаботаСФайламиСлужебный.СписокЗапрещенныхРасширений().ВыгрузитьЗначения(), " ")); + Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить(СписокРасширений); КонецЕсли; - ИтоговыйСписокРасширений = ""; - + Результат = ""; Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда СписокЗапрещенныхРасширений = Константы.СписокЗапрещенныхРасширений.Получить(); - - ИтоговыйСписокРасширений = - СписокЗапрещенныхРасширений + " " + СписокЗапрещенныхРасширенийОбластиДанных; + Результат = СписокЗапрещенныхРасширений + " " + СписокРасширений; Иначе - ИтоговыйСписокРасширений = СписокЗапрещенныхРасширенийОбластиДанных; + Результат = СписокРасширений; КонецЕсли; - Возврат ИтоговыйСписокРасширений; + Возврат Результат; КонецФункции @@ -245,13 +186,11 @@ Функция СписокРасширенийТекстовыхФайлов() УстановитьПривилегированныйРежим(Истина); - СписокРасширенийТекстовыхФайлов = Константы.СписокРасширенийТекстовыхФайлов.Получить(); - + УстановитьПривилегированныйРежим(Ложь); Если ПустаяСтрока(СписокРасширенийТекстовыхФайлов) Тогда - СписокРасширенийТекстовыхФайлов = "TXT"; + СписокРасширенийТекстовыхФайлов = РаботаСФайламиСлужебный.СписокРасширенийТекстовыхФайлов(); КонецЕсли; - Возврат СписокРасширенийТекстовыхФайлов; КонецФункции diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index 4bbf36aab..77fc1c3a6 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -17,7 +17,7 @@ // * Метаданные - ОбъектМетаданных - метаданные для привязки события журнала регистрации. // * Данные - Произвольный - данные для привязки события журнала регистрации. // ДополнительныеНастройки - Структура - настройки, которые переопределяют стандартные параметры рассылки, где: -// * Получатели - Соответствие - набор получателей и их e-mail адресов. +// * Получатели - Соответствие - набор получателей и их e-mail адресов: // ** Ключ - СправочникСсылка - получатель. // ** Значение - Строка - набор e-mail адресов получателя в строке с разделителями. // @@ -132,15 +132,12 @@ КонецЦикла; // Подготовка параметров доставки. - ПараметрыДоставки = Новый Структура; - ПараметрыДоставки.Вставить("ЗапускЗафиксирован", Истина); - ПараметрыДоставки.Вставить("Автор", Пользователи.ТекущийПользователь()); - ПараметрыДоставки.Вставить("ИспользоватьПапку", Рассылка.ИспользоватьПапку); - ПараметрыДоставки.Вставить("ИспользоватьСетевойКаталог", Рассылка.ИспользоватьСетевойКаталог); - ПараметрыДоставки.Вставить("ИспользоватьFTPРесурс", Рассылка.ИспользоватьFTPРесурс); - ПараметрыДоставки.Вставить("ИспользоватьЭлектроннуюПочту", Рассылка.ИспользоватьЭлектроннуюПочту); - ПараметрыДоставки.Вставить("ВключатьДатуВИмяФайла", Рассылка.ВключатьДатуВИмяФайла); - ПараметрыДоставки.Вставить("ТранслитерироватьИменаФайлов", Рассылка.ТранслитерироватьИменаФайлов); + ПараметрыДоставки = СтандартныеПараметрыДоставки(); + ПараметрыДоставки.ИспользоватьПапку = Рассылка.ИспользоватьПапку; + ПараметрыДоставки.ИспользоватьСетевойКаталог = Рассылка.ИспользоватьСетевойКаталог; + ПараметрыДоставки.ИспользоватьFTPРесурс = Рассылка.ИспользоватьFTPРесурс; + ПараметрыДоставки.ИспользоватьЭлектроннуюПочту = Рассылка.ИспользоватьЭлектроннуюПочту; + ПараметрыДоставки.ТранслитерироватьИменаФайлов = Рассылка.ТранслитерироватьИменаФайлов; // Проверки отмеченных способов доставки. Если Не ПараметрыДоставки.ИспользоватьПапку @@ -151,47 +148,55 @@ Возврат Ложь; КонецЕсли; - ПараметрыДоставки.Вставить("Персонализирована", Рассылка.Персонализирована); - ПараметрыДоставки.Вставить("Архивировать", Рассылка.Архивировать); - ПараметрыДоставки.Вставить("ИмяАрхива", Рассылка.ИмяАрхива); + ПараметрыДоставки.Персонализирована = Рассылка.Персонализирована; + ПараметрыДоставки.Архивировать = Рассылка.Архивировать; + ПараметрыДоставки.ИмяАрхива = Рассылка.ИмяАрхива; + УстановитьПривилегированныйРежим(Истина); - ПараметрыДоставки.Вставить("ПарольАрхива", ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Рассылка, "ПарольАрхива")); + ПараметрыДоставки.ПарольАрхива = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Рассылка, "ПарольАрхива"); УстановитьПривилегированныйРежим(Ложь); // Подготовка параметров доставки в папку. Если ПараметрыДоставки.ИспользоватьПапку Тогда - ПараметрыДоставки.Вставить("Папка", Рассылка.Папка); + ПараметрыДоставки.Папка = Рассылка.Папка; КонецЕсли; // Подготовка параметров доставки в сетевой каталог. Если ПараметрыДоставки.ИспользоватьСетевойКаталог Тогда - ПараметрыДоставки.Вставить("СетевойКаталогWindows", Рассылка.СетевойКаталогWindows); - ПараметрыДоставки.Вставить("СетевойКаталогLinux", Рассылка.СетевойКаталогLinux); + ПараметрыДоставки.СетевойКаталогWindows = Рассылка.СетевойКаталогWindows; + ПараметрыДоставки.СетевойКаталогLinux = Рассылка.СетевойКаталогLinux; КонецЕсли; // Подготовка параметров доставки на FTP ресурс. Если ПараметрыДоставки.ИспользоватьFTPРесурс Тогда - ПараметрыДоставки.Вставить("Сервер", Рассылка.FTPСервер); - ПараметрыДоставки.Вставить("Порт", Рассылка.FTPПорт); - ПараметрыДоставки.Вставить("Логин", Рассылка.FTPЛогин); + ПараметрыДоставки.Сервер = Рассылка.FTPСервер; + ПараметрыДоставки.Порт = Рассылка.FTPПорт; + ПараметрыДоставки.Логин = Рассылка.FTPЛогин; + УстановитьПривилегированныйРежим(Истина); - ПараметрыДоставки.Вставить("Пароль", ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Рассылка, "FTPПароль")); + ПараметрыДоставки.Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Рассылка, "FTPПароль"); УстановитьПривилегированныйРежим(Ложь); - ПараметрыДоставки.Вставить("Каталог", Рассылка.FTPКаталог); - ПараметрыДоставки.Вставить("ПассивноеСоединение", Рассылка.FTPПассивноеСоединение); + + ПараметрыДоставки.Каталог = Рассылка.FTPКаталог; + ПараметрыДоставки.ПассивноеСоединение = Рассылка.FTPПассивноеСоединение; КонецЕсли; + ПараметрыДоставки.ВключатьДатуВИмяФайла = Рассылка.ВключатьДатуВИмяФайла + И (ПараметрыДоставки.ИспользоватьПапку + Или ПараметрыДоставки.ИспользоватьСетевойКаталог + Или ПараметрыДоставки.ИспользоватьFTPРесурс); + // Подготовка параметров доставки по электронной почте. Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда - ПараметрыДоставки.Вставить("УчетнаяЗапись", Рассылка.УчетнаяЗапись); - ПараметрыДоставки.Вставить("ТолькоУведомить", Рассылка.ТолькоУведомить); - ПараметрыДоставки.Вставить("СкрытыеКопии", Рассылка.СкрытыеКопии); - ПараметрыДоставки.Вставить("ШаблонТемы", Рассылка.ТемаПисьма); - ПараметрыДоставки.Вставить("ШаблонТекста", ?(Рассылка.ПисьмоВФорматеHTML, Рассылка.ТекстПисьмаВФорматеHTML, Рассылка.ТекстПисьма)); + ПараметрыДоставки.УчетнаяЗапись = Рассылка.УчетнаяЗапись; + ПараметрыДоставки.ТолькоУведомить = Рассылка.ТолькоУведомить; + ПараметрыДоставки.СкрытыеКопии = Рассылка.СкрытыеКопии; + ПараметрыДоставки.ШаблонТемы = Рассылка.ТемаПисьма; + ПараметрыДоставки.ШаблонТекста = ?(Рассылка.ПисьмоВФорматеHTML, Рассылка.ТекстПисьмаВФорматеHTML, Рассылка.ТекстПисьма); // Получатели Если ДополнительныеНастройки <> Неопределено И ДополнительныеНастройки.Свойство("Получатели") Тогда - ПараметрыДоставки.Вставить("Получатели", ДополнительныеНастройки.Получатели); + ПараметрыДоставки.Получатели = ДополнительныеНастройки.Получатели; Иначе Получатели = СформироватьСписокПолучателейРассылки(Рассылка, ПараметрыЖурнала); Если Получатели.Количество() = 0 Тогда @@ -202,7 +207,7 @@ Возврат Ложь; КонецЕсли; КонецЕсли; - ПараметрыДоставки.Вставить("Получатели", Получатели); + ПараметрыДоставки.Получатели = Получатели; КонецЕсли; ТипТекста = ?(Рассылка.ПисьмоВФорматеHTML, "HTML", "ПростойТекст"); @@ -220,11 +225,11 @@ ПараметрыПисьма.Вставить("АдресОтвета", Рассылка.АдресОтвета); КонецЕсли; - ПараметрыДоставки.Вставить("ПараметрыПисьма", ПараметрыПисьма); + ПараметрыДоставки.ПараметрыПисьма = ПараметрыПисьма; КонецЕсли; - Если Не ПараметрыДоставки.Свойство("ЗапускЗафиксирован") Или Не ПараметрыДоставки.ЗапускЗафиксирован Тогда + Если Не ПараметрыДоставки.ЗапускЗафиксирован Тогда РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьЗапускРассылки(Рассылка); КонецЕсли; @@ -240,13 +245,14 @@ // Параметры: // // Отчеты - ТаблицаЗначений - набор выгружаемых отчетов. Колонки: -// * Отчет - СправочникСсылка.ВариантыОтчетов, СправочникСсылка.ДополнительныеОтчетыИОбработки - +// * Отчет - СправочникСсылка.ВариантыОтчетов +// - СправочникСсылка.ДополнительныеОтчетыИОбработки - // Отчет, который необходимо сформировать. // * ОтправлятьЕслиПустой - Булево - флаг отправки отчета даже если он пустой. // * Настройки - настройки, с которыми должен сформироваться отчет, где: // Дополнительно используется для определения принадлежности отчета к СКД. // - ПользовательскиеНастройкиКомпоновкиДанных - табличный документ сформируется механизмами СКД. -// - Структура - Табличный документ сформируется при помощи метода "Сформировать()", где: +// - Структура - табличный документ сформируется при помощи метода "Сформировать()", где: // *** Ключ - Строка - имя реквизита объекта отчета. // *** Значение - Произвольный - значение реквизита объекта отчета. // - Неопределено - настройки по умолчанию. Для определения принадлежности к СКД @@ -282,7 +288,7 @@ // Обязательные реквизиты когда { ИспользоватьЭлектроннуюПочту = Истина }: // * УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - // Учетная запись для отправки почтового сообщения. -// * Получатели - Соответствие - набор получателей и их e-mail адресов. +// * Получатели - Соответствие - набор получателей и их e-mail адресов: // ** Ключ - СправочникСсылка - получатель. // ** Значение - Строка - набор e-mail адресов получателя в строке с разделителями. // @@ -305,17 +311,19 @@ // { ИспользоватьFTPРесурс = Ложь } // И соответствующая им возможность уведомления: // { ТолькоУведомить = Ложь } -// * ТолькоУведомить - Булево, Ложь - отправлять только уведомления (не присоединять сформированные отчеты). -// * СкрытыеКопии - Булево, Ложь - если "Истина", то при отправке вместо "Кому" заполняется "СкрытыеКопии". +// * ТолькоУведомить - Булево - Ложь - отправлять только уведомления (не присоединять сформированные отчеты). +// * СкрытыеКопии - Булево - Ложь - если "Истина", то при отправке вместо "Кому" заполняется "СкрытыеКопии". // * ШаблонТемы - Строка - тема письма. // * ШаблонТекста - Строка - тело письма. // * ПараметрыПисьма - Структура - параметры сообщения, // которые будут переданы подсистеме "РаботаСПочтовымиСообщениями" напрямую. // Их обработку можно увидеть в модуле "РаботаСПочтовымиСообщениямиСлужебный", процедура "ОтправитьСообщение". // Подсистемой "РассылкаОтчетов" могут использоваться: -// ** ТипТекста - ТипТекстаПочтовогоСообщения, Строка, ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем - +// ** ТипТекста - ТипТекстаПочтовогоСообщения +// - Строка +// - ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем - // Тип текста письма. -// ** Вложения - Соответствие - картинки письма. +// ** Вложения - Соответствие: // *** Ключ - Строка - наименование. // *** Значение - данные картинки. // - Строка - адрес во временном хранилище, по которому размещена картинка. @@ -325,7 +333,7 @@ // // НаименованиеРассылки - Строка - выводится в тему и сообщение, а также для вывода ошибок. // -// ПараметрыЖурнала - Структура - параметры записи в журнал регистрации. +// ПараметрыЖурнала - Структура - параметры записи в журнал регистрации: // * ИмяСобытия - Строка - имя события (или группы событий). // * Метаданные - ОбъектМетаданных - метаданные для привязки события журнала регистрации. // * Данные - Произвольный - данные для привязки события журнала регистрации. @@ -345,7 +353,7 @@ КонецЕсли; // Строка дерева общих (не персонализированных по получателям) отчетов. - ПараметрыДоставки.Вставить("СтрокаОбщихОтчетов", ОпределитьСтрокуДереваДляПолучателя(ДеревоОтчетов, Неопределено, ПараметрыДоставки)); + ПараметрыДоставки.СтрокаОбщихОтчетов = ОпределитьСтрокуДереваДляПолучателя(ДеревоОтчетов, Неопределено, ПараметрыДоставки); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Инициализирована рассылка ''%1'', автор: ''%2'''"), @@ -512,8 +520,9 @@ // Добавляет формат (в случае его отсутствия) и устанавливает его параметры (если переданы). // // Параметры: -// СписокФорматов - СписокЗначений - список форматов. -// ФорматСсылка - Строка, ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка или имя формата. +// СписокФорматов - СписокЗначений +// ФорматСсылка - Строка +// - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка или имя формата. // Картинка - Картинка - необязательный. Картинка формата. // ИспользоватьПоУмолчанию - Булево - необязательный. Признак того, что формат используется по умолчанию. // @@ -634,9 +643,9 @@ // режиме вызывается напрямую, в клиент-серверном - через фоновое задание. // // Параметры: -// ПараметрыВыполнения - Структура - выполняемые рассылки и их параметры. +// ПараметрыВыполнения - Структура - выполняемые рассылки и их параметры: // * МассивРассылок - Массив из СправочникСсылка.РассылкиОтчетов - выполняемые рассылки. -// * ПредварительныеНастройки - Структура - параметры см. РассылкаОтчетов.ВыполнитьРассылкуОтчетов. +// * ПредварительныеНастройки - см. РассылкаОтчетов.ВыполнитьРассылкуОтчетов. // АдресРезультата - Строка - адрес во временном хранилище, по которому будет размещен результат. // Процедура ВыполнитьРассылкиВФоновомЗадании(ПараметрыВыполнения, АдресРезультата) Экспорт @@ -746,12 +755,12 @@ // // Параметры: // Рассылка - СправочникСсылка.РассылкиОтчетов - выполняемая рассылка отчетов. -// ПараметрыЖурнала - Структура - параметры записи в журнал регистрации. +// ПараметрыЖурнала - Структура - параметры записи в журнал регистрации: // * ИмяСобытия - Строка - имя события (или группы событий). // * Метаданные - ОбъектМетаданных - метаданные для привязки события журнала регистрации. // * Данные - Произвольный - данные для привязки события журнала регистрации. -// ДополнительныеНастройки - Структура - настройки, которые переопределяют стандартные параметры рассылки. -// * Получатели - Соответствие - набор получателей и их e-mail адресов. +// ДополнительныеНастройки - Структура - настройки, которые переопределяют стандартные параметры рассылки: +// * Получатели - Соответствие - набор получателей и их e-mail адресов: // ** Ключ - СправочникСсылка - получатель. // ** Значение - Строка - набор e-mail адресов получателя в строке с разделителями. // @@ -773,9 +782,10 @@ // Добавляет команды создания рассылок в форму отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеФормыОтчета - -// Отказ - Булево - -// СтандартнаяОбработка - булево - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеФормыОтчета +// Отказ - Булево +// СтандартнаяОбработка - булево // Процедура ФормаОтчетаДобавитьКоманды(Форма, Отказ, СтандартнаяОбработка) Экспорт @@ -831,7 +841,7 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок // // Параметры: -// ИсключенияПоискаСсылок - Массив - +// ИсключенияПоискаСсылок - Массив // Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт @@ -842,7 +852,7 @@ // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. // // Параметры: -// ЗапросыРазрешений - Массив - +// ЗапросыРазрешений - Массив // Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт @@ -886,7 +896,7 @@ // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел // // Параметры: -// ТекущиеДела - Массив - +// ТекущиеДела - Массив // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт Если Не ПравоДобавления() Тогда @@ -950,7 +960,7 @@ // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. // // Параметры: -// Зависимости - ТаблицаЗначений - +// Зависимости - ТаблицаЗначений // Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); @@ -969,7 +979,7 @@ // См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек // // Параметры: -// Объекты - Массив - +// Объекты - Массив // Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт @@ -987,7 +997,7 @@ // Запускает рассылку и контролирует результат. // // Параметры: -// Рассылка - СправочникСсылка.РассылкиОтчетов - Выполняемая рассылка отчетов. +// Рассылка - СправочникСсылка.РассылкиОтчетов - выполняемая рассылка отчетов. // Процедура ВыполнитьРассылкуПоРасписанию(Рассылка) Экспорт @@ -1033,13 +1043,14 @@ // Формирует список получателей из табличной части "Получатели" рассылки. // // Параметры: -// Рассылка - СправочникСсылка.РассылкиОтчетов, Структура - Элемент справочника, для которого необходимо сформировать +// Рассылка - СправочникСсылка.РассылкиОтчетов +// - Структура - элемент справочника, для которого необходимо сформировать // список получателей. // // Возвращаемое значение: -// Структура - Результат получения списка получателей рассылки. -// * Получатели - Соответствие - Получатели. См. РассылкаОтчетов.ВыполнитьРассылку, описание к ПараметрыДоставки.Получатели. -// * Ошибки - Строка - Ошибки, которые возникли в процессе. +// Структура - результат получения списка получателей рассылки: +// * Получатели - см. РассылкаОтчетов.ВыполнитьРассылку +// * Ошибки - Строка - ошибки, которые возникли в процессе. // Функция СформироватьСписокПолучателейРассылки(Рассылка, ПараметрыЖурнала = Неопределено) Экспорт @@ -1224,13 +1235,15 @@ // параметров. // // Параметры: -// ПараметрыОтчета - Структура - Отчет, настройки и результат его инициализации. -// * Отчет - СправочникСсылка.ВариантыОтчетов - Ссылка отчета. -// * Настройки - Неопределено, ПользовательскиеНастройкиКомпоновкиДанных, ТаблицаЗначений - +// ПараметрыОтчета - Структура - отчет, настройки и результат его инициализации: +// * Отчет - СправочникСсылка.ВариантыОтчетов - ссылка отчета. +// * Настройки - Неопределено +// - ПользовательскиеНастройкиКомпоновкиДанных +// - ТаблицаЗначений - // Настройки отчета, которые необходимо использовать, // подробнее см. процедуру "ЗаписатьНастройкиСтрокиОтчеты" модуля "Справочник.РассылкиОтчетов.ФормаОбъекта". // ПерсонализацияВозможна - Булево - Истина, если отчет может быть персонализирован. -// УникальныйИдентификаторФормы - УникальныйИдентификатор - Необязательный. Адрес размещения СКД. +// УникальныйИдентификаторФормы - УникальныйИдентификатор - необязательный. Адрес размещения СКД. // // Параметры, изменяемые в процессе работы метода: // ПараметрыОтчета - Структура - @@ -1388,13 +1401,13 @@ // Формирует отчет, проверяя что результат пустой. // // Параметры: -// ПараметрыЖурнала - Структура - Параметры записи в журнал регистрации. См. ЗаписьЖурнала(). -// ПараметрыОтчета - см. ИнициализироватьОтчет(), возвращаемое значение. -// Получатель - СправочникСсылка - Ссылка получателя. +// ПараметрыЖурнала - Структура - параметры записи в журнал регистрации. См. ЗаписьЖурнала(). +// ПараметрыОтчета - см. ИнициализироватьОтчет +// Получатель - СправочникСсылка - ссылка получателя. // // Возвращаемое значение: -// Структура - Результат формирования отчета. -// * ТабДок - ТабличныйДокумент - Табличный документ. +// Структура - результат формирования отчета: +// * ТабДок - ТабличныйДокумент - табличный документ. // * Пустой - Булево - Истина, если отчет не содержал ни одного значения параметра. // Функция СформироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, Получатель = Неопределено) @@ -1406,30 +1419,7 @@ Возврат Результат; КонецЕсли; - // Настройки подключения отчета. - ПараметрыФормирования = Новый Структура; - - // Заполнение персонализированных данных получателей. - Если Получатель <> Неопределено И ПараметрыОтчета.Свойство("ПерсональныеОтборы") Тогда - Если ПараметрыОтчета.СКД Тогда - ПользовательскиеНастройкиКД = ПараметрыОтчета.КомпоновщикНастроекКД.ПользовательскиеНастройки; - Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл - Настройка = ПользовательскиеНастройкиКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); - Если ТипЗнч(Настройка) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Настройка.ПравоеЗначение = Получатель; - ИначеЕсли ТипЗнч(Настройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - Настройка.Значение = Получатель; - КонецЕсли; - КонецЦикла; - ПараметрыФормирования.Вставить("ПользовательскиеНастройкиКД", ПользовательскиеНастройкиКД); - Иначе - Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл - ПараметрыОтчета.Объект[КлючИЗначение.Ключ] = Получатель; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - ПараметрыФормирования.Вставить("Подключение", ПараметрыОтчета); + ПараметрыФормирования = ПараметрыФормированияОтчета(ПараметрыОтчета, Получатель); Формирование = ВариантыОтчетов.СформироватьОтчет(ПараметрыФормирования, Истина, Не ПараметрыОтчета.ОтправлятьЕслиПустой); Если Не Формирование.Успех Тогда @@ -1451,16 +1441,56 @@ Возврат Результат; КонецФункции +Функция ПараметрыФормированияОтчета(ПараметрыОтчета, Получатель) + + ПараметрыФормирования = Новый Структура; + + // Заполнение персонализированных данных получателей. + Если Получатель <> Неопределено И ПараметрыОтчета.Свойство("ПерсональныеОтборы") Тогда + Если ПараметрыОтчета.СКД Тогда + ПользовательскиеНастройкиКД = ПараметрыОтчета.КомпоновщикНастроекКД.ПользовательскиеНастройки; + + Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл + Настройка = ПользовательскиеНастройкиКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); + + Если ТипЗнч(Настройка) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Настройка.ПравоеЗначение = Получатель; + ИначеЕсли ТипЗнч(Настройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Настройка.Значение = Получатель; + КонецЕсли; + КонецЦикла; + + ПараметрыФормирования.Вставить("ПользовательскиеНастройкиКД", ПользовательскиеНастройкиКД); + Иначе + Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл + ПараметрыОтчета.Объект[КлючИЗначение.Ключ] = Получатель; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + ДополнительныеПараметры = Новый Структура("Отчет, Объект, СКД, КомпоновщикНастроекКД"); + ЗаполнитьЗначенияСвойств(ДополнительныеПараметры, ПараметрыОтчета); + + РассылкаОтчетовПереопределяемый.ПриПодготовкеПараметровФормированияОтчета(ПараметрыФормирования, ДополнительныеПараметры); + + ЗаполнитьЗначенияСвойств(ПараметрыОтчета, ДополнительныеПараметры); + + ПараметрыФормирования.Вставить("Подключение", ПараметрыОтчета); + + Возврат ПараметрыФормирования; + +КонецФункции + // Выполняет транспортировку вложений для всех способов доставки. // // Параметры: -// Автор - СправочникСсылка - Автор рассылки. -// ПараметрыДоставки - Структура - см. ВыполнитьРассылку(). +// Автор - СправочникСсылка - автор рассылки. +// ПараметрыДоставки - см. ВыполнитьРассылку // Вложения - Соответствие - см. ДобавитьОтчетыВоВложения(). // // Возвращаемое значение: -// Структура - Результат доставки. -// * Доставка - Строка - Представление способа доставки. +// Структура: +// * Доставка - Строка - представление способа доставки. // * Выполнена - Булево - Истина, если доставка выполнена хотя бы одним из способов. // Функция ВыполнитьДоставку(ПараметрыЖурнала, ПараметрыДоставки, Вложения) Экспорт @@ -1616,10 +1646,10 @@ // Получает имя пользователя программы по ссылке справочника "Пользователи". // // Параметры: -// Пользователь - СправочникСсылка.Пользователи - Ссылка пользователя. +// Пользователь - СправочникСсылка.Пользователи - ссылка пользователя. // // Возвращаемое значение: -// Строка - Имя пользователя программы. +// Строка - имя пользователя программы. // Функция ИмяПользователяИБ(Пользователь) Экспорт Если Не ЗначениеЗаполнено(Пользователь) Тогда @@ -1641,18 +1671,19 @@ // Поддерживает передачу информации об ошибке. // // Параметры: -// ПараметрыЖурнала - Структура - Параметры записи в журнал регистрации, где: -// * ИмяСобытия - Строка - Имя события (или группы событий). -// * Метаданные - ОбъектМетаданных - Метаданные для привязки события журнала регистрации. -// * Данные - Произвольный - Данные для привязки события журнала регистрации. -// * МассивОшибок - Массив - Сообщения пользователю. -// УровеньЖурнала - УровеньЖурналаРегистрации - Важность сообщения для администратора. +// ПараметрыЖурнала - Структура - параметры записи в журнал регистрации, где: +// * ИмяСобытия - Строка - имя события (или группы событий). +// * Метаданные - ОбъектМетаданных - метаданные для привязки события журнала регистрации. +// * Данные - Произвольный - данные для привязки события журнала регистрации. +// * МассивОшибок - Массив - сообщения пользователю. +// УровеньЖурнала - УровеньЖурналаРегистрации - важность сообщения для администратора. // Определяется автоматически на основании типа параметра "ОписаниеПроблемы": // Когда тип = ИнформацияОбОшибке то Ошибка, // когда тип = Строка то Предупреждение, // в противном случае Информация. -// Текст - Строка - Краткое описание проблемы. -// ОписаниеПроблемы - ИнформацияОбОшибке, Строка - Описание возникшей проблемы, которое добавляется после текста. +// Текст - Строка - краткое описание проблемы. +// ОписаниеПроблемы - ИнформацияОбОшибке +// - Строка - описание возникшей проблемы, которое добавляется после текста. // Пользователю выводится краткое представление ошибки, а в журнал записывается подробное представление ошибки. // Процедура ЗаписьЖурнала(ПараметрыЖурнала, Знач УровеньЖурнала = Неопределено, Знач Текст = "", Знач ОписаниеПроблемы = Неопределено) Экспорт @@ -1794,14 +1825,14 @@ // и формирует отчеты в разрезах получателей (если это необходимо). // // Параметры: -// ПараметрыЖурнала - Структура - Параметры записи в журнал регистрации. -// * Префикс - Строка - Префикс для имени события журнала регистрации. -// * Метаданные - ОбъектМетаданных - Метаданные для записи в журнал регистрации. -// * Данные - Произвольный - Данные для записи в журнал регистрации. -// ПараметрыОтчета - Структура - См. ВыполнитьРассылку(), параметр ТаблицаОтчетов. -// ДеревоОтчетов - ДеревоЗначений - Отчеты и результат формирования. -// ПараметрыДоставки - Структура - См. ВыполнитьРассылку(), параметр ПараметрыДоставки. -// Получатель - СправочникСсылка - Ссылка получателя. +// ПараметрыЖурнала - Структура - параметры записи в журнал регистрации: +// * Префикс - Строка - префикс для имени события журнала регистрации. +// * Метаданные - ОбъектМетаданных - метаданные для записи в журнал регистрации. +// * Данные - Произвольный - данные для записи в журнал регистрации. +// ПараметрыОтчета - Структура - см. ВыполнитьРассылку(), параметр ТаблицаОтчетов. +// ДеревоОтчетов - ДеревоЗначений - отчеты и результат формирования. +// ПараметрыДоставки - см. ВыполнитьРассылку.ПараметрыДоставки +// Получатель - СправочникСсылка - ссылка получателя. // // Результат выполнения записывается в ДеревоОтчетов. // Ошибки записываются в журнал регистрации и в сообщения сеанса пользователя. @@ -2001,15 +2032,15 @@ Возврат Ложь; КонецЕсли; - ПараметрыДоставки.Вставить("Рассылка", СокрЛП(Строка(НаименованиеРассылки))); - ПараметрыДоставки.Вставить("ДатаВыполнения", ТекущаяДатаСеанса()); - ПараметрыДоставки.Вставить("БылиОшибки", Ложь); - ПараметрыДоставки.Вставить("БылиПредупреждения", Ложь); - ПараметрыДоставки.Вставить("ВыполненаВПапку", Ложь); - ПараметрыДоставки.Вставить("ВыполненаВСетевойКаталог", Ложь); - ПараметрыДоставки.Вставить("ВыполненаНаFTP", Ложь); - ПараметрыДоставки.Вставить("ВыполненаПоЭлектроннойПочте", Ложь); - ПараметрыДоставки.Вставить("ВыполненныеСпособыПубликации", ""); + ПараметрыДоставки.Рассылка = СокрЛП(Строка(НаименованиеРассылки)); + ПараметрыДоставки.ДатаВыполнения = ТекущаяДатаСеанса(); + ПараметрыДоставки.БылиОшибки = Ложь; + ПараметрыДоставки.БылиПредупреждения = Ложь; + ПараметрыДоставки.ВыполненаВПапку = Ложь; + ПараметрыДоставки.ВыполненаВСетевойКаталог = Ложь; + ПараметрыДоставки.ВыполненаНаFTP = Ложь; + ПараметрыДоставки.ВыполненаПоЭлектроннойПочте = Ложь; + ПараметрыДоставки.ВыполненныеСпособыПубликации = ""; Если ПараметрыДоставки.ИспользоватьПапку Тогда Если Не ЗначениеЗаполнено(ПараметрыДоставки.Папка) Тогда @@ -2074,10 +2105,6 @@ НСтр("ru = 'Учетная запись не выбрана, доставка по электронной почте отключена'")); КонецЕсли; - Если Не ПараметрыДоставки.Свойство("Персонализирована") Тогда - ПараметрыДоставки.Вставить("Персонализирована", Ложь); - КонецЕсли; - Если ПараметрыДоставки.Персонализирована Тогда Если Не ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, @@ -2085,23 +2112,13 @@ Возврат Ложь; КонецЕсли; - ПараметрыДоставки.ИспользоватьПапку = Ложь; + ПараметрыДоставки.ИспользоватьПапку = Ложь; ПараметрыДоставки.ИспользоватьСетевойКаталог = Ложь; - ПараметрыДоставки.ИспользоватьFTPРесурс = Ложь; - ПараметрыДоставки.Вставить("ТолькоУведомить", Ложь); + ПараметрыДоставки.ИспользоватьFTPРесурс = Ложь; + ПараметрыДоставки.ТолькоУведомить = Ложь; КонецЕсли; Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда - // Соединение с почтовым сервером поднимается дольше всего. - Если Не ПараметрыДоставки.Свойство("Соединение") Тогда - ПараметрыДоставки.Вставить("Соединение", Неопределено); - КонецЕсли; - - // Уведомления о доставке по электронной почте. - Если Не ПараметрыДоставки.Свойство("ТолькоУведомить") Тогда - ПараметрыДоставки.Вставить("ТолькоУведомить", Ложь); - КонецЕсли; - Если ПараметрыДоставки.ТолькоУведомить И Не ПараметрыДоставки.ИспользоватьПапку И Не ПараметрыДоставки.ИспользоватьСетевойКаталог @@ -2111,16 +2128,7 @@ Возврат Ложь; КонецЕсли; - // Параметры письма. - Если Не ПараметрыДоставки.Свойство("СкрытыеКопии") Тогда - ПараметрыДоставки.Вставить("СкрытыеКопии", Ложь); - КонецЕсли; - Если Не ПараметрыДоставки.Свойство("ПараметрыПисьма") Тогда - ПараметрыДоставки.Вставить("ПараметрыПисьма", Новый Структура); - КонецЕсли; - ПараметрыПисьма = ПараметрыДоставки.ПараметрыПисьма; - ПараметрыПисьма.Вставить("ОбрабатыватьТексты", Ложь); // Тип текста почтового сообщения. @@ -2128,21 +2136,17 @@ ПараметрыПисьма.Вставить("ТипТекста", ТипТекстаПочтовогоСообщения.ПростойТекст); КонецЕсли; - ПараметрыДоставки.Вставить("ПисьмоВФорматеHTML", ПараметрыПисьма.ТипТекста = "HTML" Или ПараметрыПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.HTML); + ПараметрыДоставки.ПисьмоВФорматеHTML = ПараметрыПисьма.ТипТекста = "HTML" + Или ПараметрыПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.HTML; // Для обратной совместимости. Если ПараметрыПисьма.Свойство("Вложения") Тогда ПараметрыПисьма.Вставить("Картинки", ПараметрыПисьма.Вложения); КонецЕсли; - // Шаблон темы - Если Не ПараметрыДоставки.Свойство("ШаблонТемы") Или Не ЗначениеЗаполнено(ПараметрыДоставки.ШаблонТемы) Тогда - ПараметрыДоставки.Вставить("ШаблонТемы", ШаблонТемы()); - КонецЕсли; - // Шаблон сообщения - Если Не ПараметрыДоставки.Свойство("ШаблонТекста") Или Не ЗначениеЗаполнено(ПараметрыДоставки.ШаблонТекста) Тогда - ПараметрыДоставки.Вставить("ШаблонТекста", ШаблонТекста()); + Если Не ЗначениеЗаполнено(ПараметрыДоставки.ШаблонТекста) Тогда + ПараметрыДоставки.ШаблонТекста = ШаблонТекста(); Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда Документ = Новый ФорматированныйДокумент; Документ.Добавить(ПараметрыДоставки.ШаблонТекста, ТипЭлементаФорматированногоДокумента.Текст); @@ -2180,42 +2184,18 @@ СтруктураЗаполненияШаблонов); // Признаки необходимости заполнения шаблонов (кэш проверок). - ПараметрыДоставки.Вставить( - "ЗаполнитьПолучателяВШаблонеТемы", - СтрНайти(ПараметрыДоставки.ШаблонТемы, "[Получатель]") <> 0); - ПараметрыДоставки.Вставить( - "ЗаполнитьПолучателяВШаблонеСообщения", - СтрНайти(ПараметрыДоставки.ШаблонТекста, "[Получатель]") <> 0); - ПараметрыДоставки.Вставить( - "ЗаполнитьСформированныеОтчетыВШаблонеСообщения", - СтрНайти(ПараметрыДоставки.ШаблонТекста, "[СформированныеОтчеты]") <> 0); - ПараметрыДоставки.Вставить( - "ЗаполнитьСпособДоставкиВШаблонеСообщения", - СтрНайти(ПараметрыДоставки.ШаблонТекста, "[СпособДоставки]") <> 0); - - // Представление отчетов. - ПараметрыДоставки.Вставить("ПредставлениеОтчетовПолучателя", ""); - КонецЕсли; - - // Каталог временных файлов. - ПараметрыДоставки.Вставить("КаталогВременныхФайлов", ФайловаяСистема.СоздатьВременныйКаталог("RP")); - - // Соответствие каталогов временных файлов получателей. - ПараметрыДоставки.Вставить("НастройкиПолучателей", Новый Соответствие); - - // Параметры архивации: флажок и пароль архива. - Если Не ПараметрыДоставки.Свойство("Архивировать") Тогда - ПараметрыДоставки.Вставить("Архивировать", Ложь); - ПараметрыДоставки.Вставить("ПарольАрхива", ""); - ИначеЕсли Не ПараметрыДоставки.Свойство("ПарольАрхива") Тогда - ПараметрыДоставки.Вставить("ПарольАрхива", ""); + ПараметрыДоставки.ЗаполнитьПолучателяВШаблонеТемы = + СтрНайти(ПараметрыДоставки.ШаблонТемы, "[Получатель]") <> 0; + ПараметрыДоставки.ЗаполнитьПолучателяВШаблонеСообщения = + СтрНайти(ПараметрыДоставки.ШаблонТекста, "[Получатель]") <> 0; + ПараметрыДоставки.ЗаполнитьСформированныеОтчетыВШаблонеСообщения = + СтрНайти(ПараметрыДоставки.ШаблонТекста, "[СформированныеОтчеты]") <> 0; + ПараметрыДоставки.ЗаполнитьСпособДоставкиВШаблонеСообщения = + СтрНайти(ПараметрыДоставки.ШаблонТекста, "[СпособДоставки]") <> 0; КонецЕсли; // Имя архива (удаление запрещенных символов, заполнение шаблона) и расширение. Если ПараметрыДоставки.Архивировать Тогда - Если Не ПараметрыДоставки.Свойство("ИмяАрхива") Или Не ЗначениеЗаполнено(ПараметрыДоставки.ИмяАрхива) Тогда - ПараметрыДоставки.Вставить("ИмяАрхива", ШаблонИмениАрхива()); - КонецЕсли; Структура = Новый Структура("НаименованиеРассылки, ДатаВыполнения", ПараметрыДоставки.Рассылка, ТекущаяДатаСеанса()); ИмяАрхива = РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон(ПараметрыДоставки.ИмяАрхива, Структура); ПараметрыДоставки.ИмяАрхива = ПривестиИмяФайла(ИмяАрхива, ПараметрыДоставки.ТранслитерироватьИменаФайлов); @@ -2225,7 +2205,6 @@ КонецЕсли; // Параметры форматов. - ПараметрыДоставки.Вставить("ПараметрыФорматов", Новый Соответствие); Для Каждого ФорматМД Из Метаданные.Перечисления.ФорматыСохраненияОтчетов.ЗначенияПеречисления Цикл Формат = Перечисления.ФорматыСохраненияОтчетов[ФорматМД.Имя]; ПараметрыФормата = ПараметрыЗаписиТабличногоДокументаВФормат(Формат); @@ -2233,13 +2212,7 @@ ПараметрыДоставки.ПараметрыФорматов.Вставить(Формат, ПараметрыФормата); КонецЦикла; - // Параметры транслитерации имен файлов. - Если Не ПараметрыДоставки.Свойство("ТранслитерироватьИменаФайлов") Тогда - ПараметрыДоставки.Вставить("ТранслитерироватьИменаФайлов", Ложь); - КонецЕсли; - // Параметры добавления ссылок на конечные файлы в письмо. - ПараметрыДоставки.Вставить("ДобавлятьСсылки", ""); Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту И (ПараметрыДоставки.ИспользоватьПапку Или ПараметрыДоставки.ИспользоватьСетевойКаталог @@ -2287,11 +2260,11 @@ // Для контроля за выполнением рекомендуется вызывать в конструкции "Попытка ... Исключение". // // Параметры: -// Вложения - Соответствие - См. СохранитьОтчетыВФорматы(), параметр Результат. -// ПараметрыДоставки - см. ВыполнитьРассылку(), параметр ПараметрыДоставки. -// СтрокаПолучатель - Настройки получателя: -// - Неопределено - Используется весь список получателей из "ПараметрыДоставки.Получатели". -// - СтрокаДереваЗначений - Используется свойство строки "Получатель". +// Вложения - Соответствие - см. СохранитьОтчетыВФорматы(), параметр Результат. +// ПараметрыДоставки - см. ВыполнитьРассылку.ПараметрыДоставки +// СтрокаПолучатель - настройки получателя: +// - Неопределено - используется весь список получателей из "ПараметрыДоставки.Получатели". +// - СтрокаДереваЗначений - используется свойство строки "Получатель". // Процедура ОтправитьОтчетыПолучателю(Вложения, ПараметрыДоставки, СтрокаПолучатель = Неопределено) Получатель = ?(СтрокаПолучатель = Неопределено, Неопределено, СтрокаПолучатель.Ключ); @@ -2432,9 +2405,10 @@ // Выполняет архивацию вложений в соответствии с параметрами доставки. // // Параметры: -// Вложения - Соответствие, СтрокаДереваЗначений - См. СоздатьДеревоОтчетов(), возвращаемое значение, 3й уровень. -// ПараметрыДоставки - см. ВыполнитьРассылку(), параметр ПараметрыДоставки. -// КаталогВременныхФайлов - Строка - Каталог, в который будет выполнена архивация. +// Вложения - Соответствие +// - СтрокаДереваЗначений - см. СоздатьДеревоОтчетов(), возвращаемое значение, 3й уровень. +// ПараметрыДоставки - см. ВыполнитьРассылку.ПараметрыДоставки +// КаталогВременныхФайлов - Строка - каталог, в который будет выполнена архивация. // Процедура АрхивацияВложений(Вложения, ПараметрыДоставки, КаталогВременныхФайлов) Если Не ПараметрыДоставки.Архивировать Тогда @@ -2496,12 +2470,12 @@ // Параметры сохранения табличного документа в формат. // // Параметры: -// Формат - ПеречислениеСсылка.ФорматыСохраненияОтчетов - Формат, для которого необходимо получить параметры. +// Формат - ПеречислениеСсылка.ФорматыСохраненияОтчетов - формат, для которого необходимо получить параметры. // // Возвращаемое значение: -// Структура - Результат - Структура - Параметры записи. -// * Расширение - Строка - Расширение, с которым можно сохранить файл. -// * ТипФайла - ТипФайлаТабличногоДокумента - Формат сохранения табличного документа. +// Структура - результат - Структура - Параметры записи: +// * Расширение - Строка - расширение, с которым можно сохранить файл. +// * ТипФайла - ТипФайлаТабличногоДокумента - формат сохранения табличного документа. // Используется для определения параметра <ТипФайлаТаблицы> метода "ТабличныйДокумент.Записать". // Функция ПараметрыЗаписиТабличногоДокументаВФормат(Формат) @@ -2582,10 +2556,10 @@ // Работает только с именем файла, путь не поддерживается. // // Параметры: -// ИсходноеИмяФайла - Строка - Имя файла, из которого следует удалить недопустимые символы. +// ИсходноеИмяФайла - Строка - имя файла, из которого следует удалить недопустимые символы. // // Возвращаемое значение: -// Строка - Результат - Строка - Результат преобразования. +// Строка - результат - Строка - Результат преобразования. // Функция ПривестиИмяФайла(ИсходноеИмяФайла, ТранслитерироватьИменаФайлов) @@ -2654,10 +2628,10 @@ // Проверяет право текущего пользователя на вывод информации. Если прав нет - производится запись в журнал регистрации. // // Параметры: -// ПараметрыЖурнала - Структура - +// ПараметрыЖурнала - Структура // // Возвращаемое значение: -// Булево - +// Булево // Функция ПравоВывода(ПараметрыЖурнала) ПравоВывода = ПравоДоступа("Вывод", Метаданные); @@ -2691,7 +2665,7 @@ // Если файл существует - добавляет суффикс в имя файла. // // Параметры: -// ПолноеИмяФайла - Строка - Имя файла, с которого надо начать поиск. +// ПолноеИмяФайла - Строка - имя файла, с которого надо начать поиск. // Процедура НайтиСвободноеИмяФайла(ПолноеИмяФайла) Файл = Новый Файл(ПолноеИмяФайла); @@ -2731,12 +2705,13 @@ // Создает корневую строку дерева для получателя (в случае ее отсутствия) и заполняет ее параметрами по умолчанию. // // Параметры: -// ДеревоОтчетов - ДеревоЗначений - См. СоздатьДеревоОтчетов(), возвращаемое значение, 1й уровень. -// ПолучательСсылка - СправочникСсылка, Неопределено - Ссылка получателя. -// ПараметрыДоставки - см. ВыполнитьРассылку(), параметр ПараметрыДоставки. +// ДеревоОтчетов - см. СоздатьДеревоОтчетов +// ПолучательСсылка - СправочникСсылка +// - Неопределено - ссылка получателя. +// ПараметрыДоставки - см. ВыполнитьРассылку.ПараметрыДоставки // // Возвращаемое значение: -// СтрокаДереваЗначений - См. СоздатьДеревоОтчетов(), возвращаемое значение, 1й уровень. +// СтрокаДереваЗначений - см. СоздатьДеревоОтчетов // Функция ОпределитьСтрокуДереваДляПолучателя(ДеревоОтчетов, ПолучательСсылка, ПараметрыДоставки) @@ -2798,14 +2773,14 @@ КонецЕсли; - ПараметрыДоставки.Вставить("ПредставлениеОтчетовПолучателя", СокрЛП(СформированныеОтчеты)); + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП(СформированныеОтчеты); КонецПроцедуры // Проверяет наличие внешних наборов данных. // // Параметры: -// НаборыДанных - НаборыДанныхМакетаКомпоновкиДанных - Коллекция проверяемых наборов данных. +// НаборыДанных - НаборыДанныхМакетаКомпоновкиДанных - коллекция проверяемых наборов данных. // // Возвращаемое значение: // Булево - Истина если есть внешние наборы данных. @@ -2871,11 +2846,11 @@ // Возвращает список значений перечисления "ФорматыСохраненияОтчетов". // // Возвращаемое значение: -// СписокФорматов - СписокЗначений - Список форматов, с пометками на системных форматах по умолчанию, где: -// * Значение - ПеречислениеСсылка.ФорматыСохраненияОтчетов - Ссылка на описываемый формат. -// * Представление - Строка - Пользовательское представление описываемого формата. -// * Пометка - Булево - Признак использования как формата по умолчанию. -// * Картинка - Картинка - Картинка формата. +// СписокФорматов - СписокЗначений - список форматов, с пометками на системных форматах по умолчанию, где: +// * Значение - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка на описываемый формат. +// * Представление - Строка - пользовательское представление описываемого формата. +// * Пометка - Булево - признак использования как формата по умолчанию. +// * Картинка - Картинка - картинка формата. // Функция СписокФорматов() Экспорт СписокФорматов = Новый СписокЗначений; @@ -2913,8 +2888,8 @@ // Получает пустое значение для поиска по таблице "Отчеты" или "ФорматыОтчетов" справочника "РассылкиОтчетов". // // Возвращаемое значение: -// - СправочникСсылка.ДополнительныеОтчетыИОбработки - -// - СправочникСсылка.ВариантыОтчетов - +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - СправочникСсылка.ВариантыОтчетов // Функция ПустоеЗначениеОтчета() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -2958,4 +2933,71 @@ КонецПроцедуры +Функция СтандартныеПараметрыДоставки() + + ПараметрыДоставки = Новый Структура; + ПараметрыДоставки.Вставить("ДатаВыполнения", ТекущаяДатаСеанса()); + ПараметрыДоставки.Вставить("Соединение", Неопределено); + ПараметрыДоставки.Вставить("ЗапускЗафиксирован", Истина); + ПараметрыДоставки.Вставить("Автор", Пользователи.ТекущийПользователь()); + ПараметрыДоставки.Вставить("ПараметрыПисьма", Новый Структура); + + ПараметрыДоставки.Вставить("НастройкиПолучателей", Новый Соответствие); + ПараметрыДоставки.Вставить("Получатели", Неопределено); + ПараметрыДоставки.Вставить("УчетнаяЗапись", Неопределено); + ПараметрыДоставки.Вставить("Рассылка", ""); + + ПараметрыДоставки.Вставить("ПисьмоВФорматеHTML", Ложь); + ПараметрыДоставки.Вставить("Персонализирована", Ложь); + ПараметрыДоставки.Вставить("ТранслитерироватьИменаФайлов", Ложь); + ПараметрыДоставки.Вставить("ТолькоУведомить", Ложь); + ПараметрыДоставки.Вставить("СкрытыеКопии", Ложь); + + ПараметрыДоставки.Вставить("ИспользоватьЭлектроннуюПочту", Ложь); + ПараметрыДоставки.Вставить("ИспользоватьПапку", Ложь); + ПараметрыДоставки.Вставить("ИспользоватьСетевойКаталог", Ложь); + ПараметрыДоставки.Вставить("ИспользоватьFTPРесурс", Ложь); + + ПараметрыДоставки.Вставить("Каталог", Неопределено); + ПараметрыДоставки.Вставить("СетевойКаталогWindows", Неопределено); + ПараметрыДоставки.Вставить("СетевойКаталогLinux", Неопределено); + ПараметрыДоставки.Вставить("КаталогВременныхФайлов", ФайловаяСистема.СоздатьВременныйКаталог("RP")); + ПараметрыДоставки.Вставить("ВключатьДатуВИмяФайла", Ложь); + + ПараметрыДоставки.Вставить("Сервер", Неопределено); + ПараметрыДоставки.Вставить("Порт", Неопределено); + ПараметрыДоставки.Вставить("ПассивноеСоединение", Ложь); + ПараметрыДоставки.Вставить("Логин", Неопределено); + ПараметрыДоставки.Вставить("Пароль", Неопределено); + + ПараметрыДоставки.Вставить("Папка", Неопределено); + ПараметрыДоставки.Вставить("Архивировать", Ложь); + ПараметрыДоставки.Вставить("ИмяАрхива", ШаблонИмениАрхива()); + ПараметрыДоставки.Вставить("ПарольАрхива", Неопределено); + + ПараметрыДоставки.Вставить("ЗаполнитьПолучателяВШаблонеТемы", Ложь); + ПараметрыДоставки.Вставить("ЗаполнитьПолучателяВШаблонеСообщения", Ложь); + ПараметрыДоставки.Вставить("ЗаполнитьСформированныеОтчетыВШаблонеСообщения", Ложь); + ПараметрыДоставки.Вставить("ЗаполнитьСпособДоставкиВШаблонеСообщения", Ложь); + ПараметрыДоставки.Вставить("ПредставлениеОтчетовПолучателя", ""); + ПараметрыДоставки.Вставить("ШаблонТемы", ШаблонТемы()); + ПараметрыДоставки.Вставить("ШаблонТекста", ""); + + ПараметрыДоставки.Вставить("ПараметрыФорматов", Новый Соответствие); + ПараметрыДоставки.Вставить("ТранслитерироватьИменаФайлов", Ложь); + ПараметрыДоставки.Вставить("СтрокаОбщихОтчетов", Неопределено); + ПараметрыДоставки.Вставить("ДобавлятьСсылки", ""); + + ПараметрыДоставки.Вставить("БылиОшибки", Ложь); + ПараметрыДоставки.Вставить("БылиПредупреждения", Ложь); + ПараметрыДоставки.Вставить("ВыполненаВПапку", Ложь); + ПараметрыДоставки.Вставить("ВыполненаВСетевойКаталог", Ложь); + ПараметрыДоставки.Вставить("ВыполненаНаFTP", Ложь); + ПараметрыДоставки.Вставить("ВыполненаПоЭлектроннойПочте", Ложь); + ПараметрыДоставки.Вставить("ВыполненныеСпособыПубликации", ""); + + Возврат ПараметрыДоставки; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl index 8e7ecdaa4..cf451538b 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl @@ -11,14 +11,14 @@ // Для внутреннего использования. // // Параметры: -// ПараметрыПолучателей - Структура - +// ПараметрыПолучателей - Структура // // Возвращаемое значение: -// Структура - где: -// * Получатели - Соответствие - -// * БылиКритичныеОшибки - Булево - -// * Текст - Строка - -// * Подробно - Строка - +// Структура: +// * Получатели - Соответствие +// * БылиКритичныеОшибки - Булево +// * Текст - Строка +// * Подробно - Строка // Функция СформироватьСписокПолучателейРассылки(Знач ПараметрыПолучателей) Экспорт ПараметрыЖурнала = Новый Структура("ИмяСобытия, Метаданные, Данные, МассивОшибок, БылиОшибки"); diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl index 0ceeaefda..a3281d743 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl @@ -11,8 +11,8 @@ // Обработчик команды формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма отчета. -// Команда - КомандаФормы - Команда, которая была вызвана. +// Форма - ФормаКлиентскогоПриложения - форма отчета. +// Команда - КомандаФормы - команда, которая была вызвана. // // Места использования: // ОбщаяФорма.ФормаОтчета.Подключаемый_Команда(). @@ -24,8 +24,8 @@ // Обработчик команды формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма отчета. -// Команда - КомандаФормы - Команда, которая была вызвана. +// Форма - ФормаКлиентскогоПриложения - форма отчета. +// Команда - КомандаФормы - команда, которая была вызвана. // // Места использования: // ОбщаяФорма.ФормаОтчета.Подключаемый_Команда(). @@ -42,8 +42,8 @@ // Обработчик команды формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма отчета. -// Команда - КомандаФормы - Команда, которая была вызвана. +// Форма - ФормаКлиентскогоПриложения - форма отчета. +// Команда - КомандаФормы - команда, которая была вызвана. // // Места использования: // ОбщаяФорма.ФормаОтчета.Подключаемый_Команда(). @@ -59,9 +59,9 @@ // Обработчик выбора формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма отчета. -// ВыбранноеЗначение - Произвольный - Результат выбора в подчиненной форме. -// ИсточникВыбора - ФормаКлиентскогоПриложения - Форма, где осуществлен выбор. +// Форма - ФормаКлиентскогоПриложения - форма отчета. +// ВыбранноеЗначение - Произвольный - результат выбора в подчиненной форме. +// ИсточникВыбора - ФормаКлиентскогоПриложения - форма, где осуществлен выбор. // Результат - Булево - Истина, если результат выбора обработан. // // Места использования: @@ -146,11 +146,11 @@ // Обработчик результата работы процедуры ВыбратьПолучателя. // // Параметры: -// ВыбранныйЭлемент - ЭлементСпискаЗначений - -// ДополнительныеПараметры - Структура - содержит: -// * ОбработчикРезультата - ОписаниеОповещения - -// * Получатели - Соответствие - -// * ВозвращатьСоответствие - Булево - +// ВыбранныйЭлемент - ЭлементСпискаЗначений +// ДополнительныеПараметры - Структура: +// * ОбработчикРезультата - ОписаниеОповещения +// * Получатели - Соответствие +// * ВозвращатьСоответствие - Булево // Процедура ВыбратьПолучателяЗавершение(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт Если ВыбранныйЭлемент = Неопределено Тогда @@ -243,8 +243,8 @@ // Открывает рассылку отчетов из формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма отчета. -// Ссылка - СправочникСсылка.РассылкиОтчетов - Необязательный. Ссылка рассылки отчетов. +// Форма - ФормаКлиентскогоПриложения - форма отчета. +// Ссылка - СправочникСсылка.РассылкиОтчетов - необязательный. Ссылка рассылки отчетов. // Процедура ОткрытьРассылкуИзФормыОтчета(Форма, Ссылка = Неопределено) НастройкиОтчета = Форма.НастройкиОтчета; @@ -297,15 +297,15 @@ // Фрагменты ":@", ":", ":" и "/" могут отсутствовать. // // Параметры: -// FTPАдрес - Строка - Полный путь к ftp ресурсу. +// FTPАдрес - Строка - полный путь к ftp ресурсу. // // Возвращаемое значение: -// Структура - Результат - Структура - Результат разбора полного пути. -// * Логин - Строка - Имя пользователя ftp. -// * Пароль - Строка - Пароль пользователя ftp. -// * Сервер - Строка - Имя сервера. -// * Порт - Число - Порт сервера. По умолчанию 21. -// * Каталог - Строка - Путь к каталогу на сервере. Первый символ всегда "/". +// Структура - результат - Структура - Результат разбора полного пути: +// * Логин - Строка - имя пользователя ftp. +// * Пароль - Строка - пароль пользователя ftp. +// * Сервер - Строка - имя сервера. +// * Порт - Число - порт сервера. По умолчанию 21. +// * Каталог - Строка - путь к каталогу на сервере. Первый символ всегда "/". // Функция РазобратьFTPАдрес(ПолныйFTPАдрес) Экспорт diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl index fc947246e..c9b356ea3 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl @@ -12,13 +12,13 @@ // Ограничение: должны присутствовать и левый и правый элементы обрамления. // // Параметры: -// Шаблон - Строка - Исходный шаблон. Например "Добрый день, [ФИО]". -// Параметры - Структура - Набор параметров, которые необходимо подставить в шаблон. -// * Ключ - Имя параметра. Например "ФИО". -// * Значение - Строка подстановки. Например "Иванов Иван Иванович". +// Шаблон - Строка - исходный шаблон. Например "Добрый день, [ФИО]". +// Параметры - Структура - набор параметров, которые необходимо подставить в шаблон: +// * Ключ - имя параметра. Например "ФИО". +// * Значение - строка подстановки. Например "Иванов Иван Иванович". // // Возвращаемое значение: -// Строка - Шаблон с заполненными параметрами. +// Строка - шаблон с заполненными параметрами. // Функция ЗаполнитьШаблон(Шаблон, Параметры) Экспорт Левый = "["; // Начало обрамления параметра. @@ -64,7 +64,7 @@ // ПараметрыДоставки - см. ВыполнитьРассылку(), параметр ПараметрыДоставки. // // Возвращаемое значение: -// Строка - Представление способов доставки. +// Строка - представление способов доставки. // Функция ПредставлениеСпособовДоставки(ПараметрыДоставки) Экспорт Префикс = НСтр("ru = 'Результат'"); diff --git a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl index a406e25be..77d8857a3 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl @@ -13,7 +13,7 @@ // Другие примеры использования см. функцию РассылкаОтчетовПовтИсп.СписокФорматов. // // Параметры: -// СписокФорматов - СписокЗначений - список форматов. +// СписокФорматов - СписокЗначений: // * Значение - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка формата. // * Представление - Строка - представление формата. // * Пометка - Булево - признак того, что формат используется по умолчанию. @@ -87,7 +87,7 @@ // ПараметрыПолучателей - Структура - параметры формирования получателей рассылки. // Запрос - Запрос - запрос, который будет использован, если значение параметра СтандартнаяОбработка останется Истина. // СтандартнаяОбработка - Булево - признак использования стандартных механизмов. -// Результат - Соответствие - получатели с их E-mail адресами. +// Результат - Соответствие - получатели с их E-mail адресами: // * Ключ - СправочникСсылка - получатель. // * Значение - Строка - набор E-mail адресов в строке с разделителями. // @@ -106,6 +106,24 @@ +КонецПроцедуры + +// Позволяет переопределить параметры формирования рассылаемого отчета. +// +// Параметры: +// ПараметрыФормирования - Структура: +// * ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных - настройки отчета, +// установленные для соответствующей рассылки. +// ДополнительныеПараметры - Структура: +// * Отчет - СправочникСсылка.ВариантыОтчетов - ссылка на хранилище настроек варианта рассылаемого отчета. +// * Объект - ОтчетОбъект - объект рассылаемого отчета. +// * СКД - Булево - признак того, что отчет строится посредством системы компоновки данных. +// * КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - компоновщик настроек рассылаемого отчета. +// +Процедура ПриПодготовкеПараметровФормированияОтчета(ПараметрыФормирования, ДополнительныеПараметры) Экспорт + + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl index b8d8a4966..938f54fe2 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl @@ -11,15 +11,15 @@ // Таблица типов получателей в разрезах хранения и пользовательского представления этих типов. // // Возвращаемое значение: -// ТаблицаТипов - ТаблицаЗначений - Таблица типов получателей. -// * ИдентификаторОбъектаМетаданных - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка, которая хранится +// ТаблицаТипов - ТаблицаЗначений - таблица типов получателей: +// * ИдентификаторОбъектаМетаданных - СправочникСсылка.ИдентификаторыОбъектовМетаданных - ссылка, которая хранится // в базе данных. -// * ТипПолучателей - ОписаниеТипов - Тип, которым ограничиваются значения списков получателей и исключенных. -// * Представление - Строка - Представление типа для пользователей. -// * ОсновнойВидКИ - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации: e-mail, по +// * ТипПолучателей - ОписаниеТипов - тип, которым ограничиваются значения списков получателей и исключенных. +// * Представление - Строка - представление типа для пользователей. +// * ОсновнойВидКИ - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации: e-mail, по // умолчанию. -// * ГруппаКИ - СправочникСсылка.ВидыКонтактнойИнформации - Группа вида контактной информации. -// * ПутьФормыВыбора - Строка - Путь к форме выбора. +// * ГруппаКИ - СправочникСсылка.ВидыКонтактнойИнформации - группа вида контактной информации. +// * ПутьФормыВыбора - Строка - путь к форме выбора. // Функция ТаблицаТиповПолучателей() Экспорт diff --git a/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl index 97f6c29f4..fcbf941bb 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl @@ -34,4 +34,8 @@ КонецПроцедуры +Процедура ПерейтиКНастройкеРегламентныхЗаданий() Экспорт + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("e1cib/app/Обработка.РегламентныеИФоновыеЗадания"); +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl index 1698ba626..683bd28b2 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl @@ -14,7 +14,7 @@ // - прочие параметры. // // Параметры: -// Настройки - ТаблицаЗначений - таблица значений с колонками: +// Настройки - ТаблицаЗначений: // * РегламентноеЗадание - ОбъектМетаданныхРегламентноеЗадание - регламентное задание. // * ФункциональнаяОпция - ОбъектМетаданныхФункциональнаяОпция - функциональная опция, // от которой зависит регламентное задание. @@ -24,17 +24,21 @@ // для каждой зависимости. // По умолчанию Ложь - если хотя бы одна функциональная опция включена, // то регламентное задание тоже включено. -// * ВключатьПриВключенииФункциональнойОпции - Булево, Неопределено - если Ложь, то при +// * ВключатьПриВключенииФункциональнойОпции - Булево +// - Неопределено - если Ложь, то при // включении функциональной опции регламентное задание не будет включаться. Значение // Неопределено соответствует значению Истина. // По умолчанию - Неопределено. -// * ДоступноВПодчиненномУзлеРИБ - Булево, Неопределено - Истина или Неопределено, если регламентное +// * ДоступноВПодчиненномУзлеРИБ - Булево +// - Неопределено - Истина или Неопределено, если регламентное // задание доступно в РИБ. // По умолчанию - Неопределено. -// * ДоступноВАвтономномРабочемМесте - Булево, Неопределено - Истина или Неопределено, если регламентное +// * ДоступноВАвтономномРабочемМесте - Булево +// - Неопределено - Истина или Неопределено, если регламентное // задание доступно в автономном рабочем месте. // По умолчанию - Неопределено. -// * ДоступноВМоделиСервиса - Булево, Неопределено - Ложь, если необходимо блокировать выполнение регламентного +// * ДоступноВМоделиСервиса - Булево +// - Неопределено - Ложь, если необходимо блокировать выполнение регламентного // задания (в т.ч. задания очереди) в информационной базе с включенным использованием разделителя. // Значение Неопределено трактуется как Истина. // По умолчанию - Неопределено. @@ -60,7 +64,7 @@ // Позволяет переопределить настройки подсистемы, заданные по умолчанию. // // Параметры: -// Настройки - Структура - структура с ключами: +// Настройки - Структура: // * РасположениеКомандыСнятияБлокировки - Строка - определяет расположение команды снятия // блокировки работы с внешними ресурсами // при перемещении информационной базы. diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index 6cbba4199..baa4ef36a 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -17,10 +17,10 @@ // 1) Общие для любого режима работы: // * УникальныйИдентификатор - УникальныйИдентификатор - идентификатор регламентного задания // в локальном режиме работы. -// - СправочникСсылка.ОчередьЗаданий, -// СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания +// - СправочникСсылка.ОчередьЗаданий +// - СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания // очереди в модели сервиса. -// * Метаданные - ОбъектМетаданных: РегламентноеЗадание - метаданные регламентного задания. +// * Метаданные - ОбъектМетаданныхРегламентноеЗадание - метаданные регламентного задания. // - Строка - имя регламентного задания. // * Использование - Булево - если Истина, задание включено. // * Ключ - Строка - прикладной идентификатор задания. @@ -35,32 +35,29 @@ // для разделенных заданий очереди. // // Возвращаемое значение: -// Массив - в локальном режиме работы массив регламентных заданий. -// см. описание метода РегламентноеЗадание в синтакс-помощнике. -// ТаблицаЗначений - в модели сервиса таблица значений со свойствами: -// * ИнтервалПовтораПриАварийномЗавершении - Число - Интервал в секундах, через который нужно перезапускать -// задание в случае его аварийного завершения. -// * Использование - Булево - если Истина, задание включено. -// * Ключ - Строка - прикладной идентификатор задания. +// Массив из РегламентноеЗадание - в локальном режиме работы массив регламентных заданий. +// ТаблицаЗначений - в модели сервиса с колонками: +// * Использование - Булево - если Истина, задание включено. +// * Ключ - Строка - прикладной идентификатор задания. +// * Параметры - Массив - параметры, передаваемые в обработчик задания. +// * Расписание - Расписание - расписание задания. +// * УникальныйИдентификатор - УникальныйИдентификатор +// - СправочникСсылка.ОчередьЗаданий +// - СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания. +// * ЗапланированныйМоментЗапуска - Дата - дата и время запланированного запуска задания +// (в часовом поясе области данных). +// * ИмяМетода - Строка - имя метода (или псевдоним) обработчика очереди задании. +// * ОбластьДанных - Число - значение разделителя области данных задания. +// * СостояниеЗадания - ПеречислениеСсылка.СостоянияЗаданий - состояние задания очереди. +// * Шаблон - СправочникСсылка.ШаблоныЗаданийОчереди - шаблон задания, +// используется только для разделенных заданий очереди. +// * ЭксклюзивноеВыполнение - Булево - при установленном флаге задание будет выполнено +// даже при установленной блокировке начала сеансов в области +// данных. Так же если в области есть задания с таким флагом +// сначала будут выполнены они. +// * ИнтервалПовтораПриАварийномЗавершении - Число - интервал в секундах, через который нужно перезапускать +// задание в случае его аварийного завершения. // * КоличествоПовторовПриАварийномЗавершении - Число - количество повторов при аварийном завершении задания. -// * Параметры - Массив - параметры, передаваемые в обработчик задания. -// * Расписание - Расписание - расписание задания. -// * УникальныйИдентификатор - УникальныйИдентификатор - идентификатор регламентного задания -// в локальном режиме работы. -// - СправочникСсылка.ОчередьЗаданий, -// СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания -// очереди в модели сервиса. -// * ЗапланированныйМоментЗапуска - Дата - дата и время запланированного запуска задания -// (в часовом поясе области данных). -// * ИмяМетода - Строка - имя метода (или псевдоним) обработчика очереди задании. -// * ОбластьДанных - Число - значение разделителя области данных задания. -// * СостояниеЗадания - ПеречислениеСсылка.СостоянияЗаданий - состояние задания очереди. -// * Шаблон - СправочникСсылка.ШаблоныЗаданийОчереди - шаблон задания, -// используется только для разделенных заданий очереди. -// * ЭксклюзивноеВыполнение - Булево - при установленном флаге задание будет выполнено -// даже при установленной блокировке начала сеансов в области -// данных. Так же если в области есть задания с таким флагом -// сначала будут выполнены они. // Функция НайтиЗадания(Отбор) Экспорт @@ -172,7 +169,12 @@ КонецЕсли; Если ТипЗнч(Идентификатор) = Тип("Строка") Тогда - Идентификатор = Новый УникальныйИдентификатор(Идентификатор); + ОбъектМетаданных = Метаданные.РегламентныеЗадания.Найти(Идентификатор); + Если ОбъектМетаданных = Неопределено Тогда + Идентификатор = Новый УникальныйИдентификатор(Идентификатор); + Иначе + Идентификатор = ОбъектМетаданных; + КонецЕсли; КонецЕсли; Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -243,7 +245,7 @@ // Добавляет новое задание в очередь или как регламентное. // // Параметры: -// Параметры - Структура - Параметры добавляемого задания, возможные ключи: +// Параметры - Структура - параметры добавляемого задания, возможные ключи: // * Использование // * Метаданные - обязательно для указания // * Параметры @@ -362,7 +364,12 @@ КонецЕсли; Если ТипЗнч(Идентификатор) = Тип("Строка") Тогда - Идентификатор = Новый УникальныйИдентификатор(Идентификатор); + ОбъектМетаданных = Метаданные.РегламентныеЗадания.Найти(Идентификатор); + Если ОбъектМетаданных = Неопределено Тогда + Идентификатор = Новый УникальныйИдентификатор(Идентификатор); + Иначе + Идентификатор = ОбъектМетаданных; + КонецЕсли; КонецЕсли; Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -431,8 +438,9 @@ // В случае вызова в транзакции на задание устанавливается объектная блокировка. // // Параметры: -// Идентификатор - СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания -// Параметры - Структура - Параметры, которые следует установить заданию, возможные ключи: +// Идентификатор - СправочникСсылка.ОчередьЗаданий +// - СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания +// Параметры - Структура - параметры, которые следует установить заданию, возможные ключи: // * Использование // * Параметры // * Ключ @@ -454,7 +462,12 @@ КонецЕсли; Если ТипЗнч(Идентификатор) = Тип("Строка") Тогда - Идентификатор = Новый УникальныйИдентификатор(Идентификатор); + ОбъектМетаданных = Метаданные.РегламентныеЗадания.Найти(Идентификатор); + Если ОбъектМетаданных = Неопределено Тогда + Идентификатор = Новый УникальныйИдентификатор(Идентификатор); + Иначе + Идентификатор = ОбъектМетаданных; + КонецЕсли; КонецЕсли; Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -627,15 +640,14 @@ ПараметрыЗадания = Новый Структура; - ИдентификаторТипЗнч = ТипЗнч(Идентификатор); МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - Если ИдентификаторТипЗнч = Тип("ОбъектМетаданных") Тогда + Если ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") Тогда ИмяМетода = Идентификатор.ИмяМетода; ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); - ИначеЕсли ИдентификаторТипЗнч = Тип("СтрокаТаблицыЗначений") Тогда + ИначеЕсли ТипЗнч(Идентификатор) = Тип("СтрокаТаблицыЗначений") Тогда Возврат Идентификатор.Идентификатор.УникальныйИдентификатор(); - ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ИдентификаторТипЗнч) Тогда + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Идентификатор)) Тогда Возврат Идентификатор.УникальныйИдентификатор(); Иначе Возврат Неопределено; @@ -815,8 +827,8 @@ КонецЕсли; Если РегламентноеЗадание = Неопределено Тогда - ВызватьИсключение( НСтр("ru = 'Регламентное задание не найдено. - |Возможно, оно удалено другим пользователем.'") ); + ВызватьИсключение( НСтр("ru = 'Регламентное задание не существует. + |Возможно оно удалено другим пользователем.'") ); КонецЕсли; Возврат РегламентноеЗадание; @@ -961,6 +973,26 @@ КонецПроцедуры +Функция ПараметрРегламентногоЗадания(РегламентноеЗадание, ИмяСвойства, ЗначениеПоУмолчанию) Экспорт + + ПараметрыЗадания = Новый Структура; + Если ОбщегоНазначения.РазделениеВключено() Тогда + ПараметрыЗадания.Вставить("ИмяМетода", РегламентноеЗадание.ИмяМетода); + Иначе + ПараметрыЗадания.Вставить("Метаданные", РегламентноеЗадание); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = НайтиЗадания(ПараметрыЗадания); + Для Каждого Задание Из СписокЗаданий Цикл + Возврат Задание[ИмяСвойства]; + КонецЦикла; + + Возврат ЗначениеПоУмолчанию; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index 0325db417..8e824fc40 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -72,7 +72,7 @@ // Формирует таблицу зависимостей регламентных заданий от функциональных опций. // // Возвращаемое значение: -// ТаблицаЗначений - таблица значений с колонками: +// ТаблицаЗначений: // * РегламентноеЗадание - ОбъектМетаданныхРегламентноеЗадание - регламентное задание. // * ФункциональнаяОпция - ОбъектМетаданныхФункциональнаяОпция - функциональная опция, // от которой зависит регламентное задание. @@ -82,14 +82,17 @@ // для каждой зависимости. // По умолчанию Ложь - если хотя бы одна функциональная опция включена, // то регламентное задание тоже включено. -// * ВключатьПриВключенииФункциональнойОпции - Булево, Неопределено - если Ложь, то при +// * ВключатьПриВключенииФункциональнойОпции - Булево +// - Неопределено - если Ложь, то при // включении функциональной опции регламентное задание не будет включаться. Значение // Неопределено соответствует значению Истина. // По умолчанию - неопределено. -// * ДоступноВПодчиненномУзлеРИБ - Булево, Неопределено - Истина или Неопределено, если регламентное +// * ДоступноВПодчиненномУзлеРИБ - Булево +// - Неопределено - Истина или Неопределено, если регламентное // задание доступно в РИБ. // По умолчанию - неопределено. -// * ДоступноВМоделиСервиса - Булево, Неопределено - Истина или Неопределено, если регламентное +// * ДоступноВМоделиСервиса - Булево +// - Неопределено - Истина или Неопределено, если регламентное // задание доступно в модели сервиса. // По умолчанию - неопределено. // * РаботаетСВнешнимиРесурсами - Булево - Истина, если регламентное задание работает @@ -197,7 +200,7 @@ // // Параметры: // Источник - КонстантаМенеджерЗначения - константа хранения значения ФО. -// Отказ - Булево - Отказ при записи константы. +// Отказ - Булево - отказ при записи константы. // Процедура ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции(Источник, Отказ) Экспорт @@ -269,7 +272,7 @@ // Содержит значения настроек по умолчанию. // // Возвращаемое значение: -// Структура - Структура с ключами: +// Структура: // * РасположениеКомандыСнятияБлокировки - Строка - определяет расположение команды снятия // блокировки работы с внешними ресурсами. // @@ -301,24 +304,24 @@ // Параметры: -// Параметры - Структура - со свойствами: -// * Таблица - ТаблицаЗначений - с колонками: -// ** Идентификатор - Строка- -// ** Предопределенное - Булево- -// ** Ключ - Строка- -// ** Наименование - Строка- -// ** Использование - Булево- -// ** Расписание - Строка- -// ** ИнтервалПовтораПриАварийномЗавершении - Число- -// ** КоличествоПовторовПриАварийномЗавершении - Строка- -// ** УникальныйИдентификаторПоследнегоФЗ - Строка- -// ** СостояниеВыполнения - Строка- -// ** ДатаОкончания - Строка- -// ** ИмяПользователя - Строка- -// ** ИмяЗадания - Строка- -// ** Параметризуемое - Булево- -// ** ДатаНачала - Строка- -// АдресХранилища - Строка - +// Параметры - Структура: +// * Таблица - ТаблицаЗначений: +// ** Идентификатор - Строка +// ** Предопределенное - Булево +// ** Ключ - Строка +// ** Наименование - Строка +// ** Использование - Булево +// ** Расписание - Строка +// ** ИнтервалПовтораПриАварийномЗавершении - Число +// ** КоличествоПовторовПриАварийномЗавершении - Строка +// ** УникальныйИдентификаторПоследнегоФЗ - Строка +// ** СостояниеВыполнения - Строка +// ** ДатаОкончания - Строка +// ** ИмяПользователя - Строка +// ** ИмяЗадания - Строка +// ** Параметризуемое - Булево +// ** ДатаНачала - Строка +// АдресХранилища - Строка // Процедура СформироватьТаблицуРегламентныхЗаданий(Параметры, АдресХранилища) Экспорт @@ -345,12 +348,24 @@ ОтключенныеЗадания.Добавить(ОбъектМетаданных.Имя); Продолжить; КонецЕсли; - Если НЕ ОбщегоНазначения.РазделениеВключено() И ПодсистемаРаботаВМоделиСервиса <> Неопределено Тогда + + Если Не ОбщегоНазначения.РазделениеВключено() + И ПодсистемаРаботаВМоделиСервиса <> Неопределено Тогда + + ПараметрыЗадания = ПараметрыРегламентныхЗаданий.Найти(ОбъектМетаданных, "РегламентноеЗадание"); + + Если ПараметрыЗадания <> Неопределено + И ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() + И ПараметрыЗадания.ДоступноВАвтономномРабочемМесте = Истина Тогда + Продолжить; + КонецЕсли; + Если ПодсистемаРаботаВМоделиСервиса.Состав.Содержит(ОбъектМетаданных) Тогда ОтключенныеЗадания.Добавить(ОбъектМетаданных.Имя); Продолжить; КонецЕсли; - Для каждого Подсистема Из ПодсистемаРаботаВМоделиСервиса.Подсистемы Цикл + + Для Каждого Подсистема Из ПодсистемаРаботаВМоделиСервиса.Подсистемы Цикл Если Подсистема.Состав.Содержит(ОбъектМетаданных) Тогда ОтключенныеЗадания.Добавить(ОбъектМетаданных.Имя); Продолжить; @@ -366,7 +381,7 @@ Идентификатор = Строка(Задание.УникальныйИдентификатор); - Если Индекс >= Таблица.Количество() Или Таблица.Получить(Индекс).Идентификатор <> Идентификатор Тогда + Если Индекс >= Таблица.Количество() Или Таблица[Индекс].Идентификатор <> Идентификатор Тогда // Вставка нового задания. Обновляемое = Таблица.Вставить(Индекс); @@ -455,11 +470,13 @@ // тоже правило. // // Параметры: -// Задание - РегламентноеЗадание, Строка - уникального идентификатора РегламентногоЗадания. +// Задание - РегламентноеЗадание +// - Строка - уникального идентификатора РегламентногоЗадания. // // Возвращаемое значение: -// Структура - со свойствами -// * МоментЗапуска - Неопределено, Дата - для файловой ИБ устанавливает переданный момент, как момент запуска +// Структура: +// * МоментЗапуска - Неопределено +// - Дата - для файловой ИБ устанавливает переданный момент, как момент запуска // метода регламентного задания. // Для серверной ИБ - возвращает момент запуска фонового задания по факту. // * ИдентификаторФоновогоЗадания - Строка - для серверной ИБ возвращает идентификатор запущенного фонового задания. @@ -516,10 +533,11 @@ // Наименование, Метаданные.Синоним, Метаданные.Имя. // // Параметры: -// Задание - РегламентноеЗадание, Строка - если строка, тогда УникальныйИдентификатор строкой. +// Задание - РегламентноеЗадание +// - Строка - если строка, тогда УникальныйИдентификатор строкой. // // Возвращаемое значение: -// Строка - . +// Строка // Функция ПредставлениеРегламентногоЗадания(Знач Задание) Экспорт @@ -565,11 +583,12 @@ // и сообщения/ошибки есть. // // Параметры: -// Задание - РегламентноеЗадание, Строка - УникальныйИдентификатор +// Задание - РегламентноеЗадание +// - Строка - УникальныйИдентификатор // РегламентногоЗадания строкой. // // Возвращаемое значение: -// Строка - . +// Строка // Функция СообщенияИОписанияОшибокРегламентногоЗадания(Знач Задание) Экспорт @@ -590,7 +609,7 @@ // Отменяет фоновое задание, если это возможно, а именно, если оно выполняется на сервере, и активно. // // Параметры: -// Идентификатор - Строка уникального идентификатора ФоновогоЗадания. +// Идентификатор - строка уникального идентификатора ФоновогоЗадания. // Процедура ОтменитьФоновоеЗадание(Идентификатор) Экспорт @@ -604,7 +623,7 @@ Если МассивФоновыхЗаданий.Количество() = 1 Тогда ФоновоеЗадание = МассивФоновыхЗаданий[0]; Иначе - ВызватьИсключение НСтр("ru = 'Фоновое задание не найдено на сервере.'"); + ВызватьИсключение НСтр("ru = 'Фоновое задание не существует.'"); КонецЕсли; Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда @@ -792,7 +811,7 @@ // // Параметры: // Идентификатор - Строка - уникального идентификатора ФоновогоЗадания. -// ИменаСвойств - Строка, если заполнено, возвращается структура с указанными свойствами. +// ИменаСвойств - Строка - если заполнено, возвращается структура с указанными свойствами. // // Возвращаемое значение: // СтрокаТаблицыЗначений, Структура - свойства ФоновогоЗадания. @@ -824,23 +843,24 @@ // Процедура работает, как в файл-серверном, так и в клиент-серверном режимах. // // Параметры: -// РегламентноеЗадание - РегламентноеЗадание, Строка - строка уникального идентификатора РегламентногоЗадания. +// РегламентноеЗадание - РегламентноеЗадание +// - Строка - строка уникального идентификатора РегламентногоЗадания. // // Возвращаемое значение: // СтрокаТаблицыЗначений - с колонками: -// * Идентификатор - Строка - -// * Наименование - Строка - -// * Ключ - Строка - -// * Конец - Дата - -// * ИдентификаторРегламентногоЗадания - Строка - -// * Состояние - СостояниеФоновогоЗадания - -// * ИмяМетода - Строка - -// * Расположение - Строка - -// * ОписаниеИнформацииОбОшибке - Строка - -// * ПопыткаЗапуска - Число - -// * СообщенияПользователю - Массив - -// * НомерСеанса - Число - -// * НачалоСеанса - Дата - +// * Идентификатор - Строка +// * Наименование - Строка +// * Ключ - Строка +// * Конец - Дата +// * ИдентификаторРегламентногоЗадания - Строка +// * Состояние - СостояниеФоновогоЗадания +// * ИмяМетода - Строка +// * Расположение - Строка +// * ОписаниеИнформацииОбОшибке - Строка +// * ПопыткаЗапуска - Число +// * СообщенияПользователю - Массив +// * НомерСеанса - Число +// * НачалоСеанса - Дата // Функция СвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(РегламентноеЗадание) @@ -873,7 +893,7 @@ // Задание - Строка - УникальныйИдентификатор ФоновогоЗадания строкой. // // Возвращаемое значение: -// Строка - . +// Строка // Функция СообщенияИОписанияОшибокФоновогоЗадания(Идентификатор, СвойстваФоновогоЗадания = Неопределено) Экспорт @@ -1014,20 +1034,20 @@ // Возвращает новую таблицу свойств фоновых заданий. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: -// * Идентификатор - Строка - -// * Наименование - Строка - -// * Ключ - Строка - -// * Конец - Дата - -// * ИдентификаторРегламентногоЗадания - Строка - -// * Состояние - СостояниеФоновогоЗадания - -// * ИмяМетода - Строка - -// * Расположение - Строка - -// * ОписаниеИнформацииОбОшибке - Строка - -// * ПопыткаЗапуска - Число - -// * СообщенияПользователю - Массив - -// * НомерСеанса - Число - -// * НачалоСеанса - Дата - +// ТаблицаЗначений: +// * Идентификатор - Строка +// * Наименование - Строка +// * Ключ - Строка +// * Конец - Дата +// * ИдентификаторРегламентногоЗадания - Строка +// * Состояние - СостояниеФоновогоЗадания +// * ИмяМетода - Строка +// * Расположение - Строка +// * ОписаниеИнформацииОбОшибке - Строка +// * ПопыткаЗапуска - Число +// * СообщенияПользователю - Массив +// * НомерСеанса - Число +// * НачалоСеанса - Дата // Функция НовыеСвойстваФоновыхЗаданий() @@ -1083,10 +1103,11 @@ КонецПроцедуры // Параметры: -// МассивФоновыхЗаданий - Массив из ФоновоеЗадание - -// ПоследнееФоновоеЗадание - ФоновоеЗадание, Неопределено - +// МассивФоновыхЗаданий - Массив из ФоновоеЗадание +// ПоследнееФоновоеЗадание - ФоновоеЗадание +// - Неопределено // Возвращаемое значение: -// ФоновоеЗадание, Неопределено - +// ФоновоеЗадание, Неопределено // Функция ПоследнееФоновоеЗаданиеВМассиве(МассивФоновыхЗаданий, ПоследнееФоновоеЗадание = Неопределено) diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index 518c66ad0..a5741ffa2 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -11,7 +11,7 @@ // Открывает форму создания резервной копии. // // Параметры: -// Параметры - Структура - Параметры формы создания резервной копии. +// Параметры - Структура - параметры формы создания резервной копии. // Процедура ОткрытьФормуРезервногоКопирования(Параметры = Неопределено) Экспорт @@ -538,6 +538,13 @@ КонецФункции +Процедура НеОстанавливатьВыполнениеСценариев() Экспорт + + Оболочка = Новый COMОбъект("Wscript.Shell"); + Оболочка.RegWrite("HKCU\Software\Microsoft\Internet Explorer\Styles\MaxScriptStatements", 1107296255, "REG_DWORD"); + +КонецПроцедуры + #КонецЕсли Функция ДоступноРезервноеКопирование() diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентПереопределяемый/Module.bsl index 08fbe91cc..dc49233e8 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентПереопределяемый/Module.bsl @@ -12,7 +12,7 @@ // По умолчанию отключено. // // Параметры: -// ПоказыватьПредупреждение - Булево - Переопределяемый признак необходимости показа предупреждения. +// ПоказыватьПредупреждение - Булево - переопределяемый признак необходимости показа предупреждения. // Процедура ПриОпределенииНеобходимостиПоказаПредупрежденийОРезервномКопировании(ПоказыватьПредупреждение) Экспорт diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index f4fb8a190..0f2a58c74 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -68,7 +68,7 @@ // Ссылка для подстановки в форматированную строку для открытия обработки резервного копирования ИБ. // // Возвращаемое значение: -// Строка - Навигационная ссылка. +// Строка - навигационная ссылка. // Функция НавигационнаяСсылкаОбработкиРезервногоКопирования() Экспорт @@ -97,7 +97,8 @@ // * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку // дела на панели "Текущие дела". // * ПараметрыФормы - Структура - параметры, с которыми нужно открывать форму показателя. -// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего +// * Владелец - Строка +// - объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего // или объект метаданных подсистема. // * Подсказка - Строка - текст подсказки. // @@ -263,9 +264,6 @@ КонецФункции -// Если в текущих параметрах резервного копирования нет параметра, который есть в -// функции НовыеНастройкиРезервногоКопирования, то он добавляется со значением по умолчанию. -// // Параметры: // ПараметрыРезервногоКопирования - Структура - параметры резервного копирования ИБ. // @@ -297,8 +295,6 @@ КонецПроцедуры -// Проверяет, не настало ли время проводить автоматическое резервное копирование. -// // Возвращаемое значение: // Булево - Истина, если настал момент проведения резервного копирования. // @@ -333,10 +329,7 @@ КонецФункции -// Возвращает значение настройки "Статус резервного копирования" в части результата. -// Используется при начале работы системы для показа формы с результатами резервного копирования. -// -Процедура УстановитьРезультатРезервногоКопирования() Экспорт +Процедура СброситьПризнакРезервногоКопирования() Экспорт Настройки = НастройкиРезервногоКопирования(); Настройки.ПроведеноКопирование = Ложь; @@ -349,8 +342,6 @@ КонецПроцедуры -// Устанавливает дату последнего оповещения пользователя. -// // Параметры: // ДатаНапоминания - Дата - дата и время последнего оповещения пользователя о необходимости проведения резервного // копирования. @@ -363,11 +354,9 @@ КонецПроцедуры -// Устанавливает настройку в параметры резервного копирования. -// // Параметры: // ИмяЭлемента - Строка - имя параметра. -// ЗначениеЭлемента - Произвольный тип - значение параметра. +// ЗначениеЭлемента - Произвольный - значение параметра. // Процедура УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента) Экспорт @@ -377,8 +366,6 @@ КонецПроцедуры -// Возвращает структуру с параметрами резервного копирования. -// // Параметры: // НачалоРаботы - Булево - признак вызова при начале работы программы. // @@ -450,8 +437,6 @@ КонецФункции -// Обновляет результат восстановления и обновляет структуру параметров резервного копирования. -// Процедура ОбновитьРезультатВосстановления() Настройки = ПараметрыРезервногоКопирования(); @@ -460,8 +445,6 @@ КонецПроцедуры -// Возвращает информацию о текущем пользователе. -// Функция ИнформацияОПользователе() Экспорт ИнформацияОПользователе = Новый Структура("Имя, ТребуетсяВводПароля", "", Ложь); @@ -481,8 +464,8 @@ КонецФункции -// Процедура, вызываемая из скрипта через com-соединение. -// Записывает результат проведенного копирования в настройки. +// Записывает признак того, что резервное копирование выполнено. +// Вызывается из скрипта через COM-соединение. // // Параметры: // Результат - Булево - результат копирования. @@ -498,8 +481,8 @@ КонецПроцедуры -// Вызывается из скрипта через com-соединение для -// записи результата проведенного восстановления ИБ в настройки. +// Записывает признак того, что выполнено восстановление из резервной копии. +// Вызывается из скрипта через COM-соединение. // // Параметры: // Результат - Булево - результат восстановления. @@ -532,8 +515,7 @@ СтрокаСоединенияИнформационнойБазы = Лев(СтрокаСоединенияИнформационнойБазы, СтрДлина(СтрокаСоединенияИнформационнойБазы) - 1); КонецЕсли; - КаталогПрограммы = ?(ПустаяСтрока(КаталогПрограммы), КаталогПрограммы(), КаталогПрограммы); - ИмяИсполняемогоФайлаПрограммы = КаталогПрограммы + ПараметрыСкрипта.ИмяФайлаПрограммы; + ИмяИсполняемогоФайлаПрограммы = КаталогПрограммы() + ПараметрыСкрипта.ИмяФайлаПрограммы; // Определение пути к информационной базе. ПризнакФайловогоРежима = Неопределено; @@ -545,7 +527,8 @@ ПараметрыТекста = Новый Соответствие; ПараметрыТекста["[ИмяИсполняемогоФайлаПрограммы]"] = ПодготовитьТекст(ИмяИсполняемогоФайлаПрограммы); ПараметрыТекста["[ПараметрПутиКИнформационнойБазе]"] = ПодготовитьТекст(ПараметрПутиКИнформационнойБазе); - ПараметрыТекста["[СтрокаПутиКФайлуИнформационнойБазы]"] = ПодготовитьТекст(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", ""))); + ПараметрыТекста["[СтрокаПутиКФайлуИнформационнойБазы]"] = ПодготовитьТекст( + ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", ""))); ПараметрыТекста["[СтрокаСоединенияИнформационнойБазы]"] = ПодготовитьТекст(СтрокаСоединенияИнформационнойБазы); ПараметрыТекста["[ИмяАдминистратора]"] = ПодготовитьТекст(ИмяПользователя()); ПараметрыТекста["[СобытиеЖурналаРегистрации]"] = ПодготовитьТекст(ПараметрыСкрипта.СобытиеЖурналаРегистрации); diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl index 8262c8ec8..1e182efea 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl @@ -11,7 +11,7 @@ // Определяет форму ФИО в заданном падеже. // // Параметры: -// ФИО - Строка - Строка, в которой содержится ФИО для склонения. +// ФИО - Строка - строка, в которой содержится ФИО для склонения. // Падеж - Число - падеж, в который необходимо просклонять представление объекта. // 1 - Именительный. // 2 - Родительный. @@ -19,13 +19,13 @@ // 4 - Винительный. // 5 - Творительный. // 6 - Предложный. -// Объект - ОбъектСклонения - Ссылка на объект, реквизит которого склоняется. -// Пол - Число - Число - пол физического лица, +// Объект - ОбъектСклонения - ссылка на объект, реквизит которого склоняется. +// Пол - Число - число - пол физического лица, // 1 - мужской, // 2 - женский. // // Возвращаемое значение: -// Строка - Результат склонения ФИО в падеже. +// Строка - результат склонения ФИО в падеже. // Функция ПросклонятьФИО(ФИО, Падеж, Объект = Неопределено, Пол = Неопределено) Экспорт @@ -40,7 +40,7 @@ // Склоняет представление объекта. // // Параметры: -// Представление - Строка - Строка, в которой содержится ФИО для склонения. +// Представление - Строка - строка, в которой содержится ФИО для склонения. // Падеж - Число - падеж, в который необходимо просклонять представление объекта. // 1 - Именительный. // 2 - Родительный. @@ -48,10 +48,10 @@ // 4 - Винительный. // 5 - Творительный. // 6 - Предложный. -// Объект - ОбъектСклонения - Ссылка на объект, реквизит которого склоняется. +// Объект - ОбъектСклонения - ссылка на объект, реквизит которого склоняется. // // Возвращаемое значение: -// Строка - Результат склонения представления объекта в падеже. +// Строка - результат склонения представления объекта в падеже. // Функция ПросклонятьПредставление(Представление, Падеж, Объект = Неопределено) Экспорт @@ -63,8 +63,8 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма для подключения механизма склонения. -// Представление - Строка - Строка для склонения. -// ИмяОсновногоРеквизитаФормы - Строка - Имя основного реквизита формы. +// Представление - Строка - строка для склонения. +// ИмяОсновногоРеквизитаФормы - Строка - имя основного реквизита формы. // Процедура ПриСозданииНаСервере(Форма, Представление, ИмяОсновногоРеквизитаФормы = "Объект") Экспорт @@ -90,10 +90,9 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма объекта склонения. -// Представление - Строка - Строка для склонения. -// Объект - ОпределяемыйТип.ОбъектСклонения - Объект для склонения. -// ПараметрыСклонения - Структура - необязательный, дополнительные параметры склонения, -// см. СклонениеПредставленийОбъектовКлиентСервер.ПараметрыСклонения(). +// Представление - Строка - строка для склонения. +// Объект - ОпределяемыйТип.ОбъектСклонения - объект для склонения. +// ПараметрыСклонения - см. СклонениеПредставленийОбъектовКлиентСервер.ПараметрыСклонения // Процедура ПриЗаписиФормыОбъектаСклонения(Форма, Представление, Объект, ПараметрыСклонения = Неопределено) Экспорт @@ -114,7 +113,7 @@ // Устанавливает признак доступности сервиса склонения. // // Параметры: -// Доступность - Булево - Признак доступности сервиса склонения. +// Доступность - Булево - признак доступности сервиса склонения. // Процедура УстановитьДоступностьСервисаСклонения(Доступность) Экспорт @@ -149,10 +148,10 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма объекта склонения. -// Представление - Строка - Строка для склонения. -// Объект - ОбъектСклонения - Объект для склонения. -// ЭтоФИО - Булево - Признак склонения ФИО. -// Пол - Число - Пол физического лица (в случае склонения ФИО) +// Представление - Строка - строка для склонения. +// Объект - ОбъектСклонения - объект для склонения. +// ЭтоФИО - Булево - признак склонения ФИО. +// Пол - Число - пол физического лица (в случае склонения ФИО) // 1 - мужской // 2 - женский. // @@ -209,8 +208,8 @@ // Только для работы на ОС Windows. // // Параметры: -// Объект - ОпределяемыйТип.ОбъектСклонения - Ссылка на объект, в котором содержится реквизит для склонения. -// ВидПредставления - Строка - Имя реквизита объекта для склонения. +// Объект - ОпределяемыйТип.ОбъектСклонения - ссылка на объект, в котором содержится реквизит для склонения. +// ВидПредставления - Строка - имя реквизита объекта для склонения. // Падеж - Число - падеж, в который необходимо просклонять представление объекта. // 1 - Именительный. // 2 - Родительный. @@ -220,7 +219,7 @@ // 6 - Предложный. // // Возвращаемое значение: -// Строка - Результат склонения представления объекта в падеже. +// Строка - результат склонения представления объекта в падеже. // Функция Просклонять(Представление, Падеж, Объект = Неопределено, ПараметрыСклонения = Неопределено) @@ -250,13 +249,13 @@ // Склоняет переданную фразу по всем падежам. // // Параметры: -// Представление - Строка - Строка для склонения. -// ЭтоФИО - Булево - Признак склонения ФИО. -// Пол - Число - Пол физического лица (в случае склонения ФИО): 1 - мужской, 2 - женский. -// ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. +// Представление - Строка - строка для склонения. +// ЭтоФИО - Булево - признак склонения ФИО. +// Пол - Число - пол физического лица (в случае склонения ФИО): 1 - мужской, 2 - женский. +// ПоказыватьСообщения - Булево - признак, определяющий нужно ли показывать пользователю сообщения об ошибках. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Именительный - Строка. // * Родительный - Строка. // * Дательный - Строка. @@ -278,26 +277,19 @@ КонецФункции -Процедура ПросклонятьПредставлениеПоВсемПадежамДлительнаяОперация(Параметры, АдресРезультата) Экспорт - - СтруктураСклонения = ПросклонятьПредставлениеПоВсемПадежам(Параметры.Представление, Параметры.ПараметрыСклонения, Истина); - ПоместитьВоВременноеХранилище(СтруктураСклонения, АдресРезультата); - -КонецПроцедуры - // Получает данные склонения по всем падежам. // // Параметры: -// Представление - Строка - Строка для склонения. -// ЭтоФИО - Булево - Признак склонения ФИО. -// Пол - Число - Пол физического лица (в случае склонения ФИО) +// Представление - Строка - строка для склонения. +// ЭтоФИО - Булево - признак склонения ФИО. +// Пол - Число - пол физического лица (в случае склонения ФИО) // 1 - мужской // 2 - женский. -// ПараметрыСклонения - - -// ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. +// ПараметрыСклонения +// ПоказыватьСообщения - Булево - признак, определяющий нужно ли показывать пользователю сообщения об ошибках. // // Возвращаемое значение: -// Структура, Неопределено - со свойствами: +// Структура, Неопределено: // * Именительный - Строка. // * Родительный - Строка. // * Дательный - Строка diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl index 6e922d5d0..bab1ce3d4 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl @@ -10,17 +10,11 @@ Функция ДлительнаяОперацияСклоненияПоПадежам(ИдентификаторФормы, Представление, ПараметрыСклонения) Экспорт - ПараметрыПроцедуры = Новый Структура( - "Представление, - |ПараметрыСклонения"); - ПараметрыПроцедуры.Представление = Представление; - ПараметрыПроцедуры.ПараметрыСклонения = ПараметрыСклонения; - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдентификаторФормы); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Склонение'"); - Возврат ДлительныеОперации.ВыполнитьВФоне("СклонениеПредставленийОбъектов.ПросклонятьПредставлениеПоВсемПадежамДлительнаяОперация", - ПараметрыПроцедуры, ПараметрыВыполнения); + Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, + "СклонениеПредставленийОбъектов.ДанныеСклонения", Представление, ПараметрыСклонения); КонецФункции diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl index 0bae7172f..89085f719 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl @@ -13,9 +13,9 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма объекта склонения. -// Представление - Строка - Строка для склонения. +// Представление - Строка - строка для склонения. // ПараметрыСклонения - Структура - параметры склонения, созданные методом СклонениеПредставленийОбъектовКлиентСервер.ПараметрыСклонения(). -// ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. +// ПоказыватьСообщения - Булево - признак, определяющий нужно ли показывать пользователю сообщения об ошибках. // Процедура ПросклонятьПредставление(Форма, Представление, ПараметрыСклонения = Неопределено, ПоказыватьСообщения = Ложь) Экспорт @@ -29,7 +29,7 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма объекта склонения. -// Представление - Строка - Строка для склонения. +// Представление - Строка - строка для склонения. // ПараметрыСклонения - Структура - параметры склонения, созданные методом СклонениеПредставленийОбъектовКлиентСервер.ПараметрыСклонения(). // Процедура ПоказатьСклонение(Форма, Представление, ПараметрыСклонения = Неопределено) Экспорт @@ -68,12 +68,12 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма объекта склонения. -// Представление - Строка - Строка для склонения. -// ЭтоФИО - Булево - Признак склонения ФИО. -// Пол - Число - Пол физического лица (в случае склонения ФИО) +// Представление - Строка - строка для склонения. +// ЭтоФИО - Булево - признак склонения ФИО. +// Пол - Число - пол физического лица (в случае склонения ФИО) // 1 - мужской // 2 - женский. -// ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. +// ПоказыватьСообщения - Булево - признак, определяющий нужно ли показывать пользователю сообщения об ошибках. // Процедура ПросклонятьПредставлениеПоВсемПадежам(Форма, Представление, ЭтоФИО = Ложь, Пол = Неопределено, ПоказыватьСообщения = Ложь) Экспорт @@ -90,9 +90,9 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма объекта склонения. -// Представление - Строка - Строка для склонения. -// ЭтоФИО - Булево - Признак склонения ФИО. -// Пол - Число - Пол физического лица (в случае склонения ФИО) +// Представление - Строка - строка для склонения. +// ЭтоФИО - Булево - признак склонения ФИО. +// Пол - Число - пол физического лица (в случае склонения ФИО) // 1 - мужской // 2 - женский. // diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl index dc122c231..a501f0ff7 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl @@ -11,9 +11,9 @@ // Конструктор параметров для методов склонения. // // Возвращаемое значение: -// Структура - структура с полями: -// ЭтоФИО - Булево - Признак склонения ФИО. -// Пол - Число - Пол физического лица (в случае склонения ФИО): 1 - мужской, 2 - женский. +// Структура: +// ЭтоФИО - Булево - признак склонения ФИО. +// Пол - Число - пол физического лица (в случае склонения ФИО): 1 - мужской, 2 - женский. // Функция ПараметрыСклонения() Экспорт @@ -34,7 +34,7 @@ // Возвращает пустую структуру склонения. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // *ИменительныйПадеж - Строка. // *РодительныйПадеж - Строка. // *ДательныйПадеж - Строка diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index efc9d76ee..dfe2d4d15 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -82,7 +82,7 @@ // заполняется поле КоличествоСеансов. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Установлена - Булево - Истина, если установлена блокировка, Ложь - иначе. // * Начало - Дата - дата начала блокировки. // * Конец - Дата - дата окончания блокировки. @@ -144,7 +144,7 @@ // ПортКластера - Число - нестандартный порт кластера серверов. // // Возвращаемое значение: -// Структура - структура со свойствами: +// Структура: // * НаличиеАктивныхСоединений - Булево - признак наличия активных соединений. // * НаличиеCOMСоединений - Булево - признак наличия com соединений. // * НаличиеСоединенияКонфигуратором - Булево - признак наличия соединения конфигуратора. @@ -199,7 +199,7 @@ // Получить пустую структуру с параметрами блокировки сеансов области данных. // // Возвращаемое значение: -// Структура - с полями: +// Структура: // Начало - Дата - время начала действия блокировки. // Конец - Дата - время завершения действия блокировки. // Сообщение - Строка - сообщения для пользователей, выполняющих вход в заблокированную область данных. @@ -560,7 +560,8 @@ // * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку // дела на панели "Текущие дела". // * ПараметрыФормы - Структура - параметры, с которыми нужно открывать форму показателя. -// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего +// * Владелец - Строка +// - объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего // или объект метаданных подсистема. // * Подсказка - Строка - текст подсказки. // diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl index aa318bc78..1733a1457 100644 --- a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl @@ -64,7 +64,7 @@ // заполняется поле КоличествоСеансов. // // Возвращаемое значение: -// Структура - с полями: +// Структура: // Установлена - Булево - Истина, если установлена блокировка, Ложь - Иначе. // Начало - Дата - дата начала блокировки. // Конец - Дата - дата окончания блокировки. diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index 9dc6a967d..623b5d838 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -17,8 +17,7 @@ // информационной базы. // ЗапрашиватьПараметрыАдминистрированияКластера - Булево - признак необходимости ввода параметров администрирования // кластера. -// ПараметрыАдминистрирования - Структура - параметры администрирования, которые были введены ранее. -// См. СтандартныеПодсистемыСервер.ПараметрыАдминистрирования. +// ПараметрыАдминистрирования - см. СтандартныеПодсистемыСервер.ПараметрыАдминистрирования. // Заголовок - Строка - заголовок формы, описывающий для чего запрашиваются параметры администрирования. // ПоясняющаяНадпись - Строка - пояснение для выполняемого действия, в контексте которого запрашиваются параметры. // @@ -227,7 +226,7 @@ // Переопределяет стандартное предупреждение открытием произвольной формы активных пользователей. // // Параметры: -// ИмяФормы - Строка (возвращаемое значение). +// ИмяФормы - строка (возвращаемое значение). // Процедура ПриОпределенииФормыАктивныхПользователей(ИмяФормы) Экспорт diff --git a/SSL/src/CommonModules/СозданиеНаОсновании/Module.bsl b/SSL/src/CommonModules/СозданиеНаОсновании/Module.bsl index d4e6d4906..458228c1d 100644 --- a/SSL/src/CommonModules/СозданиеНаОсновании/Module.bsl +++ b/SSL/src/CommonModules/СозданиеНаОсновании/Module.bsl @@ -40,7 +40,7 @@ // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов // // Параметры: -// НастройкиПрограммногоИнтерфейса - См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов.НастройкиПрограммногоИнтерфейса +// НастройкиПрограммногоИнтерфейса - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов.НастройкиПрограммногоИнтерфейса // Процедура ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса) Экспорт Настройка = НастройкиПрограммногоИнтерфейса.Добавить(); diff --git a/SSL/src/CommonModules/СозданиеНаОснованииПереопределяемый/Module.bsl b/SSL/src/CommonModules/СозданиеНаОснованииПереопределяемый/Module.bsl index 44ffc2f00..2f03f3cb2 100644 --- a/SSL/src/CommonModules/СозданиеНаОснованииПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СозданиеНаОснованииПереопределяемый/Module.bsl @@ -11,7 +11,7 @@ // Переопределяет настройки команд ввода на основании. // // Параметры: -// Настройки - Структура - настройки подсистемы: +// Настройки - Структура: // * ИспользоватьКомандыВводаНаОсновании - Булево - разрешает использование программных команд ввода на основании // вместо штатных. Значение по умолчанию: Истина. // @@ -43,35 +43,36 @@ // КомандыСозданияНаОсновании - ТаблицаЗначений - сформированные команды для вывода в подменю: // // Общие настройки: -// * Идентификатор - Строка - Идентификатор команды. +// * Идентификатор - Строка - идентификатор команды. // // Настройки внешнего вида: -// * Представление - Строка - Представление команды в форме. -// * Важность - Строка - Группа в подменю, в которой следует вывести эту команду. +// * Представление - Строка - представление команды в форме. +// * Важность - Строка - группа в подменю, в которой следует вывести эту команду. // Допустимо использовать: "Важное", "Обычное" и "СмТакже". -// * Порядок - Число - Порядок размещения команды в подменю. Используется для настройки под конкретное +// * Порядок - Число - порядок размещения команды в подменю. Используется для настройки под конкретное // рабочее место. -// * Картинка - Картинка - Картинка команды. +// * Картинка - Картинка - картинка команды. // // Настройки видимости и доступности: -// * ТипПараметра - ОписаниеТипов - Типы объектов, для которых предназначена эта команда. -// * ВидимостьВФормах - Строка - Имена форм через запятую, в которых должна отображаться команда. +// * ТипПараметра - ОписаниеТипов - типы объектов, для которых предназначена эта команда. +// * ВидимостьВФормах - Строка - имена форм через запятую, в которых должна отображаться команда. // Используется когда состав команд отличается для различных форм. -// * ФункциональныеОпции - Строка - Имена функциональных опций через запятую, определяющих видимость команды. -// * УсловияВидимости - Массив - Определяет видимость команды в зависимости от контекста. +// * ФункциональныеОпции - Строка - имена функциональных опций через запятую, определяющих видимость команды. +// * УсловияВидимости - Массив - определяет видимость команды в зависимости от контекста. // Для регистрации условий следует использовать процедуру // ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(). // Условия объединяются по "И". -// * ИзменяетВыбранныеОбъекты - Булево - Определяет доступность команды в ситуации, +// * ИзменяетВыбранныеОбъекты - Булево - определяет доступность команды в ситуации, // когда у пользователя нет прав на изменение объекта. // Если Истина, то в описанной выше ситуации кнопка будет недоступна. // Необязательный. Значение по умолчанию: Ложь. // // Настройки процесса выполнения: -// * МножественныйВыбор - Булево, Неопределено - Если Истина, то команда поддерживает множественный выбор. +// * МножественныйВыбор - Булево +// - Неопределено - если Истина, то команда поддерживает множественный выбор. // В этом случае в параметре выполнения будет передан список ссылок. // Необязательный. Значение по умолчанию: Ложь. -// * РежимЗаписи - Строка - Действия, связанные с записью объекта, которые выполняются перед обработчиком команды. +// * РежимЗаписи - Строка - действия, связанные с записью объекта, которые выполняются перед обработчиком команды. // "НеЗаписывать" - Объект не записывается, а в параметрах обработчика вместо ссылок передается // вся форма. В этом режиме рекомендуется работать напрямую с формой, // которая передается в структуре 2 параметра обработчика команды. @@ -80,26 +81,27 @@ // "Проводить" - Проводить документы. // Перед записью и проведением у пользователя запрашивается подтверждение. // Необязательный. Значение по умолчанию: "Записывать". -// * ТребуетсяРаботаСФайлами - Булево - Если Истина, то в веб-клиенте предлагается +// * ТребуетсяРаботаСФайлами - Булево - если Истина, то в веб-клиенте предлагается // установить расширение работы с файлами. // Необязательный. Значение по умолчанию: Ложь. // // Настройки обработчика: -// * Менеджер - Строка - Объект, отвечающий за выполнение команды. -// * ИмяФормы - Строка - Имя формы, которую требуется получить для выполнения команды. +// * Менеджер - Строка - объект, отвечающий за выполнение команды. +// * ИмяФормы - Строка - имя формы, которую требуется получить для выполнения команды. // Если Обработчик не указан, то у формы вызывается метод "Открыть". -// * ПараметрыФормы - Неопределено, ФиксированнаяСтруктура - Необязательный. Параметры формы, указанной в ИмяФормы. -// * Обработчик - Строка - Описание процедуры, обрабатывающей основное действие команды. +// * ПараметрыФормы - Неопределено +// - ФиксированнаяСтруктура - необязательный. Параметры формы, указанной в ИмяФормы. +// * Обработчик - Строка - описание процедуры, обрабатывающей основное действие команды. // Формат "<ИмяОбщегоМодуля>.<ИмяПроцедуры>" используется когда процедура размещена в общем модуле. // Формат "<ИмяПроцедуры>" используется в следующих случаях: -// - Если ИмяФормы заполнено то в модуле указанной формы ожидается клиентская процедура. -// - Если ИмяФормы не заполнено то в модуле менеджера этого объекта ожидается серверная процедура. -// * ДополнительныеПараметры - ФиксированнаяСтруктура - Необязательный. Параметры обработчика, указанного в Обработчик. +// - если ИмяФормы заполнено то в модуле указанной формы ожидается клиентская процедура. +// - если ИмяФормы не заполнено то в модуле менеджера этого объекта ожидается серверная процедура. +// * ДополнительныеПараметры - ФиксированнаяСтруктура - необязательный. Параметры обработчика, указанного в Обработчик. // -// Параметры - Структура - Сведения о контексте исполнения. -// * ИмяФормы - Строка - Полное имя формы. +// Параметры - Структура - сведения о контексте исполнения: +// * ИмяФормы - Строка - полное имя формы. // -// СтандартнаяОбработка - Булево - Если установить в Ложь, то событие "ДобавитьКомандыСозданияНаОсновании" менеджера +// СтандартнаяОбработка - Булево - если установить в Ложь, то событие "ДобавитьКомандыСозданияНаОсновании" менеджера // объекта не будет вызвано. // Процедура ПередДобавлениемКомандСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка) Экспорт @@ -113,7 +115,7 @@ // Объект - ОбъектМетаданных - объект, для которого добавляются команды. // КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании // Параметры - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.Параметры -// СтандартнаяОбработка - Булево - Если установить в Ложь, то событие "ДобавитьКомандыСозданияНаОсновании" менеджера +// СтандартнаяОбработка - Булево - если установить в Ложь, то событие "ДобавитьКомандыСозданияНаОсновании" менеджера // объекта не будет вызвано. // Процедура ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка) Экспорт diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl index 99939db44..adb584a22 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl @@ -44,7 +44,7 @@ // Выполняет регистрацию обработчиков сообщений в качестве обработчиков каналов обмена сообщениями. // // Параметры: -// МассивОбработчиков - Массив - коллекция модулей, содержащих обработчики. +// МассивОбработчиков - Массив из ОбщийМодуль - коллекция модулей, содержащих обработчики. // Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт @@ -55,7 +55,7 @@ // Выполняет регистрацию обработчиков трансляции сообщений. // // Параметры: -// МассивОбработчиков - Массив - коллекция модулей, содержащих обработчики. +// МассивОбработчиков - Массив из ОбщийМодуль - коллекция модулей, содержащих обработчики. // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт @@ -64,7 +64,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Control/a.b.c.d}CorrespondentConnectionCompleted // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -79,7 +79,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Control/a.b.c.d}CorrespondentConnectionFailed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -94,7 +94,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Control/a.b.c.d}GettingSyncSettingsCompleted // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -109,7 +109,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Control/a.b.c.d}GettingSyncSettingsFailed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -124,7 +124,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Control/a.b.c.d}EnableSyncCompleted // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -139,7 +139,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Control/a.b.c.d}DisableSyncCompleted // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -154,7 +154,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Control/a.b.c.d}EnableSyncFailed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -169,7 +169,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Control/a.b.c.d}DisableSyncFailed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -184,7 +184,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Control/a.b.c.d}SyncCompleted // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl index 9c817ab2d..600cc95e0 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl @@ -44,7 +44,7 @@ // Выполняет регистрацию обработчиков сообщений в качестве обработчиков каналов обмена сообщениями. // // Параметры: -// МассивОбработчиков - Массив - коллекция модулей, содержащих обработчики. +// МассивОбработчиков - Массив из ОбщийМодуль - коллекция модулей, содержащих обработчики. // Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт @@ -55,7 +55,7 @@ // Выполняет регистрацию обработчиков трансляции сообщений. // // Параметры: -// МассивОбработчиков - Массив - коллекция модулей, содержащих обработчики. +// МассивОбработчиков - Массив из ОбщийМодуль - коллекция модулей, содержащих обработчики. // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт @@ -64,7 +64,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Manage/a.b.c.d}ConnectCorrespondent // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -79,7 +79,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Manage/a.b.c.d}SetTransportParams // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -94,7 +94,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Manage/a.b.c.d}GetSyncSettings // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -109,7 +109,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Manage/a.b.c.d}DeleteSync // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -124,7 +124,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Manage/a.b.c.d}EnableSync // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -139,7 +139,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Manage/a.b.c.d}DisableSync // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -154,7 +154,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Manage/a.b.c.d}PushSync // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -169,7 +169,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Manage/a.b.c.d}PushTwoApplicationSync // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -184,7 +184,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Manage/a.b.c.d}ExecuteSync // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl index 0582ab62e..37ad5e58c 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl @@ -11,7 +11,7 @@ // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений. // // Возвращаемое значение: -// Строка - +// Строка // Функция Пакет() Экспорт @@ -22,7 +22,7 @@ // Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений. // // Возвращаемое значение: -// Строка - +// Строка // Функция Версия() Экспорт @@ -33,7 +33,7 @@ // Возвращает название программного интерфейса сообщений. // // Возвращаемое значение: -// Строка - +// Строка // Функция ПрограммныйИнтерфейс() Экспорт @@ -68,7 +68,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция СообщениеДополнительныйОтчетИлиОбработкаУстановлена(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -83,7 +83,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция СообщениеДополнительныйОтчетИлиОбработкаУдалена(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -98,7 +98,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция СообщениеОшибкаУстановкиДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -113,7 +113,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция СообщениеОшибкаУдаленияДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl index 107e7e7a5..dc2de7c4a 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl @@ -11,7 +11,7 @@ // Возвращает номер версии, для трансляции с которой предназначен обработчик. // // Возвращаемое значение: -// Строка - +// Строка // Функция ИсходнаяВерсия() Экспорт @@ -22,7 +22,7 @@ // Возвращает пространство имен версии, для трансляции с которой предназначен обработчик. // // Возвращаемое значение: -// Строка - +// Строка // Функция ПакетИсходнойВерсии() Экспорт @@ -33,7 +33,7 @@ // Возвращает номер версии, для трансляции в которую предназначен обработчик. // // Возвращаемое значение: -// Строка - +// Строка // Функция РезультирующаяВерсия() Экспорт @@ -44,7 +44,7 @@ // Возвращает пространство имен версии, для трансляции в которую предназначен обработчик. // // Возвращаемое значение: -// Строка - +// Строка // Функция ПакетРезультирующейВерсии() Экспорт diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl index 7518eb262..0dec79f79 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl @@ -44,7 +44,7 @@ // Выполняет регистрацию обработчиков сообщений в качестве обработчиков каналов обмена сообщениями. // // Параметры: -// МассивОбработчиков - Массив - коллекция модулей, содержащих обработчики. +// МассивОбработчиков - Массив из ОбщийМодуль - коллекция модулей, содержащих обработчики. // Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт @@ -55,7 +55,7 @@ // Выполняет регистрацию обработчиков трансляции сообщений. // // Параметры: -// МассивОбработчиков - Массив - коллекция модулей, содержащих обработчики. +// МассивОбработчиков - Массив из ОбщийМодуль - коллекция модулей, содержащих обработчики. // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт @@ -64,7 +64,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}SetupExchangeStep1Completed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -79,7 +79,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}SetupExchangeStep2Completed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -94,7 +94,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}SetupExchangeStep1Failed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -109,7 +109,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}SetupExchangeStep2Failed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -124,7 +124,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}DownloadMessageCompleted // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -139,7 +139,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}DownloadMessageFailed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -154,7 +154,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}GettingDataCompleted // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -169,7 +169,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}GettingCommonNodsDataCompleted // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -184,7 +184,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}GettingDataFailed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -199,7 +199,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}GettingCommonNodsDataFailed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -214,7 +214,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}GettingCorrespondentParamsCompleted // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -229,7 +229,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}GettingCorrespondentParamsFailed // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl index b1708a0dd..dbb11eb26 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl @@ -24,9 +24,9 @@ // Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений. // // Параметры: -// КаналСообщений - Строка - Идентификатор канала сообщений, из которого получено сообщение. -// ТелоСообщения - Произвольный - Тело сообщения, полученное из канала, которое подлежит обработке. -// Отправитель - ПланОбменаСсылка.ОбменСообщениями - Конечная точка, которая является отправителем сообщения. +// КаналСообщений - Строка - идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения - Произвольный - тело сообщения, полученное из канала, которое подлежит обработке. +// Отправитель - ПланОбменаСсылка.ОбменСообщениями - конечная точка, которая является отправителем сообщения. // Процедура ОбработатьСообщение(КаналСообщений, ТелоСообщения, Отправитель) Экспорт @@ -97,8 +97,6 @@ КодКорреспондента = ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(ОбластьДанныхКорреспондента); НаименованиеКорреспондента = Настройки.НаименованиеВторойБазы; НастройкаОтборовНаУзле = Новый Структура; - КодЭтогоПриложения = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); - НаименованиеЭтогоПриложения = ОбменДаннымиВМоделиСервиса.СформироватьНаименованиеПредопределенногоУзла(); КонечнаяТочкаКорреспондента = ОбменДаннымиВМоделиСервиса.МенеджерПланаОбменаКонечныхТочек().НайтиПоКоду( Настройки.КонечнаяТочкаКорреспондента); diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl index 8f1ddb191..30b241a43 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl @@ -44,7 +44,7 @@ // Выполняет регистрацию обработчиков сообщений в качестве обработчиков каналов обмена сообщениями. // // Параметры: -// МассивОбработчиков - Массив - коллекция модулей, содержащих обработчики. +// МассивОбработчиков - Массив из ОбщийМодуль - коллекция модулей, содержащих обработчики. // Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт @@ -56,7 +56,7 @@ // Выполняет регистрацию обработчиков трансляции сообщений. // // Параметры: -// МассивОбработчиков - Массив - коллекция модулей, содержащих обработчики. +// МассивОбработчиков - Массив из ОбщийМодуль - коллекция модулей, содержащих обработчики. // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт @@ -67,7 +67,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Manage/a.b.c.d}SetupExchangeStep1 // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -82,7 +82,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Manage/a.b.c.d}SetupExchangeStep2 // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -97,7 +97,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Manage/a.b.c.d}DownloadMessage // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -112,7 +112,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Manage/a.b.c.d}GetData // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -127,7 +127,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Manage/a.b.c.d}GetCommonNodsData // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: @@ -142,7 +142,7 @@ // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Manage/a.b.c.d}GetCorrespondentParams // // Параметры: -// ИспользуемыйПакет - Строка - Пространство имен версии интерфейса сообщений, для которой +// ИспользуемыйПакет - Строка - пространство имен версии интерфейса сообщений, для которой // получается тип сообщения. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_3_0_1_1/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_3_0_1_1/Module.bsl index 710cd40aa..e42fcd34e 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_3_0_1_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_3_0_1_1/Module.bsl @@ -362,8 +362,6 @@ НачатьТранзакцию(); Попытка - ДанныеКорреспондента = ОбменДаннымиСервер.ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(Тело.ExchangePlan); - // Отправляем ответное сообщение об успешной операции. ОтветноеСообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение( СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеПолучениеОбщихДанныхУзловКорреспондентаУспешноЗавершено()); @@ -423,9 +421,6 @@ НачатьТранзакцию(); Попытка - - Корреспондент = КорреспондентОбмена(Тело.ExchangePlan, Тело.CorrespondentCode); - Отказ = Ложь; ПредставлениеОшибки = ""; diff --git a/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_1/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_1/Module.bsl index d1fb93e1d..42f5aa973 100644 --- a/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_1/Module.bsl @@ -11,7 +11,7 @@ // Возвращает пространство имен версии интерфейса сообщений. // // Возвращаемое значение: -// Строка - +// Строка // Функция Пакет() Экспорт @@ -22,7 +22,7 @@ // Возвращает версию интерфейса сообщений, обслуживаемую обработчиком. // // Возвращаемое значение: -// Строка - +// Строка // Функция Версия() Экспорт @@ -33,7 +33,7 @@ // Возвращает базовый тип для сообщений версии. // // Возвращаемое значение: -// Строка - +// Строка // Функция БазовыйТип() Экспорт diff --git a/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_2/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_2/Module.bsl index 7b0041480..9391dc6f2 100644 --- a/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_2/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправленияДОИООбработчикСообщения_1_0_1_2/Module.bsl @@ -11,7 +11,7 @@ // Возвращает пространство имен версии интерфейса сообщений. // // Возвращаемое значение: -// Строка - +// Строка // Функция Пакет() Экспорт @@ -22,7 +22,7 @@ // Возвращает версию интерфейса сообщений, обслуживаемую обработчиком. // // Возвращаемое значение: -// Строка - +// Строка // Функция Версия() Экспорт @@ -33,7 +33,7 @@ // Возвращает базовый тип для сообщений версии. // // Возвращаемое значение: -// Строка - +// Строка // Функция БазовыйТип() Экспорт diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl index e7d0916b1..13c9fac3d 100644 --- a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl @@ -11,7 +11,7 @@ // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений. // // Возвращаемое значение: -// Строка - +// Строка // Функция Пакет() Экспорт @@ -22,7 +22,7 @@ // Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений. // // Возвращаемое значение: -// Строка - +// Строка // Функция Версия() Экспорт @@ -33,7 +33,7 @@ // Возвращает название программного интерфейса сообщений. // // Возвращаемое значение: -// Строка - +// Строка // Функция ПрограммныйИнтерфейс() Экспорт @@ -71,7 +71,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция СообщениеУстановитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -86,7 +86,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция ТипНастройкиКомандыДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -101,7 +101,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция СообщениеУдалитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -116,7 +116,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция СообщениеОтключитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -131,7 +131,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция СообщениеВключитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -146,7 +146,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция СообщениеОтозватьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт @@ -161,7 +161,7 @@ // получается тип сообщения. // // Возвращаемое значение: -// ТипОбъектаXDTO - +// ТипОбъектаXDTO // Функция СообщениеУстановитьРежимИсполненияДополнительногоОтчетаИлиОбработкиВОбластиДанных(Знач ИспользуемыйПакет = Неопределено) Экспорт diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl index 07964b627..812ce0421 100644 --- a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl @@ -11,7 +11,7 @@ // Обработка входящих сообщений с типом {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}InstallExtension // // Параметры: -// ОписаниеИнсталляции - Структура - с ключами: +// ОписаниеИнсталляции - Структура: // * Идентификатор - УникальныйИдентификатор - уникальный идентификатор ссылки // элемента справочника ПоставляемыеДополнительныеОтчетыИОбработки, // * Представление - Строка - представление инсталляции поставляемой дополнительной diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index 9e57db30c..5ff70ddb8 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -185,27 +185,24 @@ КонецПроцедуры // Только для внутреннего использования. -Функция ЗаписатьОшибкуВЖурналРегистрацииПриЗапускеИлиЗавершении(ПрекратитьРаботу, Знач Событие, Знач ТекстОшибки) Экспорт +Процедура ЗаписатьОшибкуВЖурналРегистрацииПриЗапускеИлиЗавершении(ПрекратитьРаботу, Знач Событие, Знач ТекстОшибки) Экспорт Если Событие = "Запуск" Тогда ИмяСобытия = НСтр("ru = 'Запуск программы'", ОбщегоНазначения.КодОсновногоЯзыка()); Если ПрекратитьРаботу Тогда - НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при запуске программы. Запуск программы аварийно завершен.'"); + НачалоОписанияОшибки = НСтр("ru = 'Запуске программы невозможен по причине:'"); Иначе - НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при запуске программы.'"); + НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при запуске программы:'"); КонецЕсли; Иначе ИмяСобытия = НСтр("ru = 'Завершение программы'", ОбщегоНазначения.КодОсновногоЯзыка()); - НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при завершении программы.'"); + НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при завершении программы:'"); КонецЕсли; - ОписаниеОшибки = НачалоОписанияОшибки - + Символы.ПС + Символы.ПС - + ТекстОшибки; + ОписаниеОшибки = НачалоОписанияОшибки + Символы.ПС + Символы.ПС + ТекстОшибки; ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки); - Возврат НачалоОписанияОшибки; -КонецФункции +КонецПроцедуры // Вызывается из обработчика ожидания каждые 20 минут, например, для контроля // динамического обновления и окончания срока действия учетной записи пользователя. @@ -228,14 +225,12 @@ Параметры.Вставить("ДинамическиеИзмененияКонфигурации", ДинамическиеИзменения); ПользователиСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда - - МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); МодульЦентрМониторингаСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры.ЦентрМониторинга); - - КонецЕсли; - + КонецЕсли; + КонецПроцедуры // Возвращает полное имя объекта метаданных по его типу. @@ -253,7 +248,8 @@ // Источник - Тип - объект. // // Возвращаемое значение: -// Строка - . +// Строка +// Функция ИмяОбъектаМетаданных(Тип) Экспорт ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); Если ОбъектМетаданных = Неопределено Тогда @@ -310,7 +306,8 @@ Параметры.Вставить("ИменаВременныхПараметров", Новый Массив); Для каждого КлючИЗначение Из Параметры Цикл - Параметры.ИменаВременныхПараметров.Добавить(КлючИЗначение.Ключ); + ИменаВременныхПараметров = Параметры.ИменаВременныхПараметров; // Массив + ИменаВременныхПараметров.Добавить(КлючИЗначение.Ключ); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index 0d52029d0..062701d0e 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -59,7 +59,7 @@ // Параметры: // ОписаниеОповещенияОЗавершении - ОписаниеОповещения - описание процедуры, которая будет вызвана после закрытия окна // вопроса со следующими параметрами: -// РезультатВопроса - Структура - структура со свойствами: +// РезультатВопроса - Структура: // Значение - результат выбора пользователя: значение // системного перечисления или значение, // связанное с нажатой кнопкой. В случае закрытия @@ -70,7 +70,8 @@ // одноименном флажке. // ДополнительныеПараметры - Структура // ТекстВопроса - Строка - текст задаваемого вопроса. -// Кнопки - РежимДиалогаВопрос, СписокЗначений - может быть задан список значений, в котором: +// Кнопки - РежимДиалогаВопрос +// - СписокЗначений - может быть задан список значений, в котором: // Значение - содержит значение, связанное с // кнопкой и возвращаемое при выборе кнопки. В качестве значения может // использоваться значение @@ -78,58 +79,83 @@ // поддерживающее XDTO-сериализацию. // Представление - задает текст кнопки. // -// ДополнительныеПараметры - Структура - см. СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю. +// ДополнительныеПараметры - см. СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю. // // Возвращаемое значение: // Результат выбора пользователя будет передан в метод, описанный параметром ОписаниеОповещенияОЗавершении. // Процедура ПоказатьВопросПользователю(ОписаниеОповещенияОЗавершении, ТекстВопроса, Кнопки, ДополнительныеПараметры = Неопределено) Экспорт - Если ДополнительныеПараметры <> Неопределено Тогда - Параметры = ДополнительныеПараметры; - Иначе - Параметры = Новый Структура; + Параметры = ПараметрыВопросаПользователю(); + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Параметры, ДополнительныеПараметры); КонецЕсли; - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Параметры, ПараметрыВопросаПользователю(), Ложь); + КодыВозвратаДиалога = Новый Соответствие; + КодыВозвратаДиалога.Вставить(КодВозвратаДиалога.Да, "КодВозвратаДиалога.Да"); + КодыВозвратаДиалога.Вставить(КодВозвратаДиалога.Нет, "КодВозвратаДиалога.Нет"); + КодыВозвратаДиалога.Вставить(КодВозвратаДиалога.ОК, "КодВозвратаДиалога.ОК"); + КодыВозвратаДиалога.Вставить(КодВозвратаДиалога.Отмена, "КодВозвратаДиалога.Отмена"); + КодыВозвратаДиалога.Вставить(КодВозвратаДиалога.Повторить, "КодВозвратаДиалога.Повторить"); + КодыВозвратаДиалога.Вставить(КодВозвратаДиалога.Прервать, "КодВозвратаДиалога.Прервать"); + КодыВозвратаДиалога.Вставить(КодВозвратаДиалога.Пропустить, "КодВозвратаДиалога.Пропустить"); + КодыВозвратаДиалога.Вставить(КодВозвратаДиалога.Таймаут, "КодВозвратаДиалога.Таймаут"); + + ПредставленияКнопок = Новый Соответствие; + ПредставленияКнопок.Вставить(КодВозвратаДиалога.Да, НСтр("ru = 'Да'")); + ПредставленияКнопок.Вставить(КодВозвратаДиалога.Нет, НСтр("ru = 'Нет'")); + ПредставленияКнопок.Вставить(КодВозвратаДиалога.ОК, НСтр("ru = 'ОК'")); + ПредставленияКнопок.Вставить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'")); + ПредставленияКнопок.Вставить(КодВозвратаДиалога.Повторить, НСтр("ru = 'Повторить'")); + ПредставленияКнопок.Вставить(КодВозвратаДиалога.Прервать, НСтр("ru = 'Прервать'")); + ПредставленияКнопок.Вставить(КодВозвратаДиалога.Пропустить, НСтр("ru = 'Пропустить'")); + ПредставленияКнопок.Вставить(КодВозвратаДиалога.Таймаут, НСтр("ru = 'Таймаут'")); + + РежимыДиалогаВопрос = Новый Соответствие; + РежимыДиалогаВопрос.Вставить(РежимДиалогаВопрос.ДаНет, "РежимДиалогаВопрос.ДаНет"); + РежимыДиалогаВопрос.Вставить(РежимДиалогаВопрос.ДаНетОтмена, "РежимДиалогаВопрос.ДаНетОтмена"); + РежимыДиалогаВопрос.Вставить(РежимДиалогаВопрос.ОК, "РежимДиалогаВопрос.ОК"); + РежимыДиалогаВопрос.Вставить(РежимДиалогаВопрос.ОКОтмена, "РежимДиалогаВопрос.ОКОтмена"); + РежимыДиалогаВопрос.Вставить(РежимДиалогаВопрос.ПовторитьОтмена, "РежимДиалогаВопрос.ПовторитьОтмена"); + РежимыДиалогаВопрос.Вставить(РежимДиалогаВопрос.ПрерватьПовторитьПропустить, "РежимДиалогаВопрос.ПрерватьПовторитьПропустить"); + + КнопкиДиалога = Кнопки; + + Если ТипЗнч(Кнопки) = Тип("СписокЗначений") Тогда + КнопкиДиалога = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(Кнопки); + Для Каждого Кнопка Из КнопкиДиалога Цикл + Если Кнопка.Представление = "" Тогда + Кнопка.Представление = ПредставленияКнопок[Кнопка.Значение]; + КонецЕсли; + Если ТипЗнч(Кнопка.Значение) = Тип("КодВозвратаДиалога") Тогда + Кнопка.Значение = КодыВозвратаДиалога[Кнопка.Значение]; + КонецЕсли; + КонецЦикла; + КонецЕсли; Если ТипЗнч(Кнопки) = Тип("РежимДиалогаВопрос") Тогда - Если Кнопки = РежимДиалогаВопрос.ДаНет Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ДаНет"; - ИначеЕсли Кнопки = РежимДиалогаВопрос.ДаНетОтмена Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ДаНетОтмена"; - ИначеЕсли Кнопки = РежимДиалогаВопрос.ОК Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ОК"; - ИначеЕсли Кнопки = РежимДиалогаВопрос.ОКОтмена Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ОКОтмена"; - ИначеЕсли Кнопки = РежимДиалогаВопрос.ПовторитьОтмена Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ПовторитьОтмена"; - ИначеЕсли Кнопки = РежимДиалогаВопрос.ПрерватьПовторитьПропустить Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ПрерватьПовторитьПропустить"; - КонецЕсли; - Иначе - КнопкиПараметр = Кнопки; + КнопкиДиалога = РежимыДиалогаВопрос[Кнопки]; КонецЕсли; Если ТипЗнч(Параметры.КнопкаПоУмолчанию) = Тип("КодВозвратаДиалога") Тогда - Параметры.КнопкаПоУмолчанию = КодВозвратаДиалогаВСтроку(Параметры.КнопкаПоУмолчанию); + Параметры.КнопкаПоУмолчанию = КодыВозвратаДиалога[Параметры.КнопкаПоУмолчанию]; КонецЕсли; Если ТипЗнч(Параметры.КнопкаТаймаута) = Тип("КодВозвратаДиалога") Тогда - Параметры.КнопкаТаймаута = КодВозвратаДиалогаВСтроку(Параметры.КнопкаТаймаута); + Параметры.КнопкаТаймаута = КодыВозвратаДиалога[Параметры.КнопкаТаймаута]; КонецЕсли; - Параметры.Вставить("Кнопки", КнопкиПараметр); + Параметры.Вставить("Кнопки", КнопкиДиалога); Параметры.Вставить("ТекстСообщения", ТекстВопроса); - ОткрытьФорму("ОбщаяФорма.Вопрос", Параметры,,,,,ОписаниеОповещенияОЗавершении); + ОткрытьФорму("ОбщаяФорма.Вопрос", Параметры, , , , , ОписаниеОповещенияОЗавершении); КонецПроцедуры // Возвращает новую структуру дополнительных параметров для процедуры ПоказатьВопросПользователю. // // Возвращаемое значение: -// Структура - структура со свойствами: +// Структура: // * КнопкаПоУмолчанию - Произвольный - определяет кнопку по умолчанию по типу кнопки или по связанному // с ней значению. // * Таймаут - Число - интервал времени в секундах до автоматического закрытия окна @@ -349,7 +375,7 @@ // Предназначена для вызова из обработчика ПередЗавершениемРаботыСистемы модулей управляемого и обычного приложения. // // Параметры: -// Отказ - Булево - Возвращаемое значение. Признак отказа от завершения работы +// Отказ - Булево - возвращаемое значение. Признак отказа от завершения работы // для обработчика события ПередЗавершениемРаботыСистемы, либо программного отказа, // либо того, что потребовалась интерактивная обработка. В случае успешного взаимодействия // с пользователем завершение работы будет продолжено. @@ -422,7 +448,7 @@ // Для использования в ОбщегоНазначенияКлиентПереопределяемый.ПередЗавершениемРаботыСистемы. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // ТекстПредупреждения - Строка - текст, выводимый в окне веб-браузера (или тонкого клиента) при завершении работы. // Например, "Имеются редактируемые файлы, которые не помещены в программу". // Остальные параметры определяют внешний вид формы предупреждений, @@ -439,11 +465,11 @@ // Приоритет - Число - относительный порядок в списке предупреждений на форме (чем больше, тем выше). // ВывестиОдноПредупреждение - Булево - если Истина, то в списке предупреждений выводится только одно это // предупреждение. Т.е. такое предупреждение не совместимо с любыми другими. -// ДействиеПриУстановленномФлажке - Структура со свойствами: +// ДействиеПриУстановленномФлажке - Структура: // * Форма - Строка - если пользователь установил флажок, то следует открыть указанную форму. // Например, "Обработка.Файлы.РедактируемыеФайлы". // * ПараметрыФормы - Структура - произвольная структура параметров для открытия формы. -// ДействиеПриНажатииГиперссылки - Структура со свойствами: +// ДействиеПриНажатииГиперссылки - Структура: // * Форма - Строка - путь к форме, которая должна открываться по нажатию на гиперссылку. // Например, "Обработка.Файлы.РедактируемыеФайлы". // * ПараметрыФормы - Структура - произвольная структура параметров для открываемой формы. @@ -585,14 +611,14 @@ // После предупреждения вызывает процедуру с параметрами Результат, ДополнительныеПараметры. // // Параметры: -// Параметры - Структура, которая содержит свойство: -// ОбработкаПродолжения - ОписаниеОповещения, которое +// Параметры - Структура - которая содержит свойство: +// ОбработкаПродолжения - ОписаниеОповещения - которое // содержит процедуру с двумя параметрами: // Результат, ДополнительныеПараметры. // // ОписаниеПредупреждения - Неопределено - предупреждение не требуется. // ОписаниеПредупреждения - Строка - текст предупреждения, который нужно показать. -// ОписаниеПредупреждения - Структура - со свойствами: +// ОписаниеПредупреждения - Структура: // * ТекстПредупреждения - Строка - текст предупреждения, который нужно показать. // * Кнопки - СписокЗначений - для процедуры ПоказатьВопросПользователю. // * ПараметрыВопроса - Структура - содержит подмножество свойств, @@ -678,10 +704,12 @@ // // Параметры: // ТаблицаИлиТекущиеДанные - ТаблицаФормы - таблица формы динамического списка для проверки текущих данных. -// - Неопределено, ДанныеФормыСтруктура, Структура - текущие данные для проверки. +// - Неопределено +// - ДанныеФормыСтруктура +// - Структура - текущие данные для проверки. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоЭлементДинамическогоСписка(ТаблицаИлиТекущиеДанные) Экспорт @@ -712,7 +740,7 @@ // Коллекция элементов стиля. // // Возвращаемое значение: -// Структура - элементы стиля: +// Структура: // * Ключ - Строка - имя элемента стиля. // * Значение - ОбъектМетаданных: ЭлементСтиля - элемент стиля. // @@ -779,7 +807,7 @@ // с помощью методов глобального контекста Оповестить и ОповеститьОбИзменении. // // Параметры: -// ТипыИзмененныхОбъектов - Соответствие - см. СтандартныеПодсистемыСервер.ПодготовитьОповещениеФормОбИзменении +// ТипыИзмененныхОбъектов - см. СтандартныеПодсистемыСервер.ПодготовитьОповещениеФормОбИзменении // ПараметрОповещенияФорм - Произвольный - параметр сообщения для метода Оповестить. // Процедура ОповеститьФормыОбИзменении(ТипыИзмененныхОбъектов, ПараметрОповещенияФорм = Неопределено) Экспорт @@ -796,10 +824,10 @@ // Открывает форму списка объекта с позиционированием на объекте. // // Параметры: -// Ссылка - ЛюбаяСсылка - Объект, который необходимо показать в списке. -// ИмяФормыСписка - Строка - Имя формы списка. +// Ссылка - ЛюбаяСсылка - объект, который необходимо показать в списке. +// ИмяФормыСписка - Строка - имя формы списка. // Если передать Неопределено то будет определена автоматически (потребуется вызов сервера). -// ПараметрыФормы - Структура - Необязательный. Дополнительные параметры открытия формы списка. +// ПараметрыФормы - Структура - необязательный. Дополнительные параметры открытия формы списка. // Процедура ПоказатьВСписке(Ссылка, ИмяФормыСписка, ПараметрыФормы = Неопределено) Экспорт Если Ссылка = Неопределено Тогда @@ -828,10 +856,10 @@ // Выводит текст, который пользователь может скопировать. // // Параметры: -// Обработчик - ОписаниеОповещения - Описание процедуры, которая будет вызвана после завершения показа. +// Обработчик - ОписаниеОповещения - описание процедуры, которая будет вызвана после завершения показа. // Возвращаемое значение аналогично ПоказатьВопросПользователю(). -// Текст - Строка - Текст информации. -// Заголовок - Строка - Необязательный. Заголовок окна. По умолчанию "Подробнее". +// Текст - Строка - текст информации. +// Заголовок - Строка - необязательный. Заголовок окна. По умолчанию "Подробнее". // Процедура ПоказатьПодробнуюИнформацию(Обработчик, Текст, Заголовок = Неопределено) Экспорт НастройкиДиалога = Новый Структура; @@ -898,23 +926,24 @@ #Если Не ВебКлиент И Не МобильныйКлиент Тогда -// Папка системных приложений. -// Используется только для Windows. -Функция ПапкаСистемныхПриложений() Экспорт +// Каталог системных приложений, например, "C:\Windows\System32". +// Используется только в ОС Windows. +// +Функция КаталогСистемныхПриложений() Экспорт - Shell = Новый COMОбъект("Shell.Application"); + ОбъектShell = Новый COMОбъект("Shell.Application"); СистемнаяИнформация = Новый СистемнаяИнформация; Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда // Для 32-битной системы "C:\Windows\System32". // Для 64-битной системы "C:\Windows\SysWOW64". - Folder = Shell.Namespace(41); + ОбъектFolder = ОбъектShell.Namespace(41); ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда // Для любой системы "C:\Windows\System32". - Folder = Shell.Namespace(37); + ОбъектFolder = ОбъектShell.Namespace(37); КонецЕсли; - Возврат Folder.Self.Path + "\"; + Возврат ОбъектFolder.Self.Path + "\"; КонецФункции @@ -1447,10 +1476,10 @@ // Только для внутреннего использования. Завершение процедуры ПередЗавершениемРаботыСистемы. // // Параметры: -// Неопределен - Неопределено - -// ДополнительныеПараметры - Структура -: -// * Параметры - Структура - -// * ОбработкаПродолжения - ОписаниеОповещения - +// Неопределен - Неопределено +// ДополнительныеПараметры - Структура: +// * Параметры - Структура +// * ОбработкаПродолжения - ОписаниеОповещения // Процедура ДействияПередЗавершениемРаботыСистемыПослеОбработкиОшибки(Неопределен, ДополнительныеПараметры) Экспорт @@ -1521,13 +1550,13 @@ ТекстСообщения = НСтр("ru = 'Рекомендуется завершить работу программы и обновить версию платформы 1С:Предприятия. |Новая версия платформы содержит исправления ошибок, которые позволят программе работать более стабильно. - |Вы также можете отказаться от обновления и продолжить работу на текущей версии. + |Вы также можете продолжить работу на текущей версии. |Минимально необходимая версия платформы %1.'"); Иначе ТекстСообщения = НСтр("ru = 'Рекомендуется завершить работу программы и обратиться к администратору для обновления версии платформы 1С:Предприятия. |Новая версия платформы содержит исправления ошибок, которые позволят программе работать более стабильно. - |Вы также можете отказаться от обновления и продолжить работу на текущей версии. + |Вы также можете продолжить работу на текущей версии. |Минимально необходимая версия платформы %1.'"); КонецЕсли; КонецЕсли; @@ -1681,10 +1710,10 @@ // если скрытие выполнялось. // // Параметры: -// Скрыть - Булево. Если передать Ложь, тогда при условии скрытия рабочего +// Скрыть - Булево - если передать Ложь, тогда при условии скрытия рабочего // стола он будет вновь показан. // -// УжеВыполненоНаСервере - Булево. Если передать Истина, тогда уже был вызван +// УжеВыполненоНаСервере - Булево - если передать Истина, тогда уже был вызван // метод в модуле СтандартныеПодсистемыВызовСервера, и его не требуется // вызвать, а требуется только установить на клиенте, что рабочий стол // был скрыт и позднее его требуется показать. @@ -1742,6 +1771,12 @@ КонецПроцедуры // Только для внутреннего использования. +// +// Параметры: +// Результат - КодВозвратаДиалога +// - Неопределено +// ДополнительныеПараметры - Структура +// Процедура ПослеЗакрытияФормыПредупрежденийПриЗавершенииРаботы(Результат, ДополнительныеПараметры) Экспорт Параметры = ДополнительныеПараметры.Параметры; @@ -1828,6 +1863,11 @@ КонецПроцедуры // Продолжение процедуры ПриВыполненииСтандартныхПериодическихПроверок. +// +// Параметры: +// Результат - Произвольный +// Контекст - Структура +// Процедура ПриВыполненииСтандартныхПериодическихПроверокПодсистемаПользователи(Результат, Контекст) Экспорт ОбработкаПродолжения = Новый ОписаниеОповещения( @@ -1893,31 +1933,6 @@ КонецПроцедуры -// Возвращает строковое представление значения типа КодВозвратаДиалога. -Функция КодВозвратаДиалогаВСтроку(Значение) - - Результат = "КодВозвратаДиалога." + Строка(Значение); - - Если Значение = КодВозвратаДиалога.Да Тогда - Результат = "КодВозвратаДиалога.Да"; - ИначеЕсли Значение = КодВозвратаДиалога.Нет Тогда - Результат = "КодВозвратаДиалога.Нет"; - ИначеЕсли Значение = КодВозвратаДиалога.ОК Тогда - Результат = "КодВозвратаДиалога.ОК"; - ИначеЕсли Значение = КодВозвратаДиалога.Отмена Тогда - Результат = "КодВозвратаДиалога.Отмена"; - ИначеЕсли Значение = КодВозвратаДиалога.Повторить Тогда - Результат = "КодВозвратаДиалога.Повторить"; - ИначеЕсли Значение = КодВозвратаДиалога.Прервать Тогда - Результат = "КодВозвратаДиалога.Прервать"; - ИначеЕсли Значение = КодВозвратаДиалога.Пропустить Тогда - Результат = "КодВозвратаДиалога.Пропустить"; - КонецЕсли; - - Возврат Результат; - -КонецФункции - // Установить разделения сеанса перед началом каких-либо действий в программе. Процедура УстановитьРазделениеСеанса() @@ -2338,27 +2353,25 @@ Параметры.ОбработкаПродолжения = Параметры.ОбработкаЗавершения; КонецЕсли; Иначе - ДополнительныеПараметры = Новый Структура( - "Параметры, ОбработкаПродолжения", Параметры, Параметры.ОбработкаПродолжения); + ДополнительныеПараметры = Новый Структура("Параметры, ОбработкаПродолжения", + Параметры, Параметры.ОбработкаПродолжения); Параметры.ОбработкаПродолжения = Новый ОписаниеОповещения( "ДействияПередЗавершениемРаботыСистемыПослеОбработкиОшибки", ЭтотОбъект, ДополнительныеПараметры); КонецЕсли; - НачалоОписанияОшибки = СтандартныеПодсистемыВызовСервера.ЗаписатьОшибкуВЖурналРегистрацииПриЗапускеИлиЗавершении( + СтандартныеПодсистемыВызовСервера.ЗаписатьОшибкуВЖурналРегистрацииПриЗапускеИлиЗавершении( ПрекратитьРаботу, Событие, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - НачалоОписанияОшибки = ""; - - ТекстПредупреждения = НачалоОписанияОшибки + Символы.ПС - + НСтр("ru = 'Техническая информация об ошибке записана в журнал регистрации.'") - + Символы.ПС + Символы.ПС - + КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - - ИнтерактивнаяОбработка = Новый ОписаниеОповещения( - "ПоказатьПредупреждениеИПродолжить", - ЭтотОбъект, - ТекстПредупреждения); + + ТекстПредупреждения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС + + НСтр("ru = 'Техническая информация записана в журнал регистрации.'"); + + Если Событие = "Запуск" И ПрекратитьРаботу Тогда + ТекстПредупреждения = НСтр("ru = 'Запуск программы невозможен:'") + + Символы.ПС + Символы.ПС + ТекстПредупреждения; + КонецЕсли; + ИнтерактивнаяОбработка = Новый ОписаниеОповещения("ПоказатьПредупреждениеИПродолжить", ЭтотОбъект, ТекстПредупреждения); Параметры.ИнтерактивнаяОбработка = ИнтерактивнаяОбработка; КонецПроцедуры diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index 45a40f507..7a636394b 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -280,7 +280,7 @@ ИнформациюЭкрановКлиента = ПолучитьИнформациюЭкрановКлиента(); Если ИнформациюЭкрановКлиента.Количество() > 0 Тогда - DPI = ИнформациюЭкрановКлиента[0].DPI; + DPI = ИнформациюЭкрановКлиента[0].DPI; // АПК:1353 - не требуется перевод на русский язык. РазрешениеОсновногоЭкрана = ?(DPI = 0, 72, DPI); Иначе РазрешениеОсновногоЭкрана = 72; diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl index 8196c3169..94ad2b48d 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl @@ -6,15 +6,16 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область ПрограммныйИнтерфейс +#Область СлужебныеПроцедурыИФункции // Описывает правил транслитерации национального алфавита в латиницу. // // Параметры: -// Правила- Соответствие - ключ как буква национального алфавита, значение как буква латинского алфавита. +// Правила - Соответствие - ключ как буква национального алфавита, значение как буква латинского алфавита. // Процедура ПриЗаполненииПравилТранслитерации(Правила) Экспорт + // Локализация // Транслитерация, используемая в загранпаспортах 1997-2010. Правила.Вставить("а","a"); Правила.Вставить("б","b"); @@ -49,6 +50,7 @@ Правила.Вставить("э","e"); Правила.Вставить("ю","yu"); Правила.Вставить("я","ya"); + // Конец Локализация КонецПроцедуры diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index 2c2e67514..216f785ee 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -12,11 +12,11 @@ // описание самой конфигурации. // // Возвращаемое значение: -// ФиксированнаяСтруктура -: -// * Порядок - Массив из Строка - -// * ПоИменам - Соответствие -: -// ** Ключ - Строка - -// ** Значение - см. НовоеОписаниеПодсистемы +// ФиксированнаяСтруктура: +// * Порядок - Массив из Строка +// * ПоИменам - соответствие из КлючИЗначение - где: +// ** Ключ - Строка +// ** Значение - см. НовоеОписаниеПодсистемы // Функция ОписанияПодсистем() Экспорт @@ -88,7 +88,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при подготовке описаний подсистем: |в общих модулях, указанных в процедуре ПодсистемыКонфигурацииПереопределяемый.ПриДобавленииПодсистемы - |не найдено описание подсистемы, совпадающей с именем конфигурации ""%1"".'"), + |не существует описание подсистемы, совпадающей с именем конфигурации ""%1"".'"), Метаданные.Имя); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -102,7 +102,7 @@ КонецЦикла; ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при подготовке описаний подсистем: - |не найдена подсистема ""%1"" требуемая для подсистем: %2.'"), + |не существует подсистема ""%1"" требуемая для подсистем: %2.'"), КлючИЗначение.Ключ, ЗависимыеПодсистемы); ВызватьИсключение ТекстОшибки; @@ -157,7 +157,7 @@ // (внешнее соединение не поддерживается). // // Возвращаемое значение: -// Булево - +// Булево // Функция ПривилегированныйРежимУстановленПриЗапуске() Экспорт @@ -174,7 +174,7 @@ // Только для внутреннего использования. // // Возвращаемое значение: -// Булево - +// Булево // Функция ОтключитьИдентификаторыОбъектовМетаданных() Экспорт @@ -205,7 +205,7 @@ // Только для внутреннего использования. // // Возвращаемое значение: -// Булево - +// Булево // Функция ИдентификаторыОбъектовМетаданныхПроверкаИспользования(ПроверитьОбновление = Ложь, ОбъектыРасширений = Ложь) Экспорт @@ -226,14 +226,14 @@ // Проверка выполняется по более точному алгоритму, если используется подсистема "Обмен данными". // // Параметры: -// ФильтрПоНазначению - Строка - Уточняет, наличие какого РИБ проверяется. +// ФильтрПоНазначению - Строка - уточняет, наличие какого РИБ проверяется. // Допустимые значения: // * Пустая строка - любого РИБ // * "СФильтром" - РИБ с фильтром // * "Полный" - РИБ без фильтров. // // Возвращаемое значение: -// Булево - +// Булево // Функция ИспользуетсяРИБ(ФильтрПоНазначению = "") Экспорт @@ -249,14 +249,14 @@ // Проверка выполняется по более точному алгоритму, если используется подсистема "Обмен данными". // // Параметры: -// ФильтрПоНазначению - Строка - Задает назначение узлов планов обмена РИБ, которые необходимо вернуть. +// ФильтрПоНазначению - Строка - задает назначение узлов планов обмена РИБ, которые необходимо вернуть. // Допустимые значения: // * Пустая строка - будут возвращены все узлы РИБ // * "СФильтром" - будут возвращены узлы РИБ с фильтром // * "Полный" - будут возвращены узлы РИБ без фильтров. // // Возвращаемое значение: -// СписокЗначений - +// СписокЗначений // Функция УзлыРИБ(ФильтрПоНазначению = "") Экспорт @@ -284,11 +284,11 @@ "ВЫБРАТЬ | ПланОбмена.Ссылка КАК Ссылка |ИЗ - | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена + | &ИмяПланаОбмена КАК ПланОбмена |ГДЕ | НЕ ПланОбмена.ЭтотУзел | И НЕ ПланОбмена.ПометкаУдаления"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяПланаОбмена]", ИмяПланаОбмена); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяПланаОбмена", "ПланОбмена" + "." + ИмяПланаОбмена); ВыборкаУзлов = Запрос.Выполнить().Выбрать(); Пока ВыборкаУзлов.Следующий() Цикл СписокУзлов.Добавить(ВыборкаУзлов.Ссылка); @@ -304,7 +304,7 @@ // то возвращает список разделенных планов обмена РИБ. // // Возвращаемое значение: -// Массив из Строка - +// Массив из Строка // Функция ПланыОбменаРИБ() Экспорт @@ -360,8 +360,8 @@ // Определяет режим регистрации данных на узлах плана обмена. // // Параметры: -// ПолноеИмяОбъекта - Строка - Полное имя проверяемого объекта метаданных. -// ИмяПланаОбмена - Строка - Проверяемый план обмена. +// ПолноеИмяОбъекта - Строка - полное имя проверяемого объекта метаданных. +// ИмяПланаОбмена - Строка - проверяемый план обмена. // // Возвращаемое значение: // Неопределено - объект не включен в состав плана обмена, @@ -406,9 +406,9 @@ // Доступность объектов метаданных по функциональным опциям. // // Возвращаемое значение: -// ФиксированноеСоответствие - : -// * Ключ - Строка - -// * Значение - Булево - +// ФиксированноеСоответствие: +// * Ключ - Строка +// * Значение - Булево // Функция ДоступностьОбъектовПоОпциям() Экспорт @@ -445,9 +445,9 @@ // Параметры, применяемых к элементам командного интерфейса, связанным с параметрическими функциональными опциями. // // Возвращаемое значение: -// ФиксированнаяСтруктура -: -// * Ключ - Строка - -// * Значение - Произвольный - +// ФиксированнаяСтруктура: +// * Ключ - Строка +// * Значение - Произвольный // Функция ОпцииИнтерфейса() Экспорт @@ -461,9 +461,9 @@ // У "функциональной" подсистемы снят флажок "Включать в командный интерфейс". // // Возвращаемое значение: -// ФиксированноеСоответствие - : -// * Ключ - Строка - -// * Значение - Булево - +// ФиксированноеСоответствие: +// * Ключ - Строка +// * Значение - Булево // Функция ИменаПодсистем() Экспорт @@ -552,7 +552,7 @@ // Только для внутреннего использования. // // Возвращаемое значение: -// Строка - +// Строка // Функция ПредставлениеИдентификатораОбъектаМетаданных(Ссылка) Экспорт @@ -575,12 +575,12 @@ // * Планы видов расчета. // // Возвращаемое значение: -// ФиксированноеСоответствие - , Неопределено, где: +// ФиксированноеСоответствие: // * Ключ - Строка - имя предопределенного, -// * Значение - СправочникСсылка - -// - ПланВидовХарактеристикСсылка - -// - ПланСчетовСсылка - -// - ПланВидовРасчетаСсылка - +// * Значение - СправочникСсылка +// - ПланВидовХарактеристикСсылка +// - ПланСчетовСсылка +// - ПланВидовРасчетаСсылка // - Null - ссылка предопределенного или Null, если объекта нет в ИБ. // // Если ошибка в имени метаданных или неподходящий тип метаданного, то возвращается Неопределено. @@ -651,7 +651,18 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции -Функция НовоеОписаниеПодсистемы() +// Возвращаемое значение: +// Структура: +// * ПараллельноеОтложенноеОбновлениеСВерсии - Строка +// * РежимВыполненияОтложенныхОбработчиков - Строка +// * ОсновнойСерверныйМодуль - Строка +// * ЭтоКонфигурация - Булево +// * ИдентификаторИнтернетПоддержки - Строка +// * ТребуемыеПодсистемы - Массив +// * Версия - Строка +// * Имя - Строка +// +Функция НовоеОписаниеПодсистемы() Экспорт Описание = Новый Структура; Описание.Вставить("Имя", ""); @@ -699,4 +710,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 86be54ae3..f9f8f5093 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -12,11 +12,12 @@ // согласно документации. // // Параметры: -// ИменаПараметровСеанса - Массив, Неопределено - имена параметров сеанса для инициализации. -// Массив устанавливаемых идентификаторов параметров сеанса, -// которые нужно инициализировать, если обработчик вызывается -// перед использованием неинициализированных параметров сеанса. -// Неопределено, если обработчик события вызывается системой при начале сеанса. +// ИменаПараметровСеанса - Массив +// - Неопределено - имена параметров сеанса для инициализации. +// Массив устанавливаемых идентификаторов параметров сеанса, +// которые нужно инициализировать, если обработчик вызывается +// перед использованием неинициализированных параметров сеанса. +// Неопределено, если обработчик события вызывается системой при начале сеанса. // // Возвращаемое значение: // Массив - имена параметров сеанса, значения которых были успешно установлены. @@ -214,7 +215,7 @@ // Подробнее см. стандарт "Поле "Дата" в списках". // // Параметры: -// ЭтотОбъект - ФормаКлиентскогоПриложения - форма со списком. +// Форма - ФормаКлиентскогоПриложения - форма со списком. // ПолноеИмяРеквизита - Строка - полный путь к реквизиту типа "Дата" в формате "<ИмяСписка>.<ИмяПоля>". // ИмяЭлемента - Строка - имя элемента формы, связанного с реквизитом списка типа "Дата". // @@ -223,13 +224,13 @@ // Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект); // -Процедура УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, +Процедура УстановитьУсловноеОформлениеПоляДата(Форма, ПолноеИмяРеквизита = "Список.Дата", ИмяЭлемента = "Дата") Экспорт ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( "СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата", "ЭтотОбъект", - ЭтотОбъект, + Форма, Тип("ФормаКлиентскогоПриложения")); ЧастиПолногоИмени = СтрРазделить(ПолноеИмяРеквизита, "."); @@ -241,7 +242,7 @@ КонецЕсли; ИмяСписка = ЧастиПолногоИмени[0]; - РеквизитСписок = ЭтотОбъект[ИмяСписка]; + РеквизитСписок = Форма[ИмяСписка]; Если ТипЗнч(РеквизитСписок) = Тип("ДинамическийСписок") Тогда // ДинамическийСписок позволяет установить условное оформление с помощью собственного компоновщика. @@ -254,7 +255,7 @@ Иначе // Остальные списки, например, ДанныеФормыДерево: // не имеют собственного компоновщика, потому используют компоновщик самой формы. - УсловноеОформление = ЭтотОбъект.УсловноеОформление; + УсловноеОформление = Форма.УсловноеОформление; ПутьКРеквизиту = ПолноеИмяРеквизита; ИмяОформляемогоПоля = ИмяЭлемента; КонецЕсли; @@ -336,7 +337,7 @@ // Возвращает описания форматов сохранения табличного документа. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: +// ТаблицаЗначений: // * ТипФайлаТабличногоДокумента - ТипФайлаТабличногоДокумента - значение, соответствующее формату; // * Ссылка - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка на метаданные, где хранится представление; // * Представление - Строка - представление типа файла (заполняется из перечисления); @@ -537,10 +538,10 @@ // Возвращает значение параметра работы программы. // // В старом сеансе (когда версия программы обновлена динамически), -// если параметр не найден, вызывается исключение с требованием перезапуска, -// если параметр найден, значение возвращается без учета версии. +// если параметр не существует, вызывается исключение с требованием перезапуска, +// иначе возвращается значение без учета версии. // -// В разделенном режиме модели сервиса, если параметр не найден или +// В разделенном режиме модели сервиса, если параметр не существует или // версия параметра не равна версии конфигурации вызывается исключение, // так как обновление неразделенных данных невозможно. // @@ -549,7 +550,7 @@ // "СтандартныеПодсистемы.ВариантыОтчетов.ОтчетыСНастройками". // // Возвращаемое значение: -// Произвольный - возвращается Неопределено, когда параметр не найден или +// Произвольный - возвращается Неопределено, когда параметр не существует или // когда в новом сеансе версия параметра не равна версии конфигурации. // Функция ПараметрРаботыПрограммы(ИмяПараметра) Экспорт @@ -755,14 +756,14 @@ // - регистрируемый объект должен быть неразделенным. // // Параметры: -// Объект - СправочникОбъект - -// - ДокументОбъект - -// - БизнесПроцессОбъект - -// - ЗадачаОбъект - -// - ПланВидовРасчетаОбъект - -// - ПланВидовХарактеристикОбъект - -// - ПланСчетовОбъект - -// - ПланОбменаОбъект - +// Объект - СправочникОбъект +// - ДокументОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланВидовРасчетаОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланОбменаОбъект // // ИмяПланаОбмена - Строка - имя плана обмена, на всех узлах которого требуется выполнить регистрацию объекта. // План обмена должен быть разделенным, иначе будет выдано исключение. @@ -987,11 +988,15 @@ // Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной // информационной базе. -// -// Параметры: -// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтакс-помощнике. -// Параметр Отправитель может быть не заполнен, например, при получении сообщения начального образа в АРМе. +// См. описание обработчика события ПриПолученииДанныхОтГлавного() в синтакс-помощнике. +// Параметр Отправитель может быть не заполнен, например, при получении сообщения начального образа в АРМе. // +// Параметры: +// ЭлементДанных - Произвольный +// ПолучениеЭлемента - ПолучениеЭлементаДанных +// ОтправкаНазад - Булево +// Отправитель - ПланОбменаОбъект +// Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель = Неопределено) Экспорт Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда @@ -1044,7 +1049,7 @@ // ОбъектМетаданных - ОбъектМетаданных - регистр или ссылочный объект. // // Возвращаемое значение: -// Тип - . +// Тип // Функция ТипСсылкиИлиКлючаЗаписиОбъектаМетаданных(ОбъектМетаданных) Экспорт @@ -1078,7 +1083,7 @@ // ОбъектМетаданных - ОбъектМетаданных - регистр или ссылочный объект. // // Возвращаемое значение: -// Тип - . +// Тип // Функция ТипОбъектаИлиНабораЗаписейОбъектаМетаданных(ОбъектМетаданных) Экспорт @@ -1174,10 +1179,10 @@ // символы на код символа ограниченного символом подчеркивания. // // Параметры: -// Строка - Строка - Строка для преобразования. +// Строка - Строка - строка для преобразования. // // Возвращаемое значение: -// Строка - Строка, содержащая только допустимые символы для наименования колонок таблицы значений. +// Строка - строка, содержащая только допустимые символы для наименования колонок таблицы значений. // Функция ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки(Строка) Экспорт @@ -1199,7 +1204,7 @@ // символы заменены на код символа, ограниченного символом подчеркивания в обычную строку. // // Параметры: -// НаименованиеКолонки - Строка - Адаптированное наименование колонки. +// НаименованиеКолонки - Строка - адаптированное наименование колонки. // // Возвращаемое значение: // Строка - преобразованная строка. @@ -1226,7 +1231,9 @@ // о массовых изменениях объектов, которые произошли на сервере. // // Параметры: -// ИзмененныеОбъекты - ЛюбаяСсылка, Тип, Массив - содержит сведения об измененных объектах. +// ИзмененныеОбъекты - ЛюбаяСсылка +// - Тип +// - Массив - содержит сведения об измененных объектах. // Может быть передана ссылка или массив ссылок на измененные объекты, // либо можно указать тип или массив типов измененных объектов. // @@ -1913,7 +1920,7 @@ // данной подсистемы. // // Параметры: -// Параметры - Структура - +// Параметры - Структура // Процедура ДобавитьПараметрыРаботыКлиента(Параметры) @@ -2411,7 +2418,7 @@ Или Не ЗначениеЗаполнено(Строка.ИмяРодителя) Тогда Продолжить; КонецЕсли; - СтрокаРодителя = ОписаниеСохраненных.ТаблицаИмен.Найти(Строка.ИмяРодителя, "Имя"); + СтрокаРодителя = ОписаниеСохраненных.ТаблицаИмен.Найти(Строка.ИмяРодителя, "Имя"); // СправочникСсылка, ПланВидовХарактеристикСсылка, ПланСчетовСсылка, ПланВидовРасчетаСсылка Если СтрокаРодителя <> Неопределено Тогда НовыйОбъект = Строка.Ссылка.ПолучитьОбъект(); НовыйОбъект.Родитель = СтрокаРодителя.Ссылка; @@ -2422,6 +2429,10 @@ КонецПроцедуры +// Параметры: +// Счет - ПланСчетовОбъект +// ОбразецСчета - ПланСчетовОбъект +// Процедура ДополнитьНовыеВидыСубконтоСчета(Счет, ОбразецСчета) Для Каждого Строка Из ОбразецСчета.ВидыСубконто Цикл @@ -2540,14 +2551,17 @@ Режимы = Метаданные.СвойстваОбъектов.РежимСовместимости; ТекущийРежим = Метаданные.РежимСовместимости; - ПоддерживаемаяВерсияПлатформы = "8.3.14"; + ПоддерживаемаяВерсияПлатформы = "8.3.16"; ВерсияПлатформы = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(СистемнаяИнформация.ВерсияПриложения); + Если ТекущийРежим = Режимы.НеИспользовать Тогда - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(ВерсияПлатформы, ПоддерживаемаяВерсияПлатформы) = 0 Тогда + ПоддерживаемыеВерсииПлатформы = СтрРазделить("8.3.14, 8.3.15, 8.3.16", ", ", Ложь); + + Если ПоддерживаемыеВерсииПлатформы.Найти(ВерсияПлатформы) <> Неопределено Тогда НеПоддерживаемаяВерсияПлатформы = ""; Иначе НеПоддерживаемаяВерсияПлатформы = ВерсияПлатформы; - КонецЕсли; + КонецЕсли; ИначеЕсли ТекущийРежим = Режимы.Версия8_1 Тогда НеПоддерживаемаяВерсияПлатформы = "8.1" ИначеЕсли ТекущийРежим = Режимы.Версия8_2_13 Тогда @@ -2581,7 +2595,16 @@ ИначеЕсли ТекущийРежим = Режимы.Версия8_3_13 Тогда НеПоддерживаемаяВерсияПлатформы = "8.3.13"; Иначе - НеПоддерживаемаяВерсияПлатформы = ?(СтрЗаканчиваетсяНа(Строка(ТекущийРежим), "8_3_14"), "", Строка(ТекущийРежим)); + ТекущийРежимСтрокой = Строка(ТекущийРежим); + + Если СтрЗаканчиваетсяНа(ТекущийРежимСтрокой, "8_3_14") + Или СтрЗаканчиваетсяНа(ТекущийРежимСтрокой, "8_3_15") + Или СтрЗаканчиваетсяНа(ТекущийРежимСтрокой, "8_3_16") Тогда + + НеПоддерживаемаяВерсияПлатформы = ""; + Иначе + НеПоддерживаемаяВерсияПлатформы = ТекущийРежимСтрокой; + КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(НеПоддерживаемаяВерсияПлатформы) Тогда @@ -3057,7 +3080,7 @@ // Проверяет возможность выполнения обработчиков без установки безопасного режима. // // Возвращаемое значение: -// Булево - +// Булево // Функция ВозможноВыполнениеОбработчиковБезУстановкиБезопасногоРежима() @@ -3070,7 +3093,7 @@ // Проверяет возможность перехода в привилегированный режим из текущего безопасного режима. // // Возвращаемое значение: -// Булево - +// Булево // Функция ДоступенПереходВПривилегированныйРежим() @@ -3230,24 +3253,27 @@ КонецПроцедуры -// Локализация +// Многоязычные конфигурации -Функция ТребуетсяУстановкаРегиональныхНастроекИнформационнойБазы() +Функция ТребуетсяУстановкаРегиональныхНастроекИнформационнойБазы() Экспорт Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат Ложь; КонецЕсли; УстановитьПривилегированныйРежим(Истина); - ТребуетсяУстановкаОсновногоЯзыка = ?(Метаданные.Языки.Количество() > 1, Не ЗначениеЗаполнено(Константы.ОсновнойЯзык.Получить()), Ложь); - Если Не ТребуетсяУстановкаОсновногоЯзыка Тогда + Если ЗначениеЗаполнено(Константы.ОсновнойЯзык.Получить()) Тогда Возврат Ложь; - ИначеЕсли ОбновлениеИнформационнойБазыСлужебный.РежимОбновленияДанных() = "НачальноеЗаполнение" Тогда + КонецЕсли; + + Если ОбновлениеИнформационнойБазыСлужебный.РежимОбновленияДанных() = "НачальноеЗаполнение" + И Метаданные.Языки.Количество() > 1 Тогда Возврат Истина; КонецЕсли; Константы.ОсновнойЯзык.Установить(Метаданные.ОсновнойЯзык.КодЯзыка); + Возврат Ложь; КонецФункции @@ -3269,9 +3295,10 @@ // Возвращает сериализуемый набор элементов стиля. // // Возвращаемое значение: -// Структура - элементы стиля +// Структура: // * Ключ - Строка - имя элемента стиля. -// * Значение - Строка, ОбъектМетаданных: ЭлементСтиля - элемент стиля. Для толстого клиента обычного приложения +// * Значение - Строка +// - ОбъектМетаданных: ЭлементСтиля - элемент стиля. Для толстого клиента обычного приложения // элемент стиля преобразуется в системное строковое представление переданного значения. // Функция НаборЭлементовСтиля() diff --git a/SSL/src/CommonModules/СтроковыеФункции/Module.bsl b/SSL/src/CommonModules/СтроковыеФункции/Module.bsl index d9fd0ed2b..50a88c271 100644 --- a/SSL/src/CommonModules/СтроковыеФункции/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункции/Module.bsl @@ -64,14 +64,37 @@ Функция СтрокаЛатиницей(Знач Значение) Экспорт ПравилаТранслитерации = Новый Соответствие; + СтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(ПравилаТранслитерации); + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.СтрокаЛатиницей(Значение, ПравилаТранслитерации); - Если Метаданные.ОбщиеМодули.Найти("СтандартныеПодсистемыКлиентСерверЛокализация") <> Неопределено Тогда - МодульСтандартныеПодсистемыКлиентСерверЛокализация = - ОбщегоНазначения.ОбщийМодуль("СтандартныеПодсистемыКлиентСерверЛокализация"); - МодульСтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(ПравилаТранслитерации); +КонецФункции + +// Возвращает представление периода в нижнем регистре или с заглавной буквы, +// если с него начинается фраза (предложение). +// Например, если требуется вывести представление периода в заголовке отчета +// в формате "Продажи за [ДатаНачала] - [ДатаОкончания]", то ожидается, что +// результат будет выглядеть так: "Продажи за февраль 2020 г. - март 2020 г.". +// Т.е. - строчно, т.к. "февраль 2020 г. - март 2020 г." не является началом предложения. +// +// Параметры: +// ДатаНачала - Дата - начало периода. +// ДатаОкончания - Дата - конец периода. +// ФорматнаяСтрока - Строка - определяет способ форматирования периода. +// СЗаглавнойБуквы - Булево - Истина, если с представления периода начинается предложение. +// По умолчанию - Ложь. +// +// Возвращаемое значение: +// Строка - представление периода в требуемом формате и регистре. +// +Функция ПредставлениеПериодаВТексте(ДатаНачала, ДатаОкончания, ФорматнаяСтрока = "", СЗаглавнойБуквы = Ложь) Экспорт + + ПредставлениеПериода = НРег(ПредставлениеПериода(ДатаНачала, ДатаОкончания, ФорматнаяСтрока)); + + Если СЗаглавнойБуквы Тогда + ПредставлениеПериода = ВРег(Сред(ПредставлениеПериода, 1, 1)) + Сред(ПредставлениеПериода, 2); КонецЕсли; - Возврат ОбщегоНазначенияСлужебныйКлиентСервер.СтрокаЛатиницей(Значение, ПравилаТранслитерации); + Возврат ПредставлениеПериода; КонецФункции diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиент/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиент/Module.bsl index e842cf830..b94998f89 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиент/Module.bsl @@ -64,12 +64,7 @@ Функция СтрокаЛатиницей(Знач Значение) Экспорт ПравилаТранслитерации = Новый Соответствие; - - МодульСтандартныеПодсистемыКлиентСерверЛокализация = Вычислить("СтандартныеПодсистемыКлиентСерверЛокализация"); - Если ТипЗнч(МодульСтандартныеПодсистемыКлиентСерверЛокализация) = Тип("ОбщийМодуль") Тогда - МодульСтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(ПравилаТранслитерации); - КонецЕсли; - + СтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(ПравилаТранслитерации); Возврат ОбщегоНазначенияСлужебныйКлиентСервер.СтрокаЛатиницей(Значение, ПравилаТранслитерации); КонецФункции diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index da7cf04cb..c277301be 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -802,7 +802,7 @@ // Значение - Строка - строка, которую необходимо привести к дате. // Формат даты должен быть в виде "ДД.ММ.ГГГГ" или "ДД/ММ/ГГ" или "ДД-ММ-ГГ ЧЧ:ММ:CC", // Например, "23.02.1980" или "23/02/80 09:15:45". -// ЧастьДаты - ЧастиДаты - Определяет допустимые части даты. По умолчанию, ЧастиДаты.Дата. +// ЧастьДаты - ЧастиДаты - определяет допустимые части даты. По умолчанию, ЧастиДаты.Дата. // // Возвращаемое значение: // Дата - полученная дата. @@ -1034,7 +1034,7 @@ // - %1 обозначает позицию числа; // Число - Число - число, которое будет подставлено в строку вместо параметра "%1". // Вид - ВидЧисловогоЗначения - определяет вид числового значения, для которого формируется представление. -// - Количественное (по умолчанию) или Порядковое. +// - количественное (по умолчанию) или Порядковое. // ФорматнаяСтрока - Строка - строка параметров форматирования. См. аналогичный параметр в СтрокаСЧислом. // // Возвращаемое значение: @@ -1138,7 +1138,7 @@ Для Каждого ЧастьСтроки Из СтрокиСоСсылками Цикл Если ЧастьСтроки.Пометка Тогда - МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ЧастьСтроки.Значение, Новый Шрифт(,,Истина))); + МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ЧастьСтроки.Значение, Новый Шрифт(,,Истина))); // АПК:1345 - устаревший код. ИначеЕсли Не ПустаяСтрока(ЧастьСтроки.Представление) Тогда МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ЧастьСтроки.Значение,,,, ЧастьСтроки.Представление)); Иначе @@ -1147,7 +1147,8 @@ КонецЦикла; - Возврат Новый ФорматированнаяСтрока(МассивСтроки); + Возврат Новый ФорматированнаяСтрока(МассивСтроки); // АПК:1356 - можно использовать составную форматированную строку, + // так как массив строк формируется из переданного в функцию текста. КонецФункции @@ -1282,25 +1283,7 @@ Результат = ""; Соответствие = Новый Соответствие; - - // АПК:547-выкл - // АПК:488-выкл - // Следующий фрагмент кода выполняет условный вызов процедуры ПриЗаполненииПравилТранслитерации - // при наличии модуля СтандартныеПодсистемыКлиентСерверЛокализация. - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Если Метаданные.ОбщиеМодули.Найти("СтандартныеПодсистемыКлиентСерверЛокализация") <> Неопределено Тогда - МодульСтандартныеПодсистемыКлиентСерверЛокализация = - ОбщегоНазначения.ОбщийМодуль("СтандартныеПодсистемыКлиентСерверЛокализация"); - МодульСтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(Соответствие); - КонецЕсли; - #Иначе - МодульСтандартныеПодсистемыКлиентСерверЛокализация = Вычислить("СтандартныеПодсистемыКлиентСерверЛокализация"); - Если ТипЗнч(МодульСтандартныеПодсистемыКлиентСерверЛокализация) = Тип("ОбщийМодуль") Тогда - МодульСтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(Соответствие); - КонецЕсли; - #КонецЕсли - // АПК:488-вкл - // АПК:547-вкл + СтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(Соответствие); ТолькоЗаглавныеВСтроке = ТолькоЗаглавныеВСтроке(Значение); @@ -1417,7 +1400,8 @@ КонецЦикла; - Возврат Новый ФорматированнаяСтрока(НаборСтрок); + Возврат Новый ФорматированнаяСтрока(НаборСтрок); // АПК:1356 - можно использовать составную форматированную строку, + // так как массив строк формируется из переданного в функцию текста. КонецФункции diff --git a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl index 469da20dc..122655089 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl @@ -11,7 +11,7 @@ // Вызывается для получения настроек подсистемы. // // Параметры: -// Настройки - Структура - со свойствами: +// Настройки - Структура: // * Реквизиты - Соответствие - для переопределения имен реквизитов объекта, в которых содержится информация // о сумме и валюте, выводимых в списке связанных документов. // В ключе указывается полное имя объекта метаданных, в значении - соответствие @@ -48,7 +48,8 @@ // // Параметры: // ТипДанных - ЛюбаяСсылка - тип ссылки выводимого объекта, см. свойство Тип критерия отбора СвязанныеДокументы. -// Данные - ВыборкаИзРезультатаЗапроса, Структура - содержит значения полей, из которых формируется представление: +// Данные - ВыборкаИзРезультатаЗапроса +// - Структура - содержит значения полей, из которых формируется представление: // * Ссылка - ЛюбаяСсылка - ссылка объекта, выводимого в списке связанных документов. // * ДополнительныйРеквизит1 - Произвольный - значение первого реквизита, указанного в массиве // РеквизитыДляПредставления параметра Настройки процедуры ПриОпределенииНастроек. @@ -62,7 +63,33 @@ КонецПроцедуры + +// Позволяет повлиять на вывод объектов в отчет Связанные документы. +// Вывод еще не начат - выполняется получение данных. +// +// Параметры: +// Объект - СправочникСсылка +// - ДокументСсылка +// - ЗадачаСсылка +// - БизнесПроцессСсылка +// - ПланВидовХарактеристикСсылка - +// ссылка на объект структуры подчиненности, который подлежит выводу в отчет. +// СвойстваОбъекта - Структура - признаки, описывающие состояние объекта, где: +// * ЭтоОсновной - Булево - если Истина, то это объект для которого формируется структура. +// * ЭтоСлужебный - Булево - если Истина, то объект не обязателен к выводу. По умолчанию - Ложь. +// * ЭтоПодчиненный - Булево - если Истина, то объект является подчиненным по отношению к основному. +// * Выводился - Структура - счетчик частоты вывода объекта суммарно и в подчиненных, где: +// * Итого - Число - суммарная частота вывода объекта. +// * ВПодчиненных - Число - частота вывода объекта в подчиненных. +// Отказ - Булево - если Истина, то объект не будет выведен в отчет. +// При этом, это не мешает выводу подчиненных ему объектов. +// +Процедура ПередВыводомСвязанногоОбъекта(Объект, СвойстваОбъекта, Отказ) Экспорт + + +КонецПроцедуры + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать СтруктураПодчиненностиПереопределяемый.ПриОпределенииНастроек. diff --git a/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl index 813487623..20755c28e 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl @@ -22,4 +22,130 @@ КонецПроцедуры +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. +// +// Параметры: +// НастройкиФормы - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.НастройкиФормы +// Источники - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Источники +// ПодключенныеОтчетыИОбработки - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.ПодключенныеОтчетыИОбработки +// Команды - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Команды +// +// +// Параметры: +// ВидыПодключаемыхКоманд - ТаблицаЗначений - поддерживаемые виды команд, где: +// * Имя - Строка - имя вида команд. +// * ИмяПодменю - Строка - имя подменю для размещения команд этого вида на формах объектов. +// * Заголовок - Строка - наименование подменю, выводимое пользователю. +// * Картинка - Картинка - картинка подменю. +// * Отображение - ОтображениеКнопки - режим отображения подменю. +// * Порядок - Число - порядок подменю в командной панели формы. +// +Процедура ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд) Экспорт + + Вид = ВидыПодключаемыхКоманд.Добавить(); + Вид.Имя = "СвязанныеДокументы"; + Вид.ИмяПодменю = "ПодменюОтчеты"; + Вид.Заголовок = НСтр("ru = 'Отчеты'"); + Вид.Порядок = 50; + Вид.Картинка = БиблиотекаКартинок.Отчет; + Вид.Отображение = ОтображениеКнопки.КартинкаИТекст; + +КонецПроцедуры + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. +// +// Параметры: +// НастройкиФормы - Структура - сведения о форме, в которой выводятся команды. +// Источники - ДеревоЗначений - сведения о поставщиках команд этой формы. +// ПодключенныеОтчетыИОбработки - ТаблицаЗначений - отчеты и обработки, предоставляющие свои команды. +// Команды - ТаблицаЗначений - записать в этот параметр сформированные команды для вывода в подменю. +// +Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт + + МетаданныеФормы = Метаданные.ОбщиеФормы.СвязанныеДокументы; + Если Не ПравоДоступа("Просмотр", МетаданныеФормы) Тогда + Возврат; + КонецЕсли; + + ТипПараметраКоманды = ТипПараметраКоманды(Источники); + Если ТипПараметраКоманды = Неопределено Тогда + Возврат; + КонецЕсли; + + Команда = Команды.Добавить(); + Команда.Представление = НСтр("ru = 'Связанные документы'"); + Команда.Вид = "СвязанныеДокументы"; + Команда.МножественныйВыбор = Ложь; + Команда.ИмяПараметраФормы = "ОбъектОтбора"; + Команда.ИмяФормы = МетаданныеФормы.ПолноеИмя(); + Команда.Важность = "СмТакже"; + Команда.ТипПараметра = ТипПараметраКоманды; + Команда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.S, Ложь, Истина, Истина); + Команда.Картинка = БиблиотекаКартинок.СтруктураПодчиненности; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ТипПараметраКоманды(Источники) + + ТипыИсточников = Новый Массив; + ЗаполнитьТипыИсточников(ТипыИсточников, Источники.Строки); + ТипыИсточников = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ТипыИсточников); + + ИндексТиповСвязанныхОбъектов = ИндексТиповСвязанныхОбъектов(); + + Индекс = ТипыИсточников.ВГраница(); + Пока Индекс >= 0 Цикл + + ТипИсточника = ТипыИсточников[Индекс]; + Если ИндексТиповСвязанныхОбъектов[ТипИсточника] = Неопределено Тогда + ТипыИсточников.Удалить(Индекс); + КонецЕсли; + + Индекс = Индекс - 1; + + КонецЦикла; + + Возврат ?(ТипыИсточников.Количество() > 0, Новый ОписаниеТипов(ТипыИсточников), Неопределено); + +КонецФункции + +Процедура ЗаполнитьТипыИсточников(ТипыИсточников, Источники) + + Для Каждого Источник Из Источники Цикл + + Если ТипЗнч(Источник.ТипСсылкиДанных) = Тип("Тип") Тогда + + ТипыИсточников.Добавить(Источник.ТипСсылкиДанных); + + ИначеЕсли ТипЗнч(Источник.ТипСсылкиДанных) = Тип("ОписаниеТипов") Тогда + + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ТипыИсточников, Источник.ТипСсылкиДанных.Типы()); + + КонецЕсли; + + ЗаполнитьТипыИсточников(ТипыИсточников, Источник.Строки); + + КонецЦикла; + +КонецПроцедуры + +Функция ИндексТиповСвязанныхОбъектов() + + Индекс = Новый Соответствие; + + МетаданныеСвязанныхОбъектов = Метаданные.КритерииОтбора.СвязанныеДокументы; + ТипыСвязанныхОбъектов = МетаданныеСвязанныхОбъектов.Тип.Типы(); + + Для Каждого ТипСвязанногоОбъекта Из ТипыСвязанныхОбъектов Цикл + Индекс.Вставить(ТипСвязанногоОбъекта, Истина); + КонецЦикла; + + Возврат Индекс; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl index 380d350ea..b216bda5a 100644 --- a/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl @@ -75,7 +75,7 @@ // Позволяет менять некоторые настройки подсистемы. // // Параметры: -// Параметры - Структура - со свойствами: +// Параметры - Структура: // * ЗаголовокПрочихДел - Строка - заголовок раздела, в который выводятся // дела, не отнесенные к разделам командного интерфейса. // Применимо для тех дел, размещение которых в панели diff --git a/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl index 3de279394..464a9d4bd 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl @@ -55,8 +55,9 @@ // Возвращает структуру общих значений, используемых для расчета текущих дел. // // Возвращаемое значение: -// Структура - со свойствами: -// * Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - текущий пользователь. +// Структура: +// * Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - текущий пользователь. // * ЭтоПолноправныйПользователь - Булево - Истина, если пользователь полноправный. // * ТекущаяДата - Дата - текущая дата сеанса. // * ПустаяДата - Дата - пустая дата. @@ -92,7 +93,7 @@ // ОбщиеПараметрыЗапросов - Структура - общие значения для расчета текущих дел. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Ключ - Строка - имя показателя текущих дел. // * Значение - Число - числовое значение показателя. // diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl index 7b1e56041..67f2ca4a4 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl @@ -22,7 +22,8 @@ // * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку // дела на панели "Текущие дела". // * ПараметрыФормы- Структура - параметры, с которыми нужно открывать форму показателя. -// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего +// * Владелец - Строка +// - объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего // или объект метаданных подсистема. // * Подсказка - Строка - текст подсказки. // @@ -60,18 +61,18 @@ // для текущего пользователя. // // Возвращаемое значение: -// Структура - со свойствами: -// * ВидимостьДел - Соответствие - -// * ВидимостьРазделов - Соответствие - -// * ДеревоДел - ДеревоЗначений - с колонками: -// ** Представление - Строка- -// ** ЭтоРаздел - Булево - -// ** Пометка - Булево - -// ** Идентификатор - Строка - -// ** Индекс - Число - -// ** РасшифровкаДела - Строка - -// ** Скрытое - Булево - -// ** ВыводитьВОповещениях -Булево - +// Структура: +// * ВидимостьДел - Соответствие +// * ВидимостьРазделов - Соответствие +// * ДеревоДел - ДеревоЗначений: +// ** Представление - Строка +// ** ЭтоРаздел - Булево +// ** Пометка - Булево +// ** Идентификатор - Строка +// ** Индекс - Число +// ** РасшифровкаДела - Строка +// ** Скрытое - Булево +// ** ВыводитьВОповещениях -Булево // Функция СохраненныеНастройкиОтображения() Экспорт @@ -319,7 +320,8 @@ // * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку // дела на панели "Текущие дела". // * ПараметрыФормы - Структура - параметры, с которыми нужно открывать форму показателя. -// * Владелец - Строка, ОбъектМетаданных - строковый идентификатор дела, которое будет владельцем для текущего +// * Владелец - Строка +// - ОбъектМетаданных - строковый идентификатор дела, которое будет владельцем для текущего // или объект метаданных подсистема. // * Подсказка - Строка - текст подсказки. // * ОбъектВладелецДел - Строка - полное имя объекта метаданных, в котором расположен обработчик заполнения дел. diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl index 833b54f0b..83925e9ec 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl @@ -11,7 +11,7 @@ // Возвращает соответствие объектов метаданных и подсистем командного интерфейса. // // Возвращаемое значение: -// Соответствие, где ключом является полное имя объекта, а значение - массив подсистем +// Соответствие - где ключом является полное имя объекта, а значение - массив подсистем // командного интерфейса программы, в которые входит данный объект. // Функция ПринадлежностьОбъектовРазделамКомандногоИнтерфейса() Экспорт diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектов/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектов/Module.bsl index 6ab9fa17b..cfcea1950 100644 --- a/SSL/src/CommonModules/УдалениеПомеченныхОбъектов/Module.bsl +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектов/Module.bsl @@ -8,7 +8,291 @@ #Область ПрограммныйИнтерфейс -// Состояние флажка для формы настроек удаления помеченных объектов. +// Безвозвратно удаляет объекты, помеченные на удаление, выполняя при этом контроль ссылочной целостности. +// +// Параметры: +// УдаляемыеОбъекты - Массив Из ПланОбменаСсылка - объекты для удаления. +// - Массив Из СправочникСсылка +// - Массив Из ДокументСсылка +// - Массив Из ПланСчетовСсылка +// - Массив Из ПланВидовРасчетаСсылка +// - Массив Из БизнесПроцессСсылка +// - Массив Из ЗадачаСсылка +// РежимУдаления - Строка - способ удаления, может принимать значения: +// "Стандартный" - удаление объектов с контролем ссылочной целостности и сохранением возможности +// многопользовательской работы. +// "Монопольный" - удаление объектов с контролем ссылочной целостности с установкой монопольного режима. +// Если монопольный режим установить не удалось, то будет вызвано исключение. +// "Упрощенный" - удаление объектов, при котором контроль ссылочной целостности выполняется только в непомеченных +// на удаление объектах. В помеченных на удаление объектах ссылки на удаляемые объекты +// будут очищены. +// +// Возвращаемое значение: +// Структура: +// * Успешно - Булево - Истина, если все объекты были удалены. +// * ПрепятствующиеУдалению - ТаблицаЗначений - объекты, в которых есть ссылки на удаляемые объекты: +// ** УдаляемыйСсылка - ЛюбаяСсылка +// ** МестоИспользования - ЛюбаяСсылка - ссылка на объект, препятствующий удалению. +// - Неопределено - объект используется в константе или +// в процессе удаление произошла ошибка. Информация о константе указана в поле метаданные. +// Информация об ошибке указана в поле ОписаниеОшибки. +// ** ОписаниеОшибки - Строка - описание ошибки при удалении объекта. +// ** ПодробноеОписаниеОшибки - Строка - подробное описание ошибки при удалении объекта. +// ** Метаданные - ОбъектМетаданных - описание метаданных объекта, препятствующего удалению. +// * Удаленные - Массив из ЛюбаяСсылка- успешно удаленные объекты. +// * НеУдаленные - Массив из ЛюбаяСсылка - не удаленные объекты. +// +Функция УдалитьПомеченныеОбъекты(УдаляемыеОбъекты, РежимУдаления = "Стандартный") Экспорт + ДопустимыеРежимы = УдалениеПомеченныхОбъектовСлужебный.ДопустимыеРежимыУдаления(); + + Если ДопустимыеРежимы.Найти(РежимУдаления) = Неопределено Тогда + ТекстОшибки = НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |Ожидалось: %3; + |передано значение: %4 (тип %5).'"); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + "РежимУдаления", + "УдалитьПомеченныеОбъекты", + СтрСоединить(ДопустимыеРежимы, Символы.ПС+"-"), + РежимУдаления, + ТипЗнч(РежимУдаления)); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Результат = Новый Структура("ПрепятствующиеУдалению, Удаленные, НеУдаленные"); + + // Для отмены задания с клиента + ИдентификаторЗадания = Неопределено; + Если УдаляемыеОбъекты.Количество() > 0 + И ТипЗнч(УдаляемыеОбъекты[УдаляемыеОбъекты.Количество() -1]) = Тип("УникальныйИдентификатор") Тогда + + ИдентификаторЗадания = УдаляемыеОбъекты[УдаляемыеОбъекты.Количество() -1]; + УдаляемыеОбъекты.Удалить(УдаляемыеОбъекты.Количество() -1); + КонецЕсли; + + ПараметрыУдаления = Новый Структура("ПользовательскиеОбъекты", УдаляемыеОбъекты); + Если РежимУдаления = "Монопольный" Тогда + УстановитьМонопольныйРежимПриНеобходимости(Истина, ИдентификаторЗадания); + ПараметрыУдаления.Вставить("Монопольно", Истина); + ИначеЕсли РежимУдаления = "Упрощенный" Тогда + ПараметрыУдаления.Вставить("ОчищатьСсылкиВМестахИспользования", Истина); + КонецЕсли; + ПараметрыУдаления.Вставить("Режим", РежимУдаления); + + Попытка + РезультатУдаления = Обработки.УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(ПараметрыУдаления, ИдентификаторЗадания); + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыУдаления, "Монопольно", Ложь) И МонопольныйРежим() Тогда + УстановитьМонопольныйРежимПриНеобходимости(Ложь, ИдентификаторЗадания); + КонецЕсли; + Исключение + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыУдаления, "Монопольно", Ложь) Тогда + УстановитьМонопольныйРежимПриНеобходимости(Ложь, ИдентификаторЗадания); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + ЗаполнитьЗначенияСвойств(Результат, РезультатУдаления); + + Возврат Результат; +КонецФункции + +// Формирует помеченные на удаление с учетом разделения и фильтрацией служебных и предопределенных объектов. +// При выполнении в разделенном сеансе будут возвращены объекты с учетом разделителя. +// Предопределенные элементы исключаются из результата поиска. +// +// Параметры: +// ОтборМетаданных - СписокЗначений Из Строка - Список из полных имен метаданных, в которых будет +// выполнен поиск помеченных на удаление. +// Например, "Справочник._ДемоНоменклатура". +// - Неопределено - отбор по объектам метаданных накладываться не будет. +// +// ИскатьТехнологическиеОбъекты - Булево - если Истина, то поиск будет осуществляться в объектах метаданных, +// добавленных в исключения поиска ссылок. +// см. ОбщегоНазначения.ИсключенияПоискаСсылок. +// Например, в справочнике КлючиДоступа. +// +// +// Возвращаемое значение: +// Массив из ЛюбаяСсылка +// +Функция ПомеченныеНаУдаление(Знач ОтборМетаданных = Неопределено, ИскатьТехнологическиеОбъекты = Ложь) Экспорт + ИсключенияПоискаУдаляемых = Новый Массив; + Результат = Новый Массив; + + ЭтоМодельСервиса = ОбщегоНазначения.РазделениеВключено(); + ВОбластиДанных = ?(ЭтоМодельСервиса, ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(), Ложь); + ОтборМетаданных = ?(ОтборМетаданных <> Неопределено И ОтборМетаданных.Количество() > 0, + ОтборМетаданных.ВыгрузитьЗначения(), Неопределено); + + Если НЕ ИскатьТехнологическиеОбъекты Тогда + ИсключенияПоискаСсылок = ОбщегоНазначения.ИсключенияПоискаСсылок(); + Для Каждого ИсключенияПоиска Из ИсключенияПоискаСсылок Цикл + Если ИсключенияПоиска.Значение = "*" Тогда + ИсключенияПоискаУдаляемых.Добавить(ИсключенияПоиска.Ключ); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КешИнформацииОТипе = Новый Соответствие; + Для Каждого Элемент Из НайтиПомеченныеНаУдаление( , ОтборМетаданных, ИсключенияПоискаУдаляемых) Цикл + Если СоответствуетОтборуМетаданных(ОтборМетаданных, Элемент) + И ИсключенияПоискаУдаляемых.Найти(Элемент.Метаданные()) = Неопределено Тогда + + Информация = УдалениеПомеченныхОбъектовСлужебный.ИнформацияОТипе( + ТипЗнч(Элемент), КешИнформацииОТипе); + ЭтоПредопределенный = Информация.ЕстьПредопределенные + И Информация.Предопределенные.Найти(Элемент) <> Неопределено; + ЭтоНеразделенныйОбъектВОбластиДанных = ВОбластиДанных И Не Информация.Разделенный; + + ОбъектПодлежитУдалению = НЕ ЭтоПредопределенный + И НЕ ЭтоНеразделенныйОбъектВОбластиДанных + И (НЕ Информация.Технический + ИЛИ ИскатьТехнологическиеОбъекты); + + Если ОбъектПодлежитУдалению Тогда + Результат.Добавить(Элемент); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +#Область ПрограммныйИнтерфейсФорм + +// Устанавливает видимость помеченных на удаление. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма с динамическим списком +// НастройкиОтображенияПомеченныхОбъектов - ТаблицаФормы - элемент формы динамического списка. +// - см. НастройкиОтображенияПомеченныхОбъектов +// +// Пример: +// // Для настройки одного списка +// УдалениеПомеченныхОбъектов.ПриСозданииНаСервере(ЭтотОбъект, Элементы.Список); +// +// // Для настройки нескольких списков +// НастройкиОтображенияПомеченных = УдалениеПомеченныхОбъектов.НастройкиОтображенияПомеченныхОбъектов(); +// Настройка = НастройкиОтображения.Добавить(); +// Настройка.ИмяЭлементаФормы = Элементы.Список1.Имя; +// Настройка = НастройкиОтображения.Добавить(); +// Настройка.ИмяЭлементаФормы = Элементы.Список2.Имя; +// +// // Установка основной таблицы необходима для перехода к спискам помеченных объектов +// // с предустановленным отбором +// ОсновныеТаблицыСписка = Новый СписокЗначений(); +// ОсновныеТаблицыСписка.Добавить("Справочник._ДемоНоменклатура"); +// Настройка.ТипыМетаданных = ОсновныеТаблицыСписка; +// УдалениеПомеченныхОбъектов.ПриСозданииНаСервере(ЭтотОбъект, НастройкиОтображенияПомеченных); +// +Процедура ПриСозданииНаСервере(Форма, Знач НастройкиОтображенияПомеченныхОбъектов) Экспорт + Если ТипЗнч(НастройкиОтображенияПомеченныхОбъектов) <> Тип("ТаблицаЗначений") Тогда + НастройкиОтображенияПомеченныхОбъектов = НастройкаОтображенияПомеченныхОбъектовСписка(Форма, + НастройкиОтображенияПомеченныхОбъектов); + Иначе + ЗаполнитьИменаСпискаПоЭлементамФормы(Форма, НастройкиОтображенияПомеченныхОбъектов); + КонецЕсли; + + СоздатьРеквизитХраненияНастроек(Форма); + Для Каждого Настройка Из НастройкиОтображенияПомеченныхОбъектов Цикл + ЗначениеОтбора = УдалениеПомеченныхОбъектовСлужебный.ЗагрузитьНастройкуОтображенияПомеченныхНаУдаления( + Форма.ИмяФормы, Настройка.ИмяСписка); + УстановитьНастройкиСписка(Форма, Настройка, ЗначениеОтбора); + КонецЦикла; + +КонецПроцедуры + +// Формирует настройки отображения помеченных на удаления объектов. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ИмяЭлементаФормы - Строка - имя таблицы формы, связанного с динамическим списком. +// * ТипыМетаданных - СписокЗначений из Строка - типы объектов, отображаемых в динамическом списке. +// * ИмяСписка - Строка - необязательный. Имя динамического списка на форме. +// +Функция НастройкиОтображенияПомеченныхОбъектов() Экспорт + + Настройки = Новый ТаблицаЗначений; + Настройки.Колонки.Добавить("ИмяСписка", Новый ОписаниеТипов("Строка")); + Настройки.Колонки.Добавить("ТипыМетаданных", Новый ОписаниеТипов("СписокЗначений")); + Настройки.Колонки.Добавить("ИмяЭлементаФормы", Новый ОписаниеТипов("Строка")); + Возврат Настройки; + +КонецФункции + +// Возвращает информацию о настройках удаления помеченных по расписанию. +// Пример использования см. в документации. +// +// Возвращаемое значение: +// Структура: +// * Расписание - см. РегламентныеЗаданияСервер.РасписаниеРегламентногоЗадания +// * Использование - Булево - признак использования регламентного задания. +// +Функция РежимУдалятьПоРасписанию() Экспорт + Возврат УдалениеПомеченныхОбъектовСлужебныйВызовСервера.РежимУдалятьПоРасписанию(); +КонецФункции + +// Устанавливает пометку команды Показать помеченные в соответствии с сохраненными настройками пользователя. +// Используется для установки начального значения пометки кнопки формы. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ТаблицаФормы - ТаблицаФормы - таблица формы, связанная с динамическим списком +// КнопкаФормы - КнопкаФормы - кнопка, связанная с командой Показать помеченные +// +Процедура УстановитьПометкуКомандыПоказатьПомеченные(Форма, ТаблицаФормы, КнопкаФормы) Экспорт + ЗначениеОтбора = УдалениеПомеченныхОбъектовСлужебный.ЗагрузитьНастройкуОтображенияПомеченныхНаУдаления( + Форма.ИмяФормы, ТаблицаФормы.Имя); + Форма.Элементы.ПоказатьПомеченныеНаУдаление.Пометка = Не ЗначениеОтбора; +КонецПроцедуры + +#КонецОбласти + +// Возвращает перечень объектов, которые удаляются в текущий момент и на которые есть ссылки в объекте. +// +// Параметры: +// Источник - СправочникОбъект +// - ДокументОбъект - объект, в котором будет выполнен поиск удаляемых объектов +// +// Возвращаемое значение: +// Массив из ЛюбаяСсылка - перечень удаляемых объектов, которые есть в источнике. +// +Функция СсылкиНаУдаляемыеОбъекты(Источник) Экспорт + СсылкиНаУдаляемыеОбъекты = Новый Соответствие; + ЗначенияСсылочныхТипов = Новый Массив; + МетаданныеИсточника = Источник.Метаданные(); + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Источник, "Ссылка") Тогда + ЗначенияСсылочныхТипов = СсылкаНаУдаляемыеОбъектыВИсточнике(Источник, МетаданныеИсточника); + ИначеЕсли ОбщегоНазначения.ЭтоКонстанта(МетаданныеИсточника) Тогда + ЗначениеКонстанты = Источник.Значение; + Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ЗначениеКонстанты)) Тогда + ЗначенияСсылочныхТипов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЗначениеКонстанты); + КонецЕсли; + Иначе + ЗначенияСсылочныхТипов = СсылкиНаУдаляемыеОбъектыВРегистрах(Источник, МетаданныеИсточника); + КонецЕсли; + + Запрос = Новый Запрос("ВЫБРАТЬ + | УдаляемыеОбъекты.Объект КАК Ссылка, + | ПРЕДСТАВЛЕНИЕ(УдаляемыеОбъекты.Объект) КАК Представление + |ИЗ + | РегистрСведений.УдаляемыеОбъекты КАК УдаляемыеОбъекты + |ГДЕ + | УдаляемыеОбъекты.Объект В (&УдаляемыеОбъекты)"); + Запрос.УстановитьПараметр("УдаляемыеОбъекты", ЗначенияСсылочныхТипов); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Пока (РезультатЗапроса.Следующий()) Цикл + СсылкиНаУдаляемыеОбъекты.Вставить(РезультатЗапроса.Ссылка, РезультатЗапроса.Представление); + КонецЦикла; + + Возврат СсылкиНаУдаляемыеОбъекты; +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Состояние флажка для формы настроек удаления помеченных объектов. +// Следует использовать УдалениеПомеченныхОбъектов.РежимУдалятьПоРасписанию. // // Возвращаемое значение: // Булево - значение. @@ -22,17 +306,358 @@ // КонецЕсли; // Функция ЗначениеФлажкаУдалятьПоРасписанию() Экспорт - + Отбор = Новый Структура; Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.УдалениеПомеченных); Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); - - Для Каждого Задание Из Задания Цикл + + Для Каждого Задание Из Задания Цикл Возврат Задание.Использование; КонецЦикла; - + Возврат Ложь; - + КонецФункции #КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Формирует настройки скрытия помеченных объектов для динамического списка. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ЭлементСписок - ТаблицаФормы +// ТипыМетаданных - Массив из Строка +// - Неопределено - по умолчанию основная таблица динамического списка +// +// Возвращаемое значение: +// см. НастройкиОтображенияПомеченныхОбъектов +// +Функция НастройкаОтображенияПомеченныхОбъектовСписка(Форма, ЭлементСписок, ТипыМетаданных = Неопределено) + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("НастройкаОтображенияПомеченныхОбъектовСписка", "ЭлементСписок", + ЭлементСписок, Новый ОписаниеТипов("ТаблицаФормы")); + Список = Форма[ЭлементСписок.ПутьКДанным]; // ДинамическийСписок + + Настройки = НастройкиОтображенияПомеченныхОбъектов(); + Настройка = Настройки.Добавить(); + Настройка.ИмяСписка = ЭлементСписок.ПутьКДанным; + Настройка.ИмяЭлементаФормы = ЭлементСписок.Имя; + Если ТипыМетаданных = Неопределено И ЗначениеЗаполнено(Список.ОсновнаяТаблица) Тогда + + СписокТипов = Новый СписокЗначений; + СписокТипов.Добавить(Список.ОсновнаяТаблица); + Настройка.ТипыМетаданных = СписокТипов; + Иначе + Настройка.ТипыМетаданных = ТипыМетаданных; + КонецЕсли; + + Возврат Настройки; +КонецФункции + +// Выводит на форму элементы управления и устраняет конфликты фиксированных и пользовательских настроек списка. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// Настройка - см. НастройкиОтображенияПомеченныхОбъектов +// +Процедура УстановитьНастройкиСписка(Форма, Настройка, ЗначениеОтбора) + + УдалитьПользовательскуюНастройкуОтбораПомеченныхНаУдаление(Форма, Настройка.ИмяСписка); + УстановитьОграничениеНаОтборПоПометкеУдаления(Форма[Настройка.ИмяСписка]); + УдалениеПомеченныхОбъектовСлужебныйКлиентСервер.УстановитьОтборПоПометкеУдаления(Форма[Настройка.ИмяСписка], + ЗначениеОтбора); + СохранитьНастройкуВДанныхФормы(Форма, Настройка, ЗначениеОтбора); + +КонецПроцедуры + +Процедура СохранитьНастройкуВДанныхФормы(Форма, Настройка, ЗначениеОтбора) + ОписаниеНастройки = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Настройка); + ОписаниеНастройки.Вставить("ЗначениеОтбора", ЗначениеОтбора); + ОписаниеНастройки.Вставить("ЗначениеПометки", Не ЗначениеОтбора); + Форма.ПараметрыУдаленияПомеченных.Вставить(Настройка.ИмяЭлементаФормы, ОписаниеНастройки); +КонецПроцедуры + +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// +Процедура СоздатьРеквизитХраненияНастроек(Форма) + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПараметрыУдаленияПомеченных", Новый ОписаниеТипов)); + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + Форма.ПараметрыУдаленияПомеченных = Новый Структура; +КонецПроцедуры + +// Удаляет отбор по полю ПометкаУдаления из сохраненных пользовательских настроек +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ИмяСписка - Строка +// +Процедура УдалитьПользовательскуюНастройкуОтбораПомеченныхНаУдаление(Форма, ИмяСписка) + + КлючНастроек = Форма.ИмяФормы + "." + ИмяСписка + "/ТекущиеПользовательскиеНастройки"; + Настройки = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить(КлючНастроек, ""); // ПользовательскиеНастройкиКомпоновкиДанных - + ДинамическийСписок = Форма[ИмяСписка]; // ДинамическийСписок - + ПолеПометкиУдаления = ДинамическийСписок.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.Элементы.Найти( + "ПометкаУдаления"); + + Если Настройки <> Неопределено И ПолеПометкиУдаления <> Неопределено Тогда + УдалитьЭлементОтбораПользовательскихНастроек(Настройки, ПолеПометкиУдаления); + ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить(КлючНастроек, "", Настройки); + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьЭлементОтбораПользовательскихНастроек(Знач Настройки, Знач ПолеПометкиУдаления) + + Для Каждого Настройка Из Настройки.Элементы Цикл + + Если ТипЗнч(Настройка) <> Тип("ОтборКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + Для Сч = -(Настройка.Элементы.Количество() - 1) По 0 Цикл + ЭлементНастройки = Настройка.Элементы[-Сч]; // ОтборКомпоновкиДанных + Если ЭлементНастройки.ЛевоеЗначение = ПолеПометкиУдаления.Поле Тогда + Настройка.Элементы.Удалить(ЭлементНастройки); + КонецЕсли; + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// ДинамическийСписок - ДинамическийСписок +// +Процедура УстановитьОграничениеНаОтборПоПометкеУдаления(ДинамическийСписок) + + ПоляСОграниченнымОтбором = ДинамическийСписок.ПолучитьОграниченияИспользованияВОтборе(); + ПолеПометкиУдаления = ДинамическийСписок.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.Элементы.Найти( + "ПометкаУдаления"); + Если ПолеПометкиУдаления <> Неопределено И ПоляСОграниченнымОтбором.Найти(ПолеПометкиУдаления) = Неопределено Тогда + ПоляСОграниченнымОтбором.Добавить(Строка(ПолеПометкиУдаления.Поле)); + ДинамическийСписок.УстановитьОграниченияИспользованияВОтборе(ПоляСОграниченнымОтбором); + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// НастройкиОтображенияПомеченныхОбъектов - см. НастройкаОтображенияПомеченныхОбъектовСписка +// +Процедура ЗаполнитьИменаСпискаПоЭлементамФормы(Форма, НастройкиОтображенияПомеченныхОбъектов) + Для Каждого Настройка Из НастройкиОтображенияПомеченныхОбъектов Цикл + ТаблицаФормы = Форма.Элементы[Настройка.ИмяЭлементаФормы];// ТаблицаФормы - + Настройка.ИмяСписка = ТаблицаФормы.ПутьКДанным; + КонецЦикла; +КонецПроцедуры + +Функция СсылкиНаУдаляемыеОбъектыВРеквизитах(Источник, Реквизиты) + ЗначенияСсылочныхТипов = Новый Массив; + + Для Каждого Реквизит Из Реквизиты Цикл + + Если Реквизит.Имя = "Ссылка" Тогда + Продолжить; + КонецЕсли; + + Значение = Источник[Реквизит.Имя]; + ТипЗначения = ТипЗнч(Значение); + Если ЗначениеЗаполнено(Значение) И ОбщегоНазначения.ЭтоСсылка(ТипЗначения) Тогда + ЗначенияСсылочныхТипов.Добавить(Значение); + ИначеЕсли СтрНайти(Реквизит.Имя,"Субконто") > 0 Тогда + СсылкиНаУдаляемыеОбъектыВСубконто(Значение, ЗначенияСсылочныхТипов); + КонецЕсли; + + КонецЦикла; + + Возврат ЗначенияСсылочныхТипов; +КонецФункции + +Процедура СсылкиНаУдаляемыеОбъектыВСубконто(Знач Значение, ЗначенияСсылочныхТипов) + Перем ЗначениеСубконто; + Для Каждого ЗначениеСубконто Из Значение Цикл + + Если ЗначениеЗаполнено(ЗначениеСубконто.Значение) + И ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ЗначениеСубконто.Значение)) Тогда + + ЗначенияСсылочныхТипов.Добавить(ЗначениеСубконто.Значение); + КонецЕсли; + + КонецЦикла; +КонецПроцедуры + +Функция СсылкиНаУдаляемыеОбъектовВТабличныхЧастях(Источник, ТабличныеЧасти, ИмяКоллекцииРеквизитов = "Реквизиты") + ЗначенияСсылочныхТипов = Новый Массив; + + Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + Для Каждого СтрокаТЧ Из Источник[ТабличнаяЧасть.Имя] Цикл + ОбщегоНазначенияКлиентСервер.ДополнитьМассив( + ЗначенияСсылочныхТипов, + СсылкиНаУдаляемыеОбъектыВРеквизитах( + СтрокаТЧ, ТабличнаяЧасть[ИмяКоллекцииРеквизитов])); + КонецЦикла; + КонецЦикла; + + Возврат ЗначенияСсылочныхТипов; +КонецФункции + +Функция СсылкиНаУдаляемыеОбъектыВНабореЗаписей(НаборЗаписей, Знач Реквизиты) + ЗначенияСсылочныхТипов = Новый Массив; + + Для Каждого Запись Из НаборЗаписей Цикл + ОбщегоНазначенияКлиентСервер.ДополнитьМассив( + ЗначенияСсылочныхТипов, + СсылкиНаУдаляемыеОбъектыВРеквизитах(Запись, Реквизиты)); + КонецЦикла; + + Возврат ЗначенияСсылочныхТипов; +КонецФункции + +// Параметры: +// Реквизиты - КоллекцияОбъектовМетаданных +// +// Возвращаемое значение: +// Массив +// +Функция СформироватьРеквизитыРегистровБухгалтерииСКорреспонденцией(Знач Реквизиты) + РеквизитыРегистраСКорреспонденцией = Новый Массив; + + Для Каждого Реквизит Из Реквизиты Цикл + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Реквизит, "Балансовый") + И (Реквизит.Балансовый) Тогда + РеквизитыРегистраСКорреспонденцией.Добавить(Новый Структура("Имя", Реквизит.Имя)); + Иначе + РеквизитыРегистраСКорреспонденцией.Добавить(Новый Структура("Имя", Реквизит.Имя + "Дт")); + РеквизитыРегистраСКорреспонденцией.Добавить(Новый Структура("Имя", Реквизит.Имя + "Кт")); + КонецЕсли; + КонецЦикла; + + Возврат РеквизитыРегистраСКорреспонденцией; +КонецФункции + +#Область СсылкиНаУдаляемыеОбъекты + +Функция СсылкаНаУдаляемыеОбъектыВИсточнике(Источник, МетаданныеИсточника) + ЗначенияСсылочныхТипов = Новый Массив; + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(МетаданныеИсточника, "СтандартныеРеквизиты") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗначенияСсылочныхТипов, СсылкиНаУдаляемыеОбъектыВРеквизитах( + Источник, МетаданныеИсточника.СтандартныеРеквизиты)); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(МетаданныеИсточника, "РеквизитыАдресации") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗначенияСсылочныхТипов, СсылкиНаУдаляемыеОбъектыВРеквизитах( + Источник, МетаданныеИсточника.РеквизитыАдресации)); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(МетаданныеИсточника, "Реквизиты") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив( + ЗначенияСсылочныхТипов, + СсылкиНаУдаляемыеОбъектыВРеквизитах(Источник, МетаданныеИсточника.Реквизиты)); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(МетаданныеИсточника, "ТабличныеЧасти") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗначенияСсылочныхТипов, СсылкиНаУдаляемыеОбъектовВТабличныхЧастях( + Источник, МетаданныеИсточника.ТабличныеЧасти)); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(МетаданныеИсточника, + "СтандартныеТабличныеЧасти") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗначенияСсылочныхТипов, СсылкиНаУдаляемыеОбъектовВТабличныхЧастях( + Источник, МетаданныеИсточника.СтандартныеТабличныеЧасти, "СтандартныеРеквизиты")); + КонецЕсли; + + Возврат ЗначенияСсылочныхТипов; +КонецФункции + +Функция СсылкиНаУдаляемыеОбъектыВРегистрах(Источник, МетаданныеИсточника) + ЗначенияСсылочныхТипов = Новый Массив; + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(МетаданныеИсточника, "Измерения") Тогда + Если ОбщегоНазначения.ЭтоРегистрБухгалтерии(МетаданныеИсточника) И МетаданныеИсточника.Корреспонденция Тогда + Реквизиты = СформироватьРеквизитыРегистровБухгалтерииСКорреспонденцией( МетаданныеИсточника.Измерения); + Иначе + Реквизиты = МетаданныеИсточника.Измерения; + КонецЕсли; + ОбщегоНазначенияКлиентСервер.ДополнитьМассив( + ЗначенияСсылочныхТипов, + СсылкиНаУдаляемыеОбъектыВНабореЗаписей(Источник, Реквизиты)); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(МетаданныеИсточника, "Ресурсы") Тогда + Если ОбщегоНазначения.ЭтоРегистрБухгалтерии(МетаданныеИсточника) И МетаданныеИсточника.Корреспонденция Тогда + Реквизиты = СформироватьРеквизитыРегистровБухгалтерииСКорреспонденцией( МетаданныеИсточника.Ресурсы); + Иначе + Реквизиты = МетаданныеИсточника.Ресурсы; + КонецЕсли; + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗначенияСсылочныхТипов, СсылкиНаУдаляемыеОбъектыВНабореЗаписей( + Источник, Реквизиты)); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(МетаданныеИсточника,"СтандартныеРеквизиты") Тогда + Если ОбщегоНазначения.ЭтоРегистрБухгалтерии(МетаданныеИсточника) Тогда + Реквизиты = СформироватьСтандартныеРеквизитыРегистраБухгалтерии(МетаданныеИсточника); + Иначе + Реквизиты = МетаданныеИсточника.СтандартныеРеквизиты; + КонецЕсли; + ОбщегоНазначенияКлиентСервер.ДополнитьМассив( + ЗначенияСсылочныхТипов, + СсылкиНаУдаляемыеОбъектыВНабореЗаписей(Источник, Реквизиты)); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(МетаданныеИсточника, "Реквизиты") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив( + ЗначенияСсылочныхТипов, + СсылкиНаУдаляемыеОбъектыВНабореЗаписей(Источник, МетаданныеИсточника.Реквизиты)); + КонецЕсли; + + Возврат ЗначенияСсылочныхТипов; +КонецФункции + +// Параметры: +// МетаданныеИсточника - ОбъектМетаданныхРегистрБухгалтерии +// +// Возвращаемое значение: +// Массив +// +Функция СформироватьСтандартныеРеквизитыРегистраБухгалтерии(МетаданныеИсточника) + СтандартныеРеквизиты = Новый Массив; + + СтандартныеРеквизиты.Добавить(Новый Структура("Имя", "Регистратор")); + Если МетаданныеИсточника.ПланСчетов.МаксКоличествоСубконто Тогда + СтандартныеРеквизиты.Добавить(Новый Структура("Имя","СчетДт")); + СтандартныеРеквизиты.Добавить(Новый Структура("Имя","СчетКт")); + СтандартныеРеквизиты.Добавить(Новый Структура("Имя","СубконтоДт")); + СтандартныеРеквизиты.Добавить(Новый Структура("Имя","СубконтоКт")); + Иначе + СтандартныеРеквизиты.Добавить(Новый Структура("Имя","Счет")); + СтандартныеРеквизиты.Добавить(Новый Структура("Имя","Субконто")); + КонецЕсли; + + Возврат СтандартныеРеквизиты; +КонецФункции + +Функция СоответствуетОтборуМетаданных( ОтборМетаданных, Элемент) + Возврат (НЕ ЗначениеЗаполнено(ОтборМетаданных) + ИЛИ ОтборМетаданных.Найти(Элемент.Метаданные().ПолноеИмя()) <> Неопределено); +КонецФункции + +#КонецОбласти + +Процедура УстановитьМонопольныйРежимПриНеобходимости(ЗначениеМонопольногоРежима, ИдентификаторЗадания) + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + // Управление монопольным режимом осуществляется на форме. + Возврат; + КонецЕсли; + + Если МонопольныйРежим() <> ЗначениеМонопольногоРежима Тогда + УстановитьМонопольныйРежим(ЗначениеМонопольногоРежима); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовКлиент/Module.bsl index 4c45ee5ae..2e735967a 100644 --- a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовКлиент/Module.bsl @@ -8,11 +8,161 @@ #Область ПрограммныйИнтерфейс +// Начинает интерактивное удаление помеченных объектов. +// +// Параметры: +// УдаляемыеОбъекты - Массив из ЛюбаяСсылка - перечень удаляемых объектов. +// ПараметрыУдаления - см. ПараметрыИнтерактивногоУдаления +// +// Владелец - ФормаКлиентскогоПриложения +// - Неопределено - форма, из которой начата операция удаления. +// Если не указан, то в обработку оповещения о закрытии +// не будет передана подробная информация об итогах удаления. +// +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - если указано, то при окончании удаления или +// при закрытии формы в обработку оповещения будет передан результат +// с полями: +// * Успешно - Булево - Истина, если все объекты удалены успешно. +// * УдаленныеКоличество - Число - количество удаленных объектов. +// * НеУдаленныеКоличество - Число - количество неудаленных объектов. +// * АдресРезультата - Строка - адрес временного хранилища. +// - Неопределено - значение по умолчанию. +// +Процедура НачатьУдалениеПомеченных(УдаляемыеОбъекты, ПараметрыУдаления = Неопределено, Владелец = Неопределено, + ОписаниеОповещенияОЗакрытии = Неопределено) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УдаляемыеОбъекты", УдаляемыеОбъекты); + ПараметрыФормы.Вставить("РежимУдаления", "Стандартный"); + Если ПараметрыУдаления <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ПараметрыФормы, ПараметрыУдаления); + КонецЕсли; + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НачатьУдалениеПомеченныхЗавершение" + , ЭтотОбъект, Новый Структура("ОповещениеОЗакрытии", ОписаниеОповещенияОЗакрытии)); + + ОткрытьФорму("Обработка.УдалениеПомеченныхОбъектов.Форма", ПараметрыФормы, Владелец, , , , ОповещениеОЗакрытии, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +// Настройки интерактивного удаления. +// +// Возвращаемое значение: +// Структура: +// * Режим - Строка - способ удаления, может принимать значения: +// "Стандартный" - удаление объектов с контролем ссылочной целостности и сохранением возможности +// многопользовательской работы. +// "Монопольный" - удаление объектов с контролем ссылочной целостности с установкой монопольного режима. +// "Упрощенный" - удаление объектов, при котором контроль ссылочной целостности выполняется только в непомеченных +// на удаление объектах. В помеченных на удаление объектах ссылки на удаляемые объекты +// будут очищены. +// +Функция ПараметрыИнтерактивногоУдаления() Экспорт + Параметры = Новый Структура; + Параметры.Вставить("Режим", "Стандартный"); + Возврат Параметры; +КонецФункции + +#Область ПрограммныйИнтерфейсФорм + +// Открывает рабочее место Удаление помеченных. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ТаблицаФормы - ТаблицаФормы +// - ДанныеФормыСтруктура +// - Неопределено - таблица формы, связанная с динамическим списком +// +Процедура ПерейтиКПомеченнымНаУдаление(Форма, ТаблицаФормы = Неопределено) Экспорт + + Если ТаблицаФормы <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПерейтиКПомеченнымНаУдаление", "ТаблицаФормы", ТаблицаФормы, Новый ОписаниеТипов("ТаблицаФормы")); + + ТипыМетаданных = Форма.ПараметрыУдаленияПомеченных[ТаблицаФормы.Имя].ТипыМетаданных; + ПараметрыОткрытия = Новый Структура(); + ПараметрыОткрытия.Вставить("ОтборМетаданных", ТипыМетаданных); + КонецЕсли; + + ОткрытьФорму("Обработка.УдалениеПомеченныхОбъектов.Форма.ОсновнаяФорма", ПараметрыОткрытия, Форма); +КонецПроцедуры + +// Изменяет видимость помеченных на удаление и сохраняет настройку пользователя. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ТаблицаФормы - ТаблицаФормы - таблица формы, связанная с динамическим списком. +// КнопкаФормы - КнопкаФормы - кнопка формы, связанная с командой Показать помеченные на удаление. +// +Процедура ПоказатьПомеченныеНаУдаление(Форма, ТаблицаФормы, КнопкаФормы) Экспорт + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПоказатьПомеченныеНаУдаление", "ТаблицаФормы", ТаблицаФормы, Новый ОписаниеТипов("ТаблицаФормы")); + НовоеЗначениеОтбора = ИзменитьОтборПомеченныхНаУдаление(Форма, ТаблицаФормы); + КнопкаФормы.Пометка = НЕ НовоеЗначениеОтбора; +КонецПроцедуры + +// Открывает форму для изменения расписания регламентного задания. +// Если расписание задано, то будет включено регламентное задание с установленным расписанием. +// +// Не поддерживается на мобильном платформе. +// +// Параметры: +// ОповещениеОбИзменении - ОписаниеОповещения - обработчик изменения расписания регламентного задания. +// +Процедура НачатьИзменениеРасписанияРегламентногоЗадания(ОповещениеОбИзменении = Неопределено) Экспорт + СведенияОРегламентномЗаданииУдаленияПомеченных = УдалениеПомеченныхОбъектовСлужебныйВызовСервера.РежимУдалятьПоРасписанию(); + Обработчик = Новый ОписаниеОповещения("РегламентныеЗаданияПослеИзмененияРасписания", ЭтотОбъект, + Новый Структура("ОповещениеОбИзменении, СтароеРасписание", ОповещениеОбИзменении, СведенияОРегламентномЗаданииУдаленияПомеченных.Расписание)); + + Если СведенияОРегламентномЗаданииУдаленияПомеченных.РазделениеВключено Тогда + Результат = Новый Структура("Использование,Расписание"); + ЗаполнитьЗначенияСвойств(Результат, СведенияОРегламентномЗаданииУдаленияПомеченных); + ВыполнитьОбработкуОповещения(Обработчик, СведенияОРегламентномЗаданииУдаленияПомеченных.Расписание); + Иначе + ОписаниеРегламентногоЗадания = СведенияОРегламентномЗаданииУдаленияПомеченных.Расписание; + Расписание = Новый РасписаниеРегламентногоЗадания; + ЗаполнитьЗначенияСвойств(Расписание, ОписаниеРегламентногоЗадания); + // АПК: 574 - выкл Процедура не поддерживается на мобильном клиенте. + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); + // АПК: 574 - вкл + Диалог.Показать(Обработчик); + КонецЕсли; +КонецПроцедуры + +// Обработчик события ПриИзменении для флажка, выполняющего переключение режима автоматического удаления объектов. +// +// Параметры: +// АвтоматическиУдалятьПомеченныеОбъекты - Булево - новое значение флажка, которое требуется обработать. +// ОповещениеОбИзменении - ОписаниеОповещения - если ЗначениеФлажкаАвтоматическиУдалятьПомеченныеОбъекты = Истина, то процедура +// будет вызвана после выбора расписания регламентного задания. +// Если ЗначениеФлажкаАвтоматическиУдалятьПомеченныеОбъекты = Ложь, то процедура будет +// вызвана сразу же. +// +// Пример: +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда +// МодульУдалениеПомеченныхОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УдалениеПомеченныхОбъектовКлиент"); +// МодульУдалениеПомеченныхОбъектовКлиент.ПриИзмененииФлажкаУдалятьПоРасписанию(АвтоматическиУдалятьПомеченныеОбъекты); +// КонецЕсли; +// +Процедура ПриИзмененииФлажкаУдалятьПоРасписанию(АвтоматическиУдалятьПомеченныеОбъекты, ОповещениеОбИзменении = Неопределено) Экспорт + ТекущиеПараметрыРегламентногоЗадания = УдалениеПомеченныхОбъектовСлужебныйВызовСервера.РежимУдалятьПоРасписанию(); + Изменения = Новый Структура("Расписание", ТекущиеПараметрыРегламентногоЗадания.Расписание); + Изменения.Вставить("Использование", АвтоматическиУдалятьПомеченныеОбъекты); + УдалениеПомеченныхОбъектовСлужебныйВызовСервера.УстановитьРежимУдалятьПоРасписанию(Изменения); + + Если ОповещениеОбИзменении <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОповещениеОбИзменении, Изменения); + КонецЕсли; + + // Сохранение обратной совместимости с 3.1.2 + Оповестить("ИзменилсяРежимАвтоматическиУдалятьПомеченныеОбъекты"); +КонецПроцедуры + +#КонецОбласти + // Обработчик события ОбработкаОповещения для формы, на которой требуется отобразить флажок удаления по расписанию. // // Параметры: // ИмяСобытия - Строка - имя события, которое было получено обработчиком события на форме. -// АвтоматическиУдалятьПомеченныеОбъекты - Число - Реквизит, в которое будет помещено значение. +// АвтоматическиУдалятьПомеченныеОбъекты - Булево - реквизит, в которое будет помещено значение. // // Пример: // Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда @@ -22,42 +172,101 @@ // АвтоматическиУдалятьПомеченныеОбъекты); // КонецЕсли; // -Процедура ОбработкаОповещенияИзмененияФлажкаУдалятьПоРасписанию(Знач ИмяСобытия, АвтоматическиУдалятьПомеченныеОбъекты) Экспорт - +Процедура ОбработкаОповещенияИзмененияФлажкаУдалятьПоРасписанию(Знач ИмяСобытия, + АвтоматическиУдалятьПомеченныеОбъекты) Экспорт + Если ИмяСобытия = "ИзменилсяРежимАвтоматическиУдалятьПомеченныеОбъекты" Тогда - АвтоматическиУдалятьПомеченныеОбъекты = - УдалениеПомеченныхОбъектовСлужебныйВызовСервера.ЗначениеФлажкаУдалятьПоРасписанию(); + АвтоматическиУдалятьПомеченныеОбъекты = УдалениеПомеченныхОбъектовСлужебныйВызовСервера.ЗначениеФлажкаУдалятьПоРасписанию(); КонецЕсли; - + КонецПроцедуры -// Обработчик события ПриИзменении для флажка, выполняющего переключение режима автоматического удаления объектов. -// Флажок должен быть связан с реквизитом типа Булево. -// -// Параметры: -// ЗначениеФлажкаАвтоматическиУдалятьПомеченныеОбъекты - Булево - новое значение флажка, которое требуется обработать. -// -// Пример: -// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда -// МодульУдалениеПомеченныхОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УдалениеПомеченныхОбъектовКлиент"); -// МодульУдалениеПомеченныхОбъектовКлиент.ПриИзмененииФлажкаУдалятьПоРасписанию(АвтоматическиУдалятьПомеченныеОбъекты); -// КонецЕсли; +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Обработчик подключенной команды. // -Процедура ПриИзмененииФлажкаУдалятьПоРасписанию(ЗначениеФлажкаАвтоматическиУдалятьПомеченныеОбъекты) Экспорт - - УдалениеПомеченныхОбъектовСлужебныйВызовСервера.УстановитьРежимУдалятьПоРасписанию( - ЗначениеФлажкаАвтоматическиУдалятьПомеченныеОбъекты); +// Параметры: +// МассивСсылок - Массив Из ЛюбаяСсылка - ссылки выбранных объектов, для которых выполняется команда. +// ПараметрыКоманды - см. ПодключаемыеКомандыКлиент.ПараметрыВыполненияКоманды +// +Процедура ВыполнитьПодключаемуюКомандуПоказатьПомеченныеНаУдаление(Знач МассивСсылок, + ПараметрыКоманды) Экспорт + НовоеЗначениеОтбора = ИзменитьОтборПомеченныхНаУдаление(ПараметрыКоманды.Форма, ПараметрыКоманды.Источник); + УдалениеПомеченныхОбъектовСлужебныйВызовСервера.СохранитьНастройкуОтображенияПомеченныхНаУдаления(ПараметрыКоманды.Форма.ИмяФормы, ПараметрыКоманды.Источник.Имя, НовоеЗначениеОтбора); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); + МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ПараметрыКоманды.Форма, ПараметрыКоманды.Источник); + КонецЕсли; +КонецПроцедуры + +// Обработчик подключенной команды. +// +// Параметры: +// МассивСсылок - Массив Из ЛюбаяСсылка - ссылки выбранных объектов, для которых выполняется команда. +// ПараметрыВыполнения - см. ПодключаемыеКомандыКлиент.ПараметрыВыполненияКоманды +// +Процедура ВыполнитьПодключаемуюКомандуПерейтиКПомеченным(МассивСсылок, ПараметрыВыполнения) Экспорт + ПерейтиКПомеченнымНаУдаление(ПараметрыВыполнения.Форма, ПараметрыВыполнения.Источник); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура НачатьУдалениеПомеченныхЗавершение(Знач РезультатУдаления, ДополнительныеПараметры) Экспорт + Если РезультатУдаления = Неопределено И НЕ ДополнительныеПараметры.Свойство("РезультатЗакрытия") Тогда + Возврат; + КонецЕсли; + + Если РезультатУдаления = Неопределено Тогда + РезультатУдаления = ДополнительныеПараметры.РезультатЗакрытия; + КонецЕсли; + + Если ДополнительныеПараметры.ОповещениеОЗакрытии <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОЗакрытии, РезультатУдаления); + КонецЕсли; +КонецПроцедуры + +Процедура РегламентныеЗаданияПослеИзмененияРасписания(Расписание, ПараметрыВыполнения) Экспорт + Если Расписание = Неопределено Тогда + Расписание = ПараметрыВыполнения.СтароеРасписание; + УдалениеПомеченныхИспользование = Ложь; + Иначе + УдалениеПомеченныхИспользование = Истина; + Изменения = Новый Структура("Расписание", Расписание); + Изменения.Вставить("Использование", Истина); + УдалениеПомеченныхОбъектовСлужебныйВызовСервера.УстановитьРежимУдалятьПоРасписанию(Изменения); + КонецЕсли; Оповестить("ИзменилсяРежимАвтоматическиУдалятьПомеченныеОбъекты"); + Если ПараметрыВыполнения.Свойство("ОповещениеОбИзменении") И ПараметрыВыполнения.ОповещениеОбИзменении <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ПараметрыВыполнения.ОповещениеОбИзменении, + Новый Структура("Использование, Расписание", УдалениеПомеченныхИспользование, Расписание)); + КонецЕсли; КонецПроцедуры -// Открывает форму удаления помеченных объектов. +// Изменяет видимость помеченных на удаление в списке +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ТаблицаФормы - ТаблицаФормы +// Возвращаемое значение: +// Булево - установленное значение отбора // -Процедура НачатьУдалениеПомеченных() Экспорт +Функция ИзменитьОтборПомеченныхНаУдаление(Форма, ТаблицаФормы) - ОткрытьФорму("Обработка.УдалениеПомеченныхОбъектов.Форма"); + Настройка = Форма.ПараметрыУдаленияПомеченных[ТаблицаФормы.Имя]; + НовоеЗначениеОтбора = НЕ Настройка.ЗначениеОтбора; + УдалениеПомеченныхОбъектовСлужебныйКлиентСервер.УстановитьОтборПоПометкеУдаления(Форма[Настройка.ИмяСписка], НовоеЗначениеОтбора); + Настройка.ЗначениеОтбора = НовоеЗначениеОтбора; + Настройка.ЗначениеПометки = НЕ НовоеЗначениеОтбора; + УдалениеПомеченныхОбъектовСлужебныйВызовСервера.СохранитьНастройкуОтображенияПомеченныхНаУдаления(Форма.ИмяФормы, ТаблицаФормы.Имя, НовоеЗначениеОтбора); + Возврат НовоеЗначениеОтбора; -КонецПроцедуры +КонецФункции + +#КонецОбласти -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовПереопределяемый/Module.bsl index bc0d85f13..943fe303b 100644 --- a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовПереопределяемый/Module.bsl @@ -8,12 +8,32 @@ #Область ПрограммныйИнтерфейс -// Вызывается перед поиском объектов, помеченных на удаление. -// В этом обработчике можно организовать удаление устаревших ключей аналитик и любых других объектов информационной -// базы, ставших более не нужными. +// Определить объекты метаданных, в формах списков которых +// будет выведена команда показать помеченные и перейти к помеченным на удаление. +// см. УдалениеПомеченныхОбъектовКлиент.ПоказатьПомеченныеНаУдаление и УдалениеПомеченныхОбъектовКлиент.ПерейтиКПомеченнымНаУдаление. // // Параметры: -// Параметры - Структура - со свойствами: +// Объекты - Массив из ОбъектМетаданных - объекты метаданных, в формы списка которых будут добавлены команды скрытия помеченных на удаления. +// +// Пример: +// Объекты.Добавить(Метаданные.Справочники._ДемоНоменклатура); +// Объекты.Добавить(Метаданные.Справочники._ДемоПартнеры); +// +Процедура ПриОпределенииОбъектовСКомандойПоказатьПомеченные(Объекты) Экспорт + +КонецПроцедуры + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Вызывается перед поиском объектов, помеченных на удаление. +// В этом обработчике можно организовать удаление устаревших ключей аналитик и любых других объектов информационной +// базы, ставших более не нужными. +// +// Вместо процедуры следует использовать либо событие ПередУдалением удаляемых объектов, либо определить ПодчиненныеОбъекты +// (см. ОбщегоНазначения.ПодчиненныеОбъекты) +// +// Параметры: +// Параметры - Структура: // * Интерактивное - Булево - Истина, если удаление помеченных объектов запущено пользователем; // Ложь, если удаление запущено по расписанию регламентного задания. // @@ -22,3 +42,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl index 9353e55e5..9d7e4b4a8 100644 --- a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl @@ -8,62 +8,1432 @@ #Область СлужебныйПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ДляВызоваИзДругихПодсистем // Параметры: // Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.4.1.1"; Обработчик.НачальноеЗаполнение = Истина; Обработчик.Процедура = "УдалениеПомеченныхОбъектовСлужебный.ВключитьУдалениеПомеченныхОбъектов"; Обработчик.РежимВыполнения = "Оперативно"; - -КонецПроцедуры -// Обработчик обновления на версию 2.4.1.1. -// -Процедура ВключитьУдалениеПомеченныхОбъектов() Экспорт - - Константы.ИспользоватьУдалениеПомеченныхОбъектов.Установить(Истина); - -КонецПроцедуры - -// Параметры: -// ШаблоныЗаданий - см. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов.ШаблоныЗаданий -// -Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт - - ШаблоныЗаданий.Добавить("УдалениеПомеченных"); - КонецПроцедуры // Параметры: // Зависимости - см. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий.Настройки // Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт - + Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.УдалениеПомеченных; Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьУдалениеПомеченныхОбъектов; + +КонецПроцедуры + +// Параметры: +// ШаблоныЗаданий - см. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов.ШаблоныЗаданий +// +Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт + ШаблоныЗаданий.Добавить("УдалениеПомеченных"); + ШаблоныЗаданий.Добавить(Метаданные.РегламентныеЗадания.ОтключениеПроверкиИспользованияУдаляемыхОбъектов.Имя); +КонецПроцедуры + +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. +// +// Параметры: +// ИсключенияПоискаСсылок - Массив +// +Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.УдаляемыеОбъекты); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.НеудаленныеОбъекты); +КонецПроцедуры + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. +// +// Параметры: +// НастройкиФормы - Структура - сведения о форме, в которой выводятся команды. +// Источники - ДеревоЗначений - сведения о поставщиках команд этой формы. +// ПодключенныеОтчетыИОбработки - ТаблицаЗначений - отчеты и обработки, предоставляющие свои команды. +// Команды - ТаблицаЗначений - записать в этот параметр сформированные команды для вывода в подменю. +// +Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт + + ПодключенныеОбъекты = Новый Массив; + УдалениеПомеченныхОбъектовПереопределяемый.ПриОпределенииОбъектовСКомандойПоказатьПомеченные(ПодключенныеОбъекты); + Для Каждого ПодключенныйОбъект Из ПодключенныеОбъекты Цикл + + Источник = Источники.Строки.Найти(ПодключенныйОбъект, "Метаданные"); + Если Источник <> Неопределено Тогда + + Команда = Команды.Добавить(); + Команда.Вид = "ОтображениеПомеченныхНаУдаление"; + Команда.Важность = "СмТакже"; + Команда.Представление = НСтр("ru = 'Показать помеченные на удаление'"); + Команда.РежимЗаписи = "НеЗаписывать"; + Команда.ВидимостьВФормах = "ФормаСписка"; + Команда.МножественныйВыбор = Ложь; + Команда.Обработчик = "УдалениеПомеченныхОбъектовКлиент.ВыполнитьПодключаемуюКомандуПоказатьПомеченныеНаУдаление"; + Команда.ТолькоВоВсехДействиях = Истина; + Команда.ЗначениеПометки = "Форма.ПараметрыУдаленияПомеченных[""%Источник%""].ЗначениеПометки"; + Команда.Порядок = 20; + + Если Пользователи.ЭтоПолноправныйПользователь() Тогда + Команда = Команды.Добавить(); + Команда.Вид = "ПерейтиКПомеченнымНаУдаление"; + Команда.Важность = "СмТакже"; + Команда.Представление = НСтр("ru = 'Перейти к помеченным на удаление'"); + Команда.РежимЗаписи = "НеЗаписывать"; + Команда.ВидимостьВФормах = "ФормаСписка"; + Команда.МножественныйВыбор = Ложь; + Команда.Обработчик = "УдалениеПомеченныхОбъектовКлиент.ВыполнитьПодключаемуюКомандуПерейтиКПомеченным"; + Команда.ТолькоВоВсехДействиях = Истина; + Команда.Порядок = 20; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; +КонецПроцедуры + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд. +// +// Параметры: +// ВидыПодключаемыхКоманд - ТаблицаЗначений - поддерживаемые виды команд, где: +// * Имя - Строка - имя вида команд. +// * ИмяПодменю - Строка - имя подменю для размещения команд этого вида на формах объектов. +// * Заголовок - Строка - наименование подменю, выводимое пользователю. +// * Картинка - Картинка - картинка подменю. +// * Отображение - ОтображениеКнопки - режим отображения подменю. +// * Порядок - Число - порядок подменю в командной панели формы. +// +Процедура ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд) Экспорт + + Если ВидыПодключаемыхКоманд.Найти("ОтображениеПомеченныхНаУдаление", "Имя") = Неопределено Тогда + + Вид = ВидыПодключаемыхКоманд.Добавить(); + Вид.Имя = "ОтображениеПомеченныхНаУдаление"; + Вид.ИмяПодменю = "Сервис"; + Вид.Заголовок = НСтр("ru = 'Сервис'"); + Вид.Порядок = 80; + Вид.Картинка = БиблиотекаКартинок.ПодменюСервис; + Вид.Отображение = ОтображениеКнопки.КартинкаИТекст; + + КонецЕсли; + + Если ВидыПодключаемыхКоманд.Найти("ПерейтиКПомеченнымНаУдаление", "Имя") = Неопределено Тогда + + Вид = ВидыПодключаемыхКоманд.Добавить(); + Вид.Имя = "ПерейтиКПомеченнымНаУдаление"; + Вид.ИмяПодменю = "Сервис"; + Вид.Заголовок = НСтр("ru = 'Сервис'"); + Вид.Порядок = 80; + Вид.Картинка = БиблиотекаКартинок.ПодменюСервис; + Вид.Отображение = ОтображениеКнопки.КартинкаИТекст; + + КонецЕсли; + +КонецПроцедуры + +// См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. +// +Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ISNULL(КОЛИЧЕСТВО(НеудаленныеОбъекты.Объект),0) КАК Всего + |ИЗ + | РегистрСведений.НеудаленныеОбъекты КАК НеудаленныеОбъекты + |ГДЕ + | НеудаленныеОбъекты.КоличествоПопыток > 3"; + + РезультатЗапроса = Запрос.Выполнить(); + КоличествоНеудаленныхОбъектов = РезультатЗапроса.Выбрать(); + КоличествоНеудаленныхОбъектов.Следующий(); + + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + + Подсистема = Метаданные.Подсистемы.Найти("Администрирование"); + Если Подсистема = Неопределено + Или Не ПравоДоступа("Просмотр", Подсистема) + Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Подсистема) Тогда + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("Обработка.УдалениеПомеченных"); + Иначе + Разделы = Новый Массив; + Разделы.Добавить(Подсистема); + КонецЕсли; + + ИдентификаторЗадания = "НеудаленныеОбъекты"; + Для каждого Раздел Из Разделы Цикл + + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = ИдентификаторЗадания; + Дело.ЕстьДела = КоличествоНеудаленныхОбъектов.Всего > 0; + Дело.Представление = НСтр("ru = 'Неудалившиеся объекты'"); + Дело.Количество = КоличествоНеудаленныхОбъектов.Всего; + Дело.Форма = "РегистрСведений.НеудаленныеОбъекты.ФормаСписка"; + Дело.Владелец = Раздел; + + КонецЦикла; КонецПроцедуры +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + Обработчики.Вставить("ВыполняетсяУдалениеОбъектов", + "УдалениеПомеченныхОбъектовСлужебный.УстановкаПараметровСеанса"); + +КонецПроцедуры + +// Параметры: +// ИмяПараметра - см. СтандартныеПодсистемыСервер.УстановкаПараметровСеанса.ИменаПараметровСеанса +// УстановленныеПараметры - см. СтандартныеПодсистемыСервер.УстановкаПараметровСеанса.ИменаПараметровСеанса +// +Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт + Если ИмяПараметра = "ВыполняетсяУдалениеОбъектов" Тогда + ПараметрыСеанса.ВыполняетсяУдалениеОбъектов = Ложь; + УстановленныеПараметры.Добавить("ВыполняетсяУдалениеОбъектов"); + КонецЕсли; +КонецПроцедуры + +Функция ПроверятьИспользованиеУдаляемыхОбъектов() Экспорт + ПериодОбновленияЗначения = 60000; + + ДанныеКонстанты = УдалениеПомеченныхПовтИсп.ПроверятьИспользованиеУдаляемыхОбъектов(); + Если ТекущаяУниверсальнаяДатаВМиллисекундах() - ДанныеКонстанты.МеткаВремени > ПериодОбновленияЗначения Тогда + ДанныеКонстанты.Значение = Константы.ПроверятьИспользованиеУдаляемыхОбъектов.Получить(); + ДанныеКонстанты.МеткаВремени = ТекущаяУниверсальнаяДатаВМиллисекундах(); + КонецЕсли; + + Возврат ДанныеКонстанты.Значение; +КонецФункции + +#КонецОбласти + +#Область ОбработчикиПодписок + +Процедура ЗапретитьИспользованиеУдаляемыхОбъектовВСправочникахПриЗаписи(Источник, Отказ) Экспорт + ЗапретитьИспользованиеУдаляемыхОбъектов(Источник, Отказ); +КонецПроцедуры + +Процедура ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписейПриЗаписи(Источник, Отказ, Замещение) Экспорт + ЗапретитьИспользованиеУдаляемыхОбъектов(Источник, Отказ); +КонецПроцедуры + +Процедура ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчетаПриЗаписи(Источник, Отказ, Замещение) Экспорт + ЗапретитьИспользованиеУдаляемыхОбъектов(Источник, Отказ); +КонецПроцедуры + +Процедура ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантахПриЗаписи(Источник, Отказ) Экспорт + ЗапретитьИспользованиеУдаляемыхОбъектов(Источник, Отказ); +КонецПроцедуры + +#КонецОбласти + +Функция ДопустимыеРежимыУдаления() Экспорт + + ДопустимыеРежимы = Новый Массив; + ДопустимыеРежимы.Добавить("Стандартный"); + ДопустимыеРежимы.Добавить("Монопольный"); + ДопустимыеРежимы.Добавить("Упрощенный"); + Возврат ДопустимыеРежимы; + +КонецФункции + +// Обработчик обновления на версию 2.4.1.1. +// +// +Процедура ВключитьУдалениеПомеченныхОбъектов() Экспорт + Константы.ИспользоватьУдалениеПомеченныхОбъектов.Установить(Истина); +КонецПроцедуры + +// Точка входа регламентного задания. +// +Процедура УдалениеПомеченныхПоРасписанию() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УдалениеПомеченных); + УдаляемыеОбъекты = УдалениеПомеченныхОбъектов.ПомеченныеНаУдаление(,Истина); + УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(УдаляемыеОбъекты); + +КонецПроцедуры + +// Возвращает Истина, если переданный тип является просты +// +// Параметры: +// Тип - Тип +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоПростойТип(Тип) Экспорт + Возврат (Тип = Неопределено Или Тип = Тип("Строка") Или Тип = Тип("Число") Или Тип = Тип("Булево") Или Тип = Тип( + "Дата")); +КонецФункции + +// Формирует список объектов метаданных, в которых разрешено наличие битых ссылок. +// Результат кешируется. +// +// +// Возвращаемое значение: +// Массив из ОбъектМетаданных +// +Функция ИсключенияПоискаСсылокРазрешающихУдаление() Экспорт + Возврат УдалениеПомеченныхПовтИсп.ИсключенияПоискаСсылокРазрешающихУдаление(); +КонецФункции + +// Снимает блокировку с объектов по истечении времени жизни сеанса удаления объектов. +// Для прекращения контроля использования удаляемых объектов при аварийном завершении сеанса удаления объектов. +// +Процедура ПроверкаАктивностиСеансаУдаленияОбъектов() Экспорт + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОтключениеПроверкиИспользованияУдаляемыхОбъектов); + + Если НЕ ПроверятьИспользованиеУдаляемыхОбъектов() Тогда + Возврат; + КонецЕсли; + + ВремяЖизниСеанса = 3 * 60*60; + ВремяСнятияБлокировки = ОбщегоНазначения.ТекущаяДатаПользователя() - ВремяЖизниСеанса; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | УдаляемыеОбъекты.ИдентификаторСеанса КАК ИдентификаторСеанса + |ИЗ + | РегистрСведений.УдаляемыеОбъекты КАК УдаляемыеОбъекты + |ГДЕ + | УдаляемыеОбъекты.ВремяБлокировки <= &ВремяСнятияБлокировки"; + + Запрос.УстановитьПараметр("ВремяСнятияБлокировки", ВремяСнятияБлокировки); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Попытка + СнятьБлокировкуИспользованияУдаляемыхОбъектов(ВыборкаДетальныеЗаписи.ИдентификаторСеанса); + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Удаление помеченных'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , + НСтр("ru='Не удалось отключить проверку удаляемых объектов по причине:'") + ОписаниеОшибки()); + КонецПопытки; + КонецЦикла; +КонецПроцедуры + +// Формирует строковый ключ для сохранения настроек отображения помеченных на удаления. +// +// Параметры: +// ИмяФормы - Строка - имя формы +// ИмяСписка - Строка - имя списка +// +// Возвращаемое значение: +// Строка +// +Функция КлючНастроек(ИмяФормы, ИмяСписка) Экспорт + + Ключ = "ПоказыватьПомеченныеНаУдаление/"+ИмяФормы+"/"+ИмяСписка; + Возврат Ключ; + +КонецФункции + +// Формирует дополнительную информацию о типе. +// +// Параметры: +// Тип - Тип +// КешИнформацииОТипах - Соответствие +// +// Возвращаемое значение: +// Структура: +// * ПолноеИмя - Строка +// * ПредставлениеЭлемента - Строка +// * ПредставлениеСписка - Строка +// * Вид -Строка +// * Ссылочный - Булево +// * Технический -Булево +// * Разделенный -Булево +// * Иерархический -Булево +// * ТекстЗапросаПоИерархии - Строка +// * ЕстьПодчиненные -Булево +// * ТекстЗапросаПоПодчиненным - Строка +// * ЕстьПредопределенные - Булево +// * Предопределенные - Массив из ЛюбаяСсылка +// +Функция ИнформацияОТипе(Тип, КешИнформацииОТипах) Экспорт + Информация = КешИнформацииОТипах.Получить(Тип); // Кэш. + Если Информация <> Неопределено Тогда + Возврат Информация; + КонецЕсли; + + МодельСервиса = ОбщегоНазначения.РазделениеВключено(); + + Информация = Новый Структура("ПолноеИмя, ПредставлениеЭлемента, ПредставлениеСписка, + |Вид, Ссылочный, Технический, Разделенный, + |Иерархический, ТекстЗапросаПоИерархии, + |ЕстьПодчиненные, ТекстЗапросаПоПодчиненным, + |ЕстьПредопределенные, Предопределенные"); + + // Поиск объекта метаданных. + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + + // Заполнение базовой информации. + Информация.ПолноеИмя = ВРег(ОбъектМетаданных.ПолноеИмя()); + + // Представления: элемента и списка. + Информация.ПредставлениеЭлемента = ОбщегоНазначения.ПредставлениеОбъекта(ОбъектМетаданных); + Информация.ПредставлениеСписка = ОбщегоНазначения.ПредставлениеСписка(ОбъектМетаданных); + + // Вид и его свойства. + Информация.Вид = Лев(Информация.ПолноеИмя, СтрНайти(Информация.ПолноеИмя, ".") - 1); + ЭтоСправочник = Ложь; + ЭтоДокумент = Ложь; + ЭтоПеречисление = Ложь; + ЭтоПланВидовХарактеристик = Ложь; + ЭтоПланСчетов = Ложь; + ЭтоПланВидовРасчета = Ложь; + ЭтоБизнесПроцесс = Ложь; + ЭтоЗадача = Ложь; + ЭтоПланОбмена = Ложь; + Если Информация.Вид = "СПРАВОЧНИК" Тогда + ЭтоСправочник = Истина; + ИначеЕсли Информация.Вид = "ДОКУМЕНТ" Тогда + ЭтоДокумент = Истина; + ИначеЕсли Информация.Вид = "ПЕРЕЧИСЛЕНИЕ" Тогда + ЭтоПеречисление = Истина; + ИначеЕсли Информация.Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + ЭтоПланВидовХарактеристик = Истина; + ИначеЕсли Информация.Вид = "ПЛАНСЧЕТОВ" Тогда + ЭтоПланСчетов = Истина; + ИначеЕсли Информация.Вид = "ПЛАНВИДОВРАСЧЕТА" Тогда + ЭтоПланВидовРасчета = Истина; + ИначеЕсли Информация.Вид = "БИЗНЕСПРОЦЕСС" Тогда + ЭтоБизнесПроцесс = Истина; + ИначеЕсли Информация.Вид = "ЗАДАЧА" Тогда + ЭтоЗадача = Истина; + ИначеЕсли Информация.Вид = "ПЛАНОБМЕНА" Тогда + ЭтоПланОбмена = Истина; + КонецЕсли; + + Информация.Ссылочный = (ЭтоСправочник Или ЭтоДокумент Или ЭтоПеречисление Или ЭтоПланВидовХарактеристик + Или ЭтоПланСчетов Или ЭтоПланВидовРасчета Или ЭтоБизнесПроцесс Или ЭтоЗадача Или ЭтоПланОбмена); + Если ЭтоСправочник Или ЭтоПланВидовХарактеристик Тогда + Информация.Иерархический = ОбъектМетаданных.Иерархический; + Иначе + Информация.Иерархический = ЭтоПланСчетов; + КонецЕсли; + Если Информация.Иерархический Тогда + ШаблонЗапроса = "ВЫБРАТЬ Ссылка, ПометкаУдаления ИЗ &ПолноеИмя ГДЕ Родитель = &УдаляемыйСсылка"; + Информация.ТекстЗапросаПоИерархии = СтрЗаменить(ШаблонЗапроса, "&ПолноеИмя", Информация.ПолноеИмя); + КонецЕсли; + + Информация.ЕстьПодчиненные = Ложь; + Информация.ТекстЗапросаПоПодчиненным = ""; + Если ЭтоСправочник Или ЭтоПланВидовХарактеристик Или ЭтоПланОбмена Или ЭтоПланСчетов Или ЭтоПланВидовРасчета Тогда + + ШаблонЗапроса = "ВЫБРАТЬ Ссылка, ПометкаУдаления ИЗ Справочник.&Имя ГДЕ Владелец = &УдаляемыйСсылка"; + ТекстЗапроса = ""; + + Для Каждого Справочник Из Метаданные.Справочники Цикл + Если Не Справочник.Владельцы.Содержит(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + Если Информация.ЕстьПодчиненные = Ложь Тогда + Информация.ЕстьПодчиненные = Истина; + Иначе + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + СтрЗаменить(ШаблонЗапроса, "&Имя", Справочник.Имя); + КонецЦикла; + + Информация.ТекстЗапросаПоПодчиненным = ТекстЗапроса; + КонецЕсли; + + Информация.Технический = ЭтоТехническийОбъект(Информация.ПолноеИмя); + Если МодельСервиса Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ЭтоРазделенныйОбъектМетаданных = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных); + Иначе + ЭтоРазделенныйОбъектМетаданных = Ложь; + КонецЕсли; + Информация.Разделенный = ЭтоРазделенныйОбъектМетаданных; + + КонецЕсли; + + Если ЭтоСправочник Или ЭтоПланВидовХарактеристик Или ЭтоПланСчетов Или ЭтоПланВидовРасчета Тогда + ТекстЗапроса = "ВЫБРАТЬ Ссылка ИЗ &ИмяТаблицы ГДЕ Предопределенный И ПометкаУдаления"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", Информация.ПолноеИмя); + Запрос = Новый Запрос(ТекстЗапроса); + Информация.Предопределенные = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Информация.ЕстьПредопределенные = Информация.Предопределенные.Количество() > 0; + Иначе + Информация.ЕстьПредопределенные = Ложь; + КонецЕсли; + + КешИнформацииОТипах.Вставить(Тип, Информация); + + Возврат Информация; +КонецФункции + +Функция ОбъединениеТаблиц(Таблица1, Таблица2, СохранятьПорядок = Ложь) Экспорт + Если СохранятьПорядок ИЛИ Таблица1.Количество() >= Таблица2.Количество() Тогда + Приемник = Таблица1.Скопировать(); + Источник = Таблица2; + Иначе + Приемник = Таблица2.Скопировать(); + Источник = Таблица1; + КонецЕсли; + + Для Каждого Элемент Из Источник Цикл + ЗаполнитьЗначенияСвойств(Приемник.Добавить(), Элемент); + КонецЦикла; + + Возврат Приемник; +КонецФункции + +Функция ОбъединениеМассивов(Массив1, Массив2) Экспорт + Если Массив1.Количество() > Массив2.Количество() Тогда + Приемник = Новый Массив(Новый ФиксированныйМассив(Массив1)); + Источник = Массив2; + Иначе + Приемник = Новый Массив(Новый ФиксированныйМассив(Массив2)); + Источник = Массив1; + КонецЕсли; + + Для Каждого Элемент Из Источник Цикл + Приемник.Добавить(Элемент); + КонецЦикла; + + Возврат Приемник; +КонецФункции + +// Параметры: +// Настройки - ТаблицаЗначений: +// * Реквизит - Строка +// * Метаданные - Строка +// +// Возвращаемое значение: +// Число +// +Функция ЧислоДополнительныхРеквизитов(Настройки) Экспорт + Результат = 0; + ПромежуточнаяТаблица = Настройки.Скопировать( , "Метаданные,Реквизит"); + ПромежуточнаяТаблица.Колонки.Добавить("Счетчик", Новый ОписаниеТипов("Число")); + ПромежуточнаяТаблица.ЗаполнитьЗначения(1, "Счетчик"); + ПромежуточнаяТаблица.Свернуть("Метаданные", "Счетчик"); + ПромежуточнаяТаблица.Сортировать("Счетчик Убыв"); + + Если ПромежуточнаяТаблица.Количество() > 0 Тогда + Результат = ПромежуточнаяТаблица[0].Счетчик; + КонецЕсли; + + Возврат Результат; +КонецФункции + +#Область ОбработчикиКомандФормыУдаленияПомеченных + +Функция ПомеченныеНаУдаление(ОтборМетаданных, Настройки, ДеревоПомеченныхНаУдаление) Экспорт + ПомеченныеНаУдаление = УдалениеПомеченныхОбъектов.ПомеченныеНаУдаление(ОтборМетаданных); + Отмеченные = УдаляемыеОбъектыИзДанныхФормы(ДеревоПомеченныхНаУдаление); + Возврат ДеревоПомеченныхНаУдаление(ПомеченныеНаУдаление, Настройки, Отмеченные); +КонецФункции + +// Параметры: +// ТаблицаДействий - ТаблицаЗначений +// +// Возвращаемое значение: +// см. РезультатОбработкиУдаляемыхОбъектов +// +Функция ВыполнитьОбработкуПричинНеудаления(ТаблицаДействий) Экспорт + Результат = РезультатОбработкиУдаляемыхОбъектов(); + + ПарыЗамен = Новый Соответствие; + ОчередьПометкиКУдалению = Новый Массив; + + Для Каждого Действие Из ТаблицаДействий Цикл + Если Не ЗначениеЗаполнено(Действие.Источник.ВерсияДанных) + ИЛИ Не ЗначениеЗаполнено(Действие.ОбнаруженныйСсылка.ВерсияДанных) Тогда + + Продолжить; + КонецЕсли; + + Если Действие.Действие = "Удалить" Тогда + Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Действие.ОбнаруженныйСсылка, "ПометкаУдаления") Тогда + СтрокаРезультата = Результат.Добавить(); + СтрокаРезультата.УдаляемыйСсылка = Действие.ОбнаруженныйСсылка; + СтрокаРезультата.ТребуетсяУдаление = Истина; + Иначе + ОчередьПометкиКУдалению.Добавить(Действие.ОбнаруженныйСсылка); + КонецЕсли; + ИначеЕсли Действие.Действие = "ЗаменитьСсылку" Тогда + ПарыЗамен.Вставить(Действие.Источник, Действие.ПараметрДействия); + Иначе + СтрокаРезультата = Результат.Добавить(); + СтрокаРезультата.УдаляемыйСсылка = Действие.ОбнаруженныйСсылка; + КонецЕсли; + КонецЦикла; + + Если ОчередьПометкиКУдалению.Количество() > 0 Тогда + Результат = ОбъединениеТаблиц( + Результат, + ОбработатьОчередьПометокНаУдаление(ОчередьПометкиКУдалению)); + КонецЕсли; + + Если ПарыЗамен.Количество() > 0 Тогда + РезультатЗамены = ОбщегоНазначения.ЗаменитьСсылки(ПарыЗамен, ОбщегоНазначения.ПараметрыЗаменыСсылок()); + Для Каждого СтрокаРезультата Из РезультатЗамены Цикл + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.УдаляемыйСсылка = СтрокаРезультата.Ссылка; + НоваяСтрока.ОбнаруженныйСсылка = СтрокаРезультата.ОбъектОшибки; + НоваяСтрока.ТекстОшибки = СтрокаРезультата.ТекстОшибки; + КонецЦикла; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Удаляет отмеченные на форме Обработки.УдалениеПомеченныхОбъектов.ОсновнаяФорма объекты +// и формирует данные для загрузки в форме. +// +// При открытии формы с переданным параметром УдаляемыеОбъекты список удаляемых объектов формируется +// из значения параметра. +// +// Параметры: +// ИсточникУдаляемыхОбъектов - ДеревоЗначений: +// * УдаляемыйСсылка - ЛюбаяСсылка +// - СписокЗначений из ЛюбаяСсылка +// РежимУдаления - Строка +// НастройкиДополнительныхРеквизитов - ТаблицаЗначений +// АдресРезультатаПредыдущегоШага - Строка +// ИдентификаторЗадания - УникальныйИдентификатор - уникальный идентификатор формы, из которой запущено задание. +// используется для отмены блокировки при прерывания фонового задания +// и закрытия формы. +// +// Возвращаемое значение: +// см. ДанныеФормыИзРезультатаУдаления +// +Функция УдалитьПомеченныеОбъекты(Знач ИсточникУдаляемыхОбъектов, РежимУдаления, НастройкиДополнительныхРеквизитов, + РезультатПредыдущегоШага, ИдентификаторЗадания) Экспорт + + Если ТипЗнч(ИсточникУдаляемыхОбъектов) = Тип("СписокЗначений") Тогда + ИсточникУдаляемыхОбъектов = ДеревоПомеченныхНаУдаление(ИсточникУдаляемыхОбъектов.ВыгрузитьЗначения(), НастройкиДополнительныхРеквизитов, Новый Массив); + КонецЕсли; + + РезультатПредыдущегоШага = РезультатШагаДополнительнойОбработки(РезультатПредыдущегоШага); + + УдаляемыеОбъекты = ОбъединениеМассивов( + УдаляемыеОбъектыИзРезультатаДополнительнойОбработки(РезультатПредыдущегоШага), + УдаляемыеОбъектыИзДанныхФормы(ИсточникУдаляемыхОбъектов, РезультатПредыдущегоШага)); + + УдаляемыеОбъекты.Добавить(ИдентификаторЗадания); + РезультатУдаления = УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(УдаляемыеОбъекты, РежимУдаления); + + Результат = ДанныеФормыИзРезультатаУдаления( + ИсточникУдаляемыхОбъектов, РезультатУдаления, НастройкиДополнительныхРеквизитов, РезультатПредыдущегоШага); + + Возврат Результат; +КонецФункции + +#КонецОбласти + +// Отключает контроль использования удаляемых объектов. Отключает регламентное задание, если обработаны все удаляемых объекты. +// Не используется для неразделенного сеанса в модули сервиса. +// +// Параметры: +// Идентификатор - УникальныйИдентификатор +// +Процедура СнятьБлокировкуИспользованияУдаляемыхОбъектов(Идентификатор) Экспорт + Если ОбщегоНазначения.РазделениеВключено() И НЕ ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Набор = РегистрыСведений.УдаляемыеОбъекты.СоздатьНаборЗаписей(); + Набор.Отбор.ИдентификаторСеанса.Установить(Идентификатор); + Набор.Записать(); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных(); + Блокировка.Добавить("Константа.ПроверятьИспользованиеУдаляемыхОбъектов"); + Блокировка.Заблокировать(); + Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 Таб.ИдентификаторСеанса ИЗ РегистрСведений.УдаляемыеОбъекты КАК Таб"); + Если Запрос.Выполнить().Пустой() Тогда + Константы.ПроверятьИспользованиеУдаляемыхОбъектов.Установить(Ложь); + + Фильтр = Новый Структура( + "Метаданные", + Метаданные.РегламентныеЗадания.ОтключениеПроверкиИспользованияУдаляемыхОбъектов); + ЗаданиеПроверки = РегламентныеЗаданияСервер.НайтиЗадания(Фильтр); + + Для Каждого Задание Из ЗаданиеПроверки Цикл + РегламентныеЗаданияСервер.ИзменитьЗадание( + Задание.УникальныйИдентификатор, + Новый Структура("Использование", Ложь)); + КонецЦикла; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; +КонецПроцедуры + +// Записывает информацию необходимую для блокировки удаляемых объектов и включает регламентное задание +// проверки использования удаляемых объектов. +// Не используется для неразделенного сеанса в модели сервиса. +// +Процедура УстановитьБлокировкуИспользованияУдаляемыхОбъектов(Пакет, Идентификатор) Экспорт + ЭтоМодельСервиса = ОбщегоНазначения.РазделениеВключено(); + ВОбластиДанных = ?(ЭтоМодельСервиса, ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(), Ложь); + Если ЭтоМодельСервиса И НЕ ВОбластиДанных Тогда + Возврат; + КонецЕсли; + + Набор = РегистрыСведений.УдаляемыеОбъекты.СоздатьНаборЗаписей(); + Набор.Отбор.ИдентификаторСеанса.Установить(Идентификатор); + + ВремяНачалаУдаления = ОбщегоНазначения.ТекущаяДатаПользователя(); + Для Каждого Элемент Из Пакет Цикл + Запись = Набор.Добавить(); + Запись.ИдентификаторСеанса = Идентификатор; + Запись.Объект = Элемент.УдаляемыйСсылка; + Запись.ВремяБлокировки = ВремяНачалаУдаления; + КонецЦикла; + + НачатьТранзакцию(); + Попытка + Константы.ПроверятьИспользованиеУдаляемыхОбъектов.Установить(Истина); + Набор.Записать(); + + Фильтр = Новый Структура( + "Метаданные", + Метаданные.РегламентныеЗадания.ОтключениеПроверкиИспользованияУдаляемыхОбъектов); + ЗаданиеПроверки = РегламентныеЗаданияСервер.НайтиЗадания(Фильтр); + + Для Каждого Задание Из ЗаданиеПроверки Цикл + РегламентныеЗаданияСервер.ИзменитьЗадание( + Задание.УникальныйИдентификатор, + Новый Структура("Использование", Истина)); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; +КонецПроцедуры + +// Получить значение настроек отображения помеченных объектов из хранилища. +// +// Параметры: +// ИмяФормы - Строка +// ИмяСписка - Строка +// Возвращаемое значение: +// см. ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить +// +Функция ЗагрузитьНастройкуОтображенияПомеченныхНаУдаления(ИмяФормы, ИмяСписка) Экспорт + КлючНастроек = КлючНастроек(ИмяФормы, ИмяСписка); + Возврат ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить(ИмяФормы, КлючНастроек, Ложь); +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции -// Точка входа регламентного задания. +#Область ПоискПомеченныхНаУдаление + +// Параметры: +// УдаляемыеОбъекты - Массив из ЛюбаяСсылка +// Настройки - ТаблицаЗначений: +// * Реквизит - Строка +// * Метаданные - Строка +// * Представление - Строка +// Отмеченные - Массив из ЛюбаяСсылка // -Процедура УдалениеПомеченныхПоРасписанию() Экспорт +// Возвращаемое значение: +// см. УниверсальноеДеревоУдаляемыхОбъектов +// +Функция ДеревоПомеченныхНаУдаление(УдаляемыеОбъекты, Настройки, Отмеченные) + ПометкиУстанавливаютсяВыборочно = (Отмеченные.Количество() > 0); + ДеревоЗначений = УниверсальноеДеревоУдаляемыхОбъектов(ЧислоДополнительныхРеквизитов(Настройки)); + + УзлыПервогоУровня = Новый Соответствие; - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УдалениеПомеченных); + КешТиповУдаляемыхОбъектов = Новый Соответствие; + Для Каждого УдаляемыйСсылка Из УдаляемыеОбъекты Цикл + ТипУдаляемого = ТипЗнч(УдаляемыйСсылка); + УдаляемыйИнформация = ИнформацияОТипе(ТипУдаляемого, + КешТиповУдаляемыхОбъектов); + + УзелТипа = УзлыПервогоУровня.Получить(ТипУдаляемого); + Если УзелТипа = Неопределено Тогда + УзелТипа = ДеревоЗначений.Строки.Добавить(); + УзелТипа.УдаляемыйСсылка = УдаляемыйИнформация.ПолноеИмя; + УзелТипа.Представление = УдаляемыйИнформация.ПредставлениеСписка; + УзелТипа.Пометка = Истина; + УзелТипа.Количество = 0; + УзелТипа.НомерКартинки = -1; + УзелТипа.ЭтоОписаниеОбъектаМетаданных = Истина; + ЗаполнитьОписаниеДополнительныхРеквизитов(Настройки, УдаляемыйИнформация, УзелТипа); + УзлыПервогоУровня.Вставить(ТипУдаляемого, УзелТипа); + КонецЕсли; + УзелТипа.Количество = УзелТипа.Количество + 1; + УзелТипа.Представление = УдаляемыйИнформация.ПредставлениеСписка + " (" + УзелТипа.Количество + ")"; + + УзелУдаляемого = УзелТипа.Строки.Добавить(); + УзелУдаляемого.УдаляемыйСсылка = УдаляемыйСсылка; + УзелУдаляемого.Представление = Строка(УдаляемыйСсылка); + УзелУдаляемого.Пометка = Истина; + УзелУдаляемого.НомерКартинки = НомерКартинки(УдаляемыйСсылка, + Истина, УдаляемыйИнформация.Вид, "Удален"); + + Если ПометкиУстанавливаютсяВыборочно И Отмеченные.Найти(УдаляемыйСсылка) = Неопределено Тогда + УзелУдаляемого.Пометка = Ложь; + УзелТипа.Пометка = Ложь; + КонецЕсли; + + КонецЦикла; + + ДеревоЗначений = ДополнитьДеревоДополнительнымиРеквизитами(ДеревоЗначений, Настройки); + + ДеревоЗначений.Колонки.Удалить(ДеревоЗначений.Колонки.Количество); + ДеревоЗначений.Строки.Сортировать("Представление", Истина); + + Возврат ДеревоЗначений; +КонецФункции + +Процедура ЗаполнитьОписаниеДополнительныхРеквизитов(Знач Настройки, УдаляемыйИнформация, Знач УзелТипа) + Перем Настройка; + Перем Сч; + Сч = 1; + Для Каждого Настройка Из Настройки Цикл + Если ВРег(Настройка.Метаданные) = УдаляемыйИнформация.ПолноеИмя Тогда + УзелТипа["Реквизит" + (Сч)] = Настройка.Представление; + Сч = Сч + 1; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// Параметры: +// ДеревоЗначений - ДеревоЗначений +// Настройки - ТаблицаЗначений +// +// Возвращаемое значение: +// ДеревоЗначений +// +Функция ДополнитьДеревоДополнительнымиРеквизитами(ДеревоЗначений, Настройки) + Результат = ДеревоЗначений.Скопировать(); + Результат.Строки.Очистить(); + + Для Каждого Элемент Из Настройки Цикл + Элемент.Метаданные = ВРег(Элемент.Метаданные); + КонецЦикла; + + Для Каждого ТипМетаданных Из ДеревоЗначений.Строки Цикл + ТипМетаданныхРезультата = Результат.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(ТипМетаданныхРезультата, ТипМетаданных); + ПомеченныеНаУдаление = ТипМетаданных.Строки.ВыгрузитьКолонку("УдаляемыйСсылка"); + ДополнительныеРеквизиты = ЗначенияДополнительныхРеквизитов(ПомеченныеНаУдаление, Настройки.НайтиСтроки( + Новый Структура("Метаданные", ВРег(ТипМетаданных.УдаляемыйСсылка)))); + + Для Каждого ПомеченныйОбъект Из ТипМетаданных.Строки Цикл + ПомеченныйОбъектРезультат = ТипМетаданныхРезультата.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(ПомеченныйОбъектРезультат, ПомеченныйОбъект); + ЗаполнитьЗначениеДополнительныхРеквизитов(ПомеченныйОбъектРезультат, ДополнительныеРеквизиты); + КонецЦикла; + КонецЦикла; + + Возврат Результат; +КонецФункции + +Процедура ЗаполнитьЗначениеДополнительныхРеквизитов(Знач ПомеченныйОбъектРезультат, Знач ДополнительныеРеквизиты) + Сч = 1; + ЗначениеДополнительныхРеквизитов = ДополнительныеРеквизиты[ПомеченныйОбъектРезультат.УдаляемыйСсылка]; + Если ЗначениеДополнительныхРеквизитов <> Неопределено Тогда + Для Каждого ЗначениеРеквизита Из ЗначениеДополнительныхРеквизитов Цикл + ПомеченныйОбъектРезультат["Реквизит" + Сч] = ЗначениеРеквизита.Значение; + Сч = Сч + 1; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +// Параметры: +// ПомеченныеНаУдаление - Массив +// НастройкиДополнительныхРеквизитов - Массив из СтрокаТаблицыЗначений +// +// Возвращаемое значение: +// Соответствие +// +Функция ЗначенияДополнительныхРеквизитов(ПомеченныеНаУдаление, НастройкиДополнительныхРеквизитов) + Результат = Новый Соответствие; + ДополнительныеРеквизиты = Новый Массив; + + Для Каждого Реквизит Из НастройкиДополнительныхРеквизитов Цикл + ДополнительныеРеквизиты.Добавить(Реквизит.Реквизит); + КонецЦикла; + + Если ДополнительныеРеквизиты.Количество() > 0 Тогда + Результат = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ПомеченныеНаУдаление, СтрСоединить( + ДополнительныеРеквизиты, ",")); + КонецЕсли; + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область ВыполнениеДополнительнойОбработкиПричинНеудаления + +Функция ОбработатьОчередьПометокНаУдаление(ОчередьПометкиКУдалению) + Результат = РезультатОбработкиУдаляемыхОбъектов(); + + Для Каждого Элемент Из ОчередьПометкиКУдалению Цикл + УдаляемыйОбъект = Элемент.ПолучитьОбъект(); + УдаляемыйОбъект.ДополнительныеСвойства.Вставить("НеВыполнятьКонтрольУдаляемых"); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(Элемент.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Элемент); + Блокировка.Заблокировать(); + + УдаляемыйОбъект.УстановитьПометкуУдаления(Истина); + ЗафиксироватьТранзакцию(); + + Описание = Результат.Добавить(); + Описание.УдаляемыйСсылка = Элемент; + Описание.ТребуетсяУдаление = Истина; + Исключение + ОтменитьТранзакцию(); + Описание = Результат.Добавить(); + Описание.УдаляемыйСсылка = Элемент; + Описание.ТекстОшибки = ОписаниеОшибки(); + КонецПопытки; + КонецЦикла; + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область КонтрольИспользованияУдаляемыхОбъектов + +Процедура ЗапретитьИспользованиеУдаляемыхОбъектов(Источник, Отказ) - Обработки.УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъектыИзРегламентногоЗадания(); + Если Источник.ДополнительныеСвойства.Свойство("НеВыполнятьКонтрольУдаляемых") + ИЛИ ПараметрыСеанса.ВыполняетсяУдалениеОбъектов Тогда + Возврат; + КонецЕсли; + + ЭтоМодельСервиса = ОбщегоНазначения.РазделениеВключено(); + ВОбластиДанных = ?(ЭтоМодельСервиса, ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(), Ложь); + Если ЭтоМодельСервиса И Не ВОбластиДанных Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если Не ПроверятьИспользованиеУдаляемыхОбъектов() Тогда + Возврат; + КонецЕсли; + + Если ИсключенияПоискаСсылокРазрешающихУдаление().Найти(Источник.Метаданные()) <> Неопределено Тогда + Возврат; + КонецЕсли; + + ТипИсточника = ТипЗнч(Источник); + Если ТипИсточника = Тип("РегистрСведенийНаборЗаписей.УдаляемыеОбъекты") Или ТипИсточника = Тип( + "РегистрСведенийНаборЗаписей.НеудаленныеОбъекты") Тогда + Возврат; + КонецЕсли; + + СсылкиНаУдаляемыеОбъекты = УдалениеПомеченныхОбъектов.СсылкиНаУдаляемыеОбъекты(Источник); + Если СсылкиНаУдаляемыеОбъекты.Количество() > 0 Тогда + ШаблонСообщения = НСтр("ru = 'Выполняется удаление ""%1"". + |Замените ""%1"" на непомеченные на удаление аналоги.'"); + Для Каждого УдаляемаяСсылка Из СсылкиНаУдаляемыеОбъекты Цикл + ОбщегоНазначения.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, УдаляемаяСсылка.Значение), + УдаляемаяСсылка.Ключ, , , Отказ); + КонецЦикла; + КонецЕсли; КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти + +#Область УдалениеПомеченныхОбъектов + +// Возвращаемое значение: +// Структура: +// * Удаленные - Массив из ЛюбаяСсылка +// * КоличествоНеУдаленных - Число +// * КоличествоУдаленных - Число +// * СвязиНеудаленных - см. СвязиНеудаленных +// * ДеревоПомеченныхНаУдаление - см. УниверсальноеДеревоУдаляемыхОбъектов +// * НеУдаленные - см. УниверсальноеДеревоУдаляемыхОбъектов +// +Функция ДанныеФормыИзРезультатаУдаления(ДеревоУдаляемых, РезультатУдаления, НастройкиДополнительныхРеквизитов, РезультатПредыдущегоШага) + ДеревоПомеченныхНаУдаление = ДеревоФормыВУниверсальноеДерево(ДеревоУдаляемых, ЧислоДополнительныхРеквизитов( + НастройкиДополнительныхРеквизитов)); + + Результат = Новый Структура; + Результат.Вставить("Удаленные", Новый Массив(Новый ФиксированныйМассив(РезультатУдаления.Удаленные))); + Результат.Вставить("НеУдаленные", УниверсальноеДеревоУдаляемыхОбъектов()); + Результат.Вставить("ДеревоПомеченныхНаУдаление", ДеревоПомеченныхНаУдаление); + Результат.Вставить("СвязиНеудаленных", СвязиНеудаленных()); + Результат.Вставить("КоличествоУдаленных", 0); + Результат.Вставить("КоличествоНеУдаленных", 0); + + КешИнформацииОТипах = Новый Соответствие; + Для Каждого ПрепятствующийУдалению Из РезультатУдаления.ПрепятствующиеУдалению Цикл + ДобавитьСтрокуУниверсальногоДерева(Результат.НеУдаленные, ПрепятствующийУдалению.УдаляемыйСсылка, + КешИнформацииОТипах); + ДобавитьСтрокуУниверсальногоДерева(Результат.ДеревоПомеченныхНаУдаление, ПрепятствующийУдалению.УдаляемыйСсылка, + КешИнформацииОТипах); + ДобавитьСтрокуСвязейНеудаленных(Результат.СвязиНеудаленных, ПрепятствующийУдалению, КешИнформацииОТипах); + КонецЦикла; + + Результат.ДеревоПомеченныхНаУдаление.Строки.Сортировать("Представление", Истина); + Результат.СвязиНеудаленных.Сортировать("УдаляемыйСсылка", Новый СравнениеЗначений()); + + Результат.ДеревоПомеченныхНаУдаление = ДеревоПомеченныхНаУдалениеБезУдаленных( + Результат.ДеревоПомеченныхНаУдаление, + РезультатУдаления.Удаленные); + + ИзмененныеСтрокиДерева = Результат.ДеревоПомеченныхНаУдаление.Строки.НайтиСтроки( + Новый Структура("Модифицированность", Истина)); + Для Каждого ГруппаНеУдаленного Из ИзмененныеСтрокиДерева Цикл + ГруппаНеУдаленного.Представление = ГруппаНеУдаленного.Представление + " (" + Формат( + ГруппаНеУдаленного.КоличествоСвязей, "ЧН=0; ЧГ=") + ")"; + КонецЦикла; + + Результат.ДеревоПомеченныхНаУдаление = ДополнитьДеревоДополнительнымиРеквизитами( + Результат.ДеревоПомеченныхНаУдаление, НастройкиДополнительныхРеквизитов); + + Результат.СвязиНеудаленных = ОбъединениеТаблиц( + ОшибкиПредыдущегоШага(РезультатПредыдущегоШага), + Результат.СвязиНеудаленных); + + Результат.КоличествоНеУдаленных = РезультатУдаления.НеУдаленные.Количество(); + Результат.КоличествоУдаленных = РезультатУдаления.Удаленные.Количество(); + + Возврат Результат +КонецФункции + +Функция РезультатШагаДополнительнойОбработки(РезультатПредыдущегоШагаПромежуточный) + Возврат ?(ТипЗнч(РезультатПредыдущегоШагаПромежуточный) <> Тип("ТаблицаЗначений"), + РезультатОбработкиУдаляемыхОбъектов(), + РезультатПредыдущегоШагаПромежуточный); +КонецФункции + +Функция ДеревоФормыВУниверсальноеДерево(ДеревоУдаляемых, КоличествоДополнительныхРеквизитов) + Результат = УниверсальноеДеревоУдаляемыхОбъектов(КоличествоДополнительныхРеквизитов); + СкопироватьСтроки(Результат.Строки, ДеревоУдаляемых.Строки); + Возврат Результат; +КонецФункции + +// Параметры: +// РезультатПредыдущегоШага - см. СвязиНеудаленных +// +// Возвращаемое значение: +// см. СвязиНеудаленных +// +Функция ОшибкиПредыдущегоШага(РезультатПредыдущегоШага) + СвязиНеудаленных = СвязиНеудаленных(); + + Для Каждого Элемент Из РезультатПредыдущегоШага Цикл + Если ПустаяСтрока(Элемент.ТекстОшибки) Тогда + Продолжить; + КонецЕсли; + + ОшибкаПредыдущегоШага = СвязиНеудаленных.Добавить(); + Если НЕ (Элемент.ТребуетсяУдаление) Тогда + ОшибкаПредыдущегоШага.УдаляемыйСсылка = Элемент.ОбнаруженныйСсылка; + ОшибкаПредыдущегоШага.Представление = Элемент.ТекстОшибки; + ОшибкаПредыдущегоШага.ОбнаруженныйСсылка = Элемент.ТекстОшибки; + Иначе + ЗаполнитьЗначенияСвойств(ОшибкаПредыдущегоШага, Элемент); + КонецЕсли; + + ОшибкаПредыдущегоШага.ЭтоОшибка = Истина; + ОшибкаПредыдущегоШага.НомерКартинки = 11; + КонецЦикла; + + Возврат СвязиНеудаленных; +КонецФункции + +// Формирует удаляемые объекты из дерева помеченных за исключением помеченных на удаление +// при дополнительной обработке. +// +// Параметры: +// ИсточникУдаляемыхОбъектов - ДеревоЗначений: +// * УдаляемыйСсылка - ЛюбаяСсылка +// - СписокЗначений из ЛюбаяСсылка +// РезультатОбработкиОшибок - см. ВыполнитьОбработкуПричинНеудаления +// +// Возвращаемое значение: +// Массив из ЛюбаяСсылка +// +Функция УдаляемыеОбъектыИзДанныхФормы(ИсточникУдаляемыхОбъектов, РезультатОбработкиОшибок = Неопределено) + + Результат = Новый Массив; + + Если РезультатОбработкиОшибок = Неопределено Тогда + ЗапрещенныеКУдалению = РезультатОбработкиУдаляемыхОбъектов(); + Иначе + ЗапрещенныеКУдалению = РезультатОбработкиОшибок.Скопировать(Новый Структура("ТребуетсяУдаление", Ложь)); + КонецЕсли; + + Найденные = ИсточникУдаляемыхОбъектов.Строки.НайтиСтроки(Новый Структура("Пометка", 1), Истина); + Для Каждого СтрокаДерева Из Найденные Цикл + Если ТипЗнч(СтрокаДерева.УдаляемыйСсылка) <> Тип("Строка") И ЗапрещенныеКУдалению.Найти( + СтрокаДерева.УдаляемыйСсылка, "ОбнаруженныйСсылка") = Неопределено Тогда + + Результат.Добавить(СтрокаДерева.УдаляемыйСсылка); + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция УдаляемыеОбъектыИзРезультатаДополнительнойОбработки(РезультатОбработкиОшибок) + Результат = Новый Массив; + + Для Каждого Элемент Из РезультатОбработкиОшибок.НайтиСтроки(Новый Структура("ТребуетсяУдаление", Истина)) Цикл + Результат.Добавить(Элемент.УдаляемыйСсылка); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ДеревоПомеченныхНаУдалениеБезУдаленных(ПомеченныеНаУдаление, Удаленные) + Результат = ПомеченныеНаУдаление.Скопировать(); + + МодифицированныеРодители = Новый Соответствие; + УдаляемыеОбъекты = Результат.Строки.НайтиСтроки(Новый Структура("Пометка", 1), Истина); + Для Каждого Элемент Из УдаляемыеОбъекты Цикл + Если Элемент.Родитель <> Неопределено И Удаленные.Найти(Элемент.УдаляемыйСсылка) <> Неопределено Тогда + МодифицированныеРодители.Вставить(Элемент.Родитель); + Элемент.Родитель.Строки.Удалить(Элемент); + КонецЕсли; + КонецЦикла; + + Для Каждого ЗначениеРодитель Из МодифицированныеРодители Цикл + Родитель = ЗначениеРодитель.Ключ; + Если Родитель.Строки.Количество() = 0 Тогда + Результат.Строки.Удалить(Родитель); + ИначеЕсли Родитель.Строки.НайтиСтроки(Новый Структура("Пометка", 1)).Количество() = 0 Тогда + Родитель.Пометка = 0; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +Процедура ДобавитьСтрокуУниверсальногоДерева(ДеревоНеУдаленные, УдаляемыйСсылка, КешИнформацииОТипах) + УдаляемыйИнформация = ИнформацияОТипе(ТипЗнч(УдаляемыйСсылка), КешИнформацииОТипах); + СтрокиУдаляемых = ДеревоНеУдаленные.Строки.НайтиСтроки(Новый Структура("УдаляемыйСсылка", УдаляемыйСсылка), + Истина); + СтрокаНеУдаленного = ?(СтрокиУдаляемых.Количество() = 0, Неопределено, СтрокиУдаляемых[0]); + + Если СтрокаНеУдаленного = Неопределено И Не УдаляемыйИнформация.Технический Тогда + ГруппаНеУдаленного = ДеревоНеУдаленные.Строки.НайтиСтроки( + Новый Структура("УдаляемыйСсылка", УдаляемыйИнформация.ПолноеИмя)); + ГруппаНеУдаленного = ?(ГруппаНеУдаленного.Количество() = 0, + Неопределено, + ГруппаНеУдаленного[0]); + + Если ГруппаНеУдаленного = Неопределено Тогда + ГруппаНеУдаленного = ДеревоНеУдаленные.Строки.Добавить(); + ГруппаНеУдаленного.НомерКартинки = -1; + ГруппаНеУдаленного.УдаляемыйСсылка = УдаляемыйИнформация.ПолноеИмя; + ГруппаНеУдаленного.Представление = УдаляемыйИнформация.ПредставлениеСписка; + КонецЕсли; + + ГруппаНеУдаленного.КоличествоСвязей = ГруппаНеУдаленного.КоличествоСвязей + 1; + ГруппаНеУдаленного.Модифицированность = Истина; + + СтрокаНеУдаленного = ГруппаНеУдаленного.Строки.Добавить(); + СтрокаНеУдаленного.УдаляемыйСсылка = УдаляемыйСсылка; + СтрокаНеУдаленного.Представление = Строка(УдаляемыйСсылка); + СтрокаНеУдаленного.НомерКартинки = НомерКартинки( + СтрокаНеУдаленного.УдаляемыйСсылка, Истина, УдаляемыйИнформация.Вид, "Удален"); + КонецЕсли; + + Если СтрокаНеУдаленного <> Неопределено Тогда + СтрокаНеУдаленного.Пометка = Истина; + СтрокаНеУдаленного.КоличествоСвязей = СтрокаНеУдаленного.КоличествоСвязей + 1; + КонецЕсли; +КонецПроцедуры + +Процедура ДобавитьСтрокуСвязейНеудаленных(ТаблицаСвязиНеУдаленных, Причина, КешИнформацииОТипах) + НомерКартинки = 0; + Вид = ""; + ОбнаруженныйСтатус = ""; + + Если Причина.Метаданные <> Неопределено И Метаданные.Константы.Содержит(Причина.Метаданные) Тогда + ОбнаруженныйТип = Тип("КонстантаМенеджерЗначения." + Причина.Метаданные.Имя); + Иначе + ОбнаруженныйТип = ТипЗнч(Причина.МестоИспользования); + КонецЕсли; + + СтрокаПрепятствующегоУдалению = ТаблицаСвязиНеУдаленных.Добавить(); + СтрокаПрепятствующегоУдалению.УдаляемыйСсылка = Причина.УдаляемыйСсылка; + СтрокаПрепятствующегоУдалению.ЭтоОшибка = ЗначениеЗаполнено(Причина.ОписаниеОшибки); + СтрокаПрепятствующегоУдалению.ОбнаруженныйСсылка = ?(СтрокаПрепятствующегоУдалению.ЭтоОшибка, + Причина.ОписаниеОшибки, + Причина.МестоИспользования); + + Если СтрокаПрепятствующегоУдалению.ЭтоОшибка ИЛИ Причина.Метаданные = Неопределено Тогда + СтрокаПрепятствующегоУдалению.Представление = Причина.ПодробноеОписаниеОшибки; + СтрокаПрепятствующегоУдалению.НомерКартинки = 11; + ИначеЕсли Причина.МестоИспользования = Неопределено Тогда + СтрокаПрепятствующегоУдалению.ОбнаруженныйСсылка = Причина.Метаданные.ПолноеИмя(); + СтрокаПрепятствующегоУдалению.ЭтоКонстанта = Истина; + СтрокаПрепятствующегоУдалению.СсылочногоТипа = Ложь; + СтрокаПрепятствующегоУдалению.Представление = Причина.Метаданные.Синоним + " (" + НСтр( + "ru = 'Константа'") + ")"; + Вид = "КОНСТАНТА"; + Иначе + ОбнаруженныйИнформация = ИнформацияОТипе(ОбнаруженныйТип, КешИнформацииОТипах); + + Если ОбнаруженныйИнформация.Вид = "ДОКУМЕНТ" Тогда + Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Причина.МестоИспользования, + "ПометкаУдаления, Проведен"); + ОбнаруженныйСтатус = ?(Значения.ПометкаУдаления, "Удален", ?(Значения.Проведен, "Проведен", "")); + ИначеЕсли ОбнаруженныйИнформация.Ссылочный Тогда + ОбнаруженныйСтатус = ?(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Причина.МестоИспользования, + "ПометкаУдаления"), "Удален", ""); + КонецЕсли; + + СтрокаПрепятствующегоУдалению.СсылочногоТипа = ОбнаруженныйИнформация.Ссылочный; + + СтрокаПрепятствующегоУдалению.ПредставлениеУдаляемый = Строка(Причина.УдаляемыйСсылка); + СтрокаПрепятствующегоУдалению.Представление = Строка(Причина.МестоИспользования) + " (" + + ОбнаруженныйИнформация.ПредставлениеЭлемента + ")"; + Вид = ОбнаруженныйИнформация.Вид; + КонецЕсли; + СтрокаПрепятствующегоУдалению.НомерКартинки = ?(НомерКартинки <> 0, НомерКартинки, НомерКартинки( + СтрокаПрепятствующегоУдалению.ОбнаруженныйСсылка, СтрокаПрепятствующегоУдалению.СсылочногоТипа, + Вид, ОбнаруженныйСтатус)); + +КонецПроцедуры + +#КонецОбласти + +Процедура СкопироватьСтроки(СтрокиПриемник, СтрокиИсточник) + Для Каждого СтрокаИсточник Из СтрокиИсточник Цикл + СтрокаПриемник = СтрокиПриемник.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник); + СкопироватьСтроки(СтрокаПриемник.Строки, СтрокаИсточник.Строки); + КонецЦикла; +КонецПроцедуры + +Функция ИсключенияПоискаСсылокРазрешающихУдалениеСлужебный() Экспорт + Исключения = Новый Массив; + + Исключения.Добавить(Метаданные.РегистрыСведений.УдаляемыеОбъекты); + Исключения.Добавить(Метаданные.РегистрыСведений.НеудаленныеОбъекты); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(Исключения); + КонецЕсли; + + Возврат Исключения; +КонецФункции + +Функция ЭтоТехническийОбъект(Знач ПолноеИмяОбъекта) + + ЭтоТехническийОбъект = Ложь; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульОтчетыСервер = ОбщегоНазначения.ОбщийМодуль("ОтчетыСервер"); + ЭтоТехническийОбъект = МодульОтчетыСервер.ЭтоТехническийОбъект(ПолноеИмяОбъекта); + КонецЕсли; + + Возврат ЭтоТехническийОбъект Или ПолноеИмяОбъекта = ВРег("Справочник.ИдентификаторыОбъектовМетаданных") + Или ПолноеИмяОбъекта = ВРег("Справочник.ИдентификаторыОбъектовРасширений") Или ПолноеИмяОбъекта = ВРег( + "Справочник.ВерсииРасширений"); + +КонецФункции + +// Возвращает номер картинки из коллекции для отображения на форме +// +// Параметры: +// СсылкаИлиДанные - ЛюбаяСсылка +// СсылочногоТипа - Булево +// Вид - Строка +// Статус - Строка +// +// Возвращаемое значение: +// Число - номер картинки +// +Функция НомерКартинки(Знач СсылкаИлиДанные, Знач СсылочногоТипа, Знач Вид, Знач Статус) + + Вид = ВРег(Вид); + Если СсылочногоТипа Тогда + Если Вид = "СПРАВОЧНИК" + Или Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + НомерКартинки = 3; + ИначеЕсли Вид = "ДОКУМЕНТ" Тогда + НомерКартинки = 12; + ИначеЕсли Вид = "ПЛАНСЧЕТОВ" Тогда + НомерКартинки = 15; + ИначеЕсли Вид = "ПЛАНВИДОВРАСЧЕТА" Тогда + НомерКартинки = 17; + ИначеЕсли Вид = "БИЗНЕСПРОЦЕСС" Тогда + НомерКартинки = 19; + ИначеЕсли Вид = "ЗАДАЧА" Тогда + НомерКартинки = 21; + ИначеЕсли Вид = "ПЛАНОБМЕНА" Тогда + НомерКартинки = 23; + Иначе + НомерКартинки = -2; + КонецЕсли; + Если Статус = "Удален" Тогда + НомерКартинки = НомерКартинки + 1; + ИначеЕсли Статус = "Проведен" Тогда + НомерКартинки = НомерКартинки + 2; + КонецЕсли; + Иначе + Если Вид = "КОНСТАНТА" Тогда + НомерКартинки = 25; + ИначеЕсли Вид = "РЕГИСТРСВЕДЕНИЙ" Тогда + НомерКартинки = 26; + ИначеЕсли Вид = "РЕГИСТРНАКОПЛЕНИЯ" Тогда + НомерКартинки = 28; + ИначеЕсли Вид = "РЕГИСТРБУХГАЛТЕРИИ" Тогда + НомерКартинки = 34; + ИначеЕсли Вид = "РЕГИСТРРАСЧЕТА" Тогда + НомерКартинки = 38; + ИначеЕсли СсылкаИлиДанные = Неопределено Тогда + НомерКартинки = 11; + Иначе + НомерКартинки = 8; + КонецЕсли; + КонецЕсли; + + Возврат НомерКартинки; +КонецФункции + +#Область Конструкторы + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - ЛюбаяСсылка +// * ТекстОшибки - Строка +// * ТребуетсяУдаление - Булево +// * ОбнаруженныйСсылка - ЛюбаяСсылка +// - Неопределено +// +Функция РезультатОбработкиУдаляемыхОбъектов() + ТипСтрока = Новый ОписаниеТипов("Строка"); + + Ошибки = Новый ТаблицаЗначений; + Ошибки.Колонки.Добавить("УдаляемыйСсылка"); + Ошибки.Колонки.Добавить("ОбнаруженныйСсылка"); + Ошибки.Колонки.Добавить("ТекстОшибки", ТипСтрока); + Ошибки.Колонки.Добавить("ТребуетсяУдаление", Новый ОписаниеТипов("Булево")); + Возврат Ошибки +КонецФункции + +// Представление коллекция ДеревоПомеченныхНаУдаление и НеУдаленные +// +// Параметры: +// ЧислоДополнительныхРеквизитов - Число +// +// Возвращаемое значение: +// ДеревоЗначений: +// * Пометка - Булево +// * УдаляемыйСсылка - ЛюбаяСсылка +// - Строка +// * Представление - Строка +// * ПредставлениеУдаляемый - Строка +// * НомерКартинки - Число +// * БылиОшибкиПриУдалении - Булево +// * ЭтоОписаниеОбъектаМетаданных - Булево - для условного оформления +// * КоличествоСвязей - Число +// * Количество - Число - количество элементов в узле объекта метаданных (для представления) +// * Модифицированность - Булево - изменялся состав группы +// +Функция УниверсальноеДеревоУдаляемыхОбъектов(ЧислоДополнительныхРеквизитов = 0) + УниверсальноеДерево = Новый ДеревоЗначений; + УниверсальноеДерево.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(1,0))); + УниверсальноеДерево.Колонки.Добавить("УдаляемыйСсылка"); + УниверсальноеДерево.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + УниверсальноеДерево.Колонки.Добавить("ПредставлениеУдаляемый", Новый ОписаниеТипов("Строка")); + УниверсальноеДерево.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); + УниверсальноеДерево.Колонки.Добавить("БылиОшибкиПриУдалении", Новый ОписаниеТипов("Булево")); + УниверсальноеДерево.Колонки.Добавить("ЭтоОписаниеОбъектаМетаданных", Новый ОписаниеТипов("Булево")); + УниверсальноеДерево.Колонки.Добавить("КоличествоСвязей", Новый ОписаниеТипов("Число")); + УниверсальноеДерево.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число")); + УниверсальноеДерево.Колонки.Добавить("Модифицированность", Новый ОписаниеТипов("Булево")); + + Для Сч = 1 По ЧислоДополнительныхРеквизитов Цикл + УниверсальноеДерево.Колонки.Добавить("Реквизит" + Сч); + КонецЦикла; + + Возврат УниверсальноеДерево; +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * УдаляемыйСсылка - ЛюбаяСсылка +// * ОбнаруженныйСсылка - ЛюбаяСсылка +// - Строка +// * НомерКартинки - Число +// * Представление - Строка +// * СсылочногоТипа - Булево +// * ЭтоОшибка - Булево +// * ЭтоКонстанта - Булево +// * ПредставлениеУдаляемый - Строка +// +Функция СвязиНеудаленных() + Таблица = ПрепятствующиеУдалению(); + + Таблица.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); + Таблица.Колонки.Добавить("СсылочногоТипа", Новый ОписаниеТипов("Булево")); + Таблица.Колонки.Добавить("ЭтоОшибка", Новый ОписаниеТипов("Булево")); + Таблица.Колонки.Добавить("ЭтоКонстанта", Новый ОписаниеТипов("Булево")); + + Таблица.Индексы.Добавить("УдаляемыйСсылка"); + + Возврат Таблица; +КонецФункции + +// Ошибки при удалении объектов. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * УдаляемыйСсылка - ЛюбаяСсылка - удаляемый объект, колонка индексируется. +// * ОбнаруженныйСсылка - ЛюбаяСсылка - объект, в котором есть ссылки на удаляемый объект. +// - Строка - подробное описание ошибки, если возникла ошибка при удалении объекта. +// * ПредставлениеУдаляемый - Строка - представление удаляемого объекта. +// * Представление - Строка - представление места использования или описание ошибки при удалении объекта. +// +Функция ПрепятствующиеУдалению() Экспорт + Таблица = Новый ТаблицаЗначений; + + Таблица.Колонки.Добавить("УдаляемыйСсылка"); + Таблица.Колонки.Добавить("ОбнаруженныйСсылка"); + Таблица.Колонки.Добавить("ПредставлениеУдаляемый", Новый ОписаниеТипов("Строка")); + Таблица.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + + Таблица.Индексы.Добавить("УдаляемыйСсылка"); + + Возврат Таблица; +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйВызовСервера/Module.bsl index 7ea66e47c..fba932ff2 100644 --- a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйВызовСервера/Module.bsl @@ -6,16 +6,26 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс // Устанавливает режим автоматического удаления помеченных объектов -// -Функция УстановитьРежимУдалятьПоРасписанию(УдалятьПомеченныеОбъекты) Экспорт +// +// Параметры: +// Изменения - Структура: +// * Использование - Булево - флаг использования регламентного задания +// * Расписание - РасписаниеРегламентногоЗадания - устанавливаемое расписание регламентного задания. +// +// Возвращаемое значение: +// Булево +// +Функция УстановитьРежимУдалятьПоРасписанию(Изменения) Экспорт Если Не Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для совершения операции.'"); КонецЕсли; + УдалятьПомеченныеОбъекты = Изменения.Использование; + Отбор = Новый Структура; Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.УдалениеПомеченных); Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); @@ -24,6 +34,7 @@ Параметры = Новый Структура; Параметры.Вставить("Использование", УдалятьПомеченныеОбъекты); + Параметры.Вставить("Расписание", Изменения.Расписание); РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Параметры); Возврат Истина; @@ -33,12 +44,49 @@ КонецФункции -// (См. УдалениеПомеченныхОбъектов.ЗначениеФлажкаУдалятьПоРасписанию) +// Возвращает расписание регламентного задания. // -Функция ЗначениеФлажкаУдалятьПоРасписанию() Экспорт - - Возврат УдалениеПомеченныхОбъектов.ЗначениеФлажкаУдалятьПоРасписанию(); +// Возвращаемое значение: +// Структура: +// * ДетальныеРасписанияДня - Массив +// * Использование - Булево +// * РазделениеВключено - Булево +// +Функция РежимУдалятьПоРасписанию() Экспорт + Результат = Новый Структура; + Результат.Вставить("Использование", Ложь); + Результат.Вставить("Расписание", ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Новый РасписаниеРегламентногоЗадания())); + Результат.Вставить("РазделениеВключено", ОбщегоНазначения.РазделениеВключено()); + Отбор = Новый Структура; + Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.УдалениеПомеченных); + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); + Если Задания.Количество() > 0 Тогда + Задания = Задания[0]; + Результат.Использование = Задания.Использование; + Если Результат.РазделениеВключено Тогда + Результат.Расписание = Задания.Расписание; + Иначе + Результат.Расписание = РегламентныеЗаданияСервер.РасписаниеРегламентногоЗадания(Задания.УникальныйИдентификатор, Истина); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + КонецФункции +// См. УдалениеПомеченныхОбъектов.ЗначениеФлажкаУдалятьПоРасписанию +// +// Возвращаемое значение: +// см. УдалениеПомеченныхОбъектов.ЗначениеФлажкаУдалятьПоРасписанию +// +Функция ЗначениеФлажкаУдалятьПоРасписанию() Экспорт + Возврат УдалениеПомеченныхОбъектов.ЗначениеФлажкаУдалятьПоРасписанию(); +КонецФункции + +Процедура СохранитьНастройкуОтображенияПомеченныхНаУдаления(ИмяФормы, ИмяСписка, ЗначениеПометки) Экспорт + КлючНастроек = УдалениеПомеченныхОбъектовСлужебный.КлючНастроек(ИмяФормы, ИмяСписка); + ОбщегоНазначения.ХранилищеНастроекДанныхФормСохранить(ИмяФормы, КлючНастроек, ЗначениеПометки); +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйКлиентСервер/Module.bsl new file mode 100644 index 000000000..1caa23fae --- /dev/null +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйКлиентСервер/Module.bsl @@ -0,0 +1,37 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Параметры: +// Список - ДинамическийСписок +// ЗначениеОтбора - Булево +// +Процедура УстановитьОтборПоПометкеУдаления(Список, ЗначениеОтбора) Экспорт + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ПометкаУдаления", Ложь,,,ЗначениеОтбора); +КонецПроцедуры + +// Формирует результат вызова метода УдалениеПомеченныхОбъектовКлиент.НачатьУдалениеПомеченных +// +// Возвращаемое значение: +// Структура: +// * УдаленныеКоличество - Число +// * НеУдаленныеКоличество - Число +// * АдресРезультата - Строка +// * Успешно - Булево +// +Функция НовыйСведенияОРезультатахУдаления() Экспорт + Результат = Новый Структура; + Результат.Вставить("Удаленные", Новый Массив); + Результат.Вставить("УдаленныеКоличество", 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..8ce3eeffb --- /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 new file mode 100644 index 000000000..ad09debb2 --- /dev/null +++ b/SSL/src/CommonModules/УдалениеПомеченныхПовтИсп/Module.bsl @@ -0,0 +1,22 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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..75bb99be2 --- /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 96911b1fb..eb6bf1f77 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -20,18 +20,21 @@ // Параметры: // Роль - Строка - имя роли. // -// СсылкаНаОбъект - Ссылка - на объект, для которого заполняются наборы значений доступа +// СсылкаНаОбъект - ЛюбаяСсылка - на объект, для которого заполняются наборы значений доступа // для проверки права Чтение. // - ТаблицаЗначений - таблица произвольных наборов значений доступа с колонками: // * НомерНабора - Число - номер, группирующий несколько строк в отдельный набор. // * ВидДоступа - Строка - имя вида доступа, указанного в переопределяемом модуле. -// * ЗначениеДоступа - Ссылка - на тип значения доступа, указанного в переопределяемом модуле. +// * ЗначениеДоступа - ОпределяемыйТип.ЗначениеДоступа - тип значения доступа, +// указанного в переопределяемом модуле. // Пустую подготовленную таблицу можно получить с помощью функции // ТаблицаНаборыЗначенийДоступа общего модуля УправлениеДоступом // (колонки Чтение, Изменение не заполнять). // -// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, Неопределено - если -// параметр не указан, тогда право проверяется для текущего пользователя. +// Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// - Неопределено - если параметр не указан, +// тогда право проверяется для текущего пользователя. // // Возвращаемое значение: // Булево - если Истина, тогда у пользователя есть роль с учетом ограничений. @@ -348,12 +351,15 @@ // Право - Строка - имя права, как оно указано в процедуре ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов // общего модуля УправлениеДоступомПереопределяемый. // -// СсылкаНаОбъект - СправочникСсылка, ПланВидовХарактеристикСсылка - ссылка на одного из владельцев прав, +// СсылкаНаОбъект - СправочникСсылка +// - ПланВидовХарактеристикСсылка - ссылка на одного из владельцев прав, // указанных в процедуре ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов // общего модуля УправлениеДоступомПереопределяемый, например ссылка на папку файлов. // -// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, Неопределено - если -// параметр не указан, тогда право проверяется для текущего пользователя. +// Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// - Неопределено - если параметр не указан, +// тогда право проверяется для текущего пользователя. // // Возвращаемое значение: // Булево - если Истина, то настроено разрешение права с учетом всех разрешающих и @@ -376,7 +382,7 @@ Если ОписаниеПрав = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено описание возможных прав для таблицы ""%1""'"), + НСтр("ru = 'Нет описания возможных прав для таблицы ""%1""'"), СсылкаНаОбъект.Метаданные().ПолноеИмя()); КонецЕсли; @@ -384,7 +390,7 @@ Если ОписаниеПрава = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено описание права ""%1"" для таблицы ""%2""'"), + НСтр("ru = 'Нет описания права ""%1"" для таблицы ""%2""'"), Право, СсылкаНаОбъект.Метаданные().ПолноеИмя()); КонецЕсли; @@ -436,25 +442,32 @@ КонецФункции -// Проверяет, что чтение существующего объекта из базы данных разрешено на уровне прав и -// на уровне записей для текущего пользователя. +// Проверяет, что на уровне записей (и на уровне прав) текущему пользователю +// разрешено чтение объекта из базы данных. +// Когда указан набор записей проверяются все записи в базе данных, +// которые соответствуют свойству Отбор. // // Параметры: -// ОписаниеДанных - СправочникСсылка, -// ДокументСсылка, -// ПланВидовХарактеристикСсылка, -// ПланСчетовСсылка, -// ПланВидовРасчетаСсылка, -// БизнесПроцессСсылка, -// ЗадачаСсылка, -// ПланОбменаСсылка - ссылка на объект, который требуется проверить. -// - РегистрСведенийКлючЗаписи, -// РегистрНакопленияКлючЗаписи, -// РегистрБухгалтерииКлючЗаписи, -// РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. +// ОписаниеДанных - СправочникСсылка +// - ДокументСсылка +// - ПланВидовХарактеристикСсылка +// - ПланСчетовСсылка +// - ПланВидовРасчетаСсылка +// - БизнесПроцессСсылка +// - ЗадачаСсылка +// - ПланОбменаСсылка - ссылка на объект, который требуется проверить. +// - РегистрСведенийКлючЗаписи +// - РегистрНакопленияКлючЗаписи +// - РегистрБухгалтерииКлючЗаписи +// - РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - набор записей с настроенным свойством Отбор, +// по которому определяются записи в базе данных для проверки. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЧтениеРазрешено(ОписаниеДанных) Экспорт @@ -462,29 +475,44 @@ КонецФункции -// Проверяет, что изменение существующего объекта в базе данных разрешено на уровне прав и -// на уровне записей для текущего пользователя. +// Проверяет, что на уровне записей (и на уровне прав) текущему пользователю +// разрешено изменение объекта в базе данных на объект в памяти. +// Для нового объекта проверяется только объект в памяти. +// Если указана ссылка или ключ записи, проверятся только объект в базе данных. // // Важно: если подсистема работает в режиме стандартного ограничения, // а не в режиме универсального ограничения, тогда проверяется право // Изменение на таблицу, а на уровне записей проверяется только право Чтение. // // Параметры: -// ОписаниеДанных - СправочникСсылка, -// ДокументСсылка, -// ПланВидовХарактеристикСсылка, -// ПланСчетовСсылка, -// ПланВидовРасчетаСсылка, -// БизнесПроцессСсылка, -// ЗадачаСсылка, -// ПланОбменаСсылка - ссылка на объект, который требуется проверить. -// - РегистрСведенийКлючЗаписи, -// РегистрНакопленияКлючЗаписи, -// РегистрБухгалтерииКлючЗаписи, -// РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. +// ОписаниеДанных - СправочникСсылка +// - ДокументСсылка +// - ПланВидовХарактеристикСсылка +// - ПланСчетовСсылка +// - ПланВидовРасчетаСсылка +// - БизнесПроцессСсылка +// - ЗадачаСсылка +// - ПланОбменаСсылка - ссылка на объект в базе данных, который требуется проверить. +// - РегистрСведенийКлючЗаписи +// - РегистрНакопленияКлючЗаписи +// - РегистрБухгалтерииКлючЗаписи +// - РегистрРасчетаКлючЗаписи - ключ записи в базе данных, которую требуется проверить. +// - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект - объект в памяти и базе данных, который требуется проверить. +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - набор записей в памяти и базе данных, +// который требуется проверить. // // Возвращаемое значение: -// Булево - +// Булево // Функция ИзменениеРазрешено(ОписаниеДанных) Экспорт @@ -492,22 +520,10 @@ КонецФункции -// Проверяет, что чтение существующего объекта из базы данных разрешено на уровне прав и -// на уровне записей для текущего пользователя. Если не разрешено, вызывается исключение. -// +// Делает тоже, что функция ЧтениеРазрешено, но если не разрешено, вызывается исключение. +// // Параметры: -// ОписаниеДанных - СправочникСсылка, -// ДокументСсылка, -// ПланВидовХарактеристикСсылка, -// ПланСчетовСсылка, -// ПланВидовРасчетаСсылка, -// БизнесПроцессСсылка, -// ЗадачаСсылка, -// ПланОбменаСсылка - ссылка на объект, который требуется проверить. -// - РегистрСведенийКлючЗаписи, -// РегистрНакопленияКлючЗаписи, -// РегистрБухгалтерииКлючЗаписи, -// РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. +// ОписаниеДанных - см. ЧтениеРазрешено.ОписаниеДанных // Процедура ПроверитьЧтениеРазрешено(ОписаниеДанных) Экспорт @@ -515,26 +531,10 @@ КонецПроцедуры -// Проверяет, что изменение существующего объекта в базе данных разрешено на уровне прав и -// на уровне записей для текущего пользователя. Если не разрешено, вызывается исключение. -// -// Важно: если подсистема работает в режиме стандартного ограничения, -// а не в режиме универсального ограничения, тогда проверяется право -// Изменение на таблицу, а на уровне записей проверяется только право Чтение. +// Делает тоже, что функция ИзменениеРазрешено, но если не разрешено, вызывается исключение. // // Параметры: -// ОписаниеДанных - СправочникСсылка, -// ДокументСсылка, -// ПланВидовХарактеристикСсылка, -// ПланСчетовСсылка, -// ПланВидовРасчетаСсылка, -// БизнесПроцессСсылка, -// ЗадачаСсылка, -// ПланОбменаСсылка - ссылка на объект, который требуется проверить. -// - РегистрСведенийКлючЗаписи, -// РегистрНакопленияКлючЗаписи, -// РегистрБухгалтерииКлючЗаписи, -// РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. +// ОписаниеДанных - см. ИзменениеРазрешено.ОписаниеДанных // Процедура ПроверитьИзменениеРазрешено(ОписаниеДанных) Экспорт @@ -549,7 +549,8 @@ // в персональную группу доступа (только для упрощенной настройки прав). // // Параметры: -// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - требуемый пользователь. +// Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - требуемый пользователь. // Профиль - СправочникСсылка.ПрофилиГруппДоступа - профиль, для которого нужно найти или создать персональную // группу доступа и включить в нее пользователя. // - УникальныйИдентификатор - уникальный идентификатор поставляемого профиля, @@ -565,7 +566,8 @@ // из персональной группы доступа (только для упрощенной настройки прав). // // Параметры: -// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - требуемый пользователь. +// Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - требуемый пользователь. // Профиль - СправочникСсылка.ПрофилиГруппДоступа - профиль, для которого нужно найти или создать персональную // группу доступа и включить в нее пользователя. // - УникальныйИдентификатор - уникальный идентификатор поставляемого профиля, @@ -609,22 +611,22 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения - форма элемента объекта или записи регистра. // -// ТекущийОбъект - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект - проверяемый объект. -// - РегистрСведенийМенеджерЗаписи, -// РегистрНакопленияМенеджерЗаписи, -// РегистрБухгалтерииМенеджерЗаписи, -// РегистрРасчетаМенеджерЗаписи - менеджер проверяемой записи. +// ТекущийОбъект - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект - проверяемый объект. +// - РегистрСведенийМенеджерЗаписи +// - РегистрНакопленияМенеджерЗаписи +// - РегистрБухгалтерииМенеджерЗаписи +// - РегистрРасчетаМенеджерЗаписи - менеджер проверяемой записи. // Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт - Если ИзменениеРазрешено(ТекущийОбъект) Тогда + Если УправлениеДоступомСлужебный.ДоступРазрешен(ТекущийОбъект, Истина, Ложь, Истина) Тогда Возврат; КонецЕсли; @@ -639,18 +641,18 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения - форма элемента объекта или записи регистра. // -// ТекущийОбъект - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект - проверяемый объект. -// - РегистрСведенийМенеджерЗаписи, -// РегистрНакопленияМенеджерЗаписи, -// РегистрБухгалтерииМенеджерЗаписи, -// РегистрРасчетаМенеджерЗаписи - менеджер проверяемой записи. +// ТекущийОбъект - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект - проверяемый объект. +// - РегистрСведенийМенеджерЗаписи +// - РегистрНакопленияМенеджерЗаписи +// - РегистрБухгалтерииМенеджерЗаписи +// - РегистрРасчетаМенеджерЗаписи - менеджер проверяемой записи. // // ПараметрыЗаписи - Структура - стандартный параметр, передаваемый в обработчик события. // @@ -685,7 +687,7 @@ // Форма - ФормаКлиентскогоПриложения - форма значения доступа, // использующего группы для выбора разрешенных значений. // -// ДополнительныеПараметры - см. ПараметрыПриСозданииФормыЗначенияДоступа. +// ДополнительныеПараметры - см. ПараметрыПриСозданииФормыЗначенияДоступа // // УдалитьЭлементы - Неопределено - устарел, следует использовать ДополнительныеПараметры. // УдалитьТипЗначения - Неопределено - устарел, следует использовать ДополнительныеПараметры. @@ -712,7 +714,8 @@ Если ТипЗнч(СозданиеНового) <> Тип("Булево") Тогда Попытка - СозданиеНового = НЕ ЗначениеЗаполнено(Форма.Объект.Ссылка); + ОбъектФормы = Форма.Объект; // ОпределяемыйТип.ЗначениеДоступа - реально ДанныеФормыСтруктура объекта. + СозданиеНового = НЕ ЗначениеЗаполнено(ОбъектФормы.Ссылка); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -724,7 +727,8 @@ Если ТипЗнч(ТипЗначения) <> Тип("Тип") Тогда Попытка - ТипЗначенияДоступа = ТипЗнч(Форма.Объект.Ссылка); + ОбъектФормы = Форма.Объект; // ОпределяемыйТип.ЗначениеДоступа - реально ДанныеФормыСтруктура объекта. + ТипЗначенияДоступа = ТипЗнч(ОбъектФормы.Ссылка); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -861,7 +865,7 @@ // Описание дополнительных параметров, используемых в процедуре ПриСозданииФормыЗначенияДоступа. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Реквизит - Неопределено - означает имя реквизита формы "Объект.ГруппаДоступа". // - Строка - имя реквизита формы, содержащего группу доступа. // @@ -1021,7 +1025,7 @@ // // Параметры: // Список - ДинамическийСписок - динамический список, в который нужно установить отборы. -// ОписаниеОтборов - Соответствие - со свойствами: +// ОписаниеОтборов - Соответствие: // * Ключ - Строка - имя поля основной таблицы динамического списка, для которого // нужно установить условие <Поле> В (&РазрешенныеЗначения). // * Значение - Тип - тип значений доступа, которые нужно включить в состав @@ -1104,7 +1108,8 @@ // ТипЗначений - Тип - тип значений доступа, разрешенные значения которых нужно вернуть. // - Массив - массив указанных выше типов. // Пользователь - Неопределено - вернуть разрешенные значения для авторизованного пользователя. -// - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - вернуть +// - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - вернуть // разрешенные значения для указанного пользователя. // ВернутьВсе - Булево - если установить в Истина, тогда будут возвращены все значения - даже тогда, // когда их более 100. @@ -1132,11 +1137,11 @@ // объектов ссылочного типа, для которых нужно вернуть права. // // Возвращаемое значение: -// Соответствие - с полями: +// Соответствие: // * Ключ - СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор типа; -// * Значение - Структура - со свойствами: -// * Ключ - Строка - имя права доступа ("Чтение", "Изменение", "Добавление"); -// * Значение - Булево - если Истина, тогда право есть, иначе нет. +// * Значение - Структура: +// * Ключ - Строка - имя права доступа ("Чтение", "Изменение", "Добавление"); +// * Значение - Булево - если Истина, тогда право есть, иначе нет. // Функция ПраваПоИдентификаторам(Идентификаторы = Неопределено) Экспорт @@ -1184,7 +1189,7 @@ // в процедуры ЗаполнитьНаборыЗначенийДоступа(Таблица), определенные прикладным разработчиком. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: +// ТаблицаЗначений: // * НомерНабора - Число - необязательно, если набор один. // * ВидДоступа - Строка - необязательно, кроме специальных: ПравоЧтения, ПравоИзменения. // * ЗначениеДоступа - ОпределяемыйТип.ЗначениеДоступа - тип значения доступа, указанный для вида доступа @@ -1247,11 +1252,13 @@ //КонецПроцедуры // // Параметры: -// Объект - СправочникаОбъект, ДокументОбъект, СправочникСсылка, ДокументСсылка - ссылка -// или ссылочный объект (элемент справочника, документ, бизнес-процесс, задача, план -// видов характеристик и т.п.), для которого требуется заполнить наборы значений доступа. +// Объект - ЛюбаяСсылка +// - ОпределяемыйТип.ВладелецНаборовЗначенийДоступаОбъект - ссылка или объект, +// (элемент справочника, документ, бизнес-процесс, задача, план видов характеристик и т.п.), +// для которого требуется заполнить наборы значений доступа. // -// Таблица - ТаблицаЗначений, Неопределено - возвращает в этом параметре подготовленные наборы значений +// Таблица - ТаблицаЗначений +// - Неопределено - возвращает в этом параметре подготовленные наборы значений // доступа. Описание колонок см. в функции УправлениеДоступом.ТаблицаНаборыЗначенийДоступа. // Если передано Неопределено, то будет создана и заполнена новая таблица наборов значений доступа. // @@ -1277,9 +1284,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |Тип объекта ""%1"" - |не найден ни в одной из подписок на события - |""Записать наборы значений доступа"", - |""Записать зависимые наборы значений доступа"".'"), + |отсутствует в подписках на события ""Записать наборы значений доступа"", ""Записать зависимые наборы значений доступа"".'"), ТипЗначенияОбъект); КонецЕсли; @@ -1476,7 +1481,10 @@ // в регистре сведений НаборыЗначенийДоступа. // // Параметры: -// СсылкаИлиОбъект - Произвольный - ссылка или объект, для которого заполняются наборы значений доступа. +// СсылкаИлиОбъект - ЛюбаяСсылка +// - ОпределяемыйТип.ВладелецНаборовЗначенийДоступаОбъект - ссылка или объект, +// для которого заполняются наборы значений доступа. +// // ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, // не выполняя лишних, избыточных действий с данными. // См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. @@ -1494,14 +1502,14 @@ // указанной подписки не существует, если для указанной цели наборы не применяются. // // Параметры: -// Источник - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. +// Источник - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // @@ -1543,7 +1551,7 @@ // Возвращает структуру для удобства описания поставляемых профилей. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Имя - Строка - ИмяПредопределенныхДанных - используется для привязки // поставляемых данных к предопределенному элементу. // * Идентификатор - Строка - строка уникального идентификатора поставляемого @@ -1553,17 +1561,17 @@ // полученные произвольным способом, т.к. это может нарушить уникальность ссылок. // * Наименование - Строка - наименование поставляемого профиля. // * Описание - Строка - описание поставляемого профиля. -// * Роли - Массив - имена ролей поставляемого профиля. -// * Назначение - Массив - типы ссылок пользователя и объектов авторизации внешних +// * Роли - Массив из Строка - имена ролей поставляемого профиля. +// * Назначение - Массив из Тип - типы ссылок пользователя и объектов авторизации внешних // пользователей. Если пустой, значит, назначение для пользователей. // Должны быть в пределах состава определяемого типа Пользователь. -// * ВидыДоступа - СписокЗначений - со свойствами: +// * ВидыДоступа - СписокЗначений: // * Значение - Строка - имя вида доступа, указанного в переопределяемом // модуле УправлениеДоступомПереопределяемый в процедуре ПриЗаполненииВидовДоступа. // * Представление - Строка - допустимы строки "ВначалеВсеЗапрещены" (или пустая строка), // "ВначалеВсеРазрешены", "Предустановленный". // -// * ЗначенияДоступа - СписокЗначений - со свойствами: +// * ЗначенияДоступа - СписокЗначений: // * Значение - Строка - имя вида доступа, указанного в параметре ВидыДоступа. // * Представление - Строка - имя предопределенного элемента, например // "Справочник.ГруппыПользователей.ВсеПользователи". @@ -1644,14 +1652,15 @@ Процедура ДобавитьДополнительныеТипыВидаДоступа(ВидДоступа, ТипЗначений, ТипГруппЗначений = Неопределено, НесколькоГруппЗначений = Ложь) Экспорт - ДополнительныеТипы = ВидДоступа.ДополнительныеТипы; + ДополнительныеТипы = ВидДоступа.ДополнительныеТипы; // См. УправлениеДоступомСлужебный.НоваяТаблицаДополнительныеТипыВидаДоступа Если ДополнительныеТипы.Колонки.Количество() = 0 Тогда - ДополнительныеТипы.Колонки.Добавить("ТипЗначений", Новый ОписаниеТипов("Тип")); - ДополнительныеТипы.Колонки.Добавить("ТипГруппЗначений", Новый ОписаниеТипов("Тип")); - ДополнительныеТипы.Колонки.Добавить("НесколькоГруппЗначений", Новый ОписаниеТипов("Булево")); + ДополнительныеТипы = УправлениеДоступомСлужебный.НоваяТаблицаДополнительныеТипыВидаДоступа(); + ВидДоступа.ДополнительныеТипы = ДополнительныеТипы; КонецЕсли; + ДополнительныеТипы = ВидДоступа.ДополнительныеТипы; + НоваяСтрока = ДополнительныеТипы.Добавить(); НоваяСтрока.ТипЗначений = ТипЗначений; НоваяСтрока.ТипГруппЗначений = ТипГруппЗначений; @@ -1666,7 +1675,7 @@ // Предназначена для вызова из оперативного обработчика обновления. // // Параметры: -// ЗаменяемыеРоли - Соответствие - со значениями: +// ЗаменяемыеРоли - Соответствие: // * Ключ - Строка - имя заменяемой роли, например "ЧтениеБазовойНСИ". Если роль была удалена, // то к имени нужно добавить приставку "? ", например "? ЧтениеБазовойНСИ". // @@ -1762,7 +1771,7 @@ // // Возвращаемое значение: // СправочникСсылка.ПрофилиГруппДоступа - если поставляемый профиль найден в справочнике. -// Неопределено - если поставляемый профиль не найден в справочнике. +// Неопределено - если поставляемый профиль не существует в справочнике. // Функция ПоставляемыйПрофильПоИдентификатору(Идентификатор) Экспорт @@ -1774,9 +1783,9 @@ // передачи в процедуру ЗаменитьПраваВНастройкахПравОбъектов. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: -// * ТипВладельцев - Ссылка - пустая ссылка типа владельца прав из описания типов -// ВладелецНастроекПрав, например пустая ссылка справочника ПапкиФайлов. +// ТаблицаЗначений: +// * ТипВладельцев - ОпределяемыйТип.ВладелецНастроекПрав - пустая ссылка типа владельца прав, +// например пустая ссылка справочника ПапкиФайлов. // * СтароеИмя - Строка - старое имя права. // * НовоеИмя - Строка - новое имя права. // @@ -1799,9 +1808,9 @@ // процедуру однократно, чтобы не снижать производительность. // // Параметры: -// ТаблицаПереименований - ТаблицаЗначений - с колонками: -// * ТипВладельцев - Ссылка - пустая ссылка типа владельца прав из описания типов -// ВладелецНастроекПрав, например пустая ссылка справочника ПапкиФайлов. +// ТаблицаПереименований - ТаблицаЗначений: +// * ТипВладельцев - ОпределяемыйТип.ВладелецНастроекПрав - пустая ссылка типа владельца прав, +// например пустая ссылка справочника ПапкиФайлов. // * СтароеИмя - Строка - старое имя права, относящееся к указанному типу владельцев. // * НовоеИмя - Строка - новое имя права, относящееся к указанному типу владельцев. // Если указана пустая строка, настройка старого права будет удалена. @@ -1982,7 +1991,9 @@ // к группам доступа. Пользователи ИБ с ролью "ПолныеПрава" пропускаются. // // Параметры: -// МассивПользователей - Массив, Неопределено, Тип - массив из элементов +// МассивПользователей - Массив +// - Неопределено +// - Тип - массив из элементов // СправочникСсылка.Пользователи или СправочникСсылка.ВнешниеПользователи. // Если Неопределено, то обновить роли всех пользователей. // Если Тип = Справочник.ВнешниеПользователи, то будут обновлены роли всех внешних пользователей, @@ -2050,7 +2061,7 @@ // Отключить - Булево - Истина - отключает обновление ключей доступа и включает режим // сбора состава таблиц (списков), для которых будет запланировано // обновление ключей доступа при продолжении обновления ключей доступа. -// - Ложь - планирует обновление ключей доступа таблиц, собранных в режиме +// Ложь - планирует обновление ключей доступа таблиц, собранных в режиме // отключения, и включает стандартный режим обновления ключей доступа. // // ПланироватьОбновление - Булево - планирование обновления при отключении и продолжении. @@ -2076,7 +2087,7 @@ // Исключение // УправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Ложь); // //... -// ВызыватьИсключение; +// ВызватьИсключение; // КонецПопытки; // // Вариант 2. Запись набора объектов в транзакции (ТранзакцияАктивна() = Истина). @@ -2094,7 +2105,7 @@ // ОтменитьТранзакцию(); // УправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Ложь, Ложь); // //... -// ВызыватьИсключение; +// ВызватьИсключение; // КонецПопытки; // Процедура ОтключитьОбновлениеКлючейДоступа(Отключить, ПланироватьОбновление = Истина) Экспорт @@ -2170,8 +2181,8 @@ // так как в РИБ могут быть файловые ИБ. // // Параметры: -// Версия - Строка - см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. -// Обработчики - см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +// Версия - Строка - версия для таблицы ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления. +// Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления // // Пример: // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -2277,18 +2288,18 @@ // объекта метаданных для ограничения пользователей или ограничения внешних пользователей. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ВнутренниеДанные - Структура - данные для передачи в функцию СтруктураОграничения. -// * ПоляТаблиц - Соответствие - со свойствами: +// * ПоляТаблиц - Соответствие: // ** Ключ - Строка - имя коллекции объектов метаданных, например, Справочники. -// ** Значение - Соответствие - со свойствами: +// ** Значение - Соответствие: // *** Ключ - Строка - имя таблицы (объекта метаданных) в верхнем регистре. -// *** Значение - Структура - со свойствами: +// *** Значение - Структура: // **** ТаблицаСуществует - Булево - Ложь (для заполнения Истина, если существует). -// **** Поля - Соответствие - со свойствами: +// **** Поля - Соответствие: // ***** Ключ - Строка - имя реквизита в верхнем регистре, в том числе через точки, // например, "ВЛАДЕЛЕЦ.ОРГАНИЗАЦИЯ", "ТОВАРЫ.НОМЕНКЛАТУРА". -// ***** Значение - Структура - со свойствами: +// ***** Значение - Структура: // ****** ПолеСОшибкой - Число - 0 (для заполнения, если поле содержит ошибку, // если 1, то ошибка в имени первой части поля, // если 2, то ошибка в имени второй части поля, т.е. после первой точки). @@ -2305,20 +2316,20 @@ // Поля после первой точки могут относится только к коллекциям: "Реквизиты", // "СтандартныеРеквизиты", "ПризнакиУчета", "РеквизитыАдресации". Для этих // частей имени поля не требуется уточнять коллекцию. -// ****** СодержитТипы - Соответствие - со свойствами: +// ****** СодержитТипы - Соответствие: // ******* Ключ - Строка - полное имя ссылочной таблицы в верхнем регистре. -// ******* Значение - Структура - со свойствами: +// ******* Значение - Структура: // ******** ИмяТипа - Строка - имя типа, наличие которого нужно проверить. // ******** СодержитТип - Булево - Ложь (для заполнения Истина, // если у поля последнего поля есть тип). -// **** Предопределенные - Соответствие - со свойствами: +// **** Предопределенные - Соответствие: // ***** Ключ - Строка - имя предопределенного элемента. -// ***** Значение - Структура - со свойствами: +// ***** Значение - Структура: // ****** ИмяСуществует - Булево - Ложь (для заполнения Истина, если предопределенный есть). // -// **** Расширения - Соответствие - со свойствами: +// **** Расширения - Соответствие: // ***** Ключ - Строка - имя третьего имени таблицы, например, имя табличной части. -// ***** Значение - Структура - со свойствами: +// ***** Значение - Структура: // ****** ТаблицаСуществует - Булево - Ложь (для заполнения Истина, если существует). // ****** Поля - Соответствие - со свойствами, как для основной таблицы (см. выше). // @@ -2329,15 +2340,15 @@ КонецФункции // Назначение: для вызова из конструктора ограничений СППР. +// Перед передачей параметра РазобранноеОграничение в свойстве ПоляТаблиц должны быть заполнены +// вложенные свойства ТаблицаСуществует, ПолеСОшибкой, СодержитТип, ИмяСуществует. // // Параметры: -// РазобранноеОграничение - Структура - возвращается функцией РазобранноеОграничение, -// но перед передачей этого параметра в свойстве ПоляТаблиц должны быть заполнены -// вложенные свойства ТаблицаСуществует, ПолеСОшибкой, СодержитТип, ИмяСуществует. +// РазобранноеОграничение - см. РазобранноеОграничение // // Возвращаемое значение: -// Структура - со свойствами: -// * ОписаниеОшибок - Структура - со свойствами: +// Структура: +// * ОписаниеОшибок - Структура: // ** ЕстьОшибки - Булево - если Истина, значит найдена одна или более ошибок. // ** ТекстОшибок - Строка - текст всех ошибок. // ** Ограничение - Строка - пронумерованный текст ограничения со вставками "<>". @@ -2349,14 +2360,14 @@ // *** СтрокаОшибки - Строка - строка, в которой найдена ошибка со вставкой "<>". // ** Дополнение - Строка - описание вариантов первых ключевых слов частей ограничения. // -// * ДополнительныеТаблицы - Массив из Структура - с полями: +// * ДополнительныеТаблицы - Массив из Структура: // ** Таблица - Строка - полное имя объекта метаданных. // ** Псевдоним - Строка - имя псевдонима таблицы. // ** УсловиеСоединения - Структура - как у свойства ОграничениеИзменения, но только // узлы: "Поле", "Значение", "Константа", "И", "=". // * ПсевдонимОсновнойТаблицы - Строка - заполнено, если указаны дополнительные таблицы. // * ОграничениеЧтения - Структура - как у свойства ОграничениеИзменения. -// * ОграничениеИзменения - Структура - со свойствами: +// * ОграничениеИзменения - Структура: // // ** Узел - Строка - одна из строк "Поле", "Значение", "Константа", // "И", "Или", "Не", "=", "<>", "В", "ЕстьNull", "Тип", "ТипЗначения", "Выбор", @@ -2383,8 +2394,10 @@ // "Справочник.Организации.ПустаяСсылка". // // Свойства узла Константа: -// ** Значение - Булево, Число, Строка, Неопределено - Ложь, Истина, произвольное -// целое число до 16 разрядов или произвольная строка до 150 символов. +// ** Значение - Булево +// - Число - произвольное целое число до 16 разрядов +// - Строка - произвольная строка до 150 символов +// - Неопределено // // Свойства узлов И, Или: // ** Аргументы - Массив - с элементами: @@ -2415,7 +2428,7 @@ // ** Выбор - Структура - узел Поле. // - Неопределено - условия содержат выражение, а не узел Значение. // ** Когда - Массив - с элементами: -// *** Значение - Структура - со свойствами: +// *** Значение - Структура: // **** Условие - Структура - узел Значение, если свойство Выбор указано, в противном случае // узлы И, Или, Не, =, <>, В (распространяется на вложенное содержимое). // **** Значение - Структура - узел, кроме Выбор. @@ -2429,7 +2442,7 @@ // *** Значение - Строка - полное имя таблицы // ** ПроверятьТипыКромеУказанных - Булево - если Истина, то все типы свойства Поле, // кроме указанных в свойстве Типы. -// ** УточненияСравнения - Соответствие - со свойствами: +// ** УточненияСравнения - Соответствие: // *** Ключ - Строка - уточняемое значение "Неопределено", "Null", "ПустаяСсылка", // <полное имя таблицы>, "Число", "Строка", "Дата", "Булево". // *** Значение - Строка - результат "Ложь", "Истина". @@ -2458,8 +2471,10 @@ // перед записью объекта с табличной частью НаборыЗначенийДоступа. // // Параметры: -// СсылкаНаОбъект - СправочникСсылка.*, ДокументСсылка.*, ... - объект для которого записываются наборы. -// Таблица - РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа - наборы, которые нужно уточнить. +// СсылкаНаОбъект - ЛюбаяСсылка - ссылка на объект из ОпределяемыйТип.ВладелецНаборовЗначенийДоступаОбъект, +// для которого заполняются наборы значений доступа. +// +// Таблица - РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа - наборы, которые нужно уточнить. // Процедура УточнитьНаборыЗначенийДоступа(СсылкаНаОбъект, Таблица) @@ -2886,7 +2901,7 @@ СвойстваГрупп = Новый Структура; СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); - СвойстваВидаДоступа = СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ПоТипам.Получить(ТипЗначенияДоступа); + СвойстваВидаДоступа = СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ПоТипам.Получить(ТипЗначенияДоступа); // См. УправлениеДоступомСлужебный.СвойстваВидаДоступа Если СвойстваВидаДоступа = Неопределено Тогда ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl index 49c5a36f5..f17e4eb00 100644 --- a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl @@ -13,7 +13,7 @@ // но их можно удалить из списка ВидыДоступа, если они не требуются для ограничения прав доступа. // // Параметры: -// ВидыДоступа - ТаблицаЗначений - с колонками: +// ВидыДоступа - ТаблицаЗначений: // * Имя - Строка - имя, используемое в описании поставляемых // профилей групп доступа и текстах ОДД. // * Представление - Строка - представляет вид доступа в профилях и группах доступа. @@ -79,8 +79,8 @@ // Параметры: // Списки - Соответствие - списки с ограничением доступа: // * Ключ - ОбъектМетаданных - список с ограничением доступа. -// * Значение - Булево - Истина - текст ограничения в модуле менеджера. -// - Ложь - текст ограничения в этом переопределяемом +// * Значение - Булево - Истина - текст ограничения в модуле менеджера, +// Ложь - текст ограничения в этом переопределяемом. // модуле в процедуре ПриЗаполненииОграниченияДоступа. // Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт @@ -96,8 +96,8 @@ // разработчика для подсистемы Управление доступом. // // Параметры: -// ОписанияПрофилей - Массив из см. УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа - -// ПараметрыОбновления - Структура - содержит свойства: +// ОписанияПрофилей - Массив из см. УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа +// ПараметрыОбновления - Структура: // * ОбновлятьИзмененныеПрофили - Булево - начальное значение Истина. // * ЗапретитьИзменениеПрофилей - Булево - начальное значение Истина. // Если установить Ложь, тогда поставляемые профили можно не только просматривать, но и редактировать. @@ -141,7 +141,7 @@ // проверку права чтения "ведущего" объекта. // // Параметры: -// ЗависимостиПрав - ТаблицаЗначений - с колонками: +// ЗависимостиПрав - ТаблицаЗначений: // * ВедущаяТаблица - Строка - например Метаданные.БизнесПроцессы.Задание.ПолноеИмя(). // * ПодчиненнаяТаблица - Строка - например Метаданные.Задачи.ЗадачаИсполнителя.ПолноеИмя(). // @@ -154,7 +154,7 @@ // Заполняет описания возможных прав, назначаемых для объектов указанных типов. // // Параметры: -// ВозможныеПрава - ТаблицаЗначений - с колонками: +// ВозможныеПрава - ТаблицаЗначений: // * ВладелецПрав - Строка - полное имя таблицы значения доступа. // // * Имя - Строка - идентификатор права, например ИзменениеПапок. Право с именем УправлениеПравами @@ -271,8 +271,7 @@ // УправлениеДоступомСлужебный.ЗаписатьЗависимыеНаборыЗначенийДоступа. // // Параметры: -// Ссылка - СправочникСсылка, ДокументСсылка, ... - ссылка на объект, для которого -// записаны наборы значений доступа. +// Ссылка - ЛюбаяСсылка - ссылка на объект, для которого записываются наборы значений доступа. // // СсылкиНаЗависимыеОбъекты - Массив - массив элементов типа СправочникСсылка, ДокументСсылка и т. п. // Содержит ссылки на объекты с зависимыми наборами значений доступа. diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index e443126bb..c7335a962 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -16,11 +16,10 @@ // Если группа доступа не будет найдена, она будет создана. // // Параметры: -// Пользователь - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи, -// СправочникСсылка.ГруппыПользователей, -// СправочникСсылка.ГруппыВнешнихПользователей -// - участник, которого нужно включить в группу доступа. +// Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.ГруппыПользователей +// - СправочникСсылка.ГруппыВнешнихПользователей - участник, которого нужно включить в группу доступа. // // ПоставляемыйПрофиль - Строка - строка идентификатора поставляемого профиля. // - СправочникСсылка.ПрофилиГруппДоступа - ссылка на профиль, который @@ -43,8 +42,8 @@ // В качестве значений параметра передается группы исполнителей, состав которых изменился. // // Параметры: -// ГруппыИсполнителей - Например, СправочникСсылка.ГруппыИсполнителейЗадач. -// - Массив значений указанных выше типов. +// ГруппыИсполнителей - СправочникСсылка.ГруппыИсполнителейЗадач - одна группа, +// - Массив из СправочникСсылка.ГруппыИсполнителейЗадач - несколько групп, // - Неопределено - без отбора. // Процедура ОбновитьПользователейГруппИсполнителей(ГруппыИсполнителей = Неопределено) Экспорт @@ -63,6 +62,12 @@ // Проверяет существование вида доступа с указанным именем. // Применяется для автоматизации условного встраивания подсистем. // +// Параметры: +// ИмяВидаДоступа - Строка - имя вида доступа. +// +// Возвращаемое значение: +// Структура: +// Функция ВидДоступаСуществует(ИмяВидаДоступа) Экспорт Возврат СвойстваВидаДоступа(ИмяВидаДоступа) <> Неопределено; @@ -70,6 +75,10 @@ КонецФункции // Возвращает вид интерфейса пользователя для настройки доступа. +// +// Возвращаемое значение: +// Булево +// Функция УпрощенныйИнтерфейсНастройкиПравДоступа() Экспорт УпрощенныйИнтерфейс = Ложь; @@ -91,7 +100,8 @@ // - Массив - массив значений типов, указанных в параметре ТипЗначений. // // Пользователь - Неопределено - вернуть разрешенные значения для авторизованного пользователя. -// - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - вернуть +// - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - вернуть // разрешенные значения для указанного пользователя. // // ВернутьВсе - Булево - если установить Истина, тогда будут возвращены все значение даже тогда, @@ -258,7 +268,7 @@ ЕстьИспользуемыеВидыДоступа = Ложь; Для Каждого ТекущийТип Из ТипыЗначений Цикл - Свойства = СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТекущийТип); + Свойства = СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТекущийТип); // См. СвойстваВидаДоступа Если Свойства = Неопределено Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Тип ""%1"" не является типом значений доступа'"), Строка(ТекущийТип)); @@ -511,6 +521,7 @@ // // Параметры: // Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// БезПроверкиВыполненияОбновленияИБ - Булево // Процедура УстановитьОбновлениеДоступа(Использование, БезПроверкиВыполненияОбновленияИБ = Ложь) Экспорт @@ -565,10 +576,9 @@ // Функция должна вызываться перед функцией НастройкиВнедрения, чтобы собрать весь пакет ошибок. // // Возвращаемое значение: -// Массив - со значениями: -// * Структура - со свойствами: -// * ПолноеИмя - Строка - полное имя объекта метаданных. -// * ТекстОшибки - Строка - текст ошибки в ограничении доступа. +// Массив из Структура: +// * ПолноеИмя - Строка - полное имя объекта метаданных. +// * ТекстОшибки - Строка - текст ошибки в ограничении доступа. // Функция ОшибкиОграниченийДоступа() Экспорт @@ -619,51 +629,48 @@ // - Структура - только для вызова из функции РезультатПроверкиОграниченияДоступа. // // Возвращаемое значение: -// Структура - со свойствами: -// * ОграниченияВРолях - Структура - со свойствами: -// * ДляПользователей - Соответствие - со свойствами, как для внешних пользователей (ниже). -// * ДляВнешнихПользователей - Соответствие - со свойствами: -// * Ключ - Строка - полное имя объекта метаданных (списка). Имя коллекции на английском. +// Структура: +// * ОграниченияВРолях - Структура: +// ** ДляПользователей - Соответствие - со свойствами, как для внешних пользователей (ниже). +// ** ДляВнешнихПользователей - Соответствие: +// *** Ключ - Строка - полное имя объекта метаданных (списка). Имя коллекции на английском. // В форме объекта должна вставка ПриЧтенииНаСервере. -// * Значение - Структура - со свойствами: -// * ШаблонДляОбъекта - Булево - если Истина, тогда используется шаблон #ДляОбъекта, -// если Ложь, тогда используется шаблон #ДляРегистра. -// * Параметры - Массив - параметры шаблона (для объекта 1, для регистра 6). -// * Значение - Строка - например, имя поля "Владелец" или -// опорного поля регистра "Организация". +// *** Значение - Структура: +// **** ШаблонДляОбъекта - Булево - если Истина, тогда используется шаблон #ДляОбъекта, +// если Ложь, тогда используется шаблон #ДляРегистра. +// **** Параметры - Массив из Строка - параметры шаблона (для объекта 1, для регистра 6). +// Например, имя поля "Владелец" или опорного поля регистра "Организация". // -// * ПредопределенныеИдентификаторы - Соответствие - со свойствами: -// * Ключ - Строка - имя требуемого предопределенного элемента справочника -// ИдентификаторыОбъектовМетаданных или ИдентификаторыОбъектовРасширений -// в формате "<ИмяСправочника>.<ИмяПредопределенного>". -// * Значение - Строка - полное имя соответствующего объекта метаданных. +// * ПредопределенныеИдентификаторы - Соответствие: +// ** Ключ - Строка - имя требуемого предопределенного элемента справочника +// ИдентификаторыОбъектовМетаданных или ИдентификаторыОбъектовРасширений +// в формате "<ИмяСправочника>.<ИмяПредопределенного>". +// ** Значение - Строка - полное имя соответствующего объекта метаданных. // // * ВладельцыЗначенийКлючейДоступа - Структура - для группы определяемых типов: -// * Ссылки - Массив - полные имена типов ссылки (имя коллекции на английском). -// * Документы - Массив - полные имена типов объекта (имя коллекции на английском). -// * Объекты - Массив - то же, что в предыдущем пункте. -// * НаборыЗаписей - Массив - то же, что в предыдущем пункте. -// * НаборыЗаписейРегистраРасчета - Массив - то же, что в предыдущем пункте. +// ** Ссылки - Массив - полные имена типов ссылки (имя коллекции на английском). +// ** Документы - Массив - полные имена типов объекта (имя коллекции на английском). +// ** Объекты - Массив - то же, что в предыдущем пункте. +// ** НаборыЗаписей - Массив - то же, что в предыдущем пункте. +// ** НаборыЗаписейРегистраРасчета - Массив - то же, что в предыдущем пункте. // // * ЗначенияДоступа - Массив - полные имена типов ссылки (имя коллекции на английском). // Для дополнения определяемого типа ЗначениеДоступа. // -// * ТипыИзмеренийРегистровКлючей - Соответствие - для изменений с именем Поле* -// регистра КлючиДоступаКРегистрам и регистров КлючиДоступаКРегистру*: -// * Ключ - Строка - имя регистра. -// * Значение - Структура - со свойствами: -// * ИменаТипов - Массив - со значениями: -// * Значение - Строка - полное имя типа (на английском). -// * ПоляРегистров - Соответствие - со свойствами: -// * Ключ - полное имя регистра, который ограничивается. -// * Значение - Массив - порядок полей соответствуют служебным полям (Поле1, Поле2, ...): -// * Значение - Структура - со свойствам: -// * Поле - Строка - имя поля регистра. -// * Тип - ОписаниеТипов - типы поля регистра. -// * ПоляРегистровПоТипам - Соответствие - со свойствами: -// * Ключ - полное имя типа (на английском). -// * Значение - Массив - со значениями: -// * Значение - полное имя поля, например, +// * ТипыИзмеренийРегистровКлючей - Соответствие - со свойствами: +// Для измерений с именем Поле регистра КлючиДоступаКРегистрам и регистров КлючиДоступаКРегистру<*>: +// ** Ключ - Строка - имя регистра. +// ** Значение - Структура: +// *** ИменаТипов - Массив из Строка - полные имена типов (на английском). +// *** ПоляРегистров - Соответствие: +// **** Ключ - Строка - полное имя регистра, который ограничивается. +// **** Значение - Массив из Структура - со свойствами: +// Порядок полей соответствуют служебным полям Поле1, Поле2, ... +// ***** Поле - Строка - имя поля регистра. +// ***** Тип - ОписаниеТипов - типы поля регистра. +// *** ПоляРегистровПоТипам - Соответствие: +// **** Ключ - Строка - полное имя типа (на английском). +// **** Значение - Массив из Строка - полные имена полей, например, // "РегистрСведений.ДополнительныеСведения.Свойство". // Функция НастройкиВнедрения(ДействующиеПараметры = Неопределено) Экспорт @@ -757,9 +764,8 @@ // // Параметры: // ПолноеИмя - Строка - полное имя объекта метаданных. -// ДополнительныеПараметры -// - Неопределено - проверить и вернуть текущее ограничение. -// - Структура - со свойствами: +// ДополнительныеПараметры - Неопределено - проверить и вернуть текущее ограничение. +// - Структура: // * Текст - Строка - новый текст ограничения для пользователей. // * ТекстДляВнешнихПользователей - Строка - новый текст ограничения для внешних пользователей. // * УчитыватьЗависимости - Булево - учитывать зависимости между ограничениями объектов. @@ -768,7 +774,7 @@ // Ложь - не используется ни одного. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ОшибкаОписанияОграничения - Строка - если не пустая, то описание ограничения не удалось получить. // Если при этом УчитыватьЗависимости = Истина, то это текст первой ошибки при получении всех описаний. // @@ -776,20 +782,27 @@ // - Булево - возвращает место размещения текста ограничения, // когда Истина - в модуле менеджера, иначе в переопределяемом модуле. // -// * ДляПользователей - Структура - со свойствами: -// * ПроверяемоеОграничение - Неопределено, Строка - проверенный текст ограничения. -// * ОписаниеОшибок - Неопределено, см. УправлениеДоступом.СтруктураОграничения. -// * ОшибкаФормированияПараметровОграничения - Неопределено, Строка - текст ошибки. -// * ОшибкаФормированияТекстовЗапросов - Неопределено, Строка - текст ошибки. -// * ОграничениеПоВладельцуВозможно - Неопределено, Булево - свойство проверенного ограничения. -// * ОграниченияВРолях - Неопределено, Структура - со свойствами: +// * ДляПользователей - Структура: +// * ПроверяемоеОграничение - Неопределено +// - Строка - проверенный текст ограничения. +// * ОписаниеОшибок - см. ОписаниеОшибок +// * ОшибкаФормированияПараметровОграничения - Неопределено +// - Строка - текст ошибки. +// * ОшибкаФормированияТекстовЗапросов - Неопределено +// - Строка - текст ошибки. +// * ОграничениеПоВладельцуВозможно - Неопределено +// - Булево - свойство проверенного ограничения. +// * ОграниченияВРолях - Неопределено +// - Структура: // * ШаблонДляОбъекта - Булево - если Истина, тогда используется шаблон #ДляОбъекта, // если Ложь, тогда используется шаблон #ДляРегистра. // * Параметры - Массив - параметры шаблона (для объекта 1, для регистра 6). // * Значение - Строка - например, имя поля "Владелец" или // опорного поля регистра "Организация". -// * ОграничениеВМодуле - Неопределено, Строка - текст ограничения, который установлен в конфигурации. -// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено, Булево - настройка ограничения, +// * ОграничениеВМодуле - Неопределено +// - Строка - текст ограничения, который установлен в конфигурации. +// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено +// - Булево - настройка ограничения, // установленная в конфигурации. // // * ДляВнешнихПользователей - Структура - со свойствами, как ДляПользователей. @@ -801,11 +814,13 @@ // * ПолеРегистраКлючейДоступаКРегистрам - Строка - типы для одноименного определяемого типа. // * ЗначениеДоступа - Строка - типы для одноименного определяемого типа. // -// * ТипыИзмеренийОтдельногоРегистраКлючей - Неопределено, Структура - со свойствами: +// * ТипыИзмеренийОтдельногоРегистраКлючей - Неопределено +// - Структура: // * ИмяРегистраСведений - Строка - имя регистра ключей доступа. // * ТипыИзмерений - Строка - типы для соответствующих измерений регистра. // -// * ПредопределенныйИдентификатор - Неопределено, Структура - со свойствами +// * ПредопределенныйИдентификатор - Неопределено +// - Структура: // * ИмяСправочника - Строка - имя справочника идентификаторы объектов метаданных (или расширений). // * ИмяПредопределенного - Строка - имя предопределенного в справочнике. // @@ -822,7 +837,7 @@ // ТекстОграничения - Строка - текст ограничения, который будет разобран. // // Возвращаемое значение: -// Структура - возвращаемое значение см. УправлениеДоступом.СтруктураОграничения. +// см. УправлениеДоступом.СтруктураОграничения. // Функция СтруктураОграниченияИзОписания(ПолноеИмя, ТекстОграничения) Экспорт @@ -837,10 +852,10 @@ // Списки - Неопределено - запланировать полное обновление доступа. // - Строка - полное имя объекта метаданных. // - СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор. -// - Массив, ФиксированныйМассив - значения типов указанные выше, кроме Неопределено. +// - Массив +// - ФиксированныйМассив - значения типов указанные выше, кроме Неопределено. // -// ПараметрыПланирования - Неопределено - использовать значения по умолчанию. -// - см. ПараметрыПланированияОбновленияДоступа(). +// ПараметрыПланирования - см. ПараметрыПланированияОбновленияДоступа // Процедура ЗапланироватьОбновлениеДоступа(Списки = Неопределено, ПараметрыПланирования = Неопределено) Экспорт @@ -988,7 +1003,7 @@ ДатаПоследнегоОбновленногоЭлемента = '00010101'; РазмерЗадания = 2; Иначе - ВедущийОбъект = ПараметрыПланирования.ВедущийОбъект; + ВедущийОбъект = ПараметрыПланирования.ВедущийОбъект; // См. ОписаниеВедущегоОбъекта Если ВедущийОбъект <> Неопределено И Не ( ВедущийОбъект.Свойство("ПоКлючамДоступа") Или ВедущийОбъект.Свойство("ПоЗначениямСГруппами") @@ -1100,7 +1115,7 @@ // Конструктор структуры дополнительных параметров для процедуры ЗапланироватьОбновлениеДоступа. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * КлючиДоступаКДанным - Булево - по умолчанию Истина - запланировать обновление ключей доступа // к данным. // * РазрешенныеКлючиДоступа - Булево - по умолчанию Истина - запланировать обновление ключей доступа @@ -1304,7 +1319,7 @@ УстановитьПривилегированныйРежим(Истина); - СвойстваВидовДоступа = СвойстваВидовДоступа(); + СвойстваВидовДоступа = ОписаниеСвойствВидовДоступа(); НачатьТранзакцию(); Попытка @@ -1380,7 +1395,7 @@ Обработчик.Приоритет = 1; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.1.2.386"; + Обработчик.Версия = "3.1.3.136"; Обработчик.Процедура = "Справочники.ГруппыДоступа.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; @@ -1393,7 +1408,7 @@ Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ТаблицыГруппДоступа,РегистрСведений.ЗначенияГруппДоступа,РегистрСведений.ЗначенияГруппДоступаПоУмолчанию"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.1.2.384"; + Обработчик.Версия = "3.1.3.135"; Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.Комментарий = НСтр("ru = 'Обновление данных по изменениям программы.'"); @@ -1441,49 +1456,50 @@ КонецПроцедуры -// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок // // Параметры: -// Массив - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.ИсключенияПоискаСсылок +// ИсключенияПоискаСсылок - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.ИсключенияПоискаСсылок // -Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт +Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт - Массив.Добавить(Метаданные.РегистрыСведений.ГруппыЗначенийДоступа); - Массив.Добавить(Метаданные.РегистрыСведений.ЗависимостиПравДоступа); - Массив.Добавить(Метаданные.РегистрыСведений.ЗначенияГруппДоступа); - Массив.Добавить(Метаданные.РегистрыСведений.ЗначенияГруппДоступаПоУмолчанию); - Массив.Добавить(Метаданные.РегистрыСведений.НаборыЗначенийДоступа); - Массив.Добавить(Метаданные.РегистрыСведений.ПраваРолей); - Массив.Добавить(Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов); - Массив.Добавить(Метаданные.РегистрыСведений.НастройкиПравОбъектов); - Массив.Добавить(Метаданные.РегистрыСведений.ТаблицыГруппДоступа); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ГруппыЗначенийДоступа); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ЗависимостиПравДоступа); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ЗначенияГруппДоступа); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ЗначенияГруппДоступаПоУмолчанию); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.НаборыЗначенийДоступа); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ПраваРолей); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.НастройкиПравОбъектов); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ТаблицыГруппДоступа); - ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(Массив); + ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(ИсключенияПоискаСсылок); КонецПроцедуры // Объекты с отложенным удалением. +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок // // Параметры: -// Массив - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.ИсключенияПоискаСсылок +// ИсключенияПоискаСсылок - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.ИсключенияПоискаСсылок // -Процедура ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(Массив) Экспорт +Процедура ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(ИсключенияПоискаСсылок) Экспорт - Массив.Добавить(Метаданные.Справочники.КлючиДоступа); - Массив.Добавить(Метаданные.Справочники.НаборыГруппДоступа); - Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаВнешнихПользователей); - Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаГруппДоступа); - Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаНаборовГруппДоступа); - Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаКОбъектам); - Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаКРегистрам); - Массив.Добавить(Метаданные.РегистрыСведений.КлючиДоступаПользователей); - Массив.Добавить(Метаданные.РегистрыСведений.ОбновлениеКлючейДоступаКДанным); - Массив.Добавить(Метаданные.РегистрыСведений.ОбновлениеКлючейДоступаПользователей); - Массив.Добавить(Метаданные.РегистрыСведений.ПараметрыОграниченияДоступа); + ИсключенияПоискаСсылок.Добавить(Метаданные.Справочники.КлючиДоступа); + ИсключенияПоискаСсылок.Добавить(Метаданные.Справочники.НаборыГруппДоступа); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.КлючиДоступаВнешнихПользователей); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.КлючиДоступаГруппДоступа); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.КлючиДоступаНаборовГруппДоступа); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.КлючиДоступаКОбъектам); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.КлючиДоступаКРегистрам); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.КлючиДоступаПользователей); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ОбновлениеКлючейДоступаКДанным); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ОбновлениеКлючейДоступаПользователей); + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ПараметрыОграниченияДоступа); Для Каждого РегистрСведений Из Метаданные.РегистрыСведений Цикл Если СтрНачинаетсяС(ВРег(РегистрСведений.Имя), ВРег("КлючиДоступаКРегистру")) Тогда - Массив.Добавить(РегистрСведений); + ИсключенияПоискаСсылок.Добавить(РегистрСведений); КонецЕсли; КонецЦикла; @@ -1494,7 +1510,10 @@ // предопределенных элементов, а также позволяет отказаться от продолжения, если это недопустимо. // // Параметры: -// Объект - СправочникОбъект, ПланВидовХарактеристикОбъект, ПланСчетовОбъект, ПланВидовРасчетаОбъект - +// Объект - СправочникОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект - // объект предопределенного элемента после записи которого обнаружено наличие не уникальности. // ЗаписатьВЖурнал - Булево - возвращаемое значение. Если указать Ложь, тогда сведения о не уникальности не будут // добавлены в журнал регистрации в общем сообщении. @@ -1979,6 +1998,14 @@ Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ПраваДоступа); + МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты["АнализПравДоступа"]); +КонецПроцедуры + +// См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов. +Процедура ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка) Экспорт + + Отчеты["АнализПравДоступа"].ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка); + КонецПроцедуры // Обработчики событий подсистемы КонтрольВеденияУчета. @@ -1986,7 +2013,7 @@ // См. ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовИсключаемыхИзПроверки // // Параметры: -// Объекты - см. ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовИсключаемыхИзПроверки +// Объекты - см. ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовИсключаемыхИзПроверки.Объекты // Процедура ПриОпределенииОбъектовИсключаемыхИзПроверки(Объекты) Экспорт ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(Объекты); @@ -2005,6 +2032,10 @@ // Обработчики событий библиотеки ТехнологияСервиса. // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковВыгрузкиДанных. +// +// Параметры: +// ТаблицаОбработчиков - см. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковВыгрузкиДанных.ТаблицаОбработчиков +// Процедура ПриРегистрацииОбработчиковВыгрузкиДанных(ТаблицаОбработчиков) Экспорт Обработчик = ТаблицаОбработчиков.Добавить(); @@ -2358,21 +2389,21 @@ // Пользователи с ролью "ПолныеПрава" игнорируется. // // Параметры: -// Пользователи - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи. -// Массив значений указанных выше типов. -// - Неопределено - обновить роли всех пользователей. -// - Тип по которому будет найден объект метаданных: -// если будет найден Справочник.ВнешниеПользователи, -// то будут обновлены роли всех внешних пользователей, -// иначе будут обновлены роли всех пользователей. +// ОписаниеПользователей - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// - Массив - значений указанных выше типов. +// - Неопределено - обновить роли всех пользователей. +// - Тип - по которому будет найден объект метаданных: +// если будет найден Справочник.ВнешниеПользователи, +// то будут обновлены роли всех внешних пользователей, +// иначе будут обновлены роли всех пользователей. +// +// ПарольПользователяСервиса - Строка - пароль для авторизации в менеджере сервиса. // -// ПарольПользователяСервиса - Строка - Пароль для авторизации в менеджере -// сервиса. // ЕстьИзменения - Булево - (возвращаемое значение) - в этот параметр возвращается // значение Истина, если производилась запись, иначе не изменяется. // -Процедура ОбновитьРолиПользователей(Знач Пользователи1 = Неопределено, +Процедура ОбновитьРолиПользователей(Знач ОписаниеПользователей = Неопределено, Знач ПарольПользователяСервиса = Неопределено, ЕстьИзменения = Ложь) Экспорт @@ -2381,12 +2412,12 @@ Возврат; КонецЕсли; - Если Пользователи1 = Неопределено Тогда + Если ОписаниеПользователей = Неопределено Тогда МассивПользователей = Неопределено; Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); - ИначеЕсли ТипЗнч(Пользователи1) = Тип("Массив") Тогда - МассивПользователей = Пользователи1; + ИначеЕсли ТипЗнч(ОписаниеПользователей) = Тип("Массив") Тогда + МассивПользователей = ОписаниеПользователей; Если МассивПользователей.Количество() = 0 Тогда Возврат; ИначеЕсли МассивПользователей.Количество() = 1 Тогда @@ -2395,13 +2426,13 @@ Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); КонецЕсли; - ИначеЕсли ТипЗнч(Пользователи1) = Тип("Тип") Тогда - МассивПользователей = Пользователи1; + ИначеЕсли ТипЗнч(ОписаниеПользователей) = Тип("Тип") Тогда + МассивПользователей = ОписаниеПользователей; Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); Иначе МассивПользователей = Новый Массив; - МассивПользователей.Добавить(Пользователи1); - Пользователи.НайтиНеоднозначныхПользователейИБ(Пользователи1); + МассивПользователей.Добавить(ОписаниеПользователей); + Пользователи.НайтиНеоднозначныхПользователейИБ(ОписаниеПользователей); КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -2591,6 +2622,10 @@ КонецПроцедуры // См. УправлениеДоступом.ЕстьОграничениеТаблицыПоВидуДоступа. +// +// Возвращаемое значение: +// см. УправлениеДоступом.ЕстьОграничениеТаблицыПоВидуДоступа +// Функция ЕстьОграничениеТаблицыПоВидуДоступа(Таблица, ВидДоступа, ВсеВидыДоступа) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -2611,7 +2646,7 @@ СвойстваВидаДоступа = СвойстваВидовДоступа.ПоИменам.Получить(ВидДоступа); Если СвойстваВидаДоступа = Неопределено Тогда ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден вид доступа ""%1"", указанный в параметре ВидДоступа.'"), ВидДоступа); + НСтр("ru = 'Не существует вид доступа ""%1"", указанный в параметре ВидДоступа.'"), ВидДоступа); ВызватьИсключение ТекстОшибки; КонецЕсли; ВидДоступаСсылка = СвойстваВидаДоступа.Ссылка; @@ -2625,7 +2660,7 @@ СвойстваВидаДоступа = СвойстваВидовДоступа.ПоИменам.Получить(ТекущийВидДоступа); Если СвойстваВидаДоступа = Неопределено Тогда ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден вид доступа ""%1"", указанный в параметре + НСтр("ru = 'Не существует вид доступа ""%1"", указанный в параметре |ВсеВидыДоступа: ""%2"".'"), ТекущийВидДоступа, ВсеВидыДоступа); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -2641,7 +2676,7 @@ Если Не ВидДоступаУказанВоВсехВидахДоступа Тогда ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вид доступа ""%1"", указанный в параметре ВидДоступа не найден в параметре + НСтр("ru = 'Вид доступа ""%1"", указанный в параметре ВидДоступа не существует в параметре |ВсеВидыДоступа: ""%2"".'"), ВидДоступа, ВсеВидыДоступа); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -2732,7 +2767,7 @@ // Обработчик подписки ОбновитьГруппыЗначенийДоступа на событие ПередЗаписью: // - вызывает метод записи групп значений доступа в -// регистр сведений ГруппыЗначенийДоступа для требуемых объектов метаданных; +// регистр сведений ГруппыЗначенийДоступа для требуемых объектов метаданных. // Процедура ОбновитьГруппыЗначенийДоступа(Знач Объект, Отказ) Экспорт @@ -3103,11 +3138,11 @@ // Возвращает Истина, если вид доступа включен по функциональным опциям для всех сеансов. // // Параметры: -// ВидДоступа - Ссылка - пустая ссылка основного типа. +// ВидДоступа - ОпределяемыйТип.ЗначениеДоступа - пустая ссылка основного типа вида доступа. // - Строка - имя вида доступа. // // Возвращаемое значение: -// Булево - +// Булево // Функция ВидДоступаИспользуется(Знач ВидДоступа) Экспорт @@ -3140,28 +3175,27 @@ // Возвращает свойства вида доступа или всех видов доступа. // // Параметры: -// ВидДоступа - Ссылка - пустая ссылка основного типа; -// - Строка - имя вида доступа; -// - Неопределено - вернуть массив свойств всех видов доступа. +// ВидДоступа - ОпределяемыйТип.ЗначениеДоступа - пустая ссылка основного типа вида доступа. +// - Строка - имя вида доступа. // // Возвращаемое значение: -// Неопределено - когда для вида доступа свойств не найдено. -// Структура - свойства найденного вида доступа, описание которых см. в -// комментарии к функции СвойстваВидовДоступа этого модуля. -// Массив - со значениями: -// * Структура - со свойствами, как у структуры, указанной выше. +// Структура: +// * Имя - Строка +// * Ссылка - ОпределяемыйТип.ЗначениеДоступа +// * ТипЗначений - Тип +// * ТипГруппЗначений - Тип +// * НесколькоГруппЗначений - Булево +// * ДополнительныеТипы - Массив из см. ДополнительныеТипыВидаДоступа +// * ТипыВыбираемыхЗначений - Массив из Тип +// Неопределено // -Функция СвойстваВидаДоступа(Знач ВидДоступа = Неопределено) Экспорт +Функция СвойстваВидаДоступа(ВидДоступа) Экспорт Свойства = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); - Если ВидДоступа = Неопределено Тогда - Возврат Свойства.Массив; - КонецЕсли; - - СвойстваВидаДоступа = Свойства.ПоИменам.Получить(ВидДоступа); - - Если СвойстваВидаДоступа = Неопределено Тогда + Если ТипЗнч(ВидДоступа) = Тип("Строка") Тогда + СвойстваВидаДоступа = Свойства.ПоИменам.Получить(ВидДоступа); + Иначе СвойстваВидаДоступа = Свойства.ПоСсылкам.Получить(ВидДоступа); КонецЕсли; @@ -3173,6 +3207,13 @@ // Процедуры и функции для работы с наборами значений доступа. // Возвращает новые наборы для заполнения табличной части. +// +// Параметры: +// Объект - ОпределяемыйТип.ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект +// +// Возвращаемое значение: +// см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа +// Функция ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект) Экспорт ТипЗначенияОбъект = ТипЗнч(Объект); @@ -3181,7 +3222,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |У объекта типа ""%1"" - |не найдена табличная часть ""Наборы значений доступа"".'"), + |не существует табличная часть ""Наборы значений доступа"".'"), ТипЗначенияОбъект); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -3206,9 +3247,13 @@ // в регистре сведений НаборыЗначенийДоступа. // // Параметры: -// СсылкаИлиОбъект - СправочникСсылка, ДокументСсылка и другие типы ссылок или объектов - ссылка или объект, -// для которого заполняются наборы значений доступа. +// СсылкаИлиОбъект - ЛюбаяСсылка +// - ОпределяемыйТип.ВладелецНаборовЗначенийДоступаОбъект - ссылка или объект, +// для которого записываются наборы значений доступа. // +// ЕстьИзменения - Булево +// - Неопределено +// // ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, // не выполняя лишних, избыточных действий с данными. // См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. @@ -3228,8 +3273,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |Тип объекта ""%1"" - |не найден в подписке на события - |""Записать наборы значений доступа"".'"), + |не существует в подписке на событие ""Записать наборы значений доступа"".'"), ТипЗначенияОбъект); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -3278,8 +3322,9 @@ // Выполняется перед записью в регистр НаборыЗначенийДоступа. // // Параметры: -// СсылкаНаОбъект - СправочникСсылка.*, ДокументСсылка.*, ... -// Таблица - ТаблицаЗначений. +// СсылкаНаОбъект - ЛюбаяСсылка - ссылка на объект для которого заполняются наборы значений доступа. +// Таблица - ТаблицаЗначений +// ДобавитьКэшРеквизиты - Булево // Процедура ПодготовитьНаборыЗначенийДоступаКЗаписи(СсылкаНаОбъект, Таблица, ДобавитьКэшРеквизиты = Ложь) Экспорт @@ -3415,13 +3460,12 @@ // @ИерархияЭлементов - Булево. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, которую требуется настроить для -// редактирования разрешенных значений. +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений // // ЭтоПрофиль - Булево - указывает, что возможна настройка видов доступа // в том числе представление настройки содержит 4 значения, а не 2. // -// ИмяРеквизитаХранилищаТаблиц - Строка, содержащая, например, строку "Объект", которая +// ИмяРеквизитаХранилищаТаблиц - Строка - содержащая, например, строку "Объект", которая // содержит таблицы ВидыДоступа и ЗначенияДоступа (см. ниже). // Если указана пустая строка, тогда считается, // что таблицы хранятся в реквизитах формы. @@ -3436,7 +3480,7 @@ СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); // Заполнение типов значений доступа всех видов доступа. - Для каждого СвойстваВидаДоступа Из СвойстваВидаДоступа() Цикл + Для каждого СвойстваВидаДоступа Из СвойстваВидовДоступа.Массив Цикл Для каждого Тип Из СвойстваВидаДоступа.ТипыВыбираемыхЗначений Цикл МассивТипов = Новый Массив; МассивТипов.Добавить(Тип); @@ -3577,7 +3621,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при выполнении процедуры УправлениеДоступом.УстановитьУсловиеОтбораВЗапросе(). | - |В параметре ИмяПараметраУсловияОтбораИмяПоля не найден разделитель (двоеточие) + |В параметре ИмяПараметраУсловияОтбораИмяПоля не существует разделитель (двоеточие) |в следующей строке формата ""<Имя параметра условия>:<Имя поля>"" |""%1"".'"), ТекущаяСтрока); @@ -3607,11 +3651,11 @@ // если записи набора отличаются от записей в базе данных. // // Параметры: -// Данные - Структура - со свойствами: -// * НаборЗаписей - НаборЗаписей пустой или прочитанный с заданным отбором или без отбора. -// Менеджер регистра для создания набора записей. +// Данные - Структура: +// * НаборЗаписей - РегистрСведенийНаборЗаписей - пустой или прочитанный с заданным отбором или без. +// - РегистрСведенийМенеджер - менеджер регистра для создания набора записей. // -// * НовыеЗаписи - ТаблицаЗначений в формате регистра. +// * НовыеЗаписи - ТаблицаЗначений - в формате регистра. // // * ПоляСравнения - Строка - содержит список полей по значениям которых требуется вычислять // отличие записей набора. Например, "Измерение1, Измерение2, Ресурс1", @@ -3621,10 +3665,10 @@ // отбор уже задан в наборе записей. // Строка - имя поля по которому нужно установить отбор. // -// * ЗначениеОтбора - значение, которое будет установлено в качестве отбора по полю отбора, -// если поле отбора задано. +// * ЗначениеОтбора - Отбор - значение, которое будет установлено в качестве отбора +// по полю отбора, если поле отбора задано. // -// * НаборЗаписейПрочитан - Булево, если Истина, тогда не заданный набор записей уже содержит +// * НаборЗаписейПрочитан - Булево - если Истина, тогда не заданный набор записей уже содержит // прочитанные записи блокировка данных этих записей установлена и // транзакция открыта. // @@ -3632,7 +3676,8 @@ // а лишь выявить необходимость записи и установить // свойство ЕстьИзменения. // -// * ДополнительныеСвойства - Неопределено, Структура. Если Структура, тогда в +// * ДополнительныеСвойства - Структура +// - Неопределено - если Структура, тогда в // объекты <Регистр*>НаборЗаписей в свойство ДополнительныеСвойства // будут вставлены все параметры структуры. // @@ -3671,20 +3716,25 @@ ПолноеИмяРегистра = Метаданные.НайтиПоТипу(ТипЗнч(Данные.НаборЗаписей)).ПолноеИмя(); МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяРегистра); Если Данные.НаборЗаписей = МенеджерРегистра Тогда - Данные.НаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + НаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); // РегистрСведенийНаборЗаписей + Иначе + НаборЗаписей = Данные.НаборЗаписей; // РегистрСведенийНаборЗаписей КонецЕсли; + НовыеЗаписи = Данные.НовыеЗаписи; + ПолеОтбора = Данные.ПолеОтбора; + ЗначениеОтбора = Данные.ЗначениеОтбора; - Если ЗначениеЗаполнено(Данные.ПолеОтбора) Тогда - УстановитьОтбор(Данные.НаборЗаписей.Отбор[Данные.ПолеОтбора], Данные.ЗначениеОтбора); + Если ЗначениеЗаполнено(ПолеОтбора) Тогда + УстановитьОтбор(НаборЗаписей.Отбор[ПолеОтбора], ЗначениеОтбора); КонецЕсли; Если НЕ Данные.НаборЗаписейПрочитан Тогда - ЗаблокироватьОбластьНабораЗаписей(Данные.НаборЗаписей, ПолноеИмяРегистра); - Данные.НаборЗаписей.Прочитать(); + ЗаблокироватьОбластьНабораЗаписей(НаборЗаписей, ПолноеИмяРегистра); + НаборЗаписей.Прочитать(); КонецЕсли; Данные.ПоляСравнения = ?(Данные.ПоляСравнения = Неопределено, - ПоляНабораЗаписей(Данные.НаборЗаписей), Данные.ПоляСравнения); + ПоляНабораЗаписей(НаборЗаписей), Данные.ПоляСравнения); Если Данные.БезПерезаписи Тогда НаборЗаписи = МенеджерРегистра.СоздатьНаборЗаписей(); @@ -3692,7 +3742,7 @@ ОтборЗаписи = Новый Структура(ОписаниеКлючаЗаписи.СтрокаПолей); ПоляОстальныхИзмерений = Новый Массив; Для каждого Поле Из ОписаниеКлючаЗаписи.МассивПолей Цикл - Если Поле <> Данные.ПолеОтбора Тогда + Если Поле <> ПолеОтбора Тогда ПоляОстальныхИзмерений.Добавить(Поле); КонецЕсли; КонецЦикла; @@ -3700,33 +3750,34 @@ Для каждого Поле Из ПоляОстальныхИзмерений Цикл УдаляемыеЗаписи.Колонки.Добавить(Поле); КонецЦикла; - Данные.НовыеЗаписи = Данные.НовыеЗаписи.Скопировать(); + Данные.НовыеЗаписи = НовыеЗаписи.Скопировать(); + НовыеЗаписи = Данные.НовыеЗаписи; КонецЕсли; ЕстьТекущиеИзменения = Ложь; Если ИзмененныеЗаписи = Неопределено Тогда - Если Данные.НаборЗаписей.Количество() = Данные.НовыеЗаписи.Количество() ИЛИ Данные.БезПерезаписи Тогда + Если НаборЗаписей.Количество() = НовыеЗаписи.Количество() ИЛИ Данные.БезПерезаписи Тогда Отбор = Новый Структура(Данные.ПоляСравнения); - Данные.НовыеЗаписи.Индексы.Добавить(Данные.ПоляСравнения); - Для каждого Запись Из Данные.НаборЗаписей Цикл + НовыеЗаписи.Индексы.Добавить(Данные.ПоляСравнения); + Для Каждого Запись Из НаборЗаписей Цикл ЗаполнитьЗначенияСвойств(Отбор, Запись); - НайденныеСтроки = Данные.НовыеЗаписи.НайтиСтроки(Отбор); + НайденныеСтроки = НовыеЗаписи.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() = 0 Тогда ЕстьТекущиеИзменения = Истина; ЕстьИзменения = Истина; Если Данные.БезПерезаписи Тогда ЗаполнитьЗначенияСвойств(ОтборЗаписи, Запись); - Если Данные.НовыеЗаписи.НайтиСтроки(ОтборЗаписи).Количество() = 0 Тогда + Если НовыеЗаписи.НайтиСтроки(ОтборЗаписи).Количество() = 0 Тогда ЗаполнитьЗначенияСвойств(УдаляемыеЗаписи.Добавить(), ОтборЗаписи); КонецЕсли; Иначе Прервать; КонецЕсли; ИначеЕсли Данные.БезПерезаписи Тогда - Данные.НовыеЗаписи.Удалить(НайденныеСтроки[0]); + НовыеЗаписи.Удалить(НайденныеСтроки[0]); КонецЕсли; КонецЦикла; - Если Данные.БезПерезаписи И Данные.НовыеЗаписи.Количество() > 0 Тогда + Если Данные.БезПерезаписи И НовыеЗаписи.Количество() > 0 Тогда ЕстьТекущиеИзменения = Истина; ЕстьИзменения = Истина; КонецЕсли; @@ -3735,17 +3786,17 @@ ЕстьИзменения = Истина; КонецЕсли; Иначе - Если Данные.НаборЗаписей.Количество() <> Данные.НовыеЗаписи.Количество() Тогда + Если НаборЗаписей.Количество() <> НовыеЗаписи.Количество() Тогда ЕстьТекущиеИзменения = Истина; ЕстьИзменения = Истина; КонецЕсли; - Если Данные.НаборЗаписей.Количество() > Данные.НовыеЗаписи.Количество() Тогда - ИзмененныеЗаписи = Данные.НаборЗаписей.Выгрузить(); - ИскомыеЗаписи = Данные.НовыеЗаписи; + Если НаборЗаписей.Количество() > НовыеЗаписи.Количество() Тогда + ИзмененныеЗаписи = НаборЗаписей.Выгрузить(); + ИскомыеЗаписи = НовыеЗаписи; ВидИзмененияСтроки = -1; Иначе - ИзмененныеЗаписи = Данные.НовыеЗаписи.Скопировать(); - ИскомыеЗаписи = Данные.НаборЗаписей.Выгрузить(); + ИзмененныеЗаписи = НовыеЗаписи.Скопировать(); + ИскомыеЗаписи = НаборЗаписей.Выгрузить(); ВидИзмененияСтроки = 1; КонецЕсли; ИзмененныеЗаписи.Колонки.Добавить("ВидИзмененияСтроки", Новый ОписаниеТипов("Число")); @@ -3775,8 +3826,8 @@ Если Данные.БезПерезаписи Тогда УстановитьДополнительныеСвойства(НаборЗаписи, Данные.ДополнительныеСвойства); Для каждого Строка Из УдаляемыеЗаписи Цикл - Если ЗначениеЗаполнено(Данные.ПолеОтбора) Тогда - УстановитьОтбор(НаборЗаписи.Отбор[Данные.ПолеОтбора], Данные.ЗначениеОтбора); + Если ЗначениеЗаполнено(ПолеОтбора) Тогда + УстановитьОтбор(НаборЗаписи.Отбор[ПолеОтбора], ЗначениеОтбора); КонецЕсли; Для каждого Поле Из ПоляОстальныхИзмерений Цикл УстановитьОтбор(НаборЗаписи.Отбор[Поле], Строка[Поле]); @@ -3784,9 +3835,9 @@ ЗаписатьОбъектИлиНаборЗаписей(Данные, НаборЗаписи); КонецЦикла; НаборЗаписи.Добавить(); - Для каждого Строка Из Данные.НовыеЗаписи Цикл - Если ЗначениеЗаполнено(Данные.ПолеОтбора) Тогда - УстановитьОтбор(НаборЗаписи.Отбор[Данные.ПолеОтбора], Данные.ЗначениеОтбора); + Для каждого Строка Из НовыеЗаписи Цикл + Если ЗначениеЗаполнено(ПолеОтбора) Тогда + УстановитьОтбор(НаборЗаписи.Отбор[ПолеОтбора], ЗначениеОтбора); КонецЕсли; Для каждого Поле Из ПоляОстальныхИзмерений Цикл УстановитьОтбор(НаборЗаписи.Отбор[Поле], Строка[Поле]); @@ -3795,9 +3846,9 @@ ЗаписатьОбъектИлиНаборЗаписей(Данные, НаборЗаписи); КонецЦикла; Иначе - УстановитьДополнительныеСвойства(Данные.НаборЗаписей, Данные.ДополнительныеСвойства); - Данные.НаборЗаписей.Загрузить(Данные.НовыеЗаписи); - ЗаписатьОбъектИлиНаборЗаписей(Данные, Данные.НаборЗаписей); + УстановитьДополнительныеСвойства(НаборЗаписей, Данные.ДополнительныеСвойства); + НаборЗаписей.Загрузить(НовыеЗаписи); + ЗаписатьОбъектИлиНаборЗаписей(Данные, НаборЗаписей); КонецЕсли; КонецЕсли; @@ -3808,37 +3859,44 @@ // если изменений нет, перезапись не производится. // // Параметры: -// Данные - Структура - со свойствами: -// * МенеджерРегистра - Менеджер регистра для создания типа <Регистр*>НаборЗаписей. +// Данные - Структура: +// * МенеджерРегистра - РегистрСведенийМенеджер - менеджер регистра для создания набора записей. // -// * НовыеЗаписи - ТаблицаЗначений в формате регистра. +// * НовыеЗаписи - ТаблицаЗначений - в формате регистра. // // * ПоляСравнения - Строка - содержит список полей по значениям которых требуется // вычислять отличие записей набора, например, "Измерение1, Измерение2, // Ресурс1", а реквизит ДатаИзменения не входит в список. // // * ИмяПервогоИзмерения - Неопределено - нет отбора по измерению. -// Строка - содержит имя первого измерения, для которого задано +// - Строка - содержит имя первого измерения, для которого задано // несколько значений. -// +// // * ЗначенияПервогоИзмерения - Неопределено - нет отбора по измерению, аналогично, // ИмяПервогоИзмерения = Неопределено. -// ЛюбаяСсылка - содержит одно значение отбора регистра для +// - ЛюбаяСсылка - содержит одно значение отбора регистра для // обновляемых записей. -// Массив - содержит массив значений отбора регистра для +// - Массив - содержит массив значений отбора регистра для // обновляемых записей, пустой массив - значит // действий не требуется. // -// * ИмяВторогоИзмерения - аналогично ИмяПервогоИзмерения. -// * ЗначенияВторогоИзмерения - аналогично ЗначенияПервогоИзмерения. -// * ИмяТретьегоИзмерения - аналогично ИмяПервогоИзмерения. -// * ЗначенияТретьегоИзмерения - аналогично ЗначенияПервогоИзмерения. +// * ИмяВторогоИзмерения - Неопределено +// - Строка - аналогично ИмяПервогоИзмерения. +// * ЗначенияВторогоИзмерения - Неопределено +// - ЛюбаяСсылка +// - Массив - аналогично ЗначенияПервогоИзмерения. +// * ИмяТретьегоИзмерения - Неопределено +// - Строка - аналогично ИмяПервогоИзмерения. +// * ЗначенияТретьегоИзмерения - Неопределено +// - ЛюбаяСсылка +// - Массив - аналогично ЗначенияПервогоИзмерения. // // * ТолькоПроверка - Булево - если Истина, тогда не выполнять запись, // а лишь выявить необходимость записи и установить // свойство ЕстьИзменения. // -// * ДополнительныеСвойства - Неопределено, Структура. Если Структура, тогда в +// * ДополнительныеСвойства - Неопределено +// - Структура - если Структура, тогда в // объекты <Регистр*>НаборЗаписей в свойство // ДополнительныеСвойства будут вставлены все параметры структуры. // @@ -3915,8 +3973,8 @@ Если Данные.ИмяВторогоИзмерения = Неопределено Тогда ЗаписьНесколькимиНаборами = Ложь; Иначе - ЗаписьНесколькимиНаборами = ЗаписьНесколькимиНаборами( - Данные, Новый Структура, Данные.ИмяПервогоИзмерения, Данные.ЗначенияПервогоИзмерения); + ЗаписьНесколькимиНаборами = ЗаписьНесколькимиНаборами(Данные, + Новый Структура, Данные.ИмяПервогоИзмерения, Данные.ЗначенияПервогоИзмерения); КонецЕсли; Если ЗаписьНесколькимиНаборами Тогда @@ -3932,8 +3990,8 @@ Если Данные.ИмяТретьегоИзмерения = Неопределено Тогда ЗаписьНесколькимиНаборами = Ложь; Иначе - ЗаписьНесколькимиНаборами = ЗаписьНесколькимиНаборами( - Данные, Отбор, Данные.ИмяВторогоИзмерения, Данные.ЗначенияВторогоИзмерения); + ЗаписьНесколькимиНаборами = ЗаписьНесколькимиНаборами(Данные, + Отбор, Данные.ИмяВторогоИзмерения, Данные.ЗначенияВторогоИзмерения); КонецЕсли; Если ЗаписьНесколькимиНаборами Тогда @@ -4037,23 +4095,23 @@ // Обновляет регистр сведений по данным в таблице значений ИзмененияСтрок. // // Параметры: -// Данные - Структура - со свойствами: +// Данные - Структура: // -// * МенеджерРегистра - Менеджер регистра для создания типа <Регистр*>НаборЗаписей. +// * МенеджерРегистра - РегистрСведенийМенеджер - менеджер регистра для создания набора записей. // -// * ИзмененияСоставаСтрок - ТаблицаЗначений, содержащей поля регистра и +// * ИзмененияСоставаСтрок - ТаблицаЗначений - содержащей поля регистра и // поле ВидИзмененияСтроки (Число): -// 1 - значит, что строку нужно добавить, -// -1 - значит, что строку нужно удалить. +// " 1" - значит, что строку нужно добавить, +// "-1" - значит, что строку нужно удалить. // -// * ФиксированныйОтбор - Структура, содержащая имя измерения в ключе и значение +// * ФиксированныйОтбор - Структура - содержащая имя измерения в ключе и значение // отбора в значении. Может быть указана, когда измерений // более 3-х и заранее известно, что по измерениям сверх 3-х // будет единственное значение. Измерения указанные в // фиксированном отборе не используются при формировании // наборов записей для выполнения обновления. // -// * ИзмеренияОтбора - Строка измерений перечисленных через запятую, которые +// * ИзмеренияОтбора - Строка - измерений перечисленных через запятую, которые // нужно использовать при формировании наборов записей // для выполнения обновления (не более 3-х). Не указанные // измерения будут превращены в фиксированный отбор, @@ -4063,7 +4121,8 @@ // а лишь выявить необходимость записи и установить // свойство ЕстьИзменения. // -// * ДополнительныеСвойства - Неопределено, Структура. Если Структура, тогда в +// * ДополнительныеСвойства - Неопределено +// - Структура - если Структура, тогда в // объекты <Регистр*>НаборЗаписей в свойство // ДополнительныеСвойства будут вставлены все параметры структуры. // @@ -4171,10 +4230,10 @@ // // Параметры: // ОписаниеОбъектаМетаданных - ОбъектМетаданных, -// - Тип, по которому можно найти объект метаданных, +// - Тип - по которому можно найти объект метаданных, // - Строка - полное имя объекта метаданных. // Возвращаемое значение: -// Ссылка - . +// ЛюбаяСсылка // Функция ПустаяСсылкаОбъектаМетаданных(ОписаниеОбъектаМетаданных) Экспорт @@ -4224,18 +4283,18 @@ // Параметры: // ТекстЗапросаВыбораНовых - Строка. // -// ПоляИОтбор - Массив элементов типа Структура("ИмяПоля", ИмяПараметраУсловияОтбора). +// ПоляИОтбор - Массив из Структура - со свойствами "ИмяПоля", ИмяПараметраУсловияОтбора. // -// ПолноеИмяРегистра -// - Строка - запрос старых формируется автоматически. -// Неопределено - запрос старых берется из следующего параметра. +// ПолноеИмяРегистра - Строка - запрос старых формируется автоматически. +// - Неопределено - запрос старых берется из следующего параметра. // -// ТекстЗапросаВыбораСтарых -// - Строка - запрос старых, с учетом нестандартных отборов. -// - Неопределено - когда полное имя регистра определено. +// ТекстЗапросовВременныхТаблиц - Строка - запрос временных таблиц, если требуется. +// +// ТекстЗапросаВыбораСтарых - Строка - запрос старых, с учетом нестандартных отборов. +// - Неопределено - когда полное имя регистра определено. // // Возвращаемое значение: -// Строка - текст запрос с учетом оптимизации для СУБД PostgreSQL. +// Строка - текст запроса // Функция ТекстЗапросаВыбораИзменений(ТекстЗапросаВыбораНовых, ПоляИОтбор, @@ -4283,12 +4342,12 @@ ТекстЗапросаВыбораСтарых = СтрЗаменить(ТекстЗапросаВыбораСтарых, "ПолноеИмяРегистра", ПолноеИмяРегистра); - Если СтрНайти(ТекстЗапросаВыбораНовых, "&ПодстановкаПоляВидИзмененияСтроки") = 0 Тогда + Если СтрНайти(ТекстЗапросаВыбораСтарых, "&ПодстановкаПоляВидИзмененияСтроки") = 0 Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в значении параметра ТекстЗапросаВыбораСтарых |процедуры ТекстЗапросаВыбораИзменений модуля УправлениеДоступомСлужебный. | - |В тексте запроса не найдена строка ""%1"".'"), + |В тексте запроса отсутствует строка ""%1"".'"), "&ПодстановкаПоляВидИзмененияСтроки"); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -4301,7 +4360,7 @@ НСтр("ru = 'Ошибка в значении параметра ТекстЗапросаВыбораНовых |процедуры ТекстЗапросаВыбораИзменений модуля УправлениеДоступомСлужебный. | - |В тексте запроса не найдена строка ""%1"".'"), + |В тексте запроса отсутствует строка ""%1"".'"), "&ПодстановкаПоляВидИзмененияСтроки"); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -4315,11 +4374,7 @@ | &ВыбираемыеПоля, | СУММА(ВсеСтроки.ВидИзмененияСтроки) КАК ВидИзмененияСтроки |ИЗ - | (&ТекстЗапросаВыбораНовых - | - | ОБЪЕДИНИТЬ ВСЕ - | - | &ТекстЗапросаВыбораСтарых) КАК ВсеСтроки + | ТекстЗапросаВыбораНовыхИСтарыхСтрок КАК ВсеСтроки | |СГРУППИРОВАТЬ ПО | &ПоляГруппировки @@ -4327,9 +4382,16 @@ |ИМЕЮЩИЕ | СУММА(ВсеСтроки.ВидИзмененияСтроки) <> 0"; + ТекстЗапросаВыбораНовыхИСтарыхСтрок = + " (" + ТекстЗапросаВыбораНовых + " + | + | ОБЪЕДИНИТЬ ВСЕ + | + | " + ТекстЗапросаВыбораСтарых + ")"; + ВыбираемыеПоля = ""; ПоляГруппировки = ""; - Для каждого ОписаниеПоля Из ПоляИОтбор Цикл + Для Каждого ОписаниеПоля Из ПоляИОтбор Цикл // Сборка выбираемых полей. ВыбираемыеПоля = ВыбираемыеПоля + СтрЗаменить( " @@ -4348,17 +4410,14 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыбираемыеПоля,", ВыбираемыеПоля); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляГруппировки", ПоляГруппировки); - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, "&ТекстЗапросаВыбораНовых", ТекстЗапросаВыбораНовых); - - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, "&ТекстЗапросаВыбораСтарых", ТекстЗапросаВыбораСтарых); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "ТекстЗапросаВыбораНовыхИСтарыхСтрок", ТекстЗапросаВыбораНовыхИСтарыхСтрок); Если ЗначениеЗаполнено(ТекстЗапросовВременныхТаблиц) Тогда - ТекстЗапроса = ТекстЗапросовВременныхТаблиц - + " - |; - |" + ТекстЗапроса; + ТекстЗапроса = ТекстЗапросовВременныхТаблиц + + " + |; + |" + ТекстЗапроса; КонецЕсли; Возврат ТекстЗапроса; @@ -4371,11 +4430,8 @@ // Заполняет обработчик разделенных данных, зависимый от изменения неразделенных данных. // // Параметры: -// Обработчики - ТаблицаЗначений, Неопределено - см. описание -// функции НоваяТаблицаОбработчиковОбновления общего модуля -// ОбновлениеИнформационнойБазы. -// В случае прямого вызова (не через механизм обновления -// версии ИБ) передается Неопределено. +// Параметры - Структура - структура параметров обработчиков: +// * РазделенныеОбработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления // Процедура ЗаполнитьОбработчикиРазделенныхДанных(Параметры = Неопределено) Экспорт @@ -4516,6 +4572,9 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. +// Возвращаемое значение: +// см. РегистрыСведений.ПраваРолей.ТаблицаПравРолей +// Функция ПраваРолейРасширений() Экспорт ПраваРолейРасширений = Неопределено; @@ -4526,6 +4585,9 @@ КонецФункции +// Параметры: +// ПраваРолейРасширений - см. РегистрыСведений.ПраваРолей.ТаблицаПравРолей +// Процедура ОбновитьТаблицыГруппДоступаДляПодключенныхРасширений(ПраваРолейРасширений = Неопределено) УстановитьОтключениеБезопасногоРежима(Истина); @@ -4631,6 +4693,11 @@ КонецПроцедуры // Для процедуры ОбновитьТаблицыГруппДоступаДляПодключенныхРасширений. +// +// Параметры: +// ПраваРолейРасширений - см. РегистрыСведений.ПраваРолей.ТаблицаПравРолей +// ПустыеПраваРолейРасширений - см. РегистрыСведений.ПраваРолей.ТаблицаПравРолей +// Функция ЭтоПраваРолейРасширений(ПраваРолейРасширений, ПустыеПраваРолейРасширений) Если ТипЗнч(ПраваРолейРасширений) <> Тип("ТаблицаЗначений") Тогда @@ -4656,6 +4723,11 @@ КонецФункции // Для процедуры ОбновитьТаблицыГруппДоступаДляПодключенныхРасширений. +// +// Параметры: +// НовыеПраваРолейРасширений - см. РегистрыСведений.ПраваРолей.ТаблицаПравРолей +// СтарыеПраваРолейРасширений - см. РегистрыСведений.ПраваРолей.ТаблицаПравРолей +// Функция ПраваРолейРасширенийИзменились(НовыеПраваРолейРасширений, СтарыеПраваРолейРасширений) Если НовыеПраваРолейРасширений.Количество() <> СтарыеПраваРолейРасширений.Количество() Тогда @@ -4982,6 +5054,8 @@ Возврат; КонецЕсли; + ЭлементДанных = ЭлементДанных; // УдалениеОбъекта + // Регистрация измененного профиля для обновления вспомогательных данных после загрузки. Если ТипЗнч(ЭлементДанных.Ссылка) = Тип("СправочникСсылка.ПрофилиГруппДоступа") Тогда Справочники.ПрофилиГруппДоступа.ЗарегистрироватьПрофильИзмененныйПриЗагрузке(ЭлементДанных); @@ -5055,8 +5129,7 @@ Возврат Ложь; КонецЕсли; - ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПоставляемыхПрофилей(); - СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить(ИдентификаторПоставляемогоПрофиля); + СвойстваПрофиля = Справочники.ПрофилиГруппДоступа.СвойстваПоставляемогоПрофиля(ИдентификаторПоставляемогоПрофиля); Если СвойстваПрофиля = Неопределено ИЛИ СвойстваПрофиля.ВидыДоступа.Количество() <> 0 Тогда @@ -5215,7 +5288,8 @@ // которая используется для перезаписи зависимых наборов значений доступа. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... +// Объект - ЛюбаяСсылка +// - ОпределяемыйТип.ВладелецНаборовЗначенийДоступаОбъект - // В случае вызова с клиента можно передать только ссылку, а нужен объект. // Если получена ссылка, то по ней будет получен объект. // ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, @@ -5239,8 +5313,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |Тип объекта ""%1"" - |не найден в подписках на события - |""Записать наборы значений доступа"".'"), + |не существует в подписках на события ""Записать наборы значений доступа"".'"), ТипЗначенияОбъект); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -5275,8 +5348,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |Тип объекта ""%1"" - |не найден в подписках на события - |""Заполнить наборы значений доступа табличных частей"".'"), + |не существует в подписках на события ""Заполнить наборы значений доступа табличных частей"".'"), ТипЗначенияОбъект); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -5353,7 +5425,8 @@ // то есть организуется рекурсия. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... +// Объект - ЛюбаяСсылка +// - ОпределяемыйТип.ВладелецНаборовЗначенийДоступаОбъект - // В случае вызова с клиента можно передать только ссылку, а нужен объект. // Если получена ссылка, то по ней будет получен объект. // @@ -5378,8 +5451,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |Тип объекта ""%1"" - |не найден в подписке на события - |""Записать зависимые наборы значений доступа"".'"), + |не существует в подписке на события ""Записать зависимые наборы значений доступа"".'"), ТипЗначенияОбъект); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -5518,7 +5590,7 @@ ТекстЗапроса = "ВЫБРАТЬ - | Пользователи.Ссылка КАК Ссылка, + | Пользователи.Ссылка КАК Пользователь, | Пользователи.ИдентификаторПользователяИБ |ИЗ | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -5584,7 +5656,7 @@ Итог.Вставить("Администраторы", Новый Соответствие); Для каждого Строка Из РезультатыЗапросов[ПоследнийРезультат-3].Выгрузить() Цикл - Итог.Администраторы.Вставить(Строка.Ссылка, Истина); + Итог.Администраторы.Вставить(Строка.Пользователь, Истина); КонецЦикла; Итог.Вставить("ИдентификаторыПользователейИБ", РезультатыЗапросов[ПоследнийРезультат-2].Выгрузить()); @@ -5636,7 +5708,7 @@ Процедура ЗарегистрироватьНенайденнуюРоль(ОписаниеРоли, Пользователь) - // Новые роли не найденные в метаданных. + // Новые роли, отсутствующие в метаданных. Профили = ПрофилиПользователяСРолью(Пользователь, ОписаниеРоли.РольСсылка); Для Каждого Профиль Из Профили Цикл @@ -5648,9 +5720,8 @@ Профиль, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При обновлении ролей пользователя ""%1"" - |роль ""%2"" - |профиля групп доступа ""%3"" - |не найдена в метаданных.'"), + |несуществующая роль ""%2"" + |профиля групп доступа ""%3"".'"), Строка(Пользователь), ОписаниеРоли.Роль, Строка(Профиль)), @@ -5934,12 +6005,13 @@ // Получение количества записей для чтения. Если Отбор.Количество() = 0 Тогда - ТекущиеНовыеЗаписи = Данные.НовыеЗаписи.Скопировать(); + ТекущиеНовыеЗаписи = Данные.НовыеЗаписи.Скопировать(); // ТаблицаЗначений КоличествоДляЧтения = Данные.КоличествоДляЧтения; Иначе - ТекущиеНовыеЗаписи = Данные.НовыеЗаписи.Скопировать(Отбор); + ТекущиеНовыеЗаписи = Данные.НовыеЗаписи.Скопировать(Отбор); // ТаблицаЗначений - ИмяПоля = Данные.КоличествоПоЗначениям.Колонки[0].Имя; + КоличествоПоЗначениям = Данные.КоличествоПоЗначениям; // ТаблицаЗначений + ИмяПоля = КоличествоПоЗначениям.Колонки[0].Имя; СтрокаКоличества = Данные.КоличествоПоЗначениям.Найти(Отбор[ИмяПоля], ИмяПоля); КоличествоДляЧтения = ?(СтрокаКоличества = Неопределено, 0, СтрокаКоличества.Количество); КонецЕсли; @@ -5957,7 +6029,7 @@ ЗаблокироватьОбластьНабораЗаписей(Данные.НаборЗаписей, Данные.ПолноеИмяРегистра); Данные.НаборЗаписей.Прочитать(); - НовыеЗаписиНабора = Данные.НаборЗаписей.Выгрузить(); + НовыеЗаписиНабора = Данные.НаборЗаписей.Выгрузить(); // ТаблицаЗначений НовыеЗаписиНабора.Индексы.Добавить(Данные.ПоляСравнения); Для каждого Строка Из КлючиЗаписей Цикл @@ -6357,8 +6429,11 @@ Процедура ЗаполнитьТаблицуВсеВидыДоступаВФорме(Форма) - Для Каждого СвойстваВидаДоступа Из СвойстваВидаДоступа() Цикл - Строка = Форма.ВсеВидыДоступа.Добавить(); + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); + ВсеВидыДоступа = Форма.ВсеВидыДоступа; + + Для Каждого СвойстваВидаДоступа Из СвойстваВидовДоступа.Массив Цикл + Строка = ВсеВидыДоступа.Добавить(); Строка.Ссылка = СвойстваВидаДоступа.Ссылка; Строка.Используется = ВидДоступаИспользуется(Строка.Ссылка); // Обеспечение уникальности представлений. @@ -6367,7 +6442,7 @@ Представление = Строка.Имя; КонецЕсли; Отбор = Новый Структура("Представление", Представление); - Пока Форма.ВсеВидыДоступа.НайтиСтроки(Отбор).Количество() > 0 Цикл + Пока ВсеВидыДоступа.НайтиСтроки(Отбор).Количество() > 0 Цикл Отбор.Представление = Отбор.Представление + " "; КонецЦикла; Строка.Представление = Представление; @@ -6377,35 +6452,37 @@ Процедура ЗаполнитьТаблицуПредставленияВсеРазрешеныВФорме(Форма, ЭтоПрофиль) + ПредставленияВсеРазрешены = Форма.ПредставленияВсеРазрешены; + Если ЭтоПрофиль Тогда - Строка = Форма.ПредставленияВсеРазрешены.Добавить(); + Строка = ПредставленияВсеРазрешены.Добавить(); Строка.Имя = "ВначалеВсеЗапрещены"; Строка.Представление = НСтр("ru = 'Все запрещены, исключения назначаются в группах доступа'"); - Строка = Форма.ПредставленияВсеРазрешены.Добавить(); + Строка = ПредставленияВсеРазрешены.Добавить(); Строка.Имя = "ВначалеВсеРазрешены"; Строка.Представление = НСтр("ru = 'Все разрешены, исключения назначаются в группах доступа'"); - Строка = Форма.ПредставленияВсеРазрешены.Добавить(); + Строка = ПредставленияВсеРазрешены.Добавить(); Строка.Имя = "ВсеЗапрещены"; Строка.Представление = НСтр("ru = 'Все запрещены, исключения назначаются в профиле'"); - Строка = Форма.ПредставленияВсеРазрешены.Добавить(); + Строка = ПредставленияВсеРазрешены.Добавить(); Строка.Имя = "ВсеРазрешены"; Строка.Представление = НСтр("ru = 'Все разрешены, исключения назначаются в профиле'"); Иначе - Строка = Форма.ПредставленияВсеРазрешены.Добавить(); + Строка = ПредставленияВсеРазрешены.Добавить(); Строка.Имя = "ВсеЗапрещены"; Строка.Представление = НСтр("ru = 'Все запрещены'"); - Строка = Форма.ПредставленияВсеРазрешены.Добавить(); + Строка = ПредставленияВсеРазрешены.Добавить(); Строка.Имя = "ВсеРазрешены"; Строка.Представление = НСтр("ru = 'Все разрешены'"); КонецЕсли; - СписокВыбора = Форма.Элементы.ВидыДоступаВсеРазрешеныПредставление.СписокВыбора; + СписокВыбора = Форма.Элементы.ВидыДоступаВсеРазрешеныПредставление.СписокВыбора; // СписокЗначений - Для каждого Строка Из Форма.ПредставленияВсеРазрешены Цикл + Для каждого Строка Из ПредставленияВсеРазрешены Цикл СписокВыбора.Добавить(Строка.Представление); КонецЦикла; @@ -6458,7 +6535,7 @@ Пока Индекс >= 0 Цикл ЗначениеДоступа = Параметры.ЗначенияДоступа[Индекс].ЗначениеДоступа; - СвойстваВидаДоступа = ПоТипамГруппИЗначений.Получить(ТипЗнч(ЗначениеДоступа)); + СвойстваВидаДоступа = ПоТипамГруппИЗначений.Получить(ТипЗнч(ЗначениеДоступа)); // См. СвойстваВидаДоступа Если СвойстваВидаДоступа <> Неопределено Тогда ЗаполнитьЗначенияСвойств(Отбор, Параметры.ЗначенияДоступа[Индекс]); Отбор.Вставить("ВидДоступа", СвойстваВидаДоступа.Ссылка); @@ -6690,6 +6767,16 @@ // Обновление свойств видов доступа. // Для функций СвойстваВидовДоступаДляХранения, ПредставлениеВидовДоступа. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Имя - Строка +// * Представление - Строка +// * ТипЗначений - Тип +// * ТипГруппЗначений - Тип +// * НесколькоГруппЗначений - Булево +// * ДополнительныеТипы - см. НоваяТаблицаДополнительныеТипыВидаДоступа +// Функция ЗаполненныеВидыДоступа() // 1. Заполнение данных, указанных при внедрении. @@ -6709,13 +6796,78 @@ КонецФункции -// Для процедуры ОбновитьОписаниеСвойствВидовДоступа. -// Возвращает свойства видов доступа, заполняемых при внедрении -// в процедуре ПриЗаполненииВидовДоступа -// общего модуля УправлениеДоступомПереопределяемый -// и одноименных обработчиках этого события. +// Для функции ЗаполненныеВидыДоступа и +// процедуры ДобавитьДополнительныеТипыВидаДоступа общего модуля УправлениеДоступом. // -Функция СвойстваВидовДоступа() +// Возвращаемое значение: +// ТаблицаЗначений: +// * ТипЗначений - Тип +// * ТипГруппЗначений - Тип +// * НесколькоГруппЗначений - Булево +// +Функция НоваяТаблицаДополнительныеТипыВидаДоступа() Экспорт + + ДополнительныеТипы = Новый ТаблицаЗначений; + ДополнительныеТипы.Колонки.Добавить("ТипЗначений", Новый ОписаниеТипов("Тип")); + ДополнительныеТипы.Колонки.Добавить("ТипГруппЗначений", Новый ОписаниеТипов("Тип")); + ДополнительныеТипы.Колонки.Добавить("НесколькоГруппЗначений", Новый ОписаниеТипов("Булево")); + + Возврат ДополнительныеТипы; + +КонецФункции + +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * Массив - ФиксированныйМассив из см. СвойстваВидаДоступа +// * ПоИменам - ФиксированноеСоответствие: +// * Ключ - Строка +// * Значение - см. СвойстваВидаДоступа +// * ПоСсылкам - ФиксированноеСоответствие: +// * Ключ - СправочникСсылка +// * Значение - см. СвойстваВидаДоступа +// * ПоТипамЗначений - ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - см. СвойстваВидаДоступа +// * ПоТипамГруппИЗначений - ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - см. СвойстваВидаДоступа +// * ПоТипамЗначенийСИерархией - ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - см. СвойстваВидаДоступа +// * ЗначенияДоступаСГруппами - ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - см. ЗначенияДоступаСГруппами +// * БезГруппДляЗначенияДоступа - ФиксированныйМассив из Строка +// * СОднойГруппойДляЗначенияДоступа - ФиксированныйМассив из Строка +// * ТипыЗначенийДоступаСГруппами - ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - СправочникСсылка +// * ВладелецНаборовЗначенийДоступа - см. СтрокаДанныхДляХеширования. +// +Функция ХранимоеОписаниеСвойствВидовДоступа() Экспорт + + СвойстваВидовДоступа = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы( + "СтандартныеПодсистемы.УправлениеДоступом.СвойстваВидовДоступа"); + + Если СвойстваВидовДоступа = Неопределено Тогда + ОбновитьОписаниеСвойствВидовДоступа(); + КонецЕсли; + + СвойстваВидовДоступа = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы( + "СтандартныеПодсистемы.УправлениеДоступом.СвойстваВидовДоступа"); + + Возврат СвойстваВидовДоступа; + +КонецФункции + +// Для процедуры ОбновитьОписаниеСвойствВидовДоступа. +// Возвращает свойства видов доступа, заполняемых при внедрении в процедуре ПриЗаполненииВидовДоступа +// общего модуля УправлениеДоступомПереопределяемый и одноименных обработчиках этого события. +// +// Возвращаемое значение: +// см. ХранимоеОписаниеСвойствВидовДоступа +// +Функция ОписаниеСвойствВидовДоступа() ВидыДоступа = ЗаполненныеВидыДоступа(); @@ -6728,19 +6880,13 @@ // Т тип групп значений не совпадает с типом значений. // 2. Подготовка различных коллекций свойств видов доступа, используемых при работе программы. - МассивСвойств = Новый Массив; + МассивСвойств = Новый Массив; // Массив из см. СвойстваВидаДоступа ПоСсылкам = Новый Соответствие; ПоИменам = Новый Соответствие; ПоТипамЗначений = Новый Соответствие; ПоТипамГруппИЗначений = Новый Соответствие; - ЗначенияДоступаСГруппами = Новый Структура; - ЗначенияДоступаСГруппами.Вставить("ПоТипам", Новый Соответствие); - ЗначенияДоступаСГруппами.Вставить("ПоТипамСсылок", Новый Соответствие); - ЗначенияДоступаСГруппами.Вставить("ИменаТаблицДляОбновления", Новый Массив); - ЗначенияДоступаСГруппами.Вставить("ТипыГруппЗначенийДляОбновления", Новый Соответствие); - ЗначенияДоступаСГруппами.Вставить("ПоТипамДляОбновления", Новый Соответствие); - ЗначенияДоступаСГруппами.Вставить("ПоТипамСсылокДляОбновления", Новый Соответствие); + ЗначенияДоступаСГруппами = ЗначенияДоступаСГруппами(); Параметры = Новый Структура; Параметры.Вставить("ОпределяемыеТипыЗначенийДоступа", @@ -6763,8 +6909,7 @@ ВсеТипыЗначений = Новый Соответствие; ВсеТипыГруппЗначений = Новый Соответствие; - Для каждого ВидДоступа Из ВидыДоступа Цикл - + Для Каждого ВидДоступа Из ВидыДоступа Цикл Если ВсеИменаВидовДоступа[ВРег(ВидДоступа.Имя)] <> Неопределено Тогда ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Имя вида доступа ""%1"" уже определено.'"), @@ -6779,7 +6924,9 @@ ПроверитьТип(ВидДоступа, ВидДоступа.ТипЗначений, ВсеТипыГруппЗначений, Параметры, , Истина); ПроверитьТип(ВидДоступа, ВидДоступа.ТипГруппЗначений, ВсеТипыЗначений, Параметры, Истина, Истина); - Для каждого Строка Из ВидДоступа.ДополнительныеТипы Цикл + ДополнительныеТипы = ВидДоступа.ДополнительныеТипы; // См. НоваяТаблицаДополнительныеТипыВидаДоступа + + Для Каждого Строка Из ДополнительныеТипы Цикл // Проверка повторения типов значений и групп. ПроверитьТип(ВидДоступа, Строка.ТипЗначений, ВсеТипыЗначений, Параметры); ПроверитьТип(ВидДоступа, Строка.ТипГруппЗначений, ВсеТипыГруппЗначений, Параметры, Истина); @@ -6791,15 +6938,7 @@ ПустаяСсылкаТипаЗначений = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( Метаданные.НайтиПоТипу(ВидДоступа.ТипЗначений).ПолноеИмя()).ПустаяСсылка(); - Свойства = Новый Структура; - Свойства.Вставить("Имя", ВидДоступа.Имя); - Свойства.Вставить("Ссылка", ПустаяСсылкаТипаЗначений); - Свойства.Вставить("ТипЗначений", ВидДоступа.ТипЗначений); - Свойства.Вставить("ТипГруппЗначений", ВидДоступа.ТипГруппЗначений); - Свойства.Вставить("НесколькоГруппЗначений", ВидДоступа.НесколькоГруппЗначений); - Свойства.Вставить("ДополнительныеТипы", Новый Массив); - Свойства.Вставить("ТипыВыбираемыхЗначений", Новый Массив); - + Свойства = НовыеСвойстваВидаДоступа(ВидДоступа, ПустаяСсылкаТипаЗначений); МассивСвойств.Добавить(Свойства); ПоИменам.Вставить(Свойства.Имя, Свойства); ПоСсылкам.Вставить(ПустаяСсылкаТипаЗначений, Свойства); @@ -6810,12 +6949,8 @@ КонецЕсли; ЗаполнитьЗначенияДоступаСГруппами(Свойства, ЗначенияДоступаСГруппами, Свойства, Параметры); - Для каждого Строка Из ВидДоступа.ДополнительныеТипы Цикл - Элемент = Новый Структура; - Элемент.Вставить("ТипЗначений", Строка.ТипЗначений); - Элемент.Вставить("ТипГруппЗначений", Строка.ТипГруппЗначений); - Элемент.Вставить("НесколькоГруппЗначений", Строка.НесколькоГруппЗначений); - Свойства.ДополнительныеТипы.Добавить(Элемент); + Для Каждого Строка Из ВидДоступа.ДополнительныеТипы Цикл + Свойства.ДополнительныеТипы.Добавить(ДополнительныйТипВидаДоступа(Строка)); ПоТипамЗначений.Вставить(Строка.ТипЗначений, Свойства); ПоТипамГруппИЗначений.Вставить(Строка.ТипЗначений, Свойства); Если Строка.ТипГруппЗначений <> Тип("Неопределено") Тогда @@ -6832,8 +6967,9 @@ ВидыДоступаСГруппами = Новый Соответствие; - Для каждого КлючИЗначение Из ЗначенияДоступаСГруппами.ПоТипамСсылок Цикл - ИмяВидаДоступа = КлючИЗначение.Значение.Имя; + Для Каждого КлючИЗначение Из ЗначенияДоступаСГруппами.ПоТипамСсылок Цикл + ВидДоступа = КлючИЗначение.Значение; // См. СвойстваВидаДоступа + ИмяВидаДоступа = ВидДоступа.Имя; ВидыДоступаСГруппами.Вставить(ИмяВидаДоступа, Истина); ПустаяСсылка = ПустаяСсылкаОбъектаМетаданных(КлючИЗначение.Ключ); @@ -6876,7 +7012,7 @@ КонецЕсли; КонецЦикла; - Для каждого СвойстваВидаДоступа Из МассивСвойств Цикл + Для Каждого СвойстваВидаДоступа Из МассивСвойств Цикл Если ВидыДоступаСГруппами.Получить(СвойстваВидаДоступа.Имя) <> Неопределено Тогда Продолжить; КонецЕсли; @@ -6907,6 +7043,77 @@ КонецФункции +// Для функции СвойстваВидовДоступа. +// +// Возвращаемое значение: +// см. СвойстваВидаДоступа +// +Функция НовыеСвойстваВидаДоступа(ВидДоступа, ПустаяСсылкаТипаЗначений) + + Свойства = Новый Структура; + Свойства.Вставить("Имя", ВидДоступа.Имя); + Свойства.Вставить("Ссылка", ПустаяСсылкаТипаЗначений); + Свойства.Вставить("ТипЗначений", ВидДоступа.ТипЗначений); + Свойства.Вставить("ТипГруппЗначений", ВидДоступа.ТипГруппЗначений); + Свойства.Вставить("НесколькоГруппЗначений", ВидДоступа.НесколькоГруппЗначений); + Свойства.Вставить("ДополнительныеТипы", Новый Массив); + Свойства.Вставить("ТипыВыбираемыхЗначений", Новый Массив); + + Возврат Свойства; + +КонецФункции + +// Для функции СвойстваВидовДоступа. +// +// Возвращаемое значение: +// Структура: +// * ПоТипам - Соответствие: +// * Ключ - Тип +// * Значение - см. СвойстваВидаДоступа +// * ПоТипамСсылок - Соответствие: +// * Ключ - Тип +// * Значение - см. СвойстваВидаДоступа +// * ИменаТаблицДляОбновления - Массив из Строка +// * ТипыГруппЗначенийДляОбновления - Соответствие: +// * Ключ - Тип +// * Значение - СправочникСсылка +// * ПоТипамСсылокДляОбновления - Соответствие: +// * Ключ - Тип +// * Значение - см. СвойстваВидаДоступа +// +Функция ЗначенияДоступаСГруппами() + + ЗначенияДоступаСГруппами = Новый Структура; + ЗначенияДоступаСГруппами.Вставить("ПоТипам", Новый Соответствие); + ЗначенияДоступаСГруппами.Вставить("ПоТипамСсылок", Новый Соответствие); + ЗначенияДоступаСГруппами.Вставить("ИменаТаблицДляОбновления", Новый Массив); + ЗначенияДоступаСГруппами.Вставить("ТипыГруппЗначенийДляОбновления", Новый Соответствие); + ЗначенияДоступаСГруппами.Вставить("ПоТипамДляОбновления", Новый Соответствие); + ЗначенияДоступаСГруппами.Вставить("ПоТипамСсылокДляОбновления", Новый Соответствие); + + Возврат ЗначенияДоступаСГруппами; + +КонецФункции + +// Для функции СвойстваВидовДоступа. +// +// Возвращаемое значение: +// Структура: +// * ПоТипам - Соответствие +// * ПоТипамСсылок - Соответствие +// * НесколькоГруппЗначений - Булево +// +Функция ДополнительныйТипВидаДоступа(Строка) + + Элемент = Новый Структура; + Элемент.Вставить("ТипЗначений", Строка.ТипЗначений); + Элемент.Вставить("ТипГруппЗначений", Строка.ТипГруппЗначений); + Элемент.Вставить("НесколькоГруппЗначений", Строка.НесколькоГруппЗначений); + + Возврат Элемент; + +КонецФункции + // Для функции СвойстваВидовДоступа. Процедура ЗаполнитьЗначенияДоступаСГруппами(Строка, ЗначенияДоступаСГруппами, Свойства, Параметры) @@ -7131,6 +7338,11 @@ КонецПроцедуры +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - Строка +// Функция ПредставлениеВидовДоступа() Экспорт ВидыДоступа = ЗаполненныеВидыДоступа(); @@ -7295,6 +7507,296 @@ КонецФункции +// Возвращает таблицу значений, содержащую вид ограничений доступа по каждому праву +// объектов метаданных. +// Если записи по праву нет, значит ограничений по праву нет. +// Таблица содержит только виды доступа, заданные разработчиком, +// исходя из их применения в текстах ограничений. +// Для получения всех видов доступа, включая используемые в наборах +// значений доступа может быть использовано +// текущее состояние регистра сведений НаборыЗначенийДоступа. +// +// Параметры: +// ДляПроверки - Булево - вернуть текстовое описание ограничений прав, заполненное +// в переопределяемых модулях без проверки. +// +// Возвращаемое значение: +// ТаблицаЗначений - если ДляПроверки = Ложь, состав колонок: +// Таблица - Строка - имя таблицы объекта метаданных, например, Справочник.Файлы. +// Право - Строка: "Чтение", "Изменение". +// ВидДоступа - Ссылка - пустая ссылка основного типа значений вида доступа, +// пустая ссылка владельца настроек прав. +// - Неопределено - для вида доступа Объект. +// ТаблицаОбъекта - Ссылка - пустая ссылка объекта метаданных, через который ограничивается доступ, +// используя наборы значений доступа, например, Справочник.ПапкиФайлов. +// - Неопределено - если ВидДоступа <> Неопределено. +// +// Строка - если ДляПроверки = Истина - ограничения прав, как они добавлены в переопределяемом модуле. +// +Функция ПостоянныеВидыОграниченийПравОбъектовМетаданных(ДляПроверки = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ВидыДоступаПрав = Новый ТаблицаЗначений; + ВидыДоступаПрав.Колонки.Добавить("Таблица", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + ВидыДоступаПрав.Колонки.Добавить("Право", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); + ВидыДоступаПрав.Колонки.Добавить("ВидДоступа", УправлениеДоступомСлужебныйПовтИсп.ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав()); + ВидыДоступаПрав.Колонки.Добавить("ТаблицаОбъекта", Метаданные.РегистрыСведений.НаборыЗначенийДоступа.Измерения.Объект.Тип); + + ОграниченияПрав = ""; + + УниверсальноеОграничение = ОграничиватьДоступНаУровнеЗаписейУниверсально(Истина, Истина); + + Если ДляПроверки Или Не УниверсальноеОграничение Тогда + ИнтеграцияПодсистемБСП.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(ОграниченияПрав); + УправлениеДоступомПереопределяемый.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(ОграниченияПрав); + Иначе + ОграниченияПрав = ВсеВидыОграниченийПравДляОтчетаПраваДоступа(); + КонецЕсли; + + Если ДляПроверки Тогда + Возврат ОграниченияПрав; + КонецЕсли; + + ВидыДоступаПоИменам = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа().ПоИменам; + + Для НомерСтроки = 1 По СтрЧислоСтрок(ОграниченияПрав) Цикл + ТекущаяСтрока = СокрЛП(СтрПолучитьСтроку(ОграниченияПрав, НомерСтроки)); + Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда + ПояснениеОшибки = ""; + Если СтрЧислоВхождений(ТекущаяСтрока, ".") <> 3 И СтрЧислоВхождений(ТекущаяСтрока, ".") <> 5 Тогда + ПояснениеОшибки = НСтр("ru = 'Строка должна быть в формате ""<Полное имя таблицы>.<Имя права>.<Имя вида доступа>[.Таблица объекта]"".'"); + Иначе + ПозицияПрава = СтрНайти(ТекущаяСтрока, "."); + ПозицияПрава = СтрНайти(Сред(ТекущаяСтрока, ПозицияПрава + 1), ".") + ПозицияПрава; + Таблица = Лев(ТекущаяСтрока, ПозицияПрава - 1); + ПозицияВидаДоступа = СтрНайти(Сред(ТекущаяСтрока, ПозицияПрава + 1), ".") + ПозицияПрава; + Право = Сред(ТекущаяСтрока, ПозицияПрава + 1, ПозицияВидаДоступа - ПозицияПрава - 1); + Если СтрЧислоВхождений(ТекущаяСтрока, ".") = 3 Тогда + ВидДоступа = Сред(ТекущаяСтрока, ПозицияВидаДоступа + 1); + ТаблицаОбъекта = ""; + Иначе + ПозицияТаблицыОбъекта = СтрНайти(Сред(ТекущаяСтрока, ПозицияВидаДоступа + 1), ".") + ПозицияВидаДоступа; + ВидДоступа = Сред(ТекущаяСтрока, ПозицияВидаДоступа + 1, ПозицияТаблицыОбъекта - ПозицияВидаДоступа - 1); + ТаблицаОбъекта = Сред(ТекущаяСтрока, ПозицияТаблицыОбъекта + 1); + КонецЕсли; + + Если Метаданные.НайтиПоПолномуИмени(Таблица) = Неопределено Тогда + Если УниверсальноеОграничение Тогда + Продолжить; + КонецЕсли; + ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не существует таблица ""%1"".'"), Таблица); + + ИначеЕсли Право <> "Чтение" И Право <> "Изменение" Тогда + ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не существует право ""%1"".'"), Право); + + ИначеЕсли ВРег(ВидДоступа) = ВРег("Объект") Тогда + Если Метаданные.НайтиПоПолномуИмени(ТаблицаОбъекта) = Неопределено Тогда + Если УниверсальноеОграничение Тогда + Продолжить; + КонецЕсли; + ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не существует таблица объекта ""%1"".'"), + ТаблицаОбъекта); + Иначе + ВидДоступаСсылка = Неопределено; + ТаблицаОбъектаСсылка = ПустаяСсылкаОбъектаМетаданных(ТаблицаОбъекта); + КонецЕсли; + + ИначеЕсли ВРег(ВидДоступа) = ВРег("НастройкиПрав") Тогда + Если Метаданные.НайтиПоПолномуИмени(ТаблицаОбъекта) = Неопределено Тогда + Если УниверсальноеОграничение Тогда + Продолжить; + КонецЕсли; + ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не существует таблица владельца настроек прав ""%1"".'"), + ТаблицаОбъекта); + Иначе + ВидДоступаСсылка = ПустаяСсылкаОбъектаМетаданных(ТаблицаОбъекта); + ТаблицаОбъектаСсылка = Неопределено; + КонецЕсли; + + ИначеЕсли ВидыДоступаПоИменам.Получить(ВидДоступа) = Неопределено Тогда + Если УниверсальноеОграничение Тогда + Продолжить; + КонецЕсли; + ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не существует вид доступа ""%1"".'"), ВидДоступа); + Иначе + СвойстваВидаДоступа = ВидыДоступаПоИменам.Получить(ВидДоступа); // См. СвойстваВидаДоступа + ВидДоступаСсылка = СвойстваВидаДоступа.Ссылка; + ТаблицаОбъектаСсылка = Неопределено; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ПояснениеОшибки) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в строке описания вида ограничений права объекта метаданных: + |""%1"".'") + + Символы.ПС + + Символы.ПС, + ТекущаяСтрока) + + ПояснениеОшибки; + Иначе + НовоеОписание = ВидыДоступаПрав.Добавить(); + НовоеОписание.Таблица = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Таблица); + НовоеОписание.Право = Право; + НовоеОписание.ВидДоступа = ВидДоступаСсылка; + НовоеОписание.ТаблицаОбъекта = ТаблицаОбъектаСсылка; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Добавление видов доступа объектов, которые определяются не только через наборы значений доступа. + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЗависимостиПравДоступа.ПодчиненнаяТаблица, + | ЗависимостиПравДоступа.ТипВедущейТаблицы + |ИЗ + | РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа"; + ЗависимостиПрав = Запрос.Выполнить().Выгрузить(); + + ПрекратитьПопытки = Ложь; + Пока НЕ ПрекратитьПопытки Цикл + ПрекратитьПопытки = Истина; + Отбор = Новый Структура("ВидДоступа", Неопределено); + ВидыДоступаОбъект = ВидыДоступаПрав.НайтиСтроки(Отбор); + Для каждого Строка Из ВидыДоступаОбъект Цикл + ИдентификаторТаблицы = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + ТипЗнч(Строка.ТаблицаОбъекта)); + + Отбор = Новый Структура; + Отбор.Вставить("ПодчиненнаяТаблица", Строка.Таблица); + Отбор.Вставить("ТипВедущейТаблицы", Строка.ТаблицаОбъекта); + Если ЗависимостиПрав.НайтиСтроки(Отбор).Количество() = 0 Тогда + ВедущееПраво = Строка.Право; + Иначе + ВедущееПраво = "Чтение"; + КонецЕсли; + Отбор = Новый Структура("Таблица, Право", ИдентификаторТаблицы, ВедущееПраво); + ВидыДоступаВедущейТаблицы = ВидыДоступаПрав.НайтиСтроки(Отбор); + Для каждого ОписаниеВидаДоступа Из ВидыДоступаВедущейТаблицы Цикл + Если ОписаниеВидаДоступа.ВидДоступа = Неопределено Тогда + // Вид доступа объект нельзя добавлять. + Продолжить; + КонецЕсли; + Отбор = Новый Структура; + Отбор.Вставить("Таблица", Строка.Таблица); + Отбор.Вставить("Право", Строка.Право); + Отбор.Вставить("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа); + Если ВидыДоступаПрав.НайтиСтроки(Отбор).Количество() = 0 Тогда + ЗаполнитьЗначенияСвойств(ВидыДоступаПрав.Добавить(), Отбор); + ПрекратитьПопытки = Ложь; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Возврат ВидыДоступаПрав; + +КонецФункции + +// Только для внутреннего использования. +// +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - Строка +// +Функция ТипыГруппИЗначенийВидовДоступа() Экспорт + + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); + + ТипыГруппИЗначенийВидовДоступа = Новый ТаблицаЗначений; + ТипыГруппИЗначенийВидовДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + ТипыГруппИЗначенийВидовДоступа.Колонки.Добавить("ТипГруппИЗначений", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + + Для Каждого КлючИЗначение Из СвойстваВидовДоступа.ПоТипамГруппИЗначений Цикл + Строка = ТипыГруппИЗначенийВидовДоступа.Добавить(); + СвойстваВидаДоступа = КлючИЗначение.Значение; // См. СвойстваВидаДоступа + Строка.ВидДоступа = СвойстваВидаДоступа.Ссылка; + + Типы = Новый Массив; + Типы.Добавить(КлючИЗначение.Ключ); + ОписаниеТипа = Новый ОписаниеТипов(Типы); + + Строка.ТипГруппИЗначений = ОписаниеТипа.ПривестиЗначение(Неопределено); + КонецЦикла; + + Возврат ТипыГруппИЗначенийВидовДоступа; + +КонецФункции + +// Только для внутреннего использования. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ВидДоступа - ЛюбаяСсылка +// * ТипЗначений - ЛюбаяСсылка +// +Функция ТипыЗначенийВидовДоступаИВладельцевНастроекПрав() Экспорт + + ТипыЗначенийВидовДоступаИВладельцевНастроекПрав = Новый ТаблицаЗначений; + + ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Колонки.Добавить("ВидДоступа", + УправлениеДоступомСлужебныйПовтИсп.ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав()); + + ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Колонки.Добавить("ТипЗначений", + УправлениеДоступомСлужебныйПовтИсп.ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав()); + + ТипыЗначенийВидовДоступа = ТипыЗначенийВидовДоступа(); + + Для Каждого Строка Из ТипыЗначенийВидовДоступа Цикл + ЗаполнитьЗначенияСвойств(ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Добавить(), Строка); + КонецЦикла; + + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваДляНастройкиПравОбъектов(); + ВладельцыПрав = ВозможныеПрава.ПоТипамСсылок; + + Для Каждого КлючИЗначение Из ВладельцыПрав Цикл + + Типы = Новый Массив; + Типы.Добавить(КлючИЗначение.Ключ); + ОписаниеТипа = Новый ОписаниеТипов(Типы); + + Строка = ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Добавить(); + Строка.ВидДоступа = ОписаниеТипа.ПривестиЗначение(Неопределено); + Строка.ТипЗначений = ОписаниеТипа.ПривестиЗначение(Неопределено); + КонецЦикла; + + Возврат ТипыЗначенийВидовДоступаИВладельцевНастроекПрав; + +КонецФункции + +// Для функции ТипыЗначенийВидовДоступаИВладельцевНастроекПрав. +Функция ТипыЗначенийВидовДоступа() + + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); + + ТипыЗначенийВидовДоступа = Новый ТаблицаЗначений; + ТипыЗначенийВидовДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + ТипыЗначенийВидовДоступа.Колонки.Добавить("ТипЗначений", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + + Для каждого КлючИЗначение Из СвойстваВидовДоступа.ПоТипамЗначений Цикл + Строка = ТипыЗначенийВидовДоступа.Добавить(); + СвойстваВидаДоступа = КлючИЗначение.Значение; // См. СвойстваВидаДоступа + Строка.ВидДоступа = СвойстваВидаДоступа.Ссылка; + + Типы = Новый Массив; + Типы.Добавить(КлючИЗначение.Ключ); + ОписаниеТипа = Новый ОписаниеТипов(Типы); + + Строка.ТипЗначений = ОписаниеТипа.ПривестиЗначение(Неопределено); + КонецЦикла; + + Возврат ТипыЗначенийВидовДоступа; + +КонецФункции + + #Область УниверсальноеОграничение //////////////////////////////////////////////////////////////////////////////// @@ -7306,15 +7808,14 @@ // для списков, у которых в ограничениях доступа присоединены дополнительные таблицы. // // Параметры: -// Источник - КонстантаМенеджер, -// СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. +// Источник - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередЗаписью. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // @@ -7337,11 +7838,11 @@ // для списков, у которых в ограничениях доступа присоединены дополнительные таблицы. // // Параметры: -// Источник - РегистрСведенийНаборЗаписей, -// РегистрНакопленияНаборЗаписей, -// РегистрБухгалтерииНаборЗаписей, -// РегистрРасчетаНаборЗаписей, -// ПерерасчетНаборЗаписей - набор записей, передаваемый в подписку +// Источник - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей +// - ПерерасчетНаборЗаписей - набор записей, передаваемый в подписку // на событие ПередЗаписью. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. @@ -7371,15 +7872,14 @@ // выполняет проверку прав Чтение и Изменение новой версии объекта. // // Параметры: -// Источник - КонстантаМенеджер, -// СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПриЗаписи. +// Источник - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПриЗаписи. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПриЗаписи. // @@ -7395,11 +7895,11 @@ // выполняет проверку прав Чтение и Изменение новой версии набора записей. // // Параметры: -// Источник - РегистрСведенийНаборЗаписей, -// РегистрНакопленияНаборЗаписей, -// РегистрБухгалтерииНаборЗаписей, -// РегистрРасчетаНаборЗаписей, -// ПерерасчетНаборЗаписей - набор записей, передаваемый в подписку +// Источник - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей +// - ПерерасчетНаборЗаписей - набор записей, передаваемый в подписку // на событие ПриЗаписи. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПриЗаписи. @@ -7430,14 +7930,14 @@ // для списков, у которых в ограничениях доступа присоединены дополнительные таблицы. // // Параметры: -// Источник - СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередУдалением. +// Источник - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланОбменаОбъект - объект данных, передаваемый в подписку на событие ПередУдалением. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПередУдалением. // @@ -7451,7 +7951,17 @@ //////////////////////////////////////////////////////////////////////////////// // Универсальное ограничение доступа. -Функция ДоступРазрешен(ОписаниеДанных, Изменение, ВызыватьИсключение = Ложь) Экспорт +// Параметры: +// ОписаниеДанных - см. УправлениеДоступом.ЧтениеРазрешено.ОписаниеДанных +// Изменение - Булево +// ВызыватьИсключение - Булево +// ПроверитьТолькоСтаруюВерсию - Булево +// +// Возвращаемое значение: +// Булево +// +Функция ДоступРазрешен(ОписаниеДанных, Изменение, ВызыватьИсключение = Ложь, + ПроверитьТолькоСтаруюВерсию = Ложь) Экспорт Если Пользователи.ЭтоПолноправныйПользователь() Тогда Возврат Истина; @@ -7461,7 +7971,7 @@ Если ОбъектМетаданных = Неопределено Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недопустимое значение параметра %1 в %2. - |Ожидалась ссылка или ключ записи. + |Ожидалась ссылка, объект, ключ записи или набор записей. |Передано значение: %3 (тип %4).'"), "ОписаниеДанных", ?(Изменение, "УправлениеДоступом.ИзменениеРазрешено", @@ -7498,6 +8008,10 @@ Возврат Истина; КонецЕсли; + СтараяВерсия = Истина; + ПравоИзменения = Ложь; + ЭтоНовый = Ложь; + Если ПараметрыОграничения.ДоступЗапрещен Тогда ДоступРазрешен = Ложь; Иначе @@ -7510,42 +8024,90 @@ Если ПараметрыОграничения.ЭтоСсылочныйТип Тогда СсылкаНаОбъект = ?(ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ОписаниеДанных)), ОписаниеДанных, ОписаниеДанных.Ссылка); - Запрос.УстановитьПараметр("Объект", СсылкаНаОбъект); - Если ПараметрыОграничения.ПолеВладельца <> Неопределено Тогда Запрос.УстановитьПараметр("ИдентификаторТаблицыНастроекПрав", ПараметрыОграничения.ИдентификаторТаблицыНастроекПрав); КонецЕсли; + Если ОписаниеДанных = СсылкаНаОбъект Или ЗначениеЗаполнено(СсылкаНаОбъект) Тогда + ДоступРазрешен = Не Запрос.Выполнить().Пустой(); + Иначе + ДоступРазрешен = Истина; + КонецЕсли; - ДоступРазрешен = Не Запрос.Выполнить().Пустой(); - ДанныеДляПредставления = СсылкаНаОбъект; + Если Не ДоступРазрешен Тогда + ДанныеДляПредставления = СсылкаНаОбъект; + + ИначеЕсли ОписаниеДанных <> СсылкаНаОбъект И Не ПроверитьТолькоСтаруюВерсию Тогда + СтараяВерсия = Ложь; + Если ПараметрыОграничения.ПолеВладельца <> Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, + ПараметрыОграничения.ПолеОбъектаВладельцаВЗапросеПроверкиПрав, "&Владелец"); + Запрос.УстановитьПараметр("Владелец", + ОписаниеДанных[ПараметрыОграничения.ПолеВладельца.Имя]); + Иначе + МодельОбъектовВПамяти = МодельОбъектовВПамяти(ОписаниеДанных, ПараметрыОграничения); + ПараметрыОбновления = Новый Структура(ПараметрыОграничения); + ПараметрыОбновления.Вставить("МодельОбъектовВПамяти", МодельОбъектовВПамяти); + ПараметрыОбновления.Вставить("ИдентификаторТранзакции", ИдентификаторТранзакции); + ПараметрыОбновления.Вставить("ИдентификаторСписка", + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПараметрыОграничения.Список)); + ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка(МодельОбъектовВПамяти.ЭлементыДанных, ПараметрыОбновления); + Запрос.УстановитьПараметр("КлючиДоступаКОбъектам", МодельОбъектовВПамяти.КлючиДоступаКОбъектам); + Запрос.УстановитьПараметр("Объект", МодельОбъектовВПамяти.ЭлементыДанных[0].ТекущаяСсылка); + ТекстЗапроса = + "ВЫБРАТЬ + | КлючиДоступаКОбъектам.Объект КАК Объект, + | КлючиДоступаКОбъектам.КлючДоступаПользователей КАК КлючДоступаПользователей, + | КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей КАК КлючДоступаВнешнихПользователей + |ПОМЕСТИТЬ РегистрСведений_КлючиДоступаКОбъектам + |ИЗ + | &КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "РегистрСведений.КлючиДоступаКОбъектам", + "РегистрСведений_КлючиДоступаКОбъектам"); + Запрос.Текст = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() + Запрос.Текст; + КонецЕсли; + ПроверкаДобавления = Ложь; + ТекстЗапросаИзменения = Запрос.Текст; + ЭтоНовый = ОписаниеДанных.ЭтоНовый(); + УточнитьПравоДобавление(Запрос,ЭтоНовый, ПараметрыОграничения, ПроверкаДобавления); + ДоступРазрешен = Не Запрос.Выполнить().Пустой(); + Если Не ДоступРазрешен И ПроверкаДобавления Тогда + Запрос.Текст = ТекстЗапросаИзменения; + ПравоИзменения = Не Запрос.Выполнить().Пустой(); + КонецЕсли; + ДанныеДляПредставления = ОписаниеДанных; + КонецЕсли; Иначе НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).СоздатьНаборЗаписей(); Если ТипЗнч(ОписаниеДанных) = ТипЗнч(НаборЗаписей) Тогда - Возврат Истина; + НаборЗаписей = ОписаниеДанных; + Иначе // КлючЗаписи. + Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл + ЭлементОтбора.Значение = ОписаниеДанных[ЭлементОтбора.Имя]; + ЭлементОтбора.Использование = Истина; + КонецЦикла; КонецЕсли; - Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл - ЭлементОтбора.Значение = ОписаниеДанных[ЭлементОтбора.Имя]; - ЭлементОтбора.Использование = Истина; - КонецЦикла; ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(НаборЗаписей, Запрос); - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | &ТекущаяТаблица КАК ТекущаяТаблица - |ГДЕ - | &ОтборПоИзмерениям"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); - Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапроса; Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоИзмерениям", ОтборПоИзмерениям); - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - ДоступРазрешен = РезультатыЗапроса[0].Пустой() И Не РезультатыЗапроса[1].Пустой(); + ДоступРазрешен = Запрос.Выполнить().Пустой(); ДанныеДляПредставления = НаборЗаписей; + + Если ДоступРазрешен + И ТипЗнч(ОписаниеДанных) = ТипЗнч(НаборЗаписей) + И Не ПроверитьТолькоСтаруюВерсию Тогда + + СтараяВерсия = Ложь; + РезультатПроверкиПрав = ?(ВызыватьИсключение, Неопределено, Истина); + ОписаниеДанных.ДополнительныеСвойства.Вставить("УправлениеДоступомИдентификаторТранзакции", + ИдентификаторТранзакции); + ПроверитьДоступКНаборуЗаписей(ОписаниеДанных, Ложь, Ложь, Ложь, ИдентификаторТранзакции, + ПараметрыОграничения, РезультатПроверкиПрав); + ОписаниеДанных.ДополнительныеСвойства.Удалить("УправлениеДоступомИдентификаторТранзакции"); + ДоступРазрешен = РезультатПроверкиПрав; + КонецЕсли; КонецЕсли; КонецЕсли; @@ -7562,7 +8124,7 @@ ПравоЧтения = Ложь; КонецЕсли; - СообщитьОбОшибкеДоступа(ДанныеДляПредставления, Истина, ПравоЧтения, Ложь, Ложь); + СообщитьОбОшибкеДоступа(ДанныеДляПредставления, СтараяВерсия, ПравоЧтения, ПравоИзменения, ЭтоНовый); КонецФункции @@ -7583,36 +8145,48 @@ | &ТекущаяТаблица КАК ТекущаяТаблица |ГДЕ | ТекущаяТаблица.Ссылка = &Ссылка"; + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); + Если Не Запрос.Выполнить().Пустой() Тогда + Возврат Истина; + КонецЕсли; ДанныеДляПредставления = СсылкаНаОбъект; Иначе НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).СоздатьНаборЗаписей(); Если ТипЗнч(ОписаниеДанных) = ТипЗнч(НаборЗаписей) Тогда - Возврат Истина; + НаборЗаписей = ОписаниеДанных; + Иначе // КлючЗаписи. + Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл + ЭлементОтбора.Значение = ОписаниеДанных[ЭлементОтбора.Имя]; + ЭлементОтбора.Использование = Истина; + КонецЦикла; КонецЕсли; - Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл - ЭлементОтбора.Значение = ОписаниеДанных[ЭлементОтбора.Имя]; - ЭлементОтбора.Использование = Истина; - КонецЦикла; ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(НаборЗаписей, Запрос); ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(1) КАК КоличествоДанных |ИЗ | &ТекущаяТаблица КАК ТекущаяТаблица |ГДЕ | &ОтборПоИзмерениям"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоИзмерениям", ОтборПоИзмерениям); + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); + + УстановитьПривилегированныйРежим(Истина); + Выборка = Запрос.Выполнить().Выбрать(); + УстановитьПривилегированныйРежим(Ложь); + ВсегоДанных = ?(Выборка.Следующий(), Выборка.КоличествоДанных, 0); + + Выборка = Запрос.Выполнить().Выбрать(); + ДоступноДанных = ?(Выборка.Следующий(), Выборка.КоличествоДанных, 0); + + Если ВсегоДанных = ДоступноДанных Тогда + Возврат Истина; + КонецЕсли; ДанныеДляПредставления = НаборЗаписей; КонецЕсли; - Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); - - Если Не Запрос.Выполнить().Пустой() Тогда - Возврат Истина; - КонецЕсли; - Если Не ВызыватьИсключение Тогда Возврат Ложь; КонецЕсли; @@ -7622,6 +8196,10 @@ КонецФункции // Требуется, как начальная максимальная дата при планировании начального обновления доступа. +// +// Возвращаемое значение: +// Дата +// Функция МаксимальнаяДата() Экспорт Возврат '39991231235959'; @@ -7759,7 +8337,8 @@ КонецЕсли; Если Свойства.ПолеВладельца <> Неопределено Тогда - ОграничениеВРоли.Параметры.Добавить(Свойства.ПолеВладельца.Имя); + ПолеВладельца = Свойства.ПолеВладельца; // См. НовоеПолеВладельца + ОграничениеВРоли.Параметры.Добавить(ПолеВладельца.Имя); Возврат; КонецЕсли; @@ -7835,18 +8414,6 @@ КонецЦикла; КонецЦикла; - // Для обратной совместимости отчета ПроверкаВнедренияБСП.epf. - Если ИмяРегистраКлючей <> "КлючиДоступаКРегистрам" Тогда - Возврат; - КонецЕсли; - - ИмяРегистраXML = "InformationRegister." + ИмяРегистраКлючей; - ИменаТипов = ТипыИзмеренийРегистровКлючей.Получить(ИмяРегистраXML); - - Если ИменаТипов = Неопределено Тогда - ТипыИзмеренийРегистровКлючей.Вставить(ИмяРегистраXML, ТипыИзмерений.ИменаТипов); - КонецЕсли; - КонецПроцедуры // Для функции НастройкиВнедрения и процедуры ДобавитьТипыИзмерения. @@ -8178,13 +8745,11 @@ КонецЕсли; Запрос = Новый Запрос; - ПроверкаДобавления = ЭтоНовый И Не ПередЗаписью И ПараметрыОграничения.ПолеВладельца = Неопределено; + Запрос.Текст = ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение; - Если ПроверкаДобавления Тогда - Запрос.Текст = СтрЗаменить(ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение, - "РазрешенныеКлючиДоступа.Изменение", "РазрешенныеКлючиДоступа.Добавление"); - Иначе - Запрос.Текст = ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение; + ПроверкаДобавления = Ложь; + Если Не ПередЗаписью Тогда + УточнитьПравоДобавление(Запрос, ЭтоНовый, ПараметрыОграничения, ПроверкаДобавления); КонецЕсли; ОбновитьРазрешенныеНаборыВПараметрахСеанса(); @@ -8223,6 +8788,19 @@ КонецПроцедуры +// Для процедуры ПроверитьДоступКОбъекту и функции ДоступРазрешен. +Процедура УточнитьПравоДобавление(Запрос, ЭтоНовый, ПараметрыОграничения, ПроверкаДобавления) + + ПроверкаДобавления = ЭтоНовый И ПараметрыОграничения.ПолеВладельца = Неопределено; + Если Не ПроверкаДобавления Тогда + Возврат; + КонецЕсли; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "РазрешенныеКлючиДоступа.Изменение", "РазрешенныеКлючиДоступа.Добавление"); + +КонецПроцедуры + // Для процедуры ПроверитьДоступКОбъекту. Процедура ОбновитьКлючДоступаОбъектаПриЗаписи(Источник, ЭтоНовый, ИдентификаторТранзакции, ПараметрыОграничения, КлючДоступаОбновлен = Ложь) @@ -8267,8 +8845,10 @@ ОбновитьКлючиДоступаКНаборуЗаписей(Источник, ПередЗаписью, Замещение, ИдентификаторТранзакции, ПараметрыОграничения, ОтборПоИзмерениям, Запрос); - ОбновитьКлючиДоступаКНаборуЗаписей(Источник, ПередЗаписью, Замещение, - ИдентификаторТранзакции, ПараметрыОграниченияДополнительные, "", Неопределено); + Если ТипЗнч(ПараметрыОграниченияДополнительные) = Тип("Структура") Тогда + ОбновитьКлючиДоступаКНаборуЗаписей(Источник, ПередЗаписью, Замещение, + ИдентификаторТранзакции, ПараметрыОграниченияДополнительные, "", Неопределено); + КонецЕсли; Если Запрос = Неопределено Тогда Возврат; @@ -8287,6 +8867,11 @@ Возврат; // Доступ разрешен. КонецЕсли; + Если ТипЗнч(ПараметрыОграниченияДополнительные) = Тип("Булево") Тогда + ПараметрыОграниченияДополнительные = Ложь; + Возврат; + КонецЕсли; + Если ПараметрыОграничения.ОграничениеЧтенияОтключено Тогда ПравоЧтения = Истина; Иначе @@ -8448,10 +9033,10 @@ КонецФункции // Для процедур ПроверитьДоступКОбъекту, ПроверитьДоступКНаборуЗаписей. -Процедура СообщитьОбОшибкеДоступа(Данные, ПередЗаписью, ПравоЧтения, ПравоИзменения, ЭтоНовый) +Процедура СообщитьОбОшибкеДоступа(Данные, СтараяВерсия, ЕстьПравоЧтения, ЕстьПравоИзменения, ЭтоНовый) - Если ПередЗаписью Тогда - Если ПравоЧтения Тогда + Если СтараяВерсия Тогда + Если ЕстьПравоЧтения Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав для изменения данных: |%1'"), ПредставлениеДанных(Данные)); @@ -8461,7 +9046,7 @@ |%1'"), ПредставлениеДанных(Данные)); КонецЕсли; Иначе - Если ПравоЧтения И ПравоИзменения Тогда + Если ЕстьПравоЧтения И ЕстьПравоИзменения Тогда Если ЭтоНовый Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав для добавления данных (нет права добавления): @@ -8471,7 +9056,7 @@ НСтр("ru = 'Недостаточно прав для добавления данных (нет права добавления для сделанных изменений): |%1'"), ПредставлениеДанных(Данные)); КонецЕсли; - ИначеЕсли ПравоЧтения Тогда + ИначеЕсли ЕстьПравоЧтения Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав для добавления данных (невозможно будет изменить): |%1'"), ПредставлениеДанных(Данные)); @@ -8544,6 +9129,10 @@ КонецФункции // Для процедуры ПроверитьДоступКОбъекту и формы ОбновлениеДоступаРучноеУправление. +// +// Возвращаемое значение: +// Булево +// Функция КлючДоступаИсточникаУстарел(СсылкаНаОбъект, ПараметрыОграничения, Источник = Неопределено) Экспорт Если ПараметрыОграничения.БезЗаписиКлючейДоступа Тогда @@ -8799,9 +9388,9 @@ ИзмененияПоЗначениямПолей.Вставить("ИзмененнаяТаблица", ПолноеИмя); ИзмененияПоЗначениямПолей.Вставить("СоставИзменений"); - ВедущийОбъект = Новый Структура("ПоЗначениямПолей", ИзмененияПоЗначениямПолей); + ВедущийОбъект = ОписаниеВедущегоОбъекта(); + ВедущийОбъект.Вставить("ПоЗначениямПолей", ИзмененияПоЗначениямПолей); - СпискиДляОбновления = Новый Соответствие; ПоЗначениямПолей = СвойстваСпискаКакВедущего.ПоЗначениямПолей; ПоляШапки = ПоЗначениямПолей.ПоляШапки; @@ -8847,6 +9436,22 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * ПоЗначениямПолей - Структура: +// ** Описание - ЛюбаяСсылка +// - Отбор +// ** ИзмененнаяТаблица - Строка - полное имя списка +// ** СоставИзменений - см. СоставИзмененийТаблицы +// * ПоКлючамДоступа - СправочникСсылка.КлючиДоступа +// * ПоЗначениямСГруппами - ОпределяемыйТип.ЗначениеДоступа - только значения доступа с группами. +// +Функция ОписаниеВедущегоОбъекта() + + Возврат Новый Структура; + +КонецФункции + // Для процедуры ЗапланироватьОбновлениеЗависимыхУстаревшихКлючейДоступа. Функция НовыеЗначенияТабличнойЧасти(Источник, ОписаниеТабличнойЧасти, Удаление) @@ -8865,7 +9470,7 @@ КонецЕсли; НовыеЗначения = Источник[ОписаниеТабличнойЧасти.Имя].Выгрузить( - ?(Удаление, Новый Массив, Неопределено), СтрСоединить(Поля, ", ")); + ?(Удаление, Новый Массив, Неопределено), СтрСоединить(Поля, ", ")); // ТаблицаЗначений Если Индекс <> Неопределено Тогда Типы = Новый Массив; @@ -8919,6 +9524,10 @@ КонецПроцедуры // Для процедуры ЗапланироватьОбновлениеЗависимыхУстаревшихКлючейДоступаПоЗначениямПолей. +// +// Возвращаемое значение: +// ТаблицаЗначений +// Функция СоставИзмененийТаблицы(РезультатЗапроса, Источник, Поля) МаксимумКомбинаций = МаксимальноеКоличествоКомбинацийЗначенийВедущихПолейПриВычисленииСоставаИзмененных(); @@ -9350,7 +9959,7 @@ // // Возвращаемое значение: // Неопределено - обновление доступа не требуется или запрещено. -// Структура - со свойствами: +// Структура: // * УжеВыполняется - Булево - если обновление уже выполняется. // // * ИдентификаторФоновогоЗадания - Неопределено - если обновление не выполняется или @@ -9512,7 +10121,6 @@ Блокировка.Добавить("Константа.КоличествоПотоковОбновленияДоступа"); Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей); - ЗаданиеВключено = Ложь; НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); @@ -9522,9 +10130,6 @@ Если ВключитьЗадание = Задание.Использование Тогда Продолжить; КонецЕсли; - Если ВключитьЗадание Тогда - ЗаданиеВключено = Истина; - КонецЕсли; РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор, Новый Структура("Использование", ВключитьЗадание)); КонецЦикла; @@ -9627,7 +10232,7 @@ УстановитьПривилегированныйРежим(Истина); ТекущийСеанс = ПолучитьТекущийСеансИнформационнойБазы(); - ОписаниеОсновногоСеанса = Новый Структура("ИдентификаторФоновогоЗадания, ФоновоеЗадание"); + ОписаниеОсновногоСеанса = ОписаниеОсновногоСеанса(); ОписаниеОсновногоСеанса.Вставить("НомерСеанса", ТекущийСеанс.НомерСеанса); ОписаниеОсновногоСеанса.Вставить("НачалоСеанса", ТекущийСеанс.НачалоСеанса); @@ -9817,6 +10422,20 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * ИдентификаторФоновогоЗадания - УникальныйИдентификатор +// * ФоновоеЗадание - ФоновоеЗадание +// * НомерСеанса - Число +// * НачалоСеанса - Дата +// * Идентификатор - Строка - представление сеанса +// +Функция ОписаниеОсновногоСеанса() + + Возврат Новый Структура("ИдентификаторФоновогоЗадания, ФоновоеЗадание"); + +КонецФункции + // Для функции ЗапуститьОбновлениеДоступаНаУровнеЗаписей. Функция ЗапланированоОбновлениеДоступа() @@ -9842,6 +10461,21 @@ // процедур ОбновлениеДоступаНаУровнеЗаписей, ОтменитьОбновлениеДоступаНаУровнеЗаписей и // формы ОбновлениеДоступаНаУровнеЗаписей. // +// Возвращаемое значение: +// Структура: +// * ДатаЗапускаНаСервере - Дата +// * ДатаЗавершенияНаСервере - Дата +// * ОбновлениеОтменено - Булево +// * ПоследнееВыполнениеСекунд - Число +// * ДатаПолногоЗавершения - Дата +// * ТекстОшибкиЗавершения - Строка +// * НомерСеанса - Число +// * ИмяКомпьютера - Строка +// * ОбновлениеДоступаЗапрещено - Булево +// * БалансировкаНагрузкиНаДиск - Булево +// * ИдентификаторФоновогоЗадания - УникальныйИдентификатор +// * ПоследнееПланированиеОбработкиУстаревшихЭлементов - Дата +// Функция ПоследнееОбновлениеДоступа(ТекущееЗначение = Неопределено) Экспорт Если ТекущееЗначение = Неопределено Тогда @@ -9892,6 +10526,14 @@ // процедур ОбновлениеДоступаНаУровнеЗаписей, ОтменитьОбновлениеДоступаНаУровнеЗаписей и // формы ОбновлениеДоступаНаУровнеЗаписей. // +// Параметры: +// ПоследнееОбновлениеДоступа - см. ПоследнееОбновлениеДоступа +// ИдентификаторИсключаемогоЗадания - УникальныйИдентификатор +// - Неопределено +// +// Возвращаемое значение: +// ФоновоеЗадание, СеансИнформационнойБазы, Неопределено +// Функция ИсполнительОбновленияДоступа(ПоследнееОбновлениеДоступа, ИдентификаторИсключаемогоЗадания = Неопределено) Экспорт Если ЗначениеЗаполнено(ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания) Тогда @@ -10315,6 +10957,10 @@ КонецПроцедуры // Для процедуры ЗаполнитьКоличествоПотоков и формы ОбновлениеДоступаНаУровнеЗаписей. +// +// Возвращаемое значение: +// Булево +// Функция ДоступнаБалансировкаНагрузкиНаДиск() Экспорт Возврат МаксимальноеКоличествоСекундБыстрогоПолученияПорцийЭлементовДанных() > 0 @@ -10323,6 +10969,10 @@ КонецФункции // Для процедуры ЗаполнитьКоличествоПотоков и формы ОбновлениеДоступаНаУровнеЗаписей. +// +// Возвращаемое значение: +// Булево +// Функция БалансировкаНагрузкиНаДиск() Экспорт ЗначениеКонстанты = Константы.ПоследнееОбновлениеДоступа.Получить(); @@ -10444,6 +11094,23 @@ КонецФункции // Для процедуры ВыполнитьОбновлениеДоступа. +// +// Возвращаемое значение: +// Структура: +// * ЭтоОбновлениеПрав - Булево +// * ИдентификаторСписка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// * ДляВнешнихПользователей - Булево +// * ЭтоОбработкаУстаревшихЭлементов - Булево +// * ДатаНачала - Дата +// * ДатаОкончания - Дата +// * НачальноеОбновление - Булево +// * ОбработкаЗавершена - Булево +// * МаксимумМиллисекундОбработки - Число +// * ИдентификаторСправочникаНаборыГруппДоступа - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * Кэш - Структура +// * МаксимумПорцийИзИсходной - Число +// Функция ОписаниеОбщихПараметровОбновления(Контекст = Неопределено) ОбщиеПараметрыОбновления = Новый Структура; @@ -10747,7 +11414,8 @@ Если Задание.ЗависимыеСписки = Неопределено Тогда Задание.ЗависимыеСписки = Новый Массив; КонецЕсли; - Задание.ЗависимыеСписки.Добавить(ИдентификаторЗависимого); + ЗаданиеЗависимыеСписки = Задание.ЗависимыеСписки; // Массив + ЗаданиеЗависимыеСписки.Добавить(ИдентификаторЗависимого); ОтборЗадания.ИдентификаторСписка = ИдентификаторЗависимого; Найденные = ВедущиеСпискиПоЗависимым.НайтиСтроки(ОтборЗадания); Если Найденные.Количество() = 0 Тогда @@ -11180,6 +11848,11 @@ КонецПроцедуры // Для процедуры ОтключитьРегламентноеЗаданиеЕслиНетНовыхЗаданий. +// +// Параметры: +// РезультатЗапроса - РезультатЗапроса +// НедоступныеСписки - Массив +// Процедура УстановитьНедоступныеСписки(РезультатЗапроса, НедоступныеСписки) ОбъектыМетаданныхПоИдентификаторам = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам( @@ -12434,10 +13107,11 @@ Процедура ЗарегистрироватьПоказателиОбновленияОсновногоПотока(Контекст) Показатели = Контекст.Показатели; + ОписаниеСеанса = Контекст.ОписаниеОсновногоСеанса; // См. ОписаниеОсновногоСеанса Если Контекст.ОбновлениеВЭтомСеансе Тогда Комментарий = НСтр("ru = 'Завершен сеанс обновления доступа.'"); - ДобавитьЗначенияПоказателейРаботыСеанса(Комментарий, Показатели, Контекст.ОписаниеОсновногоСеанса); + ДобавитьЗначенияПоказателейРаботыСеанса(Комментарий, Показатели, ОписаниеСеанса); ДобавитьЗначенияПоказателейВыполненияЗаданий(Комментарий, Показатели); Иначе ВремяОжиданийСвободногоПотока = Показатели.ВремяОжиданийСвободногоПотока / 1000; @@ -12451,7 +13125,7 @@ МаксимальноеВремяОбработкиРезультатаЗадания = Показатели.МаксимальноеВремяОбработкиРезультатаЗадания / 1000; Комментарий = НСтр("ru = 'Завершен сеанс управляющего потока обновления доступа.'"); - ДобавитьЗначенияПоказателейРаботыСеанса(Комментарий, Показатели, Контекст.ОписаниеОсновногоСеанса); + ДобавитьЗначенияПоказателейРаботыСеанса(Комментарий, Показатели, ОписаниеСеанса); Комментарий = Комментарий + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Время ожиданий свободного потока: %1 сек @@ -12479,7 +13153,7 @@ ФорматКоличества(Показатели.КоличествоПотоковСПревышениемВремениВыполнения), ФорматКоличества(Показатели.КоличествоПотоковСНештатнымЗавершением)); КонецЕсли; - Данные = Контекст.ОписаниеОсновногоСеанса.Идентификатор; + Данные = ОписаниеСеанса.Идентификатор; ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Показатели.Обновление доступа'", @@ -12495,23 +13169,24 @@ ВремяОжиданияНовыхЗаданий = Показатели.ВремяОжиданияНовыхЗаданий / 1000; - ФорматЧисла = "ЧН=0; ЧГ="; Комментарий = НСтр("ru = 'Завершен сеанс исполняющего потока обновления доступа.'"); ДобавитьЗначенияПоказателейРаботыСеанса(Комментарий, Показатели, Контекст.ТекущийСеанс); + ОписаниеСеанса = Контекст.ОписаниеРодительскогоСеанса; // См. ОписаниеОсновногоСеанса + Комментарий = Комментарий + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Номер сеанса управляющего потока: %1 |Начало сеанса управляющего потока: %2 | |Количество ожиданий новых заданий: %3 |Время ожидания новых заданий: %4 сек'"), - Контекст.ОписаниеРодительскогоСеанса.НомерСеанса, - Контекст.ОписаниеРодительскогоСеанса.НачалоСеанса, + ОписаниеСеанса.НомерСеанса, + ОписаниеСеанса.НачалоСеанса, ФорматКоличества(Показатели.КоличествоОжиданийНовыхЗаданий), ФорматСекунд(ВремяОжиданияНовыхЗаданий)); ДобавитьЗначенияПоказателейВыполненияЗаданий(Комментарий, Показатели); - Данные = Контекст.ОписаниеРодительскогоСеанса.Идентификатор; + Данные = ОписаниеСеанса.Идентификатор; ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Показатели.Обновление доступа'", @@ -12528,7 +13203,6 @@ ВремяРаботы = (ТекущаяУниверсальнаяДатаВМиллисекундах() - Показатели.НачалоРаботыВМиллисекундах) / 1000; - ФорматЧисла = "ЧН=0; ЧГ="; Комментарий = Комментарий + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Номер сеанса: %1 |Начало сеанса: %2 @@ -12695,11 +13369,13 @@ Процедура ЗарегистрироватьОшибкуОбновленияДоступа(ТекстОшибки, Контекст) Если Контекст.Свойство("ОписаниеРодительскогоСеанса") Тогда - Данные = Контекст.ОписаниеРодительскогоСеанса.Идентификатор; + ОписаниеСеанса = Контекст.ОписаниеРодительскогоСеанса; // См. ОписаниеОсновногоСеанса Иначе - Данные = Контекст.ОписаниеОсновногоСеанса.Идентификатор; + ОписаниеСеанса = Контекст.ОписаниеОсновногоСеанса; // См. ОписаниеОсновногоСеанса КонецЕсли; + Данные = ОписаниеСеанса.Идентификатор; + ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Обновление доступа на уровне записей'", ОбщегоНазначения.КодОсновногоЯзыка()), @@ -12808,7 +13484,7 @@ // Обработка ранее подготовленной порции для обработки. Если ОбщиеПараметрыОбновления.Свойство("ПорцияИзНабора") Тогда - ПорцияИзНабора = ОбщиеПараметрыОбновления.ПорцияИзНабора; + ПорцияИзНабора = ОбщиеПараметрыОбновления.ПорцияИзНабора; // См. ПорцияИзНабора ЭлементыПорции = ПорцияИзНабора.Элементы.Получить(); ПараметрыОбновления.Вставить("ПоследнийОбновленныйЭлемент", ПорцияИзНабора.ПоследнийЭлементПорции); @@ -13069,6 +13745,16 @@ КонецПроцедуры // Для процедур ВыполнитьОбновлениеДоступаСписка, ПодготовитьПланОбновления. +// +// Возвращаемое значение: +// Структура: +// * КлючДанных - ЛюбаяСсылка +// - Null +// - Структура +// * ОбработатьУстаревшиеЭлементы - Булево +// * ОбработатьНаборыГруппСУстаревшимиПравами - Булево +// * Дата - Дата +// Функция НачальныйЭлемент(ПараметрыОбновления, ВидКлючаДанных = Неопределено, СохранитьВидКлючаДанных = Ложь, ПерезапускОбновленияСНачала = Ложь) @@ -13582,7 +14268,7 @@ Иначе Ссылки = Новый Массив; Типы = Новый Соответствие; - Таблица = ТочечноеЗадание[ВариантЗадания.Ключ]; + Таблица = ТочечноеЗадание[ВариантЗадания.Ключ]; // ТаблицаЗначений КонецЕсли; Для Каждого ОписаниеСсылки Из ОписаниеСсылок Цикл Ссылка = ОписаниеСсылки.Ключ; @@ -13935,7 +14621,7 @@ Если ОписаниеЗапроса = Неопределено Тогда Возврат Неопределено; КонецЕсли; - СоставИзменений = ОписаниеИзменений.Значение; + СоставИзменений = ОписаниеИзменений.Значение; // ТаблицаЗначений Если ОписаниеЗапроса.ТипыПолей.Количество() <> СоставИзменений.Колонки.Количество() Тогда Возврат Неопределено; КонецЕсли; @@ -14013,7 +14699,8 @@ // Для функции ЭлементыТочечногоЗаданияДляОбновления. Функция ДобавитьЗапросыТочечногоЗадания(ВидЗадания, Запрос, ЗапросыПакета, ЗапросыДанных, ПараметрыОбновления) - Данные = ПараметрыОбновления.ТочечноеЗадание[ВидЗадания]; + Данные = ТаблицаТочечногоЗадания(); + Данные = ПараметрыОбновления.ТочечноеЗадание[ВидЗадания]; // см. ТаблицаТочечногоЗадания Если Не ЗначениеЗаполнено(Данные) Тогда Возврат Истина; КонецЕсли; @@ -14057,6 +14744,16 @@ КонецФункции +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - ЛюбаяСсылка +// +Функция ТаблицаТочечногоЗадания() + + Возврат Неопределено; + +КонецФункции + // Для процедуры ВыполнитьОбновлениеДоступаСписка. Процедура ПерезапуститьОбновлениеПриНезавершенномТочечномОбновлении(ПараметрыОбновления) @@ -14084,7 +14781,7 @@ НаборПорций = Новый Массив; Если Элементы = Неопределено Тогда - ПорцияИзНабора = Новый Структура; + ПорцияИзНабора = ПорцияИзНабора(); ПорцияИзНабора.Вставить("Обработана", Истина); ПорцияИзНабора.Вставить("Обрабатывается", Ложь); ПорцияИзНабора.Вставить("Элементы", Новый ХранилищеЗначения(Новый ТаблицаЗначений)); @@ -14125,7 +14822,7 @@ Для Индекс = 0 По НаборПорций.Количество() - 1 Цикл ЭлементыПорции = Элементы.Скопировать(НаборПорций[Индекс]); - ПорцияИзНабора = Новый Структура; + ПорцияИзНабора = ПорцияИзНабора(); ПорцияИзНабора.Вставить("Обработана", Ложь); ПорцияИзНабора.Вставить("Обрабатывается", Ложь); НаборПорций[Индекс] = ПорцияИзНабора; @@ -14149,6 +14846,21 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * Обработана - Булево +// * Обрабатывается - Булево +// * Элементы - ХранилищеЗначения +// * ДатаПоследнегоЭлементаПорции - Дата +// * ПоследнийЭлементПорции - см. НачальныйЭлемент +// * НовыйПоследнийЭлементПорции - см. НачальныйЭлемент +// +Функция ПорцияИзНабора() + + Возврат Новый Структура; + +КонецФункции + // Для процедур ВыполнитьОбновлениеДоступаСписка, ОбновитьПорциюЭлементов, НаборПорцийЭлементов. Функция ПоследнийЭлемент(Элементы, ПараметрыОбновления, ПоследнийОбработанный = Ложь) @@ -14423,6 +15135,14 @@ // Для процедур ПоследнийЭлемент, УстановитьПараметрыПоследнегоОбновленногоЭлемента и // функции ТекстЗапросаКоличестваОставшихсяЭлементовРегистра. // +// Возвращаемое значение: +// Структура: +// * Поле1 - ЛюбаяСсылка +// * Поле2 - ЛюбаяСсылка +// * Поле3 - ЛюбаяСсылка +// * Поле4 - ЛюбаяСсылка +// * Поле5 - ЛюбаяСсылка +// Функция КлючДанных(ПараметрыОбновления, ИсходныйКлючДанных = Неопределено) КоличествоПолей = ПараметрыОбновления.ОпорныеПоля.Используемые.Количество(); @@ -15023,7 +15743,8 @@ УдалениеЗавершено = Ложь; Пока Выборка.Следующий() Цикл - НаборЗаписей.Отбор[ИмяПоляНабораГрупп].Установить(НаборГруппДоступа); + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляНабораГрупп]; // ЭлементОтбора + ЭлементОтбора.Установить(НаборГруппДоступа); НаборЗаписей.Отбор.КлючДоступа.Установить(Выборка.КлючДоступа); Если Не УдалениеЗавершено И Выборка.ВидИзмененияСтроки = 1 Тогда УдалениеЗавершено = Истина; @@ -15137,7 +15858,8 @@ Объект.ДляВнешнихПользователей = ПараметрыОбновления.ДляВнешнихПользователей; Объект.ТипЭлементовНабора = ТипЭлементовНабора; Объект.Пользователь = Строка.ТекущаяСсылка; - Объект.Наименование = Строка.Наименование + " (" + ПредставлениеЭлемента + ")"; + ОписаниеОбъекта = Строка; // СправочникОбъект.Пользователи + Объект.Наименование = ОписаниеОбъекта.Наименование + " (" + ПредставлениеЭлемента + ")"; Объект.Записать(); ЗафиксироватьТранзакцию(); @@ -15204,7 +15926,7 @@ Если Не ПараметрыОбновления.ДляВнешнихПользователей Тогда ТекстЗапросаГрупп = "ВЫБРАТЬ - | ГруппыДоступа.Ссылка КАК Ссылка + | ГруппыДоступа.Ссылка КАК СсылкаГруппы |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ @@ -15244,7 +15966,7 @@ Иначе ТекстЗапросаГрупп = "ВЫБРАТЬ - | ГруппыДоступа.Ссылка КАК Ссылка + | ГруппыДоступа.Ссылка КАК СсылкаГруппы |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ @@ -15311,7 +16033,7 @@ ТекстЗапросаГрупп = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | СоставыГруппПользователей.ГруппаПользователей КАК Ссылка + | СоставыГруппПользователей.ГруппаПользователей КАК СсылкаГруппы |ИЗ | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей |ГДЕ @@ -15347,12 +16069,8 @@ Если ПараметрыОбновления.ДляВнешнихПользователей Тогда ИмяСправочникаГрупп = "ГруппыВнешнихПользователей"; - ПредставлениеЭлемента = НСтр("ru = 'Группы внешних пользователей'", - ОбщегоНазначения.КодОсновногоЯзыка()); Иначе ИмяСправочникаГрупп = "ГруппыПользователей"; - ПредставлениеЭлемента = НСтр("ru = 'Группы пользователей'", - ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; ЭлементыДанных = НаборыИзОдногоПользователяДляОбновленияНазначенныхНаборовГрупп(ПараметрыОбновления, @@ -15385,7 +16103,7 @@ Запрос.Текст = "ВЫБРАТЬ - | НомераГрупп.Ссылка КАК Группа, + | НомераГрупп.СсылкаГруппы КАК Группа, | НомераГрупп.ЧастьНомера1 КАК ЧастьНомера1 |ПОМЕСТИТЬ НомераГрупп |ИЗ @@ -15812,7 +16530,7 @@ Если БлокЧастиНомера > 0 Тогда Для НомерБита = 0 По 31 Цикл Если ПроверитьБит(БлокЧастиНомера, НомерБита) Тогда - ГруппыНабора.Добавить(НомераГрупп[ИндексГруппы + НомерБита].Ссылка); + ГруппыНабора.Добавить(НомераГрупп[ИндексГруппы + НомерБита].СсылкаГруппы); КонецЕсли; КонецЦикла; КонецЕсли; @@ -15832,10 +16550,10 @@ Запрос.УстановитьПараметр("Хеш", Объект.Хеш); Запрос.Текст = "ВЫБРАТЬ - | СуществующиеНаборы.Ссылка КАК Ссылка, + | СуществующиеНаборы.Ссылка КАК СсылкаНабора, | СуществующиеНаборы.Группы.( | Группа КАК Группа - | ) КАК Группы + | ) КАК ГруппыНабора |ИЗ | Справочник.НаборыГруппДоступа КАК СуществующиеНаборы |ГДЕ @@ -15850,18 +16568,18 @@ Выгрузка = Запрос.Выполнить().Выгрузить(); Для Каждого Строка Из Выгрузка Цикл - Если ГруппыОбъекта.Количество() <> Строка.Группы.Количество() Тогда + Если ГруппыОбъекта.Количество() <> Строка.ГруппыНабора.Количество() Тогда Продолжить; КонецЕсли; ГруппыСовпадают = Истина; - Для Каждого Подстрока Из Строка.Группы Цикл + Для Каждого Подстрока Из Строка.ГруппыНабора Цикл Если ГруппыОбъекта.Найти(Подстрока.Группа, "Группа") = Неопределено Тогда ГруппыСовпадают = Ложь; Прервать; КонецЕсли; КонецЦикла; Если ГруппыСовпадают Тогда - Объект = Новый Структура("Ссылка", Строка.Ссылка); + Объект = Новый Структура("Ссылка", Строка.СсылкаНабора); Возврат Истина; КонецЕсли; КонецЦикла; @@ -16176,7 +16894,8 @@ Попытка Блокировка.Заблокировать(); Для Каждого Строка Из Выгрузка Цикл - НаборЗаписей.Отбор[ИмяПоляНабора].Установить(Набор); + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляНабора]; // ЭлементОтбора + ЭлементОтбора.Установить(Набор); НаборЗаписей.Отбор.КлючДоступа.Установить(Строка.КлючДоступа); НаборЗаписей.Записать(); КонецЦикла; @@ -16498,7 +17217,8 @@ КонецЕсли; КонецЕсли; Для Каждого ИмяИзмерения Из ИменаИзмерений Цикл - НаборИзОднойЗаписи.Отбор[ИмяИзмерения].Установить(Строка[ИмяИзмерения]); + ЭлементОтбора = НаборИзОднойЗаписи.Отбор[ИмяИзмерения]; // ЭлементОтбора + ЭлементОтбора.Установить(Строка[ИмяИзмерения]); КонецЦикла; НаборИзОднойЗаписи.Записать(); КонецЦикла; @@ -16653,6 +17373,57 @@ КонецФункции +// Для функции ДоступРазрешен. +Функция МодельОбъектовВПамяти(ОписаниеДанных, ПараметрыОграничения) + + Если ТипЗнч(ОписаниеДанных) = Тип("Массив") Тогда + Объекты = ОписаниеДанных; + Иначе + Объекты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеДанных); + КонецЕсли; + + ЭлементыДанных = Новый ТаблицаЗначений; + ЭлементыДанных.Колонки.Добавить("ТекущаяСсылка", Новый ОписаниеТипов( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипЗнч(Объекты[0].Ссылка)))); + + Модель = Новый Структура; + Модель.Вставить("ЭлементыДанных", ЭлементыДанных); + Модель.Вставить("Таблицы", Новый Соответствие); + Модель.Вставить("КлючиДоступаКОбъектам", + РегистрыСведений.КлючиДоступаКОбъектам.СоздатьНаборЗаписей().Выгрузить()); + + ПоляТаблицОбъекта = ПараметрыОграничения.ПоляТаблицОбъекта; + + Для Каждого Объект Из Объекты Цикл + ТекущаяСсылка = ПользователиСлужебный.СсылкаОбъекта(ОписаниеДанных); + ЭлементыДанных.Добавить().ТекущаяСсылка = ТекущаяСсылка; + Для Каждого ОписаниеТаблицы Из ПоляТаблицОбъекта Цикл + Таблица = Модель.Таблицы.Получить(ОписаниеТаблицы.ПолноеИмяТаблицы); + СписокПолей = ОписаниеТаблицы.СписокПолей; + Если Таблица = Неопределено Тогда + Таблица = ОписаниеТаблицы.ТаблицаСПолями.Получить(); + Модель.Таблицы.Вставить(ОписаниеТаблицы.ПолноеИмяТаблицы, Таблица); + КонецЕсли; + Если ЗначениеЗаполнено(ОписаниеТаблицы.ТабличнаяЧасть) Тогда + Выгрузка = Объект[ОписаниеТаблицы.ТабличнаяЧасть].Выгрузить(, СписокПолей); + Выгрузка.Свернуть(СписокПолей); + Для Каждого Строка Из Выгрузка Цикл + НоваяСтрока = Таблица.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка, СписокПолей); + НоваяСтрока.Ссылка = ТекущаяСсылка; + КонецЦикла; + Иначе + НоваяСтрока = Таблица.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Объект, СписокПолей); + НоваяСтрока.Ссылка = ТекущаяСсылка; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Модель; + +КонецФункции + // Для функции ОбновитьЭлементыДанныхСпискаСУстаревшимиКлючами, ОбновитьКлючиДоступаЭлементовДанныхПриЗаписи. Процедура ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка(ПорцияЭлементовДанных, ПараметрыОбновления) @@ -16663,13 +17434,24 @@ Контекст.Вставить("ПорцияЭлементовДанных", ПорцияЭлементовДанных); ЗапросЗначенийЭлементовДанных = Новый Запрос; - ЗапросЗначенийЭлементовДанных.Текст = ПараметрыОбновления.ТекстЗапросаЗначенийЭлементовДанныхДляКлючейДоступа; Если ЭтоСсылочныйТип Тогда Контекст.Вставить("СсылкиНаОбъекты", ПорцияЭлементовДанных.ВыгрузитьКолонку("ТекущаяСсылка")); ЗапросЗначенийЭлементовДанных.УстановитьПараметр("СсылкиНаОбъекты", Контекст.СсылкиНаОбъекты); + ИндексТаблицы = 0; + КонецЕсли; + Если ПараметрыОбновления.Свойство("МодельОбъектовВПамяти") Тогда + ЗапросЗначенийЭлементовДанных.Текст = ПараметрыОбновления.ТекстЗапросаЗначенийОбъектовВПамятиДляКлючейДоступа; + Для Каждого Таблица Из ПараметрыОбновления.МодельОбъектовВПамяти.Таблицы Цикл + ЗапросЗначенийЭлементовДанных.УстановитьПараметр(Таблица.Ключ, Таблица.Значение); + КонецЦикла; + ИндексТаблицы = ПараметрыОбновления.МодельОбъектовВПамяти.Таблицы.Количество(); Иначе - ЗапросЗначенийЭлементовДанных.УстановитьПараметр("ИдентификаторРегистра", ИдентификаторСписка); - ЗапросЗначенийЭлементовДанных.УстановитьПараметр("ЗначенияОпорныхПолей", ПорцияЭлементовДанных); + ЗапросЗначенийЭлементовДанных.Текст = ПараметрыОбновления.ТекстЗапросаЗначенийЭлементовДанныхДляКлючейДоступа; + Если Не ЭтоСсылочныйТип Тогда + ЗапросЗначенийЭлементовДанных.УстановитьПараметр("ИдентификаторРегистра", ИдентификаторСписка); + ЗапросЗначенийЭлементовДанных.УстановитьПараметр("ЗначенияОпорныхПолей", ПорцияЭлементовДанных); + ИндексТаблицы = 1; + КонецЕсли; КонецЕсли; УстановитьУточнениеПланаЗапроса(ЗапросЗначенийЭлементовДанных.Текст); РезультатыЗапросаЗначенийЭлементов = ЗапросЗначенийЭлементовДанных.ВыполнитьПакет(); @@ -16679,7 +17461,7 @@ ЗначенияСтрокТаблиц = Новый Соответствие; КлючиЗначенийСтрокОбъектов = КлючиЗначенийСтрокОбъектов(РезультатыЗапросаЗначенийЭлементов, - ?(ЭтоСсылочныйТип, 0, 1), ТаблицыКлюча, ЗначенияСтрокТаблиц); + ИндексТаблицы, ТаблицыКлюча, ЗначенияСтрокТаблиц); ТребуемыеКлючиДоступа = Новый Массив; ХешиТребуемыхКлючейДоступа = Новый Массив; @@ -16744,15 +17526,26 @@ Если ОписаниеНовыхКлючей.Количество() > 0 Тогда ОбновитьПраваНаКлючиДоступа(ОписаниеНовыхКлючей, ПараметрыОбновления, Истина, Контекст); Для Каждого ОписаниеКлюча Из ОписаниеНовыхКлючей Цикл - Если ЗначениеЗаполнено(ОписаниеКлюча.КлючДоступаОбъект.Ссылка) Тогда - ОписаниеКлюча.КлючДоступа = ОписаниеКлюча.КлючДоступаОбъект.Ссылка; + КлючДоступаОбъект = ОписаниеКлюча.КлючДоступаОбъект; // СправочникОбъект.КлючиДоступа + Если ЗначениеЗаполнено(КлючДоступаОбъект.Ссылка) Тогда + ОписаниеКлюча.КлючДоступа = КлючДоступаОбъект.Ссылка; КонецЕсли; КонецЦикла; КонецЕсли; // Обновление ключей доступа элементов данных. Если ЭтоСсылочныйТип Тогда - ЗаписатьКлючиДоступаОбъектов(ПараметрыОбновления, Контекст); + Если ПараметрыОбновления.Свойство("МодельОбъектовВПамяти") Тогда + ИмяПоляКлюча = ?(ПараметрыОбновления.ДляВнешнихПользователей, + "КлючДоступаВнешнихПользователей", "КлючДоступаПользователей"); + Для Каждого ОписаниеКлючаДоступаОбъекта Из ОписаниеКлючейДоступаОбъектов Цикл + НоваяСтрока = ПараметрыОбновления.МодельОбъектовВПамяти.КлючиДоступаКОбъектам.Добавить(); + НоваяСтрока.Объект = ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка; + НоваяСтрока[ИмяПоляКлюча] = ОписаниеКлючаДоступаОбъекта.СвойстваКлюча.КлючДоступа; + КонецЦикла; + Иначе + ЗаписатьКлючиДоступаОбъектов(ПараметрыОбновления, Контекст); + КонецЕсли; Иначе ЗаписатьКлючиДоступаРегистров(ПараметрыОбновления, Контекст); КонецЕсли; @@ -16809,7 +17602,7 @@ ЗначенияТаблиц = ОписаниеНовыхКлючей.ЗначенияТаблиц; Для Каждого ТаблицаКлюча Из ПараметрыОбновления.ТаблицыКлюча Цикл - ТаблицаЗначений = Новый ТаблицаЗначений; + ТаблицаЗначений = ЗначенияТаблицыКлюча(); ТаблицаЗначений.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("СправочникСсылка.КлючиДоступа")); ПоляТаблицы = ПараметрыОбновления.РеквизитыТаблицКлюча.Получить(ТаблицаКлюча); Если СтрНачинаетсяС(ТаблицаКлюча, "Шапка") И ТаблицаКлюча <> "Шапка0" Тогда @@ -16842,6 +17635,17 @@ КонецПроцедуры +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.КлючиДоступа +// * НомерСтроки - Число - номер строки табличной части +// +Функция ЗначенияТаблицыКлюча() + + Возврат Новый ТаблицаЗначений; + +КонецФункции + // Для процедуры ОбновитьКлючиДоступаПорцииЭлементовДанныхСписка. Функция СтрокаДляХешаКлючаДоступа(ОписаниеКлючейЗначений, ТаблицыКлюча) @@ -17181,7 +17985,8 @@ КонецЕсли; Для НомерПоля = 1 По МаксимальноеКоличествоПолей Цикл ИмяПоля = "Поле" + НомерПоля; - НаборИзОднойЗаписи.Отбор[ИмяПоля].Установить(?(НомерПоля > КоличествоИспользуемыхПолей, + ЭлементОтбора = НаборИзОднойЗаписи.Отбор[ИмяПоля]; // ЭлементОтбора + ЭлементОтбора.Установить(?(НомерПоля > КоличествоИспользуемыхПолей, Перечисления.ДополнительныеЗначенияДоступа.Null, ЭлементДанных[ИмяПоля])); КонецЦикла; НаборИзОднойЗаписи.Записать(); @@ -17283,7 +18088,7 @@ Процедура ПодготовитьНовыйКлючДоступа(ОписаниеКлюча, ОписаниеНовыхКлючей, ПараметрыОбновления) НоваяСсылка = Справочники.КлючиДоступа.ПолучитьСсылку(); - НовыйКлюч = СлужебныйЭлемент(Справочники.КлючиДоступа); + НовыйКлюч = СлужебныйЭлемент(Справочники.КлючиДоступа); // СправочникОбъект.КлючиДоступа НовыйКлюч.УстановитьСсылкуНового(НоваяСсылка); НовыйКлюч.Наименование = Строка(НоваяСсылка.УникальныйИдентификатор()); @@ -17295,7 +18100,7 @@ ВсеЗначенияТаблиц = ОписаниеНовыхКлючей.ЗначенияТаблиц; Для Каждого ЗначенияТаблицы Из ОписаниеКлюча.ЗначенияТаблиц Цикл - ВсеЗначенияТаблицы = ВсеЗначенияТаблиц[ЗначенияТаблицы.ИмяТаблицы]; + ВсеЗначенияТаблицы = ВсеЗначенияТаблиц[ЗначенияТаблицы.ИмяТаблицы]; // См. ЗначенияТаблицыКлюча Если СтрНачинаетсяС(ЗначенияТаблицы.ИмяТаблицы, "Шапка") Тогда НоваяСтрока = ВсеЗначенияТаблицы.Добавить(); @@ -17312,7 +18117,8 @@ КонецЕсли; Иначе Для Каждого Строка Из ЗначенияТаблицы.Таблица Цикл - ЗаполнитьЗначенияСвойств(НовыйКлюч[ЗначенияТаблицы.ИмяТаблицы].Добавить(), Строка); + ТабличнаяЧастьКлюча = НовыйКлюч[ЗначенияТаблицы.ИмяТаблицы]; // ТабличнаяЧасть + ЗаполнитьЗначенияСвойств(ТабличнаяЧастьКлюча.Добавить(), Строка); НоваяСтрока = ВсеЗначенияТаблицы.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); НоваяСтрока.Ссылка = НоваяСсылка; @@ -17423,7 +18229,8 @@ КонецЕсли; ЗначенияТаблицКлюча.Вставить(ТаблицаКлюча, ЗначенияТаблицы); КонецЦикла; - КлючДоступа = ЗначенияПервойТаблицы.Строки[ИндексКлюча].Ссылка; + СтрокаЗначений = ЗначенияПервойТаблицы.Строки[ИндексКлюча]; // СправочникОбъект.КлючиДоступа + КлючДоступа = СтрокаЗначений.Ссылка; ПраваНаКлюч = ПраваНаКлючДоступаСписка(ЗначенияТаблицКлюча, ПараметрыОбновления); ОбновитьПраваНаКлючДоступаСписка(КлючДоступа, ПраваНаКлюч, @@ -17496,8 +18303,10 @@ НаборЗаписейВнешнихПользователейКлюча = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаВнешнихПользователей); Для Каждого Строка Из ЭлементыДанных Цикл + СтрокаЗначений = Строка; // СправочникОбъект.КлючиДоступа + Ссылка = СтрокаЗначений.Ссылка; Если Не ЭтоОчисткаВсехКлючей И Строка.Используется Тогда - ЗапросИспользованияКлюча.УстановитьПараметр("Ссылка", Строка.Ссылка); + ЗапросИспользованияКлюча.УстановитьПараметр("Ссылка", Ссылка); Если Не ЗапросИспользованияКлюча.Выполнить().Пустой() Тогда Если ТребуетсяПрерватьОбработкуЭлементов(ПараметрыОбновления, 1) Тогда Прервать; @@ -17516,20 +18325,20 @@ ПараметрыОбновления.ДляВнешнихПользователей); КонецЕсли; ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючиДоступа"); - ЭлементБлокировки.УстановитьЗначение("Ссылка", Строка.Ссылка); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаГруппДоступа"); - ЭлементБлокировки.УстановитьЗначение("КлючДоступа", Строка.Ссылка); + ЭлементБлокировки.УстановитьЗначение("КлючДоступа", Ссылка); ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаНаборовГруппДоступа"); - ЭлементБлокировки.УстановитьЗначение("КлючДоступа", Строка.Ссылка); + ЭлементБлокировки.УстановитьЗначение("КлючДоступа", Ссылка); ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаПользователей"); - ЭлементБлокировки.УстановитьЗначение("КлючДоступа", Строка.Ссылка); + ЭлементБлокировки.УстановитьЗначение("КлючДоступа", Ссылка); ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаВнешнихПользователей"); - ЭлементБлокировки.УстановитьЗначение("КлючДоступа", Строка.Ссылка); + ЭлементБлокировки.УстановитьЗначение("КлючДоступа", Ссылка); НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); - Объект = СлужебныйЭлемент(Неопределено, Строка.Ссылка); + Объект = СлужебныйЭлемент(Неопределено, Ссылка); УдалитьКлюч = Ложь; Если ЭтоОчисткаВсехКлючей Или Объект = Неопределено Тогда УдалитьКлюч = Истина; @@ -17541,22 +18350,22 @@ УдалитьКлюч = Истина; КонецЕсли; Если УдалитьКлюч Тогда - Запрос.УстановитьПараметр("КлючДоступа", Строка.Ссылка); + Запрос.УстановитьПараметр("КлючДоступа", Ссылка); РезультатыЗапроса = Запрос.ВыполнитьПакет(); Если Не РезультатыЗапроса[0].Пустой() Тогда - НаборЗаписейГруппДоступаКлюча.Отбор.КлючДоступа.Установить(Строка.Ссылка); + НаборЗаписейГруппДоступаКлюча.Отбор.КлючДоступа.Установить(Ссылка); НаборЗаписейГруппДоступаКлюча.Записать(); КонецЕсли; Если Не РезультатыЗапроса[1].Пустой() Тогда - НаборЗаписейНаборовГруппДоступаКлюча.Отбор.КлючДоступа.Установить(Строка.Ссылка); + НаборЗаписейНаборовГруппДоступаКлюча.Отбор.КлючДоступа.Установить(Ссылка); НаборЗаписейНаборовГруппДоступаКлюча.Записать(); КонецЕсли; Если Не РезультатыЗапроса[2].Пустой() Тогда - НаборЗаписейПользователейКлюча.Отбор.КлючДоступа.Установить(Строка.Ссылка); + НаборЗаписейПользователейКлюча.Отбор.КлючДоступа.Установить(Ссылка); НаборЗаписейПользователейКлюча.Записать(); КонецЕсли; Если Не РезультатыЗапроса[3].Пустой() Тогда - НаборЗаписейВнешнихПользователейКлюча.Отбор.КлючДоступа.Установить(Строка.Ссылка); + НаборЗаписейВнешнихПользователейКлюча.Отбор.КлючДоступа.Установить(Ссылка); НаборЗаписейВнешнихПользователейКлюча.Записать(); КонецЕсли; КонецЕсли; @@ -17808,12 +18617,7 @@ ПраваГруппДоступаСписка = Новый Соответствие; Пока Выборка.Следующий() Цикл - ПраваГруппыДоступа = Новый Структура; - ПраваГруппыДоступа.Вставить("Изменение", Выборка.Изменение); - ПраваГруппыДоступа.Вставить("Добавление", Выборка.Добавление); - ПраваГруппыДоступа.Вставить("ЧтениеБезОграничения", Выборка.ЧтениеБезОграничения); - ПраваГруппыДоступа.Вставить("ИзменениеБезОграничения", Выборка.ИзменениеБезОграничения); - ПраваГруппыДоступа.Вставить("ДобавлениеБезОграничения", Выборка.ДобавлениеБезОграничения); + ПраваГруппыДоступа = НовыеПраваГруппыДоступа(Выборка); ПраваГруппДоступаСписка.Вставить(Выборка.ГруппаДоступа, ПраваГруппыДоступа); КонецЦикла; ПараметрыОбновления.Вставить("ПраваГруппДоступаСписка", ПраваГруппДоступаСписка); @@ -17862,6 +18666,27 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Изменение - Булево +// * Добавление - Булево +// * ЧтениеБезОграничения - Булево +// * ИзменениеБезОграничения - Булево +// * ДобавлениеБезОграничения - Булево +// +Функция НовыеПраваГруппыДоступа(Выборка) + + ПраваГруппыДоступа = Новый Структура; + ПраваГруппыДоступа.Вставить("Изменение", Выборка.Изменение); + ПраваГруппыДоступа.Вставить("Добавление", Выборка.Добавление); + ПраваГруппыДоступа.Вставить("ЧтениеБезОграничения", Выборка.ЧтениеБезОграничения); + ПраваГруппыДоступа.Вставить("ИзменениеБезОграничения", Выборка.ИзменениеБезОграничения); + ПраваГруппыДоступа.Вставить("ДобавлениеБезОграничения", Выборка.ДобавлениеБезОграничения); + + Возврат ПраваГруппыДоступа; + +КонецФункции + // Для процедуры ЗаполнитьПраваИУчастниковГруппДоступаСписка. Процедура ЗаполнитьПользователейГруппПользователей(ПользователиГруппПользователей, РезультатЗапроса) @@ -18157,7 +18982,7 @@ Для Каждого ОписаниеПрав Из ПараметрыОбновления.ПраваГруппДоступаСписка Цикл ГруппаДоступа = ОписаниеПрав.Ключ; - ПраваГруппыДоступа = ОписаниеПрав.Значение; + ПраваГруппыДоступа = ОписаниеПрав.Значение; // См. НовыеПраваГруппыДоступа Контекст.Вставить("ГруппаДоступа", ГруппаДоступа); Контекст.Вставить("ЗначенияГруппыДоступа", @@ -18280,7 +19105,7 @@ ПравоДобавление = "Ложь"; КонецЕсли; - Права = Новый Структура("Изменение, Добавление", ПравоИзменение = "Истина", ПравоДобавление = "Истина"); + Права = НовыеПрава(ПравоИзменение = "Истина", ПравоДобавление = "Истина"); Если ТипЗнч(ПравоЧтение) <> Тип("Соответствие") Тогда Если Не Контекст.БезЗаписиПраваЧтение Или Права.Изменение Или Права.Добавление Тогда @@ -18303,6 +19128,17 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Изменение - Булево +// * Добавление - Булево +// +Функция НовыеПрава(Изменение, Добавление) + + Возврат Новый Структура("Изменение, Добавление", Изменение, Добавление); + +КонецФункции + // Для процедуры ДобавитьПраваПользователейНаКлючДоступа. Процедура ДобавитьПользователямПраваНаКлючДоступа(ПраваНаКлючДляПользователей, СоставПользователей, Изменение, Добавление, БезЗаписиПраваЧтение) @@ -18325,7 +19161,7 @@ КонецЕсли; Иначе Для Каждого КлючИЗначение Из СоставПользователей Цикл - Права = ПраваНаКлючДляПользователей.Получить(КлючИЗначение.Ключ); + Права = ПраваНаКлючДляПользователей.Получить(КлючИЗначение.Ключ); // См. НовыеПрава Если Права = Неопределено Тогда Права = Новый Структура("Изменение, Добавление", Изменение, Добавление); Иначе @@ -19093,7 +19929,7 @@ Если ОписаниеНовыхКлючей <> Неопределено Тогда ОписаниеНовогоКлюча = ОписаниеНовыхКлючей.ОписанияКлючейПоСсылке.Получить(КлючДоступа); - КлючДоступаОбъект = ОписаниеНовогоКлюча.КлючДоступаОбъект; + КлючДоступаОбъект = ОписаниеНовогоКлюча.КлючДоступаОбъект; // СправочникОбъект.КлючиДоступа ЭлементБлокировкиКлюча = Блокировка.Добавить("Справочник.КлючиДоступа"); ЭлементБлокировкиКлюча.УстановитьЗначение("Хеш", КлючДоступаОбъект.Хеш); ЭлементБлокировкиКлюча.УстановитьЗначение("Список", КлючДоступаОбъект.Список); @@ -19464,9 +20300,10 @@ ПередЗаписьюСтрок(ПараметрыОбновления); Пока Выборка.Следующий() Цикл ВладелецПрав = Выборка[ИмяПоляВладельцаПрав]; - Права = ПраваНаКлюч.Получить(ВладелецПрав); + Права = ПраваНаКлюч.Получить(ВладелецПрав); // См. НовыеПрава Если Права = Неопределено Тогда - НаборЗаписей.Отбор[ИмяПоляВладельцаПрав].Установить(ВладелецПрав); + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора + ЭлементОтбора.Установить(ВладелецПрав); НаборЗаписей.Записать(); Если ТипЗнч(ВладелецПрав) = ТипГруппыДоступа Тогда ЕстьИзмененияПравГруппДоступа = Истина; @@ -19482,12 +20319,13 @@ ОднаЗапись = НаборЗаписей.Добавить(); ОднаЗапись.КлючДоступа = КлючДоступа; Для Каждого ОписаниеПрав Из ПраваНаКлюч Цикл - Права = ОписаниеПрав.Значение; + Права = ОписаниеПрав.Значение; // См. НовыеПрава Если Права = Null Тогда Продолжить; КонецЕсли; ВладелецПрав = ОписаниеПрав.Ключ; - НаборЗаписей.Отбор[ИмяПоляВладельцаПрав].Установить(ВладелецПрав); + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора + ЭлементОтбора.Установить(ВладелецПрав); ОднаЗапись[ИмяПоляВладельцаПрав] = ВладелецПрав; ОднаЗапись.Изменение = Права.Изменение; ОднаЗапись.Добавление = Права.Добавление; @@ -19516,9 +20354,10 @@ ПередЗаписьюСтрок(ПараметрыОбновления); Пока Выборка.Следующий() Цикл ВладелецПрав = Выборка[ИмяПоляВладельцаПрав]; - Права = ПраваНаКлюч.Получить(ВладелецПрав); + Права = ПраваНаКлюч.Получить(ВладелецПрав); // См. НовыеПрава Если Права = Неопределено Тогда - НаборЗаписей.Отбор[ИмяПоляВладельцаПрав].Установить(ВладелецПрав); + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора + ЭлементОтбора.Установить(ВладелецПрав); НаборЗаписей.Записать(); ЕстьИзмененияПрав = Истина; ИначеЕсли Выборка.Изменение = Права.Изменение @@ -19531,12 +20370,13 @@ ОднаЗапись = НаборЗаписей.Добавить(); ОднаЗапись.КлючДоступа = КлючДоступа; Для Каждого ОписаниеПрав Из ПраваНаКлюч Цикл - Права = ОписаниеПрав.Значение; + Права = ОписаниеПрав.Значение; // См. НовыеПрава Если Права = Null Тогда Продолжить; КонецЕсли; ВладелецПрав = ОписаниеПрав.Ключ; - НаборЗаписей.Отбор[ИмяПоляВладельцаПрав].Установить(ВладелецПрав); + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора + ЭлементОтбора.Установить(ВладелецПрав); ОднаЗапись[ИмяПоляВладельцаПрав] = ВладелецПрав; ОднаЗапись.Изменение = Права.Изменение; ОднаЗапись.Добавление = Права.Добавление; @@ -19559,7 +20399,8 @@ КоличествоЗаписанных = 0; ПередЗаписьюСтрок(ПараметрыОбновления); Пока Выборка.Следующий() Цикл - НаборЗаписей.Отбор[ИмяПоляВладельцаПрав].Установить(Выборка[ИмяПоляВладельцаПрав]); + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора + ЭлементОтбора.Установить(Выборка[ИмяПоляВладельцаПрав]); Если Не УдалениеЗавершено И Выборка.ВидИзмененияСтроки = 1 Тогда УдалениеЗавершено = Истина; ОднаЗапись = НаборЗаписей.Добавить(); @@ -19588,6 +20429,7 @@ КонецЕсли; КонецЕсли; + ЭлементСправочника.ДополнительныеСвойства.Вставить("НеВыполнятьКонтрольУдаляемых"); ЭлементСправочника.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); ЭлементСправочника.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; ЭлементСправочника.ОбменДанными.Загрузка = Истина; @@ -19600,6 +20442,7 @@ Функция СлужебныйНаборЗаписей(МенеджерРегистра) НаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); + НаборЗаписей.ДополнительныеСвойства.Вставить("НеВыполнятьКонтрольУдаляемых"); НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; НаборЗаписей.ОбменДанными.Загрузка = Истина; @@ -19654,15 +20497,17 @@ + " = " + ?(ПараметрыПланирования.ЭтоОбработкаУстаревшихЭлементов, "Да", "Нет"); ВедущийОбъект = Неопределено; - Если ТипЗнч(ПараметрыПланирования.ВедущийОбъект) = Тип("Структура") Тогда - Если ПараметрыПланирования.ВедущийОбъект.Свойство("ПоЗначениямПолей") Тогда - Указатели = ПараметрыПланирования.ВедущийОбъект.ПоЗначениямПолей.Описание; + ОписаниеВедущегоОбъекта = ПараметрыПланирования.ВедущийОбъект; // См. ОписаниеВедущегоОбъекта + + Если ТипЗнч(ОписаниеВедущегоОбъекта) = Тип("Структура") Тогда + Если ОписаниеВедущегоОбъекта.Свойство("ПоЗначениямПолей") Тогда + Указатели = ОписаниеВедущегоОбъекта.ПоЗначениямПолей.Описание; ВедущийОбъект = "ПоЗначениямПолей"; - ИначеЕсли ПараметрыПланирования.ВедущийОбъект.Свойство("ПоКлючамДоступа") Тогда - Указатели = ПараметрыПланирования.ВедущийОбъект.ПоКлючамДоступа; + ИначеЕсли ОписаниеВедущегоОбъекта.Свойство("ПоКлючамДоступа") Тогда + Указатели = ОписаниеВедущегоОбъекта.ПоКлючамДоступа; ВедущийОбъект = "ПоКлючамДоступа"; - ИначеЕсли ПараметрыПланирования.ВедущийОбъект.Свойство("ПоЗначениямСГруппами") Тогда - Указатели = ПараметрыПланирования.ВедущийОбъект.ПоЗначениямСГруппами; + ИначеЕсли ОписаниеВедущегоОбъекта.Свойство("ПоЗначениямСГруппами") Тогда + Указатели = ОписаниеВедущегоОбъекта.ПоЗначениямСГруппами; ВедущийОбъект = "ПоЗначениямСГруппами"; КонецЕсли; Если ВедущийОбъект <> Неопределено Тогда @@ -19773,6 +20618,12 @@ КонецФункции // Для процедуры УправлениеДоступом.ОтключитьОбновлениеКлючейДоступа. +// +// Параметры: +// Списки - Массив +// ДобавленныеСписки - Соответствие +// НедоступныеСписки - Массив - (возвращаемое значение) +// Процедура ДобавитьЗависимыеСписки(Списки, ДобавленныеСписки, НедоступныеСписки) Экспорт ИсходныеСписки = Новый ФиксированныйМассив(Списки); @@ -20041,6 +20892,21 @@ // Основная функция, возвращающая параметры, необходимые для регистрации // необходимости обновления ключей доступа к элементам данных. +// +// Параметры: +// ПолноеИмя - Строка - полное имя списка +// ИдентификаторТранзакции - УникальныйИдентификатор +// ПовторныйВызов - Булево - только при вызове из самой же функции +// +// Возвращаемое значение: +// Структура: +// * ЗависимыеСписки - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// * ПоЗначениямПолей - см. ВедущийСписокПоЗначениямПолей +// * ПоКлючамДоступа - см. ВедущийСписокПоКлючамДоступаИлиЗначениямСГруппами +// * ПоЗначениямСГруппами - см. ВедущийСписокПоКлючамДоступаИлиЗначениямСГруппами +// Функция СвойстваСпискаКакВедущего(ПолноеИмя, ИдентификаторТранзакции = Неопределено, ПовторныйВызов = Ложь) УстановитьОтключениеБезопасногоРежима(Истина); @@ -20102,7 +20968,7 @@ Возврат; КонецЕсли; - ПоЗначениямПолей = Новый Структура(Свойства.ПоЗначениямПолей); + ПоЗначениямПолей = Новый Структура(Свойства.ПоЗначениямПолей); // См. ВедущийСписокПоЗначениямПолей ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); Если ПоЗначениямПолей.ЭтоСсылочныйТип Тогда @@ -20123,15 +20989,17 @@ Для Каждого ТабличнаяЧасть Из ПоЗначениямПолей.ТабличныеЧасти Цикл Коллекции = Новый Структура("СтандартныеТабличныеЧасти, ТабличныеЧасти"); + ТабличнаяЧастьИмя = ТабличнаяЧасть.Имя; ЗаполнитьЗначенияСвойств(Коллекции, ОбъектМетаданных); МетаданныеТаблицы = Неопределено; Если ТипЗнч(Коллекции.ТабличныеЧасти) = Тип("КоллекцияОбъектовМетаданных") Тогда - МетаданныеТаблицы = ОбъектМетаданных.ТабличныеЧасти.Найти(ТабличнаяЧасть.Имя); + МетаданныеТаблицы = ОбъектМетаданных.ТабличныеЧасти.Найти(ТабличнаяЧастьИмя); КонецЕсли; Если МетаданныеТаблицы = Неопределено И ТипЗнч(Коллекции.СтандартныеТабличныеЧасти) = Тип("ОписанияСтандартныхТабличныхЧастей") Тогда Для Каждого СтандартнаяТабличнаяЧасть Из Коллекции.СтандартныеТабличныеЧасти Цикл - Если СтандартнаяТабличнаяЧасть.Имя = ТабличнаяЧасть.Имя Тогда + СтандартнаяТабличнаяЧасть = СтандартнаяТабличнаяЧасть; // ОписаниеСтандартнойТабличнойЧасти + Если СтандартнаяТабличнаяЧасть.Имя = ТабличнаяЧастьИмя Тогда МетаданныеТаблицы = СтандартнаяТабличнаяЧасть; Прервать; КонецЕсли; @@ -20150,7 +21018,7 @@ |ГДЕ | ТекущаяТаблица.Ссылка = &СсылкаНаОбъект"; ЗаполнитьПоляВыбораТекущейТаблицы(ТекстЗапросаТабличнойЧасти, - ПолноеИмя + "." + ТабличнаяЧасть.Имя, ТабличнаяЧасть.ВсеПоля, МетаданныеТаблицы, Отказ, Истина); + ПолноеИмя + "." + ТабличнаяЧастьИмя, ТабличнаяЧасть.ВсеПоля, МетаданныеТаблицы, Отказ, Истина); ТекстЗапроса = ТекстЗапроса + ?(ТекстЗапроса = "", "", ОбщегоНазначения.РазделительПакетаЗапросов()) + ТекстЗапросаТабличнойЧасти; @@ -20230,6 +21098,10 @@ КонецФункции // Основная функция, возвращающая параметры, необходимые для проверки прав в момент записи элементов данных. +// +// Возвращаемое значение: +// Структура +// Функция ПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции = Неопределено, ДляВнешнихПользователей = Неопределено) Экспорт УстановитьОтключениеБезопасногоРежима(Истина); @@ -20314,6 +21186,16 @@ // Для процедуры ЗаполнитьПараметрыОграничения и функций // ХранимыеПараметрыОграниченияДоступа, ОшибкиОграниченийДоступа. // +// Возвращаемое значение: +// Структура: +// * СвойстваВидовДоступа - см. ХранимоеОписаниеСвойствВидовДоступа +// * ТипыПользователя - Массив Из Тип +// * ТипыВладельцевНастроекПрав - ФиксированноеСоответствие +// * ОтдельныеТаблицыНастроекПрав - ФиксированноеСоответствие +// * ВнешниеПользователиВключены - Булево +// * ИспользуемыеТипыЗначений - см. ИспользуемыеТипыЗначений +// * СпискиСОграничением - см. УправлениеДоступомСлужебныйПовтИсп.СпискиСОграничением +// Функция ОбщийКонтекстРасчетаПараметровОграничения(ВсеВидыДоступаИспользуются = Неопределено, ЗаполнитьСпискиСОграничением = Истина) ТипыПользователя = Новый Массив; @@ -20361,6 +21243,12 @@ КонецФункции // Для функций ОбщийКонтекстРасчетаПараметровОграничения и ИспользованиеВидовДоступаИзменено. +// +// Возвращаемое значение: +// Соответствие: +// * Ключ - Тип +// * Значение - Булево - Истина +// Функция ИспользуемыеТипыЗначений(СвойстваВидовДоступа, ВсеВидыДоступаИспользуются = Ложь) ИспользуемыеТипыЗначений = Новый Соответствие; @@ -20978,6 +21866,17 @@ КонецПроцедуры // Для функций РассчитанныеПараметрыОграничения, ХранимыеПараметрыОграниченияДоступа. +// +// Возвращаемое значение: +// Структура: +// * Текст - Строка +// * ТекстДляВнешнихПользователей - Строка +// * ПоВладельцуБезЗаписиКлючейДоступа - Булево +// - Неопределено +// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Булево +// - Неопределено +// * ТекстВМодулеМенеджера - Булево +// Функция ОписаниеОграниченияДанных(ОбщийКонтекст, ПолноеИмя, БезВызоваИсключения = Ложь) Ограничение = Новый Структура; @@ -21112,7 +22011,7 @@ // Для функций РассчитанныеПараметрыОграничения и ПараметрыОграниченияДляВидаПользователей. // // Возвращаемое значение: -// см. УправлениеДоступом.СтруктураОграничения +// см. СтруктураОграничения // Функция РассчитаннаяСтруктураОграничения(ПолноеИмя, ТекстОграничения, ТекстВМодулеМенеджера, ДляВнешнихПользователей, БезИсключения = Ложь) @@ -21140,6 +22039,9 @@ // Для функций СвойстваСпискаКакВедущего, ПараметрыОграничения и процедур УстановкаПараметровСеанса, // ЗаполнитьПараметрыОграничения, ДобавитьПараметрыОграниченияСписка. // +// Возвращаемое значение: +// Структура +// Функция ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции, ОбщийКонтекст, Обновить, УстановкаПараметровСеансаДляШаблонов = Ложь, УстановкаПараметровДляОтчетаПраваДоступа = Ложь, ЕстьИзменения = Ложь) Экспорт @@ -21147,13 +22049,14 @@ Если Обновить Тогда ВерсияПараметров = НоваяВерсияПараметровОграниченияДоступа(ОбщийКонтекст, ЕстьИзменения); УстановитьВерсиюПараметров(ВерсияПараметров, ИдентификаторТранзакции, ОбщийКонтекст); - Возврат ПараметрыСеанса.ПараметрыОграниченияДоступа.Параметры; + ПараметрыОграниченияДоступа = ПараметрыСеанса.ПараметрыОграниченияДоступа; // См. СеансовыеПараметрыОграниченияДоступа + Возврат ПараметрыОграниченияДоступа.Параметры; КонецЕсли; - ТекущиеПараметры = ПараметрыСеанса.ПараметрыОграниченияДоступа; + ТекущиеПараметры = ПараметрыСеанса.ПараметрыОграниченияДоступа; // См. СеансовыеПараметрыОграниченияДоступа Если Не ЗначениеЗаполнено(ТекущиеПараметры) Или ТекущиеПараметры.Параметры = Неопределено Тогда - ТекущиеПараметры = Новый Структура("Версия, ХешСумма", "", ""); + ТекущиеПараметры = Новый Структура("Версия, ХешСумма", "", ""); // См. СеансовыеПараметрыОграниченияДоступа ИдентификаторыТранзакции = Новый Соответствие; Иначе ИдентификаторыТранзакции = КэшПараметровОграничения().ИдентификаторыТранзакции; @@ -21217,12 +22120,17 @@ УстановитьВерсиюПараметров(ВерсияПараметров, ИдентификаторТранзакции, ОбщийКонтекст, УстановкаПараметровСеансаДляШаблонов); - Возврат ПараметрыСеанса.ПараметрыОграниченияДоступа.Параметры; + ПараметрыОграниченияДоступа = ПараметрыСеанса.ПараметрыОграниченияДоступа; // См. СеансовыеПараметрыОграниченияДоступа + Возврат ПараметрыОграниченияДоступа.Параметры; КонецФункции // Для отчета ПраваДоступа. -Функция ВсеВидыОграниченийПравДляОтчетаПраваДоступа() Экспорт +// +// Возвращаемое значение: +// Строка +// +Функция ВсеВидыОграниченийПравДляОтчетаПраваДоступа() Кэш = КэшПараметровОграничения(); @@ -21306,6 +22214,10 @@ КонецФункции // Для функции ДействующиеПараметрыОграниченияДоступа. +// +// Возвращаемое значение: +// см. ХранимыеПараметрыОграниченияДоступа +// Функция НоваяВерсияПараметровОграниченияДоступа(ОбщийКонтекст, ЕстьИзменения = Ложь) Если РегистрироватьСтрокуВерсииПараметровОграниченияДоступа() Тогда @@ -21576,16 +22488,24 @@ КонецФункции // Для процедуры ХранимыеПараметрыОграниченияДоступа. +// +// Возвращаемое значение: +// Строка +// Функция ВерсияСтруктурыКэша() // Число нужно увеличивать при внесении изменений в состав параметров кэша // (в том числе при изменении версии шаблонов). - Возврат "18"; + Возврат "19"; КонецФункции // Для процедур УстановкаПараметровСеанса, УточнитьВерсииШаблоновОграниченияДоступа и // для функции СтруктураХранимыхПараметровШаблонов. +// +// Возвращаемое значение: +// Строка +// Функция ВерсииШаблоновОграниченияДоступа() Возврат @@ -21675,14 +22595,15 @@ Возврат; КонецЕсли; Иначе - ДляШаблоновОграниченияДоступа = СтруктураХранимыхПараметровШаблонов(); + ДляШаблоновОграниченияДоступа = НоваяСтруктураХранимыхПараметровШаблонов(); КонецЕсли; ВерсииШаблонов = СтрСоединить(СтрРазделить( ДляШаблоновОграниченияДоступа.ВерсииШаблонов, Символы.ПС + Символы.ВК, Ложь), Символы.ПС); УточнитьВерсииШаблоновОграниченияДоступа(ВерсииШаблонов); - ПараметрыШаблонов = СтруктураПараметровШаблонов(ДляШаблоновОграниченияДоступа.ПараметрыШаблонов); + ПараметрыШаблонов = Новый Структура(СтруктураПараметровШаблонов( + ДляШаблоновОграниченияДоступа.ПараметрыШаблонов)); ПараметрыШаблонов.Вставить("ВерсииШаблоновОграниченияДоступа", ВерсииШаблонов); ОбновитьПараметрыСеансаДляШаблонов = УстановкаПараметровСеансаДляШаблонов; @@ -21704,6 +22625,24 @@ ОбновитьРазрешенныеНаборыВПараметрахСеанса(УстановкаПараметровСеансаДляШаблонов, Истина); + Параметры = СеансовыеПараметрыОграниченияДоступа(ВерсияПараметров, + ДляЗаписиОбъектовИПроверкиПрав, УстановкаПараметровСеансаДляШаблонов); + ПараметрыСеанса.ПараметрыОграниченияДоступа = Параметры; + +КонецПроцедуры + +// Для процедуры УстановитьВерсиюПараметров. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * Версия - Строка +// * ХешСумма - Строка +// * ДатаСоздания - Дата +// * Параметры - см. СтруктураХранимыхПараметровЗаписи +// +Функция СеансовыеПараметрыОграниченияДоступа(ВерсияПараметров, ДляЗаписиОбъектовИПроверкиПрав, + УстановкаПараметровСеансаДляШаблонов) + ПараметрыОграничения = Новый Структура; ПараметрыОграничения.Вставить("Версия", ВерсияПараметров.Версия); ПараметрыОграничения.Вставить("ХешСумма", ВерсияПараметров.ХешСумма); @@ -21715,10 +22654,9 @@ ПараметрыОграничения.Вставить("ПараметрыСеансаДляШаблоновУстановлены"); КонецЕсли; - ФиксированныеПараметрыОграничения = Новый ФиксированнаяСтруктура(ПараметрыОграничения); - ПараметрыСеанса.ПараметрыОграниченияДоступа = ФиксированныеПараметрыОграничения; + Возврат Новый ФиксированнаяСтруктура(ПараметрыОграничения); -КонецПроцедуры +КонецФункции // Для процедуры УстановитьВерсиюПараметров. Процедура УточнитьВерсииШаблоновОграниченияДоступа(ВерсииШаблонов) @@ -21824,7 +22762,7 @@ Результат = ""; Для Счетчик = 1 По 32 Цикл Целое = Цел(Остаток / 2); - Результат = ?(Остаток - Целое * 2 = 0, "", Строка(Счетчик) + Символ + ";") + Результат; + Результат = ?(Остаток - Целое * 2 = 0, "", XMLСтрока(Счетчик) + Символ + ";") + Результат; Остаток = Целое; КонецЦикла; @@ -21844,6 +22782,20 @@ КонецПроцедуры // Для функции НоваяВерсияПараметровОграниченияДоступа. +// +// Параметры: +// ОбщийКонтекст - см. ОбщийКонтекстРасчетаПараметровОграничения +// ВерсииОграниченийСписков - Соответствие +// +// Возвращаемое значение: +// Структура: +// * ДляШаблоновВСеансахПользователей - см. НоваяСтруктураХранимыхПараметровШаблонов +// * ДляШаблоновВСеансахВнешнихПользователей - см. НоваяСтруктураХранимыхПараметровШаблонов +// * ДляЗаписиОбъектовИПроверкиПрав - см. НоваяСтруктураХранимыхПараметровЗаписи +// * ДляОтчетаПоПравамДоступа - см. НоваяСтруктураХранимыхПараметровОтчета +// * ХешСумма - Строка +// * ДатаСоздания - Дата +// Функция ХранимыеПараметрыОграниченияДоступа(ОбщийКонтекст, ВерсииОграниченийСписков = Неопределено) Если ОбщийКонтекст = Неопределено Тогда @@ -21882,11 +22834,7 @@ ДобавитьНестандартныеВидыОграниченийПрав(ВсеВидыОграниченийПрав); Если ОбщийКонтекст.Свойство("СтрокиВерсииХранимыхПараметров") Тогда - СтрокиВерсийСписков = Новый ТаблицаЗначений; - СтрокиВерсийСписков.Колонки.Добавить("Список", Новый ОписаниеТипов("Строка")); - СтрокиВерсийСписков.Колонки.Добавить("ДляВнешнихПользователей", Новый ОписаниеТипов("Булево")); - СтрокиВерсийСписков.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка")); - СтрокиВерсийСписков.Колонки.Добавить("СтрокаВерсии", Новый ОписаниеТипов("Строка")); + СтрокиВерсийСписков = НовыеСтрокиВерсийСписков(); ОбщийКонтекст.СтрокиВерсииХранимыхПараметров = Новый Структура("ВсеВерсииСтрокой, ВсеВидыОграниченийСтрокой, СтрокиВерсийСписков", "", "", СтрокиВерсийСписков); @@ -21899,7 +22847,7 @@ КонтекстДляПользователей.Вставить("ДополнительныйКонтекст", ДополнительныйКонтекстДляПользователей); КонтекстДляПользователей.Вставить("ВедущиеСписки", Новый Соответствие); КонтекстДляПользователей.Вставить("ВерсииОграниченийСписков", Новый Соответствие); - КонтекстДляПользователей.Вставить("ПараметрыШаблонов", СтруктураПараметровШаблонов()); + КонтекстДляПользователей.Вставить("ПараметрыШаблонов", НоваяСтруктураПараметровШаблонов()); КонтекстДляПользователей.Вставить("СпискиСДатой", СпискиСДатой); КонтекстДляПользователей.Вставить("ИдентификаторыСписков", ИдентификаторыСписков); КонтекстДляПользователей.Вставить("ВсеВидыОграниченийПрав", ВсеВидыОграниченийПрав); @@ -21913,7 +22861,7 @@ КонтекстДляВнешнихПользователей.Вставить("ДополнительныйКонтекст", ДополнительныйКонтекстДляВнешнихПользователей); КонтекстДляВнешнихПользователей.Вставить("ВедущиеСписки", Новый Соответствие); КонтекстДляВнешнихПользователей.Вставить("ВерсииОграниченийСписков", Новый Соответствие); - КонтекстДляВнешнихПользователей.Вставить("ПараметрыШаблонов", СтруктураПараметровШаблонов()); + КонтекстДляВнешнихПользователей.Вставить("ПараметрыШаблонов", НоваяСтруктураПараметровШаблонов()); КонтекстДляВнешнихПользователей.Вставить("СпискиСДатой", СпискиСДатой); КонтекстДляВнешнихПользователей.Вставить("ИдентификаторыСписков", ИдентификаторыСписков); КонтекстДляВнешнихПользователей.Вставить("ВсеВидыОграниченийПрав", ВсеВидыОграниченийПрав); @@ -21930,6 +22878,7 @@ ДобавитьВедущиеСписки(ВедущиеСписки, "ДляВнешнихПользователей", ОписаниеВедущихСписков.Ключ, ОписаниеВедущихСписков.Значение); КонецЦикла; + Свойства = ВедущийСписокПоЗначениямПолей(); Для Каждого ВедущийСписок Из ВедущиеСписки Цикл Свойства = ВедущийСписок.Значение; Если Свойства.ПоЗначениямПолей <> Неопределено Тогда @@ -21963,17 +22912,15 @@ КонецЕсли; // Подготовка дополнительного контекста для расчета параметров ограничения отдельного списка. - ХранимыеСвойства = "СпискиСОтключеннымОграничением, СпискиСОтключеннымОграничениемЧтения, - |СвойстваОграниченияСписков, СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей"; - ДляПользователей = Новый Структура(ХранимыеСвойства); + ДляПользователей = НовыйХранимыйДополнительныйКонтекст(); ЗаполнитьЗначенияСвойств(ДляПользователей, КонтекстДляПользователей.ДополнительныйКонтекст); - ДляВнешнихПользователей = Новый Структура(ХранимыеСвойства); + ДляВнешнихПользователей = НовыйХранимыйДополнительныйКонтекст(); ЗаполнитьЗначенияСвойств(ДляВнешнихПользователей, КонтекстДляВнешнихПользователей.ДополнительныйКонтекст); ДополнительныйКонтекст = Новый Структура; ДополнительныйКонтекст.Вставить("ДляПользователей", ДляПользователей); ДополнительныйКонтекст.Вставить("ДляВнешнихПользователей", ДляВнешнихПользователей); - ПараметрыЗаписи = СтруктураХранимыхПараметровЗаписи(); + ПараметрыЗаписи = НоваяСтруктураХранимыхПараметровЗаписи(); ПараметрыЗаписи.ВерсииОграниченийСписков = ВерсииОграниченийСписков; ПараметрыЗаписи.ВедущиеСписки = ВедущиеСписки; ПараметрыЗаписи.ДополнительныйКонтекст = ДополнительныйКонтекст; @@ -21984,12 +22931,12 @@ ХранимыеПараметры = Новый Структура; - ХранимыеПараметрыШаблоновДляПользователей = СтруктураХранимыхПараметровШаблонов(); + ХранимыеПараметрыШаблоновДляПользователей = НоваяСтруктураХранимыхПараметровШаблонов(); ХранимыеПараметрыШаблоновДляПользователей.ПараметрыШаблонов = КонтекстДляПользователей.ПараметрыШаблонов; ХранимыеПараметры.Вставить("ДляШаблоновВСеансахПользователей", Новый ХранилищеЗначения(ОбщегоНазначения.ФиксированныеДанные(ХранимыеПараметрыШаблоновДляПользователей))); - ХранимыеПараметрыШаблоновДляВнешнихПользователей = СтруктураХранимыхПараметровШаблонов(); + ХранимыеПараметрыШаблоновДляВнешнихПользователей = НоваяСтруктураХранимыхПараметровШаблонов(); ХранимыеПараметрыШаблоновДляВнешнихПользователей.ПараметрыШаблонов = КонтекстДляВнешнихПользователей.ПараметрыШаблонов; ХранимыеПараметры.Вставить("ДляШаблоновВСеансахВнешнихПользователей", Новый ХранилищеЗначения(ОбщегоНазначения.ФиксированныеДанные(ХранимыеПараметрыШаблоновДляВнешнихПользователей))); @@ -22004,7 +22951,7 @@ ВсеВидыОграничений.СортироватьПоЗначению(); ВсеВидыОграниченийСтрокой = СтрСоединить(ВсеВидыОграничений.ВыгрузитьЗначения(), Символы.ПС); - ХранимыеПараметрыОтчета = СтруктураХранимыхПараметровОтчета(); + ХранимыеПараметрыОтчета = НоваяСтруктураХранимыхПараметровОтчета(); ХранимыеПараметрыОтчета.ВсеВидыОграниченийПрав = ВсеВидыОграниченийСтрокой; ХешированиеДанных.Добавить(ВсеВидыОграниченийСтрокой); Если ОбщийКонтекст.Свойство("СтрокиВерсииХранимыхПараметров") Тогда @@ -22025,6 +22972,25 @@ КонецФункции +// Возвращаемое значение: +// ТаблицаЗначений: +// * Список - Строка +// * ДляВнешнихПользователей - Булево +// * Версия - Строка +// * СтрокаВерсии - Строка +// +Функция НовыеСтрокиВерсийСписков() + + СтрокиВерсийСписков = Новый ТаблицаЗначений; + СтрокиВерсийСписков.Колонки.Добавить("Список", Новый ОписаниеТипов("Строка")); + СтрокиВерсийСписков.Колонки.Добавить("ДляВнешнихПользователей", Новый ОписаниеТипов("Булево")); + СтрокиВерсийСписков.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка")); + СтрокиВерсийСписков.Колонки.Добавить("СтрокаВерсии", Новый ОписаниеТипов("Строка")); + + Возврат СтрокиВерсийСписков; + +КонецФункции + // Для функции ХранимыеПараметрыОграниченияДоступа. Процедура ДобавитьНестандартныеВидыОграниченийПрав(ВсеВидыОграниченийПрав) @@ -22040,6 +23006,28 @@ КонецПроцедуры // Для функций РассчитанныеПараметрыОграничения и ХранимыеПараметрыОграниченияДоступа. +// +// Возвращаемое значение: +// Структура: +// * ОписанияОграничений - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - см. СокращенноеОписаниеОграничения +// * СвойстваОграниченияСписков - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - см. НовыеСвойстваОграниченияСписка +// * СпискиСОграничениемПоВладельцу - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - значение ПоВладельцу, кроме Неопределено. +// * СпискиСОтключеннымОграничением - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// * СпискиСОтключеннымОграничениемЧтения - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// * СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// Функция НовыйДополнительныйКонтекст() ДополнительныйКонтекст = Новый Структура; @@ -22054,6 +23042,35 @@ КонецФункции +// Для функций РассчитанныеПараметрыОграничения и ХранимыеПараметрыОграниченияДоступа. +// +// Возвращаемое значение: +// Структура: +// * СвойстваОграниченияСписков - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - см. НовыеСвойстваОграниченияСписка +// * СпискиСОтключеннымОграничением - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// * СпискиСОтключеннымОграничениемЧтения - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// * СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// +Функция НовыйХранимыйДополнительныйКонтекст() + + ДополнительныйКонтекст = Новый Структура; + ДополнительныйКонтекст.Вставить("СвойстваОграниченияСписков", Новый Соответствие); + ДополнительныйКонтекст.Вставить("СпискиСОтключеннымОграничением", Новый Соответствие); + ДополнительныйКонтекст.Вставить("СпискиСОтключеннымОграничениемЧтения", Новый Соответствие); + ДополнительныйКонтекст.Вставить("СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей", Неопределено); + + Возврат ДополнительныйКонтекст; + +КонецФункции + // Для функций РассчитанныеПараметрыОграничения и ХранимыеПараметрыОграниченияДоступа. Процедура ДобавитьДополнительныйКонтекст(ПолноеИмя, ДополнительныйКонтекст, ОписаниеОграничения, ДляВнешнихПользователей) @@ -22067,7 +23084,7 @@ КонецЕсли; ВМодулеМенеджера = ОписаниеОграничения.ТекстВМодулеМенеджера; - СокращенноеОписаниеОграничения = Новый Структура; + СокращенноеОписаниеОграничения = СокращенноеОписаниеОграничения(); СокращенноеОписаниеОграничения.Вставить("Текст", Текст); СокращенноеОписаниеОграничения.Вставить("ВМодулеМенеджера", ВМодулеМенеджера); @@ -22079,10 +23096,22 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Текст - Строка +// * ВМодулеМенеджера - Булево +// +Функция СокращенноеОписаниеОграничения() + + Возврат Новый Структура; + +КонецФункции + // Для процедуры ХранимыеПараметрыОграниченияДоступа. Процедура ДобавитьХранимыеПараметрыОграниченияДляВидаПользователей(Контекст) // Подготовка параметров с учетом зависимостей только по ключам доступа. + ТаблицаСвойств = СвойстваСписковДляРасчетаХранимыхПараметров(); ТаблицаСвойств = Новый ТаблицаЗначений; ТаблицаСвойств.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка")); ТаблицаСвойств.Колонки.Добавить("Зависимый", Новый ОписаниеТипов("Булево")); @@ -22113,7 +23142,7 @@ Параметры = ПараметрыОграниченияДляВидаПользователей(ПолноеИмя, Контекст); Свойства.Параметры = Параметры; Иначе - Свойства = ОписаниеСписка.Значение; + Свойства = ОписаниеСписка.Значение; // См. СвойстваСписковДляРасчетаХранимыхПараметров Параметры = Свойства.Параметры; КонецЕсли; @@ -22152,10 +23181,12 @@ КонецЕсли; Если ПараметрыВедущего.ЕстьОграничениеПоПользователям Тогда СвойстваВедущего.КлючиДоступаПользователей = Истина; - УстановитьСвойствоОграничения(ВедущийСписок, "РассчитыватьПраваПользователей", Истина, Контекст); + УстановитьСвойствоОграничения(ВедущийСписок, + "РассчитыватьПраваПользователей", Истина, Контекст); КонецЕсли; Если ПараметрыВедущего.ИспользуетсяОграничениеПоВладельцу Тогда - УстановитьСвойствоОграничения(ВедущийСписок, "ПолеВладельца", ПараметрыВедущего.ПолеВладельца, Контекст); + УстановитьСвойствоОграничения(ВедущийСписок, + "ПолеВладельца", ПараметрыВедущего.ПолеВладельца, Контекст); КонецЕсли; КонецЕсли; СвойстваВедущего.Ведущий = Истина; @@ -22209,6 +23240,7 @@ Для Каждого СвойстваСписков Из СвойстваСписковПоУровням Цикл Для Каждого СвойстваСписка Из СвойстваСписков Цикл + СвойстваСписка = СвойстваСписка; // См. СвойстваСписковДляРасчетаХранимыхПараметров ВсеВедущиеСпискиСОграничением = Истина; ИзмененоСвойствоРассчитыватьПраваПользователей = Ложь; @@ -22256,7 +23288,6 @@ // Заполнение хранимых свойств списков. Для Каждого СвойстваСписка Из ТаблицаСвойств Цикл ПолноеИмя = СвойстваСписка.ПолноеИмя; - ОбновитьВерсиюПараметров = Ложь; Если СвойстваСписка.Параметры.ДоступЗапрещен Тогда УстановитьСвойствоОграничения(ПолноеИмя, "ДоступЗапрещен", Истина, Контекст); @@ -22288,11 +23319,12 @@ Контекст.ВерсииОграниченийСписков.Вставить(ПолноеИмя, СвойстваСписка.Параметры.Версия); Если Контекст.ОбщийКонтекст.Свойство("СтрокиВерсииХранимыхПараметров") Тогда - НоваяСтрока = Контекст.ОбщийКонтекст.СтрокиВерсииХранимыхПараметров.СтрокиВерсийСписков.Добавить(); - НоваяСтрока.Список = СвойстваСписка.ПолноеИмя; + СтрокиВерсийСписков = Контекст.ОбщийКонтекст.СтрокиВерсииХранимыхПараметров.СтрокиВерсийСписков; // См. НовыеСтрокиВерсийСписков + НоваяСтрока = СтрокиВерсийСписков.Добавить(); + НоваяСтрока.Список = СвойстваСписка.ПолноеИмя; НоваяСтрока.ДляВнешнихПользователей = Контекст.ДляВнешнихПользователей; - НоваяСтрока.Версия = СвойстваСписка.Параметры.Версия; - НоваяСтрока.СтрокаВерсии = СвойстваСписка.Параметры.Контекст.СтрокаСвойствВерсии; + НоваяСтрока.Версия = СвойстваСписка.Параметры.Версия; + НоваяСтрока.СтрокаВерсии = СвойстваСписка.Параметры.Контекст.СтрокаСвойствВерсии; КонецЕсли; ВедущиеСписки = СвойстваСписка.Параметры.ВедущиеСписки; @@ -22317,7 +23349,33 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * ПолноеИмя - Строка +// * Зависимый - Булево +// * Ведущие - Массив +// * Уровень - Число +// * Ведущий - Булево +// * Параметры - Структура +// * Обработан - Булево +// * ОграничениеПоВладельцуВозможно - Булево +// * ОграничениеПоВладельцуВключено - Булево +// * ОграничениеПоВладельцуОтключено - Булево +// * КлючиДоступаПользователей - Булево +// * ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа - Булево +// * КлючиДоступаПользователейИГруппДоступа - Булево +// +Функция СвойстваСписковДляРасчетаХранимыхПараметров() + + Возврат Неопределено; + +КонецФункции + // Для процедуры ХранимыеПараметрыОграниченияДляВидаПользователей. +// +// Возвращаемое значение: +// см. ПараметрыОграниченияПоСтруктуреОграничения +// Функция ПараметрыОграниченияДляВидаПользователей(ПолноеИмя, Контекст) ОписаниеОграничения = Контекст.ДополнительныйКонтекст.ОписанияОграничений.Получить(ПолноеИмя); @@ -22396,7 +23454,7 @@ ЗависимыйСписокСОптимизацией = СвойстваЗависимогоСписка.ОграничениеПоВладельцуВключено; Для Каждого ВедущийСписок Из СвойстваЗависимогоСписка.Ведущие Цикл - СвойстваВедущегоСписка = СвойстваСписков.Получить(ВедущийСписок); + СвойстваВедущегоСписка = СвойстваСписков.Получить(ВедущийСписок); // См. СвойстваСписковДляРасчетаХранимыхПараметров Если СвойстваВедущегоСписка.Параметры.ДоступЗапрещен Тогда Продолжить; КонецЕсли; @@ -22409,10 +23467,12 @@ Если ЗависимыйСписокСОптимизацией Тогда Если СвойстваВедущегоСписка.Параметры.ПолеВладельца <> Неопределено Тогда Если СвойстваВедущегоСписка.Параметры.ТребуетсяОграничениеПоВладельцу Тогда + ИмяПризнакаОптимизации = ?(Контекст.ДляВнешнихПользователей, + "ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей", "ПоВладельцуБезЗаписиКлючейДоступа"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установлен признак оптимизации ограничения %1, но такая + НСтр("ru = 'Установлен признак оптимизации ограничения ""%1"", но такая |оптимизация невозможна, так как она требуется для зависимого списка ""%2"".'"), - "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", ""), + ИмяПризнакаОптимизации, СвойстваЗависимогоСписка.ПолноеИмя); КонтекстОшибки = Новый Структура("СпискиСОграничением, ОписанияОграничений"); КонтекстОшибки.Вставить("Список", СвойстваВедущегоСписка.ПолноеИмя); @@ -22447,15 +23507,7 @@ Свойства = Контекст.СвойстваОграниченияСписков.Получить(ПолноеИмя); Если Свойства = Неопределено Тогда - Свойства = Новый Структура; - Свойства.Вставить("ДоступЗапрещен", Ложь); - Свойства.Вставить("ПолеВладельца", Неопределено); - Свойства.Вставить("ОпорныеПоля", Неопределено); - Свойства.Вставить("ИмяОтдельногоРегистраКлючей", ""); - Свойства.Вставить("РассчитыватьПраваПользователей", Ложь); - Свойства.Вставить("ОграничениеВШаблонахЧерезКлючиДоступаПользователей", Ложь); - Свойства.Вставить("ОграничениеВШаблонахЧерезКлючиДоступаПользователейИГруппДоступа", Ложь); - Свойства.Вставить("ИспользуемыеТипыЗначенийДоступа", Неопределено); + Свойства = НовыеСвойстваОграниченияСписка(); Если ДобавлятьВКоллекцию Тогда Контекст.СвойстваОграниченияСписков.Вставить(ПолноеИмя, Свойства); КонецЕсли; @@ -22465,6 +23517,34 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * ДоступЗапрещен - Булево +// * ПолеВладельца - см. НовоеПолеВладельца +// * ОпорныеПоля - см. НовоеОписаниеОпорныхПолей +// * ИмяОтдельногоРегистраКлючей - Строка +// * РассчитыватьПраваПользователей - Булево +// * ИспользуемыеТипыЗначенийДоступа - Булево +// * ОграничениеВШаблонахЧерезКлючиДоступаПользователей - Булево +// * ОграничениеВШаблонахЧерезКлючиДоступаПользователейИГруппДоступа - Булево +// +Функция НовыеСвойстваОграниченияСписка() + + Свойства = Новый Структура; + Свойства.Вставить("ДоступЗапрещен", Ложь); + Свойства.Вставить("ПолеВладельца", Неопределено); + Свойства.Вставить("ОпорныеПоля", Неопределено); + Свойства.Вставить("ИмяОтдельногоРегистраКлючей", ""); + Свойства.Вставить("РассчитыватьПраваПользователей", Ложь); + Свойства.Вставить("ОграничениеВШаблонахЧерезКлючиДоступаПользователей", Ложь); + Свойства.Вставить("ОграничениеВШаблонахЧерезКлючиДоступаПользователейИГруппДоступа", Ложь); + Свойства.Вставить("ИспользуемыеТипыЗначенийДоступа", Неопределено); + + Возврат Свойства; + +КонецФункции + + // Для функции ХранимыеПараметрыОграниченияДоступа. Процедура ДобавитьВедущиеСписки(ВедущиеСписки, ИмяСвойстваВидаПользователей, ЗависимыйСписок, ВедущиеСпискиЗависимогоСписка) @@ -22510,7 +23590,40 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * ЭтоСсылочныйТип - Булево +// * ПоляШапки - см. ОписаниеПолейВедущегоСписка +// * ТабличныеЧасти - Массив из см. ОписаниеПолейВедущегоСписка +// +Функция ВедущийСписокПоЗначениямПолей() + + Возврат Новый Структура; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * ДляПользователей - Массив из Строка - полные имена списков +// * ДляВнешнихПользователей - Массив из Строка - полные имена списков +// +Функция ВедущийСписокПоКлючамДоступаИлиЗначениямСГруппами() + + Возврат Новый Структура; + +КонецФункции + // Для процедуры ДобавитьВедущиеСписки. +// +// Возвращаемое значение: +// Структура: +// * ВсеПоля - Массив +// * ТипыВсехПолей - Соответствие +// * НаборыПолей - Структура: +// * ДляПользователей +// * ДляВнешнихПользователей +// * Имя - Строка - имя табличной части (есть только у полей табличной части) +// Функция ОписаниеПолейВедущегоСписка() Описание = Новый Структура; @@ -22531,7 +23644,7 @@ ВедущийСписок.ЗависимыеСписки.Вставить(ЗависимыйСписок, Истина); Если ВедущийСписок[ВидЗависимости] = Неопределено Тогда - Свойства = Новый Структура; + Свойства = ВедущийСписокПоКлючамДоступаИлиЗначениямСГруппами(); Свойства.Вставить("ДляПользователей", Неопределено); Свойства.Вставить("ДляВнешнихПользователей", Неопределено); ВедущийСписок[ВидЗависимости] = Свойства; @@ -22542,13 +23655,23 @@ Если Свойства[ИмяСвойстваВидаПользователей] = Неопределено Тогда Свойства[ИмяСвойстваВидаПользователей] = Новый Массив; КонецЕсли; - - Свойства[ИмяСвойстваВидаПользователей].Добавить(ЗависимыйСписок); + ЗависимыеСписки = Свойства[ИмяСвойстваВидаПользователей]; // Массив + ЗависимыеСписки.Добавить(ЗависимыйСписок); КонецЦикла; КонецПроцедуры // Для процедуры ДобавитьВедущиеСписки. +// +// Возвращаемое значение: +// Структура: +// * ЗависимыеСписки - Соответствие: +// * Ключ - Строка - полное имя списка +// * Значение - Булево - Истина +// * ПоЗначениямПолей - Структура - похожая на см. ВедущийСписокПоПоЗначениямПолей +// * ПоКлючамДоступа - см. ВедущийСписокПоКлючамДоступаИлиЗначениямСГруппами +// * ПоЗначениямСГруппами - см. ВедущийСписокПоКлючамДоступаИлиЗначениямСГруппами +// Функция ТекущиеСвойстваВедущегоСписка(ВедущиеСписки, ПолноеИмя) ВедущийСписок = ВедущиеСписки.Получить(ПолноеИмя); @@ -22623,7 +23746,8 @@ КонецЕсли; Если Параметры.ПолеВладельца <> Неопределено Тогда - Поля = ":" + Параметры.ПолеВладельца.Имя; + ПолеВладельца = Параметры.ПолеВладельца; // См. НовоеПолеВладельца + Поля = ":" + ПолеВладельца.Имя; ИначеЕсли Параметры.ЭтоСсылочныйТип Тогда Поля = ":"; @@ -22672,17 +23796,22 @@ КонецПроцедуры // Для процедуры УстановитьВерсиюПараметров, и для функции ХранимыеПараметрыОграниченияДоступа. -Функция СтруктураХранимыхПараметровЗаписи(Значения = "Создать") +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * ВерсияСтруктурыКэша - см. ВерсияСтруктурыКэша +// * ВерсииОграниченийСписков - ФиксированноеСоответствие +// * ВедущиеСписки - ФиксированноеСоответствие +// * ДополнительныйКонтекст - ФиксированнаяСтруктура +// * СпискиСДатой - ФиксированноеСоответствие +// * ВнешниеПользователиВключены - Булево +// * ОграничениеДоступаВключено - Булево +// * ИспользуемыеТипыЗначений - ХранилищеЗначения +// +Функция СтруктураХранимыхПараметровЗаписи(Значения) - ХранимыеПараметрыЗаписи = Новый Структура; - ХранимыеПараметрыЗаписи.Вставить("ВерсияСтруктурыКэша", ?(Значения = "Создать", ВерсияСтруктурыКэша(), "")); - ХранимыеПараметрыЗаписи.Вставить("ВерсииОграниченийСписков", Новый Соответствие); - ХранимыеПараметрыЗаписи.Вставить("ВедущиеСписки", Новый Соответствие); - ХранимыеПараметрыЗаписи.Вставить("ДополнительныйКонтекст", Новый Структура); - ХранимыеПараметрыЗаписи.Вставить("СпискиСДатой", Новый Соответствие); - ХранимыеПараметрыЗаписи.Вставить("ВнешниеПользователиВключены", Ложь); - ХранимыеПараметрыЗаписи.Вставить("ОграничениеДоступаВключено", Ложь); - ХранимыеПараметрыЗаписи.Вставить("ИспользуемыеТипыЗначений", Новый ХранилищеЗначения(Новый Соответствие)); + ХранимыеПараметрыЗаписи = НоваяСтруктураХранимыхПараметровЗаписи(); + ХранимыеПараметрыЗаписи.ВерсияСтруктурыКэша = ""; Если ТипЗнч(Значения) = Тип("ФиксированнаяСтруктура") И Значения.Свойство("ВерсияСтруктурыКэша") @@ -22705,18 +23834,64 @@ ЗаполнитьЗначенияСвойств(ХранимыеПараметрыЗаписи, Значения); КонецЕсли; - Возврат ?(Значения = "Создать", ХранимыеПараметрыЗаписи, - Новый ФиксированнаяСтруктура(ХранимыеПараметрыЗаписи)); + Возврат Новый ФиксированнаяСтруктура(ХранимыеПараметрыЗаписи); КонецФункции -// Для процедуры УстановитьВерсиюПараметров, и для функции ХранимыеПараметрыОграниченияДоступа. -Функция СтруктураХранимыхПараметровШаблонов(Значения = "Создать") +// Для функций СтруктураХранимыхПараметровЗаписи и ХранимыеПараметрыОграниченияДоступа. +// +// Возвращаемое значение: +// Структура: +// * ВерсияСтруктурыКэша - см. ВерсияСтруктурыКэша +// * ВерсииОграниченийСписков - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Строка - общая версия ограничения списка +// первая строка - хеш-сумма свойств версии для пользователей и через Символы.ПС +// вторая строка - хеш-сумма свойств версии для внешних пользователей. +// +// * ВедущиеСписки - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - см. СвойстваСпискаКакВедущего +// +// * ДополнительныйКонтекст - Структура: +// ** ДляПользователей - см. НовыйХранимыйДополнительныйКонтекст +// ** ДляВнешнихПользователей - см. НовыйХранимыйДополнительныйКонтекст +// +// * СпискиСДатой - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// * ВнешниеПользователиВключены - Булево +// * ОграничениеДоступаВключено - Булево +// * ИспользуемыеТипыЗначений - ХранилищеЗначения - соответствие из Тип и Истина. +// +Функция НоваяСтруктураХранимыхПараметровЗаписи() - ХранимыеПараметрыШаблонов = Новый Структура; - ХранимыеПараметрыШаблонов.Вставить("ВерсияСтруктурыКэша", ?(Значения = "Создать", ВерсияСтруктурыКэша(), "")); - ХранимыеПараметрыШаблонов.Вставить("ВерсииШаблонов", ВерсииШаблоновОграниченияДоступа()); - ХранимыеПараметрыШаблонов.Вставить("ПараметрыШаблонов", СтруктураПараметровШаблонов()); + ХранимыеПараметрыЗаписи = Новый Структура; + ХранимыеПараметрыЗаписи.Вставить("ВерсияСтруктурыКэша", ВерсияСтруктурыКэша()); + ХранимыеПараметрыЗаписи.Вставить("ВерсииОграниченийСписков", Новый Соответствие); + ХранимыеПараметрыЗаписи.Вставить("ВедущиеСписки", Новый Соответствие); + ХранимыеПараметрыЗаписи.Вставить("ДополнительныйКонтекст", Новый Структура); + ХранимыеПараметрыЗаписи.Вставить("СпискиСДатой", Новый Соответствие); + ХранимыеПараметрыЗаписи.Вставить("ВнешниеПользователиВключены", Ложь); + ХранимыеПараметрыЗаписи.Вставить("ОграничениеДоступаВключено", Ложь); + ХранимыеПараметрыЗаписи.Вставить("ИспользуемыеТипыЗначений", Новый ХранилищеЗначения(Новый Соответствие)); + + Возврат ХранимыеПараметрыЗаписи; + +КонецФункции + +// Для процедуры УстановитьВерсиюПараметров. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * ВерсияСтруктурыКэша - см. ВерсияСтруктурыКэша +// * ВерсииШаблонов - см. ВерсииШаблоновОграниченияДоступа +// * ПараметрыШаблонов - см. СтруктураПараметровШаблонов +// +Функция СтруктураХранимыхПараметровШаблонов(Значения) + + ХранимыеПараметрыШаблонов = НоваяСтруктураХранимыхПараметровШаблонов(); + ХранимыеПараметрыШаблонов.ВерсияСтруктурыКэша = ""; Если ТипЗнч(Значения) = Тип("ФиксированнаяСтруктура") И Значения.Свойство("ВерсияСтруктурыКэша") @@ -22729,14 +23904,74 @@ ЗаполнитьЗначенияСвойств(ХранимыеПараметрыШаблонов, Значения); КонецЕсли; - Возврат ?(Значения = "Создать", ХранимыеПараметрыШаблонов, - Новый ФиксированнаяСтруктура(ХранимыеПараметрыШаблонов)); + Возврат Новый ФиксированнаяСтруктура(ХранимыеПараметрыШаблонов); КонецФункции -// Для процедуры УстановитьВерсиюПараметров и для функций ХранимыеПараметрыОграниченияДоступа, -// СтруктураХранимыхПараметровШаблонов. -Функция СтруктураПараметровШаблонов(Значения = Неопределено) +// Для функций СтруктураХранимыхПараметровШаблонов, СтруктураХранимыхПараметровЗаписи и +// ХранимыеПараметрыОграниченияДоступа. +// +// Возвращаемое значение: +// Структура: +// * ВерсияСтруктурыКэша - см. ВерсияСтруктурыКэша +// * ВерсииШаблонов - см. ВерсииШаблоновОграниченияДоступа +// * ПараметрыШаблонов - см. СтруктураПараметровШаблонов +// +Функция НоваяСтруктураХранимыхПараметровШаблонов() + + ХранимыеПараметрыШаблонов = Новый Структура; + ХранимыеПараметрыШаблонов.Вставить("ВерсияСтруктурыКэша", ВерсияСтруктурыКэша()); + ХранимыеПараметрыШаблонов.Вставить("ВерсииШаблонов", ВерсииШаблоновОграниченияДоступа()); + ХранимыеПараметрыШаблонов.Вставить("ПараметрыШаблонов", НоваяСтруктураПараметровШаблонов()); + + Возврат ХранимыеПараметрыШаблонов; + +КонецФункции + +// Для процедуры УстановитьВерсиюПараметров. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * СпискиСОграничениемЧерезКлючиДоступаГруппДоступа - Строка +// * СпискиСОграничениемЧерезКлючиДоступаПользователей - Строка +// * СпискиСОграничениемПоПолям - Строка +// * СпискиСОтключеннымОграничениемЧтения - Строка +// +Функция СтруктураПараметровШаблонов(Значения) + + ПараметрыШаблонов = НоваяСтруктураПараметровШаблонов(); + + Если ТипЗнч(Значения) = Тип("ФиксированнаяСтруктура") + И Значения.Количество() = ПараметрыШаблонов.Количество() Тогда + + Совпадает = Истина; + Для Каждого КлючИЗначение Из ПараметрыШаблонов Цикл + Если Не Значения.Свойство(КлючИЗначение.Ключ) + Или Не ТипЗнч(Значения[КлючИЗначение.Ключ]) = ТипЗнч(КлючИЗначение.Значение) Тогда + Совпадает = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если Совпадает Тогда + ЗаполнитьЗначенияСвойств(ПараметрыШаблонов, Значения); + КонецЕсли; + КонецЕсли; + + Возврат Новый ФиксированнаяСтруктура(ПараметрыШаблонов); + +КонецФункции + +// Для функций СтруктураПараметровШаблонов, ХранимыеПараметрыОграниченияДоступа и +// НоваяСтруктураХранимыхПараметровШаблонов. +// +// Возвращаемое значение: +// Структура: +// * СпискиСОграничениемЧерезКлючиДоступаГруппДоступа - Строка +// * СпискиСОграничениемЧерезКлючиДоступаПользователей - Строка +// * СпискиСОграничениемПоПолям - Строка +// * СпискиСОтключеннымОграничениемЧтения - Строка +// +Функция НоваяСтруктураПараметровШаблонов() ПараметрыШаблонов = Новый Структура; ПараметрыШаблонов.Вставить("СпискиСОграничениемЧерезКлючиДоступаГруппДоступа", ""); @@ -22744,30 +23979,21 @@ ПараметрыШаблонов.Вставить("СпискиСОграничениемПоПолям", ""); ПараметрыШаблонов.Вставить("СпискиСОтключеннымОграничениемЧтения", ""); - Если ТипЗнч(Значения) <> Тип("ФиксированнаяСтруктура") - Или Значения.Количество() <> ПараметрыШаблонов.Количество() Тогда - - Возврат ПараметрыШаблонов; - КонецЕсли; - - Для Каждого КлючИЗначение Из ПараметрыШаблонов Цикл - Если Не Значения.Свойство(КлючИЗначение.Ключ) - Или Не ТипЗнч(Значения[КлючИЗначение.Ключ]) = ТипЗнч(КлючИЗначение.Значение) Тогда - Возврат ПараметрыШаблонов; - КонецЕсли; - КонецЦикла; - ЗаполнитьЗначенияСвойств(ПараметрыШаблонов, Значения); - Возврат ПараметрыШаблонов; КонецФункции -// Для процедуры УстановитьВерсиюПараметров, и для функции ХранимыеПараметрыОграниченияДоступа. -Функция СтруктураХранимыхПараметровОтчета(Значения = "Создать") +// Для процедуры УстановитьВерсиюПараметров. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * ВерсияСтруктурыКэша - см. ВерсияСтруктурыКэша +// * ВсеВидыОграниченийПрав - Строка +// +Функция СтруктураХранимыхПараметровОтчета(Значения) - ХранимыеПараметрыОтчета = Новый Структура; - ХранимыеПараметрыОтчета.Вставить("ВерсияСтруктурыКэша", ?(Значения = "Создать", ВерсияСтруктурыКэша(), "")); - ХранимыеПараметрыОтчета.Вставить("ВсеВидыОграниченийПрав", ""); + ХранимыеПараметрыОтчета = НоваяСтруктураХранимыхПараметровОтчета(); + ХранимыеПараметрыОтчета.ВерсияСтруктурыКэша = ""; Если ТипЗнч(Значения) = Тип("ФиксированнаяСтруктура") И Значения.Свойство("ВерсияСтруктурыКэша") @@ -22778,8 +24004,24 @@ ЗаполнитьЗначенияСвойств(ХранимыеПараметрыОтчета, Значения); КонецЕсли; - Возврат ?(Значения = "Создать", ХранимыеПараметрыОтчета, - Новый ФиксированнаяСтруктура(ХранимыеПараметрыОтчета)); + Возврат Новый ФиксированнаяСтруктура(ХранимыеПараметрыОтчета); + +КонецФункции + +// Для функций СтруктураХранимыхПараметровОтчета и ХранимыеПараметрыОграниченияДоступа. +// +// Возвращаемое значение: +// Структура: +// * ВерсияСтруктурыКэша - см. ВерсияСтруктурыКэша +// * ВсеВидыОграниченийПрав - Строка +// +Функция НоваяСтруктураХранимыхПараметровОтчета() + + ХранимыеПараметрыОтчета = Новый Структура; + ХранимыеПараметрыОтчета.Вставить("ВерсияСтруктурыКэша", ВерсияСтруктурыКэша()); + ХранимыеПараметрыОтчета.Вставить("ВсеВидыОграниченийПрав", ""); + + Возврат ХранимыеПараметрыОтчета; КонецФункции @@ -22791,92 +24033,104 @@ // для вида пользователей списка без учета зависимости от других списков, // как по ключам доступа, так и по наличию видов доступа Пользователи и ВнешниеПользователи. // +// Возвращаемое значение: +// Структура: +// * Список - Строка - полное имя таблицы объекта метаданных. +// * ДляВнешнихПользователей - Булево - вид пользователей, для которых предназначены параметры. +// * Версия - Строка - хеш-сумма параметров ограничения доступа для отслеживания их изменения. +// * ВедущиеСписки - см. НовыеВедущиеСписки +// * ДоступЗапрещен - Булево - Истина, если текст ограничения "ГДЕ ЛОЖЬ", +// а также не указан для внешних пользователей. +// * ОграничениеОтключено - Булево - Истина, если текст ограничения не указан или указан, +// но ограничение отключено из-за отключения использования +// видов доступа, задействованных в нем. +// * ОграничениеЧтенияОтключено - Булево - Истина, если текст ограничения чтения не указан или указан, +// но ограничение отключено из-за отключения использования +// видов доступа, задействованных в нем. +// +// Поле владельца, когда возможно ограничение только по объекту-владельцу. +// * ПолеВладельца - см. НовоеПолеВладельца +// +// * ТребуетсяОграничениеПоВладельцу - Булево - признак оптимизации, указанный разработчиком +// рядом с текстом ограничения. +// * ИспользуетсяОграничениеПоВладельцу - Булево - признак использования оптимизации, +// вычисленный на втором проходе графа. +// * РассчитыватьПраваПользователей - Булево - признак расчета прав на ключи доступа для пользователей, +// а не для групп доступа, вычисленный на втором проходе графа. +// Имеет смысл только, когда признак +// ИспользуетсяОграничениеПоВладельцу = Ложь. +// * ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа - Булево - признак того, что ведущий список должен записывать +// ключи для зависимых списков, которые не записывают +// своих ключей. Признак вычисляется на втором проходе графа. +// * ЧтениеРазрешеноДляВсехПользователей - Булево - признак, вычисленный на втором проходе графа. +// Когда ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа = Истина, +// тогда показывает наличие права Чтение в одной из ролей +// БазовыеПрава* или БазовыеПраваВнешнихПользователей*. +// * ИзменениеРазрешеноДляВсехПользователей - Булево - признак, вычисленный на втором проходе графа. +// Когда ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа = Истина, +// тогда показывает наличие права Изменение в одной из ролей +// БазовыеПрава* или БазовыеПраваВнешнихПользователей*. +// * ЕстьВедущиеКлючиДоступа - Булево - признак наличия ведущих ключей доступа в ограничении. +// * ЕстьВедущиеСпискиПоПравам - Булево - признак наличия ведущих списков по правам в ограничении. +// * ТипыВладельцевНастроекПрав - ФиксированноеСоответствие - типы владельцев настроек прав, используемые +// при расчете прав на ключи доступа (см. ПоТипамСсылок). +// * ИдентификаторТаблицыНастроекПрав - СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор +// списка, если для него используются отдельные настройки прав +// или пустой идентификатор. +// * ЕстьВладельцыНастроекПрав - Булево - признак наличия ограничения по владельцу настроек прав. +// * ИспользуемыеТипыЗначенийДоступа - Массив из Тип - описание типов значений доступа, +// которые используются в ограничении доступа. +// * ВсеВидыОграниченийПрав - Соответствие - все виды ограничений прав без учета использования. +// * ПоляТаблицОбъекта - Массив Из см. НовыеПоляТаблицыОбъекта +// * ИмяОтдельногоРегистраКлючей - Строка - для регистров. +// * ОпорныеПоля - см. НовоеОписаниеОпорныхПолей +// * СоставПолей - Число - число, описывающее реквизиты, используемые в ключе. +// * ЕстьОграничениеЧтения - Булево - установлено, если ограничение чтения отличается от "ГДЕ ИСТИНА". +// * ЕстьОграничениеИзменения - Булево - установлено, если ограничение изменения отличается от "ГДЕ ИСТИНА". +// * ЕстьОграничениеПоПользователям - Булево - установлено, если проверяются значения Пользователь +// или ГруппаПользователей или ВнешнийПользователь +// или ГруппаВнешнихПользователей для функций +// ЗначениеРазрешено или ЭтоАвторизованныйПользователь. +// * СтруктураРасчетаПраваЧтение - см. СтруктураРасчетаПрава +// * СтруктураРасчетаПраваИзменение - см. СтруктураРасчетаПрава +// * Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Функция ПараметрыОграниченияПоСтруктуреОграничения(Список, СтруктураОграничения, ДляВнешнихПользователей, ОбщийКонтекст, ДополнительныйКонтекст) - ВедущиеСписки = Новый Структура; - // Списки с полями, от которых зависит ограничение доступа (для регистрации заданий обновления). - ВедущиеСписки.Вставить("ПоЗначениямПолей", Новый Соответствие); - // Списки от ключей доступа которых зависит ограничение доступа (для установки параметров сеанса и - // регистрации заданий обновления). - ВедущиеСписки.Вставить("ПоКлючамДоступа", Новый Соответствие); - // Списки значений доступа с группами, от которых зависит ограничение доступа (для регистрации заданий обновления). - ВедущиеСписки.Вставить("ПоЗначениямСГруппами", Новый Соответствие); + ВедущиеСписки = НовыеВедущиеСписки(); Результат = Новый Структура; - // Полное имя таблицы объекта метаданных. Результат.Вставить("Список", Список); - // Вид пользователей, для которых предназначены параметры. Результат.Вставить("ДляВнешнихПользователей", ДляВнешнихПользователей); - // Хеш-сумма параметров ограничения доступа для отслеживания их изменения. Результат.Вставить("Версия", ""); - // Списки с полями от которых зависит ограничение доступа. Результат.Вставить("ВедущиеСписки", ВедущиеСписки); - // Истина, если текст ограничения "ГДЕ ЛОЖЬ", а также не указан для внешних пользователей. Результат.Вставить("ДоступЗапрещен", ДляВнешнихПользователей); - // Истина, если текст ограничения не указан или указан, но ограничение отключено - // из-за отключения использования видов доступа, задействованных в нем. Результат.Вставить("ОграничениеОтключено", Не ДляВнешнихПользователей); - // Истина, если текст ограничения чтения не указан или указан, но ограничение отключено - // из-за отключения использования видов доступа, задействованных в нем. Результат.Вставить("ОграничениеЧтенияОтключено", Не ДляВнешнихПользователей); - - // Поле владельца, когда возможно ограничение только по объекту-владельцу. Результат.Вставить("ПолеВладельца"); - // Признак оптимизации, указанный разработчиком рядом с текстом ограничения. Результат.Вставить("ТребуетсяОграничениеПоВладельцу", Ложь); - - // Признак использования оптимизации, вычисленный на втором проходе графа. Результат.Вставить("ИспользуетсяОграничениеПоВладельцу", Ложь); - // Признак расчета прав на ключи доступа для пользователей, а не для групп доступа, вычисленный на втором - // проходе графа. Имеет смысл только, когда признак ИспользуетсяОграничениеПоВладельцу = Ложь. Результат.Вставить("РассчитыватьПраваПользователей", Ложь); - // Признак того, что ведущий список должен записывать ключи для зависимых списков, - // которые не записывают своих ключей. Признак вычисляется на втором проходе графа. Результат.Вставить("ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа", Ложь); - // Признак, вычисленный на втором проходе графа. Когда ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа = Истина, тогда - // показывает наличие права Чтение в одной из ролей БазовыеПрава* или БазовыеПраваВнешнихПользователей*. Результат.Вставить("ЧтениеРазрешеноДляВсехПользователей", Ложь); - // Признак, вычисленный на втором проходе графа. Когда ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа = Истина, тогда - // показывает наличие права Изменение в одной из ролей БазовыеПрава* или БазовыеПраваВнешнихПользователей*. Результат.Вставить("ИзменениеРазрешеноДляВсехПользователей", Ложь); - - // Признак наличия ведущих ключей доступа в ограничении. Результат.Вставить("ЕстьВедущиеКлючиДоступа", Ложь); - // Признак наличия ведущих списков по правам в ограничении. Результат.Вставить("ЕстьВедущиеСпискиПоПравам", Ложь); - - // Типы владельцев настроек прав, используемые при расчете прав на ключи доступа. Результат.Вставить("ТипыВладельцевНастроекПрав", ОбщийКонтекст.ТипыВладельцевНастроекПрав); - // Идентификатор списка, если для него используются отдельные настройки прав или пустой идентификатор. Результат.Вставить("ИдентификаторТаблицыНастроекПрав", Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка()); - // Признак наличия ограничения по владельцу настроек прав. Результат.Вставить("ЕстьВладельцыНастроекПрав", Ложь); - // Описание типов значений доступа, которые используются в ограничении доступа. Результат.Вставить("ИспользуемыеТипыЗначенийДоступа", Новый Массив); - // Все виды ограничений прав (без учета использования). Результат.Вставить("ВсеВидыОграниченийПрав", Новый Соответствие); - - Результат.Вставить("ИмяОтдельногоРегистраКлючей", ""); // Для регистров. - Результат.Вставить("ОпорныеПоля"); // Для регистров. - - // Число, описывающее реквизиты, используемые в ключе. + Результат.Вставить("ПоляТаблицОбъекта", Новый Массив); + Результат.Вставить("ИмяОтдельногоРегистраКлючей", ""); + Результат.Вставить("ОпорныеПоля"); Результат.Вставить("СоставПолей"); - - // Установлено, если ограничение чтения отличается от "ГДЕ ИСТИНА". Результат.Вставить("ЕстьОграничениеЧтения", Ложь); - // Установлено, если ограничение изменения отличается от "ГДЕ ИСТИНА". Результат.Вставить("ЕстьОграничениеИзменения", Ложь); - - // Установлено, если проверяются значения Пользователь или ГруппаПользователей - // или ВнешнийПользователь или ГруппаВнешнихПользователей - // для функций ЗначениеРазрешено или ЭтоАвторизованныйПользователь. Результат.Вставить("ЕстьОграничениеПоПользователям", Ложь); - - - // Содержит структуру ограничения, приведенную к формату размещения значений в ключах доступа. - Результат.Вставить("СтруктураРасчетаПраваЧтение", Новый Структура); - Результат.Вставить("СтруктураРасчетаПраваИзменение", Новый Структура); + Результат.Вставить("СтруктураРасчетаПраваЧтение", СтруктураРасчетаПрава()); + Результат.Вставить("СтруктураРасчетаПраваИзменение", СтруктураРасчетаПрава()); ИмяКоллекцииТипа = ""; Результат.Вставить("ЭтоСсылочныйТип", ?(ЗначениеЗаполнено(Список), @@ -22899,7 +24153,8 @@ Или ИмяКоллекцииТипа = "РегистрыРасчета"); КонецЕсли; - Контекст = Новый Структура("СтрокаСвойствВерсии", ""); + Контекст = КонтекстПараметровПоСтруктуреОграничения(); + Контекст.Вставить("СтрокаСвойствВерсии", ""); Результат.Вставить("Контекст", Контекст); Для Каждого КлючИЗначение Из ОбщийКонтекст Цикл @@ -22929,6 +24184,9 @@ ДобавитьСвойствоВерсии(Контекст, Контекст, "ЭтоСсылочныйТип"); ДобавитьСвойствоВерсии(Контекст, Контекст, "СписокСДатой"); + // Поля таблиц требуются только для ссылочных объектов. + Контекст.Вставить("ПоляТаблицОбъекта", НовоеОписаниеПолейТаблицОбъекта(Результат)); + // Опорные поля не требуется для ссылочных типов данных (всегда Ссылка). ЗаполнитьНовоеОписаниеОпорныхПолей(Результат, Контекст); @@ -23041,6 +24299,175 @@ КонецФункции +// Списки с полями от которых зависит ограничение доступа. +// +// Возвращаемое значение: +// Структура: +// * ПоЗначениямПолей - Соответствие - списки с полями, от которых зависит ограничение доступа +// (для регистрации заданий обновления). +// * ПоКлючамДоступа - Соответствие - списки от ключей доступа которых зависит ограничение доступа +// (для установки параметров сеанса и регистрации заданий обновления). +// * ПоЗначениямСГруппами - Соответствие - списки значений доступа с группами, от которых зависит +// ограничение доступа (для регистрации заданий обновления). +// +Функция НовыеВедущиеСписки() + + ВедущиеСписки = Новый Структура; + ВедущиеСписки.Вставить("ПоЗначениямПолей", Новый Соответствие); + ВедущиеСписки.Вставить("ПоКлючамДоступа", Новый Соответствие); + ВедущиеСписки.Вставить("ПоЗначениямСГруппами", Новый Соответствие); + + Возврат ВедущиеСписки; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * СтрокаСвойствВерсии - Строка +// * Список - Строка +// * ДляВнешнихПользователей - Булево +// * ЭтоСсылочныйТип - Булево +// * СписокСДатой - Булево +// * СписокСПериодом - Булево +// * ИмяКоллекцииТипа - Строка +// * СвойстваВерсии - Массив Из Строка +// * ПоляТаблицОбъекта - см. НовоеОписаниеПолейТаблицОбъекта +// * ОпорныеПоля - см. НовоеОписаниеОпорныхПолей +// * ИспользуетсяОграничениеПоВладельцу - Булево +// * РассчитыватьПраваПользователей - Булево +// * ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа - Булево +// * ЧтениеРазрешеноДляВсехПользователей - Булево +// * ИзменениеРазрешеноДляВсехПользователей - Булево +// * СтруктураОграничения - см. СтруктураОграничения +// * ИсходнаяСтруктураОграничения - см. СтруктураОграничения +// * ВедущиеСпискиПоЗначениямПолей - см. ОписаниеВедущихСписковПоЗначениямПолей +// * ВедущиеСпискиПоКлючамДоступа - см. ОписаниеВедущихСписковПоПолюСсылка +// * ВедущиеСпискиПоЗначениямСГруппами - см. ОписаниеВедущихСписковПоПолюСсылка +// * ЕстьПроверкаАвторизованногоПользователя - Булево +// * НеиспользуемыеТипыЗначенийДоступа - Массив из Тип +// * ВсеВидыОграниченийПрав - Соответствие +// * ЕстьОграничениеПоПользователям - Булево +// * ИспользуетсяОграничениеПоВладельцу - Булево +// * РассчитыватьПраваПользователей - Булево +// * СвойстваВсехПолей - Соответствие: +// ** Ключ - см. ОписаниеУзла +// ** Значение - см. СвойстваПоля +// * ОставшиесяПоляПослеУпрощения - Соответствие: +// ** Ключ - см. ОписаниеУзла +// ** Значение - Массив из см. ОписаниеУзла +// * ПоляКлючаДоступаПослеУпрощения - Массив из см. НовоеПолеКлючаДоступа +// * СвойстваПолейКлючаДоступа - Соответствие: +// ** Ключ - см. ОписаниеУзла +// ** Значение - см. СвойстваПоля +// * ГруппыПолей - Соответствие: +// ** Ключ - Строка - имя группы полей (Шапка?, ТабличнаяЧасть?) +// ** Значение - Массив Из см. СвойстваПоля +// * ПсевдонимыТабличныхЧастейОбъекта - Соответствие: +// ** Ключ - Число - номер табличной части ключа +// ** Значение - Строка - псевдоним таблицы +// * ГруппыДополнительныхТаблиц - см. ГруппыДополнительныхТаблиц +// * КоличествоТабличныхЧастейКлюча - Число +// * ПоляУсловияСоединенияДополнительныхТаблиц - Массив Из Структура: +// ** УзелПоле - см. ОписаниеУзла +// ** ПсевдонимТаблицыУсловия - Строка +// * ИмяПрава - Строка +// * ТребуемыеРеквизитыТабличныхЧастейКлюча - Соответствие: +// ** Ключ - Строка - имя таблицы ключа (ИмяГруппыПолейКлючаДоступа) +// ** Значение - Массив Из Строка - имя реквизита таблицы ключа (ИмяРеквизитаГруппыПолейКлючаДоступа) +// * СтруктураРасчетаПраваСвойстваВерсии - Массив Из Строка +// +// Свойства из ОбщийКонтекст. +// * СвойстваВидовДоступа - см. ХранимоеОписаниеСвойствВидовДоступа +// * ТипыПользователя - Массив Из Тип +// * ТипыВладельцевНастроекПрав - ФиксированноеСоответствие +// * ОтдельныеТаблицыНастроекПрав - ФиксированноеСоответствие +// * ИспользуемыеТипыЗначений - см. ИспользуемыеТипыЗначений +// * СпискиСОграничением - см. УправлениеДоступомСлужебныйПовтИсп.СпискиСОграничением +// * ВнешниеПользователиВключены - Булево +// +// Свойства из ДополнительныйКонтекст. +// * ОписанияОграничений - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - см. СокращенноеОписаниеОграничения +// * СвойстваОграниченияСписков - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - см. НовыеСвойстваОграниченияСписка +// * СпискиСОграничениемПоВладельцу - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - значение ПоВладельцу, кроме Неопределено. +// * СпискиСОтключеннымОграничением - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// * СпискиСОтключеннымОграничениемЧтения - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// * СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей - Соответствие: +// ** Ключ - Строка - полное имя списка +// ** Значение - Булево - Истина +// +Функция КонтекстПараметровПоСтруктуреОграничения() + + Возврат Новый Структура; + +КонецФункции + +// Структура ограничения, приведенную к формату размещения значений в ключах доступа. +// +// Возвращаемое значение: +// Структура: +// * Узел - Строка - одна из строк "Поле", "Константа", "И", "Или", "Не", "Выбор", +// "ЗначениеРазрешено", "ЭтоАвторизованныйПользователь", +// "ЧтениеОбъектаРазрешено", "ИзменениеОбъектаРазрешено", +// "ЧтениеСпискаРазрешено", "ИзменениеСпискаРазрешено", +// "ДляВсехСтрок", "ДляОднойИзСтрок". +// +// Свойства узла Поле. +// * Таблица - Строка - таблица ключа доступа (Шапка?, ТабличнаяЧасть?). +// * Реквизит - Строка - имя реквизита таблицы ключа доступа (Реквизит?). +// * ПроверкаЕстьNull - Булево - Истина (необязательное свойство). +// +// Свойства узла Константа. +// * Значение - Булево +// - Число +// - Строка +// - Неопределено - Ложь, Истина, произвольное +// целое число до 16 разрядов или произвольная строка до 150 символов. +// +// Свойства узлов И, Или. +// * Аргументы - Массив из см. СтруктураРасчетаПрава +// +// Свойства узла Не. +// * Аргумент - см. СтруктураРасчетаПрава +// +// * Узел - Строка - заглушка к предыдущей строке (для определения типа в EDT) +// +// Свойства узла Выбор (Иначе может быть Неопределено). +// * Иначе - см. СтруктураРасчетаПрава +// * Когда - Массив Из Структура: +// ** Условие - см. СтруктураРасчетаПрава +// ** Значение - см. СтруктураРасчетаПрава +// +// * Узел - Строка - заглушка к предыдущей строке (для определения типа в EDT) +// +// Свойства узлов ЗначениеРазрешено, ЭтоАвторизованныйПользователь, +// ЧтениеОбъектаРазрешено, ИзменениеОбъектаРазрешено, +// ЧтениеСпискаРазрешено, ИзменениеСпискаРазрешено. +// * Поле - см. СтруктураРасчетаПрава +// * УточненияСравнения - Соответствие: +// ** Ключ - Строка +// - Тип - уточняемое значение "Неопределено", "Null", "ПустаяСсылка", +// "Отключено", Тип (Ссылка, Число, Даты, Булево). +// ** Значение - Строка - результат "Ложь", "Истина". +// +// Свойства узлов ДляВсехСтрок, ДляОднойИзСтрок. +// * Аргумент - см. СтруктураРасчетаПрава +// +Функция СтруктураРасчетаПрава() + + Возврат Новый Структура; + +КонецФункции + // Для процедуры ПараметрыОграниченияПоСтруктуреОграничения. Функция ПравоРазрешеноДляВсехПользователей(ИмяПрава, ОбъектМетаданных, ДляВнешнихПользователей) @@ -23120,6 +24547,10 @@ КонецПроцедуры // Для функции ПараметрыОграниченияПоСтруктуреОграничения и формы ОбновлениеДоступаРучноеУправление. +// +// Возвращаемое значение: +// Булево +// Функция ЭтоСсылочныйТипТаблицы(ПолноеИмя, ИмяКоллекцииТипа = "") Экспорт СинтаксисЯзыка = УправлениеДоступомСлужебныйПовтИсп.СинтаксисЯзыка(); @@ -23136,18 +24567,64 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * ПолноеИмяТаблицы - Строка +// * ТабличнаяЧасть - Строка +// * Поля - Массив из Строка - с полем Ссылка +// * СписокПолей - Строка - без поля Ссылка +// * ТаблицаСПолями - ХранилищеЗначения - с объектом ТаблицаЗначений +// с типизированными полями (включая поле Ссылка). +// +Функция НовыеПоляТаблицыОбъекта() + + ПоляТаблицы = Новый Структура; + ПоляТаблицы.Вставить("ПолноеИмяТаблицы", ""); + ПоляТаблицы.Вставить("ТабличнаяЧасть", ""); + ПоляТаблицы.Вставить("Поля", Новый Массив); + ПоляТаблицы.Вставить("СписокПолей", ""); + ПоляТаблицы.Вставить("ТаблицаСПолями", Новый ХранилищеЗначения(Новый ТаблицаЗначений)); + + Возврат ПоляТаблицы; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * Результат - Массив Из см. НовыеПоляТаблицыОбъекта +// * Состав - Структура: +// ** Ключ - Строка - полное имя таблицы объекта. +// ** Значение - Структура: +// *** Ключ - Строка - имя поля. +// *** Значение - Структура: +// **** Тип - ОписаниеТипов - типы поля. +// **** Использование - Булево - использование поля. +// * ПоСвойствамПолей - Соответствие: +// ** Ключ - см. НовыеСвойстваПоля +// ** Значение - Структура: +// *** Таблица - Строка - полное имя таблицы объекта. +// *** Поле - Строка - имя поля. +// * ПоДополнительнымТаблицам - Соответствие: +// ** Ключ - Строка - дополнительная таблица +// ** Значение - Структура: +// *** Ключ - Строка - полное имя таблицы объекта. +// *** Значение - Массив из Строка - имя поля. +// +Функция НовоеОписаниеПолейТаблицОбъекта(Результат) + + Возврат Новый Структура("Результат, Состав", Результат.ПоляТаблицОбъекта, Новый Структура); + +КонецФункции + // Для функции ПараметрыОграниченияПоСтруктуреОграничения. +// +// Параметры: +// Результат - см. ПараметрыОграниченияПоСтруктуреОграничения +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Процедура ЗаполнитьНовоеОписаниеОпорныхПолей(Результат, Контекст) - ОпорныеПоля = Новый Структура; - ОпорныеПоля.Вставить("Список", Новый СписокЗначений); - ОпорныеПоля.Вставить("Все", Новый Массив); - ОпорныеПоля.Вставить("ТипыВсех", Новый Массив); - ОпорныеПоля.Вставить("Используемые", Новый Массив); - ОпорныеПоля.Вставить("ТипыИспользуемых", Новый Массив); - ОпорныеПоля.Вставить("МаксимальноеКоличество", 0); - ОпорныеПоля.Вставить("МаксимальноДопустимоеКоличество", 0); - + ОпорныеПоля = НовоеОписаниеОпорныхПолей(); Контекст.Вставить("ОпорныеПоля", ОпорныеПоля); Если Контекст.ЭтоСсылочныйТип Тогда @@ -23192,7 +24669,46 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Список - СписокЗначений +// * Все - Массив +// * ТипыВсех - Массив +// * Используемые - Массив +// * ТипыИспользуемых - Массив +// * МаксимальноеКоличество - Число +// * МаксимальноДопустимоеКоличество - Число +// * ТипыПоИменамПолей - Соответствие: +// ** Ключ - Строка - имя опорного поля +// ** Значение - ОписаниеТипов - типы опорного поля +// * ПоСвойствамПолей - Соответствие: +// ** Ключ - см. НовыеСвойстваПоля +// ** Значение - Строка - имя опорного поля +// * ПоДополнительнымТаблицам - Соответствие: +// ** Ключ - Строка - дополнительная таблица +// ** Значение - Массив из Строка - имена опорных полей +// +Функция НовоеОписаниеОпорныхПолей() + + ОпорныеПоля = Новый Структура; + ОпорныеПоля.Вставить("Список", Новый СписокЗначений); + ОпорныеПоля.Вставить("Все", Новый Массив); + ОпорныеПоля.Вставить("ТипыВсех", Новый Массив); + ОпорныеПоля.Вставить("Используемые", Новый Массив); + ОпорныеПоля.Вставить("ТипыИспользуемых", Новый Массив); + ОпорныеПоля.Вставить("МаксимальноеКоличество", 0); + ОпорныеПоля.Вставить("МаксимальноДопустимоеКоличество", 0); + + Возврат ОпорныеПоля; + +КонецФункции + // Для функции ПараметрыОграниченияДоступа. +// +// Параметры: +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Результат - см. ПараметрыОграниченияПоСтруктуреОграничения +// Процедура ЗаполнитьНаличиеОграниченияПоПравам(Контекст, Результат) СтруктураОграничения = Контекст.СтруктураОграничения; @@ -23213,6 +24729,11 @@ КонецПроцедуры // Для функции ПараметрыОграниченияДоступа. +// +// Параметры: +// Результат - см. ПараметрыОграниченияПоСтруктуреОграничения +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Процедура ЗаполнитьОграничениеПоОбъектуВладельцу(Результат, Контекст) ОграничениеПоВладельцу = Контекст.СпискиСОграничениемПоВладельцу.Получить(Контекст.Список); @@ -23224,26 +24745,29 @@ ОграничениеПоВладельцу, Ложь); Результат.ТребуетсяОграничениеПоВладельцу = ТребуетсяОграничениеПоВладельцу; - ПолеВладельца = Новый Структура("Имя, ИзменениеКакЧтение", "", Ложь); + ПолеВладельца = НовоеПолеВладельца(); ОграничениеЧтения = Контекст.СтруктураОграничения.ОграничениеЧтения; ОграничениеИзменения = Контекст.СтруктураОграничения.ОграничениеИзменения; + ИмяПризнакаОптимизации = ?(Контекст.ДляВнешнихПользователей, + "ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей", "ПоВладельцуБезЗаписиКлючейДоступа"); + Если Результат.ЕстьОграничениеЧтения Тогда Если ОграничениеЧтения.Узел <> "ЧтениеОбъектаРазрешено" Тогда Если ТребуетсяОграничениеПоВладельцу Тогда Если ЗначениеЗаполнено(ОграничениеИзменения) Тогда ШаблонОшибки = - НСтр("ru = 'Установлен признак оптимизации ограничения %1, - |но указанное ограничение чтения изменения не представлено одной функцией ЧтениеОбъектаРазрешено.'"); + НСтр("ru = 'Установлен признак оптимизации ограничения ""%1"", + |но указанное ограничение чтения изменения не представлено одной функцией ""ЧтениеОбъектаРазрешено"".'"); Иначе ШаблонОшибки = - НСтр("ru = 'Установлен признак оптимизации ограничения %1, - |но указанное ограничение чтения не представлено одной функцией ЧтениеОбъектаРазрешено.'"); + НСтр("ru = 'Установлен признак оптимизации ограничения ""%1"", + |но указанное ограничение чтения не представлено одной функцией ""ЧтениеОбъектаРазрешено"".'"); КонецЕсли; ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, - "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", "")); + ИмяПризнакаОптимизации); ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; @@ -23256,10 +24780,10 @@ Если Не ФункцияБезУточненийТиповСПолемБезВложений(ОграничениеЧтения) Тогда Если ТребуетсяОграничениеПоВладельцу Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установлен признак оптимизации ограничения %1, - |но параметры функции ЧтениеОбъектаРазрешено не представлены + НСтр("ru = 'Установлен признак оптимизации ограничения ""%1"", + |но параметры функции ""ЧтениеОбъектаРазрешено"" не представлены |только одним параметром - полем владельцем без других параметров.'"), - "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", "")); + ИмяПризнакаОптимизации); ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; @@ -23269,7 +24793,8 @@ Возврат; КонецЕсли; КонецЕсли; - ПолеВладельца.Имя = ОграничениеЧтения.Поле.Имя; + ОграничениеЧтенияПоле = ОграничениеЧтения.Поле; // См. ОписаниеУзла + ПолеВладельца.Имя = ОграничениеЧтенияПоле.Имя; КонецЕсли; Если Результат.ЕстьОграничениеИзменения Тогда @@ -23279,10 +24804,10 @@ Если ТребуетсяОграничениеПоВладельцу Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установлен признак оптимизации ограничения %1, + НСтр("ru = 'Установлен признак оптимизации ограничения ""%1"", |но указанное ограничение изменения не представлено одной функцией - |ЧтениеОбъектаРазрешено или ИзменениеОбъектаРазрешено.'"), - "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", "")); + |""ЧтениеОбъектаРазрешено"" или ""ИзменениеОбъектаРазрешено"".'"), + ИмяПризнакаОптимизации); ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; @@ -23295,10 +24820,10 @@ Если Не ФункцияБезУточненийТиповСПолемБезВложений(ОграничениеИзменения) Тогда Если ТребуетсяОграничениеПоВладельцу Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установлен признак оптимизации ограничения %1, - |но параметры функции %2 не представлены + НСтр("ru = 'Установлен признак оптимизации ограничения ""%1"", + |но параметры функции ""%2"" не представлены |только одним параметром - полем владельцем без других параметров.'"), - "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", ""), + ИмяПризнакаОптимизации, ОграничениеИзменения.Узел); ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда @@ -23310,15 +24835,16 @@ КонецЕсли; КонецЕсли; + ОграничениеИзмененияПоле = ОграничениеИзменения.Поле; // См. ОписаниеУзла Если ПолеВладельца.Имя = "" Тогда - ПолеВладельца.Имя = ОграничениеИзменения.Поле.Имя; + ПолеВладельца.Имя = ОграничениеИзмененияПоле.Имя; - ИначеЕсли ПолеВладельца.Имя <> ОграничениеИзменения.Поле.Имя Тогда + ИначеЕсли ПолеВладельца.Имя <> ОграничениеИзмененияПоле.Имя Тогда Если ТребуетсяОграничениеПоВладельцу Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установлен признак оптимизации ограничения %1, + НСтр("ru = 'Установлен признак оптимизации ограничения ""%1"", |но поле владельца не совпадает в ограничениях чтения и изменения.'"), - "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", ""), + ИмяПризнакаОптимизации, ОграничениеИзменения.Узел); ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда @@ -23340,9 +24866,9 @@ Если СвойстваПолей.Количество() <> 1 Тогда Если ТребуетсяОграничениеПоВладельцу И СвойстваПолей.Количество() <> 0 Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установлен признак оптимизации ограничения %1, + НСтр("ru = 'Установлен признак оптимизации ограничения ""%1"", |но количество полей, используемых в ограничении, более одного.'"), - "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", "")); + ИмяПризнакаОптимизации); ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда Контекст.ОшибкаПриВызовеИсключения.Текст = ТекстОшибки; @@ -23380,10 +24906,10 @@ КонецЦикла; Если ТребуетсяОграничениеПоВладельцу Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установлен признак оптимизации ограничения %1, + НСтр("ru = 'Установлен признак оптимизации ограничения ""%1"", |но для следующих таблиц невозможно записать ключи доступа: |%2'"), - "ПоВладельцуБезЗаписиКлючейДоступа" + ?(Контекст.ДляВнешнихПользователей, "ДляВнешнихПользователей", ""), + ИмяПризнакаОптимизации, СтрСоединить(НекорректныеТипы, Символы.ПС)); ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст); Если Контекст.Свойство("ОшибкаПриВызовеИсключения") Тогда @@ -23402,15 +24928,24 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Имя - Строка +// * ИзменениеКакЧтение - Булево +// +Функция НовоеПолеВладельца() + + Возврат Новый Структура("Имя, ИзменениеКакЧтение", "", Ложь); + +КонецФункции + // Для функции ЗаполнитьОграничениеПоОбъектуВладельцу и процедуры НастроитьОптимизациюПоПолюВладельцу. Функция ТекстОшибкиСЗаголовком(ТекстОшибки, Контекст) - ОписаниеОшибок = Новый Структура; - ОписаниеОшибок.Вставить("ЕстьОшибки", Истина); - ОписаниеОшибок.Вставить("Ошибки", Новый Массив(1)); - ОписаниеОшибок.Вставить("ТекстОшибок", ТекстОшибки); - ОписаниеОшибок.Вставить("Ограничение", ""); - ОписаниеОшибок.Вставить("Дополнение", ""); + ОписаниеОшибок = ОписаниеОшибок(); + ОписаниеОшибок.ЕстьОшибки = Истина; + ОписаниеОшибок.ТекстОшибок = ТекстОшибки; + ОписаниеОшибок.Ошибки = Новый Массив(1); ОписаниеОграничения = Контекст.ОписанияОграничений.Получить(Контекст.Список); @@ -23440,6 +24975,11 @@ КонецФункции // Для функции ПараметрыОграниченияДоступа. +// +// Параметры: +// Результат - см. ПараметрыОграниченияПоСтруктуреОграничения +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Процедура ЗаполнитьНаличиеВедущихКлючейИСписковИВладельцевНастроекПрав(Результат, Контекст) Для Каждого СвойстваПоля Из Контекст.СвойстваПолей Цикл @@ -23483,6 +25023,11 @@ КонецПроцедуры // Для функции ПараметрыОграниченияДоступа. +// +// Параметры: +// Результат - см. ПараметрыОграниченияПоСтруктуреОграничения +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Процедура УдалитьПоляНеиспользуемыхВидовДоступа(Результат, Контекст) СвойстваПолей = Контекст.СвойстваПолей; @@ -23502,7 +25047,8 @@ Пока Индекс > 0 Цикл Индекс = Индекс - 1; СвойстваПоля = СвойстваПолей.Получить(Индекс); - УстановитьИспользованиеОпорногоПоля(Контекст.ОпорныеПоля, СвойстваПоля); + УстановитьИспользованиеПоляТаблицыОбъекта(Контекст, СвойстваПоля); + УстановитьИспользованиеОпорногоПоля(Контекст, СвойстваПоля); ДобавитьСвойстваВерсии(Контекст, СвойстваПоля, "ЕстьУточнениеNull, |ЕстьУточнениеНеопределено, @@ -23525,6 +25071,11 @@ КонецПроцедуры // Для функции ПараметрыОграниченияДоступа. +// +// Параметры: +// Результат - см. ПараметрыОграниченияПоСтруктуреОграничения +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Процедура ЗаполнитьНаличиеОграниченияПоВидуДоступаПользователи(Результат, Контекст) Если Результат.ЕстьВладельцыНастроекПрав Тогда @@ -23557,6 +25108,11 @@ КонецПроцедуры // Для функции ПараметрыОграниченияДоступа. +// +// Параметры: +// Результат - см. ПараметрыОграниченияПоСтруктуреОграничения +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Процедура ЗаполнитьНаличиеОграниченияЧтения(Результат, Контекст) Для Каждого СвойстваПоля Из Контекст.СвойстваПолей Цикл @@ -23571,6 +25127,10 @@ КонецПроцедуры // Для функции ПараметрыОграниченияДоступа. +// +// Параметры: +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Процедура ЗаполнитьГруппыПолейИДополнительныхТаблиц(Контекст) // Поля шапки (начинаются от шапки - группировка по пустому псевдониму, если нет имени табличной части). @@ -23610,6 +25170,7 @@ + ГруппыДополнительныхТаблиц.ТаблицыПоГруппам.Количество() + КоличествоТабличныхЧастейКлючаДляРеквизитовШапкиОбъекта; + ЗавершитьПодготовкуПолейТаблицОбъекта(Контекст); ЗавершитьПодготовкуОпорныхПолей(Контекст); Если КоличествоТабличныхЧастейКлюча > РазмерностьКлючаДоступа.КоличествоТабличныхЧастей Тогда @@ -23706,8 +25267,8 @@ КонецЕсли; ГруппаПолей.Добавить(СвойстваПоля); СвойстваПоля.Вставить("ИмяГруппыПолейКлючаДоступа", ИмяГруппыПолей); - СвойстваПоля.Вставить("ИмяРеквизитаГруппыПолейКлючаДоступа", "Значение" + Строка( - ГруппаПолей.Количество() + ?(ИмяГруппыПолей = "Шапка1" Или ИмяГруппыПолей = "Шапка2", 5, 0))); + СвойстваПоля.Вставить("ИмяРеквизитаГруппыПолейКлючаДоступа", + "Значение" + XMLСтрока(ГруппаПолей.Количество() + ?(ИмяГруппыПолей = "Шапка1" Или ИмяГруппыПолей = "Шапка2", 5, 0))); Если Не СтрНачинаетсяС(ИмяГруппыПолей, "Шапка") И ГруппаПолей.Количество() > РазмерностьКлючаДоступа.КоличествоРеквизитовТабличнойЧасти Тогда @@ -23755,6 +25316,12 @@ КонецПроцедуры // Для функции ПараметрыОграниченияДоступа. +// +// Параметры: +// УсловиеРасчета - см. СтруктураРасчетаПрава +// Условие - см. ОписаниеУзла +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Процедура ЗаполнитьСтруктуруРасчетаПрава(УсловиеРасчета, Условие, Контекст, КореньУсловия = Истина) Если Не ЗначениеЗаполнено(Условие) Тогда @@ -23851,7 +25418,7 @@ Или КлючИЗначение.Ключ = "Неопределено" Или КлючИЗначение.Ключ = "ПустаяСсылка" Или КлючИЗначение.Ключ = "Отключено" Тогда - УсловиеРасчета.УточненияСравнения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + УсловиеРасчета.УточненияСравнения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); Иначе ИмяТипа = СтрЗаменить(КлючИЗначение.Ключ, ".", "Ссылка."); УсловиеРасчета.УточненияСравнения.Вставить(Тип(ИмяТипа), КлючИЗначение.Значение); @@ -23970,14 +25537,32 @@ КонецФункции // Для функции ЗаполнитьГруппыПолейИДополнительныхТаблиц. +// +// Параметры: +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// +// Возвращаемое значение: +// Структура: +// * НомераПоПсевдонимам - Соответствие: +// ** Ключ - Строка - псевдоним дополнительной таблицы +// ** Значение - Число - номер группы дополнительных таблиц +// +// * ТаблицыПоГруппам - Соответствие: +// ** Ключ - Число - номер группы дополнительных таблиц +// ** Значение - Массив Из см. НовоеОписаниеСоединения +// +// * ПсевдонимыТаблицСПолями - Соответствие: +// ** Ключ - Строка - псевдоним дополнительной таблицы +// с полями ключа доступа (кроме полей соединений). +// ** Значение - Булево - Истина. +// Функция ГруппыДополнительныхТаблиц(Контекст) ДополнительныеТаблицы = Контекст.СтруктураОграничения.ДополнительныеТаблицы; НомераГруппПоПсевдонимам = Новый Соответствие; - ОпорныеПоля = Контекст.ОпорныеПоля; - ОпорныеПоля.Вставить("ПоДополнительнымТаблицам", Новый Соответствие); - + Контекст.ОпорныеПоля.Вставить("ПоДополнительнымТаблицам", Новый Соответствие); + Контекст.ПоляТаблицОбъекта.Вставить("ПоДополнительнымТаблицам", Новый Соответствие); Контекст.Вставить("ПоляУсловияСоединенияДополнительныхТаблиц", Новый Массив); ПоследняяГруппа = 0; @@ -24076,7 +25661,8 @@ Если Не ИспользованиеГрупп.Получить(СтараяГруппа) Тогда Продолжить; КонецЕсли; - УстановитьИспользованиеОпорногоПоля(ОпорныеПоля, , ДополнительнаяТаблица); + УстановитьИспользованиеПоляТаблицыОбъекта(Контекст, , ДополнительнаяТаблица); + УстановитьИспользованиеОпорногоПоля(Контекст, , ДополнительнаяТаблица); Группа = НовыеГруппы.Получить(СтараяГруппа); Группы.НомераПоПсевдонимам.Вставить(ДополнительнаяТаблица.Псевдоним, Группа); ГруппаТаблиц = Группы.ТаблицыПоГруппам.Получить(Группа); @@ -24132,6 +25718,7 @@ Если Условие.Узел = "Поле" Тогда Контекст.ПоляУсловияСоединенияДополнительныхТаблиц.Добавить(Новый Структура( "УзелПоле, ПсевдонимТаблицыУсловия", Условие, ДополнительнаяТаблица.Псевдоним)); + ДобавитьПолеТаблицыОбъекта(Контекст, Условие, , ДополнительнаяТаблица); Если Условие.Псевдоним = Контекст.СтруктураОграничения.ПсевдонимОсновнойТаблицы Тогда ДобавитьОпорноеПоле(Контекст, Условие, , ДополнительнаяТаблица); Псевдоним = "ТекущийСписок"; @@ -24167,8 +25754,8 @@ КонецЕсли; Если Условие.Узел = "=" Тогда - ПервоеПоле = Новый Структура("Поле, Псевдоним"); - ВтороеПоле = Новый Структура("Поле, Псевдоним"); + ПервоеПоле = НовоеПолеУсловияСоединения(); + ВтороеПоле = НовоеПолеУсловияСоединения(); ПервыйАргумент = ТекстУсловияСоединения(ДополнительнаяТаблица, Контекст, Условие.ПервыйАргумент, ПервоеПоле.Поле, ПервоеПоле.Псевдоним); @@ -24179,10 +25766,10 @@ Если ПервоеПоле.Псевдоним = ДополнительнаяТаблица.Псевдоним Или Не ЗначениеЗаполнено(ВтороеПоле.Псевдоним) Тогда ТекстУсловия = "(" + ПервыйАргумент + " = " + ВторойАргумент + ")"; - ПоляУсловия = Новый Структура("ПервоеПоле, ВтороеПоле", ПервоеПоле, ВтороеПоле); + ПоляУсловия = ПараПолейУсловияСоединения(ПервоеПоле, ВтороеПоле); Иначе ТекстУсловия = "(" + ВторойАргумент + " = " + ПервыйАргумент + ")"; - ПоляУсловия = Новый Структура("ПервоеПоле, ВтороеПоле", ВтороеПоле, ПервоеПоле); + ПоляУсловия = ПараПолейУсловияСоединения(ВтороеПоле, ПервоеПоле); КонецЕсли; ДополнительнаяТаблица.ПоляУсловияСоединения.Добавить(ПоляУсловия); Возврат ТекстУсловия; @@ -24195,6 +25782,84 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * ПервоеПоле - см. НовоеПолеУсловияСоединения +// * ВтороеПоле - см. НовоеПолеУсловияСоединения +// +Функция ПараПолейУсловияСоединения(ПервоеПоле, ВтороеПоле) + + Возврат Новый Структура("ПервоеПоле, ВтороеПоле", ПервоеПоле, ВтороеПоле); + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * Поле - Строка +// * Псевдоним - Строка +// +Функция НовоеПолеУсловияСоединения() + + Возврат Новый Структура("Поле, Псевдоним"); + +КонецФункции + +// Для функций СвойстваПоля, ТекстУсловияСоединения. +Процедура ДобавитьПолеТаблицыОбъекта(Контекст, УзелПоле, СвойстваПоля = Неопределено, ДополнительнаяТаблица = Неопределено, ТабличнаяЧасть = "") + + ИмяТаблицыОбъекта = Контекст.Список; + + Если ЗначениеЗаполнено(УзелПоле.Псевдоним) + И УзелПоле.Псевдоним <> Контекст.СтруктураОграничения.ПсевдонимОсновнойТаблицы + И ВРег(Контекст.Список) <> ВРег(УзелПоле.Таблица) Тогда + + ЧастиИмениТаблицы = СтрРазделить(УзелПоле.Таблица, ".", Ложь); + Если ЧастиИмениТаблицы.Количество() <> 3 Тогда + Возврат; + КонецЕсли; + ИмяТаблицыОбъекта = Контекст.Список + "." + ЧастиИмениТаблицы[2]; + КонецЕсли; + + ЧастиИмениПоля = СтрРазделить(УзелПоле.Имя, ".", Ложь); + Если ЗначениеЗаполнено(ТабличнаяЧасть) Тогда + ИмяПоляТаблицы = ЧастиИмениПоля[1]; + ТипыПоляТаблицы = УзелПоле.ТипыПоля[1]; + ИмяТаблицыОбъекта = Контекст.Список + "." + ТабличнаяЧасть; + Иначе + ИмяПоляТаблицы = ЧастиИмениПоля[0]; + ТипыПоляТаблицы = УзелПоле.ТипыПоля[0]; + КонецЕсли; + + ПоляТаблицОбъекта = Контекст.ПоляТаблицОбъекта; + ИмяТаблицыОбъекта = СтрЗаменить(ИмяТаблицыОбъекта, ".", "_"); + + Если СвойстваПоля <> Неопределено Тогда + ОписаниеПоляТаблицы = Новый Структура("Таблица, Поле", ИмяТаблицыОбъекта, ИмяПоляТаблицы); + ПоляТаблицОбъекта.ПоСвойствамПолей.Вставить(СвойстваПоля, ОписаниеПоляТаблицы); + КонецЕсли; + + Если ДополнительнаяТаблица <> Неопределено Тогда + ПоляТаблиц = ПоляТаблицОбъекта.ПоДополнительнымТаблицам.Получить(ДополнительнаяТаблица); + Если ПоляТаблиц = Неопределено Тогда + ПоляТаблиц = Новый Структура; + ПоляТаблицОбъекта.ПоДополнительнымТаблицам.Вставить(ДополнительнаяТаблица, ПоляТаблиц); + КонецЕсли; + Если Не ПоляТаблиц.Свойство(ИмяТаблицыОбъекта) Тогда + ПоляТаблиц.Вставить(ИмяТаблицыОбъекта, Новый Массив); + КонецЕсли; + ПоляТаблиц[ИмяТаблицыОбъекта].Добавить(ИмяПоляТаблицы); + КонецЕсли; + + Если Не ПоляТаблицОбъекта.Состав.Свойство(ИмяТаблицыОбъекта) Тогда + ПоляТаблицОбъекта.Состав.Вставить(ИмяТаблицыОбъекта, Новый Структура); + КонецЕсли; + ПоляТаблицы = ПоляТаблицОбъекта.Состав[ИмяТаблицыОбъекта]; + Если Не ПоляТаблицы.Свойство(ИмяПоляТаблицы) Тогда + ПоляТаблицы.Вставить(ИмяПоляТаблицы, Новый Структура("Тип, Использование", ТипыПоляТаблицы, Ложь)); + КонецЕсли; + +КонецПроцедуры + // Для функций СвойстваПоля, ТекстУсловияСоединения. Процедура ДобавитьОпорноеПоле(Контекст, УзелПоле, СвойстваПоля = Неопределено, ДополнительнаяТаблица = Неопределено) @@ -24258,7 +25923,33 @@ КонецПроцедуры // Для процедур УдалитьПоляНеиспользуемыхВидовДоступа, ГруппыДополнительныхТаблиц. -Процедура УстановитьИспользованиеОпорногоПоля(ОпорныеПоля, СвойстваПоля = Неопределено, ДополнительнаяТаблица = Неопределено) +Процедура УстановитьИспользованиеПоляТаблицыОбъекта(Контекст, СвойстваПоля = Неопределено, ДополнительнаяТаблица = Неопределено) + + ПоляТаблицОбъекта = Контекст.ПоляТаблицОбъекта; + + Если СвойстваПоля <> Неопределено Тогда + ОписаниеПоля = ПоляТаблицОбъекта.ПоСвойствамПолей.Получить(СвойстваПоля); + Если ОписаниеПоля <> Неопределено Тогда + ПоляТаблицОбъекта.Состав[ОписаниеПоля.Таблица][ОписаниеПоля.Поле].Использование = Истина; + КонецЕсли; + Иначе + ПоляТаблиц = ПоляТаблицОбъекта.ПоДополнительнымТаблицам.Получить(ДополнительнаяТаблица); + Если ПоляТаблиц <> Неопределено Тогда + Для Каждого ОписаниеПолей Из ПоляТаблиц Цикл + ПоляТаблицы = ПоляТаблицОбъекта.Состав[ОписаниеПолей.Ключ]; + Для Каждого ИмяПоля Из ОписаниеПолей.Значение Цикл + ПоляТаблицы[ИмяПоля].Использование = Истина; + КонецЦикла; + КонецЦикла; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Для процедур УдалитьПоляНеиспользуемыхВидовДоступа, ГруппыДополнительныхТаблиц. +Процедура УстановитьИспользованиеОпорногоПоля(Контекст, СвойстваПоля = Неопределено, ДополнительнаяТаблица = Неопределено) + + ОпорныеПоля = Контекст.ОпорныеПоля; Если СвойстваПоля <> Неопределено Тогда ИмяОпорногоПоля = ОпорныеПоля.ПоСвойствамПолей.Получить(СвойстваПоля); @@ -24277,6 +25968,57 @@ КонецПроцедуры // Для процедуры ЗаполнитьГруппыПолейИДополнительныхТаблиц. +// +// Параметры: +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// +Процедура ЗавершитьПодготовкуПолейТаблицОбъекта(Контекст) + + ПоляТаблицОбъекта = Контекст.ПоляТаблицОбъекта; + ПолноеИмяОсновнойТаблицы = СтрЗаменить(Контекст.Список, ".", "_"); + ТипСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве( + Тип(ИмяТипаСсылки(Контекст.Список, Контекст.СтруктураОграничения.ВнутренниеДанные.ТипыТаблицПоИменам)))); + + Для Каждого ОписаниеТаблицы Из ПоляТаблицОбъекта.Состав Цикл + ПоляТаблицы = НовыеПоляТаблицыОбъекта(); + ПоляТаблицы.ПолноеИмяТаблицы = ОписаниеТаблицы.Ключ; + ТаблицаЗначений = Новый ТаблицаЗначений; + ЕстьИспользуемыеПоля = Ложь; + Для Каждого ОписаниеПоля Из ОписаниеТаблицы.Значение Цикл + Если Не ОписаниеПоля.Значение.Использование Тогда + Продолжить; + КонецЕсли; + ЕстьИспользуемыеПоля = Истина; + Если ВРег("Ссылка") = ВРег(ОписаниеПоля.Ключ) Тогда + Продолжить; + КонецЕсли; + ПоляТаблицы.Поля.Добавить(ОписаниеПоля.Ключ); + ТаблицаЗначений.Колонки.Добавить(ОписаниеПоля.Ключ, ОписаниеПоля.Значение.Тип); + КонецЦикла; + Если Не ЕстьИспользуемыеПоля Тогда + Продолжить; + КонецЕсли; + ПоляТаблицы.СписокПолей = СтрСоединить(ПоляТаблицы.Поля, ", "); + ПоляТаблицы.Поля.Вставить(0, "Ссылка"); + ТаблицаЗначений.Колонки.Добавить("Ссылка", ТипСсылки); + ПоляТаблицы.ТаблицаСПолями = Новый ХранилищеЗначения(ТаблицаЗначений); + Если ПоляТаблицы.ПолноеИмяТаблицы <> ПолноеИмяОсновнойТаблицы Тогда + ПоляТаблицы.ТабличнаяЧасть = Сред(ПоляТаблицы.ПолноеИмяТаблицы, + СтрДлина(ПолноеИмяОсновнойТаблицы) + 2); + КонецЕсли; + ПоляТаблицОбъекта.Результат.Добавить(ПоляТаблицы); + КонецЦикла; + + ПоляТаблицОбъекта.Удалить("ПоСвойствамПолей"); + ПоляТаблицОбъекта.Удалить("ПоДополнительнымТаблицам"); + +КонецПроцедуры + +// Для процедуры ЗаполнитьГруппыПолейИДополнительныхТаблиц. +// +// Параметры: +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Процедура ЗавершитьПодготовкуОпорныхПолей(Контекст) ОпорныеПоля = Контекст.ОпорныеПоля; @@ -24345,6 +26087,7 @@ Контекст.ОпорныеПоля.Вставить("ТипыПоИменамПолей", Новый Соответствие); Контекст.ОпорныеПоля.Вставить("ПоСвойствамПолей", Новый Соответствие); + Контекст.ПоляТаблицОбъекта.Вставить("ПоСвойствамПолей", Новый Соответствие); СвойстваВсехПолей = Новый Соответствие; ПоляКлючаДоступаДоУпрощения = Контекст.СтруктураОграничения.ВнутренниеДанные.ПоляКлючаДоступа; @@ -24354,11 +26097,10 @@ КонецЦикла; Контекст.Вставить("СвойстваВсехПолей", СвойстваВсехПолей); - ОставшиесяПоляПослеУпрощения = Новый Соответствие; - Контекст.Вставить("ОставшиесяПоляПослеУпрощения", ОставшиесяПоляПослеУпрощения); + Контекст.Вставить("ОставшиесяПоляПослеУпрощения", Новый Соответствие); Контекст.Вставить("ИсходнаяСтруктураОграничения", Контекст.СтруктураОграничения); - СтруктураОграничения = Новый Структура(Новый ФиксированнаяСтруктура(Контекст.СтруктураОграничения)); // см. УправлениеДоступом.СтруктураОграничения + СтруктураОграничения = Новый Структура(Новый ФиксированнаяСтруктура(Контекст.СтруктураОграничения)); // см. СтруктураОграничения Контекст.Вставить("ИмяПрава", "Чтение"); СтруктураОграничения.ОграничениеЧтения = УпрощенноеУсловиеОграничения( СтруктураОграничения.ОграничениеЧтения, Контекст, Истина); @@ -24367,9 +26109,9 @@ СтруктураОграничения.ОграничениеИзменения, Контекст, Истина); Контекст.Вставить("СтруктураОграничения", СтруктураОграничения); - ПоляКлючаДоступаПослеУпрощения = Новый Массив; + ПоляКлючаДоступаПослеУпрощения = Новый Массив; // Массив Из см. НовоеПолеКлючаДоступа Для Каждого ОписаниеПоля Из ПоляКлючаДоступаДоУпрощения Цикл - РодителиПоля = ОставшиесяПоляПослеУпрощения.Получить(ОписаниеПоля.Поле); + РодителиПоля = Контекст.ОставшиесяПоляПослеУпрощения.Получить(ОписаниеПоля.Поле); // Массив из см. ОписаниеУзла Если РодителиПоля = Неопределено Тогда Продолжить; КонецЕсли; @@ -24383,7 +26125,7 @@ ДобавленныеПоля = Новый Соответствие; ИменаПолейДляЗапроса = Новый Массив; Для Каждого ОписаниеПоля Из ПоляКлючаДоступаПослеУпрощения Цикл - СвойстваПоля = СвойстваВсехПолей.Получить(ОписаниеПоля.Поле); + СвойстваПоля = СвойстваВсехПолей.Получить(ОписаниеПоля.Поле); // см. СвойстваПоля СвойстваПоля.Вставить("Чтение", ОписаниеПоля.Чтение); УточнитьСвойстваПоляСравнения(СвойстваПоля, ОписаниеПоля, Контекст); НаборПолей = НаборПолейУсловияКогда(СвойстваПоля, ОписаниеПоля, Контекст); @@ -24399,7 +26141,7 @@ КонецЦикла; КонецЦикла; - СвойстваПолей = Новый Массив; + СвойстваПолей = Новый Массив; // Массив из см. СвойстваПоля СовмещенныеПоля = Новый Соответствие; Для Каждого ИмяПоляДляЗапроса Из ИменаПолейДляЗапроса Цикл ОдинаковыеПоля = ДобавленныеПоля.Получить(ВРег(ИмяПоляДляЗапроса)); @@ -24612,7 +26354,8 @@ Если Условие.Узел <> "Константа" И ДобавитьОставшиесяПоля Тогда Для Каждого КлючИЗначение Из Контекст.ОставшиесяПоляПослеУпрощения Цикл Если Условие.Узел <> "Поле" Тогда - КлючИЗначение.Значение.Добавить(Условие); + РодителиПоля = КлючИЗначение.Значение; // Массив Из см. ОписаниеУзла + РодителиПоля.Добавить(Условие); КонецЕсли; ОставшиесяПоляПослеУпрощения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; @@ -24940,10 +26683,10 @@ РодительУзлаСравнения = ОписаниеПоля.Родители[1]; Если РодительУзлаСравнения.ВторойАргумент = Родитель Тогда - УзелТип = РодительУзлаСравнения.ПервыйАргумент; + УзелТип = РодительУзлаСравнения.ПервыйАргумент; // См. ОписаниеУзла УзелТипЗначения = РодительУзлаСравнения.ВторойАргумент; Иначе - УзелТип = РодительУзлаСравнения.ВторойАргумент; + УзелТип = РодительУзлаСравнения.ВторойАргумент; // См. ОписаниеУзла УзелТипЗначения = РодительУзлаСравнения.ПервыйАргумент; КонецЕсли; Контекст.СвойстваПолейКлючаДоступа.Вставить(УзелТипЗначения, Свойства); @@ -25041,6 +26784,12 @@ КонецФункции // Для процедуры ЗаполнитьСвойстваПолей. +// +// Параметры: +// Свойства - см. СвойстваПоля +// ОписаниеПоля - см. НовоеПолеКлючаДоступа +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// Процедура ДобавитьСвойстваТиповПоля(Свойства, ОписаниеПоля, Контекст) Свойства.Вставить("ТипыСохраненияКлючейДоступа", Новый Массив); @@ -25175,7 +26924,7 @@ Продолжить; КонецЕсли; - СвойстваВидаДоступа = СвойстваВидовДоступа.ПоТипамГруппИЗначений.Получить(Тип); + СвойстваВидаДоступа = СвойстваВидовДоступа.ПоТипамГруппИЗначений.Получить(Тип); // См. СвойстваВидаДоступа Если СвойстваВидаДоступа = Неопределено Тогда Свойства.ТипыСохраненияТипаРазрешенный.Добавить(Тип); Продолжить; @@ -25309,6 +27058,47 @@ КонецПроцедуры // Для процедуры ЗаполнитьСвойстваПолей. +// +// Параметры: +// УзелПоле - см. ОписаниеУзла +// Контекст - см. КонтекстПараметровПоСтруктуреОграничения +// СвойстваПоля - см. СвойстваПоля +// +// Возвращаемое значение: +// Структура: +// * ПсевдонимТаблицы - Строка +// * ИмяПоляДляЗапроса - Строка +// * ТабличнаяЧасть - Строка +// * ЭтоПолеСписка - Булево +// * БезЗначенияNull - Булево +// * ПолеСодержитNull - Неопределено +// * ЕстьВыразить - Неопределено +// * УзелПоле - см. ОписаниеУзла +// * СвойстваВложения - см. СвойстваПоля +// * Чтение - Булево +// * ПроверкаЕстьNull - Неопределено +// * ТипыСохраненияКлючейДоступа - Массив Из Тип +// * ТипыСохраненияГруппЗначений - Массив Из Тип +// * ТипыСохраненияЗначений - Массив Из Тип +// * ТипыСохраненияПустойСсылки - Массив Из Тип +// * ТипыСохраненияТипов - Массив Из Тип +// * ТипыСохраненияТипаЗапрещенный - Массив Из Тип +// * ТипыСохраненияТипаРазрешенный - Массив Из Тип +// * НеиспользуемыеТипыЗначенийДоступа - Массив Из Тип +// * ИспользуемыеТипыЗначенийДоступа - Массив Из Тип +// * НесколькоГруппЗначений - Булево +// * ЭтоСписокЗначенийДоступаСГруппамиЗначений - Булево +// * ЕстьУточнениеNull - Булево +// * ЕстьУточнениеНеопределено - Булево +// * ЕстьТипВедущегоСписка - Булево +// * ЕстьТипВладельцаНастроекПрав - Булево +// * ЕстьПроверкаАвторизованногоПользователя - Булево +// * ТипыСохраненияТиповКонфигурации - Массив Из Тип +// * ТипыСохраненияТиповРасширений - Массив Из Тип +// * ТипыСохраненияТиповПростых - Массив Из Тип +// * ИмяГруппыПолейКлючаДоступа - Строка +// * ИмяРеквизитаГруппыПолейКлючаДоступа - Строка +// Функция СвойстваПоля(УзелПоле, Контекст, СвойстваПоля = Неопределено) Свойства = Новый Структура; @@ -25362,6 +27152,7 @@ ЧастиИмени.Удалить(0); ИмяПоляДляЗапроса = ПсевдонимТаблицы + "." + СтрСоединить(ЧастиИмени, "."); КонецЕсли; + ДобавитьПолеТаблицыОбъекта(Контекст, УзелПоле, СвойстваПоля,, ТабличнаяЧасть); ТипыСтрокой = УзелПоле.ТипыСтрокой; КонецЕсли; @@ -25404,6 +27195,12 @@ // Для функции ПараметрыОграниченияПоСтруктуреОграничения. +// +// Возвращаемое значение: +// Структура: +// * Поля - Соответствие +// * СоединенияОтборов - Соответствие +// Функция ОписаниеВедущихСписковПоЗначениямПолей() Возврат Новый Структура("Поля, СоединенияОтборов", Новый Соответствие, Новый Соответствие); @@ -25602,6 +27399,14 @@ КонецПроцедуры // Для функции ПараметрыОграниченияПоСтруктуреОграничения. +// +// Возвращаемое значение: +// Структура: +// * Списки - Соответствие +// * КлючиЗапросовПоТипам - Соответствие +// * СоединенияОтборов - Соответствие +// * ТипСсылки - ОписаниеТипов +// Функция ОписаниеВедущихСписковПоПолюСсылка() Описание = Новый Структура; @@ -26058,6 +27863,8 @@ Результат.Вставить("ТекстЗапросаПроверкиПравЧтениеИзменение"); // Проверка права Чтение объекта или набора записей в базе данных. Результат.Вставить("ТекстЗапросаПроверкиПраваЧтение"); + // Текст извлечения владельца из ссылки объекта. + Результат.Вставить("ПолеОбъектаВладельцаВЗапросеПроверкиПрав"); ДобавитьТекстЗапросаДатыСледующегоЭлементаДанных(Результат, Контекст); @@ -26104,6 +27911,8 @@ // Запрос значений объектов или отборов записей. Результат.Вставить("ТекстЗапросаЗначенийЭлементовДанныхДляКлючейДоступа"); + // Запрос значений объектов в памяти. + Результат.Вставить("ТекстЗапросаЗначенийОбъектовВПамятиДляКлючейДоступа"); // Запрос значений из используемых ключей доступа для сравнения со значениями из объектов или отборов записей. Результат.Вставить("ТекстЗапросаЗначенийИзИспользуемыхКлючейДоступаДляСравнения"); // Запрос значений из всех ключей доступа для сравнения со значениями из объектов или @@ -26127,6 +27936,7 @@ Контекст.Вставить("РеквизитыТаблицКлюча", Новый Соответствие); Контекст.Вставить("ЧастиУсловияПроверки", Новый Массив); Контекст.Вставить("ЧастиЗапросаЗначенийИзОбъектов", Новый Массив); + Контекст.Вставить("ЧастиЗапросаЗначенийИзОбъектовВПамяти", Новый Массив); Контекст.Вставить("ЧастиЗапросаЗначенийИзКлючейДляСравнения", Новый Массив); Контекст.Вставить("ЧастиЗапросаСуществованияКлючейДляСравнения", Новый Массив); Контекст.Вставить("ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав", Новый Массив); @@ -27018,6 +28828,16 @@ ПодставитьОбщиеПараметрыВЗапрос(ТекстЗапроса, Контекст); Результат.ТекстЗапросаЗначенийЭлементовДанныхДляКлючейДоступа = ТекстЗапроса; + Если ЗначениеЗаполнено(Контекст.ЧастиЗапросаЗначенийИзОбъектовВПамяти) Тогда + ТекстЗапроса = СтрСоединить(Контекст.ЧастиЗапросаЗначенийИзОбъектовВПамяти, + ОбщегоНазначения.РазделительПакетаЗапросов()); + ИмяВременнойТаблицы = СтрЗаменить(Контекст.Список, ".", "_"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийСписок.", ИмяВременнойТаблицы + "_"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийСписок", ИмяВременнойТаблицы); + ПодставитьОбщиеПараметрыВЗапрос(ТекстЗапроса, Контекст); + Результат.ТекстЗапросаЗначенийОбъектовВПамятиДляКлючейДоступа = ТекстЗапроса; + КонецЕсли; + ТекстЗапроса = СтрСоединить(Контекст.ЧастиЗапросаЗначенийИзКлючейДляСравнения, ОбщегоНазначения.РазделительПакетаЗапросов()); ПодставитьОбщиеПараметрыВЗапрос(ТекстЗапроса, Контекст); @@ -27750,6 +29570,7 @@ Если Результат.ИспользуетсяОграничениеПоВладельцу Тогда Если Контекст.ЭтоСсылочныйТип Тогда ПолеОбъекта = "ВЫРАЗИТЬ(&Объект КАК " + Контекст.Список + ")." + Результат.ПолеВладельца.Имя; + Результат.ПолеОбъектаВладельцаВЗапросеПроверкиПрав = ПолеОбъекта; Иначе ПолеОбъекта = "ТекущаяТаблица." + Результат.ПолеВладельца.Имя; КонецЕсли; @@ -28324,6 +30145,18 @@ |ИЗ | &ЗначенияОпорныхПолей КАК ТекущийСписок"; Контекст.ЧастиЗапросаЗначенийИзОбъектов.Добавить(ТекстЗапроса); + + ИначеЕсли НомерШапки = 0 Тогда + Для Каждого ОписаниеТаблицы Из Контекст.ПоляТаблицОбъекта.Результат Цикл + ТекстЗапроса = + "ВЫБРАТЬ + | ТекущаяТаблица." + СтрСоединить(ОписаниеТаблицы.Поля, ", + | ТекущаяТаблица.") + " + | ПОМЕСТИТЬ " + ОписаниеТаблицы.ПолноеИмяТаблицы + " + |ИЗ + | &" + ОписаниеТаблицы.ПолноеИмяТаблицы + " КАК ТекущаяТаблица"; + Контекст.ЧастиЗапросаЗначенийИзОбъектовВПамяти.Добавить(ТекстЗапроса); + КонецЦикла; КонецЕсли; ГруппаПолей = Контекст.ГруппыПолей.Получить("Шапка" + НомерШапки); @@ -28366,6 +30199,7 @@ КонецЕсли; Контекст.ЧастиЗапросаЗначенийИзОбъектов.Добавить(ТекстЗапроса); + Контекст.ЧастиЗапросаЗначенийИзОбъектовВПамяти.Добавить(ТекстЗапроса); // Выбор значений из ключей доступа для сравнения со значениями требуемых ключей. Если НомерШапки = 0 Тогда @@ -28655,18 +30489,46 @@ Иначе ПоляВыбора = ""; Соединения = ""; + СоединенияВБазеДанных = ""; + СоединенияВПамяти = ""; Условие = ""; ПоляУпорядочения = ""; Реквизиты = ""; Для Каждого ДополнительнаяТаблица Из ГруппаДополнительныхТаблиц Цикл СоединенияИПоля = СоединенияИПоляПоТаблицам.Получить(ДополнительнаяТаблица.Псевдоним); - Соединения = Соединения + " + ТекущееСоединение = " |ЛЕВОЕ СОЕДИНЕНИЕ " + ДополнительнаяТаблица.Таблица + " КАК " + ДополнительнаяТаблица.Псевдоним + " |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " "); + Соединения = Соединения + ТекущееСоединение; + Если Контекст.ЭтоСсылочныйТип Тогда + Если ВРег(Контекст.Список) = ВРег(ДополнительнаяТаблица.Таблица) Тогда + ДополнительноеИмя = "&ТекущийСписок"; + ИначеЕсли СтрНачинаетсяС(ВРег(ДополнительнаяТаблица.Таблица), ВРег(Контекст.Список) + ".") Тогда + ДополнительноеИмя = "&ТекущийСписок." + СтрРазделить(ДополнительнаяТаблица.Таблица, ".")[2]; + Иначе + ДополнительноеИмя = ДополнительнаяТаблица.Таблица; + КонецЕсли; + Если ДополнительноеИмя = ДополнительнаяТаблица.Таблица Тогда + СоединенияВБазеДанных = СоединенияВБазеДанных + ТекущееСоединение; + СоединенияВПамяти = СоединенияВПамяти + ТекущееСоединение; + Иначе + СоединенияВБазеДанных = СоединенияВБазеДанных + " + |ЛЕВОЕ СОЕДИНЕНИЕ " + ДополнительнаяТаблица.Таблица + " КАК " + ДополнительнаяТаблица.Псевдоним + " + |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " ") + " + | И НЕ " + ДополнительнаяТаблица.Псевдоним + ".Ссылка В (&СсылкиНаОбъекты)"; + СоединенияВПамяти = СоединенияВПамяти + " + |ЛЕВОЕ СОЕДИНЕНИЕ " + ДополнительноеИмя + " КАК " + ДополнительнаяТаблица.Псевдоним + " + |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " "); + КонецЕсли; + КонецЕсли; Если СоединенияИПоля = Неопределено Тогда Продолжить; КонецЕсли; Соединения = Соединения + СоединенияИПоля.Соединения; + Если Контекст.ЭтоСсылочныйТип Тогда + СоединенияВБазеДанных = СоединенияВБазеДанных + СоединенияИПоля.Соединения; + СоединенияВПамяти = СоединенияВПамяти + СоединенияИПоля.Соединения; + КонецЕсли; Условие = Условие + ?(Условие = "", "", " |ИЛИ ") + ДополнительнаяТаблица.ПолеПроверкиСоединения + " ЕСТЬ НЕ NULL"; ПоляВыбора = ПоляВыбора + СоединенияИПоля.Поля; @@ -28690,6 +30552,34 @@ | ТекущаяСсылка" + ПоляУпорядочения + " |ИТОГИ ПО | ТекущаяСсылка"; + Если СоединенияВПамяти <> СоединенияВБазеДанных Тогда + // АПК:96-выкл - №434 Использование ОБЪЕДИНИТЬ допустимо, так как + // строки не должны повторятся и объем данных небольшой. + ТекстЗапросаВПамяти = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТекущийСписок.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(ПоляВыбора, " ") + " + |ИЗ + | &ТекущийСписок КАК ТекущийСписок" + ТекстСОтступом(СоединенияВБазеДанных, " ") + " + |ГДЕ + | ТекущийСписок.Ссылка В (&СсылкиНаОбъекты) + | И " + ТекстСОтступом(Условие, " ") + " + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТекущийСписок.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(ПоляВыбора, " ") + " + |ИЗ + | &ТекущийСписок КАК ТекущийСписок" + ТекстСОтступом(СоединенияВПамяти, " ") + " + |ГДЕ + | ТекущийСписок.Ссылка В (&СсылкиНаОбъекты) + | И " + ТекстСОтступом(Условие, " ") + " + | + |УПОРЯДОЧИТЬ ПО + | ТекущаяСсылка" + ПоляУпорядочения + " + |ИТОГИ ПО + | ТекущаяСсылка"; + // АПК:96-вкл. + КонецЕсли; Иначе ТекстЗапроса = "ВЫБРАТЬ @@ -28707,6 +30597,8 @@ КонецЕсли; Контекст.ЧастиЗапросаЗначенийИзОбъектов.Добавить(ТекстЗапроса); + Контекст.ЧастиЗапросаЗначенийИзОбъектовВПамяти.Добавить( + ?(ЗначениеЗаполнено(ТекстЗапросаВПамяти), ТекстЗапросаВПамяти, ТекстЗапроса)); // Запрос ключей доступа по ведущим ключам для обновления пользователей и групп доступа, которым они разрешены. ДобавитьУсловиеОтбораПоВедущимКлючамДоступа(Контекст, ГруппаПолей, , НомерТабличнойЧастиКлюча); @@ -28848,9 +30740,6 @@ // Для процедуры ДобавитьЗаполнениеШапкиКлюча, ДобавитьЗаполнениеТабличнойЧастиКлюча. Процедура ДобавитьУсловиеОтбораПоВедущимКлючамДоступа(Контекст, ГруппаПолей, НомерШапки = 0, НомерТабличнойЧастиКлюча = 0) - СоединенияИПоля = СоединенияИПоляПоТаблицам(ГруппаПолей, Ложь, - НомерШапки, Истина).Получить("ТекущийСписок"); - УсловиеОтбора = ""; НомерРеквизита = ?(НомерШапки = 0, 0, 5); @@ -29282,15 +31171,21 @@ #Область ПреобразованиеТекстовОграниченийВСтруктуры -// См. УправлениеДоступом.РазобранноеОграничение. +// См. также УправлениеДоступом.РазобранноеОграничение. +// +// Возвращаемое значение: +// Структура: +// * ПоляТаблиц - см. НовыеПоляТаблиц +// * ВнутренниеДанные - см. НовыеВнутренниеДанные +// Функция РазобранноеОграничение(ОсновнаяТаблица, ТекстОграничения) Экспорт - ВнутренниеДанные = Новый Структура; + ВнутренниеДанные = НовыеВнутренниеДанные(); ВнутренниеДанные.Вставить("ОсновнаяТаблица", ОсновнаяТаблица); ВнутренниеДанные.Вставить("ТекстОграничения", СокрЛП(ТекстОграничения)); ВнутренниеДанные.Вставить("СинтаксисЯзыка", УправлениеДоступомСлужебныйПовтИсп.СинтаксисЯзыка()); - ВнутренниеДанные.Вставить("ПоляТаблиц", Новый Соответствие); + ВнутренниеДанные.Вставить("ПоляТаблиц", НовыеПоляТаблиц()); ВнутренниеДанные.Вставить("Псевдонимы", Новый Соответствие); ВнутренниеДанные.Вставить("ПоляКлючаДоступа", Новый Массив); @@ -29306,13 +31201,164 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * ОсновнаяТаблица - Строка - таблица, которая ограничивается. +// * ТекстОграничения - Строка +// * СинтаксисЯзыка - см. СинтаксисЯзыка +// * ПоляТаблиц - см. НовыеПоляТаблиц +// * Псевдонимы - Соответствие +// * ПоляКлючаДоступа - Массив из см. НовоеПолеКлючаДоступа +// * ТаблицаНаборовСимволов - см. ТаблицаНаборовСимволов +// * ЧастиОграничения - см. ЧастиОграничения +// +Функция НовыеВнутренниеДанные() + + Возврат Новый Структура; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * ОсновнаяТаблица - Строка - таблица, которая ограничивается. +// * ТекстОграничения - Строка +// * СинтаксисЯзыка - см. СинтаксисЯзыка +// * ПоляТаблиц - см. НовыеПоляТаблиц +// * Псевдонимы - Соответствие +// * ПоляКлючаДоступа - Массив из см. НовоеПолеКлючаДоступа +// * ТаблицаНаборовСимволов - см. ТаблицаНаборовСимволов +// * ЧастиОграничения - см. ЧастиОграничения +// * ЭтоУсловиеСоединения - Булево +// * ЭтоУсловиеКогда - Булево +// * ЭтоЗначениеТогдаИначе - Булево +// * КорневойУзел - см. ОписаниеУзла +// +Функция РасширенныеВнутренниеДанные(ВнутренниеДанные) + + ФиксированныйКонтекст = Новый ФиксированнаяСтруктура(ВнутренниеДанные); + Возврат Новый Структура(ФиксированныйКонтекст); + +КонецФункции + +// Возвращаемое значение: +// Соответствие: +// * Ключ - Строка - имя коллекции объектов метаданных, например, Справочники. +// * Значение - см. НовыйСоставКоллекции +// +Функция НовыеПоляТаблиц() + + Возврат Новый Соответствие; + +КонецФункции + +// Возвращаемое значение: +// Соответствие: +// * Ключ - Строка - имя таблицы (объекта метаданных) в верхнем регистре. +// * Значение - см. НовыеСвойстваТаблицы +// +Функция НовыйСоставКоллекции() + + Возврат Новый Соответствие; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * ТаблицаСуществует - Булево - Ложь (для заполнения Истина, если существует). +// * ЭтоОсновнаяТаблица - Булево +// * Источники - Массив +// * ПервоеПоле - Неопределено +// * Поля - Соответствие: +// ** Ключ - Строка - имя реквизита в верхнем регистре, в том числе через точки, +// например, "ВЛАДЕЛЕЦ.ОРГАНИЗАЦИЯ", "ТОВАРЫ.НОМЕНКЛАТУРА". +// ** Значение - см. НовыеСвойстваПоля +// * Предопределенные - Соответствие: +// ** Ключ - Строка - имя предопределенного элемента. +// ** Значение - см. НовыеСвойстваПредопределенного +// * Расширения - Соответствие: +// ** Ключ - Строка - имя третьего имени таблицы, например, имя табличной части. +// ** Значение - см. НовыеСвойстваРасширения +// +Функция НовыеСвойстваТаблицы() + + Возврат Новый Структура; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * ПолеСОшибкой - Число - 0 (для заполнения, если поле содержит ошибку, +// если 1, то ошибка в имени первой части поля, +// если 2, то ошибка в имени второй части поля, т.е. после первой точки). +// * ВидОшибки - Строка - "НеНайдено", "ТабличнаяЧастьБезПоля", +// "ТабличнаяЧастьПослеТочки". +// * Коллекция - Строка - пустая строка (для заполнения, если первая часть +// поля существует, т.е. часть поля до первой точки). Варианты: "Реквизиты", +// "ТабличныеЧасти", "СтандартныеРеквизиты", "СтандартныеТабличныеЧасти", +// "Измерения", "Ресурсы", "Графы", "ПризнакиУчета", "ПризнакиУчетаСубконто", +// "РеквизитыАдресации", "СпециальныеПоля". Специальные поля - это +// "Значение" - у таблиц "Константа.*", +// "Регистратор" и "Период" - у таблиц "Последовательность.*", +// "ОбъектПерерасчета", "ВидРасчета" у таблиц "РегистрРасчета.<Имя>.<ИмяПерерасчета>". +// Поля после первой точки могут относится только к коллекциям: "Реквизиты", +// "СтандартныеРеквизиты", "ПризнакиУчета", "РеквизитыАдресации". Для этих +// частей имени поля не требуется уточнять коллекцию. +// * СодержитТипы - Соответствие: +// ** Ключ - Строка - полное имя ссылочной таблицы в верхнем регистре. +// ** Значение - Структура: +// *** ИмяТипа - Строка - имя типа, наличие которого нужно проверить. +// *** СодержитТип - Булево - Ложь (для заполнения Истина, +// если у поля последнего поля есть тип). +// * ПервыйИсточник - Структура: +// ** Ключ - СтрокаТаблицыЗначений - строка-источник первого поля. +// ** Значение - Строка - таблица +// +Функция НовыеСвойстваПоля() + + Возврат Новый Структура; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * ИмяСуществует - Булево - Ложь (для заполнения Истина, если предопределенный есть). +// * Источники - Массив +// +Функция НовыеСвойстваПредопределенного() + + Возврат Новый Структура; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * ТаблицаСуществует - Булево - Ложь (для заполнения Истина, если существует). +// * Источники - Массив +// * ПервоеПоле - Неопределено +// * Поля - Соответствие: +// ** Ключ - Строка - имя реквизита в верхнем регистре, в том числе через точки, +// например, "ВЛАДЕЛЕЦ.ОРГАНИЗАЦИЯ", "ТОВАРЫ.НОМЕНКЛАТУРА". +// ** Значение - см. НовыеСвойстваПоля +// +Функция НовыеСвойстваРасширения() + + Возврат Новый Структура; + +КонецФункции + + // См. УправлениеДоступом.СтруктураОграничения. // // Параметры: -// РазобранноеОграничение - см. УправлениеДоступом.СтруктураОграничения.РазобранноеОграничение +// РазобранноеОграничение - см. РазобранноеОграничение // // Возвращаемое значение: -// См. УправлениеДоступом.СтруктураОграничения +// Структура: +// * ОписаниеОшибок - см. ОписаниеОшибок +// * ДополнительныеТаблицы - Массив из см. НовоеОписаниеСоединения +// * ПсевдонимОсновнойТаблицы - Строка - заполнено, если указаны дополнительные таблицы. +// * ОграничениеЧтения - см. ОписаниеУзла +// * ОграничениеИзменения - см. ОписаниеУзла // Функция СтруктураОграничения(РазобранноеОграничение) Экспорт @@ -29322,12 +31368,7 @@ ВнутренниеДанные); // Заполнение найденных ошибок. - ОписаниеОшибок = Новый Структура; - ОписаниеОшибок.Вставить("ЕстьОшибки", Ложь); - ОписаниеОшибок.Вставить("ТекстОшибок", ""); - ОписаниеОшибок.Вставить("Ограничение", ""); - ОписаниеОшибок.Вставить("Ошибки", Новый Массив); - ОписаниеОшибок.Вставить("Дополнение", ""); + ОписаниеОшибок = ОписаниеОшибок(); Таблица = ВнутренниеДанные.ТаблицаНаборовСимволов; ОтборСтрокБезОшибок = Новый Структура("ТекстОшибки", ""); @@ -29384,6 +31425,40 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * ЕстьОшибки - Булево +// * ТекстОшибок - Строка +// * Ограничение - Строка +// * Ошибки - Массив Из см. СвойстваОшибки +// * Дополнение - Строка +// +Функция ОписаниеОшибок() + + ОписаниеОшибок = Новый Структура; + ОписаниеОшибок.Вставить("ЕстьОшибки", Ложь); + ОписаниеОшибок.Вставить("ТекстОшибок", ""); + ОписаниеОшибок.Вставить("Ограничение", ""); + ОписаниеОшибок.Вставить("Ошибки", Новый Массив); + ОписаниеОшибок.Вставить("Дополнение", ""); + + Возврат ОписаниеОшибок; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * НомерСтроки - Число - номер строки текста ограничения, в которой найдена ошибка. +// * ПозицияВСтроке - Число - позиция в строке текста ограничения, в которой найдена ошибка. +// * ТекстОшибки - Строка - описание ошибки. +// * СтрокаОшибки - Строка - строка текста ограничения, в которой найдена ошибка. +// +Функция СвойстваОшибки() + + Возврат Новый Структура; + +КонецФункции + // Формирует полный текст ошибок описания ограничения доступа с дополнением, // который можно указать, как текст для вызова исключения. // @@ -29501,7 +31576,7 @@ СтрокаОшибки = Лев(СтрокаОшибки, Координаты.ПозицияВСтроке - 1) + "<>" + Сред(СтрокаОшибки, Координаты.ПозицияВСтроке); - Ошибка = Новый Структура; + Ошибка = СвойстваОшибки(); Ошибка.Вставить("НомерСтроки", Координаты.НомерСтроки); Ошибка.Вставить("ПозицияВСтроке", Координаты.ПозицияВСтроке); Ошибка.Вставить("ТекстОшибки", Строка.ТекстОшибки); @@ -29655,7 +31730,7 @@ // ТекстОграничения - Строка - текст ограничения доступа. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: +// ТаблицаЗначений: // * Символы - Строка - символ, пара символов или слово. // * Позиция - Число - позиция символов в тексте ограничения. // * Вид - Строка - "КлючевоеСлово", "Операция", "Имя", "Разделитель", @@ -29812,7 +31887,7 @@ НаборСимволов, ПозицияНабораСимволов, СинтаксисЯзыка) СтрокаСимволов = СтрСоединить(НаборСимволов); - СвойстваСлова = СинтаксисЯзыка.СловаЯзыка.Получить(ВРег(СтрокаСимволов)); + СвойстваСлова = СинтаксисЯзыка.СловаЯзыка.Получить(ВРег(СтрокаСимволов)); // См. СвойстваСлова НоваяСтрока = Таблица.Добавить(); НоваяСтрока.Символы = СтрокаСимволов; @@ -29912,6 +31987,15 @@ КонецПроцедуры // Для функции РазобранноеОграничение и косвенно для многих других. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * СимволыЯзыка - см. СимволыЯзыка +// * СимволыЦифр - см. СимволыЦифр +// * ОперацииЯзыка - см. ОперацииЯзыка +// * СловаЯзыка - см. СловаЯзыка +// * ТипыТаблиц - см. ТипыТаблиц +// Функция СинтаксисЯзыка() Экспорт СинтаксисЯзыка = Новый Структура; @@ -29926,6 +32010,12 @@ КонецФункции // Для функции СинтаксисЯзыка. +// +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Строка - символ +// * Значение - Строка - вид символа +// Функция СимволыЯзыка() СимволыЯзыка = Новый Соответствие; @@ -29975,6 +32065,12 @@ КонецФункции // Для функции СинтаксисЯзыка. +// +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Строка - символ +// * Значение - Булево - Истина +// Функция СимволыЦифр() СимволыЦифр = Новый Соответствие; @@ -29988,6 +32084,12 @@ КонецФункции // Для функции СинтаксисЯзыка. +// +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Строка - слово на русском и английском языках. +// * Значение - см. СвойстваСлова +// Функция СловаЯзыка() Слова = Новый Соответствие; @@ -30082,6 +32184,12 @@ КонецФункции // Для функции СинтаксисЯзыка. +// +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Строка - слово на русском и английском языках. +// * Значение - см. СвойстваСлова +// Функция ОперацииЯзыка() ОперацииЯзыка = Новый Соответствие; @@ -30107,6 +32215,28 @@ Процедура ДобавитьСловоЯзыка(Слова, ЯзыкРусский, ЯзыкАнглийский, ТипСлова, ВерхнийРегистр = Истина, Приоритет = 0, ЭтоРезерв = Ложь) + СвойстваСлова = СвойстваСлова(ЯзыкРусский, + ЯзыкАнглийский, ТипСлова, ВерхнийРегистр, Приоритет, ЭтоРезерв); + + Слова.Вставить(ВРег(ЯзыкРусский), СвойстваСлова); + Слова.Вставить(ВРег(ЯзыкАнглийский), СвойстваСлова); + +КонецПроцедуры + +// Для процедуры ДобавитьСловоЯзыка. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * Идентификатор - Строка - слово языка на языке конфигурации (русском или английском). +// * ЯзыкРусский - Строка - слово языка на русском языке. +// * ЯзыкАнглийский - Строка - слово языка на английском языке. +// * Тип - Строка - имя типа слова. +// * ВерхнийРегистр - Булево +// * Приоритет - Число +// * ЭтоРезерв - Булево +// +Функция СвойстваСлова(ЯзыкРусский, ЯзыкАнглийский, ТипСлова, ВерхнийРегистр, Приоритет, ЭтоРезерв) + СвойстваСлова = Новый Структура; СвойстваСлова.Вставить("Идентификатор", ЯзыкРусский); СвойстваСлова.Вставить("ЯзыкРусский", ЯзыкРусский); @@ -30116,14 +32246,21 @@ СвойстваСлова.Вставить("Приоритет", Приоритет); СвойстваСлова.Вставить("ЭтоРезерв", ЭтоРезерв); - СвойстваСлова = Новый ФиксированнаяСтруктура(СвойстваСлова); + Возврат Новый ФиксированнаяСтруктура(СвойстваСлова); - Слова.Вставить(ВРег(ЯзыкРусский), СвойстваСлова); - Слова.Вставить(ВРег(ЯзыкАнглийский), СвойстваСлова); - -КонецПроцедуры +КонецФункции // Для функции СинтаксисЯзыка. +// +// Возвращаемое значение: +// Структура: +// * ПоИменам - Соответствие: +// ** Ключ - Строка - имя типа таблиц на русском и на английском языках. +// ** Значение - см. СвойстваТипаТаблиц +// * ПоКоллекциям - Соответствие: +// ** Ключ - Строка - имя коллекции на языке конфигурации (русском или английском). +// ** Значение - см. СвойстваТипаТаблиц +// Функция ТипыТаблиц() ТипыТаблиц = Новый Структура; @@ -30225,11 +32362,11 @@ ИменаТиповТаблиц = "Справочник,ПланВидовХарактеристик,ПланСчетов,ПланВидовРасчета"; ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ИмяПредопределенныхДанных", "PredefinedDataName", "Запрещено"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Константа", "Значение", "Value", "Разрешено"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Последовательность", "Регистратор", "Recorder", "Разрешено"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Последовательность", "Период", "Period", "Разрешено"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, "ЖурналДокументов", "Тип", "Type", "Недопустимо"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Перечисление", "Порядок", "Order", "Запрещено"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Константа", "Значение", "Value", "Разрешено"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Последовательность", "Регистратор", "Recorder", "Разрешено"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Последовательность", "Период", "Period", "Разрешено"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "ЖурналДокументов", "Тип", "Type", "Недопустимо"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Перечисление", "Порядок", "Order", "Запрещено"); Возврат ТипыТаблиц; @@ -30238,10 +32375,63 @@ // Для функции ТипыТаблиц. Процедура ДобавитьТипТаблиц(ТипыТаблиц, ЯзыкРусский, ЯзыкАнглийский, ИмяКоллекции) - // Свойство "Использование" для таблиц. - // "Разрешено" - можно использовать без ограничений. - // "Недопустимо" - не может использоваться в ограничении доступа платформы 1С:Предприятия. - // "Запрещено" - запрещено присоединять, как дополнительную таблицу в ограничении доступа БСП. + СвойстваТипаТаблиц = СвойстваТипаТаблиц(ЯзыкРусский, ЯзыкАнглийский, ИмяКоллекции); + + ТипыТаблиц.ПоИменам.Вставить(ВРег(ЯзыкРусский), СвойстваТипаТаблиц); + ТипыТаблиц.ПоИменам.Вставить(ВРег(ЯзыкАнглийский), СвойстваТипаТаблиц); + + Если ЗначениеЗаполнено(ИмяКоллекции) Тогда + ТипыТаблиц.ПоКоллекциям.Вставить(ИмяКоллекции, СвойстваТипаТаблиц); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ДобавитьСловоЯзыка. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * ИмяКоллекции - Строка - имя коллекции на языке конфигурации (русском или английском). +// * ЯзыкРусский - Строка - имя типа таблиц на русском языке. +// * ЯзыкАнглийский - Строка - имя типа таблиц на английском языке. +// * ЭтоСсылочныйТип - Булево +// * ЕстьОграничение - Булево +// * ЕстьПредопределенные - Булево +// * КоллекцииПолей - Соответствие: +// ** Ключ - Строка - имя коллекции полей на языке конфигурации (русском или английском). +// ** Значение - Строка - +// "Разрешены" - можно использовать без ограничений. +// "Недопустимы" - нельзя использовать в ограничении доступа платформы 1С:Предприятия. +// +// * КоллекцииТабличныхЧастей - Соответствие: +// ** Ключ - Строка - имя коллекции табличных частей на языке конфигурации (русском или английском). +// ** Значение - Строка - +// "Разрешены" - можно использовать без ограничений. +// "Недопустимы" - нельзя использовать в ограничении доступа платформы 1С:Предприятия. +// +// * ОбщиеРеквизиты - Строка - +// "Разрешены" - можно использовать без ограничений. +// "Недопустимы" - нельзя использовать в ограничении доступа платформы 1С:Предприятия. +// "Отсутствуют" - не существуют у объекта метаданных. +// +// * ПризнакиУчетаСубконто - Строка - +// "Разрешены" - можно использовать без ограничений. +// "Недопустимы" - нельзя использовать в ограничении доступа платформы 1С:Предприятия. +// "Отсутствуют" - не существуют у объекта метаданных. +// +// * УточнениеПолей - Соответствие: +// ** Ключ - Строка - имя поля таблиц на русском и на английском языках. +// ** Значение - см. УточнениеПоля +// +// * УточнениеТаблиц - Соответствие: +// ** Ключ - Строка - имя расширения таблиц на русском и на английском языках. +// ** Значение - см. УточнениеТаблиц +// +// * Использование - Строка - +// "Разрешено" - можно использовать без ограничений. +// "Недопустимо" - нельзя использовать в ограничении доступа платформы 1С:Предприятия. +// "Запрещено" - запрещено присоединять, как дополнительную таблицу в ограничении доступа БСП. +// +Функция СвойстваТипаТаблиц(ЯзыкРусский, ЯзыкАнглийский, ИмяКоллекции) СвойстваТипаТаблиц = Новый Структура; СвойстваТипаТаблиц.Вставить("ИмяКоллекции", ИмяКоллекции); @@ -30258,14 +32448,9 @@ СвойстваТипаТаблиц.Вставить("УточнениеТаблиц", Новый Соответствие); СвойстваТипаТаблиц.Вставить("Использование", "Запрещено"); - ТипыТаблиц.ПоИменам.Вставить(ВРег(ЯзыкРусский), СвойстваТипаТаблиц); - ТипыТаблиц.ПоИменам.Вставить(ВРег(ЯзыкАнглийский), СвойстваТипаТаблиц); + Возврат СвойстваТипаТаблиц; - Если ЗначениеЗаполнено(ИмяКоллекции) Тогда - ТипыТаблиц.ПоКоллекциям.Вставить(ИмяКоллекции, СвойстваТипаТаблиц); - КонецЕсли; - -КонецПроцедуры +КонецФункции // Для функции ТипыТаблиц. Процедура УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, Свойство, Значение) @@ -30300,17 +32485,8 @@ // Для функции ТипыТаблиц. Процедура ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, ЯзыкРусский, ЯзыкАнглийский, Использование) - // Использование: - // "Разрешено" - можно использовать без ограничений. - // "Недопустимо" - не может использоваться в ограничении доступа платформы 1С:Предприятия. - // "Запрещено" - запрещено использовать в ограничении доступа БСП. - Для Каждого ИмяТипаТаблицы Из СтрРазделить(ИменаТиповТаблиц, ",", Ложь) Цикл - УточнениеПоля = Новый Структура; - УточнениеПоля.Вставить("ЯзыкРусский", ЯзыкРусский); - УточнениеПоля.Вставить("ЯзыкАнглийский", ЯзыкАнглийский); - УточнениеПоля.Вставить("Использование", Использование); - + УточнениеПоля = УточнениеПоля(ЯзыкРусский, ЯзыкАнглийский, Использование); СвойстваТипаТаблиц = ТипыТаблиц.ПоИменам.Получить(ВРег(ИмяТипаТаблицы)); СвойстваТипаТаблиц.УточнениеПолей.Вставить(ВРег(ЯзыкРусский), УточнениеПоля); @@ -30319,20 +32495,33 @@ КонецПроцедуры +// Для процедуры ДобавитьПолеТипаТаблиц. +// +// Возвращаемое значение: +// Структура: +// * ЯзыкРусский - Строка - имя поля таблиц на русском языке. +// * ЯзыкАнглийский - Строка - имя поля таблиц на английском языке. +// * Использование - Строка - +// "Разрешено" - можно использовать без ограничений. +// "Недопустимо" - нельзя использовать в ограничении доступа платформы 1С:Предприятия. +// "Запрещено" - запрещено использовать в ограничении доступа БСП. +// +Функция УточнениеПоля(ЯзыкРусский, ЯзыкАнглийский, Использование) + + УточнениеПоля = Новый Структура; + УточнениеПоля.Вставить("ЯзыкРусский", ЯзыкРусский); + УточнениеПоля.Вставить("ЯзыкАнглийский", ЯзыкАнглийский); + УточнениеПоля.Вставить("Использование", Использование); + + Возврат УточнениеПоля; + +КонецФункции + // Для функции ТипыТаблиц. Процедура ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, ЯзыкРусский, ЯзыкАнглийский, Использование) - // Использование: - // "Разрешено" - можно использовать без ограничений. - // "Недопустимо" - не может использоваться в ограничении доступа платформы 1С:Предприятия. - // "Запрещено" - запрещено использовать в ограничении доступа БСП. - Для Каждого ИмяТипаТаблицы Из СтрРазделить(ИменаТиповТаблиц, ",", Ложь) Цикл - УточнениеТаблиц = Новый Структура; - УточнениеТаблиц.Вставить("ЯзыкРусский", ЯзыкРусский); - УточнениеТаблиц.Вставить("ЯзыкАнглийский", ЯзыкАнглийский); - УточнениеТаблиц.Вставить("Использование", Использование); - + УточнениеТаблиц = УточнениеТаблиц(ЯзыкРусский, ЯзыкАнглийский, Использование); СвойстваТипаТаблиц = ТипыТаблиц.ПоИменам.Получить(ВРег(ИмяТипаТаблицы)); СвойстваТипаТаблиц.УточнениеТаблиц.Вставить(ВРег(ЯзыкРусский), УточнениеТаблиц); @@ -30341,11 +32530,41 @@ КонецПроцедуры +// Для процедуры ДобавитьПолеТипаТаблиц. +// +// Возвращаемое значение: +// Структура: +// * ЯзыкРусский - Строка - имя расширения таблиц на русском языке. +// * ЯзыкАнглийский - Строка - имя расширения таблиц на английском языке. +// * Использование - Строка - +// "Разрешено" - можно использовать без ограничений. +// "Недопустимо" - нельзя использовать в ограничении доступа платформы 1С:Предприятия. +// "Запрещено" - запрещено использовать в ограничении доступа БСП. +// +Функция УточнениеТаблиц(ЯзыкРусский, ЯзыкАнглийский, Использование) + + УточнениеТаблиц = Новый Структура; + УточнениеТаблиц.Вставить("ЯзыкРусский", ЯзыкРусский); + УточнениеТаблиц.Вставить("ЯзыкАнглийский", ЯзыкАнглийский); + УточнениеТаблиц.Вставить("Использование", Использование); + + Возврат УточнениеТаблиц; + +КонецФункции + #КонецОбласти #Область СинтаксическийАнализ // Для функции РазобранноеОграничение. +// +// Возвращаемое значение: +// Структура: +// * ДополнительныеТаблицы - Массив из см. НовоеОписаниеСоединения +// * ПсевдонимОсновнойТаблицы - Строка +// * ОграничениеЧтения - Структура +// * ОграничениеИзменения - Структура +// Функция ЧастиОграничения(ВнутренниеДанные) ЧастиОграничения = Новый Структура; @@ -30372,7 +32591,7 @@ КонецЦикла; ИндексыСтрокРазделителя.Добавить(ТаблицаНаборовСимволов.Количество() - 1); - СвойстваЧастей = Новый Массив; + СвойстваЧастей = Новый Массив; // Массив Из см. НовыеСвойстваЧасти ИндексСтроки = 0; Для Каждого ИндексСтрокиРазделителя Из ИндексыСтрокРазделителя Цикл СтрокиЧасти = Новый Массив; @@ -30387,7 +32606,7 @@ Если СтрокиЧасти.Количество() = 0 Тогда СтрокиЧасти.Добавить(СтрокаРазделителя); КонецЕсли; - СвойстваЧасти = Новый Структура; + СвойстваЧасти = НовыеСвойстваЧасти(); СвойстваЧасти.Вставить("Строки", СтрокиЧасти); СвойстваЧасти.Вставить("СтрокаРазделителя", СтрокаРазделителя); СвойстваЧастей.Добавить(СвойстваЧасти); @@ -30412,7 +32631,7 @@ Если СвойстваЧасти1.Имя = "" Тогда УстановитьОшибкуНачалаЧасти(СвойстваЧасти1, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, - НСтр("ru = 'В начале первой части текста ограничения не найдено ни одно из ключевых слов + НСтр("ru = 'В начале первой части текста ограничения нет ни одного из ключевых слов |""%1"", ""%2"", ""%3""'"), "РазрешитьЧтениеИзменение,РазрешитьЧтение,ПрисоединитьДополнительныеТаблицы")); Возврат ЧастиОграничения; @@ -30453,12 +32672,12 @@ Если СвойстваЧасти2.Имя = "" Тогда Если СвойстваЧасти1.Имя = "РазрешитьЧтение" Тогда УстановитьОшибкуНачалаЧасти(СвойстваЧасти2, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, - НСтр("ru = 'В начале второй части текста ограничения не найдено - |ключевое слово ""%1""'"), + НСтр("ru = 'В начале второй части текста ограничения нет + |ключевого слова ""%1""'"), "РазрешитьИзменениеЕслиРазрешеноЧтение")); Иначе // СвойстваЧасти1.Имя = "ПрисоединитьДополнительныеТаблицы". УстановитьОшибкуНачалаЧасти(СвойстваЧасти2, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, - НСтр("ru = 'В начале второй части текста ограничения не найдено ни одно из ключевых слов + НСтр("ru = 'В начале второй части текста ограничения нет ни одного из ключевых слов |""%1"", ""%2""'"), "РазрешитьЧтениеИзменение,РазрешитьЧтение")); КонецЕсли; @@ -30503,8 +32722,8 @@ Если СвойстваЧасти3.Имя = "" Тогда УстановитьОшибкуНачалаЧасти(СвойстваЧасти3, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, - НСтр("ru = 'В начале третьей части текста ограничения не найдено - |ключевое слово ""%1""'"), + НСтр("ru = 'В начале третьей части текста ограничения нет + |ключевого слово ""%1""'"), "РазрешитьИзменениеЕслиРазрешеноЧтение")); Возврат ЧастиОграничения; @@ -30522,6 +32741,147 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * Строки - Массив из СтрокаТаблицыЗначений +// * СтрокаРазделителя - СтрокаТаблицыЗначений +// * Имя - Строка +// * Представление - Строка +// +Функция НовыеСвойстваЧасти() + + Возврат Новый Структура; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * Таблица - Строка +// * Псевдоним - Строка +// * УсловиеСоединения - см. ОписаниеУзла +// * ПсевдонимыТребуемыхТаблиц - Массив Из Строка +// * ПоляУсловияСоединения - Массив Из см. ПараПолейУсловияСоединения +// * ПолеПроверкиСоединения - Строка +// * ТекстУсловияСоединения - Строка +// +Функция НовоеОписаниеСоединения() + + Возврат Новый Структура; + +КонецФункции + + +// Возвращаемое значение: +// Структура: +// * Источник - СтрокаТаблицыЗначений +// +// * Узел - Строка - одна из строк "Поле", "Значение", "Константа", +// "И", "Или", "Не", "=", "<>", "В", "ЕстьNull", "Тип", "ТипЗначения", "Выбор", +// "ЗначениеРазрешено", "ЭтоАвторизованныйПользователь", +// "ЧтениеОбъектаРазрешено", "ИзменениеОбъектаРазрешено", +// "ЧтениеСпискаРазрешено", "ИзменениеСпискаРазрешено", +// "ДляВсехСтрок", "ДляОднойИзСтрок". +// +// Свойства узла Поле. +// * Имя - Строка - имя поля, например, "Организация" или "ОсновнаяОрганизация". +// * Таблица - Строка - имя таблицы этого поля (или пустая строка для основной таблицы). +// * Псевдоним - Строка - имя псевдонима присоединяемой таблицы этого поля (или пустая строка для основной таблицы), +// например, "РегистрСведенийНастройки" для поля "ОсновнаяОрганизация". +// * Выразить - Строка - имя таблицы (если используется), например, для описания поля в виде: +// "ВЫРАЗИТЬ(ВЫРАЗИТЬ(Владелец КАК Справочник.Файлы).ВладелецФайла КАК Справочник.Организации).Ссылка". +// * Вложение - Структура - узел Поле, содержащий вложенное действие ВЫРАЗИТЬ (с или без ЕстьNull). +// - Неопределено - нет вложенного поля. +// * ЕстьNull - Структура - узел Значение Или Константа, например, для описания выражения вида +// "ЕстьNULL(Владелец, Значение(Справочник.Файлы.ПустаяСсылка))". +// - Неопределено - если ЕстьNull не используется (в том числе, когда свойство Вложение заполнено). +// * ИмяИсточник - СтрокаТаблицыЗначений +// - Неопределено +// * ВыразитьИсточник - СтрокаТаблицыЗначений +// - Неопределено +// * ЕстьNullИсточник - СтрокаТаблицыЗначений +// - Неопределено +// +// Свойства узлов Значение и Тип. +// * Имя - Строка - имя значения, например, "Справочник.Организации.Основная", +// "Справочник.Организации.ПустаяСсылка", +// имя таблицы, например, "Справочник.Организации". +// +// Свойства узла Константа. +// * Значение - Булево +// - Число +// - Строка +// - Неопределено - Ложь, Истина, произвольное +// целое число до 16 разрядов или произвольная строка до 150 символов. +// +// Свойства узлов И, Или (любой узел, кроме Значение и Константа). +// * Аргументы - Массив из см. ОписаниеУзла +// +// Свойства узла Не (любой узел, кроме Значение и Константа). +// * Аргумент - см. ОписаниеУзла +// +// * Имя - Строка - заглушка к предыдущей строке (для определения типа в EDT) +// +// Свойства узлов =, <> (ПервыйАргумент - узел Поле, +// ВторойАргумент - узел Значение, Константа, а узел Поле только для условия соединения). +// * ПервыйАргумент - см. ОписаниеУзла +// * ВторойАргумент - см. ОписаниеУзла +// +// * Имя - Строка - заглушка к предыдущей строке (для определения типа в EDT) +// +// Свойства узла В (Искомое - узел Поле, Значения - узлы Значение и/или Константа). +// * Искомое - см. ОписаниеУзла +// * Значения - Массив из см. ОписаниеУзла +// +// Свойства узла ЕстьNull (узел Поле - выражение вида "<Поле> ЕСТЬ NULL"). +// * Аргумент - см. ОписаниеУзла +// +// * Имя - Строка - заглушка к предыдущей строке (для определения типа в EDT) +// +// Свойства узла ТипЗначения (узел Поле). +// * Аргумент - см. ОписаниеУзла +// +// * Имя - Строка - заглушка к предыдущей строке (для определения типа в EDT) +// +// Свойства узла Выбор +// В свойстве Выбор +// узел Поле +// Неопределено - условия содержат выражение, а не узел Значение +// В свойстве Когда +// Условие - узел Значение, если свойство Выбор указано, в противном случае +// узлы И, Или, Не, =, <>, В (распространяется на вложенное содержимое) +// Значение - узел, кроме Выбор +// В свойстве Иначе +// узел, кроме ВЫБОР и Значение (Поле и Константа может быть только типа Булево). +// * Выбор - см. ОписаниеУзла +// * Когда - Массив из Структура: +// ** Условие - см. ОписаниеУзла +// ** Значение - см. ОписаниеУзла +// * Иначе - см. ОписаниеУзла +// +// * Имя - Строка - заглушка к предыдущей строке (для определения типа в EDT) +// +// Свойства узлов ЗначениеРазрешено, ЭтоАвторизованныйПользователь, +// ЧтениеОбъектаРазрешено, ИзменениеОбъектаРазрешено, +// ЧтениеСпискаРазрешено, ИзменениеСпискаРазрешено. +// В свойстве Поле - узел Поле. +// * Поле - см. ОписаниеУзла +// * Типы - Массив Из Строка - полное имя таблицы +// * ПроверятьТипыКромеУказанных - Булево - если Истина, то все типы свойства Поле, +// кроме указанных в свойстве Типы. +// * УточненияСравнения - Соответствие: +// ** Ключ - Строка - уточняемое значение "Неопределено", "Null", "ПустаяСсылка", +// <полное имя таблицы>, "Число", "Строка", "Дата", "Булево". +// ** Значение - Строка - результат "Ложь", "Истина". +// +// Свойства узлов ДляВсехСтрок, ДляОднойИзСтрок (любой узел). +// * Аргумент - см. ОписаниеУзла. +// +Функция ОписаниеУзла() + + Возврат Новый Структура; + +КонецФункции + // Для функции ЧастиОграничения. Процедура УстановитьЧастьОграничения(ЧастиОграничения, СвойстваЧасти) @@ -30607,7 +32967,7 @@ СвойстваЧасти.Вставить("ПсевдонимОсновнойТаблицы", ""); РазобратьДополнительныеТаблицы(СвойстваЧасти, ВнутренниеДанные); Иначе - СвойстваЧасти.Вставить("Состав", Новый Структура); + СвойстваЧасти.Вставить("Состав", ОписаниеУзла()); РазобратьУсловиеОграничения(СвойстваЧасти, ВнутренниеДанные); КонецЕсли; @@ -30624,8 +32984,8 @@ УстановитьОшибкуНачалаЧасти( ?(СтрокиЧасти.Количество() < 3, СвойстваЧасти.СтрокаРазделителя, СтрокиЧасти[1]), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'После ключевого слова ""%1"" не найдено - |ключевое слово ""%2""'"), + НСтр("ru = 'После ключевого слова ""%1"" нет + |ключевого слово ""%2""'"), СвойстваЧасти.Представление, КлючевоеСловоСУчетомЯзыка("ЭтотСписок", ВнутренниеДанные))); Возврат; @@ -30639,7 +32999,7 @@ УстановитьОшибкуНачалаЧасти( ?(СтрокиЧасти.Количество() < 3, СвойстваЧасти.СтрокаРазделителя, СтрокиЧасти[2]), ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, - НСтр("ru = 'После ключевого слова ""%1"" не найдено ключевое слово ""%2""'"), + НСтр("ru = 'После ключевого слова ""%1"" нет ключевого слово ""%2""'"), "Список,Как")); Возврат; КонецЕсли; @@ -30649,7 +33009,7 @@ УстановитьОшибкуНачалаЧасти( ?(СтрокиЧасти.Количество() < 4, СвойстваЧасти.СтрокаРазделителя, СтрокиЧасти[3]), ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, - НСтр("ru = 'После ключевого слова ""%1"" не найден псевдоним'"), + НСтр("ru = 'После ключевого слова ""%1"" нет псевдонима'"), "Как")); Возврат; КонецЕсли; @@ -30713,7 +33073,7 @@ // Для процедуры РазобратьДополнительныеТаблицы. Процедура РазобратьСоединение(Соединение, СвойстваЧасти, ВнутренниеДанные) - ОписаниеСоединения = Новый Структура; + ОписаниеСоединения = НовоеОписаниеСоединения(); ОписаниеСоединения.Вставить("Таблица", ""); ОписаниеСоединения.Вставить("Псевдоним", ""); ОписаниеСоединения.Вставить("УсловиеСоединения", Неопределено); @@ -30721,7 +33081,7 @@ Если Соединение[0].Вид <> "КлючевоеСлово" Или Соединение[0].Уточнение <> "Левое" Тогда УстановитьОшибкуВнутриЧасти(Соединение, 0, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, - НСтр("ru = 'Не найдено ключевое слово ""%1""'"), "Левое")); + НСтр("ru = 'Нет ключевого слова ""%1""'"), "Левое")); Если Соединение[0].Вид <> "КлючевоеСлово" Или Соединение[0].Уточнение <> "Внутреннее" @@ -30736,7 +33096,7 @@ Или Соединение[1].Уточнение <> "Соединение" Тогда УстановитьОшибкуВнутриЧасти(Соединение, 1, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'После ключевого слова ""%1"" не найдено ключевое слово ""%2""'"), + НСтр("ru = 'После ключевого слова ""%1"" нет ключевого слова ""%2""'"), Соединение[0].Символы, КлючевоеСловоСУчетомЯзыка("Соединение", ВнутренниеДанные))); Возврат; @@ -30746,7 +33106,7 @@ Или Соединение[2].Вид <> "Имя" Тогда УстановитьОшибкуВнутриЧасти(Соединение, 2, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'После ключевого слова ""%1"" не найдено имя таблицы'"), + НСтр("ru = 'После ключевого слова ""%1"" нет имени таблицы'"), Соединение[1].Символы)); Возврат; КонецЕсли; @@ -30757,14 +33117,14 @@ Или Соединение[3].Вид <> "КлючевоеСлово" Или Соединение[3].Уточнение <> "Как" Тогда УстановитьОшибкуВнутриЧасти(Соединение, 3, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, - НСтр("ru = 'После имени таблицы не найдено ключевое слово ""%1""'"), "Как")); + НСтр("ru = 'После имени таблицы нет ключевого слова ""%1""'"), "Как")); Возврат; КонецЕсли; Если Соединение.Количество() < 5 Или Соединение[4].Вид <> "Имя" Тогда УстановитьОшибкуВнутриЧасти(Соединение, 4, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, - НСтр("ru = 'После ключевого слова ""%1"" не найден псевдоним таблицы'"), "Как")); + НСтр("ru = 'После ключевого слова ""%1"" нет псевдонима таблицы'"), "Как")); Возврат; КонецЕсли; @@ -30774,7 +33134,7 @@ Или Соединение[5].Вид <> "КлючевоеСлово" Или Соединение[5].Уточнение <> "По" Тогда УстановитьОшибкуВнутриЧасти(Соединение, 5, ПодставитьКлючевыеСловаВСтроку(ВнутренниеДанные, - НСтр("ru = 'После псевдонима таблицы не найдено ключевое слово ""%1""'"), "По")); + НСтр("ru = 'После псевдонима таблицы нет ключевого слова ""%1""'"), "По")); Возврат; КонецЕсли; @@ -30803,8 +33163,7 @@ ДоступныеУзлы.Вставить("УзлыКогда", ОбщиеУзлы); ДоступныеУзлы.Вставить("УзлыТогдаИначе", ОбщиеУзлы); - ФиксированныйКонтекст = Новый ФиксированнаяСтруктура(ВнутренниеДанные); - Контекст = Новый Структура(ФиксированныйКонтекст); + Контекст = РасширенныеВнутренниеДанные(ВнутренниеДанные); Контекст.Вставить("ЭтоУсловиеСоединения", Истина); Контекст.Вставить("ЭтоУсловиеКогда", Ложь); Контекст.Вставить("ЭтоЗначениеТогдаИначе", Ложь); @@ -30818,6 +33177,20 @@ КонецПроцедуры // Для процедур РазобратьУсловиеСоединения, РазобратьУсловиеОграничения. +// +// Параметры: +// Список - Строка - список имен узлов через запятую. +// ЭтоСписокИсключений - Булево - если Истина, добавить узлы, кроме указанных. +// +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Строка - имя узла +// * Значение - Булево +// - Структура: +// ** Выразить - Булево +// ** Вложение - Булево +// ** ЕстьNull - Булево +// Функция УзлыДляПроверкиДоступности(Список, ЭтоСписокИсключений) Экспорт ВсеУзлы = Новый Соответствие; @@ -30863,6 +33236,13 @@ КонецФункции // Для процедур РазобратьУсловиеСоединения, РазобратьУсловиеОграничения. +// +// Параметры: +// Условие - см. ОписаниеУзла +// ДоступныеУзлы - Структура +// Контекст - см. РасширенныеВнутренниеДанные +// Родитель - см. ОписаниеУзла +// Процедура ОтметитьНекорректныеАргументыИЗапрещенныеУзлы(Условие, ДоступныеУзлы, Контекст, Родитель = Неопределено) Если Не ЗначениеЗаполнено(Условие) Тогда @@ -30887,7 +33267,7 @@ Если Условие.Узел = "Поле" Тогда Если Не Контекст.ЭтоУсловиеСоединения Тогда - ПолеКлючаДоступа = Новый Структура; + ПолеКлючаДоступа = НовоеПолеКлючаДоступа(); ПолеКлючаДоступа.Вставить("Поле", Условие); ПолеКлючаДоступа.Вставить("Чтение", Контекст.Чтение); Контекст.ПоляКлючаДоступа.Добавить(ПолеКлючаДоступа); @@ -30968,13 +33348,15 @@ |а также для типа значения с типом'"); КонецЕсли; Если ОшибкаВПервомАргументе Тогда - УстановитьОшибкуВСтроке(Условие.ПервыйАргумент.Источник, + УсловиеПервыйАргумент = Условие.ПервыйАргумент; // См. ОписаниеУзла + УстановитьОшибкуВСтроке(УсловиеПервыйАргумент.Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ТекстОшибки, Условие.Источник.Символы), Истина); КонецЕсли; Если ОшибкаВоВторомАргументе Тогда - УстановитьОшибкуВСтроке(Условие.ВторойАргумент.Источник, + УсловиеВторойАргумент = Условие.ВторойАргумент; // См. ОписаниеУзла + УстановитьОшибкуВСтроке(УсловиеВторойАргумент.Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ТекстОшибки, Условие.Источник.Символы)); КонецЕсли; @@ -31033,7 +33415,7 @@ ОтметитьПовторыТиповСредиПроверяемыхИУточняемых(Условие, Контекст); // Добавление типов, наличие которых нужно проверить у полей. - Поле = Условие.Поле; + Поле = Условие.Поле; // См. ОписаниеУзла Уточнения = Новый Соответствие; Для Каждого УточнениеСравнения Из Условие.УточненияСравнения Цикл Если ТипЗнч(УточнениеСравнения.Ключ) <> Тип("СтрокаТаблицыЗначений") Тогда @@ -31057,6 +33439,18 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Поле - см. ОписаниеУзла +// * Чтение - Булево +// * Родители - Массив из см. ОписаниеУзла +// +Функция НовоеПолеКлючаДоступа() + + Возврат Новый Структура; + +КонецФункции + // Для процедуры ОтметитьНекорректныеАргументыИЗапрещенныеУзлы. Процедура ВыделитьПсевдонимПоля(УзелПоле, Контекст) @@ -31251,8 +33645,8 @@ УстановитьОшибкуНачалаЧасти( ?(СтрокиЧасти.Количество() < 2, СвойстваЧасти.СтрокаРазделителя, СтрокиЧасти[1]), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'После ключевого слова ""%1"" не найдено - |ключевое слово ""%2""'"), + НСтр("ru = 'После ключевого слова ""%1"" нет + |ключевого слова ""%2""'"), СвойстваЧасти.Представление, КлючевоеСловоСУчетомЯзыка("Где", ВнутренниеДанные))); Возврат; @@ -31310,6 +33704,12 @@ КонецПроцедуры // Для процедур РазобратьУсловиеСоединения, РазобратьУсловиеОграничения. +// +// Параметры: +// Условие - Массив Из СтрокаТаблицыЗначений +// Состав - см. ОписаниеУзла +// ВнутренниеДанные - см. НовыеВнутренниеДанные +// Процедура РазобратьУсловие(Условие, Состав, ВнутренниеДанные) ВыраженияВСкобкахВоВложениях = ВыраженияВСкобкахВоВложениях(Условие); @@ -31410,7 +33810,7 @@ ИначеЕсли Строка.Вид = "Разделитель" Тогда Если Строка.Символы = "(" Тогда - НовоеОписание = Неопределено; + НовоеОписание = Неопределено; // См. ОписаниеУзла РазобратьВыражение(Строка.Строки, НовоеОписание, Контекст); ДобавитьАргументФункциюВыборОператор(Контекст, НовоеОписание); Если НовоеОписание <> Неопределено Тогда @@ -31640,7 +34040,7 @@ // Добавляемый соединитель: И, Или, В, Есть и любая операция (=, <>, ...). - Описание = Контекст.Описание; + Описание = Контекст.Описание; // См. ОписаниеУзла Если Описание = Неопределено Тогда Контекст.Описание = НовоеОписание; @@ -31686,7 +34086,9 @@ // Для процедуры ДобавитьСоединитель. Процедура ОбработатьПропущенныйАргументПослеСоединителя(Контекст, ВторойАргумент, ЛогическаяОперация = Истина) - УстановитьОшибкуВСтроке(Контекст.Описание.Источник, + Описание = Контекст.Описание; // См. ОписаниеУзла + + УстановитьОшибкуВСтроке(Описание.Источник, ?(ЛогическаяОперация, НСтр("ru = 'Не указан аргумент после логической операции'"), НСтр("ru = 'Не указан аргумент после операции'")), @@ -31701,9 +34103,10 @@ ПоследнийАргументОписания, НовоеОписание, ПервыйАргументНовогоОписания) Вложения = Контекст.Вложения; + Описание = Контекст.Описание; // См. ОписаниеУзла Если ПоследнийАргументОписания <> Неопределено - И Контекст.Строка.Приоритет >= Контекст.Описание.Источник.Приоритет Тогда + И Контекст.Строка.Приоритет >= Описание.Источник.Приоритет Тогда // Замена аргумента текущего узла на соединитель (случай "А Или Б И ..."). ПервыйАргументНовогоОписания = ПоследнийАргументОписания; @@ -32359,7 +34762,8 @@ Индекс = 1; Пока Строка.Строки[Индекс].Уточнение = "Когда" Цикл ОписаниеКогдаТогда = Новый Структура("Условие, Значение"); - НовоеОписание.Когда.Добавить(ОписаниеКогдаТогда); + НовоеОписаниеКогда = НовоеОписание.Когда; // Массив + НовоеОписаниеКогда.Добавить(ОписаниеКогдаТогда); Когда = Строка.Строки[Индекс]; @@ -32466,7 +34870,7 @@ // Текущий узел: Любой. // Добавляемое описание: Поле, Значение, Константа, Не, Выбор, любая функция. - Описание = Контекст.Описание; + Описание = Контекст.Описание; // См. ОписаниеУзла Если Описание = Неопределено Тогда Контекст.Описание = ДобавляемоеОписание; @@ -32536,6 +34940,10 @@ КонецПроцедуры // Для процедуры РазобратьУсловие. +// +// Возвращаемое значение: +// Массив из СтрокаТаблицыЗначений +// Функция ВыраженияВСкобкахВоВложениях(Строки) Результат = Новый Массив; @@ -32588,7 +34996,8 @@ Или Строка.Тип <> "СловоВыбора" Тогда Если ТекущееВложение.Уточнение = "Выбор" Тогда - ТекущееВложение.Строки[0].Строки.Добавить(Строка); + СтрокиВыбора = ТекущееВложение.Строки[0].Строки; // Массив + СтрокиВыбора.Добавить(Строка); Иначе ТекущееВложение.Строки.Добавить(Строка); Если Строка.Символы = "(" Тогда @@ -32828,7 +35237,8 @@ И ПредыдущаяСтрока.Уточнение = "Выразить" Тогда Строка.Тип = "ДополнениеКВыразить"; - ПредыдущаяСтрока.Строки.Добавить(Строка); + ПредыдущаяСтрокаСтроки = ПредыдущаяСтрока.Строки; // Массив + ПредыдущаяСтрокаСтроки.Добавить(Строка); Индекс = Индекс + 1; Продолжить; Иначе @@ -33112,7 +35522,7 @@ Возврат; КонецЕсли; - СвойстваСлова = Контекст.СинтаксисЯзыка.СловаЯзыка.Получить(ВРег(СвойстваИмени.Расширение)); + СвойстваСлова = Контекст.СинтаксисЯзыка.СловаЯзыка.Получить(ВРег(СвойстваИмени.Расширение)); // См. СвойстваСлова Если Не СвойстваИмени.СвойстваТипаТаблиц.ЕстьПредопределенные И Не СвойстваИмени.ИмяТипа = "Перечисление" @@ -33128,7 +35538,7 @@ СвойстваПредопределенного = Свойства.Предопределенные.Получить(ВРег(СвойстваИмени.Расширение)); Если СвойстваПредопределенного = Неопределено Тогда - СвойстваПредопределенного = Новый Структура; + СвойстваПредопределенного = НовыеСвойстваПредопределенного(); СвойстваПредопределенного.Вставить("ИмяСуществует", Ложь); СвойстваПредопределенного.Вставить("Источники", Новый Массив); Свойства.Предопределенные.Вставить(ВРег(СвойстваИмени.Расширение), СвойстваПредопределенного); @@ -33155,7 +35565,7 @@ Контекст.Вставить("ОшибкаНаПервоеПолеОсновнойТаблицыУстановлена"); УстановитьОшибкуВСтрокеИмениПоля(Контекст, Источник, - НСтр("ru = 'Поле не найдено, так как не найдена таблица ""%1""'"), 0, , + НСтр("ru = 'Поле не существует, так как указана несуществующая таблица ""%1""'"), 0, , Контекст.ОсновнаяТаблица); КонецЕсли; @@ -33166,7 +35576,7 @@ СвойстваПоля = Свойства.Поля.Получить(ВРег(ИмяПоля)); Если СвойстваПоля = Неопределено Тогда - СвойстваПоля = Новый Структура; + СвойстваПоля = НовыеСвойстваПоля(); СвойстваПоля.Вставить("ПолеСОшибкой", 0); СвойстваПоля.Вставить("ВидОшибки", ""); СвойстваПоля.Вставить("Коллекция", ""); @@ -33255,15 +35665,15 @@ ИмяКоллекции = СвойстваИмени.СвойстваТипаТаблиц.ИмяКоллекции; - СвойстваКоллекции = Контекст.ПоляТаблиц.Получить(ИмяКоллекции); - Если СвойстваКоллекции = Неопределено Тогда - СвойстваКоллекции = Новый Соответствие; - Контекст.ПоляТаблиц.Вставить(ИмяКоллекции, СвойстваКоллекции); + СоставКоллекции = Контекст.ПоляТаблиц.Получить(ИмяКоллекции); + Если СоставКоллекции = Неопределено Тогда + СоставКоллекции = НовыйСоставКоллекции(); + Контекст.ПоляТаблиц.Вставить(ИмяКоллекции, СоставКоллекции); КонецЕсли; - Свойства = СвойстваКоллекции.Получить(ВРег(СвойстваИмени.ИмяБезТипа)); + Свойства = СоставКоллекции.Получить(ВРег(СвойстваИмени.ИмяБезТипа)); Если Свойства = Неопределено Тогда - Свойства = Новый Структура; + Свойства = НовыеСвойстваТаблицы(); Свойства.Вставить("ТаблицаСуществует", Ложь); Свойства.Вставить("ЭтоОсновнаяТаблица", СвойстваИмени.ЭтоОсновнаяТаблица); Свойства.Вставить("Источники", Новый Массив); @@ -33273,7 +35683,7 @@ Если СвойстваИмени.ЭтоОсновнаяТаблица И СвойстваИмени.Расширение = Неопределено Тогда Свойства.Вставить("ПервоеПоле"); КонецЕсли; - СвойстваКоллекции.Вставить(ВРег(СвойстваИмени.ИмяБезТипа), Свойства); + СоставКоллекции.Вставить(ВРег(СвойстваИмени.ИмяБезТипа), Свойства); КонецЕсли; Если СвойстваИмени.Расширение = Неопределено Или БезРасширения Тогда @@ -33282,7 +35692,7 @@ СвойстваРасширения = Свойства.Расширения.Получить(ВРег(СвойстваИмени.Расширение)); Если СвойстваРасширения = Неопределено Тогда - СвойстваРасширения = Новый Структура; + СвойстваРасширения = НовыеСвойстваРасширения(); СвойстваРасширения.Вставить("ТаблицаСуществует", Ложь); СвойстваРасширения.Вставить("Источники", Новый Массив); СвойстваРасширения.Вставить("Поля", Новый Соответствие); @@ -33298,6 +35708,7 @@ // Для процедур и функций ЧастиОграничения, РазобратьДополнительныеТаблицы, РазобратьСоединение, // РазобратьУсловиеОграничения, ВыраженияВыборКогдаТогдаВоВложениях. +// Функция ПодставитьКлючевыеСловаВСтроку(Контекст, Строка, СписокСлов, ПараметрОдин = "", ПараметрДва = "", ПараметрТри = "") Слова = СтрРазделить(СписокСлов, ",", Ложь); @@ -33354,7 +35765,7 @@ // Аналогичная процедура реализуется в СППР. // // Параметры: -// РазобранноеОграничение - Структура - возвращается функцией РазобранноеОграничение. +// РазобранноеОграничение - см. РазобранноеОграничение // Процедура ПроверитьТаблицыПоляИТипыПолей(РазобранноеОграничение) @@ -33362,7 +35773,7 @@ Контекст.Вставить("ТипыТаблиц", УправлениеДоступомСлужебныйПовтИсп.СинтаксисЯзыка().ТипыТаблиц); Для Каждого ТипТаблиц Из РазобранноеОграничение.ПоляТаблиц Цикл - КоллекцияТаблиц = Метаданные[ТипТаблиц.Ключ]; + КоллекцияТаблиц = Метаданные[ТипТаблиц.Ключ]; // КоллекцияОбъектовМетаданных Для Каждого ПоляТаблицы Из ТипТаблиц.Значение Цикл @@ -33533,7 +35944,8 @@ Для Каждого КоллекцияТабличныхЧастей Из СвойстваТипаТаблиц.КоллекцииТабличныхЧастей Цикл Если КоллекцияТабличныхЧастей.Ключ = "СтандартныеТабличныеЧасти" Тогда - Для Каждого СтандартнаяТабличнаяЧасть Из МетаданныеТаблицы.СтандартныеТабличныеЧасти Цикл + СтандартныеТабличныеЧасти = МетаданныеТаблицы.СтандартныеТабличныеЧасти; // ОписанияСтандартныхТабличныхЧастей + Для Каждого СтандартнаяТабличнаяЧасть Из СтандартныеТабличныеЧасти Цикл Если ВРег(ИмяПоляИлиТабличнойЧасти) = ВРег(СтандартнаяТабличнаяЧасть.Имя) Тогда Результат.Метаданные = СтандартнаяТабличнаяЧасть; Прервать; @@ -33552,7 +35964,8 @@ Для Каждого КоллекцияПолей Из СвойстваТипаТаблиц.КоллекцииПолей Цикл Если КоллекцияПолей.Ключ = "СтандартныеРеквизиты" Тогда Номер = 0; - Для Каждого СтандартныйРеквизит Из МетаданныеТаблицы.СтандартныеРеквизиты Цикл + СтандартныеРеквизиты = МетаданныеТаблицы.СтандартныеРеквизиты; // ОписанияСтандартныхРеквизитов + Для Каждого СтандартныйРеквизит Из СтандартныеРеквизиты Цикл Номер = Номер + 1; Если ВРег(ИмяПоляИлиТабличнойЧасти) = ВРег(СтандартныйРеквизит.Имя) Тогда Результат.Метаданные = СтандартныйРеквизит; @@ -33566,7 +35979,8 @@ Результат.Коллекция = КоллекцияПолей.Ключ; Если Результат.Коллекция = "Графы" Тогда Результат.Тип = Новый ОписаниеТипов; - Для Каждого МетаданныеСсылки Из Результат.Метаданные.Ссылки Цикл + МетаданныеГрафыЖурнала = Результат.Метаданные; // ОбъектМетаданныхГрафа + Для Каждого МетаданныеСсылки Из МетаданныеГрафыЖурнала.Ссылки Цикл Результат.Тип = Новый ОписаниеТипов(Результат.Тип, МетаданныеСсылки.Тип.Типы()); КонецЦикла; Иначе @@ -33612,7 +36026,8 @@ Результат.Коллекция = "СпециальныеПоля"; Результат.Тип = Новый ОписаниеТипов; - Для Каждого ДокументМетаданные Из МетаданныеТаблицы.Документы Цикл + МетаданныеПоследовательности = МетаданныеТаблицы; // ОбъектМетаданныхПоследовательность + Для Каждого ДокументМетаданные Из МетаданныеПоследовательности.Документы Цикл Результат.Тип = Новый ОписаниеТипов(Результат.Тип, "ДокументСсылка." + ДокументМетаданные.Имя); КонецЦикла; Результат.Вставить("ОсновнойПорядок", "002"); // См. процедуру ДобавитьОсновнойПорядокПоля. @@ -33681,8 +36096,9 @@ ИмяПоля = "ВидРасчета"; КонецЕсли; + МетаданныеРегистра = МетаданныеТаблицы; // ОбъектМетаданныхРегистрРасчета Если ЗначениеЗаполнено(ИмяПоля) Тогда - Для Каждого СтандартныйРеквизит Из МетаданныеТаблицы.СтандартныеРеквизиты Цикл + Для Каждого СтандартныйРеквизит Из МетаданныеРегистра.СтандартныеРеквизиты Цикл Если ВРег(ИмяПоля) = ВРег(СтандартныйРеквизит.Имя) Тогда Результат.Коллекция = "СтандартныеРеквизиты"; Результат.Метаданные = СтандартныйРеквизит; @@ -33697,7 +36113,7 @@ Если МетаданныеПоля <> Неопределено Тогда Результат.Тип = МетаданныеПоля.ИзмерениеРегистра.Тип; Результат.Коллекция = "СпециальныеПоля"; - Номер = 200 + МетаданныеТаблицы.Измерения.Индекс(МетаданныеПоля) + 1; + Номер = 200 + МетаданныеРегистра.Измерения.Индекс(МетаданныеПоля) + 1; Результат.Вставить("ОсновнойПорядок", Номер); // См. процедуру ДобавитьОсновнойПорядокПоля. Возврат Результат; КонецЕсли; @@ -33797,7 +36213,7 @@ Возврат; // Установлен в функции СвойстваПоляИлиТабличнойЧасти. КонецЕсли; - МетаданныеТаблицы = Контекст.МетаданныеТаблицы; + МетаданныеТаблицы = Контекст.МетаданныеТаблицы; // ОбъектМетаданныхРегистрСведений МетаданныеПоля = СвойстваТекущегоПоля.Метаданные; Если СвойстваТекущегоПоля.Коллекция = "СтандартныеРеквизиты" Тогда @@ -33820,7 +36236,7 @@ Номер = 400 + МетаданныеТаблицы.Реквизиты.Индекс(МетаданныеПоля) + 1; ИначеЕсли СвойстваТекущегоПоля.Коллекция = "ОбщиеРеквизиты" Тогда - Номер = 500 + Контекст.СвойстваТипаТаблиц.ОбщиеРеквизиты.Индекс(МетаданныеПоля) + 1; + Номер = 500 + Метаданные.ОбщиеРеквизиты.Индекс(МетаданныеПоля) + 1; КонецЕсли; СвойстваТекущегоПоля.Вставить("ОсновнойПорядок", Строка(Номер)); @@ -33883,7 +36299,8 @@ Иначе Для Каждого КоллекцияТабличныхЧастей Из СвойстваТипаТаблиц.КоллекцииТабличныхЧастей Цикл Если КоллекцияТабличныхЧастей.Ключ = "СтандартныеТабличныеЧасти" Тогда - Для Каждого СтандартнаяТабличнаяЧасть Из МетаданныеТаблицы.СтандартныеТабличныеЧасти Цикл + СтандартныеТабличныеЧасти = МетаданныеТаблицы.СтандартныеТабличныеЧасти; // ОписанияСтандартныхТабличныхЧастей + Для Каждого СтандартнаяТабличнаяЧасть Из СтандартныеТабличныеЧасти Цикл Если ВРег(РасширениеТаблицы.Ключ) = ВРег(СтандартнаяТабличнаяЧасть.Имя) Тогда МетаданныеРасширения = СтандартнаяТабличнаяЧасть; Прервать; @@ -33965,7 +36382,8 @@ Если СвойстваТипаТаблиц.ИмяКоллекции = "Перечисления" Тогда ИменаПредопределенных = Новый Массив; Для Каждого ЗначениеПеречисления Из МетаданныеТаблицы.ЗначенияПеречисления Цикл - ИменаПредопределенных.Добавить(ЗначениеПеречисления.Имя); + ТекущееЗначениеПеречисления = ЗначениеПеречисления; // ОбъектМетаданныхЗначениеПеречисления + ИменаПредопределенных.Добавить(ТекущееЗначениеПеречисления.Имя); КонецЦикла; Иначе ИменаПредопределенных = Новый Массив(МетаданныеТаблицы.ПолучитьИменаПредопределенных()); @@ -33999,13 +36417,13 @@ Если Не СвойстваТаблицы.ТаблицаСуществует Тогда Для Каждого Источник Из СвойстваТаблицы.Источники Цикл УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдена таблица ""%1""'"), Источник.Символы), , 2); + НСтр("ru = 'Не существует таблица ""%1""'"), Источник.Символы), , 2); КонецЦикла; Если СвойстваТаблицы.Свойство("ПервоеПоле") И СвойстваТаблицы.ПервоеПоле.ПервыйИсточник <> Неопределено Тогда УстановитьОшибкуВСтрокеИмениПоля(Контекст, СвойстваТаблицы.ПервоеПоле.ПервыйИсточник.Ключ, - НСтр("ru = 'Поле не найдено, так как не найдена таблица ""%1""'"), 0, , + НСтр("ru = 'Поле не существует, так как указана несуществующая таблица ""%1""'"), 0, , СвойстваТаблицы.ПервоеПоле.ПервыйИсточник.Значение); КонецЕсли; Для Каждого ОписаниеПредопределенного Из СвойстваТаблицы.Предопределенные Цикл @@ -34013,7 +36431,7 @@ СоставИмени = СтрРазделить(Источник.Символы, "."); УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Предопределенное значение не найдено, так как не найдена таблица ""%1""'"), + НСтр("ru = 'Предопределенное значение не существует, так как указана несуществующая таблица ""%1""'"), СоставИмени[0] + "." + СоставИмени[1]), , 2); КонецЦикла; КонецЦикла; @@ -34029,7 +36447,7 @@ СоставИмени = СтрРазделить(Источник.Символы, "."); Источник.ПозицияОшибки = СтрДлина(СоставИмени[0] + "." + СоставИмени[1]) + 1; Источник.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено предопределенное значение ""%1""'"), СоставИмени[2]); + НСтр("ru = 'Не существует предопределенное значение ""%1""'"), СоставИмени[2]); КонецЦикла; КонецЦикла; @@ -34043,13 +36461,13 @@ Для Каждого Источник Из СвойстваРасширения.Источники Цикл УстановитьОшибкуВСтроке(Источник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдена таблица ""%1""'"), Источник.Символы), , 2); + НСтр("ru = 'Не существует таблица ""%1""'"), Источник.Символы), , 2); КонецЦикла; Если СвойстваРасширения.Свойство("ПервоеПоле") И СвойстваРасширения.ПервоеПоле.ПервыйИсточник <> Неопределено Тогда УстановитьОшибкуВСтрокеИмениПоля(Контекст, СвойстваРасширения.ПервоеПоле.ПервыйИсточник.Ключ, - НСтр("ru = 'Поле не найдено, так как не найдена таблица ""%1""'"), 0, , + НСтр("ru = 'Поле не существует, так как указана несуществующая таблица ""%1""'"), 0, , СвойстваРасширения.ПервоеПоле.ПервыйИсточник.Значение); КонецЕсли; Продолжить; @@ -34084,7 +36502,7 @@ ИначеЕсли СвойстваПоля.ВидОшибки = "Запрещено" Тогда ШаблонОшибки = НСтр("ru = 'Запрещено использовать поле ""%1"" таблицы ""%2""'"); Иначе - ШаблонОшибки = НСтр("ru = 'Не найдено поле ""%1"" таблицы ""%2""'"); + ШаблонОшибки = НСтр("ru = 'Не существует поле ""%1"" таблицы ""%2""'"); КонецЕсли; УстановитьОшибкуВСтрокеИмениПоля(Контекст, ОписаниеИсточника.Ключ, ШаблонОшибки, 1, Истина, ОписаниеИсточника.Значение, ВКонце); @@ -34103,7 +36521,7 @@ ИначеЕсли СвойстваПоля.ВидОшибки = "Запрещено" Тогда ШаблонОшибки = НСтр("ru = 'Запрещено использовать поле ""%1""'"); Иначе - ШаблонОшибки = НСтр("ru = 'Не найдено поле ""%1""'"); + ШаблонОшибки = НСтр("ru = 'Не существует поле ""%1""'"); КонецЕсли; УстановитьОшибкуВСтрокеИмениПоля(Контекст, ОписаниеИсточника.Ключ, ШаблонОшибки, СвойстваПоля.ПолеСОшибкой, Истина); @@ -34133,7 +36551,7 @@ Если Не СвойстваТипа.СодержитТип Тогда УстановитьОшибкуВСтроке(ОписаниеИсточника.Ключ, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'У поля ""%1"" не найден тип ""%2""'"), + НСтр("ru = 'У поля ""%1"" не существует тип ""%2""'"), ОписаниеИсточника.Значение.Символы, ОписаниеИсточника.Ключ.Символы), , 2); @@ -34720,7 +37138,8 @@ Строка.Вставить("ДоляОставшихсяКлючейДоступаДляВнешнихПользователей", 0); Контекст.ХранимыеДанные.СтрокиСписков.Вставить(Список, Строка); - Контекст.ДобавленныеСтроки.Добавить(Строка); + ДобавленныеСтроки = Контекст.ДобавленныеСтроки; // Массив + ДобавленныеСтроки.Добавить(Строка); Свойства = Новый Структура; Свойства.Вставить("РазмерЗаданияОбновленияЭлементов", 0); @@ -35114,6 +37533,9 @@ КонецПроцедуры +// Возвращаемое значение: +// Массив из РезультатЗапроса +// Функция ВыполнитьПакетЗапросовПоЧастям(ОписаниеЗапроса) РезультатыПакетаЗапросов = Новый Массив; @@ -35264,7 +37686,6 @@ Иначе ДолиКоличестваЭлементов = Новый Структура("Обработанных, Оставшихся", 0, 1); ПараметрыЗадания = ПараметрыЗадания.Получить(); - ЭтоСписокСДатой = СпискиСДатой.Получить(Строка.ИмяТаблицы) <> Неопределено; Если ТипЗнч(ПараметрыЗадания) = Тип("Структура") И ПараметрыЗадания.Свойство("ПоследнийОбновленныйЭлемент") diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl index c8a2b4a32..926f5ffb9 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl @@ -71,8 +71,9 @@ // // Параметры: // ИдентификаторПользователяИБ - УникальныйИдентификатор, -// Отказ - Булево. При установке значения параметра в значение Ложь внутри обработчика события +// Отказ - Булево - при установке значения параметра в значение Ложь внутри обработчика события // обновление ролей для этого пользователя информационной базы будет пропущено. +// Процедура ПриОбновленииРолейПользователяИБ(Знач ИдентификаторПользователя, Отказ) Экспорт Если ОбщегоНазначения.РазделениеВключено() diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl index 91db6a694..1f0bc8e62 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl @@ -12,6 +12,10 @@ // Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования. // Только для внутреннего использования. +// +// Возвращаемое значение: +// см. Пользователи.СформироватьДанныеВыбораПользователя +// Функция СформироватьДанныеВыбораПользователя(Знач Текст, Знач ВключаяГруппы = Истина, Знач ВключаяВнешнихПользователей = Неопределено, @@ -25,4 +29,10 @@ КонецФункции +Функция ПараметрыРасшифровкиОтчетаАнализПравДоступа(АдресДанныхРасшифровки, Расшифровка) Экспорт + + Возврат Отчеты["АнализПравДоступа"].ПараметрыРасшифровки(АдресДанныхРасшифровки, Расшифровка); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl index 02aa4d7cf..75753e384 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl @@ -17,8 +17,8 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// Элемент - ТаблицаФормы - +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений +// Элемент - ТаблицаФормы // Процедура ЗначенияДоступаПриИзменении(Форма, Элемент) Экспорт @@ -47,10 +47,10 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// Элемент - ТаблицаФормы - -// НоваяСтрока - Булево - -// Копирование - Булево - +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений +// Элемент - ТаблицаФормы +// НоваяСтрока - Булево +// Копирование - Булево // Процедура ЗначенияДоступаПриНачалеРедактирования(Форма, Элемент, НоваяСтрока, Копирование) Экспорт @@ -119,10 +119,10 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// Элемент - ТаблицаФормы - -// ВыбранноеЗначение - Произвольный - -// СтандартнаяОбработка - Булево - +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений +// Элемент - ТаблицаФормы +// ВыбранноеЗначение - Произвольный +// СтандартнаяОбработка - Булево // Процедура ЗначениеДоступаОбработкаВыбора(Форма, Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Экспорт @@ -181,9 +181,9 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// Элемент - ПолеФормы - -// СтандартнаяОбработка - Булево - +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений +// Элемент - ПолеФормы +// СтандартнаяОбработка - Булево // Процедура ЗначениеДоступаОчистка(Форма, Элемент, СтандартнаяОбработка) Экспорт @@ -233,10 +233,8 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения -: -// * Элементы - ВсеЭлементыФормы - : -// ** ВидыДоступа - ТаблицаФормы - -// Элемент - ТаблицаФормы - +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений +// Элемент - ТаблицаФормы // Процедура ВидыДоступаПриАктивизацииЯчейки(Форма, Элемент) Экспорт @@ -271,10 +269,10 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// Элемент - ТаблицаФормы - -// НоваяСтрока - Булево - -// Копирование - Булево - +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений +// Элемент - ТаблицаФормы +// НоваяСтрока - Булево +// Копирование - Булево // Процедура ВидыДоступаПриНачалеРедактирования(Форма, Элемент, НоваяСтрока, Копирование) Экспорт @@ -301,8 +299,8 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// Элемент - ПолеФормы - +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений +// Элемент - ПолеФормы // Процедура ВидыДоступаВидДоступаПредставлениеПриИзменении(Форма, Элемент) Экспорт @@ -324,15 +322,10 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - : -// * Элементы - ВсеЭлементыФормы - : -// * ВсеВидыДоступа - ДанныеФормыСтруктура - : -// ** Ссылка - ОпределяемыйТип.ЗначениеДоступа - -// ** Представление - Строка - -// ** Используется - Булево - -// Элемент - ПолеФормы - -// ВыбранноеЗначение - Произвольный - -// СтандартнаяОбработка - Булево - +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений +// Элемент - ПолеФормы +// ВыбранноеЗначение - Произвольный +// СтандартнаяОбработка - Булево // Процедура ВидыДоступаВидДоступаПредставлениеОбработкаВыбора(Форма, Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Экспорт @@ -367,10 +360,8 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения -: -// * Элементы - ВсеЭлементыФормы - : -// ** ВидыДоступа - ПолеФормы - -// Элемент - ПолеФормы - +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений +// Элемент - ПолеФормы // Процедура ВидыДоступаВсеРазрешеныПредставлениеПриИзменении(Форма, Элемент) Экспорт @@ -399,15 +390,10 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - : -// * Элементы - ВсеЭлементыФормы - : -// ** ВидыДоступа - ТаблицаФормы - -// * ПредставленияВсеРазрешены - ДанныеФормыКоллекция - : -// ** Имя - Строка - -// ** Представление - Строка - -// Элемент - ПолеФормы - -// ВыбранноеЗначение - Произвольный - -// СтандартнаяОбработка - Булево - +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений +// Элемент - ПолеФормы +// ВыбранноеЗначение - Произвольный +// СтандартнаяОбработка - Булево // Процедура ВидыДоступаВсеРазрешеныПредставлениеОбработкаВыбора(Форма, Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Экспорт @@ -428,6 +414,155 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий общей формы ФормаОтчета. + +// См. ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки. +Процедура ПриОбработкеРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт + + Если ФормаОтчета.НастройкиОтчета.ПолноеИмя <> "Отчет.АнализПравДоступа" Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ПараметрыРасшифровки = УправлениеДоступомСлужебныйВызовСервера.ПараметрыРасшифровкиОтчетаАнализПравДоступа(ФормаОтчета.ОтчетДанныеРасшифровки, Расшифровка); + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); + ПараметрыОтчета.Вставить("Расшифровка", Расшифровка); + + Отбор = Новый Структура; + Для Каждого Элемент Из ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл + Настройка = ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Элемент.ИдентификаторПользовательскойНастройки); + Если Настройка = Неопределено Тогда + Настройка = Элемент; + КонецЕсли; + Если Настройка.Использование Тогда + Если Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда + Отбор.Вставить(Элемент.ЛевоеЗначение, Настройка.ПравоеЗначение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ФормаОтчета.КлючТекущегоВарианта = "ПраваПользователейНаТаблицыОтчета" И ПараметрыРасшифровки.ИмяПоляРасшифровки <> "Пользователь" + Или ФормаОтчета.КлючТекущегоВарианта = "ПраваПользователяНаТаблицыОтчета" Тогда + Отбор.Удалить("Отчет"); + КонецЕсли; + + Если ПараметрыРасшифровки.ИмяПоляРасшифровки = "Право" + Или СтрНачинаетсяС(ПараметрыРасшифровки.ИмяПоляРасшифровки, "Картинка") Тогда + + КлючВарианта = "ПраваПользователяНаТаблицу"; + + Если ПараметрыРасшифровки.СписокПолей["Пользователь"] <> Неопределено Тогда + Отбор.Вставить("Пользователь", ПараметрыРасшифровки.СписокПолей["Пользователь"]); + КонецЕсли; + + Если ПараметрыРасшифровки.СписокПолей["ОбъектМетаданных"] <> Неопределено Тогда + Отбор.Вставить("ОбъектМетаданных", ПараметрыРасшифровки.СписокПолей["ОбъектМетаданных"]); + ИначеЕсли ПараметрыРасшифровки.СписокПолей["Отчет"] <> Неопределено Тогда + Отбор.Вставить("Отчет", ПараметрыРасшифровки.СписокПолей["Отчет"]); + КлючВарианта = "ПраваПользователяНаТаблицыОтчета"; + КонецЕсли; + + Если КлючВарианта = ФормаОтчета.КлючТекущегоВарианта Тогда + Возврат; + КонецЕсли; + + ИначеЕсли ПараметрыРасшифровки.ИмяПоляРасшифровки = "ОбъектМетаданных" Тогда + + КлючВарианта = "ПраваПользователейНаТаблицу"; + Отбор.Вставить("ОбъектМетаданных", ПараметрыРасшифровки.СписокПолей["ОбъектМетаданных"]); + + Если ФормаОтчета.КлючТекущегоВарианта = "ПраваПользователяНаТаблицы" + Или ФормаОтчета.КлючТекущегоВарианта = "ПраваПользователяНаТаблицыОтчета" Тогда + КлючВарианта = "ПраваПользователяНаТаблицу"; + КонецЕсли; + + ИначеЕсли ПараметрыРасшифровки.ИмяПоляРасшифровки = "Пользователь" + И ФормаОтчета.КлючТекущегоВарианта <> "ПраваПользователяНаТаблицы" + И ФормаОтчета.КлючТекущегоВарианта <> "ПраваПользователяНаТаблицу" + И ФормаОтчета.КлючТекущегоВарианта <> "ПраваПользователяНаТаблицыОтчетов" Тогда + + КлючВарианта = "ПраваПользователяНаТаблицы"; + Отбор.Вставить("Пользователь", ПараметрыРасшифровки.СписокПолей["Пользователь"]); + + Если ФормаОтчета.КлючТекущегоВарианта = "ПраваПользователейНаТаблицу" Тогда + КлючВарианта = "ПраваПользователяНаТаблицу"; + КонецЕсли; + + Если ФормаОтчета.КлючТекущегоВарианта = "ПраваПользователейНаТаблицыОтчета" Тогда + КлючВарианта = "ПраваПользователяНаТаблицыОтчета"; + КонецЕсли; + + Если ФормаОтчета.КлючТекущегоВарианта = "АнализПравДоступа" И ГруппировкаПоОтчетамВключена(ФормаОтчета.Отчет.КомпоновщикНастроек) Тогда + КлючВарианта = "ПраваПользователяНаТаблицыОтчетов"; + КонецЕсли; + + ИначеЕсли ПараметрыРасшифровки.ИмяПоляРасшифровки = "Отчет" Тогда + + Если ФормаОтчета.КлючТекущегоВарианта = "ПраваПользователяНаТаблицыОтчета" + Или ФормаОтчета.КлючТекущегоВарианта = "ПраваПользователейНаТаблицыОтчета" Тогда + Возврат; + КонецЕсли; + + КлючВарианта = "ПраваПользователейНаТаблицыОтчета"; + Отбор.Вставить("Отчет", ПараметрыРасшифровки.СписокПолей["Отчет"]); + + Иначе + + ЗначениеРасшифровки = ПараметрыРасшифровки.СписокПолей[ПараметрыРасшифровки.ИмяПоляРасшифровки]; + Если ЗначениеЗаполнено(ЗначениеРасшифровки) Тогда + Пользователь = ПараметрыРасшифровки.СписокПолей["Пользователь"]; + Если Пользователь = Неопределено И Отбор.Свойство("Пользователь") И ТипЗнч(Отбор.Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда + Пользователь = Отбор.Пользователь; + КонецЕсли; + + Если ЗначениеЗаполнено(Пользователь) И ТипЗнч(ЗначениеРасшифровки) = Тип("СправочникСсылка.ПрофилиГруппДоступа") Тогда + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); + Если ПараметрыРаботыКлиента.УпрощенныйИнтерфейсНастройкиПравДоступа Тогда + ИмяФормы = "ОбщаяФорма.ПраваДоступаУпрощенно"; + Иначе + ИмяФормы = "ОбщаяФорма.ПраваДоступа"; + КонецЕсли; + + Форма = ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта", Новый Структура("Ключ", Пользователь)); + ОткрытьФорму(ИмяФормы, Новый Структура("Пользователь", Пользователь), Форма, , Форма.Окно); + Иначе + ПоказатьЗначение(Неопределено, ПараметрыРасшифровки.СписокПолей[ПараметрыРасшифровки.ИмяПоляРасшифровки]); + КонецЕсли; + КонецЕсли; + + Возврат; + + КонецЕсли; + + ПараметрыОтчета.Вставить("Отбор", Отбор); + ПараметрыОтчета.Вставить("КлючВарианта", КлючВарианта); + ПараметрыОтчета.Вставить("КлючНазначенияИспользования", КлючВарианта); + + ОткрытьФорму("Отчет.АнализПравДоступа.Форма", ПараметрыОтчета, ФормаОтчета); + +КонецПроцедуры + +Процедура ПоказатьПраваПользователейОтчета(Отчет) Экспорт + + КлючВарианта = "ПраваПользователейНаТаблицыОтчета"; + + Отбор = Новый Структура; + Отбор.Вставить("Отчет", Отчет); + Отбор.Вставить("ВходВПрограммуРазрешен", Истина); + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); + ПараметрыОтчета.Вставить("Отбор", Отбор); + ПараметрыОтчета.Вставить("КлючВарианта", КлючВарианта); + ПараметрыОтчета.Вставить("КлючНазначенияИспользования", КлючВарианта); + + ОткрытьФорму("Отчет.АнализПравДоступа.Форма", ПараметрыОтчета, ЭтотОбъект); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -448,7 +583,7 @@ // Завершение обработчика события ЗначениеДоступаНачалоВыбора. // // Параметры: -// Форма - ФормаКлиентскогоПриложения -: +// Форма - см. УправлениеДоступомСлужебныйКлиентСервер.ПараметрыФормыРедактированияРазрешенныхЗначений // Процедура ЗначениеДоступаНачалоВыбораЗавершение(Форма) @@ -527,4 +662,44 @@ КонецПроцедуры +Функция ГруппировкаПоОтчетамВключена(КомпоновщикНастроек) + + Результат = Ложь; + + Элемент = НайтиЭлементГруппировкиПоИмени(КомпоновщикНастроек.Настройки.Структура, "ГруппировкаПоОтчетам"); + Если Элемент <> Неопределено Тогда + Настройка = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Элемент.ИдентификаторПользовательскойНастройки); + Если Настройка <> Неопределено Тогда + Результат = Настройка.Использование; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция НайтиЭлементГруппировкиПоИмени(КоллекцияЭлементов, Имя) + + Результат = Неопределено; + + Для Каждого Элемент Из КоллекцияЭлементов Цикл + Если (ТипЗнч(Элемент) = Тип("ГруппировкаКомпоновкиДанных") + Или ТипЗнч(Элемент) = Тип("ГруппировкаТаблицыКомпоновкиДанных")) + И Элемент.Имя = Имя Тогда + Результат = Элемент; + ИначеЕсли ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") Тогда + Результат = НайтиЭлементГруппировкиПоИмени(Элемент.Строки, Имя); + Если Результат = Неопределено Тогда + Результат = НайтиЭлементГруппировкиПоИмени(Элемент.Колонки, Имя); + КонецЕсли; + КонецЕсли; + Если Результат <> Неопределено Тогда + Возврат Результат; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl index 0af9e7fde..424a88392 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl @@ -12,8 +12,9 @@ // // Параметры: // Профиль - СправочникОбъект.ПрофилиГруппДоступа - профиль с табличной частью Назначение. -// - ДанныеФормыСтруктура - структура объекта профиля в форме. -// - Структура, ФиксированнаяСтруктура - описание поставляемого профиля. +// - ДанныеФормыСтруктура - структура объекта профиля в форме. +// - Структура - описание поставляемого профиля. +// - ФиксированнаяСтруктура - описание поставляемого профиля. // // Возвращаемое значение: // Строка - "ДляАдминистраторов", "ДляПользователей", "ДляВнешнихПользователей", @@ -53,11 +54,12 @@ // Проверяет соответствие вида доступа назначению профиля. // // Параметры: -// ВидДоступа - Строка, ЛюбаяСсылка - описание вида доступа. +// ВидДоступа - Строка - имя вида доступа. +// - ОпределяемыйТип.ЗначениеДоступа - тип значений вида доступа. // НазначениеПрофиля - Строка - возвращается функцией НазначениеПрофиля. // // Возвращаемое значение: -// Булево - +// Булево // Функция ВидДоступаСоответствуетНазначениюПрофиля(Знач ВидДоступа, НазначениеПрофиля) Экспорт @@ -168,10 +170,8 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - : -// * Элементы - ВсеЭлементыФормы - : -// ** ЗначенияДоступа - ТаблицаФормы - -// ОбработкаНаКлиенте - Булево - +// Форма - см. ПараметрыФормыРедактированияРазрешенныхЗначений +// ОбработкаНаКлиенте - Булево // Процедура ПриИзмененииТекущегоВидаДоступа(Форма, ОбработкаНаКлиенте = Истина) Экспорт @@ -314,32 +314,73 @@ КонецПроцедуры // Только для внутреннего использования. +// См. УправлениеДоступомСлужебный.ПриСозданииНаСервереФормыРедактированияРазрешенныхЗначений +// +// Возвращаемое значение: +// ФормаКлиентскогоПриложения: +// * Элементы - ВсеЭлементыФормы: +// ** Назначение - ТаблицаФормы +// ** ВидыДоступа - ТаблицаФормы +// ** ЗначенияДоступа - ТаблицаФормы +// ** ВсеВидыДоступа - ТаблицаФормы +// ** ПредставленияВсеРазрешены - ТаблицаФормы +// ** ВсеТипыВыбираемыхЗначений - ТаблицаФормы +// * ТекущаяГруппаДоступа - СправочникСсылка.ГруппыДоступа +// * Назначение - см. НазначениеИзФормы +// * ВидыДоступа - см. ВидыДоступаИзФормы +// * ЗначенияДоступа - см. ЗначенияДоступаИзФормы +// * ИспользоватьВнешнихПользователей - Булево - реквизит будет создан, если нет в форме +// * НадписьВидДоступа - Строка - представление текущего вида доступа в форме +// * ЭтоПрофильГруппДоступа - Булево +// * ТекущийВидДоступа - ОпределяемыйТип.ЗначениеДоступа +// * ТекущиеТипыВыбираемыхЗначений - СписокЗначений +// * ТекущийТипВыбираемыхЗначений - ОпределяемыйТип.ЗначениеДоступа +// * ИмяРеквизитаХранилищаТаблиц - Строка +// * ВидДоступаПользователи - ОпределяемыйТип.ЗначениеДоступа +// * ВидДоступаВнешниеПользователи - ОпределяемыйТип.ЗначениеДоступа +// * ВсеВидыДоступа - см. ВсеВидыДоступаИзФормы +// * ПредставленияВсеРазрешены - см. ПредставленияВсеРазрешеныИзФормы +// * ВсеТипыВыбираемыхЗначений - см. ВсеТипыВыбираемыхЗначенийИзФормы +// Функция ПараметрыФормыРедактированияРазрешенныхЗначений(Форма, ТекущийОбъект = Неопределено) Экспорт - Параметры = Новый Структура; - Параметры.Вставить("ПутьКТаблицам", ""); + ПутьКТаблицам = ""; Если ТекущийОбъект <> Неопределено Тогда ХранилищеТаблиц = ТекущийОбъект; ИначеЕсли ЗначениеЗаполнено(Форма.ИмяРеквизитаХранилищаТаблиц) Тогда - Параметры.Вставить("ПутьКТаблицам", Форма.ИмяРеквизитаХранилищаТаблиц + "."); + ПутьКТаблицам = Форма.ИмяРеквизитаХранилищаТаблиц + "."; ХранилищеТаблиц = Форма[Форма.ИмяРеквизитаХранилищаТаблиц]; Иначе ХранилищеТаблиц = Форма; КонецЕсли; - НеобязательныеРеквизиты = Новый Структура("Назначение"); - ЗаполнитьЗначенияСвойств(НеобязательныеРеквизиты, ХранилищеТаблиц); - Параметры.Вставить("Назначение", НеобязательныеРеквизиты.Назначение); - Параметры.Вставить("ВидыДоступа", ХранилищеТаблиц.ВидыДоступа); - Параметры.Вставить("ЗначенияДоступа", ХранилищеТаблиц.ЗначенияДоступа); + Параметры = Новый Структура; + Параметры.Вставить("Назначение", НазначениеИзФормы(ХранилищеТаблиц)); + Параметры.Вставить("ВидыДоступа", ВидыДоступаИзФормы(ХранилищеТаблиц)); + Параметры.Вставить("ЗначенияДоступа", ЗначенияДоступаИзФормы(ХранилищеТаблиц)); + Параметры.Вставить("ВсеВидыДоступа", ВсеВидыДоступаИзФормы(Форма)); + Параметры.Вставить("ПредставленияВсеРазрешены", ПредставленияВсеРазрешеныИзФормы(Форма)); + Параметры.Вставить("ВсеТипыВыбираемыхЗначений", ВсеТипыВыбираемыхЗначенийИзФормы(Форма)); + Параметры.Вставить("ПутьКТаблицам", ПутьКТаблицам); Возврат Параметры; КонецФункции // Только для внутреннего использования. +// +// Параметры: +// Форма - см. ПараметрыФормыРедактированияРазрешенныхЗначений +// ВидДоступа - Строка +// - ОпределяемыйТип.ЗначениеДоступа +// +// Возвращаемое значение: +// Отбор - Структура: +// * ГруппаДоступа - СправочникСсылка.ГруппыДоступа +// * ВидДоступа - ОпределяемыйТип.ЗначениеДоступа - пустая ссылка основного типа вида доступа. +// Функция ОтборВТаблицахФормыРедактированияРазрешенныхЗначений(Форма, ВидДоступа = "БезОтбораПоВидуДоступа") Экспорт Отбор = Новый Структура; @@ -390,14 +431,11 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - : -// * Элементы - ВсеЭлементыФормы - : -// ** ВидыДоступа - ТаблицаФормы - -// ** ЗначенияДоступа - ТаблицаФормы - -// Отказ - Булево - -// ПроверенныеРеквизитыТаблиц - Массив из Строка - +// Форма - см. ПараметрыФормыРедактированияРазрешенныхЗначений +// Отказ - Булево +// ПроверенныеРеквизитыТаблиц - Массив из Строка // Ошибки - см. ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю.Ошибки -// НеПроверять - Булево - +// НеПроверять - Булево // Процедура ОбработкаПроверкиЗаполненияНаСервереФормыРедактированияРазрешенныхЗначений( Форма, Отказ, ПроверенныеРеквизитыТаблиц, Ошибки, НеПроверять = Ложь) Экспорт @@ -529,12 +567,12 @@ #Область СлужебныеПроцедурыИФункции // Параметры: -// Данные - Структура - -// * Наименование - Строка - -// * Пользователь - СправочникСсылка.Пользователи - +// Данные - Структура: +// * Наименование - Строка +// * Пользователь - СправочникСсылка.Пользователи // // Возвращаемое значение: -// Строка - +// Строка // Функция ПредставлениеГруппыДоступа(Данные) Экспорт @@ -542,4 +580,106 @@ КонецФункции +// Только для внутреннего использования. +// См. УправлениеДоступомСлужебный.ПриСозданииНаСервереФормыРедактированияРазрешенныхЗначений +// +// Возвращаемое значение: +// ДанныеФормыКоллекция Из ДанныеФормыЭлементКоллекции: +// * ТипПользователя - ОпределяемыйТип.Пользователь - тип назначения. +// +Функция НазначениеИзФормы(Форма) + + НеобязательныеРеквизиты = Новый Структура("Назначение"); + ЗаполнитьЗначенияСвойств(НеобязательныеРеквизиты, Форма); + Возврат НеобязательныеРеквизиты.Назначение; + +КонецФункции + +// Только для внутреннего использования. +// См. УправлениеДоступомСлужебный.ПриСозданииНаСервереФормыРедактированияРазрешенныхЗначений +// +// Возвращаемое значение: +// ДанныеФормыКоллекция Из ДанныеФормыЭлементКоллекции: +// * ГруппаДоступа - СправочникСсылка.ГруппыДоступа +// * ВидДоступа - ОпределяемыйТип.ЗначениеДоступа +// * Предустановленный - Булево - (только для профиля) +// * ВсеРазрешены - Булево +// * ВидДоступаПредставление - Строка - представление настройки, +// * ВсеРазрешеныПредставление - Строка - представление настройки, +// * Используется - Булево +// +Функция ВидыДоступаИзФормы(Форма) + + Возврат Форма.ВидыДоступа; + +КонецФункции + +// Только для внутреннего использования. +// См. УправлениеДоступомСлужебный.ПриСозданииНаСервереФормыРедактированияРазрешенныхЗначений +// +// Возвращаемое значение: +// ДанныеФормыКоллекция Из ДанныеФормыЭлементКоллекции: +// * ГруппаДоступа - СправочникСсылка.ГруппыДоступа +// * ВидДоступа - ОпределяемыйТип.ЗначениеДоступа +// * ЗначениеДоступа - ОпределяемыйТип.ЗначениеДоступа +// * НомерСтрокиПоВиду - Число +// +Функция ЗначенияДоступаИзФормы(Форма) + + Возврат Форма.ЗначенияДоступа; + +КонецФункции + +// Только для внутреннего использования. +// См. УправлениеДоступомСлужебный.ПриСозданииНаСервереФормыРедактированияРазрешенныхЗначений +// +// Возвращаемое значение: +// ДанныеФормыКоллекция Из ДанныеФормыЭлементКоллекции: +// * Ссылка - ОпределяемыйТип.ЗначениеДоступа +// * Представление - Строка +// * Используется - Булево +// +Функция ВсеВидыДоступаИзФормы(Форма) + + НеобязательныеРеквизиты = Новый Структура("ВсеВидыДоступа"); + ЗаполнитьЗначенияСвойств(НеобязательныеРеквизиты, Форма); + Возврат НеобязательныеРеквизиты.ВсеВидыДоступа; + +КонецФункции + +// Только для внутреннего использования. +// См. УправлениеДоступомСлужебный.ПриСозданииНаСервереФормыРедактированияРазрешенныхЗначений +// +// Возвращаемое значение: +// ДанныеФормыКоллекция Из ДанныеФормыЭлементКоллекции: +// * Имя - Строка +// * Представление - Строка +// +Функция ПредставленияВсеРазрешеныИзФормы(Форма) + + НеобязательныеРеквизиты = Новый Структура("ПредставленияВсеРазрешены"); + ЗаполнитьЗначенияСвойств(НеобязательныеРеквизиты, Форма); + Возврат НеобязательныеРеквизиты.ПредставленияВсеРазрешены; + +КонецФункции + +// Только для внутреннего использования. +// См. УправлениеДоступомСлужебный.ПриСозданииНаСервереФормыРедактированияРазрешенныхЗначений +// +// Возвращаемое значение: +// ДанныеФормыКоллекция Из ДанныеФормыЭлементКоллекции: +// * ВидДоступа - ОпределяемыйТип.ЗначениеДоступа +// * ТипЗначений - ОпределяемыйТип.ЗначениеДоступа +// * ПредставлениеТипа - Строка +// * ИмяТаблицы - Строка +// * ИерархияЭлементов - Булево +// +Функция ВсеТипыВыбираемыхЗначенийИзФормы(Форма) + + НеобязательныеРеквизиты = Новый Структура("ВсеТипыВыбираемыхЗначений"); + ЗаполнитьЗначенияСвойств(НеобязательныеРеквизиты, Форма); + Возврат НеобязательныеРеквизиты.ВсеТипыВыбираемыхЗначений; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index 088e747b7..3286d3331 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -8,24 +8,22 @@ #Область СлужебныйПрограммныйИнтерфейс -// См. УправлениеДоступомСлужебный.СвойстваВидовДоступа. +// См. УправлениеДоступомСлужебный.ХранимоеОписаниеСвойствВидовДоступа +// +// Возвращаемое значение: +// см. УправлениеДоступомСлужебный.ХранимоеОписаниеСвойствВидовДоступа +// Функция СвойстваВидовДоступа() Экспорт - СвойстваВидовДоступа = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы( - "СтандартныеПодсистемы.УправлениеДоступом.СвойстваВидовДоступа"); - - Если СвойстваВидовДоступа = Неопределено Тогда - УправлениеДоступомСлужебный.ОбновитьОписаниеСвойствВидовДоступа(); - КонецЕсли; - - СвойстваВидовДоступа = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы( - "СтандартныеПодсистемы.УправлениеДоступом.СвойстваВидовДоступа"); - - Возврат СвойстваВидовДоступа; + Возврат УправлениеДоступомСлужебный.ХранимоеОписаниеСвойствВидовДоступа(); КонецФункции // См. УправлениеДоступомСлужебный.ПредставлениеВидовДоступа. +// +// Возвращаемое значение: +// см. УправлениеДоступомСлужебный.ПредставлениеВидовДоступа +// Функция ПредставлениеВидовДоступа() Экспорт Возврат УправлениеДоступомСлужебный.ПредставлениеВидовДоступа(); @@ -33,6 +31,10 @@ КонецФункции // См. РегистрыСведений.НастройкиПравОбъектов.ВозможныеПрава. +// +// Возвращаемое значение: +// см. РегистрыСведений.НастройкиПравОбъектов.ВозможныеПраваДляНастройкиПравОбъектов +// Функция ВозможныеПраваДляНастройкиПравОбъектов() Экспорт Возврат РегистрыСведений.НастройкиПравОбъектов.ВозможныеПраваДляНастройкиПравОбъектов(); @@ -40,13 +42,21 @@ КонецФункции // См. РегистрыСведений.НастройкиПравОбъектов.ПредставлениеВозможныхПрав. +// +// Возвращаемое значение: +// см. РегистрыСведений.НастройкиПравОбъектов.ПредставлениеВозможныхПрав +// Функция ПредставлениеВозможныхПрав() Экспорт Возврат РегистрыСведений.НастройкиПравОбъектов.ПредставлениеВозможныхПрав(); КонецФункции -// См. Справочники.ПрофилиГруппДоступа.ПоставляемыеПрофили. +// См. Справочники.ПрофилиГруппДоступа.ОписаниеПоставляемыхПрофилей. +// +// Возвращаемое значение: +// см. Справочники.ПрофилиГруппДоступа.ОписаниеПоставляемыхПрофилей +// Функция ОписаниеПоставляемыхПрофилей() Экспорт Возврат Справочники.ПрофилиГруппДоступа.ОписаниеПоставляемыхПрофилей(); @@ -54,202 +64,24 @@ КонецФункции // См. Справочники.ПрофилиГруппДоступа.ПояснениеПоставляемыхПрофилей. +// +// Возвращаемое значение: +// см. Справочники.ПрофилиГруппДоступа.ПояснениеПоставляемыхПрофилей +// Функция ПояснениеПоставляемыхПрофилей() Экспорт Возврат Справочники.ПрофилиГруппДоступа.ПояснениеПоставляемыхПрофилей(); КонецФункции -// Возвращает таблицу значений, содержащую вид ограничений доступа по каждому праву -// объектов метаданных. -// Если записи по праву нет, значит ограничений по праву нет. -// Таблица содержит только виды доступа, заданные разработчиком, -// исходя из их применения в текстах ограничений. -// Для получения всех видов доступа, включая используемые в наборах -// значений доступа может быть использовано -// текущее состояние регистра сведений НаборыЗначенийДоступа. +// См. УправлениеДоступомСлужебный.ПостоянныеВидыОграниченийПравОбъектовМетаданных // -// Параметры: -// ДляПроверки - Булево - вернуть текстовое описание ограничений прав, заполненное -// в переопределяемых модулях без проверки. -// -// Возвращаемое значение: -// ТаблицаЗначений - если ДляПроверки = Ложь, состав колонок: -// Таблица - Строка - имя таблицы объекта метаданных, например, Справочник.Файлы. -// Право - Строка: "Чтение", "Изменение". -// ВидДоступа - Ссылка - пустая ссылка основного типа значений вида доступа, -// пустая ссылка владельца настроек прав. -// - Неопределено - для вида доступа Объект. -// ТаблицаОбъекта - Ссылка - пустая ссылка объекта метаданных, через который ограничивается доступ, -// используя наборы значений доступа, например, Справочник.ПапкиФайлов. -// - Неопределено, если ВидДоступа <> Неопределено. -// -// Строка - если ДляПроверки = Истина - ограничения прав, как они добавлены в переопределяемом модуле. +// Возвращаемое значение: +// см. УправлениеДоступомСлужебный.ПостоянныеВидыОграниченийПравОбъектовМетаданных // Функция ПостоянныеВидыОграниченийПравОбъектовМетаданных(ДляПроверки = Ложь) Экспорт - УстановитьПривилегированныйРежим(Истина); - - ВидыДоступаПрав = Новый ТаблицаЗначений; - ВидыДоступаПрав.Колонки.Добавить("Таблица", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); - ВидыДоступаПрав.Колонки.Добавить("Право", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); - ВидыДоступаПрав.Колонки.Добавить("ВидДоступа", ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав()); - ВидыДоступаПрав.Колонки.Добавить("ТаблицаОбъекта", Метаданные.РегистрыСведений.НаборыЗначенийДоступа.Измерения.Объект.Тип); - - ОграниченияПрав = ""; - - УниверсальноеОграничение = УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально(Истина, Истина); - - Если ДляПроверки Или Не УниверсальноеОграничение Тогда - ИнтеграцияПодсистемБСП.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(ОграниченияПрав); - УправлениеДоступомПереопределяемый.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(ОграниченияПрав); - Иначе - ОграниченияПрав = УправлениеДоступомСлужебный.ВсеВидыОграниченийПравДляОтчетаПраваДоступа(); - КонецЕсли; - - Если ДляПроверки Тогда - Возврат ОграниченияПрав; - КонецЕсли; - - ВидыДоступаПоИменам = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа().ПоИменам; - - Для НомерСтроки = 1 По СтрЧислоСтрок(ОграниченияПрав) Цикл - ТекущаяСтрока = СокрЛП(СтрПолучитьСтроку(ОграниченияПрав, НомерСтроки)); - Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда - ПояснениеОшибки = ""; - Если СтрЧислоВхождений(ТекущаяСтрока, ".") <> 3 И СтрЧислоВхождений(ТекущаяСтрока, ".") <> 5 Тогда - ПояснениеОшибки = НСтр("ru = 'Строка должна быть в формате ""<Полное имя таблицы>.<Имя права>.<Имя вида доступа>[.Таблица объекта]"".'"); - Иначе - ПозицияПрава = СтрНайти(ТекущаяСтрока, "."); - ПозицияПрава = СтрНайти(Сред(ТекущаяСтрока, ПозицияПрава + 1), ".") + ПозицияПрава; - Таблица = Лев(ТекущаяСтрока, ПозицияПрава - 1); - ПозицияВидаДоступа = СтрНайти(Сред(ТекущаяСтрока, ПозицияПрава + 1), ".") + ПозицияПрава; - Право = Сред(ТекущаяСтрока, ПозицияПрава + 1, ПозицияВидаДоступа - ПозицияПрава - 1); - Если СтрЧислоВхождений(ТекущаяСтрока, ".") = 3 Тогда - ВидДоступа = Сред(ТекущаяСтрока, ПозицияВидаДоступа + 1); - ТаблицаОбъекта = ""; - Иначе - ПозицияТаблицыОбъекта = СтрНайти(Сред(ТекущаяСтрока, ПозицияВидаДоступа + 1), ".") + ПозицияВидаДоступа; - ВидДоступа = Сред(ТекущаяСтрока, ПозицияВидаДоступа + 1, ПозицияТаблицыОбъекта - ПозицияВидаДоступа - 1); - ТаблицаОбъекта = Сред(ТекущаяСтрока, ПозицияТаблицыОбъекта + 1); - КонецЕсли; - - Если Метаданные.НайтиПоПолномуИмени(Таблица) = Неопределено Тогда - Если УниверсальноеОграничение Тогда - Продолжить; - КонецЕсли; - ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдена таблица ""%1"".'"), Таблица); - - ИначеЕсли Право <> "Чтение" И Право <> "Изменение" Тогда - ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено право ""%1"".'"), Право); - - ИначеЕсли ВРег(ВидДоступа) = ВРег("Объект") Тогда - Если Метаданные.НайтиПоПолномуИмени(ТаблицаОбъекта) = Неопределено Тогда - Если УниверсальноеОграничение Тогда - Продолжить; - КонецЕсли; - ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдена таблица объекта ""%1"".'"), - ТаблицаОбъекта); - Иначе - ВидДоступаСсылка = Неопределено; - ТаблицаОбъектаСсылка = УправлениеДоступомСлужебный.ПустаяСсылкаОбъектаМетаданных( - ТаблицаОбъекта); - КонецЕсли; - - ИначеЕсли ВРег(ВидДоступа) = ВРег("НастройкиПрав") Тогда - Если Метаданные.НайтиПоПолномуИмени(ТаблицаОбъекта) = Неопределено Тогда - Если УниверсальноеОграничение Тогда - Продолжить; - КонецЕсли; - ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдена таблица владельца настроек прав ""%1"".'"), - ТаблицаОбъекта); - Иначе - ВидДоступаСсылка = УправлениеДоступомСлужебный.ПустаяСсылкаОбъектаМетаданных( - ТаблицаОбъекта); - ТаблицаОбъектаСсылка = Неопределено; - КонецЕсли; - - ИначеЕсли ВидыДоступаПоИменам.Получить(ВидДоступа) = Неопределено Тогда - Если УниверсальноеОграничение Тогда - Продолжить; - КонецЕсли; - ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден вид доступа ""%1"".'"), ВидДоступа); - Иначе - ВидДоступаСсылка = ВидыДоступаПоИменам.Получить(ВидДоступа).Ссылка; - ТаблицаОбъектаСсылка = Неопределено; - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(ПояснениеОшибки) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в строке описания вида ограничений права объекта метаданных: - |""%1"".'") - + Символы.ПС - + Символы.ПС, - ТекущаяСтрока) - + ПояснениеОшибки; - Иначе - НовоеОписание = ВидыДоступаПрав.Добавить(); - НовоеОписание.Таблица = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Таблица); - НовоеОписание.Право = Право; - НовоеОписание.ВидДоступа = ВидДоступаСсылка; - НовоеОписание.ТаблицаОбъекта = ТаблицаОбъектаСсылка; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // Добавление видов доступа объектов, которые определяются не только через наборы значений доступа. - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЗависимостиПравДоступа.ПодчиненнаяТаблица, - | ЗависимостиПравДоступа.ТипВедущейТаблицы - |ИЗ - | РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа"; - ЗависимостиПрав = Запрос.Выполнить().Выгрузить(); - - ПрекратитьПопытки = Ложь; - Пока НЕ ПрекратитьПопытки Цикл - ПрекратитьПопытки = Истина; - Отбор = Новый Структура("ВидДоступа", Неопределено); - ВидыДоступаОбъект = ВидыДоступаПрав.НайтиСтроки(Отбор); - Для каждого Строка Из ВидыДоступаОбъект Цикл - ИдентификаторТаблицы = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( - ТипЗнч(Строка.ТаблицаОбъекта)); - - Отбор = Новый Структура; - Отбор.Вставить("ПодчиненнаяТаблица", Строка.Таблица); - Отбор.Вставить("ТипВедущейТаблицы", Строка.ТаблицаОбъекта); - Если ЗависимостиПрав.НайтиСтроки(Отбор).Количество() = 0 Тогда - ВедущееПраво = Строка.Право; - Иначе - ВедущееПраво = "Чтение"; - КонецЕсли; - Отбор = Новый Структура("Таблица, Право", ИдентификаторТаблицы, ВедущееПраво); - ВидыДоступаВедущейТаблицы = ВидыДоступаПрав.НайтиСтроки(Отбор); - Для каждого ОписаниеВидаДоступа Из ВидыДоступаВедущейТаблицы Цикл - Если ОписаниеВидаДоступа.ВидДоступа = Неопределено Тогда - // Вид доступа объект нельзя добавлять. - Продолжить; - КонецЕсли; - Отбор = Новый Структура; - Отбор.Вставить("Таблица", Строка.Таблица); - Отбор.Вставить("Право", Строка.Право); - Отбор.Вставить("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа); - Если ВидыДоступаПрав.НайтиСтроки(Отбор).Количество() = 0 Тогда - ЗаполнитьЗначенияСвойств(ВидыДоступаПрав.Добавить(), Отбор); - ПрекратитьПопытки = Ложь; - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - - Возврат ВидыДоступаПрав; + Возврат УправлениеДоступомСлужебный.ПостоянныеВидыОграниченийПравОбъектовМетаданных(ДляПроверки); КонецФункции @@ -258,6 +90,10 @@ #Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// Строка +// Функция ОписаниеКлючаЗаписи(ТипИлиПолноеИмя) Экспорт ОписаниеКлюча = Новый Структура("МассивПолей, СтрокаПолей", Новый Массив, ""); @@ -291,6 +127,12 @@ КонецФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - Булево - Истина +// Функция ТипыПоляТаблицы(ПолноеИмяПоля) Экспорт ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяПоля); @@ -315,7 +157,12 @@ // ИменаПодписок - Строка - многострочная строка, содержащая // строки начала имени подписки. // -Функция ТипыОбъектовВПодпискахНаСобытия(ИменаПодписок, МассивПустыхСсылок = Ложь) Экспорт +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - Булево +// +Функция ТипыОбъектовВПодпискахНаСобытия(ИменаПодписок) Экспорт ТипыОбъектов = Новый Соответствие; @@ -340,21 +187,15 @@ КонецЦикла; - Если Не МассивПустыхСсылок Тогда - Возврат Новый ФиксированноеСоответствие(ТипыОбъектов); - КонецЕсли; - - Массив = Новый Массив; - Для каждого КлючИЗначение Из ТипыОбъектов Цикл - Массив.Добавить(УправлениеДоступомСлужебный.ПустаяСсылкаОбъектаМетаданных( - КлючИЗначение.Ключ)); - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Массив); + Возврат Новый ФиксированноеСоответствие(ТипыОбъектов); КонецФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// ХранилищеЗначения +// Функция ТаблицаПустогоНабораЗаписей(ПолноеИмяРегистра) Экспорт Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяРегистра); @@ -364,6 +205,10 @@ КонецФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// ХранилищеЗначения Из ТаблицаЗначений +// Функция ТаблицаПустыхСсылокУказанныхТипов(ПолноеИмяРеквизита) Экспорт ОписаниеТипов = Метаданные.НайтиПоПолномуИмени(ПолноеИмяРеквизита).Тип; @@ -383,6 +228,12 @@ КонецФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - ЛюбаяСсылка +// Функция СоответствиеПустыхСсылокУказаннымТипамСсылок(ПолноеИмяРеквизита) Экспорт ОписаниеТипов = Метаданные.НайтиПоПолномуИмени(ПолноеИмяРеквизита).Тип; @@ -401,6 +252,12 @@ КонецФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - Строка +// Функция КодыТиповСсылок(ПолноеИмяРеквизита) Экспорт ОписаниеТипов = Метаданные.НайтиПоПолномуИмени(ПолноеИмяРеквизита).Тип; @@ -431,12 +288,18 @@ КонецФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - Строка +// Функция КодыПеречислений() Экспорт КодыПеречислений = Новый Соответствие; Для каждого ТипЗначенияДоступа Из Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип.Типы() Цикл - МетаданныеТипа = Метаданные.НайтиПоТипу(ТипЗначенияДоступа); + МетаданныеТипа = Метаданные.НайтиПоТипу(ТипЗначенияДоступа); // ОбъектМетаданныхПеречисление Если МетаданныеТипа = Неопределено ИЛИ НЕ Метаданные.Перечисления.Содержит(МетаданныеТипа) Тогда Продолжить; КонецЕсли; @@ -446,35 +309,26 @@ КонецЦикла; КонецЦикла; - Возврат Новый ФиксированноеСоответствие(КодыПеречислений);; + Возврат Новый ФиксированноеСоответствие(КодыПеречислений); КонецФункции -// Только для внутреннего использования. +// См. УправлениеДоступомСлужебный.ТипыГруппИЗначенийВидовДоступа +// +// Возвращаемое значение: +// см. УправлениеДоступомСлужебный.ТипыГруппИЗначенийВидовДоступа +// Функция ТипыГруппИЗначенийВидовДоступа() Экспорт - СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); - - ТипыГруппИЗначенийВидовДоступа = Новый ТаблицаЗначений; - ТипыГруппИЗначенийВидовДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); - ТипыГруппИЗначенийВидовДоступа.Колонки.Добавить("ТипГруппИЗначений", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); - - Для каждого КлючИЗначение Из СвойстваВидовДоступа.ПоТипамГруппИЗначений Цикл - Строка = ТипыГруппИЗначенийВидовДоступа.Добавить(); - Строка.ВидДоступа = КлючИЗначение.Значение.Ссылка; - - Типы = Новый Массив; - Типы.Добавить(КлючИЗначение.Ключ); - ОписаниеТипа = Новый ОписаниеТипов(Типы); - - Строка.ТипГруппИЗначений = ОписаниеТипа.ПривестиЗначение(Неопределено); - КонецЦикла; - - Возврат ТипыГруппИЗначенийВидовДоступа; + Возврат УправлениеДоступомСлужебный.ТипыГруппИЗначенийВидовДоступа(); КонецФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// ОписаниеТипов +// Функция ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав() Экспорт Типы = Новый Массив; @@ -493,42 +347,29 @@ КонецФункции -// Только для внутреннего использования. +// См. УправлениеДоступомСлужебный.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав() +// +// Возвращаемое значение: +// ХранилищеЗначения +// Функция ТипыЗначенийВидовДоступаИВладельцевНастроекПрав() Экспорт - ТипыЗначенийВидовДоступаИВладельцевНастроекПрав = Новый ТаблицаЗначений; - - ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Колонки.Добавить("ВидДоступа", - УправлениеДоступомСлужебныйПовтИсп.ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав()); - - ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Колонки.Добавить("ТипЗначений", - УправлениеДоступомСлужебныйПовтИсп.ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав()); - - ТипыЗначенийВидовДоступа = ТипыЗначенийВидовДоступа(); - - Для каждого Строка Из ТипыЗначенийВидовДоступа Цикл - ЗаполнитьЗначенияСвойств(ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Добавить(), Строка); - КонецЦикла; - - ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваДляНастройкиПравОбъектов(); - ВладельцыПрав = ВозможныеПрава.ПоТипамСсылок; - - Для каждого КлючИЗначение Из ВладельцыПрав Цикл - - Типы = Новый Массив; - Типы.Добавить(КлючИЗначение.Ключ); - ОписаниеТипа = Новый ОписаниеТипов(Типы); - - Строка = ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Добавить(); - Строка.ВидДоступа = ОписаниеТипа.ПривестиЗначение(Неопределено); - Строка.ТипЗначений = ОписаниеТипа.ПривестиЗначение(Неопределено); - КонецЦикла; - - Возврат Новый ХранилищеЗначения(ТипыЗначенийВидовДоступаИВладельцевНастроекПрав); + Возврат Новый ХранилищеЗначения(УправлениеДоступомСлужебный.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав()); КонецФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// Структура: +// * ДатаОбновления - Дата +// * Таблица - ТаблицаЗначений: +// ** Таблица - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// ** Право - Строка - имя права +// ** ВидДоступа - СправочникСсылка +// ** Представление - Строка - представление вида доступа +// Функция ВидыОграниченийПравОбъектовМетаданных() Экспорт Возврат Новый Структура("ДатаОбновления, Таблица", '00010101'); @@ -536,6 +377,10 @@ КонецФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// Булево +// Функция КонстантаОграничиватьДоступНаУровнеЗаписей() Экспорт Возврат Константы.ОграничиватьДоступНаУровнеЗаписей.Получить(); @@ -544,12 +389,20 @@ #Область УниверсальноеОграничение +// Возвращаемое значение: +// Булево +// Функция КонстантаОграничиватьДоступНаУровнеЗаписейУниверсально() Экспорт Возврат Константы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Получить(); КонецФункции +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - Массив из СправочникСсылка +// Функция ПустыеСсылкиТиповЗначенийДоступаПоТипамГруппИЗначений() Экспорт СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); @@ -579,6 +432,11 @@ КонецФункции +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Тип +// * Значение - Булево +// Функция ТиповСсылокВедущихОбъектов() Экспорт Типы = Новый Соответствие; @@ -595,6 +453,9 @@ КонецФункции +// Возвращаемое значение: +// ОписаниеТипов +// Функция ОписаниеТиповСсылокДопустимыхОбъектов() Экспорт ОписаниеТипов = Новый ОписаниеТипов(ПланыОбмена.ТипВсеСсылки()); @@ -629,6 +490,13 @@ КонецФункции +// Возвращаемое значение: +// ФиксированноеСоответствие: +// * Ключ - Строка - полное имя списка (таблицы). +// * Значение - Булево - Истина - текст ограничения в модуле менеджера, +// Ложь - текст ограничения в этом переопределяемом +// модуле в процедуре ПриЗаполненииОграниченияДоступа. +// Функция СпискиСОграничением() Экспорт Списки = Новый Соответствие; @@ -804,7 +672,7 @@ Если СтрДлина(Измерение.Имя) <> 5 Или Не СтрНачинаетсяС(Измерение.Имя, "Поле") Тогда Прервать; КонецЕсли; - Если Прав(Измерение.Имя, 1) <> Строка(ПоследнийНомерПоля + 1) Тогда + Если Прав(Измерение.Имя, 1) <> XMLСтрока(ПоследнийНомерПоля + 1) Тогда Прервать; КонецЕсли; ПоследнийНомерПоля = ПоследнийНомерПоля + 1; @@ -832,12 +700,18 @@ КонецФункции +// Возвращаемое значение: +// см. УправлениеДоступомСлужебный.СинтаксисЯзыка +// Функция СинтаксисЯзыка() Экспорт Возврат УправлениеДоступомСлужебный.СинтаксисЯзыка(); КонецФункции +// Возвращаемое значение: +// см. УправлениеДоступомСлужебный.УзлыДляПроверкиДоступности +// Функция УзлыДляПроверкиДоступности(Список, ЭтоСписокИсключений) Экспорт Возврат УправлениеДоступомСлужебный.УзлыДляПроверкиДоступности(Список, ЭтоСписокИсключений); @@ -948,6 +822,10 @@ КонецФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// Строка +// Функция УточнениеПланаЗапроса(Хеш, ДлинаХеша) Экспорт Биты = Новый Массив; @@ -990,29 +868,6 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Функция ТипыЗначенийВидовДоступа() - - СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); - - ТипыЗначенийВидовДоступа = Новый ТаблицаЗначений; - ТипыЗначенийВидовДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); - ТипыЗначенийВидовДоступа.Колонки.Добавить("ТипЗначений", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); - - Для каждого КлючИЗначение Из СвойстваВидовДоступа.ПоТипамЗначений Цикл - Строка = ТипыЗначенийВидовДоступа.Добавить(); - Строка.ВидДоступа = КлючИЗначение.Значение.Ссылка; - - Типы = Новый Массив; - Типы.Добавить(КлючИЗначение.Ключ); - ОписаниеТипа = Новый ОписаниеТипов(Типы); - - Строка.ТипЗначений = ОписаниеТипа.ПривестиЗначение(Неопределено); - КонецЦикла; - - Возврат ТипыЗначенийВидовДоступа; - -КонецФункции - Процедура ДобавитьПустуюСсылкуТипаЗначений(ПустыеСсылкиПоТипам, ТипГруппИЗначений, ТипЗначений) Если ТипГруппИЗначений = Тип("Неопределено") Тогда diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl index 55650d564..405cefc0f 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl @@ -331,6 +331,7 @@ // Возвращает расписание регламентного задания по умолчанию. // Используется вместо свойства "ОбъектМетаданных: РегламентноеЗадание.Расписание", // т.к. оно всегда имеет значение Неопределено. +// Функция РасписаниеПоУмолчанию(МетаданныеРегламентногоЗадания) Расписание = Новый РасписаниеРегламентногоЗадания; Расписание.ПериодПовтораДней = 1; diff --git a/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl b/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl index 3094f405c..fafe3db8d 100644 --- a/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl @@ -18,6 +18,7 @@ // // Возвращаемое значение: // Структура - значения настроек колонтитулов. +// Функция НастройкиКолонтитулов() Экспорт Перем Настройки; @@ -116,7 +117,7 @@ // Возвращает значения свойств колонтитула. // // Параметры: -// НастройкиКолонтитула - см. ПустыеНастройкиКолонтитулов(). +// НастройкиКолонтитула - см. ПустыеНастройкиКолонтитулов // НазваниеОтчета - Строка - значение, которое будет подставлено в шаблон [&НазваниеОтчета]. // Пользователь - СправочникСсылка.Пользователи - значение, которое будет подставлено в шаблон [&Пользователь]. // @@ -207,7 +208,7 @@ // Определяет не являются ли настройки стандартными и/или пустыми. // // Параметры: -// Настройки - см. НастройкиКолонтитулов(). +// Настройки - см. НастройкиКолонтитулов // // Возвращаемое значение: // Структура - сведения о состоянии настроек колонтитулов: diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index 663b3277f..bc2c57df2 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -15,9 +15,11 @@ // // Параметры: // СсылкиИлиОбъекты - Массив - владельцы контактной информации. -// ТипыКонтактнойИнформации - Массив, ПеречислениеСсылка.ТипыКонтактнойИнформации - Если указаны, то будет получена +// ТипыКонтактнойИнформации - Массив +// - ПеречислениеСсылка.ТипыКонтактнойИнформации - если указаны, то будет получена // контактная информация только этих типов. -// ВидыКонтактнойИнформации - Массив, СправочникСсылка.ВидыКонтактнойИнформации - Если указаны, то будет возвращена +// ВидыКонтактнойИнформации - Массив +// - СправочникСсылка.ВидыКонтактнойИнформации - если указаны, то будет возвращена // контактная информация только этих видов контактной информации. // Дата - Дата - необязательный, дата с которой действует запись контактной информации, // используется при хранении истории изменения контактной информации. @@ -26,13 +28,13 @@ // // Возвращаемое значение: // ТаблицаЗначений - таблица с контактной информацией объектов содержащая колонки: -// * Объект - Ссылка - Владелец контактной информации. -// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. +// * Объект - Ссылка - владелец контактной информации. +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации. +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. // * Значение - Строка - контактная информация во внутреннем формате JSON. -// * Представление - Строка - Представление контактной информации. -// * Дата - Дата - Дата, с которой действует запись контактной информации. -// * ИдентификаторСтрокиТабличнойЧасти - Число - Идентификатор строки этой табличной части +// * Представление - Строка - представление контактной информации. +// * Дата - Дата - дата, с которой действует запись контактной информации. +// * ИдентификаторСтрокиТабличнойЧасти - Число - идентификатор строки этой табличной части // * ЗначенияПолей - Строка - устаревший XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. Для // обратной совместимости. // @@ -94,25 +96,26 @@ // использовать функцию ПредставлениеКонтактнойИнформацииОбъекта. // // Параметры: -// СсылкаИлиОбъект - ЛюбаяСсылка, Объект - Ссылка или объект-владелец контактной информации (организация, -// контрагент, партнер и т.д.). -// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Необязательный, отбор по виду контактной информации. +// СсылкаИлиОбъект - ЛюбаяСсылка +// - Объект - ссылка или объект-владелец контактной информации (организация, +// контрагент, партнер и т.д.). +// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - необязательный, отбор по виду контактной информации. // Дата - Дата - необязательный, дата с которой действует запись контактной информации, // используется при хранении истории изменения контактной информации. // Если владелец хранит историю изменений, то при несоответствии параметра // дате будет вызвано исключение. -// ТолькоПредставление - Булево - Если Истина, то возвращает только представление, иначе таблицу значений. +// ТолькоПредставление - Булево - если Истина, то возвращает только представление, иначе таблицу значений. // Для получения представления рекомендуется использовать функцию ПредставлениеКонтактнойИнформацииОбъекта. // // Возвращаемое значение: // ТаблицаЗначений - таблица с контактной информацией объекта содержащая колонки: -// * Объект - Ссылка - Владелец контактной информации. -// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. +// * Объект - Ссылка - владелец контактной информации. +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации. +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. // * Значение - Строка - контактная информация во внутреннем формате JSON. -// * Представление - Строка - Представление контактной информации. +// * Представление - Строка - представление контактной информации. // * Дата - Дата - дата, с которой действует запись контактной информации. -// * ИдентификаторСтрокиТабличнойЧасти - Число - Идентификатор строки этой табличной части +// * ИдентификаторСтрокиТабличнойЧасти - Число - идентификатор строки этой табличной части // * ЗначенияПолей - Строка - устаревший XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. Для // обратной совместимости. // @@ -120,10 +123,9 @@ ТипОбъекта = ТипЗнч(СсылкаИлиОбъект); Если НЕ ОбщегоНазначения.ЭтоСсылка(ТипОбъекта) Тогда - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипОбъекта); + Результат = НоваяКонтактнаяИнформация(); - Если МетаданныеОбъекта <> Неопределено - И МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") <> Неопределено Тогда + Если СодержитКонтактнуюИнформацию(ТипОбъекта) Тогда Для каждого СтрокаКонтактнойИнформации Из СсылкаИлиОбъект.КонтактнаяИнформация Цикл Если ВидКонтактнойИнформации = Неопределено @@ -188,21 +190,21 @@ // Возвращает представление контактной информации объекта. // // Параметры: -// СсылкаИлиОбъект - Произвольный - Владелец контактной информации. -// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации. -// Разделитель - Строка - Разделитель, который добавляется в представление между записями контактной информации. +// СсылкаИлиОбъект - Произвольный - владелец контактной информации. +// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации. +// Разделитель - Строка - разделитель, который добавляется в представление между записями контактной информации. // По умолчанию это запятая с последующим пробелом, для исключения // пробела необходимо использовать признак БезПробелов у параметра ДополнительныеПараметры. // Дата - Дата - дата, с которой действует запись контактной информации. Если контактная информация // хранит историю изменения, то передача даты обязательна. -// ДополнительныеПараметры - Структура - Необязательные параметры для формирования представления контактной информации. -// * ТолькоПервая - Булево - Если Истина, то будет возвращено представление только основной(первой) записи +// ДополнительныеПараметры - Структура - необязательные параметры для формирования представления контактной информации: +// * ТолькоПервая - Булево - если Истина, то будет возвращено представление только основной(первой) записи // контактной информации. По умолчанию - Ложь; -// * БезПробелов - Булево - Если Истина, то после разделителя не будет автоматически добавляться пробел. +// * БезПробелов - Булево - если Истина, то после разделителя не будет автоматически добавляться пробел. // По умолчанию - Ложь; // // Возвращаемое значение: -// Строка - Сформированное представление контактной информации. +// Строка - сформированное представление контактной информации. // Функция ПредставлениеКонтактнойИнформацииОбъекта(СсылкаИлиОбъект, ВидКонтактнойИнформации, Разделитель = ",", Дата = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -248,11 +250,11 @@ // Формирует новую таблицу контактной информации. // // Параметры: -// КолонкаОбъект - Булево - Если Истина, то таблица будет содержать колонку "Объект". +// КолонкаОбъект - Булево - если Истина, то таблица будет содержать колонку "Объект". // Это нужно, если в таблице необходимо хранить контактной информацию для нескольких объектов. // // Возвращаемое значение: -// ТаблицаЗначений - с колонками: +// ТаблицаЗначений: // * Объект - ЛюбаяСсылка - владелец контактной информации. // * Вид - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации. // * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. @@ -286,14 +288,17 @@ // Добавляет контактную информацию к объекту по представлению или JSON. // // Параметры: -// СсылкаИлиОбъект - СправочникСсылка, ДокументСсылка, СправочникОбъект, ДокументОбъект - ссылка или объект владельца -// содержащего контактную информацию. Для ссылки после добавления контактной -// информации владелец будет записан. Если передан объект, то контактная -// информация будет добавлена без записи. Для сохранения изменений объект -// необходимо будет записать отдельно. +// СсылкаИлиОбъект - СправочникСсылка +// - ДокументСсылка +// - СправочникОбъект +// - ДокументОбъект - ссылка или объект владельца +// содержащего контактную информацию. Для ссылки после добавления контактной +// информации владелец будет записан. Если передан объект, то контактная +// информация будет добавлена без записи. Для сохранения изменений объект +// необходимо будет записать отдельно. // ЗначениеИлиПредставление - Строка - представление, JSON или XML соответствующее XDTO-пакету КонтактнаяИнформация // или Адрес. -// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Вид добавляемой контактной информации. +// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид добавляемой контактной информации. // Дата - Дата - дата, с которой будет действовать запись контактной информации. // Требуется для контактной информации, у которой хранится история изменений. // Если значение не указано, то принимается текущая дата сеанса. @@ -323,7 +328,7 @@ // // Параметры: // КонтактнаяИнформация - см. УправлениеКонтактнойИнформацией.НоваяКонтактнаяИнформация -// Замещать - Булево - Если Истина(по умолчанию), то будет заменена вся +// Замещать - Булево - если Истина(по умолчанию), то будет заменена вся // вся контактная информация по переданном виду контактной информации. // Если Ложь, то запись будет добавлена. Если вид контактной информации не разрешает // ввод нескольких значений, а контактная информация объекта уже содержит запись, @@ -341,10 +346,10 @@ Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл ПараметрыКонтактнойИнформации = ВладельцыКонтактнойИнформации[СтрокаКонтактнойИнформации.Объект]; Если ПараметрыКонтактнойИнформации = Неопределено Тогда - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(СтрокаКонтактнойИнформации.Объект)); - Если МетаданныеОбъекта = Неопределено - Или МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");; + Если Не СодержитКонтактнуюИнформацию(СтрокаКонтактнойИнформации.Объект) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Объект %1 не подключен к подсистеме ""Контактная информация""'"), Строка(СтрокаКонтактнойИнформации.Объект)); + ВызватьИсключение ТекстОшибки; КонецЕсли; ПараметрыКонтактнойИнформации = Новый Структура; @@ -377,16 +382,19 @@ // Добавляет или изменяет контактную информацию у владельца контактной информации. // // Параметры: -// СсылкаИлиОбъект - СправочникСсылка, ДокументСсылка, СправочникОбъект, ДокументОбъект - ссылка или объект владелец -// контактной информации. Для ссылки после добавления контактной информации -// владелец будет записан. Если передан объект, то контактная информация будет -// добавлена без записи. Для сохранения изменений объект необходимо будет -// записать отдельно. +// СсылкаИлиОбъект - СправочникСсылка +// - ДокументСсылка +// - СправочникОбъект +// - ДокументОбъект - ссылка или объект владелец +// контактной информации. Для ссылки после добавления контактной информации +// владелец будет записан. Если передан объект, то контактная информация будет +// добавлена без записи. Для сохранения изменений объект необходимо будет +// записать отдельно. // КонтактнаяИнформация - ТаблицаЗначений - таблица, содержащая контактную информацию // Описание колонок см. функцию НоваяКонтактнаяИнформация. // Важно! Если передана пустая таблица значений и указан режим замещения, то // произойдет очистка всей контактной информации владельца контактной информации. -// Замещать - Булево - Если Истина(по умолчанию), то будет заменена +// Замещать - Булево - если Истина(по умолчанию), то будет заменена // вся контактная информация по переданном виду контактной информации. // Если Ложь, то запись будет добавлена. Если вид контактной информации // не разрешает ввод нескольких значений, а контактная информация объекта @@ -400,9 +408,10 @@ ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект.Ссылка)); КонецЕсли; - Если ОбъектМетаданных = Неопределено - Или ОбъектМетаданных.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");; + Если Не СодержитКонтактнуюИнформацию(СсылкаИлиОбъект.Ссылка) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Объект %1 не подключен к подсистеме ""Контактная информация""'"), ОбъектМетаданных.Представление()); + ВызватьИсключение ТекстОшибки; КонецЕсли; Если ОбщегоНазначения.ЗначениеСсылочногоТипа(СсылкаИлиОбъект) Тогда @@ -423,7 +432,77 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Работа с контактной информацией из других подсистем. +// Телефонные номера + +// Возвращает сведения о телефоне или факсе. +// +// Параметры: +// КонтактнаяИнформация - Строка - телефон во внутреннем формате JSON или в XML, соответствующем XDTO-пакету контактная +// информация. +// - Неопределено - конструктор, возвращает список незаполненных полей телефона. +// +// Возвращаемое значение: +// Структура: +// * Представление - Строка - полное представление телефона с добавочным номером и комментарием, например, "+7 495 +// 1234567 (+12) Звонить после 18:00". +// * КодСтраны - Строка - код страны. Например, +7. +// * КодГорода - Строка - код города. Например, 495. +// * НомерТелефона - Строка - номер телефона. Например, 1234567. +// * Добавочный - Строка - добавочный номер телефона. Например, +12. +// * Комментарий - Строка - комментарий к номеру телефона. Например, Звонить после 18:00. +// +Функция СведенияОТелефоне(КонтактнаяИнформация = Неопределено) Экспорт + + Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейТелефона(); + Если КонтактнаяИнформация = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + ТелефонПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Телефон); + + Результат.Представление = Строка(ТелефонПоПолям.Value); + Результат.КодСтраны = Строка(ТелефонПоПолям.CountryCode); + Результат.КодГорода = Строка(ТелефонПоПолям.AreaCode); + Результат.НомерТелефона = Строка(ТелефонПоПолям.Number); + Результат.Добавочный = Строка(ТелефонПоПолям.ExtNumber); + Результат.Комментарий = Строка(ТелефонПоПолям.Comment); + + Возврат Результат; + +КонецФункции + +// Возвращает строку с номером телефона без кода и дополнительного номера. +// +// Параметры: +// КонтактнаяИнформация - Строка - строка JSON или XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация. +// +// Возвращаемое значение: +// Строка - номер телефона. +// +Функция НомерТелефонаКонтактнойИнформации(Знач КонтактнаяИнформация) Экспорт + + Если ПустаяСтрока(КонтактнаяИнформация) Тогда + Возврат ""; + КонецЕсли; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация); + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Телефон); + КонецЕсли; + + Если КонтактнаяИнформацияСтруктурой.Свойство("Number") Тогда + + Возврат СокрЛП(КонтактнаяИнформацияСтруктурой.Number); + + КонецЕсли; + + ВызватьИсключение НСтр("ru = 'Невозможно определить номер, ожидается номер телефона или факса.'"); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Преобразование контактной информации // Преобразует входящие форматы контактной информации во внутренний формат JSON. // @@ -436,7 +515,8 @@ // см. РаботаСАдресами.ПоляАдреса (для адресов содержащих поля с национальной спецификой), // см. РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу // (для других типов контактной информации содержащих поля с национальной спецификой). -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации - +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации +// - ПеречислениеСсылка.ТипыКонтактнойИнформации - // используется для определения типа контактной информации, если его невозможно определить из // переданной контактной информации в параметре КонтактнаяИнформация. // @@ -459,17 +539,21 @@ // Преобразует все входящие форматы контактной информации в XML. // // Параметры: -// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - описание полей контактной информации. +// ЗначенияПолей - Строка +// - Структура +// - Соответствие +// - СписокЗначений - описание полей контактной информации. // XML должен соответствовать XDTO-пакету КонтактнаяИнформация или Адрес. // Структура, Соответствие, СписокЗначений должен содержать поля в соответствии со структурой // XDTO пакетов КонтактнаяИнформация или Адрес(для конфигурации с поддержкой специфики РФ). -// Представление - Строка - Представление контактной информации. Используется, если невозможно определить +// Представление - Строка - представление контактной информации. Используется, если невозможно определить // представление из параметра ЗначенияПолей (например, отсутствует поле Представление). -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации - +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации +// - ПеречислениеСсылка.ТипыКонтактнойИнформации - // Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей. // // Возвращаемое значение: -// Строка - Контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. +// Строка - контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. // Функция КонтактнаяИнформацияВXML(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйВид = Неопределено) Экспорт @@ -480,6 +564,88 @@ КонецФункции +// Преобразует контактную информацию, хранящуюся в поле ЗначениеПолей, в формат JSON и сохраняет его +// в поле колонки Значение таблицы КонтактнаяИнформация. +// Если колонки ЗначениеПолей и Значение содержат пустые строки, то JSON будет сформирована по представлению. +// В случае, когда параметр СсылкаИлиОбъект содержит объект контактной информации, +// то для сохранения изменений преобразования необходимо будет записать объект отдельно. +// Если передана ссылка, то после конвертирования хотя бы одной строки контактной информации владелец будет записан. +// +// Параметры: +// СсылкаИлиОбъект - ОпределяемыеТипы.ВладелецКонтактнойИнформации - ссылка на объект с контактной информацией. +// - СправочникОбъекта +// - ДокументОбъект - объект-владелец контактной информации (организация, +// контрагент, партнер и т.д.). +// +// Возвращаемое значение: +// Булево - если, Истина, то контактная информация был преобразована в JSON. +// +Функция ОбновитьКонтактнуюИнформациюОбъекта(СсылкаИлиОбъект) Экспорт + + ОбъектИзменен = Ложь; + + ТипОбъекта = ТипЗнч(СсылкаИлиОбъект); + + Если Не СодержитКонтактнуюИнформацию(ТипОбъекта) Тогда + Возврат ОбъектИзменен; + КонецЕсли; + + ОбъектИзменен = УправлениеКонтактнойИнформациейСлужебный.ПреобразоватьКонтактнуюИнформациюВФорматJSON( + СсылкаИлиОбъект, ТипОбъекта); + + Возврат ОбъектИзменен; + +КонецФункции + +// Возвращает объекты, хранящие контактную информацию в устаревших форматах XML или Ключ-Значение, +// и требующие преобразования контактной информации в современный формат JSON. +// +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных - объект с контактной информации у которого требуется определить элемент +// содержащие незаполненные поля в JSON. +// РазмерПорции - Число - количество объектов, возвращаемых за один вызов. Если не указано, то будут выбраны все объекты. +// +// Возвращаемое значение: +// Массив - ссылки на объекты. +// +Функция ОбъектыТребующиеОбновленияКонтактнойИнформации(ОбъектМетаданных, РазмерПорции = Неопределено) Экспорт + + Если ОбъектМетаданных.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда + Возврат Новый Массив; + КонецЕсли; + + ПолноеИмяТабличнойЧасти = ОбъектМетаданных.ПолноеИмя() + ".КонтактнаяИнформация"; + + Запрос = Новый Запрос; + ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТабличнаяЧастьКонтактнаяИнформация.Ссылка КАК Ссылка + |ИЗ + | &ТаблицаКонтактнойИнформации КАК ТабличнаяЧастьКонтактнаяИнформация + |ГДЕ + | ВЫРАЗИТЬ(ТабличнаяЧастьКонтактнаяИнформация.Значение КАК СТРОКА(1)) = """" "; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТаблицаКонтактнойИнформации", ПолноеИмяТабличнойЧасти); + Если ТипЗнч(РазмерПорции) = Тип("Число") Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ РАЗЛИЧНЫЕ", "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ " + Формат(РазмерПорции,"ЧРГ=' '; ЧГ=0")); + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат Новый Массив; + КонецЕсли; + + Результат = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с контактной информацией из других подсистем. + // Возвращает тип контактной информации. // // Параметры: @@ -508,12 +674,13 @@ // Для адресов, введенных в свободной форме, корректное преобразование не гарантируется. // // Параметры: -// Представление - Строка - Строковое представление контактной информации, выводимое пользователю. -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, -// Структура - Вид или тип контактной информации. +// Представление - Строка - строковое представление контактной информации, выводимое пользователю. +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации +// - ПеречислениеСсылка.ТипыКонтактнойИнформации +// - Структура - вид или тип контактной информации. // // Возвращаемое значение: -// Строка - Контактная информация в виде JSON. +// Строка - контактная информация в виде JSON. // Функция КонтактнаяИнформацияПоПредставлению(Представление, ОжидаемыйВид) Экспорт @@ -548,7 +715,7 @@ // Вычисляет, что адрес был введен в свободной форме. // // Параметры: -// КонтактнаяИнформация - Строка - Строка JSON или XML контактной информации, соответствующая XDTO-пакетам +// КонтактнаяИнформация - Строка - строка JSON или XML контактной информации, соответствующая XDTO-пакетам // КонтактнаяИнформация или Адрес. // // Возвращаемое значение: @@ -570,7 +737,7 @@ // Возвращает комментарий контактной информации. // // Параметры: -// КонтактнаяИнформация - Строка - Строка JSON или XML или объект XDTO, соответствующие XDTO-пакетам +// КонтактнаяИнформация - Строка - строка JSON или XML или объект XDTO, соответствующие XDTO-пакетам // КонтактнаяИнформация или Адрес. // // Возвращаемое значение: @@ -603,8 +770,9 @@ // Устанавливает новый комментарий для контактной информации. // // Параметры: -// КонтактнаяИнформация - Строка, ОбъектXDTO - строка JSON или XML контактной информации, соответствующая XDTO -// пакетам КонтактнаяИнформация или Адрес. +// КонтактнаяИнформация - Строка +// - ОбъектXDTO - строка JSON или XML контактной информации, соответствующая XDTO +// пакетам КонтактнаяИнформация или Адрес. // Комментарий - Строка - новое значение комментария. // Процедура УстановитьКомментарийКонтактнойИнформации(КонтактнаяИнформация, Знач Комментарий) Экспорт @@ -613,13 +781,9 @@ Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда - КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(КонтактнаяИнформация); - - Если ТипЗнч(КонтактнаяИнформацияСтруктурой) = Тип("Структура") И КонтактнаяИнформацияСтруктурой.Свойство("comment") Тогда - КонтактнаяИнформацияСтруктурой.comment = Комментарий; - КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияСтруктурой); - КонецЕсли; - + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация, Неопределено); + КонтактнаяИнформацияСтруктурой.comment = Комментарий; + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияСтруктурой); Возврат; ИначеЕсли ЭтоСтрока И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда @@ -638,21 +802,23 @@ // Возвращает информацию о стране адреса. // Если переданная строка не содержит информации об адресе, то будет вызвано исключение. // Если передана пустая строка, то возвращается пустая структура. -// Если страна не найдена в справочнике, но найдена в классификаторе стран, то поле Ссылка результата не будет заполнено. -// Если страна не найдена ни в адресе, ни в классификаторе стран, то будет заполнено только поле Наименование. +// Если страна не существует в справочнике, но есть в классификаторе стран, то поле Ссылка результата не будет заполнено. +// Если страна не существует в классификаторе стран, то будет заполнено только поле Наименование. // // Параметры: -// Адрес - Структура, Строка - адрес в формате JSON или строка XML соответствующая XDTO-пакетам КонтактнаяИнформация -// или Адрес. +// Адрес - Структура +// - Строка - адрес в формате JSON или строка XML соответствующая XDTO-пакетам КонтактнаяИнформация +// или Адрес. // // Возвращаемое значение: // Структура - описание страны адреса. Содержит поля: -// * Ссылка - СправочникСсылка.СтраныМира, Неопределено - Ссылка на элемент справочника страны мира. -// * Наименование - Строка - Наименование страны. -// * Код - Строка - Код страны. -// * НаименованиеПолное - Строка - Полное наименование страны. -// * КодАльфа2 - Строка - Двузначный буквенный код страны Альфа-2. -// * КодАльфа3 - Строка - Трехзначный буквенный код страны Альфа-3. +// * Ссылка - СправочникСсылка.СтраныМира +// - Неопределено - ссылка на элемент справочника страны мира. +// * Наименование - Строка - наименование страны. +// * Код - Строка - код страны. +// * НаименованиеПолное - Строка - полное наименование страны. +// * КодАльфа2 - Строка - двузначный буквенный код страны Альфа-2. +// * КодАльфа3 - Строка - трехзначный буквенный код страны Альфа-3. // Функция СтранаАдресаКонтактнойИнформации(Знач Адрес) Экспорт @@ -685,10 +851,10 @@ // Возвращает домен сетевого адреса для веб-ссылки или адреса электронной почты. // // Параметры: -// КонтактнаяИнформация - Строка - Строка JSON или XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация. +// КонтактнаяИнформация - Строка - строка JSON или XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация. // // Возвращаемое значение: -// Строка - Домен адреса. +// Строка - домен адреса. // Функция ДоменАдресаКонтактнойИнформации(Знач КонтактнаяИнформация) Экспорт @@ -726,87 +892,27 @@ ВызватьИсключение НСтр("ru = 'Невозможно определить домен, ожидается электронная почта или веб-ссылка.'"); КонецФункции -// Возвращает сведения о телефоне или факсе. -// -// Параметры: -// КонтактнаяИнформация - Строка - Телефон во внутреннем формате JSON или в XML, соответствующем XDTO-пакету контактная -// информация. -// - Неопределено - Конструктор, возвращает список незаполненных полей телефона. -// -// Возвращаемое значение: -// Структура - сведения о телефоне: -// * Представление - Строка - представление телефона. -// * КодСтраны - Строка - Код страны. Например, +7. -// * КодГорода - Строка - Код города. Например, 495. -// * НомерТелефона - Строка - Номер телефона. -// * Добавочный - Строка - Добавочный номер телефона. -// * Комментарий - Строка - Комментарий к номеру телефона. -// -Функция СведенияОТелефоне(КонтактнаяИнформация = Неопределено) Экспорт - - Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейТелефона(); - Если КонтактнаяИнформация = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - ТелефонПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Телефон); - - Результат.Представление = Строка(ТелефонПоПолям.Value); - Результат.КодСтраны = Строка(ТелефонПоПолям.CountryCode); - Результат.КодГорода = Строка(ТелефонПоПолям.AreaCode); - Результат.НомерТелефона = Строка(ТелефонПоПолям.Number); - Результат.Добавочный = Строка(ТелефонПоПолям.ExtNumber); - Результат.Комментарий = Строка(ТелефонПоПолям.Comment); - - Возврат Результат; - -КонецФункции - -// Возвращает строку с номером телефона без кода и дополнительного номера. -// -// Параметры: -// КонтактнаяИнформация - Строка - Строка JSON или XML контактной информации соответствующая XDTO пакету КонтактнаяИнформация. -// -// Возвращаемое значение: -// Строка - Номер телефона. -// -Функция НомерТелефонаКонтактнойИнформации(Знач КонтактнаяИнформация) Экспорт - - Если ПустаяСтрока(КонтактнаяИнформация) Тогда - Возврат ""; - КонецЕсли; - - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда - КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация); - ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда - КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Телефон); - КонецЕсли; - - Если КонтактнаяИнформацияСтруктурой.Свойство("Number") Тогда - - Возврат СокрЛП(КонтактнаяИнформацияСтруктурой.Number); - - КонецЕсли; - - ВызватьИсключение НСтр("ru = 'Невозможно определить номер, ожидается телефона или факс.'"); - -КонецФункции - // Сравнивает два экземпляра контактной информации. // // Параметры: -// Данные1 - ОбъектXTDO - Объект с контактной информацией. -// - Строка - Контактная информация в формате XML. -// - Структура - Описание контактной информацию. Ожидаются поля: -// * ЗначенияПолей - Строка, Структура, СписокЗначений, Соответствие - поля контактной информации. -// * Представление - Строка - Представление. Используется в случае, если не удалось вычислить +// Данные1 - ОбъектXTDO - объект с контактной информацией. +// - Строка - контактная информация в формате XML. +// - Структура - описание контактной информацию. Ожидаются поля: +// * ЗначенияПолей - Строка +// - Структура +// - СписокЗначений +// - Соответствие - поля контактной информации. +// * Представление - Строка - представление. Используется в случае, если не удалось вычислить // представление из ЗначенияПолей (отсутствие в них поля Представление). // * Комментарий - Строка - комментарий. Используется в том случае, если не удалось вычислить комментарий // из ЗначенияПолей. -// * ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации, -// ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура - +// * ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации +// - ПеречислениеСсылка.ТипыКонтактнойИнформации +// - Структура - // используется в том случае, если не удалось вычислить тип из ЗначенияПолей. -// Данные2 - ОбъектXTDO, Строка, Структура - аналогично Данные1. +// Данные2 - ОбъектXTDO +// - Строка +// - Структура - аналогично Данные1. // // Возвращаемое значение: // ТаблицаЗначений: - таблица отличающихся полей со следующими колонками: @@ -823,19 +929,19 @@ // Создает временную таблицу с контактной информацией нескольких объектов. // // Параметры: -// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - В менеджере создается временная таблица +// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - в менеджере создается временная таблица // ВТКонтактнаяИнформация с полями: // * Объект - Ссылка - владелец контактной информации. -// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Ссылка на вид контактной информации. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на вид контактной информации. +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. // * ЗначенияПолей - Строка - XML соответствующий XDTO пакету КонтактнаяИнформация или Адрес. -// * Представление - Строка - Представление контактной информации. -// МассивОбъектов - Массив - Владельцы контактной информации. -// ТипыКонтактнойИнформации - Массив - Если указаны, то временная таблица будет содержать только контактную +// * Представление - Строка - представление контактной информации. +// МассивОбъектов - Массив - владельцы контактной информации. +// ТипыКонтактнойИнформации - Массив - если указаны, то временная таблица будет содержать только контактную // информацию этих типов. -// ВидыКонтактнойИнформации - Массив - Если указаны, то временная таблица будет содержать только контактную +// ВидыКонтактнойИнформации - Массив - если указаны, то временная таблица будет содержать только контактную // информацию этих видов. -// Дата - Дата - Дата, с которой действует запись контактной информации, используется при +// Дата - Дата - дата, с которой действует запись контактной информации, используется при // хранении истории изменения контактной информации. Если владелец хранит историю // изменений, то при несоответствии параметра дате будет вызвано исключение. // @@ -864,11 +970,13 @@ СтрокаВременнойТаблицы = "ПОМЕСТИТЬ ВТКонтактнаяИнформация"; Для каждого ОбъектСКонтактнойИнформацией Из ОбъектыСГруппировкойПоТипам Цикл - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ОбъектСКонтактнойИнформацией.Ключ); - Если МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда + + Если Не СодержитКонтактнуюИнформацию(ОбъектСКонтактнойИнформацией.Ключ) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 не содержит контактную информацию.'"), МетаданныеОбъекта.Имя); + НСтр("ru = '%1 не содержит контактную информацию.'"), Строка(ОбъектСКонтактнойИнформацией.Ключ)); КонецЕсли; + + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ОбъектСКонтактнойИнформацией.Ключ); ИмяТаблицы = МетаданныеОбъекта.Имя; Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено Тогда @@ -985,20 +1093,22 @@ // Возвращает данные о стране по справочнику стран мира или классификатору. // // Параметры: -// КодСтраны - Строка, Число - Код страны по классификатору. Если не указано, то поиск по коду не производится. -// Наименование - Строка - Наименование страны, в т.ч. и международное. Если не указано, то поиск по наименованию не производится. +// КодСтраны - Строка +// - Число - код страны по классификатору. Если не указано, то поиск по коду не производится. +// Наименование - Строка - наименование страны, в т.ч. и международное. Если не указано, то поиск по наименованию не производится. // // Возвращаемое значение: // Структура - описание страны. Содержит поля: -// * Ссылка - СправочникСсылка.СтраныМира, Неопределено - Соответствующий элемент справочника Страны мира. -// * Наименование - Строка - Наименование страны. -// * Код - Строка - Код страны. -// * НаименованиеПолное - Строка - Полное наименование страны. -// * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2. -// * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3. -// * УчастникЕАЭС - Булево - Страна-участник ЕАЭС. -// * МеждународноеНаименование - Строка - Международное наименование страны мира -// Неопределено - страна не найдена. +// * Ссылка - СправочникСсылка.СтраныМира +// - Неопределено - соответствующий элемент справочника Страны мира. +// * Наименование - Строка - наименование страны. +// * Код - Строка - код страны. +// * НаименованиеПолное - Строка - полное наименование страны. +// * КодАльфа2 - Строка - двузначный буквенный код страны альфа-2. +// * КодАльфа3 - Строка - трехзначный буквенный код страны альфа-3. +// * УчастникЕАЭС - Булево - страна-участник ЕАЭС. +// * МеждународноеНаименование - Строка - международное наименование страны мира +// Неопределено - страна не существует. // Функция ДанныеСтраныМира(Знач КодСтраны = Неопределено, Знач Наименование = Неопределено) Экспорт Результат = Неопределено; @@ -1076,18 +1186,19 @@ // Возвращает данные страны по коду. // // Параметры: -// Код - Строка, Число - код страны по классификатору. +// Код - Строка +// - Число - код страны по классификатору. // ТипКода - Строка - варианты: КодСтраны (по умолчанию), Альфа2, Альфа3. // // Возвращаемое значение: // Структура - описание страны. Содержит поля: -// * Наименование - Строка - Наименование страны. -// * Код - Строка - Код страны. -// * НаименованиеПолное - Строка - Полное наименование страны. -// * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2. -// * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3. -// * УчастникЕАЭС - Булево - Страна-участник ЕАЭС. -// Неопределено - страна не найдена. +// * Наименование - Строка - наименование страны. +// * Код - Строка - код страны. +// * НаименованиеПолное - Строка - полное наименование страны. +// * КодАльфа2 - Строка - двузначный буквенный код страны альфа-2. +// * КодАльфа3 - Строка - трехзначный буквенный код страны альфа-3. +// * УчастникЕАЭС - Булево - страна-участник ЕАЭС. +// Неопределено - страна не существует. // Функция ДанныеКлассификатораСтранМираПоКоду(Знач Код, Знач ТипКода = "КодСтраны") Экспорт @@ -1127,17 +1238,17 @@ // Возвращает данные о стране по наименованию страны. // // Параметры: -// Наименование - Строка - Наименование страны. +// Наименование - Строка - наименование страны. // // Возвращаемое значение: -// Структура - Описание страны. Содержит поля: -// * Наименование - Строка - Наименование страны. -// * Код - Строка - Код страны. -// * НаименованиеПолное - Строка - Полное наименование страны. -// * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2. -// * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3. -// * УчастникЕАЭС - Булево - Страна-участник ЕАЭС. -// Неопределено - Страна не найдена в классификаторе. +// Структура - описание страны. Содержит поля: +// * Наименование - Строка - наименование страны. +// * Код - Строка - код страны. +// * НаименованиеПолное - Строка - полное наименование страны. +// * КодАльфа2 - Строка - двузначный буквенный код страны альфа-2. +// * КодАльфа3 - Строка - трехзначный буквенный код страны альфа-3. +// * УчастникЕАЭС - Булево - страна-участник ЕАЭС. +// Неопределено - страна не существует в классификаторе. // Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт @@ -1168,17 +1279,16 @@ КонецФункции // Возвращает ссылку на элемент справочника страны мира по коду или наименованию. -// Если элемент справочника СтраныМиры не найден, то он будет создан на основании данных заполнения. +// Если элемент справочника СтраныМиры не существует, то он будет создан на основании данных заполнения. // // Параметры: // КодИлиНаименование - Строка - код страны, код Альфа2, код Альфа3 или наименование страны, в т.ч. международное. -// ДанныеЗаполнения - Структура - Необязательный. Данные для заполнения в случае создания нового элемента. +// ДанныеЗаполнения - Структура - необязательный. Данные для заполнения в случае создания нового элемента. // Ключи структуры соответствуют реквизитам справочника СтраныМира. // // Возвращаемое значение: -// СправочникСсылка.СтраныМира - Ссылка на элемент справочника СтраныМиры. -// Если найдено несколько значений, то будет возвращено первое. -// Если ничего не найдено, данные заполнения не указаны, то возвращается пустая ссылка. +// СправочникСсылка.СтраныМира - если найдено несколько значений, то будет возвращено первое. +// Если не существует и данные заполнения не указаны, то возвращается пустая ссылка. // Функция СтранаМираПоКодуИлиНаименованию(КодИлиНаименование, ДанныеЗаполнения = Неопределено) Экспорт @@ -1217,6 +1327,7 @@ | ТаблицаКлассификатор.КодАльфа3, | ТаблицаКлассификатор.Наименование, | ТаблицаКлассификатор.НаименованиеПолное, + | ТаблицаКлассификатор.МеждународноеНаименование, | ТаблицаКлассификатор.УчастникЕАЭС, | ТаблицаКлассификатор.Неактуальный |ПОМЕСТИТЬ ТаблицаКлассификатор @@ -1231,6 +1342,7 @@ | СтранаМира.КодАльфа3, | СтранаМира.Наименование, | СтранаМира.НаименованиеПолное, + | СтранаМира.МеждународноеНаименование, | СтранаМира.УчастникЕАЭС, | СтранаМира.Неактуальный |ИЗ @@ -1240,6 +1352,7 @@ | ИЛИ СтранаМира.КодАльфа2 = &КодИлиНаименование | ИЛИ СтранаМира.КодАльфа3 = &КодИлиНаименование | ИЛИ СтранаМира.Наименование = &КодИлиНаименование + | ИЛИ СтранаМира.МеждународноеНаименование = &КодИлиНаименование | ИЛИ СтранаМира.НаименованиеПолное = &КодИлиНаименование)"; Запрос.УстановитьПараметр("ТаблицаКлассификатор", ДанныеКлассификатора); @@ -1268,14 +1381,14 @@ // Возвращает список стран Евразийского экономического союза (ЕАЭС). // // Возвращаемое значение: -// - ТаблицаЗначений - Список стран Евразийского экономического союза (ЕАЭС). -// * Ссылка - СправочникСсылка.СтраныМира - Ссылка на элемент справочника страны. -// * Наименование - Строка - Наименование страны. -// * Код - Строка - Код страны. -// * НаименованиеПолное - Строка - Полное наименование страны. -// * КодАльфа2 - Строка - Двузначный буквенный код страны альфа-2. -// * КодАльфа3 - Строка - Трехзначный буквенный код страны альфа-3. -// * МеждународноеНаименование - Строка - Международное наименование страны мира +// - ТаблицаЗначений - список стран Евразийского экономического союза (ЕАЭС): +// * Ссылка - СправочникСсылка.СтраныМира - ссылка на элемент справочника страны. +// * Наименование - Строка - наименование страны. +// * Код - Строка - код страны. +// * НаименованиеПолное - Строка - полное наименование страны. +// * КодАльфа2 - Строка - двузначный буквенный код страны альфа-2. +// * КодАльфа3 - Строка - трехзначный буквенный код страны альфа-3. +// * МеждународноеНаименование - Строка - международное наименование страны мира // Функция СтраныУчастникиЕАЭС() Экспорт @@ -1326,10 +1439,12 @@ // Определяет, является ли страна участником Евразийского экономического союза (ЕАЭС). // // Параметры: -// Страна - Строка, СправочникСсылка.СтраныМира - код страны, код Альфа2, код Альфа3, +// Страна - Строка +// - СправочникСсылка.СтраныМира - код страны, код Альфа2, код Альфа3, // наименование страны или ссылка на элемент справочника Страны мира. // Возвращаемое значение: // Булево - если Истина, то страна является государством-участником ЕАЭС. +// Функция ЭтоСтранаУчастникЕАЭС(Страна) Экспорт Если ТипЗнч(Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда @@ -1372,20 +1487,23 @@ // Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации. -// Объект - СправочникСсылка, ДокументСсылка, СправочникОбъект, ДокументОбъект - Объект-владелец контактной информации. -// Если это ссылка, то контактная информация -// будет получена из объекта по ссылке, иначе из таблицы КонтактнаяИнформация объекта. -// ДополнительныеПараметры - Структура - Описание настроек контактной информации - см. ПараметрыКонтактнойИнформации. +// Форма - ФормаКлиентскогоПриложения - форма объекта-владельца, предназначенная для вывода контактной информации. +// Объект - СправочникСсылка +// - ДокументСсылка +// - СправочникОбъект +// - ДокументОбъект - объект-владелец контактной информации. +// Если это ссылка, то контактная информация +// будет получена из объекта по ссылке, иначе из таблицы КонтактнаяИнформация объекта. +// ДополнительныеПараметры - Структура - описание настроек контактной информации - см. ПараметрыКонтактнойИнформации. // Предыдущее название параметра ИмяЭлементаДляРазмещения. Устарел, следует // использовать ДополнительныеПараметры. Группа, куда будут размещены элементы // контактной информации. -// УдалитьПоложениеЗаголовкаКИ - ПоложениеЗаголовкаЭлементаФормы - Устарел, следует использовать ДополнительныеПараметры. +// УдалитьПоложениеЗаголовкаКИ - ПоложениеЗаголовкаЭлементаФормы - устарел, следует использовать ДополнительныеПараметры. // Может принимать значения: // ПоложениеЗаголовкаЭлементаФормы.Верх или // ПоложениеЗаголовкаЭлементаФормы.Лево (по умолчанию). -// УдалитьИсключаемыеВиды - Массив - Устарел,следует использовать ДополнительныеПараметры. -// УдалитьОтложеннаяИнициализация - Массив - Устарел,следует использовать ДополнительныеПараметры. +// УдалитьИсключаемыеВиды - Массив - устарел,следует использовать ДополнительныеПараметры. +// УдалитьОтложеннаяИнициализация - Массив - устарел,следует использовать ДополнительныеПараметры. // Процедура ПриСозданииНаСервере(Форма, Объект, ДополнительныеПараметры = Неопределено, УдалитьПоложениеЗаголовкаКИ = "", Знач УдалитьИсключаемыеВиды = Неопределено, УдалитьОтложеннаяИнициализация = Ложь) Экспорт @@ -1570,7 +1688,7 @@ ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ДанныеВидаКонтактнойИнформации, ЭтоНовыйВидКИ,, СтатическийЭлемент, ИмяЭлементаДляРазмещения); Если СтатическийЭлемент Тогда - СозданныеЭлементы.Удалить(ИндексЭлемента); + ПодготовитьСтатическийЭлемент(Форма, СтрокаКИ, СозданныеЭлементы, ИндексЭлемента); КонецЕсли; Продолжить; КонецЕсли; @@ -1579,9 +1697,8 @@ НЕ СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация, ИмяЭлементаДляРазмещения); Если СтатическийЭлемент Тогда - СозданныеЭлементы.Удалить(ИндексЭлемента); + ПодготовитьСтатическийЭлемент(Форма, СтрокаКИ, СозданныеЭлементы, ИндексЭлемента); Иначе - СледующаяСтрока = ?(СозданныеЭлементы.Количество() = 0, Неопределено, ОпределитьСледующуюСтроку(Форма, КонтактнаяИнформация, СтрокаКИ)); @@ -1612,8 +1729,11 @@ // Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации. -// Объект - СправочникСсылка, ДокументСсылка, СправочникОбъект, ДокументОбъект - Объект-владелец контактной информации. +// Форма - ФормаКлиентскогоПриложения - форма объекта-владельца, предназначенная для вывода контактной информации. +// Объект - СправочникСсылка +// - ДокументСсылка +// - СправочникОбъект +// - ДокументОбъект - объект-владелец контактной информации. // ИмяЭлементаДляРазмещения - Строка - группа, куда будут размещены элементы контактной информации. // Процедура ПриЧтенииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") Экспорт @@ -1711,8 +1831,11 @@ // Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации. -// Объект - СправочникСсылка, ДокументСсылка, СправочникОбъект, ДокументОбъект - Объект-владелец контактной информации. +// Форма - ФормаКлиентскогоПриложения - форма объекта-владельца, предназначенная для вывода контактной информации. +// Объект - СправочникСсылка +// - ДокументСсылка +// - СправочникОбъект +// - ДокументОбъект - объект-владелец контактной информации. // Процедура ПослеЗаписиНаСервере(Форма, Объект) Экспорт @@ -1751,9 +1874,12 @@ // Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации. -// Объект - СправочникСсылка, ДокументСсылка, СправочникОбъект, ДокументОбъект - Объект-владелец контактной информации. -// Отказ - Булево - Если Истина, то во время проверки были обнаружены ошибки. +// Форма - ФормаКлиентскогоПриложения - форма объекта-владельца, предназначенная для вывода контактной информации. +// Объект - СправочникСсылка +// - ДокументСсылка +// - СправочникОбъект +// - ДокументОбъект - объект-владелец контактной информации. +// Отказ - Булево - если Истина, то во время проверки были обнаружены ошибки. // Процедура ОбработкаПроверкиЗаполненияНаСервере(Форма, Объект, Отказ) Экспорт @@ -1788,7 +1914,7 @@ Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл Представление = СтрокаТабличнойЧастиФормы[ИмяРеквизита]; - Поле = "Объект." + ИмяТабличнойЧасти + "[" + (СтрокаТабличнойЧастиФормы.НомерСтроки - 1) + "]." + ИмяРеквизита; + Поле = "Объект." + ИмяТабличнойЧасти + "[" + XMLСтрока((СтрокаТабличнойЧастиФормы.НомерСтроки - 1)) + "]." + ИмяРеквизита; Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) И Не ВидИнформации.ПометкаУдаления Тогда @@ -1860,12 +1986,13 @@ // Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации. -// Объект - СправочникОбъект, ДокументСсылка - Объект-владелец контактной информации. +// Форма - ФормаКлиентскогоПриложения - форма объекта-владельца, предназначенная для вывода контактной информации. +// Объект - СправочникОбъект +// - ДокументСсылка - объект-владелец контактной информации. // ДанныеФормыСтруктура - Объект, содержащий табличную часть с контактной информацией. Поддерживает работу -// со скрываемыми видами контактной информации только для уже существующих объектов, -// из-за невозможности установить ссылку для нового объекта. -// Отказ - Булево - Если Истина, то объект не был записан, т.к. во время записи возникли ошибки. +// со скрываемыми видами контактной информации только для уже существующих объектов, +// из-за невозможности установить ссылку для нового объекта. +// Отказ - Булево - если Истина, то объект не был записан, т.к. во время записи возникли ошибки. // Процедура ПередЗаписьюНаСервере(Форма, Объект, Отказ = Ложь) Экспорт @@ -1917,9 +2044,9 @@ // Вызывается из модуля формы объекта-владельца контактной информации. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма объекта-владельца, предназначенная для вывода контактной информации. -// Объект - Произвольный - Объект-владелец контактной информации. -// Результат - Произвольный - Необязательный служебный реквизит, полученный из предыдущего обработчика события. +// Форма - ФормаКлиентскогоПриложения - форма объекта-владельца, предназначенная для вывода контактной информации. +// Объект - Произвольный - объект-владелец контактной информации. +// Результат - Произвольный - необязательный служебный реквизит, полученный из предыдущего обработчика события. // // Возвращаемое значение: // Неопределено - значение не используется, обратная совместимость. @@ -1968,7 +2095,7 @@ Отбор = Новый Структура("ИмяРеквизита", Результат.ИмяРеквизита); НайденнаяСтрока = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(НайденнаяСтрока.Значение) Тогда - КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(НайденнаяСтрока.Значение); + КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(НайденнаяСтрока.Значение, Неопределено); КонтактнаяИнформацияПоПолям.Comment = ?(Результат.Свойство("Комментарий"), Результат.Комментарий, ""); НайденнаяСтрока.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям); КонецЕсли; @@ -1988,7 +2115,8 @@ // Обработчик подписки события "ОбработкаЗаполнения". // // Параметры: -// Источник - СправочникОбъект, ДокументОбъект - объект, содержащий контактную информацию. +// Источник - СправочникОбъект +// - ДокументОбъект - объект, содержащий контактную информацию. // ДанныеЗаполнения - Структура - данные с контактной информацией для заполнения объекта. // ТекстЗаполнения - Строка - не используется. // СтандартнаяОбработка - Булево - не используется. @@ -2002,8 +2130,8 @@ // Обработчик подписки события "ПередЗаписью" для обновления контактной информации для списков. // // Параметры: -// Объект - Произвольный - Объект, содержащий контактную информацию. -// Отказ - Булево - Не используется, обратная совместимость. +// Объект - Произвольный - объект, содержащий контактную информацию. +// Отказ - Булево - не используется, обратная совместимость. // Процедура ОбработкаОбновленияКонтактнойИнформации(Объект, Отказ) Экспорт @@ -2018,10 +2146,11 @@ // Обработчик подписки события "ОбработкаЗаполнения" для документов. // // Параметры: -// Источник - Произвольный - Объект, содержащий контактную информацию. -// ДанныеЗаполнения - Структура - Данные с контактной информацией для заполнения объекта. -// ТекстЗаполнения - Строка, Неопределено - Данные заполнения реквизита Наименование. -// СтандартнаяОбработка - Булево - Не используется. +// Источник - Произвольный - объект, содержащий контактную информацию. +// ДанныеЗаполнения - Структура - данные с контактной информацией для заполнения объекта. +// ТекстЗаполнения - Строка +// - Неопределено - данные заполнения реквизита Наименование. +// СтандартнаяОбработка - Булево - не используется. // Процедура ОбработкаЗаполненияКонтактнойИнформацииДокумента(Источник, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт @@ -2077,14 +2206,124 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные функции и конструкторы. +// Возвращает используемые виды контактной информации объекта. +// +// Параметры: +// ВладелецКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации +// - СправочникОбъект.ВидыКонтактнойИнформации +// - ДанныеФормыСтруктура: +// * Ссылка - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на вид КИ. +// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - отбор видов КИ по типу. +// +// Возвращаемое значение: +// ТаблицаЗначений - виды контактной информации, где: +// * Ссылка - СправочникСсылка.ВидыКонтактнойИнформации +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации +// * Представление - Строка +// * Наименование - Строка +// * РазрешитьВводНесколькихЗначений - Булево +// * РеквизитДопУпорядочивания - Число +// * ОбязательноеЗаполнение - Булево +// * ПроверятьКорректность - Булево +// * ИдентификаторДляФормул - Строка +// * ИмяПредопределенногоВида - Строка +// +Функция ВидыКонтактнойИнформацииОбъекта(ВладелецКонтактнойИнформации, ТипКонтактнойИнформации = Неопределено) Экспорт + + Если ТипЗнч(ВладелецКонтактнойИнформации) = Тип("ДанныеФормыСтруктура") Тогда + ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации.Ссылка) + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ВладелецКонтактнойИнформации)) Тогда + ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации); + Иначе + ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации.Ссылка) + КонецЕсли; + + МетаданныеСправочника = Метаданные.НайтиПоТипу(ТипСсылки); + Если МетаданныеСправочника <> Неопределено Тогда + ГруппаВидовКИ = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ГруппаВидаКонтактнойИнформацииПоИмениОбъекта( + МетаданныеСправочника.ПолноеИмя()); + Иначе + ГруппаВидовКИ = Неопределено; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка, + | ВидыКонтактнойИнформации.Тип, + | ВидыКонтактнойИнформации.Представление, + | ВидыКонтактнойИнформации.Наименование, + | ВидыКонтактнойИнформации.РазрешитьВводНесколькихЗначений, + | ВидыКонтактнойИнформации.ОбязательноеЗаполнение, + | ВидыКонтактнойИнформации.ПроверятьКорректность, + | ВидыКонтактнойИнформации.ИдентификаторДляФормул, + | ВЫБОР КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + | КОНЕЦ КАК ИмяПредопределенногоВида, + | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ + | И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ + | И ВидыКонтактнойИнформации.Используется = ИСТИНА + | И &ОтборТипаКонтактнойИнформации + | + |УПОРЯДОЧИТЬ ПО + | РеквизитДопУпорядочивания"; + + Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКИ); + + Если ТипКонтактнойИнформации <> Неопределено Тогда + ТекстЗамены = "ВидыКонтактнойИнформации.Тип = &ТипКонтактнойИнформации"; + Запрос.УстановитьПараметр("ТипКонтактнойИнформации", ТипКонтактнойИнформации); + Иначе + ТекстЗамены = "Истина"; + КонецЕсли; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборТипаКонтактнойИнформации", ТекстЗамены); + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Возврат РезультатЗапроса; + +КонецФункции + +// Возвращает признак, что объект подключен к подсистеме "Контактная информация" +// и содержит табличную часть КонтактнаяИнформация. +// +// Параметры: +// ПроверяемыйОбъект - СправочникОбъект +// - СправочникСсылка +// - ДокументОбъект +// - ДокументСсылка +// - Тип - проверяемый объект на подключение к подсистеме Контактная информация. +// +// Возвращаемое значение: +// Булево - если Истина, то объект содержит контактную информацию. +// +Функция СодержитКонтактнуюИнформацию(ПроверяемыйОбъект) Экспорт + + ТипОбъекта = ?(ТипЗнч(ПроверяемыйОбъект) <> Тип("Тип"), + ТипЗнч(ПроверяемыйОбъект), + ПроверяемыйОбъект); + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипОбъекта); + Если МетаданныеОбъекта <> Неопределено + И МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") <> Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + // Возвращает ссылку на вид контактной информации. // Если по виден не был найден по имени, то выполняется поиск по именам предопределенных элементов. // // Параметры: -// Имя - Строка - Уникальное имя вида контактной информации. +// Имя - Строка - уникальное имя вида контактной информации. // // Возвращаемое значение: -// СправочникСсылка.ВидыКонтактнойИнформации - Ссылка на элемент справочника виды контактной информации. +// СправочникСсылка.ВидыКонтактнойИнформации - ссылка на элемент справочника виды контактной информации. // Функция ВидКонтактнойИнформацииПоИмени(Имя) Экспорт @@ -2110,7 +2349,7 @@ // Описание параметров контактной информации, используемых в обработчике ПриСозданииНаСервере. // // Возвращаемое значение: -// Структура - параметры контактной информации. +// Структура - параметры контактной информации: // * Индекс - Строка - индекс адреса. // * Страна - Строка - страна адреса. // * ТипПомещения - Строка - наименование типа помещения, который будет установлен @@ -2146,15 +2385,18 @@ // Проверяет контактную информацию. // // Параметры: -// Представление - Строка - Представление контактной информации. Используется, если невозможно определить +// Представление - Строка - представление контактной информации. Используется, если невозможно определить // представление из параметра ЗначенияПолей (отсутствие поля Представление). -// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - Описание полей контактной информации. -// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Используется для определения типа, если его невозможно +// ЗначенияПолей - Строка +// - Структура +// - Соответствие +// - СписокЗначений - описание полей контактной информации. +// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - используется для определения типа, если его невозможно // определить по параметру ЗначенияПолей. -// ТипИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. -// ИмяРеквизита - Строка - Имя реквизита на форме. -// Комментарий - Строка - Текст комментария. -// ПутьКРеквизиту - Строка - Путь к реквизиту. +// ТипИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. +// ИмяРеквизита - Строка - имя реквизита на форме. +// Комментарий - Строка - текст комментария. +// ПутьКРеквизиту - Строка - путь к реквизиту. // // Возвращаемое значение: // Число - уровень ошибок, 0 - ошибки отсутствуют. @@ -2197,10 +2439,10 @@ // // Параметры: // Параметры - Структура - содержит структуру с полями: -// * Код - Строка - Код вида контактной информации для идентификации элемента. -// * Наименование - Строка - Наименование вида контактной информации. -// * Имя - Строка - Имя предопределенного вида контактной информации; -// * Используется - Булево - Признак использования вида контактной информации. Значение по умолчанию Истина. +// * Код - Строка - код вида контактной информации для идентификации элемента. +// * Наименование - Строка - наименование вида контактной информации. +// * Имя - Строка - имя предопределенного вида контактной информации; +// * Используется - Булево - признак использования вида контактной информации. Значение по умолчанию Истина. // // Возвращаемое значение: // СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу. @@ -2233,20 +2475,22 @@ // // Параметры: // Параметры - Структура - свойства вида контактной информации: -// * Имя - Имя предопределенного вида контактной информации; -// * Наименование - Наименование вида контактной информации; -// * Вид - СправочникСсылка.ВидыКонтактнойИнформации, Строка - Ссылка на вид контактной информации или -// идентификатор предопределенного элемента. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации или его +// * Имя - имя предопределенного вида контактной информации; +// * Наименование - наименование вида контактной информации; +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации +// - Строка - ссылка на вид контактной информации или +// идентификатор предопределенного элемента. +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации или его // идентификатор. -// * Порядок - Число, Неопределено - Порядок вида контактной информации, положение в -// списке относительно других элементов: -// Неопределено - не переназначать; -// 0 - назначить автоматически; -// Число > 0 - назначить указанный порядок. +// * Порядок - Число +// - Неопределено - порядок вида контактной информации, положение в +// списке относительно других элементов: +// Неопределено - не переназначать; +// 0 - назначить автоматически; +// Число > 0 - назначить указанный порядок. // * МожноИзменятьСпособРедактирования - Булево - Истина, если есть возможность изменять способ // редактирования только в диалоге, Ложь - иначе. -// * ВидРедактирования - Строка - Определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". +// * ВидРедактирования - Строка - определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". // Если "Диалог", то форме выводится гиперссылка с представлением контактной // информации, по нажатию на которую, открывается форма соответствующего типа КИ. // Свойство применимо только для контактной информации с типом: Адрес, Телефон, Факс. @@ -2254,30 +2498,31 @@ // Если "ПолеВводаИДиалог", то доступен ввод в поле и в форме соответствующего типа КИ. // * ОбязательноеЗаполнение - Булево - Истина, если требуется обязательное // заполнение поля, Ложь - иначе. -// * РазрешитьВводНесколькихЗначений - Булево - Признак возможности использования дополнительных +// * РазрешитьВводНесколькихЗначений - Булево - признак возможности использования дополнительных // полей ввода для данного вида. -// * ЗапретитьРедактированиеПользователем - Булево - Признак недоступности редактирования +// * ЗапретитьРедактированиеПользователем - Булево - признак недоступности редактирования // пользователем свойства вида контактной // информации. -// * ХранитьИсториюИзменений - Булево - Признак хранения истории изменений вида +// * ХранитьИсториюИзменений - Булево - признак хранения истории изменений вида // контактной информации. // Значение по умолчанию Ложь. -// * Используется - Булево - Признак использования вида контактной информации. +// * Используется - Булево - признак использования вида контактной информации. // Значение по умолчанию Истина. -// * ВидПоляДругое - Строка - Внешний вид поля типа "Другое". Возможные значения: +// * ВидПоляДругое - Строка - внешний вид поля типа "Другое". Возможные значения: // МногострочноеШирокое, ОднострочноеШирокое, ОднострочноеУзкое. // Значение по умолчанию - ОднострочноеШирокое. -// * РедактированиеТолькоВДиалоге - Булево - Устарело. Следует использовать ВидРедактирования. +// * РедактированиеТолькоВДиалоге - Булево - устарело. Следует использовать ВидРедактирования. // Если Истина, то форме выводится гиперссылка с представлением контактной // информации по нажатию на которую, открывается форма соответствующего // типа КИ. Свойство применимо только для контактной информации с типом: // Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь. -// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. +// * НастройкиПроверки - Структура +// - Неопределено - настройки проверки вида контактной информации. // Для типа Адрес - Структура, содержащая поля: // * ТолькоНациональныйАдрес - Булево - Истина, если возможен ввод только российских адресов. // * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать // некорректные адреса. -// * ЗапрещатьВводНекорректного - Булево - Устарел. Все переданные значения игнорируются. +// * ЗапрещатьВводНекорректного - Булево - устарел. Все переданные значения игнорируются. // Для запрета пользователю записывать некорректные адреса // следует использовать параметр ПроверятьКорректность. // * СкрыватьНеактуальныеАдреса - Булево - Истина, если не требуется показывать неактуальные адреса при @@ -2287,9 +2532,14 @@ // Для типа АдресЭлектроннойПочты - Структура, содержащая поля: // * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать // некорректный адрес электронной почты. -// * ЗапрещатьВводНекорректного - Булево - Устарел. Все переданные значения игнорируются. +// * ЗапрещатьВводНекорректного - Булево - устарел. Все переданные значения игнорируются. // Для запрета пользователю записывать некорректные адреса // следует использовать параметр ПроверятьКорректность. +// Для типа Телефон и Факс - Структура, содержащая поля: +// * ТелефонCДобавочнымНомером - Булево - если Истина, то телефон/факс содержит добавочный номер. +// * ВводитьНомерПоМаске - Булево - Истина, если требуется ввод телефона по маске. +// * МаскаНомераТелефон - Строка - содержит посимвольную строку маски интерактивного ввода текста в поле. +// Формат маски соответствует платформенной маске для поля ввода. // Для остальных типов или для задания настроек по умолчанию используется Неопределено. // Процедура УстановитьСвойстваВидаКонтактнойИнформации(Параметры) Экспорт @@ -2302,9 +2552,11 @@ Объект = Параметры.Вид.ПолучитьОбъект(); КонецЕсли; + ОбновитьСтатусРегламентногоЗадания = (Объект.ИсправлятьУстаревшиеАдреса <> Параметры.ИсправлятьУстаревшиеАдреса); + ЗаполнитьЗначенияСвойств(Объект, Параметры, "Тип, МожноИзменятьСпособРедактирования, |ВидРедактирования, ОбязательноеЗаполнение, РазрешитьВводНесколькихЗначений, - |ЗапретитьРедактированиеПользователем, Используется, ХранитьИсториюИзменений ,МеждународныйФорматАдреса"); + |ЗапретитьРедактированиеПользователем, Используется, ХранитьИсториюИзменений ,МеждународныйФорматАдреса, ИсправлятьУстаревшиеАдреса"); УстановитьНаименованиеВидаКонтактнойИнформации(Объект, Параметры.Наименование); @@ -2334,6 +2586,8 @@ УстановитьЗначенияРеквизитовПроверки(Объект, НастройкиПроверки); ИначеЕсли ПроверятьНастройки И Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Объект.ТелефонCДобавочнымНомером = НастройкиПроверки.ТелефонCДобавочнымНомером; + Объект.МаскаНомераТелефона = НастройкиПроверки.МаскаНомераТелефона; + Объект.ВводитьНомерПоМаске = НастройкиПроверки.ВводитьНомерПоМаске; Иначе УстановитьЗначенияРеквизитовПроверки(Объект); КонецЕсли; @@ -2375,6 +2629,11 @@ ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Объект); КонецЕсли; + Если ОбновитьСтатусРегламентногоЗадания Тогда + Статус = ?(Объект.ИсправлятьУстаревшиеАдреса = Истина, Истина, Неопределено); + УправлениеКонтактнойИнформациейСлужебный.УстановитьИспользованиеРегламентногоЗадания(Статус); + КонецЕсли; + КонецПроцедуры // Возвращает структуру параметров группы вида контактной информации. @@ -2384,10 +2643,10 @@ // // Возвращаемое значение: // Структура - содержит структуру с полями: -// * Имя - Строка - Уникальное имя вида контактной информации. -// * Наименование - Строка - Наименование вида контактной информации. +// * Имя - Строка - уникальное имя вида контактной информации. +// * Наименование - Строка - наименование вида контактной информации. // * Группа - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу(родителя) элемента справочника. -// * Используется - Булево - Признак использования вида контактной информации. Значение по умолчанию Истина. +// * Используется - Булево - признак использования вида контактной информации. Значение по умолчанию Истина. // Функция ПараметрыГруппыВидаКонтактнойИнформации(ГруппаКонтактнойИнформации = Неопределено) Экспорт @@ -2408,91 +2667,94 @@ // Возвращает структуру параметров вида контактной информации для определенного типа. // // Параметры: -// ТипИлиВидКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации, Строка - тип контактной информации, +// ТипИлиВидКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации +// - Строка - тип контактной информации, // - СправочникСсылка.ВидыКонтактнойИнформации- вид контактной информации для // заполнения свойства НастройкиПроверки. // // Возвращаемое значение: -// Структура - содержит структуру с полями: -// * Имя - Строка - Уникальное имя вида контактной информации. -// * Наименование - Строка - Наименование вида контактной информации. -// * Вид - СправочникСсылка.ВидыКонтактнойИнформации, Строка - Ссылка на вид контактной информации или -// идентификатор предопределенного элемента. -// * Группа - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу(родителя) элемента справочника. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации или его идентификатор. -// * Порядок - Число, Неопределено - Порядок вида контактной информации, положение в списке относительно других элементов: -// Неопределено - не переназначать; -// 0 - назначить автоматически; -// Число > 0 - назначить указанный порядок. -// Примечание. При использовании параметра Порядок следует внимательно следить -// за уникальностью назначаемого значения. Если после выполнения обновления -// значения порядка окажутся неуникальными в пределах группы, то настройка -// порядка пользователем будет невозможна. В общем случае рекомендуется не -// использовать этот параметр (порядок не изменится), либо заполнять его -// значением 0 (порядок будет назначен автоматически в подсистеме "Настройка -// порядка элементов" при выполнении процедуры). Для размещения видов КИ в -// определенной последовательности относительно друг друга без явного -// размещения в начале списка достаточно вызывать данную процедуру в нужной -// последовательности для каждого вида КИ с указанием порядка 0. Если -// добавляется предопределенный вид КИ к уже существующим в ИБ, не -// рекомендуется назначать порядок в явном виде. -// * МожноИзменятьСпособРедактирования - Булево -Признак возможности изменения свойств вида контактной информации пользователем. +// Структура: +// * Имя - Строка - уникальное имя вида контактной информации. +// * Наименование - Строка - наименование вида контактной информации. +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации +// - Строка - ссылка на вид контактной информации или +// идентификатор предопределенного элемента. +// * Группа - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу(родителя) элемента справочника. +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации или его идентификатор. +// * Порядок - Число +// - Неопределено - порядок вида контактной информации, положение в списке относительно других элементов. +// Неопределено - не переназначать; +// 0 - назначить автоматически; +// Число > 0 - назначить указанный порядок. +// Примечание. При использовании параметра Порядок следует внимательно следить +// за уникальностью назначаемого значения. Если после выполнения обновления +// значения порядка окажутся неуникальными в пределах группы, то настройка +// порядка пользователем будет невозможна. В общем случае рекомендуется не +// использовать этот параметр (порядок не изменится), либо заполнять его +// значением 0 (порядок будет назначен автоматически в подсистеме "Настройка +// порядка элементов" при выполнении процедуры). Для размещения видов КИ в +// определенной последовательности относительно друг друга без явного +// размещения в начале списка достаточно вызывать данную процедуру в нужной +// последовательности для каждого вида КИ с указанием порядка 0. Если +// добавляется предопределенный вид КИ к уже существующим в ИБ, не +// рекомендуется назначать порядок в явном виде. +// * МожноИзменятьСпособРедактирования - Булево -признак возможности изменения свойств вида контактной информации пользователем. // Если Ложь, то в форме вида контактной информации свойства доступны // только для просмотра. Значение по умолчанию - Ложь. -// * ВидРедактирования - Строка - Вид редактирования. -// * ВидРедактирования - Строка - Определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". +// * ВидРедактирования - Строка - вид редактирования. +// * ВидРедактирования - Строка - определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". // Если "Диалог", то форме выводится гиперссылка с представлением контактной // информации, по нажатию на которую, открывается форма соответствующего типа КИ. // Свойство применимо только для контактной информации с типом: Адрес, Телефон, Факс. // Если "ПолеВвода", то на форме выводится поле ввода. // Если "ПолеВводаИДиалог", то доступен ввод в поле и в форме соответствующего типа КИ. -// * ХранитьИсториюИзменений - Булево - Признак возможности хранения истории контактной информации. +// * ХранитьИсториюИзменений - Булево - признак возможности хранения истории контактной информации. // Хранение истории допускается, если признак ВидРедактирования = "Диалог" -// равен Истина. Свойство применимо если табличная часть -// КонтактнаяИнформация содержит реквизит ДействуетС. Значение по умолчанию -// - Ложь. -// * ОбязательноеЗаполнение - Булево - Если Истина, то требуется обязательный ввод значения в поле +// равен Истина. Свойство применимо если табличная часть КонтактнаяИнформация +// содержит реквизит ДействуетС. Значение по умолчанию - Ложь. +// * ОбязательноеЗаполнение - Булево - если Истина, то требуется обязательный ввод значения в поле // контактной информации. Значение по умолчанию - Ложь. -// * РазрешитьВводНесколькихЗначений - Булево - Признак возможности ввода нескольких значений для данного вида. +// * РазрешитьВводНесколькихЗначений - Булево - признак возможности ввода нескольких значений для данного вида. // Значение по умолчанию - Ложь. -// * ЗапретитьРедактированиеПользователем - Булево - Признак недоступности редактирования пользователем +// * ЗапретитьРедактированиеПользователем - Булево - признак недоступности редактирования пользователем // вида контактной информации. Значение по умолчанию - Ложь. -// * Используется - Булево - Если Ложь, то вид контактной информации недоступен для использования пользователем. +// * Используется - Булево - если Ложь, то вид контактной информации недоступен для использования пользователем. // Такой вид не выводится в формах и списке видов контактной информации. // Значение по умолчанию - Истина. -// * МеждународныйФорматАдреса - Булево - Признак международного формата адреса. +// * МеждународныйФорматАдреса - Булево - признак международного формата адреса. // Если Истина, то ввода всех адресов только в международном формате. // Значение по умолчанию - Ложь. -// * ВидПоляДругое - Строка - Определяет внешний вид поля с типом Другое на форме. +// * ВидПоляДругое - Строка - определяет внешний вид поля с типом Другое на форме. // Варианты: МногострочноеШирокое, ОднострочноеШирокое, ОднострочноеУзкое. // Свойство применимо только для контактной информации с типом: Другое. // Для вида КИ с типом Другое значение по умолчанию - "ОднострочноеШирокое", // иначе пустая строка. -// * РедактированиеТолькоВДиалоге - Булево - Устарело. Следует использовать ВидРедактирования. +// * РедактированиеТолькоВДиалоге - Булево - устарело. Следует использовать ВидРедактирования. // Если Истина, то форме выводится гиперссылка с представлением контактной // информации по нажатию на которую, открывается форма соответствующего -// типа КИ. Свойство применимо только для контактной информации с типом: +// типа КИ. Свойство применимо только для контактной информации с типом - // Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь. -// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. -// Состав полей зависит от типа контактной информации. -// Для типа Адрес - Структура, содержащая поля: -// * ТолькоНациональныйАдрес - Булево - если Истина, то разрешается ввод только национальных адресов. +// * НастройкиПроверки - Структура +// - Неопределено - настройки проверки вида контактной информации: +// +// Для типа Адрес +// ** ТолькоНациональныйАдрес - Булево - если Истина, то разрешается ввод только национальных адресов. // Изменение страны у адреса не допускается. -// * ПроверятьКорректность - Булево - если Истина, то для национальных адресов доступен ввод +// ** ПроверятьКорректность - Булево - если Истина, то для национальных адресов доступен ввод // только адресов с разбивкой по полям проходящих проверку по // ФИАС. Допускается ввод адресов других стран в свободной // форме, если свойство ТолькоНациональныйАдрес = Ложь. // Значение по умолчанию - Ложь. -// * ВключатьСтрануВПредставление - Булево - если Истина, то Наименование страны всегда добавляется в +// ** ВключатьСтрануВПредставление - Булево - если Истина, то Наименование страны всегда добавляется в // представление адреса, даже когда другие поля адреса пустые. // Значение по умолчанию - Ложь -// * УказыватьОКТМО - Булево - признак возможности ручного ввода кода ОКМТО в форме ввода адреса. -// Для типа АдресЭлектроннойПочты - Структура, содержащая поля: -// * ПроверятьКорректность - Булево - если Истина, то запрещается пользователю ввод +// ** УказыватьОКТМО - Булево - признак возможности ручного ввода кода ОКМТО в форме ввода адреса. +// Для типа АдресЭлектроннойПочты +// ** ПроверятьКорректность - Булево - если Истина, то запрещается пользователю ввод // некорректный адрес электронной почты. // Значение по умолчанию - Ложь. -// Для типа Телефон - Структура, содержащая поля: -// * ТелефонCДобавочнымНомером - Булево - если Истина, то в форме ввода телефона доступен ввод +// Для типа Телефон +// ** ТелефонCДобавочнымНомером - Булево - если Истина, то в форме ввода телефона доступен ввод // добавочного номера. Значение по умолчанию - Истина. // Для остальных типов по умолчанию - Неопределено. // @@ -2525,8 +2787,9 @@ // ВидИнформации - Справочник.ВидыКонтактнойИнформация - ссылка на вид контактной информации. // ТипИнформации - Перечисление.ТипыКонтактнойИнформация - тип контактной информации. // ИдентификаторСтроки - Число - идентификатор строки табличной части. -// Дата - Дата - Дата, с которой действует запись контактной информации, +// Дата - Дата - дата, с которой действует запись контактной информации, // используется при хранении истории изменения контактной информации. +// Процедура ЗаписатьКонтактнуюИнформацию(Объект, Знач Значение, ВидИнформации, ТипИнформации, ИдентификаторСтроки = 0, Дата = Неопределено) Экспорт Если ПустаяСтрока(Значение) Тогда @@ -2764,12 +3027,13 @@ // Для адресов, введенных в свободной форме, корректное преобразование не гарантируется. // // Параметры: -// Представление - Строка - Строковое представление контактной информации, выводимое пользователю. -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, -// Структура - Вид или тип контактной информации. +// Представление - Строка - строковое представление контактной информации, выводимое пользователю. +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации +// - ПеречислениеСсылка.ТипыКонтактнойИнформации +// - Структура - вид или тип контактной информации. // // Возвращаемое значение: -// Строка - Контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. +// Строка - контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. // Функция КонтактнаяИнформацияXMLПоПредставлению(Представление, ОжидаемыйВид) Экспорт @@ -2788,9 +3052,9 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - передаваемая форма. -// Элементы - Соответствие - Список видов контактной информации, для которых устанавливается доступ. -// ** Ключ - ОбъектМетаданных - Подсистема, в которой размещается отчет или вариант отчета. -// ** Значение - Булево - Если ЛОЖЬ, то элемент доступен только для просмотра. +// Элементы - Соответствие - список видов контактной информации, для которых устанавливается доступ: +// ** Ключ - ОбъектМетаданных - подсистема, в которой размещается отчет или вариант отчета. +// ** Значение - Булево - если ЛОЖЬ, то элемент доступен только для просмотра. // Процедура УстановитьДоступностьЭлементовКонтактнойИнформации(Форма, Элементы, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") Экспорт Для каждого Элемент Из Элементы Цикл @@ -2831,7 +3095,7 @@ // Дополняет список колонки для загрузки данных колонками контактной информации. // // Параметры: -// МетаданныеСправочника - ОбъектМетаданных - Метаданные справочника. +// МетаданныеСправочника - ОбъектМетаданных - метаданные справочника. // ИнформацияПоКолонкам - ТаблицаЗначений - колонки макета. // Процедура КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам) Экспорт @@ -2862,103 +3126,10 @@ КонецПроцедуры -// Виды контактной информации объекта. -// -// Параметры: -// ВладелецКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации, СправочникОбъект.ВидыКонтактнойИнформации, -// ДанныеФормыСтруктура - где: -// * Ссылка - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на вид контактной информации. -// -// Возвращаемое значение: -// ТаблицаЗначений - виды контактной информации, где: -// * Ссылка - СправочникСсылка.ВидыКонтактнойИнформации - -// * Представление - Строка - -// * Наименование - Строка - -// * РазрешитьВводНесколькихЗначений - Булево - -// * РеквизитДопУпорядочивания - Число - -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - -// -Функция ВидыКонтактнойИнформацииОбъекта(ВладелецКонтактнойИнформации, ТипКонтактнойИнформации = Неопределено) Экспорт - - Если ТипЗнч(ВладелецКонтактнойИнформации) = Тип("ДанныеФормыСтруктура") Тогда - ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации.Ссылка) - - ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ВладелецКонтактнойИнформации)) Тогда - ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации); - Иначе - ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации.Ссылка) - КонецЕсли; - - МетаданныеСправочника = Метаданные.НайтиПоТипу(ТипСсылки); - ПолноеИмяОбъектаМетаданных = МетаданныеСправочника.ПолноеИмя(); - ИмяГруппыВидовКИ = СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""); - ГруппаВидовКИ = Неопределено; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВидыКонтактнойИнформации.Ссылка КАК Ссылка, - |ВЫБОР - | КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """" - | ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида - | ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных - |КОНЕЦ КАК ИмяПредопределенногоВида - |ИЗ - | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации - |ГДЕ - | ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА - | И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ - | И ВидыКонтактнойИнформации.Используется = ИСТИНА"; - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - Пока РезультатЗапроса.Следующий() Цикл - Если СтрСравнить(РезультатЗапроса.ИмяПредопределенногоВида, ИмяГруппыВидовКИ) = 0 Тогда - ГруппаВидовКИ = РезультатЗапроса.Ссылка; - Прервать; - КонецЕсли; - КонецЦикла; - - Если НЕ ЗначениеЗаполнено(ГруппаВидовКИ) Тогда - Возврат Новый ТаблицаЗначений; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВидыКонтактнойИнформации.Ссылка, - | ВидыКонтактнойИнформации.Представление, - | ВидыКонтактнойИнформации.Наименование, - | ВидыКонтактнойИнформации.РазрешитьВводНесколькихЗначений, - | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, - | ВидыКонтактнойИнформации.Тип - |ИЗ - | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации - |ГДЕ - | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ - | И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ - | И ВидыКонтактнойИнформации.Используется = ИСТИНА - | И &ОтборТипаКонтактнойИнформации - | - |УПОРЯДОЧИТЬ ПО - | РеквизитДопУпорядочивания"; - - Если ТипКонтактнойИнформации <> Неопределено Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборТипаКонтактнойИнформации", - "ВидыКонтактнойИнформации.Тип = &ТипКонтактнойИнформации"); - Запрос.УстановитьПараметр("ТипКонтактнойИнформации", ТипКонтактнойИнформации); - Иначе - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборТипаКонтактнойИнформации", "Истина"); - КонецЕсли; - Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКИ); - - РезультатЗапроса = Запрос.Выполнить().Выгрузить(); - Возврат РезультатЗапроса; - -КонецФункции - // Возвращает тип контактной информации. // // Параметры: -// Наименование - Строка - Тип контактной информация в виде строки. +// Наименование - Строка - тип контактной информация в виде строки. // // Возвращаемое значение: // ПеречислениеСсылка.ТипыКонтактнойИнформации - соответствующий тип. @@ -3204,7 +3375,8 @@ НайденнаяСтрока = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(НайденнаяСтрока.Значение) Тогда - КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(НайденнаяСтрока.Значение); + КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям( + НайденнаяСтрока.Значение, Неопределено); КонтактнаяИнформацияПоПолям.Comment = НайденнаяСтрока.Комментарий; НайденнаяСтрока.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям); КонецЕсли; @@ -3223,7 +3395,7 @@ ДобавляемыйВид = Результат.ДобавляемыйВид; Если ТипЗнч(ДобавляемыйВид)= Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - ИнформацияОВидеКИ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемыйВид, "Тип, Наименование, ВидРедактирования, ВидПоляДругое"); + ИнформацияОВидеКИ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемыйВид, "Тип, Наименование, ВидРедактирования, ВидПоляДругое, ВводитьНомерПоМаске, МаскаНомераТелефона"); Иначе ИнформацияОВидеКИ = ДобавляемыйВид; ДобавляемыйВид = ДобавляемыйВид.Ссылка; @@ -3395,12 +3567,13 @@ Элемент.ПутьКДанным = ИмяРеквизита; Если ИнформацияОВидеКИ.ВидРедактирования = "Диалог" И ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - Элемент.Вид = ВидПоляФормы.ПолеНадписи; - Элемент.Гиперссылка = Истина; - Элемент.УстановитьДействие("Нажатие", "Подключаемый_КонтактнаяИнформацияПриНажатии"); - Если ПустаяСтрока(Форма[ИмяРеквизита]) Тогда - Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); - КонецЕсли; + + Элемент.Вид = ВидПоляФормы.ПолеНадписи; + Элемент.Гиперссылка = Истина; + Элемент.УстановитьДействие("Нажатие", "Подключаемый_КонтактнаяИнформацияПриНажатии"); + Если ПустаяСтрока(Форма[ИмяРеквизита]) Тогда + Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); + КонецЕсли; ИначеЕсли ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница И ОбработкаНавигационнойСсылки Тогда @@ -3416,7 +3589,7 @@ Представление = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); КонецЕсли; - Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.АдресСайта(Представление, АдресСайта); + Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.АдресСайта(Представление, АдресСайта, Форма.ТолькоПросмотр); Иначе @@ -3424,6 +3597,7 @@ Если ИнформацияОВидеКИ.ВидРедактирования = "Диалог" Тогда Элемент.РедактированиеТекста = Ложь; КонецЕсли; + Элемент.УстановитьДействие("Очистка", "Подключаемый_КонтактнаяИнформацияОчистка"); Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда @@ -3449,6 +3623,21 @@ Иначе Элемент.Ширина = 70; КонецЕсли; + ИначеЕсли ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон + Или ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда + + Если ИнформацияОВидеКИ.ВводитьНомерПоМаске Тогда + Если ПустаяСтрока(Форма[ИмяРеквизита]) Тогда + Элемент.Маска = ИнформацияОВидеКИ.МаскаНомераТелефона; + КонецЕсли; + + ТаблицаКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + НайденныеСтроки = ТаблицаКонтактнойИнформации.НайтиСтроки(Новый Структура("ИмяРеквизита", ИмяРеквизита)); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].Маска = ИнформацияОВидеКИ.МаскаНомераТелефона; + КонецЕсли; + + КонецЕсли; ИначеЕсли ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда Если ИнформацияОВидеКИ.ВидПоляДругое = "МногострочноеШирокое" Тогда @@ -3565,12 +3754,20 @@ И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда ДоступенВыбор = Не ИнформацияОВидеКИ.ПометкаУдаления И ИнформацияОВидеКИ.ВидРедактирования <> "ПолеВвода"; - Элемент.КнопкаВыбора = ДоступенВыбор; - Если ДоступенВыбор Тогда + + Если ДоступенВыбор И Не Форма.ТолькоПросмотр Тогда + Элемент.КнопкаВыбора = Истина; Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора"); + Иначе + Элемент.КнопкаВыбора = Ложь; + Если ЗначениеЗаполнено(Форма[ИмяРеквизита]) Тогда + Элемент.КнопкаОткрытия = Истина; + Элемент.УстановитьДействие("Открытие", "Подключаемый_КонтактнаяИнформацияПриНажатии"); + КонецЕсли; КонецЕсли; КонецЕсли; + Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении"); Если ИнформацияОВидеКИ.ПометкаУдаления Тогда @@ -3589,6 +3786,27 @@ КонецФункции +Процедура ПодготовитьСтатическийЭлемент(Форма, СтрокаКИ, СозданныеЭлементы, ИндексЭлемента) + + СозданныеЭлементы.Удалить(ИндексЭлемента); + + Если Форма.ТолькоПросмотр Тогда + ЭлементНаФорме = Форма.Элементы[СтрокаКИ.ИмяРеквизита]; + Если ЭлементНаФорме.Вид = ВидПоляФормы.ПолеВвода Тогда + Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(СтрокаКИ.Тип) Тогда + ЭлементНаФорме.КнопкаВыбора = Ложь; + Если ЗначениеЗаполнено(Форма[СтрокаКИ.ИмяРеквизита]) Тогда + ЭлементНаФорме.КнопкаОткрытия = Истина; + ЭлементНаФорме.УстановитьДействие("Открытие", "Подключаемый_КонтактнаяИнформацияПриНажатии"); + КонецЕсли; + Иначе + ЭлементНаФорме.ТолькоПросмотр = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + Процедура ПунктКонтекстногоМенюПеремещения(ПредыдущийЭлемент, Форма, Направление, ИмяЭлементаДляРазмещения) Если Направление > 0 Тогда @@ -3677,6 +3895,7 @@ МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ХранитьИсториюИзменений", Новый ОписаниеТипов("Булево"), ИмяОписания)); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ИмяЭлементаДляРазмещения", Строка500, ИмяОписания)); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("МеждународныйФорматАдреса", Новый ОписаниеТипов("Булево"), ИмяОписания)); + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Маска", ОбщегоНазначения.ОписаниеТипаСтрока(100), ИмяОписания)); Иначе РеквизитыТаблицы = Форма.ПолучитьРеквизиты("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов"); РеквизитыДляСоздания = Новый Соответствие; @@ -3686,6 +3905,7 @@ РеквизитыДляСоздания.Вставить("ЭтоИсторическаяКонтактнаяИнформация", Истина); РеквизитыДляСоздания.Вставить("Значение", Истина); РеквизитыДляСоздания.Вставить("МеждународныйФорматАдреса", Истина); + РеквизитыДляСоздания.Вставить("Маска", Истина); Для Каждого Реквизит Из РеквизитыТаблицы Цикл Если РеквизитыДляСоздания[Реквизит.Имя] <> Неопределено Тогда @@ -3713,6 +3933,10 @@ МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ДействуетС", Новый ОписаниеТипов("Дата"), ИмяОписания)); КонецЕсли; + Если РеквизитыДляСоздания["Маска"] Тогда + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Маска", ОбщегоНазначения.ОписаниеТипаСтрока(100), ИмяОписания)); + КонецЕсли; + Если РеквизитыДляСоздания["ЭтоИсторическаяКонтактнаяИнформация"] Тогда МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЭтоИсторическаяКонтактнаяИнформация", Новый ОписаниеТипов("Булево"), ИмяОписания)); КонецЕсли; @@ -3838,8 +4062,8 @@ // Возвращает имена табличных частей документа по виду контактной информации. // // Параметры: -// ТаблицаВидовКонтактнойИнформации - ТаблицаЗначений - Список видов контактной информации. -// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации. +// ТаблицаВидовКонтактнойИнформации - ТаблицаЗначений - список видов контактной информации: +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации. // ИмяОбъекта - Строка - полное имя объекта метаданного. // // Возвращаемое значение: @@ -4039,7 +4263,8 @@ // Проверяет контактную информацию электронной почты и сообщает об ошибках. // // Параметры: -// АдресЭП - Структура, Строка - контактная информацией. +// АдресЭП - Структура +// - Строка - контактная информацией. // ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации с настройками проверки. // ИмяРеквизита - Строка - необязательно имя реквизита для привязки сообщения об ошибке. // @@ -4060,11 +4285,11 @@ ЭлектроннаяПочта = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(АдресЭП, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); Попытка - Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ЭлектроннаяПочта.Value); + Результат = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(ЭлектроннаяПочта.Value); Если Результат.Количество() > 1 Тогда - СтрокаОшибки = НСтр("ru = 'Допускается ввод только одного адреса электронной почты'"); - + ИначеЕсли Результат.Количество() = 1 Тогда + СтрокаОшибки = Результат[0].ОписаниеОшибки; КонецЕсли; Исключение СтрокаОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -4286,30 +4511,35 @@ // Описание параметров вывода контактной информации // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// ИмяЭлементаДляРазмещения - Строка, Неопределено - -// ПоложениеЗаголовкаКИ - Строка, ПоложениеЗаголовкаЭлементаФормы - -// ОтложеннаяИнициализация - Массив, Булево - -// ИсключаемыеВиды - Массив, Неопределено - -// СкрываемыеВиды - Массив, Неопределено - +// Форма - ФормаКлиентскогоПриложения +// ИмяЭлементаДляРазмещения - Строка +// - Неопределено +// ПоложениеЗаголовкаКИ - Строка +// - ПоложениеЗаголовкаЭлементаФормы +// ОтложеннаяИнициализация - Массив +// - Булево +// ИсключаемыеВиды - Массив +// - Неопределено +// СкрываемыеВиды - Массив +// - Неопределено // // Возвращаемое значение: -// Структура - где: -// * ГруппаДляРазмещения - Строка - -// * ПоложениеЗаголовка - Строка - -// * ДобавленныеРеквизиты - СписокЗначений - -// * ОтложеннаяИнициализация - Булево - -// * ИсключаемыеВиды - Массив - -// * ВыполненаОтложеннаяИнициализация - Булево - -// * ДобавленныеЭлементы - СписокЗначений - -// * СписокДобавляемыхЭлементов - СписокЗначений - список элементов, где: -// * Значение - Структура - Где: -// ** Ссылка - СправочникСсылка.ВидыКонтактнойИнформации - -// * Ключ - Строка - -// * МожноОтправлятьSMS - Булево - -// * Владелец - ЛюбаяСсылка - -// * ОбработкаНавигационнойСсылки - Булево - -// * СкрываемыеВиды - Массив - +// Структура: +// * ГруппаДляРазмещения - Строка +// * ПоложениеЗаголовка - Строка +// * ДобавленныеРеквизиты - СписокЗначений +// * ОтложеннаяИнициализация - Булево +// * ИсключаемыеВиды - Массив +// * ВыполненаОтложеннаяИнициализация - Булево +// * ДобавленныеЭлементы - СписокЗначений +// * СписокДобавляемыхЭлементов - СписокЗначений: +// * Значение - Структура: +// ** Ссылка - СправочникСсылка.ВидыКонтактнойИнформации +// * Ключ - Строка +// * МожноОтправлятьSMS - Булево +// * Владелец - ЛюбаяСсылка +// * ОбработкаНавигационнойСсылки - Булево +// * СкрываемыеВиды - Массив // Функция ПараметрыВыводаКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ, ОтложеннаяИнициализация, ИсключаемыеВиды, СкрываемыеВиды) @@ -4356,9 +4586,9 @@ // Если имя не указано, то возвращается полный список программно предопределенных видов. // // Возвращаемое значение: -// ТаблицаЗначений - Виды контактной информации, где: -// * Имя - Строка - Имя вида контактной информации. -// * Ссылка - СправочникСсылка.ВидыКонтактнойИнформации - Ссылка на элемент справочника виды контактной информации. +// ТаблицаЗначений - виды контактной информации, где: +// * Имя - Строка - имя вида контактной информации. +// * Ссылка - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на элемент справочника виды контактной информации. // Функция ПредопределенныеВидыКонтактнойИнформации(Имя = "") Экспорт @@ -4597,7 +4827,8 @@ // // Параметры: // ПараметрыКонтактнойИнформации - см. ПараметрыВыводаКонтактнойИнформации -// ИмяЭлементаДляРазмещения - Строка, Неопределено - +// ИмяЭлементаДляРазмещения - Строка +// - Неопределено // // Возвращаемое значение: // см. ПараметрыВыводаКонтактнойИнформации @@ -4969,6 +5200,8 @@ | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, | ВидыКонтактнойИнформации.СкрыватьНеактуальныеАдреса КАК СкрыватьНеактуальныеАдреса, | ВидыКонтактнойИнформации.ТелефонCДобавочнымНомером КАК ТелефонCДобавочнымНомером, + | ВидыКонтактнойИнформации.МаскаНомераТелефона КАК МаскаНомераТелефона, + | ВидыКонтактнойИнформации.ВводитьНомерПоМаске КАК ВводитьНомерПоМаске, | ВидыКонтактнойИнформации.Тип КАК Тип, | ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений, | ВидыКонтактнойИнформации.ИмяПредопределенногоВида КАК Имя, @@ -4992,7 +5225,7 @@ ТекущиеПараметры = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(РезультатЗапроса[0]); ПараметрыВида = ОписаниеПараметровКонтактнойИнформации(Тип); - ЗаполнитьЗначенияСвойств(ПараметрыВида,ТекущиеПараметры); + ЗаполнитьЗначенияСвойств(ПараметрыВида, ТекущиеПараметры); Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда @@ -5008,6 +5241,8 @@ ПараметрыВида.НастройкиПроверки.ПроверятьКорректность = ТекущиеПараметры.ПроверятьКорректность; ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда ПараметрыВида.НастройкиПроверки.ТелефонCДобавочнымНомером = ТекущиеПараметры.ТелефонCДобавочнымНомером; + ПараметрыВида.НастройкиПроверки.МаскаНомераТелефона = ТекущиеПараметры.МаскаНомераТелефона; + ПараметрыВида.НастройкиПроверки.ВводитьНомерПоМаске = ТекущиеПараметры.ВводитьНомерПоМаске; ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда ПараметрыВида.НастройкиПроверки.ВидПоляДругое = ТекущиеПараметры.ВидПоляДругое; КонецЕсли; @@ -5070,49 +5305,51 @@ // // Возвращаемое значение: // Структура - содержит структуру с полями: -// * Имя - Строка - Уникальное имя вида контактной информации. -// * Наименование - Строка - Наименование вида контактной информации. -// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Ссылка на вид контактной информации. +// * Имя - Строка - уникальное имя вида контактной информации. +// * Наименование - Строка - наименование вида контактной информации. +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на вид контактной информации. // Значение по умолчанию - Справочник.ВидыКонтактнойИнформации.ПустаяСсылка. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. -// * Группа - СправочникСсылка.ВидыКонтактнойИнформации, Неопределено - ссылка на группу(родителя) элемента справочника. -// Значение по умолчанию - Неопределено. -// * Используется - Булево - Если Ложь, то вид контактной информации недоступен для использования пользователем. +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. +// * Группа - СправочникСсылка.ВидыКонтактнойИнформации +// - Неопределено - ссылка на группу(родителя) элемента справочника. +// Значение по умолчанию - Неопределено. +// * Используется - Булево - если Ложь, то вид контактной информации недоступен для использования пользователем. // Такой вид не выводится в формах и списке видов контактной информации. // Значение по умолчанию - Истина. -// * МожноИзменятьСпособРедактирования - Булево - Признак возможности изменения свойств вида контактной информации пользователем. +// * МожноИзменятьСпособРедактирования - Булево - признак возможности изменения свойств вида контактной информации пользователем. // Если Ложь, то в форме вида контактной информации свойства доступны // только для просмотра. Значение по умолчанию - Ложь. -// * ВидРедактирования - Строка - Определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". +// * ВидРедактирования - Строка - определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". // Если "Диалог", то форме выводится гиперссылка с представлением контактной // информации, по нажатию на которую, открывается форма соответствующего типа КИ. // Свойство применимо только для контактной информации с типом: Адрес, Телефон, Факс. // Если "ПолеВвода", то на форме выводится поле ввода. // Если "ПолеВводаИДиалог", то доступен ввод в поле и в форме соответствующего типа КИ. -// * ХранитьИсториюИзменений - Булево - Признак возможности хранения истории контактной информации. +// * ХранитьИсториюИзменений - Булево - признак возможности хранения истории контактной информации. // Хранение истории допускается, если признак ВидРедактирования = "Диалог". // Свойство применимо если табличная часть // КонтактнаяИнформация содержит реквизит ДействуетС. Значение по умолчанию // - Ложь. -// * ОбязательноеЗаполнение - Булево - Если Истина, то требуется обязательный ввод значения в поле контактной +// * ОбязательноеЗаполнение - Булево - если Истина, то требуется обязательный ввод значения в поле контактной // информации. Значение по умолчанию - Ложь. -// * РазрешитьВводНесколькихЗначений - Булево - Признак возможности ввода нескольких значений для данного вида. +// * РазрешитьВводНесколькихЗначений - Булево - признак возможности ввода нескольких значений для данного вида. // Значение по умолчанию - Ложь. -// * ЗапретитьРедактированиеПользователем - Булево - Признак недоступности редактирования пользователем вида +// * ЗапретитьРедактированиеПользователем - Булево - признак недоступности редактирования пользователем вида // контактной информации. Значение по умолчанию - Ложь. -// * МеждународныйФорматАдреса - Булево - Признак международного формата адреса. +// * МеждународныйФорматАдреса - Булево - признак международного формата адреса. // Если Истина, то ввода всех адресов только в международном формате. // Значение по умолчанию - Ложь. -// * ВидПоляДругое - Строка - Определяет внешний вид поля с типом Другое на форме. Варианты: +// * ВидПоляДругое - Строка - определяет внешний вид поля с типом Другое на форме. Варианты: // МногострочноеШирокое, ОднострочноеШирокое, ОднострочноеУзкое. Свойство // применимо только для контактной информации с типом: Другое. Для вида КИ с // типом Другое значение по умолчанию - "ОднострочноеШирокое", иначе пустая строка. -// * РедактированиеТолькоВДиалоге - Булево - Устарело. Следует использовать ВидРедактирования. +// * РедактированиеТолькоВДиалоге - Булево - устарело. Следует использовать ВидРедактирования. // Если Истина, то форме выводится гиперссылка с представлением контактной // информации по нажатию на которую, открывается форма соответствующего // типа КИ. Свойство применимо только для контактной информации с типом: // Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь. -// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. Состав полей +// * НастройкиПроверки - Структура +// - Неопределено - настройки проверки вида контактной информации. Состав полей // зависит от типа контактной информации. Для типа Адрес - Структура, содержащая поля: // * ТолькоНациональныйАдрес - Булево - если Истина, то разрешается ввод только национальных // адресов. Изменение страны у адреса не допускается. @@ -5148,7 +5385,7 @@ ПараметрыВида.Вставить("ЗапретитьРедактированиеПользователем", Ложь); ПараметрыВида.Вставить("ХранитьИсториюИзменений", Ложь); ПараметрыВида.Вставить("МеждународныйФорматАдреса", Ложь); - + ПараметрыВида.Вставить("ИсправлятьУстаревшиеАдреса", Ложь); ВидПоляДругое = ?(ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Другое, "ОднострочноеШирокое", ""); @@ -5180,6 +5417,8 @@ ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда НастройкиПроверки = Новый Структура; НастройкиПроверки.Вставить("ТелефонCДобавочнымНомером", Истина); + НастройкиПроверки.Вставить("ВводитьНомерПоМаске", Ложь); + НастройкиПроверки.Вставить("МаскаНомераТелефона", ""); Иначе НастройкиПроверки = Неопределено; КонецЕсли; @@ -5204,16 +5443,16 @@ // Конструктор описания страны мира. // // Параметры: -// РезультатЗапроса - Структура - Данные заполнения. +// РезультатЗапроса - Структура - данные заполнения. // // Возвращаемое значение: -// Структура - Описание: -// Код - Строка - Числовой код страны по классификатору; -// КодАльфа2 - Строка - Двузначный буквенный код альфа-2 страны по классификатору; -// КодАльфа3 - Строка - Трехзначный буквенный код альфа-3 страны по классификатору; -// Наименование - Строка - Краткое наименование страны мира -// НаименованиеПолное - Строка - Полное наименование страны мира; -// УчастникЕАЭС - Булево - Страна является участником Евразийского экономического союза; +// Структура: +// Код - Строка - числовой код страны по классификатору; +// КодАльфа2 - Строка - двузначный буквенный код альфа-2 страны по классификатору; +// КодАльфа3 - Строка - трехзначный буквенный код альфа-3 страны по классификатору; +// Наименование - Строка - краткое наименование страны мира +// НаименованиеПолное - Строка - полное наименование страны мира; +// УчастникЕАЭС - Булево - страна является участником Евразийского экономического союза; // Неактуальный - Булево - помечена на удаление. // Функция ОписаниеСтраныМира(ДанныеЗаполнения) @@ -5224,6 +5463,7 @@ Результат.Вставить("КодАльфа3", ""); Результат.Вставить("Наименование", ""); Результат.Вставить("НаименованиеПолное", ""); + Результат.Вставить("МеждународноеНаименование", ""); Результат.Вставить("УчастникЕАЭС", Ложь); Результат.Вставить("Неактуальный", Ложь); @@ -5270,6 +5510,8 @@ | ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти, | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, | ВидыКонтактнойИнформации.МеждународныйФорматАдреса КАК МеждународныйФорматАдреса, + | ВидыКонтактнойИнформации.ВводитьНомерПоМаске КАК ВводитьНомерПоМаске, + | ВидыКонтактнойИнформации.МаскаНомераТелефона КАК МаскаНомераТелефона, | ЕСТЬNULL(КонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация, ЛОЖЬ) КАК ЭтоИсторическаяКонтактнаяИнформация, | ЕСТЬNULL(КонтактнаяИнформация.Представление, """") КАК Представление, | ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, """") КАК ЗначенияПолей, @@ -5327,6 +5569,8 @@ | ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение, | ВидыКонтактнойИнформации.ВидПоляДругое КАК ВидПоляДругое, | ВидыКонтактнойИнформации.РазрешитьВводНесколькихЗначений КАК РазрешитьВводНесколькихЗначений, + | ВидыКонтактнойИнформации.ВводитьНомерПоМаске КАК ВводитьНомерПоМаске, + | ВидыКонтактнойИнформации.МаскаНомераТелефона КАК МаскаНомераТелефона, | ВЫРАЗИТЬ(ЕСТЬNULL(ВидыКонтактнойИнформацииПредставления.Наименование, ВидыКонтактнойИнформации.Наименование) КАК СТРОКА(150)) КАК Наименование, | ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений, | ВидыКонтактнойИнформации.ВидРедактирования КАК ВидРедактирования, @@ -5362,7 +5606,7 @@ |УПОРЯДОЧИТЬ ПО | ВидыКонтактнойИнформации.Ссылка ИЕРАРХИЯ |"; - + КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИдентификаторСтрокиТабличнойЧасти", diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index 1ef80de85..c5b05416f 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -12,11 +12,11 @@ // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. -// Модифицированность - Булево - Устанавливаемый флаг модифицированности формы. -// СтандартнаяОбработка - Булево - Устанавливаемый флаг стандартной обработки события формы. -// ПараметрыОткрытия - Структура - Параметры открытия формы ввода контактной информации. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// Элемент - ПолеФормы - элемент формы, содержащий представление контактной информации. +// Модифицированность - Булево - устанавливаемый флаг модифицированности формы. +// СтандартнаяОбработка - Булево - устанавливаемый флаг стандартной обработки события формы. +// ПараметрыОткрытия - Структура - параметры открытия формы ввода контактной информации. // Процедура НачатьВыбор(Форма, Элемент, Модифицированность = Истина, СтандартнаяОбработка = Ложь, ПараметрыОткрытия = Неопределено) Экспорт ПриНачалеВыбора(Форма, Элемент, Модифицированность, СтандартнаяОбработка, ПараметрыОткрытия, Истина); @@ -26,9 +26,9 @@ // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. -// ЭтоТабличнаяЧасть - Булево - Флаг того, что элемент является частью таблицы формы. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// Элемент - ПолеФормы - элемент формы, содержащий представление контактной информации. +// ЭтоТабличнаяЧасть - Булево - флаг того, что элемент является частью таблицы формы. // Процедура НачатьИзменение(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) Экспорт @@ -40,8 +40,8 @@ // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// ИмяРеквизита - Строка - Имя реквизита формы, связанного с представление контактной информации. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// ИмяРеквизита - Строка - имя реквизита формы, связанного с представление контактной информации. // Процедура НачатьОчистку(Знач Форма, Знач ИмяРеквизита) Экспорт ПриОчистке(Форма, ИмяРеквизита, Истина); @@ -102,7 +102,8 @@ // Текст - Строка - строка текста, введенная пользователем в поле контактной информации. // ДанныеВыбора - СписокЗначений - содержит список значений, который будет использован при стандартной // обработке события. -// ПараметрыПолученияДанных - Структура, Неопределено - содержит параметры поиска, которые будут переданы +// ПараметрыПолученияДанных - Структура +// - Неопределено - содержит параметры поиска, которые будут переданы // в метод ПолучитьДанныеВыбора. Подробнее см. описание расширения поля формы для // поля ввода АвтоПодбор в синтакс-помощнике. // Ожидание - Число - интервал в секундах после ввода текста, через который произошло событие. @@ -164,8 +165,8 @@ // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// Результат - Произвольный - Данные, переданные обработчиком команды. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// Результат - Произвольный - данные, переданные обработчиком команды. // Процедура ОткрытьФормуВводаАдреса(Форма, Результат) Экспорт @@ -181,8 +182,8 @@ // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// Результат - Произвольный - Данные, переданные обработчиком команды. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// Результат - Произвольный - данные, переданные обработчиком команды. // Процедура КонтрольОбновленияФормы(Форма, Результат) Экспорт @@ -195,9 +196,9 @@ // Реализует функционал автоматического заведения элемента справочника СтраныМира после выбора. // // Параметры: -// Элемент - ПолеФормы - Элемент, содержащий редактируемую страну мира. -// ВыбранноеЗначение - Произвольный - Значение выбора. -// СтандартнаяОбработка - Булево - Устанавливаемый флаг стандартной обработки события формы. +// Элемент - ПолеФормы - элемент, содержащий редактируемую страну мира. +// ВыбранноеЗначение - Произвольный - значение выбора. +// СтандартнаяОбработка - Булево - устанавливаемый флаг стандартной обработки события формы. // Процедура СтранаМираОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Экспорт Если Не СтандартнаяОбработка Тогда @@ -233,7 +234,7 @@ // // Параметры: // ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид редактируемой контактной информации. -// - см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации - описание вида. +// - см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации // Значение - Строка - сериализованное значение полей контактной информации в формате JSON или XML. // Представление - Строка - представление контактной информации. // Комментарий - Строка - комментарий контактной информации. @@ -241,9 +242,9 @@ // Если указан, то в возвращаемую структуру добавляются поля соответствующие типу. // // Возвращаемое значение: -// Структура - содержит поля: -// * ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид редактируемой контактной информации. -// см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации +// Структура: +// * ВидКонтактнойИнформации - см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации +// * ТолькоПросмотр - Булево - если Истина, то форма будет открыта в режиме только просмотра. // * Значение - Строка - значение полей контактной информации в формате JSON или ХML. // * Представление - Строка - представление контактной информации. // * ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации, если был указан @@ -269,6 +270,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ВидКонтактнойИнформации", ВидКонтактнойИнформации); + ПараметрыФормы.Вставить("ТолькоПросмотр", Ложь); ПараметрыФормы.Вставить("Значение", Значение); ПараметрыФормы.Вставить("Представление", Представление); ПараметрыФормы.Вставить("Комментарий", Комментарий); @@ -316,12 +318,16 @@ // Создает письмо по контактной информации. // // Параметры: -// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - значение контактной информации. -// Представление - Строка - Представление контактной информации. Используется, если невозможно определить +// ЗначенияПолей - Строка +// - Структура +// - Соответствие +// - СписокЗначений - значение контактной информации. +// Представление - Строка - представление контактной информации. Используется, если невозможно определить // представление из параметра. ЗначенияПолей (отсутствие поля Представление). -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, -// Структура - Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей. -// ИсточникКонтактнойИнформации - Произвольный - Объект владелец контактной информации. +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации +// - ПеречислениеСсылка.ТипыКонтактнойИнформации +// - Структура - используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей. +// ИсточникКонтактнойИнформации - Произвольный - объект владелец контактной информации. // Процедура СоздатьЭлектронноеПисьмо(Знач ЗначенияПолей, Знач Представление = "", ОжидаемыйВид = Неопределено, ИсточникКонтактнойИнформации = Неопределено) Экспорт @@ -361,13 +367,17 @@ // Создает письмо по контактной информации. // // Параметры: -// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - Контактная информация. -// Представление - Строка - Представление. Используется, если невозможно определить представление из параметра. +// ЗначенияПолей - Строка +// - Структура +// - Соответствие +// - СписокЗначений - контактная информация. +// Представление - Строка - представление. Используется, если невозможно определить представление из параметра. // ЗначенияПолей (отсутствие поля Представление). -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, -// Структура - Используется для определения типа, если его невозможно вычислить по полю -// ЗначенияПолей. -// ИсточникКонтактнойИнформации - ЛюбаяСсылка - Объект который является источником контактной информации. +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации +// - ПеречислениеСсылка.ТипыКонтактнойИнформации +// - Структура - используется для определения типа, если его невозможно вычислить по полю +// ЗначенияПолей. +// ИсточникКонтактнойИнформации - ЛюбаяСсылка - объект который является источником контактной информации. // Процедура СоздатьSMS(Знач ЗначенияПолей, Знач Представление = "", ОжидаемыйВид = Неопределено, ИсточникКонтактнойИнформации = "") Экспорт @@ -467,7 +477,7 @@ // Открыть окно беседы(чат) в программе Skype // // Параметры: -// ЛогинSkype - Строка - Логин Skype. +// ЛогинSkype - Строка - логин Skype. // Процедура НачатьБеседуВSkype(ЛогинSkype) Экспорт @@ -478,10 +488,15 @@ // Открывает ссылку по контактной информации. // // Параметры: -// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - Контактная информация. -// Представление - Строка - Представление. Используется, если невозможно определить представление из параметра. +// ЗначенияПолей - Строка +// - Структура +// - Соответствие +// - СписокЗначений - контактная информация. +// Представление - Строка - представление. Используется, если невозможно определить представление из параметра. // ЗначенияПолей (отсутствие поля "Представление"). -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура - +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации +// - ПеречислениеСсылка.ТипыКонтактнойИнформации +// - Структура - // Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей. // Процедура ПерейтиПоВебСсылке(Знач ЗначенияПолей, Знач Представление = "", ОжидаемыйВид = Неопределено) Экспорт @@ -520,7 +535,7 @@ // Яндекс.Карты или GoogleMaps. // Процедура ПоказатьАдресНаКарте(Адрес, ИмяКартографическогоСервиса) Экспорт - АдресКодированный = URLEncode(Адрес); + АдресКодированный = ДекодированиеСтроки(Адрес); Если ИмяКартографическогоСервиса = "GoogleMaps" Тогда СтрокаЗапуска = "https://maps.google.ru/?q=" + АдресКодированный; Иначе @@ -568,11 +583,11 @@ // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. -// Модифицированность - Булево - Устанавливаемый флаг модифицированности формы. -// СтандартнаяОбработка - Булево - Устанавливаемый флаг стандартной обработки события формы. -// ПараметрыОткрытия - Структура - Параметры открытия формы ввода контактной информации. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// Элемент - ПолеФормы - элемент формы, содержащий представление контактной информации. +// Модифицированность - Булево - устанавливаемый флаг модифицированности формы. +// СтандартнаяОбработка - Булево - устанавливаемый флаг стандартной обработки события формы. +// ПараметрыОткрытия - Структура - параметры открытия формы ввода контактной информации. // Процедура НачалоВыбора(Форма, Элемент, Модифицированность = Истина, СтандартнаяОбработка = Ложь, ПараметрыОткрытия = Неопределено) Экспорт ПриНачалеВыбора(Форма, Элемент, Модифицированность, СтандартнаяОбработка, ПараметрыОткрытия, Ложь); @@ -582,8 +597,8 @@ // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// ИмяРеквизита - Строка - Имя реквизита формы, связанного с представление контактной информации. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// ИмяРеквизита - Строка - имя реквизита формы, связанного с представление контактной информации. // Процедура Очистка(Знач Форма, Знач ИмяРеквизита) Экспорт ПриОчистке(Форма, ИмяРеквизита, Ложь); @@ -604,9 +619,9 @@ // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. -// ЭтоТабличнаяЧасть - Булево - Флаг того, что элемент является частью таблицы формы. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// Элемент - ПолеФормы - элемент формы, содержащий представление контактной информации. +// ЭтоТабличнаяЧасть - Булево - флаг того, что элемент является частью таблицы формы. // Процедура ПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) Экспорт @@ -621,10 +636,10 @@ // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // // Параметры: -// Текст - Строка - Строка текста, введенная пользователем в поле контактной информации. -// ДанныеВыбора - СписокЗначений - Содержит список значений, который будет использован при стандартной +// Текст - Строка - строка текста, введенная пользователем в поле контактной информации. +// ДанныеВыбора - СписокЗначений - содержит список значений, который будет использован при стандартной // обработке события. -// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения стандартной // (системной) обработки события. Если в теле процедуры-обработчика // установить данному параметру значение Ложь, стандартная обработка события // производиться не будет. @@ -640,9 +655,9 @@ // Устарела. Следует использовать ПриИзменении. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. -// ЭтоТабличнаяЧасть - Булево - Флаг того, что элемент является частью таблицы формы. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// Элемент - ПолеФормы - элемент формы, содержащий представление контактной информации. +// ЭтоТабличнаяЧасть - Булево - флаг того, что элемент является частью таблицы формы. // Процедура ПредставлениеПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) Экспорт ПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть); @@ -651,13 +666,13 @@ // Устарела. Следует использовать НачалоВыбора. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. -// Модифицированность - Булево - Устанавливаемый флаг модифицированности формы. -// СтандартнаяОбработка - Булево - Устанавливаемый флаг стандартной обработки события формы. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// Элемент - ПолеФормы - элемент формы, содержащий представление контактной информации. +// Модифицированность - Булево - устанавливаемый флаг модифицированности формы. +// СтандартнаяОбработка - Булево - устанавливаемый флаг стандартной обработки события формы. // // Возвращаемое значение: -// Неопределено - Не используется, обратная совместимость. +// Неопределено - не используется, обратная совместимость. // Функция ПредставлениеНачалоВыбора(Форма, Элемент, Модифицированность = Истина, СтандартнаяОбработка = Ложь) Экспорт НачалоВыбора(Форма, Элемент, Модифицированность, СтандартнаяОбработка); @@ -667,11 +682,11 @@ // Устарела. Следует использовать Очистка. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// ИмяРеквизита - Строка - Имя реквизита формы, связанного с представление контактной информации. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// ИмяРеквизита - Строка - имя реквизита формы, связанного с представление контактной информации. // // Возвращаемое значение: -// Неопределено - Не используется, обратная совместимость. +// Неопределено - не используется, обратная совместимость. // Функция ПредставлениеОчистка(Форма, ИмяРеквизита) Экспорт Очистка(Форма, ИмяРеквизита); @@ -681,11 +696,11 @@ // Устарела. Следует использовать ВыполнитьКоманду. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма владельца контактной информации. -// ИмяКоманды - Строка - Имя автоматически сгенерированной команды действия. +// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации. +// ИмяКоманды - Строка - имя автоматически сгенерированной команды действия. // // Возвращаемое значение: -// Неопределено - Не используется, обратная совместимость. +// Неопределено - не используется, обратная совместимость. // Функция ПодключаемаяКоманда(Форма, ИмяКоманды) Экспорт ВыполнитьКоманду(Форма, ИмяКоманды); @@ -703,7 +718,7 @@ // Обработчик после закрытия формы истории // // Параметры: -// Результат - Структура - результат +// Результат - Структура // ДополнительныеПараметры - см. ПослеЗакрытияФормыИсторииДополнительныеПараметры // Процедура ПослеЗакрытияФормыИстории(Результат, ДополнительныеПараметры) Экспорт @@ -757,7 +772,7 @@ // Продолжение вызова ПредставлениеНачалоВыбора // // Параметры: -// РезультатЗакрытия - Структура - +// РезультатЗакрытия - Структура // ДополнительныеПараметры - см. ПредставлениеНачалоВыбораЗавершениеДополнительныеПараметры // Процедура ПредставлениеНачалоВыбораЗавершение(Знач РезультатЗакрытия, Знач ДополнительныеПараметры) Экспорт @@ -846,7 +861,7 @@ ЭлементФормыПредставление.РасширеннаяПодсказка.Заголовок = Комментарий; Если РезультатЗакрытия.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда - ТекстПредставления = УправлениеКонтактнойИнформациейКлиентСервер.АдресСайта(ТекстПредставления, РезультатЗакрытия.Адрес); + ТекстПредставления = УправлениеКонтактнойИнформациейКлиентСервер.АдресСайта(ТекстПредставления, РезультатЗакрытия.Адрес, Форма.ТолькоПросмотр); КонецЕсли; ДанныеНаФорме.Представление = ТекстПредставления; @@ -854,8 +869,8 @@ ДанныеНаФорме.Комментарий = Комментарий; КонецЕсли; - Если РезультатЗакрытия.Свойство("АдресВВидеГиперссылки") - И РезультатЗакрытия.АдресВВидеГиперссылки + Если РезультатЗакрытия.Свойство("ВВидеГиперссылки") + И РезультатЗакрытия.ВВидеГиперссылки И НЕ ЗначениеЗаполнено(ТекстПредставления) Тогда ДанныеЗаполнения[Элемент.Имя] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); Иначе @@ -997,6 +1012,13 @@ Результат.Вставить("ИмяЭлементаДляРазмещения", НайденнаяСтрока.ИмяЭлементаДляРазмещения); КонецЕсли; + Если ЗначениеЗаполнено(НайденнаяСтрока.Маска) Тогда + ЭлементыФормы = Форма.Элементы[ИмяРеквизита]; + Если ЭлементыФормы.Вид = ВидПоляФормы.ПолеВвода Тогда + Форма.Элементы[ИмяРеквизита].Маска = НайденнаяСтрока.Маска; + КонецЕсли; + КонецЕсли; + ОбновитьКонтактнуюИнформациюФормы(Форма, Результат, АсинхронныйВызов); КонецПроцедуры @@ -1119,7 +1141,7 @@ МожноОтправлятьSMS = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].МожноОтправлятьSMS; Параметры = Новый Структура("НомерТелефона, ТипКонтактнойИнформации, ИсточникКонтактнойИнформации"); - Параметры.НомерТелефона = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; + Параметры.НомерТелефона = Форма[ИмяРеквизита]; Параметры.ТипКонтактнойИнформации = ТипКонтактнойИнформации; Параметры.ИсточникКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].Владелец; @@ -1386,7 +1408,7 @@ // Проверка возможна только в тонком клиенте для Windows. // // Параметры: -// ИмяПротокола - Строка - Имя проверяемого URI протокола, возможные варианты "skype", "tel", "sip". +// ИмяПротокола - Строка - имя проверяемого URI протокола, возможные варианты "skype", "tel", "sip". // Если параметр не указан, то проверяются все протоколы. // // Возвращаемое значение: @@ -1475,16 +1497,16 @@ // Конструктор дополнительных параметров для формы истории // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// ПараметрыКонтактнойИнформации - Структура - -// АсинхронныйВызов - Булево - +// Форма - ФормаКлиентскогоПриложения +// ПараметрыКонтактнойИнформации - Структура +// АсинхронныйВызов - Булево // Возвращаемое значение: -// Структура - Описание: -// * Форма - ФормаКлиентскогоПриложения - -// * АсинхронныйВызов - Булево - -// * ИмяЭлементаДляРазмещения - Строка - -// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - -// * ИмяЭлемента - Строка - +// Структура: +// * Форма - ФормаКлиентскогоПриложения +// * АсинхронныйВызов - Булево +// * ИмяЭлементаДляРазмещения - Строка +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации +// * ИмяЭлемента - Строка // Функция ПослеЗакрытияФормыИсторииДополнительныеПараметры(Знач Форма, ПараметрыКонтактнойИнформации, Знач АсинхронныйВызов) @@ -1504,16 +1526,20 @@ // Описание // // Возвращаемое значение: -// Структура - Описание: -// * АсинхронныйВызов - Булево - -// * ОбновитьКонтекстноеМеню - Булево - -// * Форма - Неопределено - -// * Результат - Неопределено - -// * Элемент - ДекорацияФормы, ГруппаФормы, КнопкаФормы, ТаблицаФормы, ПолеФормы - -// * ДанныеСтроки - Неопределено - -// * ИмяЭлементаРазмещения - Строка - -// * ЭтоТабличнаяЧасть - Булево - -// * ДанныеЗаполнения - Строка - +// Структура: +// * АсинхронныйВызов - Булево +// * ОбновитьКонтекстноеМеню - Булево +// * Форма - Неопределено +// * Результат - Неопределено +// * Элемент - ДекорацияФормы +// - ГруппаФормы +// - КнопкаФормы +// - ТаблицаФормы +// - ПолеФормы +// * ДанныеСтроки - Неопределено +// * ИмяЭлементаРазмещения - Строка +// * ЭтоТабличнаяЧасть - Булево +// * ДанныеЗаполнения - Строка // Функция ПредставлениеНачалоВыбораЗавершениеДополнительныеПараметры() @@ -1539,7 +1565,7 @@ // пробелами, кодированными как знаки плюс (+).Она кодируется тем же способом, что и // post данные WWW-формы, то есть как в типе носителя application/x-www-form-urlencoded. -Функция URLEncode(Строка) +Функция ДекодированиеСтроки(Строка) Результат = ""; Для НомерСимвола = 1 По СтрДлина(Строка) Цикл КодСимвола = КодСимвола(Строка, НомерСимвола); diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index b1ba80c14..c64f449a3 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -18,7 +18,7 @@ // Комментарий - Строка - комментарий. // // Возвращаемое значение: -// - Строка - Представление телефона. +// - Строка - представление телефона. // Функция СформироватьПредставлениеТелефона(КодСтраны, КодГорода, НомерТелефона, Добавочный, Комментарий) Экспорт @@ -50,7 +50,7 @@ // Возвращает признак того, является ли строка данных контактной информации XML данными. // // Параметры: -// Текст - Строка - Проверяемая строка. +// Текст - Строка - проверяемая строка. // // Возвращаемое значение: // Булево - результат проверки. @@ -64,7 +64,7 @@ // Возвращает признак того, является ли строка данных контактной информации JSON данными. // // Параметры: -// Текст - Строка - Проверяемая строка. +// Текст - Строка - проверяемая строка. // // Возвращаемое значение: // Булево - результат проверки. @@ -88,10 +88,10 @@ // Определяет, введена ли информация в поле контактной информации, для случаев когда она отображается в виде гиперссылки. // // Параметры: -// Значение - Строка - Значение контактной информации. +// Значение - Строка - значение контактной информации. // // Возвращаемое значение: -// Булево - Если Истина, то поле контактной информации было заполнено. +// Булево - если Истина, то поле контактной информации было заполнено. // Функция КонтактнаяИнформацияЗаполнена(Значение) Экспорт Возврат СокрЛП(Значение) <> ТекстПустогоАдресаВВидеГиперссылки(); @@ -103,14 +103,14 @@ // Формирует представление с указанным видом для формы ввода адреса. // // Параметры: -// СтруктураАдреса - Структура - Адрес в виде структуры. +// СтруктураАдреса - Структура - адрес в виде структуры. // Описание структуры см. в функции РаботаСАдресами.СведенияОбАдресе. // Описание предыдущей версии структуры см. в функции РаботаСАдресами.ПредыдущаяСтруктураКонтактнойИнформацииXML. -// Представление - Строка - Представление адреса. -// НаименованиеВида - Строка - Наименование вида. +// Представление - Строка - представление адреса. +// НаименованиеВида - Строка - наименование вида. // // Возвращаемое значение: -// Строка - Представление адреса с видом. +// Строка - представление адреса с видом. // Функция СформироватьПредставлениеАдреса(СтруктураАдреса, Представление, НаименованиеВида = Неопределено) Экспорт @@ -173,7 +173,7 @@ // // Параметры: // ТипКИ - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. -// ФорматАдреса - Строка - Не используется, оставлен для обратной совместимости. +// ФорматАдреса - Строка - не используется, оставлен для обратной совместимости. // // Возвращаемое значение: // Структура - пустая структура контактной информации, ключи - имена полей, значения поля. @@ -200,14 +200,14 @@ // Список ключей может быть расширен национальными полями в одноименной функции общего модуля РаботаСАдресамиКлиентСервер. // // Параметры: -// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации, +// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации, // определяющий состав полей контактной информации. // // Возвращаемое значение: -// Структура - Поля контактной информации: -// * Value - Строка - Представление контактной информации. -// * Comment - Строка - Комментарий. -// * Type - Строка - Тип контактной информации. См. значение в Перечисление.ТипыКонтактнойИнформации.Адрес. +// Структура - поля контактной информации: +// * Value - Строка - представление контактной информации. +// * Comment - Строка - комментарий. +// * Type - Строка - тип контактной информации. См. значение в Перечисление.ТипыКонтактнойИнформации.Адрес. // Расширенный состав полей для типа контактной информации адрес: // * Country - Строка - наименование страны, например "Россия". // * CountryCode - Строка -код страны. @@ -328,10 +328,10 @@ // Возвращает структуру с наименованием и сокращением от значения. // // Параметры: -// Текст - Строка - Полное наименование. +// Текст - Строка - полное наименование. // // Возвращаемое значение: -// Структура - результат обработки. +// Структура: // * Наименование - Строка - часть текста. // * Сокращение - Строка - часть текста. // @@ -361,8 +361,8 @@ // Разделяет текст на слова по указанным разделителям. По умолчанию разделители - пробельные символы. // // Параметры: -// Текст - Строка - Разделяемая строка. -// Разделители - Строка - Необязательная строка символов-разделителей. +// Текст - Строка - разделяемая строка. +// Разделители - Строка - необязательная строка символов-разделителей. // // Возвращаемое значение: // Массив - строки, слова @@ -396,8 +396,8 @@ // Разделяет текст, разделенный запятыми. // // Параметры: -// Текст - Срока - Разделяемый текст. -// ВыделятьСокращения - Булево - Опциональный параметр режима работы. +// Текст - Срока - разделяемый текст. +// ВыделятьСокращения - Булево - опциональный параметр режима работы. // // Возвращаемое значение: // Массив - содержит структуры "Наименование, Сокращение". @@ -428,7 +428,7 @@ КонецЦикла; Возврат Результат; -КонецФункции +КонецФункции #КонецОбласти @@ -507,15 +507,23 @@ КонецФункции -Функция АдресСайта(Знач Представление, Знач Ссылка) Экспорт +Функция АдресСайта(Знач Представление, Знач Ссылка, ТолькоПросмотр) Экспорт Если ПустаяСтрока(Представление) Или ПустаяСтрока(Ссылка) Тогда Представление = ТекстПустогоАдресаВВидеГиперссылки(); Ссылка = НавигационнаяСсылкаВебСайта(); КонецЕсли; + Если СтрСравнить(Представление, ТекстПустогоАдресаВВидеГиперссылки()) = 0 И ТолькоПросмотр Тогда + Возврат Представление; + КонецЕсли; + ТекстПредставления = Новый ФорматированнаяСтрока(Представление,,,, Ссылка); + Если ТолькоПросмотр Тогда + Возврат ТекстПредставления; + КонецЕсли; + КартинкаИзменить = Новый ФорматированнаяСтрока(БиблиотекаКартинок.РедактироватьАдресСайта,,,, НавигационнаяСсылкаВебСайта()); Возврат Новый ФорматированнаяСтрока(ТекстПредставления, " ", КартинкаИзменить); diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl index bc04c7a19..5170d89e3 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl @@ -12,9 +12,9 @@ // // Параметры: // Наименования - Соответствие - представление вида контактной информации на переданном языке: -// * Ключ - Строка - Имя вида контактной информации. Например, "_ДемоАдресПартнера". -// * Значение - Строка - Наименование вида контактной информации для переданного кода языка. -// КодЯзыка - Строка - Код языка. Например, "en". +// * Ключ - Строка - имя вида контактной информации. Например, "_ДемоАдресПартнера". +// * Значение - Строка - наименование вида контактной информации для переданного кода языка. +// КодЯзыка - Строка - код языка. Например, "en". // // Пример: // Наименования["_ДемоАдресПартнера"] = НСтр("ru='Адрес'; en='Address';", КодЯзыка); diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl index 9f78a04a5..84936350b 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl @@ -8,13 +8,12 @@ #Область СлужебныйПрограммныйИнтерфейс - // Параметры: -// Ссылка - СправочникСсылка - -// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - -// Дата - Дата - +// Ссылка - СправочникСсылка +// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации +// Дата - Дата // Возвращаемое значение: -// Строка - +// Строка // Функция ПервоеЗначениеКонтактнойИнформацииОбъектаПоТипу(Ссылка, ТипКонтактнойИнформации, Дата) Экспорт @@ -75,7 +74,7 @@ Функция ПроверитьАдрес(Адрес, ПараметрыПроверкиАдреса = Неопределено) Экспорт - РезультатПроверки = РезультатПроверки(); + РезультатПроверки = РезультатПроверки(); Если ТипЗнч(Адрес) <> Тип("Строка") Тогда РезультатПроверки.Результат = "СодержитОшибки"; @@ -91,14 +90,29 @@ КонецФункции +Функция ПреобразоватьКонтактнуюИнформациюВФорматJSON(СсылкаИлиОбъект, ТипОбъекта) Экспорт + + Если ОбщегоНазначения.ЭтоСсылка(ТипОбъекта) Тогда + Если Не СодержитПустыеПоляJSON(СсылкаИлиОбъект) Тогда + Возврат Ложь; + КонецЕсли; + ОбъектИзменен = ЗаполнитьJSONПоляКонтактнойИнформацииДляСсылки(СсылкаИлиОбъект); + Иначе + ОбъектИзменен = ЗаполнитьJSONПоляКонтактнойИнформацииДляОбъекта(СсылкаИлиОбъект); + КонецЕсли; + + Возврат ОбъектИзменен; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. // См. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта. // // Параметры: -// Объект - Произвольный - -// ДополнительныеРеквизиты - См. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта.ДополнительныеРеквизиты +// Объект - Произвольный +// ДополнительныеРеквизиты - см. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта.ДополнительныеРеквизиты // Процедура ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты) Экспорт @@ -170,21 +184,7 @@ Обработчик.НачальноеЗаполнение = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.3.4"; - Обработчик.Идентификатор = Новый УникальныйИдентификатор("dfc6a0fa-7c7b-4096-9d04-2c67d5eb17a4"); - Обработчик.Процедура = "Справочники.СтраныМира.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.СтраныМира.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; - Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.ЧитаемыеОбъекты = "Справочник.СтраныМира"; - Обработчик.ИзменяемыеОбъекты = "Справочник.СтраныМира"; - Обработчик.БлокируемыеОбъекты = "Справочник.СтраныМира"; - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; - Обработчик.Комментарий = НСтр("ru = 'Обновление сведений о странах мирах в соответствии с общероссийским классификатором стран мира. - |До завершения обработки наименование стран в документах в ряде случаев будет отображаться некорректно.'"); - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.1.2.154"; + Обработчик.Версия = "3.1.3.69"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("22f43dca-ac4f-3289-81a9-e110cd56f8b2"); Обработчик.Процедура = "Справочники.ВидыКонтактнойИнформации.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; @@ -197,6 +197,20 @@ Обработчик.Комментарий = НСтр("ru = 'Обновление видов контактной информации. |До завершения обработки виды контактной информации в документах в ряде случаев будут отображаться некорректно.'"); + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.3.148"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("dfc6a0fa-7c7b-4096-9d04-2c67d5eb17a4"); + Обработчик.Процедура = "Справочники.СтраныМира.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.СтраныМира.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ЧитаемыеОбъекты = "Справочник.СтраныМира"; + Обработчик.ИзменяемыеОбъекты = "Справочник.СтраныМира"; + Обработчик.БлокируемыеОбъекты = "Справочник.СтраныМира"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.Комментарий = НСтр("ru = 'Обновление сведений о странах мирах в соответствии с общероссийским классификатором стран мира. + |До завершения обработки наименование стран в документах в ряде случаев будет отображаться некорректно.'"); + КонецПроцедуры // См. ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей. @@ -209,7 +223,7 @@ // См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек // // Параметры: -// Объекты - Массив - +// Объекты - Массив // Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт @@ -256,10 +270,105 @@ КонецПроцедуры +// Параметры: +// ШаблоныЗаданий - см. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов.ШаблоныЗаданий +// +Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт + + ШаблоныЗаданий.Добавить("ИсправлениеУстаревшихАдресов"); + +КонецПроцедуры + +// Параметры: +// СоответствиеИменПсевдонимам - см. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков.СоответствиеИменПсевдонимам +// +Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт + СоответствиеИменПсевдонимам.Вставить("УправлениеКонтактнойИнформациейСлужебный.ИсправлениеУстаревшихАдресов"); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +Функция СодержитПустыеПоляJSON(ПроверяемыйОбъект) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | _ДемоПартнерыКонтактнаяИнформация.Ссылка КАК Ссылка + |ИЗ + | Справочник._ДемоПартнеры.КонтактнаяИнформация КАК _ДемоПартнерыКонтактнаяИнформация + |ГДЕ + | (ВЫРАЗИТЬ(_ДемоПартнерыКонтактнаяИнформация.Значение КАК СТРОКА(1))) = """" + | И _ДемоПартнерыКонтактнаяИнформация.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", ПроверяемыйОбъект); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса.Пустой(); + +КонецФункции + +Функция ЗаполнитьJSONПоляКонтактнойИнформацииДляСсылки(Ссылка) + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ОбъектМетаданных.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + Попытка + + Блокировка.Заблокировать(); + Объект = Ссылка.ПолучитьОбъект(); + Объект.Заблокировать(); + + Если ЗаполнитьJSONПоляКонтактнойИнформацииДляОбъекта(Объект) Тогда + Объект.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецФункции + +Функция ЗаполнитьJSONПоляКонтактнойИнформацииДляОбъекта(ОбъектСКонтактнойИнформацией) + + ОбъектИзменен = Ложь; + + Для каждого СтрокаКонтактнойИнформации Из ОбъектСКонтактнойИнформацией.КонтактнаяИнформация Цикл + + Если ЗначениеЗаполнено(СтрокаКонтактнойИнформации.Значение) + И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(СтрокаКонтактнойИнформации.Значение) Тогда + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда + + СтрокаКонтактнойИнформации.Значение = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON( + СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаКонтактнойИнформации.Тип); + Иначе + + СтрокаКонтактнойИнформации.Значение = КонтактнаяИнформацияПоПредставлению( + СтрокаКонтактнойИнформации.Представление, СтрокаКонтактнойИнформации.Тип); + + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаКонтактнойИнформации.Значение) Тогда + ОбъектИзменен = Истина; + КонецЕсли; + + КонецЦикла; + + Возврат ОбъектИзменен; + +КонецФункции + Функция ПространствоИмен() Экспорт Возврат "http://www.v8.1c.ru/ssl/contactinfo"; КонецФункции @@ -340,9 +449,9 @@ // Функция-конструктор результата проверки. // // Возвращаемое значение: -// Структура - где: -// * СписокОшибок - СписокЗначений - -// * Результат - Строка - +// Структура: +// * СписокОшибок - СписокЗначений +// * Результат - Строка // Функция РезультатПроверки() @@ -359,7 +468,7 @@ Функция ИсправитьПорциюВидовКонтактнойИнформации(Знач ПроблемныеОбъекты, Проверка) - ИсправленоОбъектов = 0; + ИсправленоОбъектов = 0; ТекстЗапроса = "ВЫБРАТЬ | ПроблемныеОбъекты.ПроблемныйОбъект КАК Ссылка @@ -368,7 +477,7 @@ | &ПроблемныеОбъекты КАК ПроблемныеОбъекты |ИНДЕКСИРОВАТЬ ПО | ПроблемныйОбъект - |; + |; | |ВЫБРАТЬ | ВидыКонтактнойИнформации.Ссылка КАК Ссылка, @@ -425,7 +534,7 @@ СсылкаНаЭлемент = СтрокаЗапроса.Ссылка; ПолноеИмя = СсылкаНаЭлемент.Метаданные().ПолноеИмя(); - СтрокаСИменемГруппы = ИменаГрупп.Найти(СтрЗаменить(ПолноеИмя, ".", ""), "ИмяПредопределенногоВида"); + СтрокаСИменемГруппы = ИменаГрупп.Найти(СтрЗаменить(ПолноеИмя, ".", ""), "ИмяПредопределенногоВида"); // СправочникСсылка.ВидыКонтактнойИнформации Если СтрокаСИменемГруппы <> Неопределено Тогда НачатьТранзакцию(); @@ -500,7 +609,7 @@ КонецЕсли; КонецЦикла; - Возврат ОбъектыМетаданных; + Возврат ОбъектыМетаданных; КонецФункции @@ -520,13 +629,14 @@ ПроблемныеОбъекты = МодульКонтрольВеденияУчета.ПроблемныеОбъекты(Проверка); ВсегоОбъектов = 0; ИсправленоОбъектов = 0; - + Пока ПроблемныеОбъекты.Количество() > 0 Цикл + ПоследнийПроблемныйОбъект = ПроблемныеОбъекты.Получить(ПроблемныеОбъекты.Количество() - 1).ПроблемныйОбъект; ВсегоОбъектов = ВсегоОбъектов + ПроблемныеОбъекты.Количество(); ИсправленоОбъектов = ИсправленоОбъектов + ИсправитьПорциюВидовКонтактнойИнформации(ПроблемныеОбъекты, Проверка); ПроблемныеОбъекты = МодульКонтрольВеденияУчета.ПроблемныеОбъекты(Проверка, ПоследнийПроблемныйОбъект); - + КонецЦикла; Результат = Новый Структура; Результат.Вставить("ВсегоОбъектов", ВсегоОбъектов); @@ -566,11 +676,9 @@ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ | ВидыКонтактнойИнформации.ЭтоГруппа = ЛОЖЬ - | И (ВидыКонтактнойИнформации.Родитель = &ПустоеЗначение ИЛИ ВидыКонтактнойИнформации.Родитель = &Неопределено) - |"; + | И (ВидыКонтактнойИнформации.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПустаяСсылка) + | ИЛИ ВидыКонтактнойИнформации.Родитель = НЕОПРЕДЕЛЕНО)"; - Запрос.УстановитьПараметр("Неопределено", Неопределено); - Запрос.УстановитьПараметр("ПустоеЗначение", Справочники.ВидыКонтактнойИнформации.ПустаяСсылка()); РезультатЗапроса = Запрос.Выполнить(); @@ -602,6 +710,19 @@ КонецПроцедуры +Процедура ИсправлениеУстаревшихАдресов() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ИсправлениеУстаревшихАдресов); + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда + + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + МодульРаботаСАдресами.ВывитьИИсправитьУстаревшиеАдреса(); + + КонецЕсли; + +КонецПроцедуры + #Область ОбновлениеИнформационнойБазы Процедура ОбновитьСуществующиеСтраныМира() Экспорт @@ -729,9 +850,10 @@ // Обработчик события КонтактнаяИнформацияОбработкаПроверкиЗаполнения // // Параметры: -// Источник - СправочникОбъект, ДокументОбъект - -// Отказ - Булево - -// ПроверяемыеРеквизиты - Массив - +// Источник - СправочникОбъект +// - ДокументОбъект +// Отказ - Булево +// ПроверяемыеРеквизиты - Массив // Процедура КонтактнаяИнформацияОбработкаПроверкиЗаполнения(Источник, Отказ, ПроверяемыеРеквизиты) Экспорт @@ -866,6 +988,17 @@ КонецЕсли; КонецПроцедуры +Процедура УстановитьИспользованиеРегламентногоЗадания(Статус) Экспорт + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда + + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + МодульРаботаСАдресами.УстановитьСостояниеРегламентногоЗадания(Статус); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбщиеСлужебныеПроцедурыИФункции @@ -1118,15 +1251,15 @@ // Функция-конструктор таблицы содержащей адрес, где каждая строка это часть адреса. // // Возвращаемое значение: -// ТаблицаЗначений - колонки: -// * Уровень - Число - -// * Позиция - Число - -// * Значение - Строка - -// * Наименование - Строка - -// * Сокращение - Строка - -// * Начало - Число - -// * Длина - Число - -// * Идентификатор - Строка- +// ТаблицаЗначений: +// * Уровень - Число +// * Позиция - Число +// * Значение - Строка +// * Наименование - Строка +// * Сокращение - Строка +// * Начало - Число +// * Длина - Число +// * Идентификатор - Строка // Функция ЧастиАдреса() Экспорт @@ -1186,10 +1319,10 @@ // Функция-конструктор таблицы фрагментов // // Возвращаемое значение: -// ТаблицаЗначений - колонки: -// * Значение - Строка - -// * Начало - Число - -// * Длина - Число - +// ТаблицаЗначений: +// * Значение - Строка +// * Начало - Число +// * Длина - Число // Функция ТаблицаФрагментов() @@ -1485,12 +1618,15 @@ КонецФункции // Параметры: -// Источник - СправочникСсылка.ВидыКонтактнойИнформации, Структура, Неопределено - +// Источник - СправочникСсылка.ВидыКонтактнойИнформации +// - Структура +// - Неопределено // Возвращаемое значение: -// Структура - Описание: -// * Ссылка - СправочникСсылка.ВидыКонтактнойИнформации, Неопределено - -// * Ошибка - Булево - -// * ОписаниеОшибки - Строка - +// Структура: +// * Ссылка - СправочникСсылка.ВидыКонтактнойИнформации +// - Неопределено +// * Ошибка - Булево +// * ОписаниеОшибки - Строка // Функция СтруктураВидаКонтактнойИнформации(Знач Источник = Неопределено) Экспорт @@ -1537,7 +1673,7 @@ КонецФункции // Параметры: -// Объект - СправочникОбъект - +// Объект - СправочникОбъект /// Процедура ОбновитьКонтактнуюИнформациюДляСписковДляОбъекта(Объект) Экспорт @@ -1793,13 +1929,14 @@ // Описание // // Параметры: -// ВидКонтактнойИнформации - ДанныеФормыСтруктура, СправочникСсылка.ВидыКонтактнойИнформации - где: -// * Наименование - Строка - +// ВидКонтактнойИнформации - ДанныеФормыСтруктура +// - СправочникСсылка.ВидыКонтактнойИнформации: +// * Наименование - Строка // // Возвращаемое значение: -// Структура - Описание: -// * ЕстьОшибки - Булево - -// * ТекстОшибки - Строка - +// Структура: +// * ЕстьОшибки - Булево +// * ТекстОшибки - Строка // Функция ПроверитьПараметрыВидаКонтактнойИнформации(ВидКонтактнойИнформации) Экспорт @@ -1885,11 +2022,11 @@ КонецПроцедуры // Параметры: -// Объект - СправочникОбъект - -// ЗначениеИлиПредставление - Строка - -// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - -// Дата - Неопределено - Описание -// Замещать - Булево - Описание +// Объект - СправочникОбъект +// ЗначениеИлиПредставление - Строка +// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации +// Дата - Неопределено +// Замещать - Булево // Процедура ДобавитьКонтактнуюИнформацию(Объект, ЗначениеИлиПредставление, ВидКонтактнойИнформации, Знач Дата, Знач Замещать) Экспорт @@ -1975,10 +2112,10 @@ КонецПроцедуры // Параметры: -// Объект - СправочникОбъект - -// КонтактнаяИнформация - ТаблицаЗначений - -// ОбъектМетаданных - ОбъектМетаданных - -// Замещать - Булево - Описание +// Объект - СправочникОбъект +// КонтактнаяИнформация - ТаблицаЗначений +// ОбъектМетаданных - ОбъектМетаданных +// Замещать - Булево // Процедура УстановитьКонтактнуюИнформациюОбъекта(Объект, КонтактнаяИнформация, ОбъектМетаданных, Знач Замещать) Экспорт @@ -2312,7 +2449,8 @@ // // Параметры: // СтрокаТабличнойЧасти - СтрокаТабличнойЧасти - заполняемая строка табличной части "Контактная информация". -// Источник - Структура, ОбъектXDTO - контактная информация. +// Источник - Структура +// - ОбъектXDTO - контактная информация. // Процедура ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаТабличнойЧасти, Источник) @@ -2482,7 +2620,7 @@ Если ТипЗнч(Текст) = Тип("СписокЗначений") Тогда Представление = ""; ЭтоНовый = Текст.Количество() = 0; - ИначеЕсли ПустаяСтрока(Представление) Тогда + ИначеЕсли ПустаяСтрока(Представление) И СтрЧислоСтрок(Текст) = 1 Тогда Представление = Строка(Текст); ЭтоНовый = ПустаяСтрока(Текст); Иначе @@ -3920,11 +4058,10 @@ Возврат Преобразователь; КонецФункции - // Описание // // Параметры: -// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - +// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации // Возвращаемое значение: // ПреобразованиеXSL - Описание // @@ -4351,6 +4488,8 @@ Функция СтруктураВСтрокуJSON(Значение) Экспорт + КонтактнаяИнформацияПоПолям = Новый Структура; + ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); @@ -4369,9 +4508,12 @@ КонецЦикла; КонецЕсли; + Если ЗначениеЗаполнено(ЭлементСтруктуры.Значение) Тогда + КонтактнаяИнформацияПоПолям.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); + КонецЕсли; КонецЦикла; - ЗаписатьJSON(ЗаписьJSON, Значение,, "АдаптацияПолейКонтактнойИнформации", УправлениеКонтактнойИнформациейСлужебный); + ЗаписатьJSON(ЗаписьJSON, КонтактнаяИнформацияПоПолям,, "АдаптацияПолейКонтактнойИнформации", УправлениеКонтактнойИнформациейСлужебный); Возврат ЗаписьJSON.Закрыть(); @@ -4385,7 +4527,7 @@ КонецФункции -Функция JSONВКонтактнуюИнформациюПоПолям(Значение, ТипКонтактнойИнформации) Экспорт +Функция JSONВКонтактнуюИнформациюПоПолям(Знач Значение, ТипКонтактнойИнформации) Экспорт Значение = СтрЗаменить(Значение, "\R\N", "\r\n"); // исправление перевода строки diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl index 6b1ecd97d..2f19507d4 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl @@ -11,8 +11,9 @@ // Разбирает представление контактной информации и возвращает строку XML со значениями полей. // // Параметры: -// Текст - Строка - Представление контактной информации -// ОжидаемыйТип - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации - для +// Текст - Строка - представление контактной информации +// ОжидаемыйТип - СправочникСсылка.ВидыКонтактнойИнформации +// - ПеречислениеСсылка.ТипыКонтактнойИнформации - для // контроля типов. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl index 96f3652b9..94bfc9620 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl @@ -12,7 +12,7 @@ // АдресныеОбъекты. // // Возвращаемое значение: -// ФиксированноеСоответствие - с полями: +// ФиксированноеСоответствие: // * КлассификаторДоступен - Булево - классификатор доступен через веб-сервис. // * ИспользоватьЗагруженные - Булево - в программу загружен классификатор. // * ИспользуетсяАдресныйКлассификатор - Булево - в программе присутствует подсистема АдресныйКлассификатор. @@ -42,7 +42,8 @@ // Возвращает значение перечисления тип вида контактной информации. // // Параметры: -// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - источник данных. +// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации +// - Структура - источник данных. // Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) Экспорт Результат = Неопределено; @@ -77,9 +78,10 @@ // Возвращает список предопределенных видов контактной информации. // // Возвращаемое значение: -// ФиксированноеСоответствие - с полями: +// ФиксированноеСоответствие: // * Ключ - Строка - имя предопределенного вида. // * Значение - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на элемент справочника ВидыКонтактнойИнформации. +// Функция ВидыКонтактнойИнформацииПоИмени() Экспорт Виды = Новый Соответствие; @@ -97,4 +99,33 @@ Возврат ОбъектСсылка.Метаданные().ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено; КонецФункции +Функция ГруппаВидаКонтактнойИнформацииПоИмениОбъекта(ПолноеИмяОбъектаМетаданных) Экспорт + ИмяГруппыВидовКИ = СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Ссылка, + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |КОНЕЦ КАК ИмяПредопределенногоВида + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА + | И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ + | И ВидыКонтактнойИнформации.Используется = ИСТИНА"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Пока РезультатЗапроса.Следующий() Цикл + Если СтрСравнить(РезультатЗапроса.ИмяПредопределенногоВида, ИмяГруппыВидовКИ) = 0 Тогда + Возврат РезультатЗапроса.Ссылка; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index 72fa5e219..0b0588d7f 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -9,15 +9,24 @@ #Область ПрограммныйИнтерфейс // Возвращает описание найденной в коллекции печатной формы. -// Если описание не найдено, возвращает Неопределено. +// Если описание не существует, возвращает Неопределено. // Функция предназначена для использования только внутри процедуры Печать. // // Параметры: -// КоллекцияПечатныхФорм - ТаблицаЗначений - служебный параметр, переданный в процедуру Печать; -// Идентификатор - Строка - идентификатор печатной формы. +// КоллекцияПечатныхФорм - см. УправлениеПечатьюПереопределяемый.ПриПечати.КоллекцияПечатныхФорм +// Идентификатор - Строка - идентификатор печатной формы в менеджере печати. // // Возвращаемое значение: -// СтрокаТаблицыЗначений - найденное описание печатной формы. +// СтрокаТаблицыЗначений: см. УправлениеПечатьюПереопределяемый.ПриПечати.КоллекцияПечатныхФорм +// +// Пример: +// ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Квитанция"); +// Если ПечатнаяФорма <> Неопределено Тогда +// ПечатнаяФорма.ТабличныйДокумент = ПечатьКвитанции(МассивОбъектов); +// ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Квитанция (с QR кодом)'"); +// ПечатнаяФорма.ПолныйПутьКМакету = "Документ._ДемоСчетНаОплатуПокупателю.ПФ_MXL_Квитанция"; +// КонецЕсли; +// Функция СведенияОПечатнойФорме(КоллекцияПечатныхФорм, Идентификатор) Экспорт Возврат КоллекцияПечатныхФорм.Найти(ВРег(Идентификатор), "ИмяВРЕГ"); КонецФункции @@ -31,6 +40,7 @@ // // Возвращаемое значение: // Булево - Истина, если макет надо печатать. +// Функция НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакета) Экспорт Возврат КоллекцияПечатныхФорм.Найти(ВРег(ИмяМакета), "ИмяВРЕГ") <> Неопределено; @@ -54,6 +64,7 @@ // - Соответствие: // * Ключ - ЛюбаяСсылка - ссылка на объект печати; // * Значение - Строка - имя файла. +// Процедура ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ТабличныйДокумент, Картинка = Неопределено, ПолныйПутьКМакету = "", ИмяФайлаПечатнойФормы = Неопределено) Экспорт @@ -68,18 +79,31 @@ КонецПроцедуры -// Задает область печати объекта в табличном документе. -// Применяется для связывания области в табличном документе, с объектом печати (ссылка). -// Необходимо вызывать при формировании очередной области печатной формы в табличном -// документе. +// Задает область печати объекта в табличном документе. Необходимо использовать при выводе нескольких печатных форм +// в одном табличном документе для возможности печати комплектов документов, а также для возможности сохранения +// печатных форм в отдельных файлах. +// Необходимо вызывать после формирования каждой печатной формы в табличном документе. // // Параметры: // ТабличныйДокумент - ТабличныйДокумент - печатная форма; // НомерСтрокиНачало - Число - позиция начала очередной области в документе; -// ОбъектыПечати - СписокЗначений - список объектов печати; +// ОбъектыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ОбъектыПечати // Ссылка - ЛюбаяСсылка - объект печати. +// +// Пример: +// Пока ВыборкаПоДокументам.Следующий() Цикл +// НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1; +// // ... вывод печатной формы в табличный документ ... +// УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка); +// КонецЦикла; +// Процедура ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылка) Экспорт + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра ""Ссылка"", + |ожидалось: ЛюбаяСсылка, передано значение: ""%1"" (тип %2)'"), Ссылка, ТипЗнч(Ссылка)); + ОбщегоНазначенияКлиентСервер.Проверить(ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Ссылка)), ТекстСообщения, "УправлениеПечатью.ЗадатьОбластьПечатиДокумента"); + Элемент = ОбъектыПечати.НайтиПоЗначению(Ссылка); Если Элемент = Неопределено Тогда ИмяОбласти = "Документ_" + Формат(ОбъектыПечати.Количество() + 1, "ЧН=; ЧГ="); @@ -120,9 +144,10 @@ // печатных форм. // // Возвращаемое значение: -// СписокЗначений - коллекция печатных форм: +// СписокЗначений: // * Значение - Строка - идентификатор печатной формы; // * Представление - Строка - представление печатной формы. +// Функция СписокПечатныхФормИзВнешнихИсточников(ПолноеИмяОбъектаМетаданных) Экспорт ВнешниеПечатныеФормы = Новый СписокЗначений; @@ -140,12 +165,13 @@ // Возвращает список команд печати для указанной формы. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, Строка - форма или полное имя формы, для которой необходимо получить список -// команд печати. +// Форма - ФормаКлиентскогоПриложения +// - Строка - форма или полное имя формы, для которой необходимо получить список +// команд печати. // СписокОбъектов - Массив - коллекция объектов метаданных, команды печати которых необходимо использовать при составлении // списка команд печати для указанной формы. // Возвращаемое значение: -// ТаблицаЗначений - см. СоздатьКоллекциюКомандПечати +// см. СоздатьКоллекциюКомандПечати // Функция КомандыПечатиФормы(Форма, СписокОбъектов = Неопределено) Экспорт @@ -258,7 +284,7 @@ // УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати. // // Возвращаемое значение: -// ТаблицаЗначений - описание команд печати: +// ТаблицаЗначений: // // * Идентификатор - Строка - идентификатор команды печати, по которому менеджер печати определяет печатную // форму, которую необходимо сформировать. @@ -624,7 +650,7 @@ // Возвращаемое значение: // Соответствие - коллекция ссылок на объекты и их данные: // * Ключ - ЛюбаяСсылка - ссылка на объект информационной базы; -// * Значение - Структура - макет и данные: +// * Значение - Структура: // ** Ключ - Строка - имя макета; // ** Значение - Структура - данные объекта. // @@ -835,7 +861,7 @@ ЧастиСтроки = СтрРазделить(ПутьКМакету, ".", Истина); Если ЧастиСтроки.Количество() <> 2 И ЧастиСтроки.Количество() <> 3 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден.'"), ПутьКМакету); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не существует.'"), ПутьКМакету); КонецЕсли; ИмяМакета = ЧастиСтроки[ЧастиСтроки.ВГраница()]; @@ -910,66 +936,18 @@ КонецФункции -// Возвращает двоичные данные для формирования QR-кода. -// -// Параметры: -// QRСтрока - Строка - данные, которые необходимо разместить в QR-коде. -// -// УровеньКоррекции - Число - уровень погрешности изображения, при котором данный QR-код все еще возможно 100% -// распознать. -// Параметр должен иметь тип целого и принимать одно из 4 допустимых значений: -// 0 (7 % погрешности), 1 (15 % погрешности), 2 (25 % погрешности), 3 (35 % погрешности). -// -// Размер - Число - определяет длину стороны выходного изображения в пикселях. -// Если минимально возможный размер изображения больше этого параметра - код сформирован не будет. -// -// Возвращаемое значение: -// ДвоичныеДанные - буфер, содержащий байты PNG-изображения QR-кода. -// -// Пример: -// -// // Выводим на печать QR-код, содержащий в себе информацию зашифрованную по УФЭБС. -// -// QRСтрока = УправлениеПечатью.ФорматнаяСтрокаУФЭБС(РеквизитыПлатежа); -// ТекстОшибки = ""; -// ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 0, 190, ТекстОшибки); -// Если Не ПустаяСтрока(ТекстОшибки) -// ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); -// КонецЕсли; -// -// КартинкаQRКода = Новый Картинка(ДанныеQRКода); -// ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода; -// -Функция ДанныеQRКода(QRСтрока, УровеньКоррекции, Размер) Экспорт - - УстановитьОтключениеБезопасногоРежима(Истина); - ГенераторQRКода = КомпонентаФормированияQRКода(); - Если ГенераторQRКода = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Попытка - ДвоичныеДанныеКартинки = ГенераторQRКода.GenerateQRCode(QRСтрока, УровеньКоррекции, Размер); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Формирование QR-кода'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - Возврат ДвоичныеДанныеКартинки; - -КонецФункции - // Формирует печатные формы в требуемом формате и записывает в файлы. // Ограничение: печатные формы, формируемые на клиенте не поддерживаются. // // Параметры: -// КомандыПечати - Структура, Массив - команда или несколько команд печати формы, -// см. УправлениеПечатью.КомандыПечатиФормы. +// КомандыПечати - Структура +// - Массив - команда или несколько команд печати формы, +// см. УправлениеПечатью.КомандыПечатиФормы. // СписокОбъектов - Массив - ссылки на печатаемые объекты. // НастройкиСохранения - см. УправлениеПечатью.НастройкиСохранения. // // Возвращаемое значение: -// ТаблицаЗначений - файлы печатных форм: +// ТаблицаЗначений: // * ИмяФайла - Строка - имя файла; // * ДвоичныеДанные - ДвоичныеДанные - файл печатной формы. // @@ -1066,8 +1044,8 @@ // * ИмяКаталога - Строка - путь, куда помещается структура каталогов конечного документа для последующей // сборки контейнера DOCX. // * СтруктураДокумента - см. УправлениеПечатьюСлужебный.ИнициализироватьДокумент -// * Тип - Строка - -// * ПоследняяВыделеннаяОбласть - Структура - +// * Тип - Строка +// * ПоследняяВыделеннаяОбласть - Структура // Функция ИнициализироватьПечатнуюФорму(Знач УдалитьТипДокумента, Знач УдалитьНастройкиСтраницыМакета = Неопределено, Макет = Неопределено) Экспорт @@ -1091,7 +1069,7 @@ // УдалитьИмяМакета - Строка - устаревший параметр, не используется. // // Возвращаемое значение: -// Структура - описание макета: +// Структура: // * ИмяКаталога - Строка - путь, куда распаковывается контейнер DOCX шаблона для дальнейшего анализа; // * СтруктураДокумента - Структура - информация по областям, разделам и колонтитулам, входящих в шаблон. // @@ -1112,7 +1090,7 @@ // а также в случае аварийного завершения формирования. // // Параметры: -// ПечатнаяФорма - см. УправлениеПечатью.ИнициализироватьПечатнуюФорму; +// ПечатнаяФорма - см. УправлениеПечатью.ИнициализироватьПечатнуюФорму // УдалитьЗакрытьПриложение - Булево - устаревший параметр, не используется. // Процедура ОчиститьСсылки(ПечатнаяФорма, Знач УдалитьЗакрытьПриложение = Истина) Экспорт @@ -1149,7 +1127,7 @@ // // Параметры: // СсылкаНаМакет - Структура - макет печатной формы. -// ОписаниеОбласти - Структура - описание области: +// ОписаниеОбласти - Структура: // * ИмяОбласти - Строка - имя области; // * ТипТипОбласти - Строка - тип области: // "ВерхнийКолонтитул", "НижнийКолонтитул", @@ -1192,7 +1170,7 @@ // Применяется при одиночном выводе области. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. +// ПечатнаяФорма - см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. // ОбластьМакета - см. УправлениеПечатью.ОбластьМакета. // ПереходНаСледующуюСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. // @@ -1264,7 +1242,7 @@ // Применяется при одиночном выводе области. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. +// ПечатнаяФорма - см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. // ОбластьМакета - см. УправлениеПечатью.ОбластьМакета. // Данные - Структура - данные заполнения. // ПереходНаСледующуюСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. @@ -1285,7 +1263,7 @@ // Применяется при одиночном выводе области. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. +// ПечатнаяФорма - см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. // ОбластьМакета - см. УправлениеПечатью.ОбластьМакета. // Данные - Массив - коллекция элементов типа Структура - данные объекта. // ПереходНаСледСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. @@ -1309,7 +1287,7 @@ // Вставляет разрыв между строками в виде символа перевода строки. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. +// ПечатнаяФорма - см. УправлениеПечатью.ИнициализироватьПечатнуюФорму. // Процедура ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма) Экспорт @@ -1421,6 +1399,59 @@ КонецФункции +// Устарела. Следует использовать ГенерацияШтрихкодаВызовСервера.ДанныеQRКода +// или ГенерацияШтрихкодаВызовСервера.ИзображениеШтрихкода из библиотеки +// "1С:Библиотека подключаемого оборудования" версии 2.1.4 (или больше). +// +// Возвращает двоичные данные для формирования QR-кода. +// +// Параметры: +// QRСтрока - Строка - данные, которые необходимо разместить в QR-коде. +// +// УровеньКоррекции - Число - уровень погрешности изображения, при котором данный QR-код все еще возможно 100% +// распознать. +// Параметр должен иметь тип целого и принимать одно из 4 допустимых значений: +// 0 (7 % погрешности), 1 (15 % погрешности), 2 (25 % погрешности), 3 (35 % погрешности). +// +// Размер - Число - определяет длину стороны выходного изображения в пикселях. +// Если минимально возможный размер изображения больше этого параметра - код сформирован не будет. +// +// Возвращаемое значение: +// ДвоичныеДанные - буфер, содержащий байты PNG-изображения QR-кода. +// +// Пример: +// +// // Выводим на печать QR-код, содержащий в себе информацию зашифрованную по УФЭБС. +// +// QRСтрока = УправлениеПечатью.ФорматнаяСтрокаУФЭБС(РеквизитыПлатежа); +// ТекстОшибки = ""; +// ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 0, 190, ТекстОшибки); +// Если Не ПустаяСтрока(ТекстОшибки) +// ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); +// КонецЕсли; +// +// КартинкаQRКода = Новый Картинка(ДанныеQRКода); +// ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода; +// +Функция ДанныеQRКода(QRСтрока, УровеньКоррекции, Размер) Экспорт + + УстановитьОтключениеБезопасногоРежима(Истина); + ГенераторQRКода = КомпонентаФормированияQRКода(); + Если ГенераторQRКода = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Попытка + ДвоичныеДанныеКартинки = ГенераторQRКода.GenerateQRCode(QRСтрока, УровеньКоррекции, Размер); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Формирование QR-кода'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат ДвоичныеДанныеКартинки; + +КонецФункции + #КонецОбласти #КонецОбласти @@ -1513,6 +1544,7 @@ // // Параметры: // Объект - СправочникСсылка.ИдентификаторыОбъектовМетаданных; +// Функция СтандартныеКомандыПечатиОбъекта(Объект) Экспорт КомандыПечатиОбъекта = КомандыПечатиОбъекта( @@ -1530,6 +1562,7 @@ // // Возвращаемое значение: // Массив - список из элементов типа ОбъектМетаданных. +// Функция ИсточникиКомандПечати() Экспорт ОбъектыСКомандамиПечати = Новый Массив; @@ -1584,7 +1617,7 @@ // // Параметры: // ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - внешняя обработка. -// ПараметрыИсточника - Структура - структура со свойствами: +// ПараметрыИсточника - Структура: // * ИдентификаторКоманды - Строка - список макетов, перечисленных через запятую. // * ОбъектыНазначения - Массив // КоллекцияПечатныхФорм - см. описание процедуры Печать() в документации. @@ -1633,7 +1666,7 @@ // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов // // Параметры: -// НастройкиПрограммногоИнтерфейса - См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов.НастройкиПрограммногоИнтерфейса +// НастройкиПрограммногоИнтерфейса - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов.НастройкиПрограммногоИнтерфейса // Процедура ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса) Экспорт Настройка = НастройкиПрограммногоИнтерфейса.Добавить(); @@ -1880,7 +1913,8 @@ // на источник внешней печатной формы. // // Возвращаемое значение: -// Ссылка - . +// Ссылка +// Функция СсылкаДополнительнойПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных) ВнешняяПечатнаяФормаСсылка = Неопределено; @@ -2444,10 +2478,10 @@ // Параметры: -// ТабличныйДокумент - ТабличныйДокумент - -// ОбъектыПечати - СписокЗначений - -// МенеджерПечати - Строка - -// Идентификатор - Строка - +// ТабличныйДокумент - ТабличныйДокумент +// ОбъектыПечати - СписокЗначений +// МенеджерПечати - Строка +// Идентификатор - Строка // Процедура ПроверитьРазметкуТабличногоДокументаПоОбъектамПечати(ТабличныйДокумент, ОбъектыПечати, Знач МенеджерПечати, Знач Идентификатор) @@ -2624,17 +2658,17 @@ ФайлHTML = Новый Файл(ИмяФайлаHTML); - ИмяПапкиКартинок = ФайлHTML.ИмяБезРасширения + "_files"; - ПутьКПапкеКартинок = СтрЗаменить(ФайлHTML.ПолноеИмя, ФайлHTML.Имя, ИмяПапкиКартинок); + ИмяКаталогаКартинок = ФайлHTML.ИмяБезРасширения + "_files"; + ПутьКаталогаКартинок = СтрЗаменить(ФайлHTML.ПолноеИмя, ФайлHTML.Имя, ИмяКаталогаКартинок); - // Ожидается, что в папке будут только картинки. - ФайлыКартинок = НайтиФайлы(ПутьКПапкеКартинок, "*"); + // Ожидается, что в каталоге будут только картинки. + ФайлыКартинок = НайтиФайлы(ПутьКаталогаКартинок, "*"); Для Каждого ФайлКартинки Из ФайлыКартинок Цикл КартинкаТекстом = Base64Строка(Новый ДвоичныеДанные(ФайлКартинки.ПолноеИмя)); КартинкаТекстом = "data:image/" + Сред(ФайлКартинки.Расширение,2) + ";base64," + Символы.ПС + КартинкаТекстом; - ТекстHTML = СтрЗаменить(ТекстHTML, ИмяПапкиКартинок + "\" + ФайлКартинки.Имя, КартинкаТекстом); + ТекстHTML = СтрЗаменить(ТекстHTML, ИмяКаталогаКартинок + "\" + ФайлКартинки.Имя, КартинкаТекстом); КонецЦикла; ТекстовыйДокумент.УстановитьТекст(ТекстHTML); @@ -2656,12 +2690,11 @@ ПотокВПамяти = Новый ПотокВПамяти; ЗаписьZipФайла = Новый ЗаписьZipФайла(ПотокВПамяти); - ВременнаяПапка = ФайловаяСистема.СоздатьВременныйКаталог(); - - СоздатьКаталог(ВременнаяПапка); + ИмяВременногоКаталога = ФайловаяСистема.СоздатьВременныйКаталог(); + СоздатьКаталог(ИмяВременногоКаталога); Для Каждого Файл Из СписокФайлов Цикл - ИмяФайла = ВременнаяПапка + Файл.ИмяФайла; + ИмяФайла = ИмяВременногоКаталога + Файл.ИмяФайла; ИмяФайла = УникальноеИмяФайла(ИмяФайла); Файл.ДвоичныеДанные.Записать(ИмяФайла); ЗаписьZipФайла.Добавить(ИмяФайла); @@ -2677,7 +2710,7 @@ ЧтениеДанных.Закрыть(); ПотокВПамяти.Закрыть(); - ФайловаяСистема.УдалитьВременныйКаталог(ВременнаяПапка); + ФайловаяСистема.УдалитьВременныйКаталог(ИмяВременногоКаталога); Возврат ДвоичныеДанные; @@ -2688,12 +2721,12 @@ Файл = Новый Файл(ИмяФайла); ИмяБезРасширения = Файл.ИмяБезРасширения; Расширение = Файл.Расширение; - Папка = Файл.Путь; + ИмяКаталога = Файл.Путь; Счетчик = 1; Пока Файл.Существует() Цикл Счетчик = Счетчик + 1; - Файл = Новый Файл(Папка + ИмяБезРасширения + " (" + Счетчик + ")" + Расширение); + Файл = Новый Файл(ИмяКаталога + ИмяБезРасширения + " (" + Счетчик + ")" + Расширение); КонецЦикла; Возврат Файл.ПолноеИмя; @@ -2701,10 +2734,11 @@ КонецФункции // Параметры: -// ТабличныйДокумент - ТабличныйДокумент - -// Формат - ТипФайлаТабличногоДокумента - +// ТабличныйДокумент - ТабличныйДокумент +// Формат - ТипФайлаТабличногоДокумента // Возвращаемое значение: -// ДвоичныеДанные - +// ДвоичныеДанные +// Функция ТабличныйДокументВДвоичныеДанные(ТабличныйДокумент, Формат) ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); @@ -2831,6 +2865,7 @@ // 1) на языке сеанса, // 2) на языке конфигурации, // 3) без указания языка. +// Функция ИменаМакета(Знач ИмяМакета) Результат = Новый Массив; @@ -2862,6 +2897,7 @@ // * ОфисныеДокументы - Соответствие - коллекция печатных форм в формате офисных документов: // ** Ключ - Строка - адрес во временном хранилище двоичных данных печатной формы; // ** Значение - Строка - имя файла печатной формы. +// Функция ПодготовитьКоллекциюПечатныхФорм(Знач Идентификаторы) Экспорт Результат = Новый ТаблицаЗначений; diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index c9f7e786c..47758005c 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -109,7 +109,7 @@ ОписанияФайлов = Новый Массив; ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайла, ПоместитьВоВременноеХранилище(ДвоичныеДанныеМакета))); ВременныйКаталог = УправлениеПечатьюСлужебныйКлиент.СоздатьВременныйКаталог("MSWord"); - Если НЕ ПолучитьФайлы(ОписанияФайлов, , ВременныйКаталог, Ложь) Тогда + Если НЕ ПолучитьФайлы(ОписанияФайлов, , ВременныйКаталог, Ложь) Тогда // АПК:1348 - для обратной совместимости Возврат Неопределено; КонецЕсли; ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВременныйКаталог) + ИмяВременногоФайла; @@ -347,10 +347,10 @@ // Параметры: // ПечатнаяФорма - ссылка на печатную форму. // ОбластьHandler - ссылка на область в макете. -// ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области. +// ПереходНаСледСтроку - булево - требуется ли вставлять разрыв после вывода области. // // Возвращаемое значение: -// КоординатыОбласти - +// КоординатыОбласти // Функция ПрисоединитьОбласть(Знач ПечатнаяФорма, Знач ОбластьHandler, @@ -414,9 +414,9 @@ // Параметры: // ПечатнаяФорма - ссылка на печатную форму. // ОбластьHandler - ссылка на область в макете. -// Параметры - строка, перечень параметров, которые требуется заменить. +// Параметры - строка - перечень параметров, которые требуется заменить. // ДанныеОбъекта - ДанныеОбъекта -// ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области. +// ПереходНаСледСтроку - булево - требуется ли вставлять разрыв после вывода области. // Процедура ПрисоединитьИЗаполнитьНабор(Знач ПечатнаяФорма, Знач ОбластьHandler, @@ -456,7 +456,7 @@ // ОбластьHandler - ссылка на область в макете. // ИмяТаблицы - наименование таблицы (для доступа к данным). // ДанныеОбъекта - ДанныеОбъекта -// ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области. +// ПереходНаСледСтроку - булево - требуется ли вставлять разрыв после вывода области. // Процедура ПрисоединитьИЗаполнитьОбластьТаблицы(Знач ПечатнаяФорма, Знач ОбластьHandler, @@ -645,7 +645,7 @@ ОписанияФайлов = Новый Массив; ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайла, СтрокаЗамены)); - Если ПолучитьФайлы(ОписанияФайлов, , ВременныйКаталог, Ложь) Тогда + Если ПолучитьФайлы(ОписанияФайлов, , ВременныйКаталог, Ложь) Тогда // АПК:1348 - для обратной совместимости Selection.Range.InlineShapes.AddPicture(ИмяВременногоФайла); Иначе Selection.TypeText(""); diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/УправлениеПечатьюMSWordКлиент.mdo b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/УправлениеПечатьюMSWordКлиент.mdo index cb7c73278..8cdff9fa0 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/УправлениеПечатьюMSWordКлиент.mdo +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/УправлениеПечатьюMSWordКлиент.mdo @@ -5,7 +5,7 @@ ru Управление печатью MS Word клиент - АПК:566 устаревший код, работа в веб-клиенте не требуется + АПК:566 АПК:1353 устаревший код, исправление не требуется. true true diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index 8f972f243..66632832e 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -22,6 +22,7 @@ // Инициализация печатной формы: создается COM - объект, // ему устанавливаются свойства. +// Функция ИнициализироватьПечатнуюФормуOOWriter(Знач Шаблон = Неопределено) Экспорт Handler = Новый Структура("ServiceManager,Desktop,Document,Тип"); @@ -115,7 +116,7 @@ ОписанияФайлов = Новый Массив; ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайла, ПоместитьВоВременноеХранилище(ДвоичныеДанныеШаблона))); ВременныйКаталог = УправлениеПечатьюСлужебныйКлиент.СоздатьВременныйКаталог("OOWriter"); - Если НЕ ПолучитьФайлы(ОписанияФайлов, , ВременныйКаталог, Ложь) Тогда + Если НЕ ПолучитьФайлы(ОписанияФайлов, , ВременныйКаталог, Ложь) Тогда // АПК:1348 - для обратной совместимости Возврат Неопределено; КонецЕсли; ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВременныйКаталог) + ИмяВременногоФайла; @@ -278,10 +279,10 @@ // Параметры: // ПечатнаяФорма - ссылка на печатную форму. // ОбластьHandler - ссылка на область в макете. -// ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области. +// ПереходНаСледСтроку - булево - требуется ли вставлять разрыв после вывода области. // // Возвращаемое значение: -// КоординатыОбласти - +// КоординатыОбласти // Процедура ПрисоединитьОбласть(Знач ПечатнаяФормаHandler, Знач ОбластьHandler, diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/УправлениеПечатьюOOWriterКлиент.mdo b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/УправлениеПечатьюOOWriterКлиент.mdo index 7831133fd..d0b4f4029 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/УправлениеПечатьюOOWriterКлиент.mdo +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/УправлениеПечатьюOOWriterКлиент.mdo @@ -5,7 +5,7 @@ ru Управление печатью OpenOffice.org Writer клиент - АПК:566 устаревший код, работа в веб-клиенте не требуется + АПК:566 АПК:1353 устаревший код, исправление не требуется. true true diff --git a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl index 47542947e..9fc4a2557 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl @@ -23,7 +23,7 @@ // Возвращаемое значение: // Соответствие - коллекция ссылок на объекты и их данные: // * Ключ - ЛюбаяСсылка - ссылка на объект информационной базы; -// * Значение - Структура - макет и данные: +// * Значение - Структура: // ** Ключ - Строка - имя макета; // ** Значение - Структура - данные объекта. // diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl index 4ea532c8f..edee7fbe4 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -13,7 +13,8 @@ // Параметры: // ИмяМенеджераПечати - Строка - менеджер печати для печатаемых объектов; // ИменаМакетов - Строка - идентификаторы печатных форм; -// МассивОбъектов - Ссылка, Массив - объекты печати; +// МассивОбъектов - Ссылка +// - Массив - объекты печати; // ВладелецФормы - ФормаКлиентскогоПриложения - форма, из которой выполняется печать; // ПараметрыПечати - Структура - произвольные параметры для передачи в менеджер печати. // @@ -40,7 +41,8 @@ // Параметры: // ИмяМенеджераПечати - Строка - менеджер печати для печатаемых объектов; // ИменаМакетов - Строка - идентификаторы печатных форм; -// МассивОбъектов - Ссылка, Массив - объекты печати; +// МассивОбъектов - Ссылка +// - Массив - объекты печати; // ПараметрыПечати - Структура - произвольные параметры для передачи в менеджер печати. // // Пример: @@ -77,6 +79,18 @@ // Распечатаем РаспечататьТабличныеДокументы(ПечатныеФормы.ТабличныеДокументы, ПечатныеФормы.ОбъектыПечати); + // СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов + // Записываем сведения о печати формы в регистр состояний оригиналов + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда + СписокПечати = Новый СписокЗначений; + Для Каждого Макет Из ПечатныеФормы.ТабличныеДокументы Цикл + МакетПечати = СписокПечати.Добавить(ИменаМакетов,Макет.Представление); + КонецЦикла; + МодульУчетОригиналовПервичныхДокументовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УчетОригиналовПервичныхДокументовКлиент"); + МодульУчетОригиналовПервичныхДокументовКлиент.ЗаписатьСостоянияОригиналовПослеПечати(ПечатныеФормы.ОбъектыПечати, СписокПечати); + КонецЕсли; + // Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов + КонецПроцедуры // Вывести табличные документы на принтер. @@ -84,8 +98,10 @@ // Параметры: // ТабличныеДокументы - СписокЗначений - печатные формы. // ОбъектыПечати - СписокЗначений - соответствие объектов именам областей табличного документа. -// ПечататьКомплектами - Булево, Неопределено - не используется (вычисляется автоматически). +// ПечататьКомплектами - Булево +// - Неопределено - не используется (вычисляется автоматически). // КоличествоКопийКомплектов - Число - количество экземпляров каждого из комплектов документов. +// Процедура РаспечататьТабличныеДокументы(ТабличныеДокументы, ОбъектыПечати, Знач ПечататьКомплектами = Неопределено, Знач КоличествоКопийКомплектов = 1) Экспорт @@ -111,6 +127,7 @@ // Форма - ФормаКлиентскогоПриложения - форма, из которой было вызвана команда. Параметр // требуется, когда процедура // вызвана из формы объекта, для того чтобы перечитать форму. +// Процедура ПроверитьПроведенностьДокументов(ОписаниеПроцедурыЗавершения, СписокДокументов, Форма = Неопределено) Экспорт ДополнительныеПараметры = Новый Структура; @@ -132,9 +149,9 @@ // Открывает форму ПечатьДокументов для коллекции табличных документов. // // Параметры: -// КоллекцияПечатныхФорм - Массив - см. НоваяКоллекцияПечатныхФорм(); +// КоллекцияПечатныхФорм - Массив из см. НоваяКоллекцияПечатныхФорм // ОбъектыПечати - СписокЗначений - см. УправлениеПечатьюПереопределяемый.ПриПечати; -// ДополнительныеПараметры - Структура - дополнительные параметры открытия формы печати. См. ПараметрыПечати(). +// ДополнительныеПараметры - см. ПараметрыПечати // - ФормаКлиентскогоПриложения - форма, из которой выполняется печать; // Процедура ПечатьДокументов(КоллекцияПечатныхФорм, Знач ОбъектыПечати = Неопределено, @@ -172,7 +189,7 @@ // Возвращаемое значение: // Структура - дополнительные параметры открытия формы печати: // * ВладелецФормы - ФормаКлиентскогоПриложения - форма, из которой выполняется печать. -// * Заголовок - Строка - Заголовок формы ПечатьДокументов. +// * Заголовок - Строка - заголовок формы ПечатьДокументов. // Функция ПараметрыПечати() Экспорт @@ -225,10 +242,10 @@ КонецФункции // Возвращает описание найденной в коллекции печатной формы. -// Если описание не найдено, возвращает Неопределено. +// Если описание не существует, возвращает Неопределено. // // Параметры: -// КоллекцияПечатныхФорм - Массив - см. НоваяКоллекцияПечатныхФорм(); +// КоллекцияПечатныхФорм - Массив из см. НоваяКоллекцияПечатныхФорм. // Идентификатор - Строка - идентификатор печатной формы. // // Возвращаемое значение: @@ -451,7 +468,7 @@ // // Параметры: // СсылкаНаМакет - Структура - макет печатной формы. -// ОписаниеОбласти - Структура - описание области: +// ОписаниеОбласти - Структура: // * ИмяОбласти - Строка -имя области; // * ТипТипОбласти - Строка - тип области: "ВерхнийКолонтитул", "НижнийКолонтитул", "Общая", "СтрокаТаблицы", "Список". // @@ -509,7 +526,7 @@ // Применяется при одиночном выводе области. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму. +// ПечатнаяФорма - см. ИнициализироватьПечатнуюФорму. // ОбластьМакета - см. ОбластьМакета. // ПереходНаСледующуюСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. // @@ -625,7 +642,7 @@ // Применяется при одиночном выводе области. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму. +// ПечатнаяФорма - см. ИнициализироватьПечатнуюФорму. // ОбластьМакета - см. ОбластьМакета. // Данные - Структура - данные заполнения. // ПереходНаСледующуюСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. @@ -647,8 +664,8 @@ // Применяется при одиночном выводе области. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму. -// ОбластьМакета - см. ОбластьМакета(). +// ПечатнаяФорма - см. ИнициализироватьПечатнуюФорму. +// ОбластьМакета - см. ОбластьМакета // Данные - Массив - коллекция элементов типа Структура - данные объекта. // ПереходНаСледСтроку - Булево - Истина, если требуется вставить разрыв после вывода области. // @@ -687,7 +704,7 @@ // Вставляет разрыв между строками в виде символа перевода строки. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма, см. ИнициализироватьПечатнуюФорму. +// ПечатнаяФорма - см. ИнициализироватьПечатнуюФорму. // Процедура ВставитьРазрывНаНовуюСтроку(Знач ПечатнаяФорма) Экспорт @@ -733,6 +750,7 @@ // Перед выполнением команды печати проверить, был ли передан хотя бы один объект, так как // для команд с множественным режимом использования может быть передан пустой массив. +// Функция ПроверитьКоличествоПереданныхОбъектов(ПараметрКоманды) Если ТипЗнч(ПараметрКоманды) = Тип("Массив") И ПараметрКоманды.Количество() = 0 Тогда diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index 1d62a3bec..7b75abbf0 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -11,7 +11,7 @@ // Переопределяет настройки подсистемы. // // Параметры: -// Настройки - Структура - настройки подсистемы: +// Настройки - Структура: // * ИспользоватьПодписиИПечати - Булево - при установке значения Ложь отключается возможность установки подписей // и печатей в печатных формах. // * СкрыватьПодписиИПечатиДляРедактирования - Булево - удалять рисунки подписей и печатей табличных документов при @@ -43,7 +43,7 @@ // // Параметры: // ИмяФормы - Строка - полное имя формы, в которой добавляются команды печати; -// КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати; +// КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати // СтандартнаяОбработка - Булево - при установке значения Ложь не будет автоматически заполняться коллекция КомандыПечати. // // Пример: @@ -65,7 +65,7 @@ // Позволяет задать дополнительные настройки команд печати в журналах документов. // // Параметры: -// НастройкиСписка - Структура - модификаторы списка команд печати. +// НастройкиСписка - Структура - модификаторы списка команд печати: // * МенеджерКомандПечати - МенеджерОбъекта - менеджер объекта, в котором формируется список команд печати; // * АвтоматическоеЗаполнение - Булево - заполнять команды печати из объектов, входящих в состав журнала. // Если установлено значение Ложь, то список команд печати журнала будет @@ -87,21 +87,48 @@ // Вызывается после завершения процедуры Печать менеджера печати объекта, имеет те же параметры. // // Параметры: -// МассивОбъектов - Массив - список объектов, для которых была выполнена процедура Печать; +// МассивОбъектов - Массив из ЛюбаяСсылка - список объектов, для которых была выполняется команда печати; // ПараметрыПечати - Структура - произвольные параметры, переданные при вызове команды печати; -// КоллекцияПечатныхФорм - ТаблицаЗначений - содержит сформированные табличные документы и дополнительную информацию; -// ОбъектыПечати - СписокЗначений - соответствие между объектами и именами областей в табличных документах, где -// значение - Объект, представление - имя области с объектом в табличных документах; -// ПараметрыВывода - Структура - параметры, связанные с выводом табличных документов: -// * ПараметрыОтправки - Структура - для заполнения письма при отправке печатной формы по электронной почте. -// см. РаботаСПочтовымиСообщениямиКлиент.РаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма. -// * ЗаголовокФормы - Строка - переопределяет заголовок формы печати документов (ПечатьДокументов). +// КоллекцияПечатныхФорм - ТаблицаЗначений - возвращаемый параметр, коллекция сформированных печатных форм: +// * ИмяМакета - Строка - идентификатор печатной формы; +// * СинонимМакета - Строка - название печатной формы; // -// Пример: -// ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "АктРеализация"); -// Если ПечатнаяФорма <> Неопределено Тогда -// ПечатнаяФорма.ТабличныйДокумент.ПолеСлева = 20; -// ... +// * ТабличныйДокумент - ТабличныйДокумент - одна или несколько печатных форм, выведенных в один табличный документ +// Для разметки печатных форм внутри табличного документа после вывода каждой печатной формы +// необходимо вызывать процедуру УправлениеПечатью.ЗадатьОбластьПечатиДокумента; +// Параметр не используется, если вывод печатных форм выполняется в формате офисных документов +// (см. параметр "ОфисныеДокументы"); +// +// * ОфисныеДокументы - Соответствие - коллекция печатных форм в формате офисных документов: +// ** Ключ - Строка - адрес во временном хранилище двоичных данных печатной формы; +// ** Значение - Строка - имя файла печатной формы. +// +// * ИмяФайлаПечатнойФормы - Строка - имя файла печатной формы при сохранении в файл или отправке в качестве +// почтового вложения. Не используется для печатных форм в формате офисных документов. +// По умолчанию имя файла устанавливается в формате +// "[НазваниеПечатнойФормы] № [Номер] от [Дата]" для документов, +// "[НазваниеПечатнойФормы] - [ПредставлениеОбъекта] - [ТекущаяДата]" для объектов. +// - Соответствие - имена файлов для каждого объекта: +// ** Ключ - ЛюбаяСсылка - ссылка на объект печати из коллекции МассивОбъектов; +// ** Значение - Строка - имя файла; +// +// * Экземпляров - Число - количество копий, которое необходимо вывести на печать; +// * ПолныйПутьКМакету - Строка - используется для быстрого перехода к редактированию макета печатной формы +// в общей форме ПечатьДокументов; +// ОбъектыПечати - СписокЗначений - выходной параметр, соответствие между объектами и именами областей в табличных +// документах, заполняется автоматически +// при вызове УправлениеПечатью.ЗадатьОбластьПечатиДокумента: +// * Значение - ЛюбаяСсылка - ссылка из коллекции МассивОбъектов, +// * Представление - Строка - имя области с объектом в табличных документах; +// +// ПараметрыВывода - Структура - настройки вывода печатных форм: +// * ПараметрыОтправки - Структура - для автоматического заполнения полей в форме создания письма при отправке +// сформированных печатных форм по почте: +// ** Получатель - см. РаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма.Получатель +// ** Тема - см. РаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма.Тема +// ** Текст - см. РаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма.Текст +// +// * ЗаголовокФормы - Строка - переопределяет заголовок формы печати документов (ПечатьДокументов). // Процедура ПриПечати(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт @@ -113,11 +140,11 @@ // Может использоваться, например, для подготовки текста письма. // // Параметры: -// ПараметрыОтправки - Структура - коллекция параметров: +// ПараметрыОтправки - Структура: // * Получатель - Массив - коллекция имен получателей; // * Тема - Строка - тема письма; // * Текст - Строка - текст письма; -// * Вложения - Структура - коллекция вложений: +// * Вложения - Структура: // ** АдресВоВременномХранилище - Строка - адрес вложения во временном хранилище; // ** Представление - Строка - имя файла вложения. // ОбъектыПечати - Массив - коллекция объектов, по которым сформированы печатные формы. diff --git a/SSL/src/CommonModules/УправлениеПечатьюРФ/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюРФ/Module.bsl index 63ea8b8eb..94a8620a8 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюРФ/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюРФ/Module.bsl @@ -17,58 +17,58 @@ // "СТАНДАРТЫ ФИНАНСОВЫХ ОПЕРАЦИЙ Символы двумерного штрихового кода для осуществления платежей физических лиц". // ДанныеДокумента должны содержать информацию в полях, описанных ниже. // Обязательные поля структуры: -// * ТекстПолучателя - Наименование получателя платежа - Макс. 160 символов; -// * НомерСчетаПолучателя - Номер счета получателя платежа - Макс. 20 символов; -// * НаименованиеБанкаПолучателя - Наименование банка получателя платежа - Макс. 45 символов; -// * БИКБанкаПолучателя - БИК - Макс. 9 символов; -// * СчетБанкаПолучателя - Номер к/с банка получателя платежа - Макс. 20 символов; +// * ТекстПолучателя - наименование получателя платежа - Макс. 160 символов; +// * НомерСчетаПолучателя - номер счета получателя платежа - Макс. 20 символов; +// * НаименованиеБанкаПолучателя - наименование банка получателя платежа - Макс. 45 символов; +// * БИКБанкаПолучателя - БИК - макс. 9 символов; +// * СчетБанкаПолучателя - номер к/с банка получателя платежа - Макс. 20 символов; // Дополнительные поля структуры: -// * СуммаЧислом - Сумма платежа, в рублях - Макс. 16 символов. -// * НазначениеПлатежа - Наименование платежа (назначение) - Макс. 210 символов; +// * СуммаЧислом - сумма платежа, в рублях - Макс. 16 символов. +// * НазначениеПлатежа - наименование платежа (назначение) - Макс. 210 символов; // * ИННПолучателя - ИНН получателя платежа - Макс. 12 символов; // * ИННПлательщика - ИНН плательщика - Макс. 12 символов; -// * СтатусСоставителя - Статус составителя платежного документа - Макс. 2 символа; +// * СтатусСоставителя - статус составителя платежного документа - Макс. 2 символа; // * КПППолучателя - КПП получателя платежа - Макс. 9 символов. -// * КодБК - КБК - Макс. 20 символов; -// * КодОКТМО - Код КодОКТМО - Макс. 11 символов; -// * ПоказательОснования - Основание налогового платежа - Макс. 2 символа; -// * ПоказательПериода - Налоговый период - Макс. 10 символов; -// * ПоказательНомера - Номер документа - Макс. 15 символов; -// * ПоказательДаты - Дата документа - Макс. 10 символ. -// * ПоказательТипа - Тип платежа - Макс. 2 символа. +// * КодБК - КБК - макс. 20 символов; +// * КодОКТМО - код КодОКТМО - Макс. 11 символов; +// * ПоказательОснования - основание налогового платежа - Макс. 2 символа; +// * ПоказательПериода - налоговый период - Макс. 10 символов; +// * ПоказательНомера - номер документа - Макс. 15 символов; +// * ПоказательДаты - дата документа - Макс. 10 символ. +// * ПоказательТипа - тип платежа - Макс. 2 символа. // Прочие дополнительные поля. -// * ФамилияПлательщика - Фамилия плательщика. -// * ИмяПлательщика - Имя плательщика. -// * ОтчествоПлательщика - Отчество плательщика. -// * АдресПлательщика - Адрес плательщика. -// * ЛицевойСчетБюджетногоПолучателя - Лицевой счет бюджетного получателя. -// * ИндексПлатежногоДокумента - Индекс платежного документа. +// * ФамилияПлательщика - фамилия плательщика. +// * ИмяПлательщика - имя плательщика. +// * ОтчествоПлательщика - отчество плательщика. +// * АдресПлательщика - адрес плательщика. +// * ЛицевойСчетБюджетногоПолучателя - лицевой счет бюджетного получателя. +// * ИндексПлатежногоДокумента - индекс платежного документа. // * СНИЛС - № лицевого счета в системе персонифицированного учета в ПФР - СНИЛС. -// * НомерДоговора - Номер договора. -// * НомерЛицевогоСчетаПлательщика - Номер лицевого счета плательщика в организации (в системе учета ПУ). -// * НомерКвартиры - Номер квартиры. -// * НомерТелефона - Номер телефона. -// * ВидПлательщика - Вид ДУЛ плательщика. -// * НомерПлательщик - Номер ДУЛ плательщика. +// * НомерДоговора - номер договора. +// * НомерЛицевогоСчетаПлательщика - номер лицевого счета плательщика в организации (в системе учета ПУ). +// * НомерКвартиры - номер квартиры. +// * НомерТелефона - номер телефона. +// * ВидПлательщика - вид ДУЛ плательщика. +// * НомерПлательщик - номер ДУЛ плательщика. // * ФИОРебенка - Ф.И.О. ребенка/учащегося. -// * ДатаРождения - Дата рождения. -// * СрокПлатежа - Срок платежа/дата выставления счета. -// * ПериодОплаты - Период оплаты. -// * ВидПлатежа - Вид платежа. -// * КодУслуги - Код услуги/название прибора учета. -// * НомерПрибораУчета - Номер прибора учета. -// * ПоказаниеПрибораУчета - Показание прибора учета. -// * НомерИзвещения - Номер извещения, начисления, счета. -// * ДатаИзвещения - Дата извещения/начисления/счета/постановления (для ГИБДД). -// * НомерУчреждения - Номер учреждения (образовательного, медицинского). -// * НомерГруппы - Номер группы детсада/класса школы. +// * ДатаРождения - дата рождения. +// * СрокПлатежа - срок платежа/дата выставления счета. +// * ПериодОплаты - период оплаты. +// * ВидПлатежа - вид платежа. +// * КодУслуги - код услуги/название прибора учета. +// * НомерПрибораУчета - номер прибора учета. +// * ПоказаниеПрибораУчета - показание прибора учета. +// * НомерИзвещения - номер извещения, начисления, счета. +// * ДатаИзвещения - дата извещения/начисления/счета/постановления (для ГИБДД). +// * НомерУчреждения - номер учреждения (образовательного, медицинского). +// * НомерГруппы - номер группы детсада/класса школы. // * ФИОПреподавателя - ФИО преподавателя, специалиста, оказывающего услугу. -// * СуммаСтраховки - Сумма страховки/дополнительной услуги/Сумма пени (в копейках). -// * НомерПостановления - Номер постановления (для ГИБДД). -// * НомерИсполнительногоПроизводства - Номер исполнительного производства. -// * КодВидаПлатежа - Код вида платежа (например, для платежей в адрес Росреестра). -// * ИдентификаторНачисления - Уникальный идентификатор начисления. -// * ТехническийКод - Технический код, рекомендуемый для заполнения поставщиком услуг. +// * СуммаСтраховки - сумма страховки/дополнительной услуги/Сумма пени (в копейках). +// * НомерПостановления - номер постановления (для ГИБДД). +// * НомерИсполнительногоПроизводства - номер исполнительного производства. +// * КодВидаПлатежа - код вида платежа (например, для платежей в адрес Росреестра). +// * ИдентификаторНачисления - уникальный идентификатор начисления. +// * ТехническийКод - технический код, рекомендуемый для заполнения поставщиком услуг. // Может использоваться принимающей организацией для вызова соответствующей // обрабатывающей ИТ-системы. // Перечень значений кода представлен ниже. diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl index 3a651f390..bd55593d1 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl @@ -62,7 +62,7 @@ // Макет - Структура - макет печатной формы. // // Возвращаемое значение: -// Структура - описание печатной формы: +// Структура: // * ИмяКаталога - Строка - путь, куда помещается структура каталогов конечного документа для последующей // сборки контейнера DOCX. // * СтруктураДокумента - см. ИнициализироватьДокумент @@ -89,10 +89,10 @@ // Файл макета заполняется на основе двоичных данных, переданных в параметрах функции. // // Параметры: -// ДвоичныеДанныеМакета - ДвоичныеДанные - Двоичные данные макета. +// ДвоичныеДанныеМакета - ДвоичныеДанные - двоичные данные макета. // // Возвращаемое значение: -// Структура - Макет печатной формы. +// Структура - макет печатной формы. // Функция МакетИзДвоичныхДанных(ДвоичныеДанныеМакета) Экспорт @@ -125,7 +125,7 @@ // Очищает все файлы, связанные с печатной формой или макетом печатной формы. // Параметры: -// ПечатнаяФорма - Структура - Печатная форма или макет печатной формы. +// ПечатнаяФорма - Структура - печатная форма или макет печатной формы. // Процедура ЗакрытьСоединение(ПечатнаяФорма) Экспорт @@ -143,10 +143,10 @@ // Файл данных помещается во временное хранилище. // // Параметры: -// ПечатнаяФорма - Структура - Печатная форма; +// ПечатнаяФорма - Структура // // Возвращаемое значение: -// Строка - Адрес сформированного документа во временном хранилище. +// Строка - адрес сформированного документа во временном хранилище. // Функция СформироватьДокумент(ПечатнаяФорма) Экспорт @@ -176,11 +176,11 @@ // Получает область из макета. // // Параметры: -// Макет - Структура - Макет печатной формы. -// ИмяОбласти - Строка - Имя области в макете. +// Макет - Структура - макет печатной формы. +// ИмяОбласти - Строка - имя области в макете. // // Возвращаемое значение: -// Структура - Область макета. +// Структура - область макета. // Функция ПолучитьОбластьМакета(Макет, Знач ИмяОбласти) Экспорт @@ -246,11 +246,11 @@ // Добавляет нижний колонтитул в печатную форму из макета. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма; +// ПечатнаяФорма - Структура // НижнийКолонтитул - Структура - область нижнего колонтитула. // // Возвращаемое значение: -// Структура - Область добавленного колонтитула. +// Структура - область добавленного колонтитула. // Функция ДобавитьНижнийКолонтитул(ПечатнаяФорма, НижнийКолонтитул) Экспорт @@ -281,7 +281,7 @@ // Добавляет верхний колонтитул в печатную форму из макета. // // Параметры: -// ПечатнаяФорма - Структура - печатная форма; +// ПечатнаяФорма - Структура // ВерхнийКолонтитул - Структура - область колонтитула. // // Возвращаемое значение: @@ -319,11 +319,11 @@ // // Параметры: // ПечатнаяФорма - см. ИнициализироватьПечатнуюФорму -// ОбластьМакета - Структура - Область макета; -// ПереходНаСледСтроку - Булево - Определяет, требуется ли вставлять разрыв после вывода области. +// ОбластьМакета - Структура +// ПереходНаСледСтроку - Булево - определяет, требуется ли вставлять разрыв после вывода области. // // Возвращаемое значение: -// Структура - Присоединенная область. +// Структура - присоединенная область. // Функция ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета, Знач ПереходНаСледСтроку = Ложь) Экспорт @@ -342,8 +342,8 @@ // // Параметры: // ПечатнаяФорма - см. ИнициализироватьПечатнуюФорму -// ОбластьМакета - Структура - Область макета; -// ДанныеОбъекта - Структура - Данные объекта для заполнения. +// ОбластьМакета - Структура +// ДанныеОбъекта - Структура - данные объекта для заполнения. // Процедура ЗаполнитьПараметры(ПечатнаяФорма, ОбластьМакета, ДанныеОбъекта = Неопределено) Экспорт @@ -360,10 +360,10 @@ // Применяется при выводе данных списка (маркированного или нумерованного) или таблицы. // // Параметры: -// ПечатнаяФорма - Структура - Печатная форма; -// ОбластьМакета - Структура - Область макета; -// ДанныеОбъекта - Структура - Данные объекта для заполнения. -// ПереходНаСледСтроку - Булево - Определяет, требуется ли вставлять разрыв после вывода областей всей коллекции. +// ПечатнаяФорма - Структура +// ОбластьМакета - Структура +// ДанныеОбъекта - Структура - данные объекта для заполнения. +// ПереходНаСледСтроку - Булево - определяет, требуется ли вставлять разрыв после вывода областей всей коллекции. // Процедура ПрисоединитьИЗаполнитьНабор(ПечатнаяФорма, ОбластьМакета, ДанныеОбъекта = Неопределено, Знач ПереходНаСледСтроку = Ложь) Экспорт @@ -396,7 +396,7 @@ // Вставляет разрыв на следующую строку. // // Параметры: -// ПечатнаяФорма - Структура - Печатная форма; +// ПечатнаяФорма - Структура // Процедура ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма) Экспорт @@ -421,19 +421,20 @@ #Область РаботаСоСтруктуройДокумента // Возвращаемое значение: -// Структура - структура документа: -// * ИдентификаторДокумента - Строка - -// * РасширенияКартинок - Массив - -// * КаталогКартинок - Строка - -// * ТаблицаСвязейКонтента - ТаблицаЗначений - -// * СвязиКонтента - Строка - -// * ТипыКонтента - Строка - -// * ПрисоединенныеОбласти - Массив - -// * Колонтитулы - Соответствие - : -// ** Ключ - Строка - +// Структура: +// * ИдентификаторДокумента - Строка +// * РасширенияКартинок - Массив +// * КаталогКартинок - Строка +// * ТаблицаСвязейКонтента - ТаблицаЗначений +// * СвязиКонтента - Строка +// * ТипыКонтента - Строка +// * ПрисоединенныеОбласти - Массив +// * Колонтитулы - Соответствие: +// ** Ключ - Строка // ** Значение - см. ОбластьКолонтитула -// * Разделы - Соответствие - -// * ОбластиДокумента - Соответствие - +// * Разделы - Соответствие +// * ОбластиДокумента - Соответствие +// Функция ИнициализироватьДокумент() Экспорт Результат = Новый Структура; @@ -482,11 +483,12 @@ КонецФункции // Возвращаемое значение: -// Структура - : -// * НомерРаздела - Число - -// * Текст - Строка - -// * ИмяВнутр - Строка - -// * Имя - Строка - +// Структура: +// * НомерРаздела - Число +// * Текст - Строка +// * ИмяВнутр - Строка +// * Имя - Строка +// Функция ОбластьКолонтитула() Результат = Новый Структура; @@ -1292,7 +1294,7 @@ Процедура ВнестиКартинкуВБиблиотекуДокумента(СтруктураДокумента, СтруктураКартинка) КаталогMedia = Новый Файл(СтруктураКартинка.КаталогКартинок); - TypeImage = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"; + ТипКартинка = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"; Если НЕ КаталогMedia.Существует() Тогда СоздатьКаталог(СтруктураКартинка.КаталогКартинок); @@ -1321,7 +1323,7 @@ ЗаписьXML.ЗаписатьНачалоЭлемента("Relationship"); ЗаписьXML.ЗаписатьАтрибут("Target", ИмяРесурса); - ЗаписьXML.ЗаписатьАтрибут("Type", TypeImage); + ЗаписьXML.ЗаписатьАтрибут("Type", ТипКартинка); ЗаписьXML.ЗаписатьАтрибут("Id", ИдРесурса); ЗаписьXML.ЗаписатьКонецЭлемента(); @@ -2772,7 +2774,7 @@ Символ3 = ЧтениеДанных.ПрочитатьБайт(); // MIME syntax - "type/subtype" - MimeType = Null; + ТипИзображения = Null; Ширина = -1; Высота = -1; @@ -2782,7 +2784,7 @@ ЧтениеДанных.Пропустить(3); Ширина = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Ложь); Высота = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2 , Ложь); - MimeType = "image/gif"; + ТипИзображения = "image/gif"; ИначеЕсли (Символ1 = 255 И Символ2 = 216) Тогда // JPG @@ -2796,7 +2798,7 @@ ЧтениеДанных.Пропустить(1); Высота = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Истина); Ширина = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Истина); - MimeType = "image/jpeg"; + ТипИзображения = "image/jpeg"; Прервать; КонецЕсли; @@ -2812,7 +2814,7 @@ Ширина = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2 , Истина); ЧтениеДанных.Пропустить(2); Высота = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Истина); - MimeType = "image/png"; + ТипИзображения = "image/png"; ИначеЕсли (Символ1 = 66 И Символ2 = 77) Тогда // BMP @@ -2820,7 +2822,7 @@ Ширина = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Ложь); ЧтениеДанных.Пропустить(2); Высота = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, Ложь); - MimeType = "image/bmp"; + ТипИзображения = "image/bmp"; Иначе @@ -2831,10 +2833,10 @@ ПорядокБайтовBigEndian = Символ(Символ1) = "M"; // Image header - ImageFileDirectory = 0; - ImageFileDirectory = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 4, ПорядокБайтовBigEndian); + ЗначениеСмещения = 0; + ЗначениеСмещения = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 4, ПорядокБайтовBigEndian); - ЧтениеДанных.Пропустить(ImageFileDirectory - 8); + ЧтениеДанных.Пропустить(ЗначениеСмещения - 8); Вхождения = ПрочитатьЗначениеБайтаИзПотока(ЧтениеДанных, 2, ПорядокБайтовBigEndian); Индекс = 1; @@ -2867,7 +2869,7 @@ Если (Ширина <> -1 И Высота <> -1) Тогда - MimeType = "image/tiff"; + ТипИзображения = "image/tiff"; Прервать; КонецЕсли; @@ -2882,9 +2884,9 @@ ЧтениеДанных.Закрыть(); - АтрибутыИзображения.Вставить("ТипИзображения", MimeType); - АтрибутыИзображения.Вставить("Высота", ?(MimeType = Null, 0, Высота)); - АтрибутыИзображения.Вставить("Ширина", ?(MimeType = Null, 0, Ширина)); + АтрибутыИзображения.Вставить("ТипИзображения", ТипИзображения); + АтрибутыИзображения.Вставить("Высота", ?(ТипИзображения = Null, 0, Высота)); + АтрибутыИзображения.Вставить("Ширина", ?(ТипИзображения = Null, 0, Ширина)); Возврат АтрибутыИзображения; @@ -3051,10 +3053,11 @@ // ЗаписатьСобытияВЖурналРегистрации // Параметры: -// * ИмяСобытия - Строка - Имя записываемого события. -// * ПредставлениеУровня - Строка - Представление значений коллекции УровеньЖурналаРегистрации. +// * ИмяСобытия - Строка - имя записываемого события. +// * ПредставлениеУровня - Строка - представление значений коллекции УровеньЖурналаРегистрации. // Доступные значения: "Информация", "Ошибка", "Предупреждение", "Примечание". -// * Комментарий - Строка - Комментарий события. +// * Комментарий - Строка - комментарий события. +// Процедура ЗаписатьСобытияВЖурналРегистрации(ИмяСобытия, ПредставлениеУровня, Комментарий) СписокСобытий = Новый СписокЗначений; @@ -3075,7 +3078,8 @@ // Для вызова из клиентских и серверных модулей печати форм по макетам офисных документов. // // Параметры: -// ДанныеИлиСтруктура - ДвоичныеДанные, Структура - файл документа или строка таблицы команд. +// ДанныеИлиСтруктура - ДвоичныеДанные +// - Структура - файл документа или строка таблицы команд. // // Возвращаемое значение: // Строка, Неопределено - расширение файла двоичных данных или Неопределено, если не удалось определить расширение. diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl index c98e2c734..af46cbce7 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl @@ -10,15 +10,9 @@ // Обработчик подключенной команды. // -// Параметры -// МассивСсылок - Массив - Массив ссылок выбранных объектов, для которых выполняется команда. -// ПараметрыВыполнения - Структура - Контекст команды. -// * ОписаниеКоманды - Структура - Сведения о выполняемой команде. -// ** Идентификатор - Строка - Идентификатор команды. -// ** Представление - Строка - Представление команды в форме. -// ** Имя - Строка - Имя команды в форме. -// * Форма - ФормаКлиентскогоПриложения - Форма, из которой была вызвана команда. -// * Источник - ДанныеФормыСтруктура, ТаблицаФормы - Объект или список формы с полем "Ссылка". +// Параметры: +// МассивСсылок - Массив Из ЛюбаяСсылка - ссылки выбранных объектов, для которых выполняется команда. +// ПараметрыВыполнения - см. ПодключаемыеКомандыКлиент.ПараметрыВыполненияКоманды // Процедура ОбработчикКоманды(Знач МассивСсылок, Знач ПараметрыВыполнения) Экспорт ПараметрыВыполнения.Вставить("ОбъектыПечати", МассивСсылок); @@ -52,9 +46,9 @@ // Открыть форму для выбора вариантов формата вложений // // Параметры: -// НастройкиФормата - Структура - Описание настроек -// * УпаковатьВАрхив - Булево - Признак необходимости упаковки вложений в архив. -// * ФорматыСохранения - Массив - Список выбранных форматов вложений. +// НастройкиФормата - Структура: +// * УпаковатьВАрхив - Булево - признак необходимости упаковки вложений в архив. +// * ФорматыСохранения - Массив - список выбранных форматов вложений. // Оповещение - ОписаниеОповещения - - оповещение, которое вызывается после закрытие формы для обработки // результатов выбора. // diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index 15e9dac9b..464c736d2 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -124,13 +124,13 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - уже настроена в процедуре ПриСозданииНаСервере. -// ТекущийОбъект - СправочникОбъектИмяСправочника - -// - ДокументОбъектИмяДокумента - -// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик - -// - БизнесПроцессОбъектИмяБизнесПроцесса - -// - ЗадачаОбъектИмяЗадачи - -// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета - -// - ПланСчетовОбъектИмяПланаСчетов - +// ТекущийОбъект - СправочникОбъектИмяСправочника +// - ДокументОбъектИмяДокумента +// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик +// - БизнесПроцессОбъектИмяБизнесПроцесса +// - ЗадачаОбъектИмяЗадачи +// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета +// - ПланСчетовОбъектИмяПланаСчетов // Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт @@ -155,13 +155,13 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - уже настроена в процедуре ПриСозданииНаСервере. -// ТекущийОбъект - СправочникОбъектИмяСправочника - -// - ДокументОбъектИмяДокумента - -// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик - -// - БизнесПроцессОбъектИмяБизнесПроцесса - -// - ЗадачаОбъектИмяЗадачи - -// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета - -// - ПланСчетовОбъектИмяПланаСчетов - +// ТекущийОбъект - СправочникОбъектИмяСправочника +// - ДокументОбъектИмяДокумента +// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик +// - БизнесПроцессОбъектИмяБизнесПроцесса +// - ЗадачаОбъектИмяЗадачи +// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета +// - ПланСчетовОбъектИмяПланаСчетов // Процедура ПередЗаписьюНаСервере(Форма, ТекущийОбъект) Экспорт @@ -173,29 +173,29 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - уже настроена в процедуре ПриСозданииНаСервере со свойствами: -// * Свойства_ОписаниеДополнительныхРеквизитов - ТаблицаЗначений - с колонками: -// ** ИмяРеквизитаЗначение - Строка - -// ** Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - -// ** ВладелецДополнительныхЗначений - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - -// ** ТипЗначения - ОписаниеТипов - -// ** МногострочноеПолеВвода - Число - -// ** Удалено - Булево - -// ** ЗаполнятьОбязательно - Булево - -// ** Доступен - Булево - -// ** Виден - Булево - -// ** Наименование - Строка - -// ** ЭлементФормыДобавлен - Булево - -// ** ВыводитьВВидеГиперссылки - Булево - -// ** СтрокаСсылочногоТипа - Булево - +// * Свойства_ОписаниеДополнительныхРеквизитов - ТаблицаЗначений: +// ** ИмяРеквизитаЗначение - Строка +// ** Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения +// ** ВладелецДополнительныхЗначений - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения +// ** ТипЗначения - ОписаниеТипов +// ** МногострочноеПолеВвода - Число +// ** Удалено - Булево +// ** ЗаполнятьОбязательно - Булево +// ** Доступен - Булево +// ** Виден - Булево +// ** Наименование - Строка +// ** ЭлементФормыДобавлен - Булево +// ** ВыводитьВВидеГиперссылки - Булево +// ** СтрокаСсылочногоТипа - Булево // Отказ - Булево - параметр обработчика ОбработкаПроверкиЗаполненияНаСервере. // ПроверяемыеРеквизиты - Массив - параметр обработчика ОбработкаПроверкиЗаполненияНаСервере. -// Объект - СправочникОбъектИмяСправочника - -// - ДокументОбъектИмяДокумента - -// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик - -// - БизнесПроцессОбъектИмяБизнесПроцесса - -// - ЗадачаОбъектИмяЗадачи - -// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета - -// - ПланСчетовОбъектИмяПланаСчетов - +// Объект - СправочникОбъектИмяСправочника +// - ДокументОбъектИмяДокумента +// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик +// - БизнесПроцессОбъектИмяБизнесПроцесса +// - ЗадачаОбъектИмяЗадачи +// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета +// - ПланСчетовОбъектИмяПланаСчетов // - Неопределено - если свойство не указано или Неопределено, // объект берется из реквизита формы "Объект". // @@ -327,14 +327,14 @@ // Форма - ФормаКлиентскогоПриложения - уже настроена в процедуре ПриСозданииНаСервере. // // Объект - Неопределено - взять объект из реквизита формы "Объект". -// - СправочникОбъектИмяСправочника - -// - ДокументОбъектИмяДокумента - -// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик - -// - БизнесПроцессОбъектИмяБизнесПроцесса - -// - ЗадачаОбъектИмяЗадачи - -// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета - -// - ПланСчетовОбъектИмяПланаСчетов - -// - ДанныеФормыСтруктура - +// - СправочникОбъектИмяСправочника +// - ДокументОбъектИмяДокумента +// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик +// - БизнесПроцессОбъектИмяБизнесПроцесса +// - ЗадачаОбъектИмяЗадачи +// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета +// - ПланСчетовОбъектИмяПланаСчетов +// - ДанныеФормыСтруктура // // СкрытьУдаленные - Неопределено - не менять текущий режим скрытия удаленных, установленный ранее. // - Булево - установить/отключить режим скрытия удаленных. @@ -357,11 +357,11 @@ // УправлениеСвойствамиПереопределяемый.ПриСозданииПредопределенныхНаборовСвойств. // // Параметры: -// ИмяНабора - Строка - Имя получаемого набора свойств. +// ИмяНабора - Строка - имя получаемого набора свойств. // // Возвращаемое значение: // СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - ссылка на набор свойств. -// Неопределено - Если предопределенный набор не найден. +// Неопределено - если предопределенный набор не существует. // // Пример: // Ссылка = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Пользователи"); @@ -382,14 +382,14 @@ // Форма - ФормаКлиентскогоПриложения - уже настроена в процедуре ПриСозданииНаСервере. // // Объект - Неопределено - взять объект из реквизита формы "Объект". -// - СправочникОбъектИмяСправочника - -// - ДокументОбъектИмяДокумента - -// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик - -// - БизнесПроцессОбъектИмяБизнесПроцесса - -// - ЗадачаОбъектИмяЗадачи - -// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета - -// - ПланСчетовОбъектИмяПланаСчетов - -// - ДанныеФормыСтруктура - +// - СправочникОбъектИмяСправочника +// - ДокументОбъектИмяДокумента +// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик +// - БизнесПроцессОбъектИмяБизнесПроцесса +// - ЗадачаОбъектИмяЗадачи +// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета +// - ПланСчетовОбъектИмяПланаСчетов +// - ДанныеФормыСтруктура // // ПоляНадписей - Булево - если указать Истина, то вместо полей ввода на форме будут созданы поля надписей. // @@ -881,7 +881,7 @@ // ПолучатьДопСведения - Булево - в результат включать дополнительные сведения. // // Возвращаемое значение: -// Массив из ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - +// Массив из ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения // Функция СвойстваОбъекта(ВладелецСвойств, ПолучатьДопРеквизиты = Истина, ПолучатьДопСведения = Истина) Экспорт @@ -953,7 +953,7 @@ // - Неопределено - по умолчанию, получить значения всех свойств владельца. // // Возвращаемое значение: -// ТаблицаЗначений - колонки: +// ТаблицаЗначений: // * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство владельца. // * Значение - Произвольный - значения любого типа из описания типов свойства объекта метаданных: // "Метаданные.ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Тип". @@ -979,13 +979,13 @@ ИмяОбъектаСоСвойствами = ОбщегоНазначения.ИмяТаблицыПоСсылке(ВладелецСвойств); ТекстЗапросаДопРеквизиты = - "ВЫБРАТЬ [РАЗРЕШЕННЫЕ] + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТаблицаСвойств.Свойство КАК Свойство, | ТаблицаСвойств.Значение КАК Значение, | ТаблицаСвойств.ТекстоваяСтрока, | ТаблицаСвойств.Ссылка КАК ВладелецСвойств |ИЗ - | [ИмяОбъектаСоСвойствами].ДополнительныеРеквизиты КАК ТаблицаСвойств + | &ИмяОбъектаСоСвойствами КАК ТаблицаСвойств | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | ПО ДополнительныеРеквизитыИСведения.Ссылка = ТаблицаСвойств.Свойство |ГДЕ @@ -994,7 +994,7 @@ | ИЛИ ДополнительныеРеквизитыИСведения.Имя В (&Свойства))"; ТекстЗапросаДопСведения = - "ВЫБРАТЬ [РАЗРЕШЕННЫЕ] + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТаблицаСвойств.Свойство КАК Свойство, | ТаблицаСвойств.Значение КАК Значение, | """" КАК ТекстоваяСтрока, @@ -1011,19 +1011,19 @@ Запрос = Новый Запрос; Если ПолучатьДопРеквизиты И ПолучатьДопСведения Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапросаДопРеквизиты, "[РАЗРЕШЕННЫЕ]", "РАЗРЕШЕННЫЕ") + " + ТекстЗапроса = ТекстЗапросаДопРеквизиты + " | | ОБЪЕДИНИТЬ ВСЕ - |" + СтрЗаменить(ТекстЗапросаДопСведения, "[РАЗРЕШЕННЫЕ]", ""); + |" + СтрЗаменить(ТекстЗапросаДопСведения, "РАЗРЕШЕННЫЕ", ""); ИначеЕсли ПолучатьДопРеквизиты Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапросаДопРеквизиты, "[РАЗРЕШЕННЫЕ]", "РАЗРЕШЕННЫЕ"); + ТекстЗапроса = ТекстЗапросаДопРеквизиты; ИначеЕсли ПолучатьДопСведения Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапросаДопСведения, "[РАЗРЕШЕННЫЕ]", "РАЗРЕШЕННЫЕ"); + ТекстЗапроса = ТекстЗапросаДопСведения; КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяОбъектаСоСвойствами]", ИмяОбъектаСоСвойствами); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяОбъектаСоСвойствами", ИмяОбъектаСоСвойствами + ".ДополнительныеРеквизиты"); Запрос.Параметры.Вставить("ОбъектыСоСвойствами", ОбъектыСоСвойствами); Запрос.Параметры.Вставить("Свойства", Свойства); @@ -1055,7 +1055,7 @@ // ДокументСсылка.ЗаказПокупателя, ... // Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на // дополнительный реквизит, значение которого нужно получить. -// - Строка - Имя дополнительного свойства. +// - Строка - имя дополнительного свойства. // // Возвращаемое значение: // Произвольный - любое значение, допустимое для свойства. @@ -1095,7 +1095,7 @@ // // Параметры: // ВладелецСвойств - Ссылка - например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя и т.д. -// ТаблицаСвойствИЗначений - ТаблицаЗначений - с колонками: +// ТаблицаСвойствИЗначений - ТаблицаЗначений: // * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство владельца. // * Значение - Произвольный - любое значение, допустимое для свойства (указано в элементе свойства). // @@ -1334,7 +1334,7 @@ // Получает структуру параметров для набора свойств. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Используется - Булево - признак использования набора свойств. // Устанавливается в Ложь, например, если // объект отключен функциональной опцией. @@ -1361,7 +1361,7 @@ // которых следует получить. // - Неопределено - получить значения всех свойств владельца. // Возвращаемое значение: -// ТаблицаЗначений - колонки: +// ТаблицаЗначений: // * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство владельца. // * Значение - Произвольный - значения любого типа из описания типов свойства объекта метаданных: // "Метаданные.ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Тип". @@ -1384,7 +1384,7 @@ // ПолучатьДопСведения - Булево - в результат включать дополнительные сведения. // // Возвращаемое значение: -// Массив - значения +// Массив - значения: // * ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - если есть. // Функция ПолучитьСписокСвойств(ВладелецСвойств, ПолучатьДопРеквизиты = Истина, ПолучатьДопСведения = Истина) Экспорт @@ -1611,11 +1611,11 @@ // при включенной отложенной инициализации. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - со свойствами: -// * ПараметрыСвойств - Структура - со свойствами: -// ** КоллекцияДекораций - Массив - -// ИмяЭлементаДляРазмещения - Строка - -// Индекс - Число - +// Форма - ФормаКлиентскогоПриложения: +// * ПараметрыСвойств - Структура: +// ** КоллекцияДекораций - Массив +// ИмяЭлементаДляРазмещения - Строка +// Индекс - Число // Процедура ПодготовитьФормуДляОтложеннойИнициализации(Форма, ИмяЭлементаДляРазмещения, Индекс) diff --git a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl index 0f1d327d9..a4d95d56f 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl @@ -14,7 +14,7 @@ // Форма - ФормаКлиентскогоПриложения - форма, в которой была вызвана обработка оповещения. // ИмяСобытия - Строка - имя обрабатываемого события. // Параметр - Произвольный - параметры, переданные в событии. -// - Структура - со свойствами: +// - Структура: // * Ссылка - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - измененный набор свойств. // - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - измененный дополнительный // реквизит. @@ -156,7 +156,8 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения - форма с дополнительными реквизитами, предварительно // настроенная в процедуре УправлениеСвойствами.ПриСозданииНаСервере(). -// Элемент - ПолеФормы, КомандаФормы - элемент, нажатие которого необходимо обработать. +// Элемент - ПолеФормы +// - КомандаФормы - элемент, нажатие которого необходимо обработать. // СтандартнаяОбработка - Булево - возвращаемый параметр, если необходимо выполнить интерактивные // действия с пользователем, то устанавливается в значение Ложь. // diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl index 48e0ce9af..ca54054b3 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl @@ -11,12 +11,13 @@ // Получает описание предопределенных наборов свойств. // // Параметры: -// Наборы - ДеревоЗначений - с колонками: -// * Имя - Строка - Имя набора свойств. Формируется из полного имени объекта +// Наборы - ДеревоЗначений: +// * Имя - Строка - имя набора свойств. Формируется из полного имени объекта // метаданных заменой символа "." на "_". // Например, "Документ_ЗаказПокупателя". -// * Идентификатор - УникальныйИдентификатор - Идентификатор ссылки предопределенного элемента. -// * Используется - Неопределено, Булево - Признак того, что набор свойств используется. +// * Идентификатор - УникальныйИдентификатор - идентификатор ссылки предопределенного элемента. +// * Используется - Неопределено +// - Булево - признак того, что набор свойств используется. // Например, можно использовать для скрытия набора по функциональным опциям. // Значение по умолчанию - Неопределено, соответствует значению Истина. // * ЭтоГруппа - Булево - Истина, если набор свойств является группой. @@ -31,9 +32,9 @@ // // Параметры: // Наименования - Соответствие - представление набора на переданном языке: -// * Ключ - Строка - Имя набора свойств. Например, "Справочник_Партнеры_Общие". -// * Значение - Строка - Наименование набора для переданного кода языка. -// КодЯзыка - Строка - Код языка. Например, "en". +// * Ключ - Строка - имя набора свойств. Например, "Справочник_Партнеры_Общие". +// * Значение - Строка - наименование набора для переданного кода языка. +// КодЯзыка - Строка - код языка. Например, "en". // // Пример: // Наименования["Справочник_Партнеры_Общие"] = НСтр("ru='Общие'; en='General';", КодЯзыка); @@ -53,8 +54,8 @@ // // ТипСсылки - Тип - тип ссылки владельца свойств. // -// НаборыСвойств - ТаблицаЗначений - с колонками: -// * Набор - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - +// НаборыСвойств - ТаблицаЗначений: +// * Набор - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений // * ОбщийНабор - Булево - Истина, если набор свойств содержит свойства, // общие для всех объектов. // // Далее свойства элемента формы типа ГруппаФормы вида обычная группа @@ -64,25 +65,25 @@ // // Если значение Неопределено, значит, использовать значение по умолчанию. // // // Для любой группы управляемой формы. -// * Высота - Число - -// * Заголовок - Строка - -// * Подсказка - Строка - -// * РастягиватьПоВертикали - Булево - -// * РастягиватьПоГоризонтали - Булево - -// * ТолькоПросмотр - Булево - -// * ЦветТекстаЗаголовка - Цвет - -// * Ширина - Число - -// * ШрифтЗаголовка - Шрифт - +// * Высота - Число +// * Заголовок - Строка +// * Подсказка - Строка +// * РастягиватьПоВертикали - Булево +// * РастягиватьПоГоризонтали - Булево +// * ТолькоПросмотр - Булево +// * ЦветТекстаЗаголовка - Цвет +// * Ширина - Число +// * ШрифтЗаголовка - Шрифт // // // Для обычной группы и страницы. -// * Группировка - ГруппировкаПодчиненныхЭлементовФормы - +// * Группировка - ГруппировкаПодчиненныхЭлементовФормы // // // Для обычной группы. -// * Отображение - ОтображениеОбычнойГруппы - +// * Отображение - ОтображениеОбычнойГруппы // // // Для страницы. -// * Картинка - Картинка - -// * ОтображатьЗаголовок - Булево - +// * Картинка - Картинка +// * ОтображатьЗаголовок - Булево // // СтандартнаяОбработка - Булево - начальное значение Истина. Указывает, получать ли // основной набор, когда НаборыСвойств.Количество() равно нулю. diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПовтИсп/Module.bsl index 5cc538298..63e3a8ae7 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиПовтИсп/Module.bsl @@ -11,8 +11,9 @@ // Только для внутреннего использования. // // Возвращаемое значение: -// ФиксированноеСоответствие - где: -// * Ключ - Строка, СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - +// ФиксированноеСоответствие: +// * Ключ - Строка +// - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений // * Значение - см. Справочники.НаборыДополнительныхРеквизитовИСведений.СвойстваНабора // Функция ПредопределенныеНаборыСвойств() Экспорт diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index c6d44211f..dde691207 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -15,7 +15,7 @@ // ВидСвойств - Строка - "ДополнительныеРеквизиты" или "ДополнительныеСведения". // // Возвращаемое значение: -// ТаблицаЗначений - Свойство, Наименование, ТипЗначения. +// ТаблицаЗначений - свойство, Наименование, ТипЗначения. // Неопределено - для указанного вида объекта нет набора свойств. // Функция СписокСвойствДляВидаОбъектов(ВидОбъектов, Знач ВидСвойств) Экспорт @@ -79,19 +79,19 @@ // Дополняет список колонки для загрузки данных колонками дополнительных реквизитов и свойств. // // Параметры: -// МетаданныеСправочника - ОбъектМетаданных - Метаданные справочника. -// ИнформацияПоКолонкам - ТаблицаЗначений - с колонками: -// * Видимость - Булево - -// * ПредставлениеКолонки - Строка - -// * Синоним - Строка - -// * ОбязательнаДляЗаполнения - Булево - -// * Позиция - Число - -// * ИмяКолонки - Строка - -// * Примечание - Строка - -// * ТипКолонки - Произвольный - -// * Группа - Строка - -// * Родитель - Строка - -// * Ширина - Число - +// МетаданныеСправочника - ОбъектМетаданных - метаданные справочника. +// ИнформацияПоКолонкам - ТаблицаЗначений: +// * Видимость - Булево +// * ПредставлениеКолонки - Строка +// * Синоним - Строка +// * ОбязательнаДляЗаполнения - Булево +// * Позиция - Число +// * ИмяКолонки - Строка +// * Примечание - Строка +// * ТипКолонки - Произвольный +// * Группа - Строка +// * Родитель - Строка +// * Ширина - Число // Процедура КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам) Экспорт @@ -188,7 +188,7 @@ Обработчик.НачальноеЗаполнение = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.1.2.206"; + Обработчик.Версия = "3.1.3.69"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("ecd6aad4-4b04-43be-82bc-cd4f563beb0b"); Обработчик.Процедура = "ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.Комментарий = НСтр("ru = 'Заполняет уникальное имя и обновляет зависимости дополнительных реквизитов и сведений. @@ -228,8 +228,8 @@ // См. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта // // Параметры: -// Объект - См. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта.Объект -// ДополнительныеРеквизиты - См. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта.ДополнительныеРеквизиты +// Объект - см. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта.Объект +// ДополнительныеРеквизиты - см. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта.ДополнительныеРеквизиты // Процедура ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты) Экспорт @@ -248,8 +248,8 @@ // Восстанавливает значения реквизитов объекта, хранящихся отдельно от объекта. // Параметры: -// Объект - См. ВерсионированиеОбъектовПереопределяемый.ПриВосстановленииВерсииОбъекта.Объект -// ДополнительныеРеквизиты - См. ВерсионированиеОбъектовПереопределяемый.ПриВосстановленииВерсииОбъекта.ДополнительныеРеквизиты +// Объект - см. ВерсионированиеОбъектовПереопределяемый.ПриВосстановленииВерсииОбъекта.Объект +// ДополнительныеРеквизиты - см. ВерсионированиеОбъектовПереопределяемый.ПриВосстановленииВерсииОбъекта.ДополнительныеРеквизиты // Процедура ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты) Экспорт @@ -275,7 +275,7 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. // // Параметры: -// Массив - См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.ИсключенияПоискаСсылок +// Массив - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.ИсключенияПоискаСсылок // Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт @@ -287,7 +287,7 @@ // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа. // // Параметры: -// ВидыДоступа - См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа.ВидыДоступа +// ВидыДоступа - см. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа.ВидыДоступа // Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт @@ -347,6 +347,69 @@ Обработчики.Вставить("ИнтерактивнаяПроверкаЗаполненияСвойств", "УправлениеСвойствамиСлужебный.УстановкаПараметровСеанса"); КонецПроцедуры +// См. ОбщегоНазначенияПереопределяемый.ПриОпределенииПодчиненныхОбъектов +// +// Параметры: +// ПодчиненныеОбъекты - см. ОбщегоНазначения.ПодчиненныеОбъекты +// +Процедура ПриОпределенииПодчиненныхОбъектов(ПодчиненныеОбъекты) Экспорт + + ПодчиненныйОбъект = ПодчиненныеОбъекты.Добавить(); + ПодчиненныйОбъект.ПодчиненныйОбъект = Метаданные.Справочники.ЗначенияСвойствОбъектов; + ПодчиненныйОбъект.ПоляСвязей = "Владелец, Наименование"; + ПодчиненныйОбъект.ПриПоискеЗаменыСсылок = "УправлениеСвойствамиСлужебный.ПриПоискеЗаменыСсылок"; + ПодчиненныйОбъект.ВыполнятьАвтоматическийПоискЗаменСсылок = Истина; + + ПодчиненныйОбъект = ПодчиненныеОбъекты.Добавить(); + ПодчиненныйОбъект.ПодчиненныйОбъект = Метаданные.Справочники.ЗначенияСвойствОбъектовИерархия; + ПодчиненныйОбъект.ПоляСвязей = "Владелец, Наименование"; + ПодчиненныйОбъект.ПриПоискеЗаменыСсылок = "УправлениеСвойствамиСлужебный.ПриПоискеЗаменыСсылок"; + ПодчиненныйОбъект.ВыполнятьАвтоматическийПоискЗаменСсылок = Истина; + +КонецПроцедуры + +// Вызывается при замене дублей в реквизитах элементов. +// +// Параметры: +// ПарыЗамен - Соответствие - содержит пары значений оригинал и дубль. +// НеобработанныеЗначенияОригиналов - Массив из Структура: +// * ЗаменяемоеЗначение - ЛюбаяСсылка - оригинальное значение заменяемого объекта. +// * ИспользуемыеСвязи - см. ПоискИУдалениеДублей.СвязиПодчиненныхОбъектовПоТипам. +// * ЗначениеКлючевыхРеквизитов - Структура - Ключ - имя реквизита, значение - значение реквизита. +// +Процедура ПриПоискеЗаменыСсылок(ПарыЗамен, НеобработанныеЗначенияОригиналов) Экспорт + + // Меняем владельца, если не нашли по наименованию похожего значения свойства + Для каждого НеобработанныйДубль Из НеобработанныеЗначенияОригиналов Цикл + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить(НеобработанныйДубль.ЗаменяемоеЗначение.Метаданные().ПолноеИмя()); + Элемент.УстановитьЗначение("Ссылка", НеобработанныйДубль.ЗаменяемоеЗначение); + Блокировка.Заблокировать(); + + НовоеЗначение = НеобработанныйДубль.ЗаменяемоеЗначение.ПолучитьОбъект(); + НовоеЗначение.ОбменДанными.Загрузка = Истина; + НовоеЗначение.Владелец = НеобработанныйДубль.ЗначениеКлючевыхРеквизитов.Владелец; + НовоеЗначение.Записать(); + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru='Поиск и замена ссылок'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + НеобработанныйДубль.ЗаменяемоеЗначение.Метаданные,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -493,14 +556,18 @@ КонецПроцедуры // Параметры: -// ОписаниеЗависимогоРеквизита - Структура - -// ПутьКРеквизиту - Строка - -// СтрокаТаблицы - СтрокаТаблицыЗначений - со свойствами: -// * ЗависимоеСвойство - Строка - -// * НаборСвойств - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - -// * Реквизит - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - -// * Условие - Строка - -// * Значение - Строка, Число, Булево, Дата, ЛюбаяСсылка - +// ОписаниеЗависимогоРеквизита - Структура +// ПутьКРеквизиту - Строка +// СтрокаТаблицы - СтрокаТаблицыЗначений: +// * ЗависимоеСвойство - Строка +// * НаборСвойств - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений +// * Реквизит - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения +// * Условие - Строка +// * Значение - Строка +// - Число +// - Булево +// - Дата +// - ЛюбаяСсылка // Процедура ПостроитьУсловияЗависимостей(ОписаниеЗависимогоРеквизита, ПутьКРеквизиту, СтрокаТаблицы) Экспорт @@ -678,20 +745,20 @@ // Возвращает таблицу наборов доступных свойств владельца. // // Параметры: -// ВладелецСвойств - ЛюбаяСсылка - Ссылка на владельца свойств -// - СправочникОбъектИмяСправочника - -// - ДокументОбъектИмяДокумента - -// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик - -// - БизнесПроцессОбъектИмяБизнесПроцесса - -// - ЗадачаОбъектИмяЗадачи - -// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета - -// - ПланСчетовОбъектИмяПланаСчетов - +// ВладелецСвойств - ЛюбаяСсылка - ссылка на владельца свойств +// - СправочникОбъектИмяСправочника +// - ДокументОбъектИмяДокумента +// - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик +// - БизнесПроцессОбъектИмяБизнесПроцесса +// - ЗадачаОбъектИмяЗадачи +// - ПланВидовРасчетаОбъектИмяПланаВидовРасчета +// - ПланСчетовОбъектИмяПланаСчетов // - ДанныеФормыСтруктура - объект со свойствами: -// * Ссылка - ЛюбаяСсылка - -// КлючНазначения - Строка - +// * Ссылка - ЛюбаяСсылка +// КлючНазначения - Строка // // Возвращаемое значение: -// ТаблицаЗначений - см. УправлениеСвойствамиПереопределяемый.ЗаполнитьНаборыСвойствОбъекта.НаборыСвойств +// см. УправлениеСвойствамиПереопределяемый.ЗаполнитьНаборыСвойствОбъекта.НаборыСвойств // Функция ПолучитьНаборыСвойствОбъекта(Знач ВладелецСвойств, КлючНазначения = Неопределено) Экспорт @@ -742,6 +809,12 @@ КонецФункции // Возвращает заполненную таблицу значений свойств объекта. +// +// Параметры: +// ДополнительныеСвойстваОбъекта - ТаблицаЗначений +// Наборы - ТаблицаЗначений +// ЭтоДополнительноеСведение - Булево +// Функция ЗначенияСвойств(ДополнительныеСвойстваОбъекта, Наборы, ЭтоДополнительноеСведение) Экспорт Если ДополнительныеСвойстваОбъекта.Количество() = 0 Тогда @@ -807,7 +880,7 @@ | НаборыСвойств КАК НаборыСвойств | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства - | ПО (СвойстваНаборов.Свойство = Свойства.Ссылка) + | ПО СвойстваНаборов.Свойство = Свойства.Ссылка | ПО (СвойстваНаборов.Ссылка = НаборыСвойств.Набор) |ГДЕ | НЕ СвойстваНаборов.ПометкаУдаления @@ -1000,7 +1073,7 @@ "ВЫБРАТЬ ПЕРВЫЕ 1 | ДополнительныеРеквизиты.Свойство КАК Свойство |ИЗ - | [ИмяТаблицы].ДополнительныеРеквизиты КАК ДополнительныеРеквизиты + | &ИмяТаблицы КАК ДополнительныеРеквизиты |ГДЕ | ДополнительныеРеквизиты.Ссылка = &Ссылка |; @@ -1012,7 +1085,7 @@ |ГДЕ | СвойстваНаборов.Ссылка В(&НаборыСвойств) | И НЕ СвойстваНаборов.ПометкаУдаления"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяТаблицы]", Ссылка.Метаданные().ПолноеИмя()); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяТаблицы", Ссылка.Метаданные().ПолноеИмя() + ".ДополнительныеРеквизиты"); Результат = Запрос.ВыполнитьПакет(); Возврат Не (Результат[0].Пустой() И Результат[1].Пустой()); @@ -1023,7 +1096,7 @@ // свойств набора дополнительных реквизитов и сведений. // // Параметры: -// Ссылка - ЛюбаяСсылка - +// Ссылка - ЛюбаяСсылка // Функция МетаданныеВладельцаЗначенийСвойствНабора(Ссылка, УчитыватьПометкуУдаления = Истина, ТипСсылки = Неопределено) Экспорт @@ -1064,7 +1137,8 @@ Если Ссылка <> СсылкаПредопределенного Тогда СвойстваНабора = ПредопределенныеНаборыСвойств.Получить(СвойстваСсылки.Родитель); Если СвойстваНабора <> Неопределено Тогда - ИмяПредопределенного = ПредопределенныеНаборыСвойств.Получить(СсылкаПредопределенного).Имя; + СвойстваНабора = ПредопределенныеНаборыСвойств.Получить(СсылкаПредопределенного);// см. Справочники.НаборыДополнительныхРеквизитовИСведений.СвойстваНабора + ИмяПредопределенного = СвойстваНабора.Имя; Иначе ИмяПредопределенного = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаПредопределенного, "ИмяПредопределенныхДанных"); КонецЕсли; @@ -1119,7 +1193,7 @@ // Параметры: // ВсеНаборы см. УправлениеСвойствамиПереопределяемый.ЗаполнитьНаборыСвойствОбъекта.НаборыСвойств -// НаборыСРеквизитами - СписокЗначений - +// НаборыСРеквизитами - СписокЗначений // Процедура ЗаполнитьНаборыСДополнительнымиРеквизитами(ВсеНаборы, НаборыСРеквизитами) Экспорт @@ -1247,7 +1321,7 @@ ЭлементБлокировки.УстановитьЗначение("Ссылка", Строка.Ссылка); Блокировка.Заблокировать(); - РеквизитОбъект = Строка.Ссылка.ПолучитьОбъект(); + РеквизитОбъект = Строка.Ссылка.ПолучитьОбъект();// ПланВидовХарактеристикОбъект.ДополнительныеРеквизитыИСведения ПараметрыОтбора = Новый Структура("Значение", Объект.Ссылка); НайденныеСтроки = РеквизитОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ПараметрыОтбора); Для Каждого Зависимость Из НайденныеСтроки Цикл @@ -1705,7 +1779,7 @@ // Возвращает основной набор свойств владельца. // // Параметры: -// ВладелецСвойств - Ссылка или Объект владельца свойств. +// ВладелецСвойств - ссылка или Объект владельца свойств. // // Возвращаемое значение: // СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 905a3f706..a32aa790c 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -130,13 +130,12 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - Получено = 0; ПолученныеПисьма.ПолученныеПисьмаПоУчетнойЗаписи.Очистить(); ПолучитьПисьма(Выборка, Ложь, Получено, ПолученныеПисьма); ОпределитьЗагруженныеРанееПодчиненныеПисьма(Выборка.Ссылка, ПолученныеПисьма.ПолученныеПисьмаПоУчетнойЗаписи); - + КонецЦикла; Возврат Выборка.Ссылка; @@ -186,22 +185,83 @@ Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); + ОтправитьПисьма(Запрос, ВсеПолученныеПисьма, ПисьмаДляОпределенияПапок); + +КонецПроцедуры + +Процедура ОтправитьПисьма(Запрос, ВсеПолученныеПисьма, ПисьмаДляОпределенияПапок, ОтправленоПисем = 0, ЕстьОшибки = Ложь, Интерактивно = Ложь) + ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + УстановитьПривилегированныйРежим(Истина); + Пока ВыборкаУчетныеЗаписи.Следующий() Цикл - - Подключение = ПодключитьсяКПочтовомуСерверу(ВыборкаУчетныеЗаписи.УчетнаяЗапись, Ложь); - Если Не Подключение.Успешно Тогда + УчетнаяЗапись = ВыборкаУчетныеЗаписи.УчетнаяЗапись; + Если Не ЗаблокироватьУчетнуюЗапись(УчетнаяЗапись) Тогда Продолжить; - КонецЕсли; + КонецЕсли; + Письма = Новый Массив; + СсылкиПисем = Новый Соответствие; + + ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать(); + Пока ВыборкаПисьма.Следующий() Цикл + ПараметрыПисьма = Взаимодействия.ПараметрыПисьмаДляОтправки(ВыборкаПисьма.Ссылка.ПолучитьОбъект()); + Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + Письма.Добавить(Письмо); + СсылкиПисем.Вставить(ВыборкаПисьма.Ссылка, Письмо); + КонецЦикла; + + ТекстОшибки = Неопределено; Попытка + РезультатОтправки = РаботаСПочтовымиСообщениями.ОтправитьПисьма(УчетнаяЗапись, Письма, ТекстОшибки); + СнятьБлокировкуУчетнойЗаписиДляПолучения(УчетнаяЗапись); + Исключение + СнятьБлокировкуУчетнойЗаписиДляПолучения(УчетнаяЗапись); - ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать(); - Пока ВыборкаПисьма.Следующий() Цикл + ШаблонСообщенияОбОшибке = НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()); + + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, + УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); + Если Не ЗначениеЗаполнено(РезультатОтправки) Тогда + Продолжить; + КонецЕсли; + КонецПопытки; + + ТекстыОшибок = Новый Массив; + ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать(); + Пока ВыборкаПисьма.Следующий() Цикл + ПисьмоСсылка = ВыборкаПисьма.Ссылка; + РезультатОтправкиПисьма = РезультатОтправки[СсылкиПисем[ПисьмоСсылка]]; + ОшибочныеПолучатели = Неопределено; + Если РезультатОтправкиПисьма <> Неопределено Тогда + ОшибочныеПолучатели = РезультатОтправкиПисьма.ОшибочныеПолучатели; + Если ЗначениеЗаполнено(ОшибочныеПолучатели) Тогда + ПараметрыОбработкиОшибки = ПараметрыОбработкиОшибкиОтправки(); + ПараметрыОбработкиОшибки.ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); + ПараметрыОбработкиОшибки.Ссылка = ВыборкаПисьма.Ссылка; + ПараметрыОбработкиОшибки.ПредставлениеПисьма = ВыборкаПисьма.ПредставлениеПисьма; + ПараметрыОбработкиОшибки.КоличествоПопыток = ВыборкаПисьма.КоличествоПопыток; + ПараметрыОбработкиОшибки.ИнкрементироватьКоличествоПопыток = Истина; + ПараметрыОбработкиОшибки.СообщатьПользователю = Интерактивно; + + РезультатОбработкиОшибки = ОбработатьОшибкуОтправкиПисьма(ПараметрыОбработкиОшибки, ОшибочныеПолучатели); + Если Не РезультатОбработкиОшибки.ПисьмоОтправлено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; - Если Не ОтправитьЭлектронноеПисьмо(ВыборкаПисьма, Подключение, Ложь) Тогда + ОтправленоПисем = ОтправленоПисем + 1; + УдалятьПослеОтправки = ВыборкаПисьма.УдалятьПослеОтправки; + + ТекстОшибки = ПослеВыполненияОтправкиПисьма(ПисьмоСсылка, РезультатОтправкиПисьма.ИдентификаторПисьмаSMTP, + РезультатОтправкиПисьма.ИдентификаторПисьмаIMAP, УдалятьПослеОтправки, Ложь); + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ТекстыОшибок.Добавить(ТекстОшибки); Продолжить; - КонецЕсли; + КонецЕсли; Если Не ВыборкаПисьма.УдалятьПослеОтправки Тогда Если ВыборкаПисьма.ТребуетсяОпределениеПапки Тогда @@ -209,60 +269,31 @@ КонецЕсли; ВсеПолученныеПисьма.Добавить(ВыборкаПисьма.Ссылка); КонецЕсли; - - КонецЦикла; - Подключение.Соединение.Отключиться(); - - Исключение - Подключение.Соединение.Отключиться(); - ВызватьИсключение; - КонецПопытки; + КонецЕсли; + КонецЦикла; + + Если ЗначениеЗаполнено(ТекстыОшибок) Тогда + ВызватьИсключение СтрСоединить(ТекстыОшибок, Символы.ПС); + КонецЕсли; КонецЦикла; КонецПроцедуры -Функция ОтправитьЭлектронноеПисьмо(ВыборкаПисьма, Подключение, Интерактивно) +Функция ПослеВыполненияОтправкиПисьма(Ссылка, ИдентификаторСообщения, ИдентификаторСообщенияОтправкаIMAP, УдалятьПослеОтправки, ВызыватьИсключение = Истина) - ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); - Если ПисьмоОбъект = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - Попытка - - ПараметрыПисьма = Неопределено; - Если Подключение.ПротоколПодключения = ПротоколИнтернетПочты.IMAP - И НЕ СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(Подключение.Профиль.АдресСервераSMTP) - И Не ВыборкаПисьма.УдалятьПослеОтправки Тогда - ПротоколПочты = "Все"; - Иначе - ПротоколПочты = ""; - КонецЕсли; - - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Подключение.Соединение, ПараметрыПисьма, ПротоколПочты); - - Исключение - Если Не ОбработатьОшибкуОтправкиПисьма(ПисьмоОбъект, ВыборкаПисьма, ПараметрыПисьма, Интерактивно) Тогда - Возврат Ложь; - КонецЕсли; - КонецПопытки; - НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Документ.ЭлектронноеПисьмоИсходящее"); - ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаПисьма.Ссылка); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); Блокировка.Заблокировать(); - Если ВыборкаПисьма.УдалятьПослеОтправки Тогда - ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); + Если УдалятьПослеОтправки Тогда + ПисьмоОбъект = Ссылка.ПолучитьОбъект(); ПисьмоОбъект.Удалить(); Иначе - ИдентификаторСообщения = ПисьмоОбъект.ИдентификаторСообщения; - ИдентификаторСообщенияОтправкаIMAP = ПисьмоОбъект.ИдентификаторСообщенияОтправкаIMAP; - - ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); // ДокументОбъект.ЭлектронноеПисьмоИсходящее + ПисьмоОбъект = Ссылка.ПолучитьОбъект(); // ДокументОбъект.ЭлектронноеПисьмоИсходящее ПисьмоОбъект.ИдентификаторСообщения = ИдентификаторСообщения; ПисьмоОбъект.ИдентификаторСообщенияОтправкаIMAP = ИдентификаторСообщенияОтправкаIMAP; @@ -275,79 +306,109 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ВызватьИсключение; + Если ВызыватьИсключение Тогда + ВызватьИсключение; + КонецЕсли; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, Ссылка.Метаданные(), + ПисьмоОбъект, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + Возврат КраткоеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; - Возврат Истина; + Возврат ""; + +КонецФункции + +// Формирует пустую структуру для заполнения параметров обработки ошибки отправки письма. +// +// Возвращаемое значение: +// Структура: +// * ПисьмоОбъект - ДокументОбъект.ЭлектронноеПисьмоИсходящее - отправляемое письмо. +// * Ссылка - ДокументСсылка.ЭлектронноеПисьмоИсходящее - ссылка на отправляемое письмо. +// * ПредставлениеПисьма - Строка +// * КоличествоПопыток - Число - количество уже совершенных попыток по отправке письма. +// * ИнкрементироватьКоличествоПопыток - Булево +// * СообщатьПользователю - Булево - признак того, что нужно вывести сообщение пользователю. +// +Функция ПараметрыОбработкиОшибкиОтправки() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ПисьмоОбъект", Неопределено); + Параметры.Вставить("Ссылка", Неопределено); + Параметры.Вставить("ПредставлениеПисьма", ""); + Параметры.Вставить("КоличествоПопыток", 0); + Параметры.Вставить("ИнкрементироватьКоличествоПопыток" , Ложь); + Параметры.Вставить("СообщатьПользователю", Ложь); + + Возврат Параметры; КонецФункции // Обрабатывает ошибку отправки электронного письма // // Параметры: -// ПисьмоОбъект - ДокументОбъект.ЭлектронноеПисьмоВходящее - письмо, при отправке которого возникла ошибка. -// ВыборкаПисьма - ВыборкаИзРезультатаЗапроса - данные отправляемого письма. -// ПараметрыПисьма - Структура - параметры отправляемого письма. -// Интерактивно - Булево - признак отправка письма инициирована пользователем интерактивно. +// ПараметрыОбработкиОшибки - см. ПараметрыОбработкиОшибкиОтправки +// ПараметрыПисьма - Структура - параметры отправляемого письма. // Возвращаемое значение: -// Булево - письмо отправлено -Функция ОбработатьОшибкуОтправкиПисьма(Знач ПисьмоОбъект, Знач ВыборкаПисьма, Знач ПараметрыПисьма, Знач Интерактивно) +// Результат - Структура: +// * ТекстСообщения - Строка - текст сообщения об ошибке +// * ПисьмоОтправлено - Булево - признак того, что письмо было отправлено +// +Функция ОбработатьОшибкуОтправкиПисьма(ПараметрыОбработкиОшибки, Знач ОшибочныеПолучатели) Экспорт - Если ПараметрыПисьма = Неопределено Тогда - - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = Ложь; - ВсеАдресатыПисьмаОтвергнутыСервером = Ложь; - ПредставлениеОшибочныхАдресатов = ""; - - Иначе - - РезультатАнализа = РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ПараметрыПисьма.ОшибочныеПолучатели); - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = РезультатАнализа.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов; - ВсеАдресатыПисьмаОтвергнутыСервером = РезультатАнализа.ВсеАдресатыПисьмаОтвергнутыСервером; - ПредставлениеОшибочныхАдресатов = РезультатАнализа.ПредставлениеОшибочныхАдресатов; - - КонецЕсли; + Результат = Новый Структура; + Результат.Вставить("ТекстСообщения", ""); + Результат.Вставить("ПисьмоОтправлено", Ложь); - Если ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов И Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда + РезультатАнализа = РезультатАнализаОшибочныхПолучателей(ПараметрыОбработкиОшибки.ПисьмоОбъект, ОшибочныеПолучатели); + ВсеАдресатыПисьмаОтвергнутыСервером = РезультатАнализа.ВсеАдресатыПисьмаОтвергнутыСервером; + ПредставлениеОшибочныхАдресатов = РезультатАнализа.ПредставлениеОшибочныхАдресатов; + + Если Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда ШаблонСообщенияОбОшибке = НСтр("ru = 'Следующие адресаты письма %1 не приняты почтовым сервером: |%2. Письмо отправлено остальным адресатам.'", ОбщегоНазначения.КодОсновногоЯзыка()); - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, - ВыборкаПисьма.ПредставлениеПисьма, ПредставлениеОшибочныхАдресатов); Иначе - ШаблонСообщенияОбОшибке = НСтр("ru = 'Не удалось отправить письмо %1 по причине: - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()); - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, - ВыборкаПисьма.ПредставлениеПисьма, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ШаблонСообщенияОбОшибке = НСтр("ru = 'Не удалось отправить письмо %1. + |Следующие адресаты письма не приняты почтовым сервером: + |%2.'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, + ПараметрыОбработкиОшибки.ПредставлениеПисьма, ПредставлениеОшибочныхАдресатов); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); - Если Интерактивно Тогда - Если Не (ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов И Не ВсеАдресатыПисьмаОтвергнутыСервером) Тогда - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, - ВыборкаПисьма.ПредставлениеПисьма, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецЕсли; - ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаПисьма.Ссылка); + Результат.ТекстСообщения = ТекстСообщенияОбОшибке; + + Если ПараметрыОбработкиОшибки.СообщатьПользователю Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, ПараметрыОбработкиОшибки.Ссылка); КонецЕсли; - Если НЕ ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов Или ВсеАдресатыПисьмаОтвергнутыСервером Тогда + Если ВсеАдресатыПисьмаОтвергнутыСервером Тогда + + ПисьмоОбъект = ПараметрыОбработкиОшибки.ПисьмоОбъект; // ДокументОбъект.ЭлектронноеПисьмоИсходящее ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, ПисьмоОбъект.Ссылка.Метаданные(), - ВыборкаПисьма.Ссылка, + ПараметрыОбработкиОшибки.Ссылка, ТекстСообщенияОбОшибке); - МенеджерЗаписи = РегистрыСведений.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Письмо = ВыборкаПисьма.Ссылка; - МенеджерЗаписи.КоличествоПопыток = ?(ВсеАдресатыПисьмаОтвергнутыСервером, 5, ВыборкаПисьма.КоличествоПопыток + 1); - МенеджерЗаписи.ИнформацияООшибке = ТекстСообщенияОбОшибке; - МенеджерЗаписи.Записать(); - Возврат Ложь; + Если ПараметрыОбработкиОшибки.ИнкрементироватьКоличествоПопыток Тогда + + МенеджерЗаписи = РегистрыСведений.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Письмо = ПараметрыОбработкиОшибки.Ссылка; + МенеджерЗаписи.КоличествоПопыток = ?(ВсеАдресатыПисьмаОтвергнутыСервером, 5, ПараметрыОбработкиОшибки.КоличествоПопыток + 1); + МенеджерЗаписи.ИнформацияООшибке = ТекстСообщенияОбОшибке; + МенеджерЗаписи.Записать(); + + КонецЕсли; + Возврат Результат; КонецЕсли; - Возврат Истина; + Результат.ПисьмоОтправлено = Истина; + + Возврат Результат; КонецФункции @@ -429,52 +490,6 @@ КонецПроцедуры -Функция ПодключитьсяКПочтовомуСерверу(УчетнаяЗапись, Интерактивно) - - Результат = Новый Структура; - Результат.Вставить("Успешно", Истина); - Результат.Вставить("Профиль", Неопределено); - Результат.Вставить("Соединение", Неопределено); - Результат.Вставить("ПротоколПодключения", Неопределено); - - Результат.Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(УчетнаяЗапись); - Попытка - Результат.Соединение = Новый ИнтернетПочта; - Результат.ПротоколПодключения = ?(ПустаяСтрока(Результат.Профиль.АдресСервераIMAP), ПротоколИнтернетПочты.POP3, ПротоколИнтернетПочты.IMAP); - Результат.Соединение.Подключиться(Результат.Профиль, Результат.ПротоколПодключения); - Если Результат.ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда - ПочтовыеЯщики = Результат.Соединение.ПолучитьПочтовыеЯщики(); - Для Каждого ПочтовыйЯщик Из ПочтовыеЯщики Цикл - Если НРег(ПочтовыйЯщик) = "отправленные" - Или НРег(ПочтовыйЯщик) = "inbox.sent" - Или НРег(ПочтовыйЯщик) = "sent" Тогда - Результат.Соединение.ТекущийПочтовыйЯщик = ПочтовыйЯщик; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Исключение - ШаблонСообщенияОбОшибке = НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()); - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, - УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); - - Если Интерактивно Тогда - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, - УчетнаяЗапись, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, УчетнаяЗапись); - КонецЕсли; - - Результат.Успешно = Ложь; - КонецПопытки; - - Возврат Результат; - -КонецФункции - // Выполняет получение электронной почты по доступным для пользователя учетным записям. // // Параметры: @@ -600,38 +615,10 @@ Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); ПисьмаДляОпределенияПапок = Новый Массив; - ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - + ВсеПолученныеПисьма = Новый Массив; Результат.ОтправленоПисем = 0; - УстановитьПривилегированныйРежим(Истина); - Пока ВыборкаУчетныеЗаписи.Следующий() Цикл - - Подключение = ПодключитьсяКПочтовомуСерверу(ВыборкаУчетныеЗаписи.УчетнаяЗапись, Истина); - Если Не Подключение.Успешно Тогда - Продолжить; - КонецЕсли; - - ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать(); - Пока ВыборкаПисьма.Следующий() Цикл - - Если Не ОтправитьЭлектронноеПисьмо(ВыборкаПисьма, Подключение, Истина) Тогда - Результат.ЕстьОшибки = Истина; - Результат.ОтправленоПисем = Результат.ОтправленоПисем + 1; - Продолжить; - КонецЕсли; - - Если Не ВыборкаПисьма.УдалятьПослеОтправки Тогда - Если ВыборкаПисьма.ТребуетсяОпределениеПапки Тогда - ПисьмаДляОпределенияПапок.Добавить(ВыборкаПисьма.Ссылка); - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - Подключение.Соединение.Отключиться(); - - КонецЦикла; + ОтправитьПисьма(Запрос, ВсеПолученныеПисьма, ПисьмаДляОпределенияПапок, Результат.ОтправленоПисем, Результат.ЕстьОшибки, Истина); Взаимодействия.УстановитьПапкиДляМассиваПисем(ПисьмаДляОпределенияПапок); ОтправитьУведомленияОПрочтении(Истина); @@ -653,7 +640,7 @@ КонецПроцедуры -Функция РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ОшибочныеПолучатели) Экспорт +Функция РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ОшибочныеПолучатели) Результат = Новый Структура; Результат.Вставить("ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов",Ложь); @@ -723,44 +710,10 @@ Процедура ПолучитьПисьма(Знач ДанныеУчетнойЗаписи, ЕстьОшибки, Получено, ПолученныеПисьма) - // Проверим блокировку учетной записи и если она доступна для получения, установим блокировку. - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | ЗаблокированныеДляПолученияУчетныеЗаписи.ДатаБлокировки - |ИЗ - | РегистрСведений.ЗаблокированныеДляПолученияУчетныеЗаписи КАК ЗаблокированныеДляПолученияУчетныеЗаписи - |ГДЕ - | ЗаблокированныеДляПолученияУчетныеЗаписи.УчетнаяЗапись = &УчетнаяЗапись"; - - Запрос.УстановитьПараметр("УчетнаяЗапись", ДанныеУчетнойЗаписи.Ссылка); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - Если Выборка.ДатаБлокировки + 60 * 60 > ТекущаяДатаСеанса() Тогда - Возврат; - КонецЕсли; + Если Не ЗаблокироватьУчетнуюЗапись(ДанныеУчетнойЗаписи.Ссылка) Тогда + Возврат; КонецЕсли; - НачатьТранзакцию(); - Попытка - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЗаблокированныеДляПолученияУчетныеЗаписи"); - ЭлементБлокировки.УстановитьЗначение("УчетнаяЗапись", ДанныеУчетнойЗаписи.Ссылка); - Блокировка.Заблокировать(); - - МенеджерЗаписи = РегистрыСведений.ЗаблокированныеДляПолученияУчетныеЗаписи.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.УчетнаяЗапись = ДанныеУчетнойЗаписи.Ссылка; - МенеджерЗаписи.ДатаБлокировки = ТекущаяДатаСеанса(); - МенеджерЗаписи.Записать(); - - ЗафиксироватьТранзакцию(); - - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - // ----------------------------------------------------------------- // Сформируем почтовый профиль и подключимся к почтовому серверу. Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ДанныеУчетнойЗаписи.Ссылка, Истина); @@ -898,7 +851,6 @@ СтруктураМассивовСозданныхПисем.ВсеПолученныеПисьма.Добавить(СозданноеПисьмо); СтруктураМассивовСозданныхПисем.ПолученныеПисьмаПоУчетнойЗаписи.Добавить(СозданноеПисьмо); - Если ДобавлятьВМассивПисемДляПолученияПапки Тогда СтруктураМассивовСозданныхПисем.ПисьмаДляОпределенияПапок.Добавить(СозданноеПисьмо); КонецЕсли; @@ -923,7 +875,7 @@ ТаблицаПустыхИдентификаторов = Новый ТаблицаЗначений; ТаблицаПустыхИдентификаторов.Колонки.Добавить("ИдентификаторНаСервере", КвалификаторСтроки255); - ТаблицаПустыхИдентификаторов.Колонки.Добавить("ХэшСумма", ОбщегоНазначения.ОписаниеТипаСтрока(32)); + ТаблицаПустыхИдентификаторов.Колонки.Добавить("ХешСумма", ОбщегоНазначения.ОписаниеТипаСтрока(32)); ДатаЗагрузкиПисем = ТекущаяДатаСеанса(); @@ -1022,13 +974,13 @@ Для Каждого ЗаголовокПисьма Из МассивЗаголовковСПустымИдентификатором Цикл НоваяСтрока = ТаблицаПустыхИдентификаторов.Добавить(); НоваяСтрока.ИдентификаторНаСервере = ЗаголовокПисьма.Идентификатор[0]; - НоваяСтрока.ХэшСумма = ХэшСуммаПочтовогоСообщения(ЗаголовокПисьма); + НоваяСтрока.ХешСумма = ХешСуммаПочтовогоСообщения(ЗаголовокПисьма); КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ - | ИдентификаторыПисемКЗагрузке.ХэшСумма, + | ИдентификаторыПисемКЗагрузке.ХешСумма, | ИдентификаторыПисемКЗагрузке.ИдентификаторНаСервере |ПОМЕСТИТЬ ИдентификаторыПисемКЗагрузке |ИЗ @@ -1037,16 +989,16 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | ИдентификаторыПисемКЗагрузке.ХэшСумма, + | ИдентификаторыПисемКЗагрузке.ХешСумма, | ИдентификаторыПисемКЗагрузке.ИдентификаторНаСервере |ИЗ | ИдентификаторыПисемКЗагрузке КАК ИдентификаторыПисемКЗагрузке | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - | ПО ИдентификаторыПисемКЗагрузке.ХэшСумма = ЭлектронноеПисьмоВходящее.ХэшСумма + | ПО ИдентификаторыПисемКЗагрузке.ХешСумма = ЭлектронноеПисьмоВходящее.ХешСумма | И (ЭлектронноеПисьмоВходящее.УчетнаяЗапись = &УчетнаяЗапись) | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее | ПО (ЭлектронноеПисьмоИсходящее.УчетнаяЗапись = &УчетнаяЗапись) - | И (ИдентификаторыПисемКЗагрузке.ХэшСумма = ЭлектронноеПисьмоИсходящее.ХэшСумма) + | И (ИдентификаторыПисемКЗагрузке.ХешСумма = ЭлектронноеПисьмоИсходящее.ХешСумма) |ГДЕ | ЭлектронноеПисьмоВходящее.Ссылка ЕСТЬ NULL | И ЭлектронноеПисьмоИсходящее.Ссылка ЕСТЬ NULL"; @@ -1170,8 +1122,8 @@ Функция ПолученныеПисьма() Результат = Новый Структура; - Результат.Вставить("ВсеПолученныеПисьма", Новый Массив); - Результат.Вставить("ПисьмаДляОпределенияПапок", Новый Массив); + Результат.Вставить("ВсеПолученныеПисьма", Новый Массив); + Результат.Вставить("ПисьмаДляОпределенияПапок", Новый Массив); Результат.Вставить("ПолученныеПисьмаПоУчетнойЗаписи", Новый Массив); Возврат Результат; @@ -1647,7 +1599,8 @@ // Заполняет документ электронное письмо по данным интернет-почтового сообщения. // // Параметры: -// Письмо - ДокументОбъект.ЭлектронноеПисьмоВходящее, ДокументОбъект.ЭлектронноеПисьмоИсходящее - +// Письмо - ДокументОбъект.ЭлектронноеПисьмоВходящее +// - ДокументОбъект.ЭлектронноеПисьмоИсходящее - // создаваемое письмо. // Сообщение - ИнтернетПочтовоеСообщение - полученное сообщение. // ЭтоИсходящееПисьмо - Булево - признак того, что это письмо входящее. @@ -1701,7 +1654,7 @@ Письмо.ИдентификаторОснования = ИзПисьмаПолучитьИдентификаторОснования(Сообщение); Письмо.ИдентификаторыОснований = Сообщение.ПолучитьПолеЗаголовка("References", "Строка"); - Письмо.ХэшСумма = ХэшСуммаПочтовогоСообщения(Сообщение); + Письмо.ХешСумма = ХешСуммаПочтовогоСообщения(Сообщение); Для каждого Вложение Из Сообщение.Вложения Цикл Если ПустаяСтрока(Вложение.Идентификатор) Тогда @@ -1712,7 +1665,7 @@ КонецПроцедуры -Функция ХэшСуммаПочтовогоСообщения(Сообщение) +Функция ХешСуммаПочтовогоСообщения(Сообщение) МассивСтрок = Новый Массив; МассивСтрок.Добавить(Сообщение.Отправитель.Адрес); @@ -2486,8 +2439,8 @@ // ТолькоСПустымИД - Булево - если Истина, то будут получены только вложения без ИДФайлаЭлектронногоПисьма. // // Возвращаемое значение: -// ТаблицаЗначений - содержит следующие колонки: -// * Ссылка - СправочникСсылка.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы - +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы // - СправочникСсылка.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы - // ссылка на присоединенный файл. // * ИндексКартинки - Число - номер отображаемой картинки. @@ -2779,15 +2732,6 @@ //////////////////////////////////////////////////////////////////////////////// // Прочее -Функция СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ИмяСервераИсходящейПочты) Экспорт - - МассивСерверовИсключений = Новый Массив; - МассивСерверовИсключений.Добавить("smtp.gmail.com"); - - Возврат МассивСерверовИсключений.Найти(ИмяСервераИсходящейПочты) <> Неопределено; - -КонецФункции - Функция ПолучитьВажностьЭлектронногоПисьма(Важность) Если (Важность = ВажностьИнтернетПочтовогоСообщения.Высокая) @@ -2881,7 +2825,7 @@ // ВажностьВзаимодействия - Перечисление.ВариантыВажностиВзаимодействия. // // Возвращаемое значение: -// ВажностьИнтернетПочтовогоСообщения - . +// ВажностьИнтернетПочтовогоСообщения // Функция ПолучитьВажность(ВажностьВзаимодействия) Экспорт @@ -3030,6 +2974,7 @@ // // Возвращаемое значение: // Строка,Неопределено - имя объекта метаданных присоединенных файлов электронного письма. +// Функция ИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо) Экспорт Если ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда @@ -3074,4 +3019,48 @@ КонецПроцедуры +Функция ЗаблокироватьУчетнуюЗапись(УчетнаяЗапись) + + // Проверим блокировку учетной записи и если она доступна для получения, установим блокировку. + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ЗаблокированныеДляПолученияУчетныеЗаписи.ДатаБлокировки + |ИЗ + | РегистрСведений.ЗаблокированныеДляПолученияУчетныеЗаписи КАК ЗаблокированныеДляПолученияУчетныеЗаписи + |ГДЕ + | ЗаблокированныеДляПолученияУчетныеЗаписи.УчетнаяЗапись = &УчетнаяЗапись"; + + Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Если Выборка.ДатаБлокировки + 60 * 60 > ТекущаяДатаСеанса() Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЗаблокированныеДляПолученияУчетныеЗаписи"); + ЭлементБлокировки.УстановитьЗначение("УчетнаяЗапись", УчетнаяЗапись); + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ЗаблокированныеДляПолученияУчетныеЗаписи.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.УчетнаяЗапись = УчетнаяЗапись; + МенеджерЗаписи.ДатаБлокировки = ТекущаяДатаСеанса(); + МенеджерЗаписи.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Истина; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl index 6644232e2..464c0c3dd 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl @@ -67,7 +67,7 @@ // Выполнить получение почты по всем доступным учетным записям. // Параметры: -// ЭлементСписок - ЭлементФормы - Элемент формы, который необходимо обновить, после получения писем. +// ЭлементСписок - ЭлементФормы - элемент формы, который необходимо обновить, после получения писем. // Процедура ОтправитьЗагрузитьПочтуПользователя(УникальныйИдентификатор, Форма, ЭлементСписок = Неопределено) Экспорт @@ -97,11 +97,11 @@ // Обработка завершения загрузки почты пользователя // // Параметры: -// Результат - Структура - Описание: +// Результат - Структура: // * КраткоеПредставлениеОшибки - Строка - информация о возникшей ошибке // * АдресДополнительногоРезультата - Строка - адрес, временного хранилища с дополнительной информацией о результатах выполнения. // * Статус - Строка - статус выполненной операции. -// ДополнительныеПараметры - Структура - Описание: +// ДополнительныеПараметры - Структура: // * ЭлементСписок - ТаблицаФормы - элемент, содержащий динамический список. // Процедура ОтправитьЗагрузитьПочтуПользователяЗавершение(Результат, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументов/Module.bsl b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументов/Module.bsl new file mode 100644 index 000000000..fdeb6f2e9 --- /dev/null +++ b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументов/Module.bsl @@ -0,0 +1,1039 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +#Область ОбработчикиСобытийФорм + +// Обработчик события "ПриСозданииНаСервере" формы документа. +// +// Параметры: +// Форма - УправляемаяФорма - форма списка документа. +// +Процедура ПриСозданииНаСервере_ФормаДокумента(Форма) Экспорт + + Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") = Ложь Тогда + ОтключаемаяДекорация = Форма.Элементы.Найти("ДекорацияСостояниеОригинала"); + Если Не ОтключаемаяДекорация = Неопределено Тогда + ОтключаемаяДекорация.Видимость = Ложь; + КонецЕсли; + Возврат; + КонецЕсли; + + Реквизиты = Новый Массив; + Реквизиты.Добавить(Новый РеквизитФормы("СписокВыбораСостоянийОригинала", Новый ОписаниеТипов("СписокЗначений"))); + + Форма.ИзменитьРеквизиты(Реквизиты); + + СостоянияОригиналов = ИспользуемыеСостояния(); + + ЗаполнитьСписокВыбораСостоянийОригинала(Форма, СостоянияОригиналов); + + ДекорацияСостояниеОригинала = Форма.Элементы.Добавить("ДекорацияСостояниеОригинала", Тип("ДекорацияФормы"), Форма); + ДекорацияСостояниеОригинала.Вид = ВидДекорацииФормы.Надпись; + ДекорацияСостояниеОригинала.Гиперссылка = Истина; + ДекорацияСостояниеОригинала.ГоризонтальноеПоложениеВГруппе = ГоризонтальноеПоложениеЭлемента.Право; + ДекорацияСостояниеОригинала.УстановитьДействие("Нажатие", "Подключаемый_ДекорацияСостояниеОригиналаНажатие"); + + Если ЗначениеЗаполнено(Форма.Объект.Ссылка) Тогда + ТекущиеСостояниеОригинала = СведенияОСостоянииОригиналаПоСсылке(Форма.Объект.Ссылка); + Если ПустаяСтрока(ТекущиеСостояниеОригинала) Тогда + ТекущиеСостояниеОригинала=НСтр("ru='<Состояние оригинала неизвестно>'"); + ДекорацияСостояниеОригинала.ЦветТекста = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; + Иначе + ТекущиеСостояниеОригинала = ТекущиеСостояниеОригинала.СостояниеОригиналаПервичногоДокумента; + КонецЕсли; + Иначе + ТекущиеСостояниеОригинала=НСтр("ru='<Состояние оригинала неизвестно>'"); + ДекорацияСостояниеОригинала.ЦветТекста = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; + КонецЕсли; + + ДекорацияСостояниеОригинала.Заголовок = ТекущиеСостояниеОригинала; + +КонецПроцедуры + +// Обработчик события "ПриСозданииНаСервере" формы списка. +// +// Параметры: +// Форма - УправляемаяФорма - форма списка документа. +// Список - ЭлементФормы - основной список формы. +// Расположение - ЭлементФормы - колонка списка, перед которой будут располагаться новые колонки состояний. +// Если Неопределено, тогда колонки будут расположены в конце списка. +// +Процедура ПриСозданииНаСервере_ФормаСписка(Форма, Список, Расположение = Неопределено) Экспорт + + Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") = Ложь Тогда + ОтключаемаяКолонка = Форма.Элементы.Найти("СостояниеОригиналПолучен"); + Если Не ОтключаемаяКолонка = Неопределено Тогда + ОтключаемаяКолонка.Видимость = Ложь; + КонецЕсли; + Возврат; + КонецЕсли; + + // Создание колонок в динамическом списке + РеквизитСписокСостояние = Форма.Элементы.Вставить("СостояниеОригиналПолучен",Тип("ПолеФормы"),Список,Расположение); + РеквизитСписокСостояние.Вид = ВидПоляФормы.ПолеКартинки; + РеквизитСписокСостояние.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + РеквизитСписокСостояние.КартинкаЗначений = БиблиотекаКартинок.КоллекцияПиктограммНаличиеОригиналаПервичногоДокумента; + РеквизитСписокСостояние.КартинкаШапки = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналПолучен; + РеквизитСписокСостояние.ПутьКДанным = Список.Имя + ".СостояниеОригиналПолучен"; + + РеквизитСписокСостояние = Форма.Элементы.Вставить("СостояниеОригиналаПервичногоДокумента",Тип("ПолеФормы"),Список,Расположение); + РеквизитСписокСостояние.Вид = ВидПоляФормы.ПолеНадписи; + РеквизитСписокСостояние.ГиперссылкаЯчейки = Истина; + РеквизитСписокСостояние.Заголовок = НСтр("ru='Состояние оригинала'"); + РеквизитСписокСостояние.ПутьКДанным = Список.Имя + ".СостояниеОригиналаПервичногоДокумента"; + + Если Не УчетОригиналовПервичныхДокументовВызовСервера.ПраваНаИзменениеСостояния() Тогда + Возврат; + КонецЕсли; + + // Создание списка + Реквизиты = Новый Массив; + Реквизиты.Добавить(Новый РеквизитФормы("СписокВыбораСостоянийОригинала", Новый ОписаниеТипов("СписокЗначений"))); + Форма.ИзменитьРеквизиты(Реквизиты); + + СостоянияОригиналов = ИспользуемыеСостояния(); + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + ВывестиНаФормуКомандыСостоянияОригинала(Форма, Список, СостоянияОригиналов); + КонецЕсли; + + ЗаполнитьСписокВыбораСостоянийОригинала(Форма, СостоянияОригиналов); + +КонецПроцедуры + +// Обработчик события "ПриПолученииДанныхНаСервере" формы списка. +// +// Параметры: +// СтрокиСписка - УправляемаяФорма - форма списка документа. +// +Процедура ПриПолученииДанныхНаСервере(СтрокиСписка) Экспорт + + Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") = Ложь Тогда + Возврат; + КонецЕсли; + + Для Каждого Строка Из СтрокиСписка Цикл + Строка = СтрокиСписка[Строка.Ключ]; + Если Строка.Оформление.Получить("СостояниеОригиналаПервичногоДокумента") = Неопределено Тогда + Возврат + КонецЕсли; + КонецЦикла; + + Ключи = СтрокиСписка.ПолучитьКлючи(); + Ссылки = Новый Массив; + Для Каждого Ключ Из Ключи Цикл + Ссылки.Добавить(Ключ.Ссылка); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | СостоянияОригиналовПервичныхДокументов.Состояние КАК СостояниеОригиналаПервичногоДокумента, + | СостоянияОригиналовПервичныхДокументов.ОбщееСостояние КАК ОбщееСостояние, + | ВЫБОР + | КОГДА СостоянияОригиналовПервичныхДокументов.Состояние = ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен) + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК СостояниеОригиналПолучен, + | СостоянияОригиналовПервичныхДокументов.Ссылка КАК Ссылка + |ИЗ + | РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов + |ГДЕ + | СостоянияОригиналовПервичныхДокументов.ОбщееСостояние + | И СостоянияОригиналовПервичныхДокументов.Ссылка В(&Ссылка)"; + Запрос.УстановитьПараметр("Ссылка",Ссылки); + + Выборка = Запрос.Выполнить().Выбрать(); + Для Каждого Строка Из СтрокиСписка Цикл + Строка = СтрокиСписка[Строка.Ключ]; + Выборка.Сбросить(); + Если Выборка.НайтиСледующий(Строка.Данные["Ссылка"], "Ссылка") Тогда + Строка.Данные["СостояниеОригиналаПервичногоДокумента"] = Выборка.СостояниеОригиналаПервичногоДокумента; + Строка.Оформление["СостояниеОригиналаПервичногоДокумента"].УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет); + Строка.Данные["СостояниеОригиналПолучен"] = Выборка.СостояниеОригиналПолучен; + Иначе + Строка.Данные["СостояниеОригиналаПервичногоДокумента"] = НСтр("ru = '<Неизвестно>'"); + Строка.Оформление["СостояниеОригиналаПервичногоДокумента"].УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +// Обновляет команды установки состояния оригинала на форме списка. +// +// Параметры: +// Форма - УправляемаяФорма - форма списка документа. +// Список - ЭлементФормы - основной список формы. +// +Процедура ОбновитьКомандыСостоянияОригинала(Форма, Список = Неопределено) Экспорт + + СостоянияОригиналов = ИспользуемыеСостояния(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + ПодменюУстановитьНастроитьСостояниеОригинала = Форма.Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригиналаОбычное"); + Если Не ПодменюУстановитьНастроитьСостояниеОригинала = Неопределено Тогда + Форма.Элементы.Удалить(ПодменюУстановитьНастроитьСостояниеОригинала); + КонецЕсли; + + ПодменюУстановитьНастроитьСостояниеОригинала = Форма.Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригиналаСмТакже"); + Если Не ПодменюУстановитьНастроитьСостояниеОригинала = Неопределено Тогда + Форма.Элементы.Удалить(ПодменюУстановитьНастроитьСостояниеОригинала); + КонецЕсли; + КонецЕсли; + + ВывестиНаФормуКомандыСостоянияОригинала(Форма, Список, СостоянияОригиналов); + + ЗаполнитьСписокВыбораСостоянийОригинала(Форма, СостоянияОригиналов); + +КонецПроцедуры + +// Устанавливает условное форматирование для подключаемых элементов в списке. +// +// Параметры: +// Форма - УправляемаяФорма - форма списка документа. +// Список - ЭлементФормы - основной список формы. +// +Процедура УстановитьУсловноеОформлениеВФормеСписка(Форма, Список) Экспорт + + ЭлементОформления = Форма.УсловноеОформление.Элементы.Добавить(); + + ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Список.Имя+".СостояниеОригиналаПервичногоДокумента"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + ЭлементОтбора.Использование = Истина; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Неизвестно>'")); + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + ЭлементОформления.Использование = Истина; + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("СостояниеОригиналаПервичногоДокумента"); + ПолеОформления.Использование = Истина; + + ЭлементОформления = Форма.УсловноеОформление.Элементы.Добавить(); + + ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Список.Имя+".СостояниеОригиналаПервичногоДокумента"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + ЭлементОтбора.Использование = Истина; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет); + ЭлементОформления.Использование = Истина; + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("СостояниеОригиналаПервичногоДокумента"); + ПолеОформления.Использование = Истина; + +КонецПроцедуры + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа. +Процедура ДополнитьПрофильРольюДляИзмененияСостоянийОригиналовДокументов(ОписаниеПрофиля) Экспорт + + ОписаниеПрофиля.Роли.Добавить("ИзменениеСостоянийОригиналовПервичныхДокументов"); + +КонецПроцедуры + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа. +Процедура ДополнитьПрофильРольюДляНастройкиСостоянийОригиналовДокументов(ОписаниеПрофиля) Экспорт + + ОписаниеПрофиля.Роли.Добавить("ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов"); + +КонецПроцедуры + +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа. +Процедура ДополнитьПрофильРольюДляЧтенияСостоянийОригиналовДокументов(ОписаниеПрофиля) Экспорт + + ОписаниеПрофиля.Роли.Добавить("ЧтениеСостоянийОригиналовПервичныхДокументов"); + +КонецПроцедуры + +// Возвращает массив всех состояний. +// +// Возвращаемое значение: +// Массив - все возможные состояния оригинала, включая скрытое "Оригиналы не все". +// +Функция ВсеСостояния() Экспорт + + Запрос = Новый запрос; + Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ + | СостоянияОригиналовПервичныхДокументов.Ссылка КАК Состояние + |ИЗ + | Справочник.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов + |ГДЕ + | НЕ СостоянияОригиналовПервичныхДокументов.ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | СостоянияОригиналовПервичныхДокументов.РеквизитДопУпорядочивания" ; + + Выборка = Запрос.Выполнить(); + + Возврат Выборка.Выгрузить().ВыгрузитьКолонку("Состояние"); + +КонецФункции + +// Выводит подключаемые команды в форме. Вызывается без подключения подсистемы "Подключаемые команды". +// +// Параметры: +// Форма - УправляемаяФорма - форма списка документа. +// Список - ЭлементФормы - основной список формы. +// СостоянияОригиналов - ТаблицаЗначений - состояния оригинала, разрешенные пользователям, и используемые при смене состояния оригинала. +// +Процедура ВывестиНаФормуКомандыСостоянияОригинала(Форма, Список, СостоянияОригиналов) Экспорт + + // Проверка и создание подменю и групп кнопок на командной панели списка + Элементы = Форма.Элементы; + + Если Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригинала") = Неопределено Тогда + ПодменюУстановитьНастроитьСостояниеОригинала = Элементы.Добавить("ПодменюУстановитьНастроитьСостояниеОригинала",Тип("ГруппаФормы"),Список.КоманднаяПанель); + ПодменюУстановитьНастроитьСостояниеОригинала.Вид = ВидГруппыФормы.Подменю; + ПодменюУстановитьНастроитьСостояниеОригинала.Отображение = ОтображениеКнопки.Картинка; + ПодменюУстановитьНастроитьСостояниеОригинала.Картинка = БиблиотекаКартинок.УстановитьСостояниеОригиналаПервичногоДокумента; + ПодменюУстановитьНастроитьСостояниеОригинала.Заголовок = НСтр("ru='Установить состояние оригинала'"); + ПодменюУстановитьНастроитьСостояниеОригинала.Подсказка = НСтр("ru='Подменю команд предназначенных для установки и изменения состояния оригиналов первичных документов.'"); + КонецЕсли; + ПодменюУстановитьНастроитьСостояниеОригинала = Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригинала"); + + Если Элементы.Найти("ГруппаУстановитьСостояниеОригинала") = Неопределено Тогда + ГруппаУстановитьСостояниеОригинала = Элементы.Добавить("ГруппаУстановитьСостояниеОригинала",Тип("ГруппаФормы"),ПодменюУстановитьНастроитьСостояниеОригинала); + ГруппаУстановитьСостояниеОригинала.Вид = ВидГруппыФормы.ГруппаКнопок; + КонецЕсли; + ГруппаУстановитьСостояниеОригинала = Элементы.Найти("ГруппаУстановитьСостояниеОригинала"); + + Если Элементы.Найти("ГруппаНастроитьСостоянияОригинала") = Неопределено Тогда + ГруппаНастроитьСостоянияОригинала = Элементы.Добавить("ГруппаНастроитьСостоянияОригинала",Тип("ГруппаФормы"),ПодменюУстановитьНастроитьСостояниеОригинала); + ГруппаНастроитьСостоянияОригинала.Вид = ВидГруппыФормы.ГруппаКнопок; + КонецЕсли; + ГруппаНастроитьСостоянияОригинала = Элементы.Найти("ГруппаНастроитьСостоянияОригинала"); + + Если Элементы.Найти("ГруппаУстановитьОригиналПолучен") = Неопределено Тогда + ГруппаУстановитьОригиналПолучен = Элементы.Добавить("ГруппаУстановитьОригиналПолучен",Тип("ГруппаФормы"),Список.КоманднаяПанель); + ГруппаУстановитьОригиналПолучен.Вид = ВидГруппыФормы.ГруппаКнопок; + ГруппаУстановитьОригиналПолучен.Подсказка = НСтр("ru='Команда предназначена для установки конечного состояния оригинала первичного документа ""Оригинал получен"".'"); + КонецЕсли; + ГруппаУстановитьОригиналПолучен = Элементы.Найти("ГруппаУстановитьОригиналПолучен"); + + Для Каждого Состояние Из ГруппаУстановитьСостояниеОригинала.ПодчиненныеЭлементы Цикл + НайденнаяКоманда = Форма.Команды.Найти(Состояние.ИмяКоманды); + НайденнаяКнопка = Форма.Элементы.Найти(Состояние.ИмяКоманды); + + Если Не НайденнаяКоманда = Неопределено Тогда + Форма.Команды.Удалить(НайденнаяКоманда); + Форма.Элементы.Удалить(НайденнаяКнопка); + КонецЕсли; + КонецЦикла; + + // Удаляем последнюю кнопку + Если ГруппаУстановитьСостояниеОригинала.ПодчиненныеЭлементы.Количество() > 0 Тогда + Состояние = ГруппаУстановитьСостояниеОригинала.ПодчиненныеЭлементы[0]; + НайденнаяКоманда = Форма.Команды.Найти(Состояние.ИмяКоманды); + НайденнаяКнопка = Форма.Элементы.Найти(Состояние.ИмяКоманды); + КонецЕсли; + + Если Не НайденнаяКоманда = Неопределено Тогда + Форма.Команды.Удалить(НайденнаяКоманда); + Форма.Элементы.Удалить(НайденнаяКнопка); + КонецЕсли; + + Для Каждого Состояние Из СостоянияОригиналов Цикл + ИмяКоманды = "Команда" + СтрЗаменить(Состояние.Ссылка.УникальныйИдентификатор(),"-","_"); + ИмяКнопки = Состояние.Наименование; + + Если Форма.Команды.Найти(ИмяКоманды) = Неопределено Тогда + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Действие = "Подключаемый_УстановитьСостояниеОригинала"; + + // Кнопки командной панели + КнопкаУстановитьСостояние = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ГруппаУстановитьСостояниеОригинала); + КнопкаУстановитьСостояние.Заголовок = ИмяКнопки; + КнопкаУстановитьСостояние.ИмяКоманды = ИмяКоманды; + + // Устанавливаем картинки + Если Состояние.Ссылка = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен Тогда + КнопкаУстановитьСостояние.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналПолучен; + ИначеЕсли Состояние.Ссылка = Справочники.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана Тогда + КнопкаУстановитьСостояние.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +// Добавляет кнопку для перехода к настройкам состояний в подменю командой панели списка "Установить состояние", если у +// польз. есть соответствующая роль + Если ПравоДоступа("Добавление",Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов) + И ПравоДоступа("Изменение",Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов) Тогда + ИмяКоманды = "НастройкаСостояний"; + ИмяКнопки = НСтр("ru='Настроить...'"); + + Если Форма.Команды.Найти(ИмяКоманды) = Неопределено Тогда + КомандаФормы = Форма.Команды.Добавить(ИмяКоманды); + КомандаФормы.Действие = "Подключаемый_УстановитьСостояниеОригинала"; + КомандаФормы.Заголовок = ИмяКнопки; + + КнопкаНастроитьСостояния = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"),ГруппаНастроитьСостоянияОригинала); + КнопкаНастроитьСостояния.Заголовок = ИмяКнопки; + КнопкаНастроитьСостояния.ИмяКоманды = ИмяКоманды; + КнопкаНастроитьСостояния.Картинка = БиблиотекаКартинок.НастроитьСостоянияОригиналаПервичногоДокумента; + КонецЕсли; + + КонецЕсли; + + // Добавляет кнопку "Установить оригинал получен" на командой панели списка + ИмяКоманды = "УстановитьОригиналПолучен"; + ИмяКнопки = НСтр("ru='Установить ""Оригинал получен""'"); + + Если Форма.Команды.Найти(ИмяКоманды) = Неопределено Тогда + КомандаФормы = Форма.Команды.Добавить(ИмяКоманды); + КомандаФормы.Действие = "Подключаемый_УстановитьСостояниеОригинала"; + КомандаФормы.Заголовок = ИмяКнопки; + + НоваяКнопка = Форма.Элементы.Добавить("Кнопка" + ИмяКоманды , Тип("КнопкаФормы"),ГруппаУстановитьОригиналПолучен); + НоваяКнопка.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналПолучен; + НоваяКнопка.ИмяКоманды = ИмяКоманды; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +// +// Параметры: +// Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления. +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.3.142"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "УчетОригиналовПервичныхДокументов.ЗаполнитьСостоянияОригиналаПервичногоДокумента"; + Обработчик.РежимВыполнения = "Оперативно"; + +КонецПроцедуры + +// См. ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек. +Процедура ПриОпределенииОбъектовСНачальнымЗаполнением(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов); + +КонецПроцедуры + +// См. ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных. +Процедура ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники) Экспорт + + СтрокаТаблицы = ЗагружаемыеСправочники.Найти(Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов.ПолноеИмя(), "ПолноеИмя"); + Если СтрокаТаблицы <> Неопределено Тогда + ЗагружаемыеСправочники.Удалить(СтрокаТаблицы); + КонецЕсли; + +КонецПроцедуры + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд. +Процедура ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд) Экспорт + + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов")Тогда + Возврат; + КонецЕсли; + + Вид = ВидыПодключаемыхКоманд.Добавить(); + Вид.Имя = "УстановкаСостоянияОригинала"; + Вид.ИмяПодменю = "ПодменюУстановитьНастроитьСостояниеОригинала"; + Вид.Заголовок = НСтр("ru = 'Установить состояние оригинала'"); + Вид.Картинка = БиблиотекаКартинок.УстановитьСостояниеОригиналаПервичногоДокумента; + Вид.Отображение = ОтображениеКнопки.Картинка; + + Вид = ВидыПодключаемыхКоманд.Добавить(); + Вид.Имя = "УстановкаСостоянияОригиналПолучен"; + Вид.ИмяПодменю = "УстановитьСостояниеОригиналПолучен"; + Вид.Заголовок = НСтр("ru='Установить состояние ""Оригинал получен""'"); + Вид.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналПолучен; + Вид.Отображение = ОтображениеКнопки.Картинка; + +КонецПроцедуры + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. +Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт + + Если Не УчетОригиналовПервичныхДокументовВызовСервера.ПраваНаИзменениеСостояния() Тогда + Возврат; + КонецЕсли; + + ОбъектыСУчетомОригиналовПервичныхДокументов = Новый Массив; + + УчетОригиналовПервичныхДокументовПереопределяемый.ПриОпределенииОбъектовСКомандамиУчетаОригиналов(ОбъектыСУчетомОригиналовПервичныхДокументов); + + ВыводитьКоманды = Ложь; + + Для Каждого Объект Из ОбъектыСУчетомОригиналовПервичныхДокументов Цикл + Если СтрНайти(НастройкиФормы.ИмяФормы, Объект) Тогда + ВыводитьКоманды = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не ВыводитьКоманды Тогда + Возврат; + КонецЕсли; + + ОбъектыСУчетомОригиналовПервичныхДокументов.Очистить(); + + Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ОбъектСУчетомОригиналовПервичныхДокументов.Тип.Типы() Цикл + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + ОбъектыСУчетомОригиналовПервичныхДокументов.Добавить(ОбъектМетаданных.ПолноеИмя()); + КонецЦикла; + + Для Каждого Источник Из Источники.Строки Цикл + Если ОбъектыСУчетомОригиналовПервичныхДокументов.Найти(Источник.ПолноеИмя) <> Неопределено Тогда + ВыводитьКоманды = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не ВыводитьКоманды Тогда + Возврат; + КонецЕсли; + + СостоянияОригиналов = ИспользуемыеСостояния(); + + Порядок = 0; + + // Команды по состояниям оригинала + Для Каждого Состояние Из СостоянияОригиналов Цикл + Команда = Команды.Добавить(); + Команда.Вид = "УстановкаСостоянияОригинала"; + Команда.Представление = Состояние.Наименование; + Команда.Порядок = Порядок + 1; + // Устанавливаем картинки + Если Состояние.Ссылка = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен Тогда + Команда.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналПолучен; + ИначеЕсли Состояние.Ссылка = Справочники.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана Тогда + Команда.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен; + КонецЕсли; + Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ОбъектСУчетомОригиналовПервичныхДокументов.Тип; + Команда.Назначение = "ДляСписка"; + Команда.РежимЗаписи = "Проводить"; + Команда.ФункциональныеОпции = "ИспользоватьУчетОригиналовПервичныхДокументов"; + Команда.Обработчик = "УчетОригиналовПервичныхДокументовКлиент.Подключаемый_УстановитьСостояниеОригинала"; + + Порядок = Порядок + 1; + КонецЦикла; + + // Команда для перехода к настройкам состояний в подменю командой панели списка "Установить состояние", если у польз. + // есть соответствующая роль + Если ПравоДоступа("Добавление",Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов) + И ПравоДоступа("Изменение",Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов) Тогда + Команда = Команды.Добавить(); + Команда.Вид = "УстановкаСостоянияОригинала"; + Команда.Идентификатор = "НастройкаСостояний"; + Команда.Представление = НСтр("ru='Настроить...'"); + Команда.Важность = "СмТакже"; + Команда.Картинка = БиблиотекаКартинок.НастроитьСостоянияОригиналаПервичногоДокумента; + Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ОбъектСУчетомОригиналовПервичныхДокументов.Тип; + Команда.Назначение = "ДляСписка"; + Команда.РежимЗаписи = "НеЗаписывать"; + Команда.ФункциональныеОпции = "ИспользоватьУчетОригиналовПервичныхДокументов"; + Команда.Обработчик = "УчетОригиналовПервичныхДокументовКлиент.Подключаемый_УстановитьСостояниеОригинала"; + КонецЕсли; + + // Команда "Установить оригинал получен" на командой панели списка + Команда = Команды.Добавить(); + Команда.Вид = "УстановкаСостоянияОригиналПолучен"; + Команда.Представление = НСтр("ru='Установить состояние ""Оригинал получен""'"); + Команда.ОтображениеКнопки = ОтображениеКнопки.Картинка; + Команда.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналПолучен; + Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ОбъектСУчетомОригиналовПервичныхДокументов.Тип; + Команда.Назначение = "ДляСписка"; + Команда.РежимЗаписи = "Проводить"; + Команда.ФункциональныеОпции = "ИспользоватьУчетОригиналовПервичныхДокументов"; + Команда.Обработчик = "УчетОригиналовПервичныхДокументовКлиент.Подключаемый_УстановитьСостояниеОригинала"; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Записывает новое состояние оригинала документа. +// +// Параметры: +// ДанныеЗаписи - Массив +// - Структура - массив или структура содержащие данные об изменяемой записи в регистре. +// ИмяСостояния - Строка - устанавливаемое состояние. +// +Процедура УстановитьНовоеСостояниеОригинала(ДанныеЗаписи, ИмяСостояния) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(ДанныеЗаписи) = Тип("Массив") Тогда + Для Каждого Запись Из ДанныеЗаписи Цикл + + Если Запись.СостояниеОригиналаПервичногоДокумента <> ИмяСостояния Тогда + Если Запись.ОбщееСостояние Тогда + ПроверкаЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьНаборЗаписей(); + ПроверкаЗаписьСостоянияОригинала.Отбор.Ссылка.Установить(Запись.Ссылка); + ПроверкаЗаписьСостоянияОригинала.Отбор.ОбщееСостояние.Установить(Ложь); + ПроверкаЗаписьСостоянияОригинала.Прочитать(); + + Если ПроверкаЗаписьСостоянияОригинала.Количество()>0 Тогда + Для Каждого ПрошлаяЗапись Из ПроверкаЗаписьСостоянияОригинала Цикл + Если СокрЛП(ПрошлаяЗапись.Состояние) <> ИмяСостояния Тогда + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Ссылка, + ПрошлаяЗапись.ПервичныйДокумент,ПрошлаяЗапись.ПервичныйДокументПредставление,ИмяСостояния,ПрошлаяЗапись.ФормаИзвне); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка,ИмяСостояния); + Иначе + ПроверкаЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьНаборЗаписей(); + ПроверкаЗаписьСостоянияОригинала.Отбор.Ссылка.Установить(Запись.Ссылка); + ПроверкаЗаписьСостоянияОригинала.Прочитать(); + Если ПроверкаЗаписьСостоянияОригинала.Количество()> 0 Тогда + ПроверкаЗаписьСостоянияОригинала.Отбор.ПервичныйДокумент.Установить(Запись.ПервичныйДокумент); + ПроверкаЗаписьСостоянияОригинала.Прочитать(); + Для Каждого ПрошлаяЗапись Из ПроверкаЗаписьСостоянияОригинала Цикл + Если СокрЛП(ПрошлаяЗапись.Состояние) <> ИмяСостояния Тогда + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Ссылка, + Запись.ПервичныйДокумент,Запись.ПервичныйДокументПредставление,ИмяСостояния,Запись.Извне); + Если СостояниеПечатныхФормОдинаково(Запись.Ссылка,ИмяСостояния) Тогда + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка,ИмяСостояния); + Иначе + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка,Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе); + КонецЕсли; + КонецЕсли; + КонецЦикла; + Иначе + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка,ИмяСостояния); + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Иначе + ПроверкаЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьНаборЗаписей(); + ПроверкаЗаписьСостоянияОригинала.Отбор.Ссылка.Установить(ДанныеЗаписи.Ссылка); + ПроверкаЗаписьСостоянияОригинала.Отбор.ОбщееСостояние.Установить(Истина); + ПроверкаЗаписьСостоянияОригинала.Прочитать(); + Если ПроверкаЗаписьСостоянияОригинала.Количество()>0 Тогда + Если СокрЛП(ПроверкаЗаписьСостоянияОригинала[0].Состояние) <> ИмяСостояния Тогда + + ПроверкаЗаписьСостоянияОригинала.Отбор.ОбщееСостояние.Установить(Ложь); + ПроверкаЗаписьСостоянияОригинала.Прочитать(); + + Если ПроверкаЗаписьСостоянияОригинала.Количество()>0 Тогда + Для Каждого ПрошлаяЗапись Из ПроверкаЗаписьСостоянияОригинала Цикл + Если СокрЛП(ПрошлаяЗапись.Состояние) <> ИмяСостояния Тогда + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(ДанныеЗаписи.Ссылка, + ПрошлаяЗапись.ПервичныйДокумент,ПрошлаяЗапись.ПервичныйДокументПредставление,ИмяСостояния,ПрошлаяЗапись.ФормаИзвне); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(ДанныеЗаписи.Ссылка,ИмяСостояния); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +// Заполняет выпадающий список выбора состояний на форме. +// +// Параметры: +// Форма - УправляемаяФорма - форма списка документа. +// +Процедура ЗаполнитьСписокВыбораСостоянийОригинала(Форма, СостоянияОригиналов) + + СписокВыбораСостоянийОригинала = Форма.СписокВыбораСостоянийОригинала; + СписокВыбораСостоянийОригинала.Очистить(); + + Для каждого Состояние Из СостоянияОригиналов Цикл + + Если Состояние.Ссылка = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен Тогда + СписокВыбораСостоянийОригинала.Добавить(Состояние.Наименование,,,БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналПолучен); + ИначеЕсли Состояние.Ссылка = Справочники.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана Тогда + СписокВыбораСостоянийОригинала.Добавить(Состояние.Наименование,,,БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен); + Иначе + СписокВыбораСостоянийОригинала.Добавить(Состояние.Наименование); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Возвращает массив состояний, доступных пользователю. +// +// Возвращаемое значение: +// ТаблицаЗначений - состояния оригинала, разрешенные пользователям, и используемые при смене состояния оригинала. +// +Функция ИспользуемыеСостояния()Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | СостоянияОригиналовПервичныхДокументов.Наименование КАК Наименование, + | СостоянияОригиналовПервичныхДокументов.Ссылка КАК Ссылка + |ИЗ + | Справочник.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов + |ГДЕ + | НЕ СостоянияОригиналовПервичныхДокументов.Ссылка = ЗНАЧЕНИЕ(Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе) + | И НЕ СостоянияОригиналовПервичныхДокументов.ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | СостоянияОригиналовПервичныхДокументов.РеквизитДопУпорядочивания"; + + Выборка = Запрос.Выполнить(); + + УстановитьПривилегированныйРежим(Ложь); + + Возврат Выборка.Выгрузить(); + +КонецФункции + +// Возвращает ключ записи регистра общего состояния оригинала документа по ссылке. +// +// Параметры: +// ДокументСсылка - СсылкаДокумент - ссылка на документ,для которого необходимо получить ключ записи общего состояния. +// +// Возвращаемое значение: +// КлючЗаписиРегистра - ключ записи регистра общего состояния оригинала документа. +// +Функция КлючЗаписиОбщегоСостояния(ДокументСсылка) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ + | СостоянияОригиналовПервичныхДокументов.Ссылка КАК Ссылка, + | СостоянияОригиналовПервичныхДокументов.ПервичныйДокумент КАК ПервичныйДокумент, + | СостоянияОригиналовПервичныхДокументов.ОбщееСостояние КАК ОбщееСостояние, + | СостоянияОригиналовПервичныхДокументов.ФормаИзвне КАК ФормаИзвне + |ИЗ + | РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов + |ГДЕ + | СостоянияОригиналовПервичныхДокументов.Ссылка = &Ссылка + | И СостоянияОригиналовПервичныхДокументов.ОбщееСостояние" ; + Запрос.УстановитьПараметр("Ссылка",ДокументСсылка); + + Выборка = Запрос.Выполнить().Выгрузить(); + + Для Каждого Ключ Из Выборка Цикл + ПередаваемыеПараметры = Новый Структура("Ссылка, ПервичныйДокумент, ОбщееСостояние, ФормаИзвне"); + ЗаполнитьЗначенияСвойств(ПередаваемыеПараметры,Ключ); + + ПараметрыМассив = Новый Массив; + ПараметрыМассив.Добавить(ПередаваемыеПараметры); + + КлючЗаписиРегистра = Новый("РегистрСведенийКлючЗаписи.СостоянияОригиналовПервичныхДокументов", ПараметрыМассив); + КонецЦикла; + + Возврат КлючЗаписиРегистра; + +КонецФункции + +// Проверяет и возвращает признак того, является ли документ по ссылке документом с учетом оригиналов. +// +// Параметры: +// ДокументСсылка - СсылкаДокумент - ссылка на документ, который необходимо проверить. +// +// Возвращаемое значение: +// Булево - ИСТИНА, если документ является объектом учетом оригиналов. +// +Функция ЭтоОбъектУчета(ДокументСсылка) Экспорт + + ДоступныеТипы = Метаданные.ОпределяемыеТипы.ОбъектСУчетомОригиналовПервичныхДокументов.Тип.Типы(); + Для Каждого Тип Из ДоступныеТипы Цикл + ТипДокумента = Метаданные.НайтиПоТипу(Тип); + ТипПоСсылке = ОбщегоНазначения.ИмяТаблицыПоСсылке(ДокументСсылка); + ТипПоСсылке = Метаданные.НайтиПоПолномуИмени(ТипПоСсылке); + Если ТипДокумента = ТипПоСсылке Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Проверяет и возвращает признак того, является ли документ по ссылке документом с учетом оригиналов. +// +// Параметры: +// ДокументСсылка - СсылкаДокумент - ссылка на документ, который необходимо проверить. +// +// Возвращаемое значение: +// Булево - ИСТИНА, если документ является объектом учетом оригиналов. +// +Функция ВозможностьЗаписиОбъектов(МассивСтрок) Экспорт + + МассивСсылокДляПроверки = Новый Массив; + ОбъектыЗаписи = Новый Массив; + Для Каждого Строка Из МассивСтрок Цикл + Если ЭтоОбъектУчета(Строка.Ссылка) Тогда + МассивСсылокДляПроверки.Добавить(Строка.Ссылка); + ОбъектыЗаписи.Добавить(Строка); + КонецЕсли; + КонецЦикла; + + НепроведенныеДокументы = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(МассивСсылокДляПроверки); + + Если НепроведенныеДокументы.Количество() > 0 Тогда + Возврат Ложь; + Иначе + Возврат ОбъектыЗаписи; + КонецЕсли + +КонецФункции + +// Возвращает ссылку на документ по штрихкоду табличного документа. +// +// Параметры: +// Штрихкод - Строка - штрихкод. +// Менеджеры - Массив - менеджеры документов. +// +// Возвращаемое значение: +// Массив - ссылки на документы. +// +Функция СсылкаПоШтрихкодуТабличногоДокумента(Штрихкод, Менеджеры = Неопределено) + + Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Штрихкод, Ложь, Ложь) + ИЛИ СокрЛП(Штрихкод) = "" Тогда + Возврат Новый Массив; + КонецЕсли; + + ШтрихкодВШестнадцатеричномВиде = ПреобразоватьДесятичноеЧислоВШестнадцатеричнуюСистемуСчисления(Число(Штрихкод)); + Пока СтрДлина(ШтрихкодВШестнадцатеричномВиде) < 32 Цикл + ШтрихкодВШестнадцатеричномВиде = "0" + ШтрихкодВШестнадцатеричномВиде; + КонецЦикла; + + Идентификатор = + Сред(ШтрихкодВШестнадцатеричномВиде, 1, 8) + + "-" + Сред(ШтрихкодВШестнадцатеричномВиде, 9, 4) + + "-" + Сред(ШтрихкодВШестнадцатеричномВиде, 13, 4) + + "-" + Сред(ШтрихкодВШестнадцатеричномВиде, 17, 4) + + "-" + Сред(ШтрихкодВШестнадцатеричномВиде, 21, 12); + + Если СтрДлина(Идентификатор) <> 36 Тогда + Возврат Новый Массив; + КонецЕсли; + + Если Менеджеры = Неопределено Тогда + МенеджерыОбъектов = Новый Массив(); + Для Каждого ЭлементМетаданных Из Метаданные.Документы Цикл + МенеджерыОбъектов.Добавить(Документы[ЭлементМетаданных.Имя]); + КонецЦикла; + Иначе + МенеджерыОбъектов = Новый Массив(); + Для Каждого ПустаяСсылка Из Менеджеры Цикл + ТипСсылки = ТипЗнч(ПустаяСсылка); + + Если Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + МенеджерыОбъектов.Добавить(Документы[ПустаяСсылка.Метаданные().Имя]); + + ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + МенеджерыОбъектов.Добавить(Справочники[ПустаяСсылка.Метаданные().Имя]); + + ИначеЕсли Задачи.ТипВсеСсылки(ТипСсылки) Тогда + МенеджерыОбъектов.Добавить(Задачи[ПустаяСсылка.Метаданные().Имя]); + + ИначеЕсли БизнесПроцессы.ТипВсеСсылки(ТипСсылки) Тогда + МенеджерыОбъектов.Добавить(БизнесПроцессы[ПустаяСсылка.Метаданные().Имя]); + + ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки(ТипСсылки) Тогда + МенеджерыОбъектов.Добавить(ПланыВидовХарактеристик[ПустаяСсылка.Метаданные().Имя]); + + Иначе + ТекстИсключения = НСтр("ru = 'Ошибка распознавания штрихкода: тип ""%Тип%"" не поддерживается.'"); + ТекстИсключения = СтрЗаменить(ТекстИсключения,"%Тип%",ТипСсылки); + + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Запрос = Новый Запрос; + + МассивСсылок = Новый Массив; + ПервыйЗапрос = Истина; + Для Каждого Менеджер Из МенеджерыОбъектов Цикл + + Попытка + Ссылка = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(Идентификатор)); + Исключение + Продолжить; + КонецПопытки; + + МетаданныеСсылки = Ссылка.Метаданные(); + Если Не ПравоДоступа("Чтение", МетаданныеСсылки) Тогда + Продолжить; + КонецЕсли; + + МассивСсылок.Добавить(Ссылка); + + Если НЕ ПервыйЗапрос Тогда + Запрос.Текст = Запрос.Текст + + "ОБЪЕДИНИТЬ ВСЕ + |"; + КонецЕсли; + + Запрос.Текст = Запрос.Текст + + "ВЫБРАТЬ" + ?(ПервыйЗапрос," " + "РАЗРЕШЕННЫЕ" + " "," ") + "Таблица.Ссылка КАК Ссылка + |ИЗ " + МетаданныеСсылки.ПолноеИмя() + " КАК Таблица + |ГДЕ Ссылка В (&МассивСсылок) + |"; + + ПервыйЗапрос = Ложь; + + КонецЦикла; + + Если Не ПервыйЗапрос Тогда + Запрос.Параметры.Вставить("МассивСсылок", МассивСсылок); + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Иначе + Возврат Новый Массив; + КонецЕсли; + +КонецФункции + +// Процедура обрабатывает действия по учету оригиналов после сканирования штрихкода документа. +// +// Параметры: +// Штрихкод - Строка - отсканированный штрихкод документа. +// +Процедура ОбработатьШтрихкод(Штрихкод) Экспорт + + СсылкаПоШтрихкоду = СсылкаПоШтрихкодуТабличногоДокумента(СсылкаПоШтрихкоду); + УчетОригиналовПервичныхДокументовВызовСервера.УстановитьНовоеСостояниеОригинала(СсылкаПоШтрихкоду,Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен); + +КонецПроцедуры + +// Проверяет после записи состояний печатных форм документа в регистр, имеют ли они одинаковые состояния. +// +// Параметры: +// ДокументСсылка - СсылкаДокумент - ссылка на документ,у которого необходимо проверить состояния печатных форм. +// ИмяСостояния - Строка - имя состояния, которое было установлено. +// +// Возвращаемое значение: +// Булево - ИСТИНА, если все печатные формы документа имеют одинаковое состояние. +// +Функция СостояниеПечатныхФормОдинаково(ДокументСсылка,ИмяСостояния) Экспорт + + СостояниеФормОдинаково = Ложь; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | СостоянияОригиналовПервичныхДокументов.Состояние.Наименование КАК СостояниеОригинала + |ИЗ + | РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов + |ГДЕ + | СостоянияОригиналовПервичныхДокументов.Ссылка = &Ссылка + | И НЕ СостоянияОригиналовПервичныхДокументов.ОбщееСостояние"; + Запрос.УстановитьПараметр("Ссылка",ДокументСсылка); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Если Выборка.СостояниеОригинала = СокрЛП(ИмяСостояния) Тогда + СостояниеФормОдинаково = Истина + Иначе + СостояниеФормОдинаково = Ложь; + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат СостояниеФормОдинаково; + +КонецФункции + +// Возвращает структуру с данными о текущим общем состоянии оригинала документа по ссылке. +// +// Параметры: +// ДокументСсылка - СсылкаДокумент - ссылка на документ, для которого необходимо получить сведения о общем состоянии. +// +// Возвращаемые значения: +// Структура/Строка - основные сведения о общем состоянии оригинала,если до этого состояние оригинала было записано, +// если нет, то пустая строка. +// +Функция СведенияОСостоянииОригиналаПоСсылке(ДокументСсылка) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ + | СостоянияОригиналовПервичныхДокументов.Состояние КАК Состояние, + | СостоянияОригиналовПервичныхДокументов.ОбщееСостояние КАК ОбщееСостояние + |ИЗ + | РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов + |ГДЕ + | СостоянияОригиналовПервичныхДокументов.Ссылка = &Ссылка + | И СостоянияОригиналовПервичныхДокументов.ОбщееСостояние = ИСТИНА"; + + Запрос.УстановитьПараметр("Ссылка",ДокументСсылка); + + СведенияОСостоянии=""; + + Если Не Запрос.Выполнить().Пустой() Тогда + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + СведенияОСостоянии = Новый Структура; + СведенияОСостоянии.Вставить("Ссылка",ДокументСсылка); + СведенияОСостоянии.Вставить("СостояниеОригиналаПервичногоДокумента",Выборка.Состояние); + КонецЕсли; + + Возврат СведенияОСостоянии; + +КонецФункции + +// Процедура обработчика обновления для заполнения начальных элементов справочника "Состояния оригиналов первичных документов". +Процедура ЗаполнитьСостоянияОригиналаПервичногоДокумента() Экспорт + + СостояниеОригинала = Справочники.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(СостояниеОригинала.Ссылка); + СостояниеОригинала.Наименование = НСтр("ru='Форма напечатана'"); + СостояниеОригинала.Описание = НСтр("ru='Состояние, означающее, что печатная форма только печаталась.'"); + СостояниеОригинала.РеквизитДопУпорядочивания = "1"; + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(СостояниеОригинала); + + СостояниеОригинала = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(СостояниеОригинала.Ссылка); + СостояниеОригинала.Наименование = НСтр("ru='Оригиналы не все'"); + СостояниеОригинала.Описание = НСтр("ru='Общее состояние для документа, у которого оригиналы печатных форм находятся в разных состояниях.'"); + СостояниеОригинала.РеквизитДопУпорядочивания = "99998"; + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(СостояниеОригинала); + + СостояниеОригинала = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(СостояниеОригинала.Ссылка); + СостояниеОригинала.Наименование = НСтр("ru='Оригинал получен'"); + СостояниеОригинала.Описание = НСтр("ru='Состояние, означающее, что подписанный оригинал печатной формы есть в наличии.'"); + СостояниеОригинала.РеквизитДопУпорядочивания = "99999"; + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(СостояниеОригинала); + + +КонецПроцедуры + +Функция ПреобразоватьДесятичноеЧислоВШестнадцатеричнуюСистемуСчисления(Знач ДесятичноеЧисло) + + Результат = ""; + + Пока ДесятичноеЧисло > 0 Цикл + ОстатокОтДеления = ДесятичноеЧисло % 16; + ДесятичноеЧисло = (ДесятичноеЧисло - ОстатокОтДеления) / 16; + Результат = Сред("0123456789abcdef", ОстатокОтДеления + 1, 1) + Результат; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументов/УчетОригиналовПервичныхДокументов.mdo b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументов/УчетОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..b7ce12264 --- /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..802b4eefd --- /dev/null +++ b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовВызовСервера/Module.bsl @@ -0,0 +1,97 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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..655c90e8b --- /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..f367cd892 --- /dev/null +++ b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовКлиент/Module.bsl @@ -0,0 +1,470 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Устанавливает состояние оригинала для выделенных документов. Вызывается через подсистему "Подключаемые команды". +// +// Параметры: +// Ссылка - ДокументСсылка - ссылка на документ. +// Параметры - Структура - параметры выполнения команды. +// +Процедура Подключаемый_УстановитьСостояниеОригинала(Ссылка, Параметры) Экспорт + + Если Не УчетОригиналовПервичныхДокументовВызовСервера.ПраваНаИзменениеСостояния() Тогда + ПоказатьПредупреждение(, НСтр("ru = 'У пользователя недостаточно прав на изменение состояния оригинала первичного документа'")); + Возврат; + КонецЕсли; + + Список = Параметры.Источник; + + Если Список.ВыделенныеСтроки.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Не выделено ни одного документа, для которого можно установить выбранное состояние'")); + Возврат; + КонецЕсли; + + Если Параметры.ОписаниеКоманды.Вид = "УстановкаСостоянияОригиналПолучен" Тогда + ИмяСостояния = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен"); + Иначе + ИмяСостояния = Параметры.ОписаниеКоманды.Представление; + КонецЕсли; + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Список",Список); + + Если Параметры.ОписаниеКоманды.Идентификатор = "НастройкаСостояний" Тогда + ОткрытьФормуНастройкиСостояний(); + Возврат; + ИначеЕсли Параметры.ОписаниеКоманды.Вид = "УстановкаСостоянияОригиналПолучен" И Список.ВыделенныеСтроки.Количество() = 1 Тогда + ДополнительныеПараметры.Вставить("ИмяСостояния", ИмяСостояния); + УстановитьСостояниеОригиналаЗавершение(КодВозвратаДиалога.Да, ДополнительныеПараметры); + Возврат; + КонецЕсли; + + ДополнительныеПараметры.Вставить("ИмяСостояния", ИмяСостояния); + + Если Список.ВыделенныеСтроки.Количество() > 1 Тогда + ТекстВопроса = НСтр("ru='У выделенных в списке документов будет установлено состояние оригинала ""%ИмяСостояния%"". Продолжить?'"); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "%ИмяСостояния%", ИмяСостояния); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(КодВозвратаДиалога.Да,НСтр("ru='Установить'")); + Кнопки.Добавить(КодВозвратаДиалога.Нет,НСтр("ru='Не устанавливать'")); + + ПоказатьВопрос(Новый ОписаниеОповещения("УстановитьСостояниеОригиналаЗавершение", ЭтотОбъект, ДополнительныеПараметры), ТекстВопроса, Кнопки); + ИначеЕсли УчетОригиналовПервичныхДокументовВызовСервера.ЭтоОбъектУчета(Список.ТекущиеДанные.Ссылка) Тогда + УстановитьСостояниеОригиналаЗавершение(КодВозвратаДиалога.Да, ДополнительныеПараметры); + Иначе + ПоказатьПредупреждение(, НСтр("ru = 'Для данного документа учет оригиналов не ведется.'")); + КонецЕсли; + +КонецПроцедуры + +// Устанавливает состояние оригинала для выделенных документов. Вызывается без подключения подсистемы "Подключаемые команды". +// +// Параметры: +// Команда - Строка- имя выполняемой команды формы. +// Форма - УправляемаяФорма - форма списка или документа. +// Список - ЭлементФормы - список формы, в котором будет происходить изменение состояния. +// +Процедура УстановитьСостояниеОригинала(Команда, Форма, Список) Экспорт + + Если Не УчетОригиналовПервичныхДокументовВызовСервера.ПраваНаИзменениеСостояния() Тогда + ПоказатьПредупреждение(, НСтр("ru = 'У пользователя недостаточно прав на изменение состояния оригинала первичного документа'")); + Возврат; + КонецЕсли; + + Если Список.ВыделенныеСтроки.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Не выделено ни одного документа, для которого можно установить выбранное состояние'")); + Возврат; + КонецЕсли; + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Список",Список); + + Если Команда = "НастройкаСостояний" Тогда + ОткрытьФормуНастройкиСостояний(); + Возврат; + ИначеЕсли Команда = "УстановитьОригиналПолучен" И Список.ВыделенныеСтроки.Количество()= 1 Тогда + ДополнительныеПараметры.Вставить("ИмяСостояния", ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен")); + УстановитьСостояниеОригиналаЗавершение(КодВозвратаДиалога.Да, ДополнительныеПараметры); + Возврат; + КонецЕсли; + + НайденноеСостояние = Форма.Элементы.Найти(Команда); + + Если Не НайденноеСостояние = Неопределено Тогда + ИмяСостояния = НайденноеСостояние.Заголовок; + ИначеЕсли Команда = "УстановитьОригиналПолучен" Тогда + ИмяСостояния = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен"); + КонецЕсли; + + ДополнительныеПараметры.Вставить("ИмяСостояния", ИмяСостояния); + + Если Список.ВыделенныеСтроки.Количество() > 1 Тогда + ТекстВопроса = НСтр("ru='У выделенных в списке документов будет установлено состояние оригинала ""%ИмяСостояния%"". Продолжить?'"); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "%ИмяСостояния%", ИмяСостояния); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(КодВозвратаДиалога.Да,НСтр("ru='Установить'")); + Кнопки.Добавить(КодВозвратаДиалога.Нет,НСтр("ru='Не устанавливать'")); + + ПоказатьВопрос(Новый ОписаниеОповещения("УстановитьСостояниеОригиналаЗавершение", ЭтотОбъект, ДополнительныеПараметры), ТекстВопроса, Кнопки); + ИначеЕсли УчетОригиналовПервичныхДокументовВызовСервера.ЭтоОбъектУчета(Список.ТекущиеДанные.Ссылка) Тогда + УстановитьСостояниеОригиналаЗавершение(КодВозвратаДиалога.Да, ДополнительныеПараметры); + Иначе + ПоказатьПредупреждение(, НСтр("ru = 'Для данного документа учет оригиналов не ведется.'")); + КонецЕсли; + +КонецПроцедуры + +// Открывает на форме списка или документа выпадающие меню выбора состояния оригинала. +// +// Параметры: +// Форма - УправляемаяФорма - форма списка документов или документа. +// Источник - ЭлементФормы - список или декорация формы, у которого будет открыт выпадающий список. +// +Процедура ОткрытьМенюВыбораСостояния(Форма, Источник) Экспорт + + Если Не УчетОригиналовПервичныхДокументовВызовСервера.ПраваНаИзменениеСостояния() Тогда + ПоказатьПредупреждение(, НСтр("ru = 'У пользователя недостаточно прав на изменение состояния оригинала первичного документа'")); + Возврат; + КонецЕсли; + + Если ТипЗнч(Источник) = Тип("ТаблицаФормы") Тогда + ДанныеЗаписи = Источник.ТекущиеДанные; + + МассивСсылок = Новый Массив; + МассивСсылок.Добавить(ДанныеЗаписи.Ссылка); + + НепроведенныеДокументы = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(МассивСсылок); + + Если НепроведенныеДокументы.Количество() = 1 Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Для выполнения команды необходимо предварительно провести документ.'")); + Возврат; + Иначе + МассивЗаписей = Новый Массив; + МассивЗаписей.Добавить(ДанныеЗаписи); + + ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьМенюВыбораСостоянияЗавершение", ЭтотОбъект, МассивЗаписей); + + Если ДанныеЗаписи.ОбщееСостояние Или Не ЗначениеЗаполнено(ДанныеЗаписи.СостояниеОригиналаПервичногоДокумента) Тогда + УточнитьПоПечатнымФормам = Форма.СписокВыбораСостоянийОригинала.НайтиПоЗначению("Уточнить по печатным формам..."); + Если УточнитьПоПечатнымФормам = Неопределено Тогда + Форма.СписокВыбораСостоянийОригинала.Добавить(НСтр("ru = 'Уточнить по печатным формам...'"),,,БиблиотекаКартинок.УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам); + КонецЕсли; + Форма.ПоказатьВыборИзМеню(ОписаниеОповещения,Форма.СписокВыбораСостоянийОригинала,Форма.Элементы.СостояниеОригиналаПервичногоДокумента); + Иначе + УточнитьПоПечатнымФормам = Форма.СписокВыбораСостоянийОригинала.НайтиПоЗначению("Уточнить по печатным формам..."); + Если УточнитьПоПечатнымФормам <> Неопределено Тогда + Форма.СписокВыбораСостоянийОригинала.Удалить(УточнитьПоПечатнымФормам); + КонецЕсли; + Форма.ПоказатьВыборИзМеню(ОписаниеОповещения,Форма.СписокВыбораСостоянийОригинала,Форма.Элементы.СостояниеОригиналаПервичногоДокумента); + КонецЕсли; + + КонецЕсли; + Иначе + Если Форма.Объект.Ссылка.Пустая() Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Для выполнения команды необходимо предварительно провести документ.'")); + Возврат; + Иначе + МассивСсылок = Новый Массив; + МассивСсылок.Добавить(Форма.Объект.Ссылка); + + НепроведенныеДокументы = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(МассивСсылок); + + Если НепроведенныеДокументы.Количество() = 1 Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Для выполнения команды необходимо предварительно провести документ.'")); + Возврат; + Иначе + ДополнительныеПараметры = Новый Структура("Ссылка", Форма.Объект.Ссылка); + + ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьМенюВыбораСостоянияЗавершение", ЭтотОбъект, ДополнительныеПараметры); + + УточнитьПоПечатнымФормам = Форма.СписокВыбораСостоянийОригинала.НайтиПоЗначению("Уточнить по печатным формам..."); + + Если УточнитьПоПечатнымФормам = Неопределено Тогда + Форма.СписокВыбораСостоянийОригинала.Добавить(НСтр("ru = 'Уточнить по печатным формам...'"),,,БиблиотекаКартинок.УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам); + КонецЕсли; + + Форма.ПоказатьВыборИзМеню(ОписаниеОповещения, Форма.СписокВыбораСостоянийОригинала, Источник); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения событий подсистемы "Учет оригиналов первичных документов" для формы документа. +// +// Параметры: +// ИмяСобытия - Строка - имя произошедшего события. +// Форма - УправляемаяФорма - форма документа. +// +Процедура ОбработчикОповещенияФормаДокумента(ИмяСобытия, Форма) Экспорт + + Если ИмяСобытия = "ИзменениеСостоянияОригиналаПервичногоДокумента" Тогда + СформироватьНадписьТекущегоСостоянияОригинала(Форма); + ИначеЕсли ИмяСобытия = "ДобавлениеУдалениеСостоянияОригиналаПервичногоДокумента" Тогда + Форма.ОбновитьОтображениеДанных(); + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения событий подсистемы "Учет оригиналов первичных документов" для формы списка. +// +// Параметры: +// ИмяСобытия - Строка - имя произошедшего события. +// Форма - УправляемаяФорма - форма списка документов. +// Список - ЭлементФормы - основной список формы. +// +Процедура ОбработчикОповещенияФормаСписка(ИмяСобытия, Форма, Список) Экспорт + + Если ИмяСобытия = "ДобавлениеУдалениеСостоянияОригиналаПервичногоДокумента" Тогда + Форма.ОтключитьОбработчикОжидания("Подключаемый_ОбновитьКомандыСостоянияОригинала"); + Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбновитьКомандыСостоянияОригинала", 0.2, Истина); + Форма.ОбновитьОтображениеДанных(); + ИначеЕсли ИмяСобытия = "ИзменениеСостоянияОригиналаПервичногоДокумента" Тогда + Список.Обновить(); + КонецЕсли; + +КонецПроцедуры + +// Обработчик события "Выбор" списка. +// +// Параметры: +// ИмяПоля - Строка - наименование выбранного поля. +// Форма - УправляемаяФорма - форма списка документов. +// Список - ЭлементФормы - основной список формы. +// СтандартнаяОбработка - Булево - Истина, если в форме используется стандартная обработка события "Выбор" +// +Процедура СписокВыбор(ИмяПоля, Форма, Список, СтандартнаяОбработка) Экспорт + + Если ИмяПоля = "СостояниеОригиналаПервичногоДокумента" Или ИмяПоля = "СостояниеОригиналПолучен" Тогда + СтандартнаяОбработка = Ложь; + Если Не УчетОригиналовПервичныхДокументовВызовСервера.ПраваНаИзменениеСостояния() Тогда + ПоказатьПредупреждение(, НСтр("ru = 'У пользователя недостаточно прав на изменение состояния оригинала первичного документа'")); + Возврат; + КонецЕсли; + Если УчетОригиналовПервичныхДокументовВызовСервера.ЭтоОбъектУчета(Список.ТекущиеДанные.Ссылка) Тогда + Если ИмяПоля = "СостояниеОригиналаПервичногоДокумента" Тогда + ОткрытьМенюВыбораСостояния(Форма, Список); + ИначеЕсли ИмяПоля = "СостояниеОригиналПолучен" Тогда + УстановитьСостояниеОригинала("УстановитьОригиналПолучен", Форма, Список); + КонецЕсли; + Иначе + ПоказатьПредупреждение(, НСтр("ru = 'Для данного документа учет оригиналов не ведется.'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Процедура обрабатывает действия по учету оригиналов после сканирования штрихкода документа. +// +// Параметры: +// Штрихкод - Строка - отсканированный штрихкод документа. +// ИмяСобытия - Строка - имя события формы. +// +Процедура ОбработатьШтрихкод(Штрихкод, ИмяСобытия) Экспорт + + Если ИмяСобытия = "ScanData" Тогда + Состояние(НСтр("ru = 'Выполняется установка состояния оригинала по штрихкоду...'")); + УчетОригиналовПервичныхДокументовВызовСервера.ОбработатьШтрихкод(Штрихкод[0]); + КонецЕсли; + +КонецПроцедуры + +// Процедура показывает пользователю оповещение об изменении состояний оригинала документа. +// +// Параметры: +// КоличествоОбработанных - Число - количество успешно обработанных документов. +// ДокументСсылка - ДокументСсылка - ссылка на документ для обработки нажатия на оповещение пользователя +// в случае единичной установки состояния, необязательный параметр. +// ИмяСостояния - Строка - устанавливаемое состояние. +// +Процедура ОповеститьПользователяОбУстановкеСостояний(КоличествоОбработанных, ДокументСсылка = Неопределено, ИмяСостояния = Неопределено) Экспорт + + Если КоличествоОбработанных > 1 Тогда + ТекстСообщения = НСтр("ru='Для всех выделенных в списке документов установлено состояние оригинала ""%ИмяСостояния%""'"); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ИмяСостояния%", ИмяСостояния); + + ТекстЗаголовка = НСтр("ru='Состояние оригинала ""%ИмяСостояния%"" установлено'"); + ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%ИмяСостояния%", ИмяСостояния); + + ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32,СтатусОповещенияПользователя.Важное); + Иначе + ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьНажатиеНаОповещение",ЭтотОбъект,ДокументСсылка); + ПоказатьОповещениеПользователя(НСтр("ru = 'Изменение состояния оригинала:'"),ОписаниеОповещения,ДокументСсылка,БиблиотекаКартинок.Информация32,СтатусОповещенияПользователя.Важное); + КонецЕсли; + +КонецПроцедуры + +// Открывает форму списка справочника "СостоянияОригиналовПервичныхДокументов". +Процедура ОткрытьФормуНастройкиСостояний() Экспорт + + ОткрытьФорму("Справочник.СостоянияОригиналовПервичныхДокументов.ФормаСписка"); + +КонецПроцедуры + +// Вызывается для записи состояний оригиналов печатных форм в регистр, после печати формы. +// +// Параметры: +// ОбъектыПечати - СписокЗначений - список ссылок на объекты печати. +// СписокПечати - СписокЗначений - список с именами макетов и представлениями печатных форм. +// +Процедура ЗаписатьСостоянияОригиналовПослеПечати(ОбъектыПечати, СписокПечати) Экспорт + + УчетОригиналовПервичныхДокументовВызовСервера.ЗаписатьСостоянияОригиналовПослеПечати(ОбъектыПечати,СписокПечати); + + Оповестить("ИзменениеСостоянияОригиналаПервичногоДокумента"); + + Если ОбъектыПечати.Количество() > 1 Тогда + ОповеститьПользователяОбУстановкеСостояний(ОбъектыПечати.Количество(),,ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана")); + Иначе + ОповеститьПользователяОбУстановкеСостояний(1,ОбъектыПечати[0].Значение,ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана")); + КонецЕсли; + +КонецПроцедуры + +// Открывает форму уточнения состояний печатных форм документа. +// +// Параметры: +// ДокументСсылка - СсылкаДокумент - ссылка на документ,для которого необходимо получить ключ записи общего состояния. +// +Процедура ОткрытьФормуИзмененияСостоянийПечатныхФорм(ДокументСсылка) Экспорт + + КлючЗаписиРегистра = УчетОригиналовПервичныхДокументовВызовСервера.КлючЗаписиОбщегоСостояния(ДокументСсылка); + + ПередаваемыеПараметры = Новый Структура; + + Если КлючЗаписиРегистра = Неопределено Тогда + ПередаваемыеПараметры.Вставить("Ссылка",ДокументСсылка); + ОткрытьФорму("РегистрСведений.СостоянияОригиналовПервичныхДокументов.Форма.ИзменениеСостоянийОригиналовПервичныхДокументов",ПередаваемыеПараметры); + Иначе + ПередаваемыеПараметры.Вставить("Ключ", КлючЗаписиРегистра); + ОткрытьФорму("РегистрСведений.СостоянияОригиналовПервичныхДокументов.Форма.ИзменениеСостоянийОригиналовПервичныхДокументов",ПередаваемыеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Вызывается при открытии журнала оригиналов первичных документов в случае использования подключаемого оборудования. +// Позволяет определить собственный процесс подключения подключаемого оборудования к журналу +// +// Параметры: +// Форма - УправляемаяФорма - форма списка документа. +// +Процедура ПриПодключенииСканераШтрихкода(Форма) Экспорт + + УчетОригиналовПервичныхДокументовКлиентПереопределяемый.ПриПодключенииСканераШтрихкода(Форма); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Формирует надпись для вывода информации о текущем состоянии на форму документа. +// +// Параметры: +// Форма - УправляемаяФорма - форма списка документа. +// +Процедура СформироватьНадписьТекущегоСостоянияОригинала(Форма) + + Если ЗначениеЗаполнено(Форма.Объект.Ссылка) Тогда + ТекущиеСостояниеОригинала = УчетОригиналовПервичныхДокументовВызовСервера.СведенияОСостоянииОригиналаПоСсылке(Форма.Объект.Ссылка); + Если ПустаяСтрока(ТекущиеСостояниеОригинала) Тогда + ТекущиеСостояниеОригинала=НСтр("ru='<Состояние оригинала неизвестно>'"); + Форма.Элементы.ДекорацияСостояниеОригинала.ЦветТекста = WebЦвета.Серебряный; + Иначе + ТекущиеСостояниеОригинала = ТекущиеСостояниеОригинала.СостояниеОригиналаПервичногоДокумента; + Форма.Элементы.ДекорацияСостояниеОригинала.ЦветТекста = Новый Цвет(); + КонецЕсли; + Иначе + Форма.Элементы.ДекорацияСостояниеОригинала.ЦветТекста = WebЦвета.Серебряный; + КонецЕсли; + + Форма.Элементы.ДекорацияСостояниеОригинала.Заголовок = ТекущиеСостояниеОригинала; + +КонецПроцедуры + +// Обработчик оповещения, вызванного после завершения работы процедуры УстановитьСостояниеОригинала(...). +Процедура УстановитьСостояниеОригиналаЗавершение(Ответ, ДополнительныеПараметры) Экспорт + + Если Ответ = КодВозвратаДиалога.Да Тогда + Список = ДополнительныеПараметры.Список; + ИмяСостояния = ДополнительныеПараметры.ИмяСостояния; + + Если Список.ВыделенныеСтроки.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Не выделено ни одного документа, для которого можно установить выбранное состояние'")); + Возврат; + Иначе + МассивСтрок = Новый Массив; + Для Каждого СтрокаСписка Из Список.ВыделенныеСтроки Цикл + ДанныеСтроки = Список.ДанныеСтроки(СтрокаСписка); + МассивСтрок.Добавить(ДанныеСтроки); + КонецЦикла; + КонецЕсли; + + ОбъектыЗаписи = УчетОригиналовПервичныхДокументовВызовСервера.ВозможностьЗаписиОбъектов(МассивСтрок); + + Если Не ТипЗнч(ОбъектыЗаписи)= Тип("Массив") Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Для выполнения команды необходимо предварительно провести все выделенные документы.'")); + Возврат; + Иначе + УчетОригиналовПервичныхДокументовВызовСервера.УстановитьНовоеСостояниеОригинала(ОбъектыЗаписи,ИмяСостояния); + + Если ОбъектыЗаписи.Количество() = 1 Тогда + ОповеститьПользователяОбУстановкеСостояний(1,ОбъектыЗаписи[0].Ссылка); + Иначе + ОповеститьПользователяОбУстановкеСостояний(ОбъектыЗаписи.Количество(),,ИмяСостояния); + КонецЕсли; + + Оповестить("ИзменениеСостоянияОригиналаПервичногоДокумента"); + КонецЕсли; + + Иначе + Возврат; + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения, вызванного после завершения работы процедуры ОткрытьМенюВыбораСостояния(...). +Процедура ОткрытьМенюВыбораСостоянияЗавершение(ВыбранноеСостояниеИзСписка, ДополнительныеПараметры) Экспорт + + Если Не ВыбранноеСостояниеИзСписка = Неопределено Тогда + Если ТипЗнч(ДополнительныеПараметры)= Тип("Массив")Тогда + Если ВыбранноеСостояниеИзСписка.Значение = НСтр("ru = 'Уточнить по печатным формам...'") Тогда + ОткрытьФормуИзмененияСостоянийПечатныхФорм(ДополнительныеПараметры[0].Ссылка); + Иначе + УчетОригиналовПервичныхДокументовВызовСервера.УстановитьНовоеСостояниеОригинала(ДополнительныеПараметры,ВыбранноеСостояниеИзСписка.Значение); + ОповеститьПользователяОбУстановкеСостояний(1,ДополнительныеПараметры[0].Ссылка,ВыбранноеСостояниеИзСписка.Значение); + Оповестить("ИзменениеСостоянияОригиналаПервичногоДокумента") + КонецЕсли; + Иначе + Если ВыбранноеСостояниеИзСписка.Значение = НСтр("ru = 'Уточнить по печатным формам...'") Тогда + ОткрытьФормуИзмененияСостоянийПечатныхФорм(ДополнительныеПараметры.Ссылка); + Иначе + УчетОригиналовПервичныхДокументовВызовСервера.УстановитьНовоеСостояниеОригинала(ДополнительныеПараметры.Ссылка,ВыбранноеСостояниеИзСписка.Значение); + ОповеститьПользователяОбУстановкеСостояний(1,ДополнительныеПараметры.Ссылка,ВыбранноеСостояниеИзСписка.Значение); + Оповестить("ИзменениеСостоянияОригиналаПервичногоДокумента") + КонецЕсли; + КонецЕсли; + Иначе + Возврат; + + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения, вызванного после завершения работы процедуры ОповеститьПользователяОбУстановкеСостояний(...). +Процедура ОбработатьНажатиеНаОповещение(ДополнительныеПараметры) Экспорт + + ПоказатьЗначение(,ДополнительныеПараметры); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовКлиент/УчетОригиналовПервичныхДокументовКлиент.mdo b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовКлиент/УчетОригиналовПервичныхДокументовКлиент.mdo new file mode 100644 index 000000000..a7c450979 --- /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..dc15902b3 --- /dev/null +++ b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовКлиентПереопределяемый/Module.bsl @@ -0,0 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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..a7187b564 --- /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..fd206108c --- /dev/null +++ b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовПереопределяемый/Module.bsl @@ -0,0 +1,22 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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..291d545ae --- /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 88b54aba6..ca23eafcf 100644 --- a/SSL/src/CommonModules/ФайловаяСистема/Module.bsl +++ b/SSL/src/CommonModules/ФайловаяСистема/Module.bsl @@ -88,7 +88,7 @@ // Конструктор параметров для ФайловаяСистема.ЗапуститьПрограмму. // // Возвращаемое значение: -// Структура - где: +// Структура: // * ТекущийКаталог - Строка - задает текущий каталог запускаемого приложения. // * ДождатьсяЗавершения - Булево - Ложь - дожидаться завершения запущенного приложения // перед продолжением работы. @@ -96,9 +96,11 @@ // если не указан ДождатьсяЗавершения - игнорируется. // * ПолучитьПотокОшибок - Булево - Ложь - ошибки, направленные в поток stderr, // если не указан ДождатьсяЗавершения - игнорируется. -// * КодировкаПотоков - КодировкаТекста, Строка - Кодировка, используемая для чтения stdout и stderr. +// * КодировкаПотоков - КодировкаТекста +// - Строка - кодировка, используемая для чтения stdout и stderr. // По умолчанию используется для Windows OEM (cp437), остальные КодировкаТекста.Системная. -// * КодировкаИсполнения - Строка, Число - кодировка, устанавливаемая в Windows с помощью команды chcp, +// * КодировкаИсполнения - Строка +// - Число - кодировка, устанавливаемая в Windows с помощью команды chcp, // возможные значения: "OEM", "CP866", "UTF8" или номер кодовой страницы. // В Linux устанавливается переменной окружения "LANGUAGE" для конкретной команды, // возможные значения можно определить выполнив команду "locale -a", например "ru_RU.UTF-8". @@ -137,7 +139,7 @@ // ПараметрыЗапускаПрограммы - - см. ФайловаяСистема.ПараметрыЗапускаПрограммы // // Возвращаемое значение: -// Структура - где: +// Структура: // * КодВозврата - Число - код возврата программы; // * ПотокВывода - Строка - результат работы программы, направленный в поток stdout; // * ПотокОшибок - Строка - ошибки исполнения программы, направленные в поток stderr. diff --git a/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl b/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl index 6a3c74ad1..866a4f36c 100644 --- a/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl @@ -20,7 +20,7 @@ // ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после // загрузки файла со следующими параметрами: // * ПомещенныйФайл - Неопределено - пользователь отказался от выбора. -// - Структура - пользователь выбрал файл. +// - Структура - пользователь выбрал файл: // ** Хранение - Строка - расположение данных во временном хранилище. // ** Имя - Строка - в тонком клиенте и в веб-клиенте с установленным // расширением работы с файлами - локальный путь, по которому @@ -77,7 +77,7 @@ // ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после // загрузки файлов со следующими параметрами: // * ПомещенныеФайлы - Неопределено - пользователь отказался от выбора. -// - Массив - Содержит объекты типа Структура. Пользователь выбрал файл. +// - Массив - содержит объекты типа Структура. Пользователь выбрал файл: // ** Хранение - Строка - расположение данных во временном хранилище. // ** Имя - Строка - в тонком клиенте и в веб-клиенте с установленным // расширением работы с файлами - локальный путь, по которому @@ -143,10 +143,11 @@ // Получает файл и сохраняет его в локальную файловую систему пользователя. // // Параметры: -// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - содержит описание процедуры, которая +// ОбработчикЗавершения - ОписаниеОповещения +// - Неопределено - содержит описание процедуры, которая // будет вызвана после завершения со следующими параметрами: // * ПолученныеФайлы - Неопределено - файлы не были получены. -// - Массив - Содержит объекты типа ОписаниеПереданногоФайла. Сохраненные файлы. +// - Массив - содержит объекты типа ОписаниеПереданногоФайла. Сохраненные файлы. // * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. // АдресВоВременномХранилище - Строка - расположение данных во временном хранилище. // ИмяФайла - Строка - полный путь, по которому должен быть сохранен получаемый файл или имя файла @@ -181,7 +182,8 @@ // исключение. // // Параметры: -// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - содержит описание процедуры, которая +// ОбработчикЗавершения - ОписаниеОповещения +// - Неопределено - содержит описание процедуры, которая // будет вызвана после завершения со следующими параметрами: // * ПолученныеФайлы - Неопределено - файлы не были получены. // - Массив - содержит объекты типа ОписаниеПереданногоФайла. Сохраненные файлы. @@ -215,7 +217,7 @@ // Для использования в ФайловаяСистемаКлиент.ЗагрузитьФайл и ФайловаяСистемаКлиент.ЗагрузитьФайлы // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, из // которой выполняется размещение файла. Если параметр не заполнен, // необходимо вызывать метод глобального контекста УдалитьИзВременногоХранилища @@ -230,12 +232,14 @@ // * ТекстПредложения - Строка - текст предложения об установке расширения. Если параметр // принимает значение "", будет выведен стандартный текст предложения. // Значение по умолчанию - "". -// * ДействиеПередНачаломПомещенияФайлов - ОписаниеОповещения, Неопределено - содержит описание процедуры, +// * ДействиеПередНачаломПомещенияФайлов - ОписаниеОповещения +// - Неопределено - содержит описание процедуры, // которая будет вызвана непосредственно перед началом помещения файла // во временное хранилище.Если параметр принимает значение Неопределено, // перед помещением файла никакая процедура вызываться не будет. Значение // по умолчанию - Неопределено. Параметры вызываемой процедуры: -// ** ПомещаемыеФайлы - СсылкаНаФайл, Массив - ссылка на файл, готовый к помещению во временное хранилище. +// ** ПомещаемыеФайлы - СсылкаНаФайл +// - Массив - ссылка на файл, готовый к помещению во временное хранилище. // Если загружалось несколько файлов, содержит массив ссылок. // ** ОтказОтПомещенияФайла - Булево - признак отказа от дальнейшего помещения файла. Если в теле процедуры-обработчика // установить данному параметру значение Истина, то помещение файла будет отменено. @@ -260,7 +264,7 @@ // Для использования в ФайловаяСистемаКлиент.СохранитьФайл. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Интерактивно - Булево - указывает использование интерактивного режима, при котором // пользователю показывается диалог выбора файлов. Значение по // умолчанию - Истина. @@ -287,7 +291,7 @@ // Для использования в ФайловаяСистемаКлиент.СохранитьФайлы // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Интерактивно - Булево - указывает использование интерактивного режима, при котором // пользователю показывается диалог выбора файлов. Значение по // умолчанию - Истина. @@ -313,7 +317,7 @@ // Для использования в ФайловаяСистемаКлиент.ОткрытьФайл // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // *Кодировка - Строка - кодировка текстового файла. Если параметр не задан, формат текста // будет определен автоматически. Список кодировок см. в синтакс-помощнике в // описании метода Записать текстового документа. Значение по умолчанию - "". @@ -342,7 +346,8 @@ // Параметры: // РасположениеФайла - Строка - полный путь к файлу в файловой системе или расположение данных файла // во временном хранилище. -// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - описание процедуры, принимающей результат работы +// ОбработчикЗавершения - ОписаниеОповещения +// - Неопределено - описание процедуры, принимающей результат работы // метода, с параметрами: // * ФайлИзменен - Булево - изменен файл на диске или двоичные данные во временном хранилище. // * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта @@ -507,8 +512,8 @@ // Конструктор параметров для ФайловаяСистемаКлиент.ЗапуститьПрограмму. // // Возвращаемое значение: -// Структура - где: -// * ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. +// Структура: +// * ТекущийКаталог - Строка - задает текущий каталог запускаемого приложения. // * Оповещение - ОписаниеОповещения - оповещение о результате завершения запущенного приложения, // если оповещение не задано в случае ошибки будет показано предупреждение. Параметры обработчика завершения: // - Результат - Структура - результат работы программы: @@ -525,7 +530,8 @@ // если не указан ДождатьсяЗавершения - игнорируется. // * ПолучитьПотокОшибок - Булево - Ложь - ошибки, направленные в поток stderr, // если не указан ДождатьсяЗавершения - игнорируется. -// * КодировкаИсполнения - Строка, Число - кодировка, устанавливаемая в Windows с помощью команды chcp, +// * КодировкаИсполнения - Строка +// - Число - кодировка, устанавливаемая в Windows с помощью команды chcp, // возможные значения: "OEM", "CP866", "UTF8" или номер кодовой страницы. // В Linux устанавливается переменной окружения "LANGUAGE" для конкретной команды, // возможные значения можно определить выполнив команду "locale -a", например "ru_RU.UTF-8". @@ -628,11 +634,10 @@ Контекст.Вставить("ИмяФайлаПотокаОшибок", ИмяФайлаПотокаОшибок); Контекст.Вставить("ВыполнитьСНаивысшимиПравами", ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами); - Оповещение = Новый ОписаниеОповещения( - "ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); - ТекстПредложения = - НСтр("ru = 'Для создания временного каталога необходимо установить расширение для работы с 1С:Предприятием.'"); - ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + Оповещение = Новый ОписаниеОповещения("ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами", + ФайловаяСистемаСлужебныйКлиент, Контекст); + ПодключитьРасширениеДляРаботыСФайлами(Оповещение, + НСтр("ru = 'Для создания временной папки необходимо установить расширение для работы с 1С:Предприятием.'"), Ложь); КонецПроцедуры @@ -665,10 +670,16 @@ КонецПроцедуры // Показывает диалог выбора файла. +// При работе в веб-клиенте пользователю будет показан диалог установки расширения +// для работы с файлами, если требуется. // // Параметры: // ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после -// закрытия диалога выбора со следующими параметрами: +// закрытия диалога выбора с параметрами: +// * Результат - Массив из Строка - выбранные имена файлов. +// - Строка - пустая строка, если пользователь отказался от установки расширения. +// - Неопределено - если пользователь отказался от выбора файла. +// * ДополнительныеПараметры - Структура - дополнительные параметры оповещения. // Диалог - ДиалогВыбораФайла - свойства см. в синтакс-помощнике. // Процедура ПоказатьДиалогВыбора(ОбработчикЗавершения, Диалог) Экспорт @@ -699,9 +710,8 @@ Оповещение = Новый ОписаниеОповещения("СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); - - ТекстПредложения = НСтр("ru = 'Для создания временного каталога необходимо установить расширение для работы с 1С:Предприятием.'"); - ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + ПодключитьРасширениеДляРаботыСФайлами(Оповещение, + НСтр("ru = 'Для создания временной папки необходимо установить расширение для работы с 1С:Предприятием.'"), Ложь); КонецПроцедуры @@ -770,7 +780,7 @@ // РежимДиалога - РежимДиалогаВыбораФайла - режим работы конструируемого диалога выбора файлов. // // Возвращаемое значение: -// Структура - См ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла и ФайловаяСистемаКлиент.ПараметрыСохраненияФайла +// см. ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла // Функция КонтекстОперации(РежимДиалога) @@ -812,10 +822,10 @@ // Получает путь для сохранения файла в каталоге временных файлов. // // Параметры: -// ИмяФайла - Строка - Имя файла с расширением или расширение без точки. +// ИмяФайла - Строка - имя файла с расширением или расширение без точки. // // Возвращаемое значение: -// Строка - Путь для сохранения файла. +// Строка - путь для сохранения файла. // Функция ПолноеИмяВременногоФайла(Знач ИмяФайла) @@ -840,7 +850,7 @@ // Сокращает длину имени файла, исходя из правила, что длина полного пути файла должна быть не больше 260 символов. // // Параметры: -// ПолноеИмяФайла - Строка - Полное имя файла с путем до него и с расширением. +// ПолноеИмяФайла - Строка - полное имя файла с путем до него и с расширением. // Процедура СократитьПолноеИмяФайлаДоДопустимойДлиныNTFS(ПолноеИмяФайла) diff --git a/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl index c2ffeaec4..7b599f49a 100644 --- a/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl @@ -202,7 +202,7 @@ // Параметры: // ПутьКФайлу - Строка - полный путь к файлу на диске, который требуется открыть. // Оповещение - ОписаниеОповещения - оповещение о результате открытия. -// если оповещение не задано, в случае ошибки будет показано предупреждение. +// если оповещение не задано, в случае ошибки будет показано предупреждение: // * ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. // * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. // ДляРедактирования - Булево - Истина, если файл открывается для редактирования, иначе Ложь. @@ -263,7 +263,7 @@ Иначе ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден файл, который требуется открыть: + НСтр("ru = 'Не существует открываемый файл: |%1'"), ФайлИнфо.ПолноеИмя); ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); @@ -315,7 +315,7 @@ Иначе ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден файл, который требуется открыть: + НСтр("ru = 'Не существует открываемый файл: |%1'"), ФайлИнфо.ПолноеИмя); @@ -487,7 +487,7 @@ "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); ФайлИнфо.НачатьПроверкуСуществования(Оповещение); Иначе - ОписаниеОшибки = НСтр("ru = 'Не установлено расширение для работы с 1С:Предприятием, открытие папки недоступно.'"); + ОписаниеОшибки = НСтр("ru = 'Для того чтобы открыть папку, необходимо установить расширение для работы с 1С:Предприятием.'"); ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст); КонецЕсли; @@ -505,7 +505,7 @@ ФайлИнфо.НачатьПроверкуЭтоФайл(Оповещение); Иначе ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдена папка, которую требуется открыть в проводнике: + НСтр("ru = 'Каталог, который требуется открыть в проводнике, не существует: |""%1""'"), ФайлИнфо.ПолноеИмя); ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст); @@ -626,7 +626,7 @@ // Строка - Строка - переданная ссылка. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоВебСсылка(Строка) Экспорт @@ -641,7 +641,7 @@ // Строка - Строка - переданная ссылка. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоСсылкаНаСправку(Строка) Экспорт @@ -655,7 +655,7 @@ // Строка - Строка - переданная ссылка. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоДопустимаяСсылка(Строка) Экспорт @@ -718,11 +718,9 @@ ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось запустить программу |%1 - |по причине: - |Не существует каталог, указанный как ТекущийКаталог - |%2'"), - СтрокаКоманды, - ТекущийКаталог); + |т.к. папка не существует: + |%2'"), + СтрокаКоманды, ТекущийКаталог); ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); КонецЕсли; @@ -740,10 +738,9 @@ ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось запустить программу |%1 - |по причине: - |ТекущийКаталог не является каталогом %2'"), - СтрокаКоманды, - ТекущийКаталог); + |т.к. указанный объект не является папкой: + |%2'"), + СтрокаКоманды, ТекущийКаталог); ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); КонецЕсли; @@ -1132,25 +1129,20 @@ // Продолжение процедуры ФайловаяСистемаКлиент.СоздатьВременныйКаталог. // // Параметры: -// РасширениеПодключено - Булево - -// Контекст - Структура -: -// * Оповещение - ОписаниеОповещения - -// * Расширение - Строка - +// РасширениеПодключено - Булево +// Контекст - Структура: +// * Оповещение - ОписаниеОповещения +// * Расширение - Строка // Процедура СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт Если РасширениеПодключено Тогда - Оповещение = Новый ОписаниеОповещения( "СоздатьВременныйКаталогПослеПолученияВременногоКаталога", ЭтотОбъект, Контекст, "СоздатьВременныйКаталогПриОбработкеОшибки", ЭтотОбъект); - НачатьПолучениеКаталогаВременныхФайлов(Оповещение); - Иначе - ОписаниеОшибки = - НСтр("ru = 'Не установлено расширение для работы с 1С:Предприятием, создание временного каталога невозможно.'"); - СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст); + СоздатьВременныйКаталогОповеститьОбОшибке(НСтр("ru = 'Не удалось установить расширение для работы с 1С:Предприятием.'"), Контекст); КонецЕсли; КонецПроцедуры @@ -1158,10 +1150,10 @@ // Продолжение процедуры ФайловаяСистемаКлиент.СоздатьВременныйКаталог. // // Параметры: -// ИмяКаталогаВременныхФайлов - Строка - -// Контекст - Структура -: -// * Оповещение - ОписаниеОповещения - -// * Расширение - Строка - +// ИмяКаталогаВременныхФайлов - Строка +// Контекст - Структура: +// * Оповещение - ОписаниеОповещения +// * Расширение - Строка // Процедура СоздатьВременныйКаталогПослеПолученияВременногоКаталога(ИмяКаталогаВременныхФайлов, Контекст) Экспорт diff --git a/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/ФайловаяСистемаСлужебныйКлиент.mdo b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/ФайловаяСистемаСлужебныйКлиент.mdo index 7eadb07f3..31225b5ef 100644 --- a/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/ФайловаяСистемаСлужебныйКлиент.mdo +++ b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/ФайловаяСистемаСлужебныйКлиент.mdo @@ -5,6 +5,7 @@ ru Файловая система служебный клиент + АПК:1348 Реализация стандартных функций модуля ФайловаяСистемаКлиент true true diff --git a/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl index 60cca8fed..22b067a2a 100644 --- a/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl @@ -16,7 +16,7 @@ // ФамилияИмяОтчество - Строка - полное имя в виде "Фамилия Имя Отчество". // // Возвращаемое значение: -// Структура - части полного имени: +// Структура: // * Фамилия - Строка - фамилия; // * Имя - Строка - имя; // * Отчество - Строка - отчество. @@ -69,7 +69,7 @@ // // Параметры: // ФамилияИмяОтчество - Строка - полное имя в виде "Фамилия Имя Отчество"; -// - Структура - части полного имени: +// - Структура: // * Фамилия - Строка - фамилия; // * Имя - Строка - имя; // * Отчество - Строка - отчество. @@ -99,7 +99,7 @@ Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2.", Фамилия, Лев(Имя, 1)); КонецЕсли; - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2.%3.", Фамилия, Лев(Имя, 1), Лев(Отчество, 1)); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2. %3.", Фамилия, Лев(Имя, 1), Лев(Отчество, 1)); КонецФункции diff --git a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl index 50fbc4223..d03b1dc60 100644 --- a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl @@ -163,7 +163,7 @@ // Записывает статистику по объектам конфигурации. // // Параметры: -// СоответствиеИменМетаданных - Структура - структура со свойствами: +// СоответствиеИменМетаданных - Структура: // * Ключ - Строка - имя объекта метаданных. // * Значение - Строка - текст запроса выборки данных, обязательно должно // присутствовать поле Количество. Если Количество равно нулю, diff --git a/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl index 1a87689f7..d5944b6e1 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl @@ -23,8 +23,8 @@ // Задает настройки, применяемые как умолчания для объектов подсистемы. // // Параметры: -// Настройки - Структура - Коллекция настроек подсистемы. Реквизиты: -// * ВключитьОповещение - Булево - Умолчание для оповещений пользователя: +// Настройки - Структура - коллекция настроек подсистемы. Реквизиты: +// * ВключитьОповещение - Булево - умолчание для оповещений пользователя: // Истина - По умолчанию оповещаем администратора системы, например, если нет подсистемы "Текущие дела". // Ложь - По умолчанию не оповещаем администратора системы. // Значение по умолчанию: зависит от наличия подсистемы "Текущие дела". diff --git a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl index 800e7cb96..7abcaa50c 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl @@ -39,7 +39,7 @@ // Устанавливает значение параметра центра мониторинга. // // Параметры: -// Параметр - Строка - Ключ параметра центра мониторинга, возможные значения ключа +// Параметр - Строка - ключ параметра центра мониторинга, возможные значения ключа // см. в процедуре ПолучитьПараметрыПоУмолчанию в модуле ЦентрМониторингаСлужебный. // Значение - Произвольный тип - значение параметра центра мониторинга. // @@ -86,7 +86,8 @@ // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. // Параметры: -// Зависимости - См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий.Настройки +// Зависимости - см. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий.Настройки +// Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.СборИОтправкаСтатистики; @@ -99,7 +100,8 @@ // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. // Параметры: -// Обработчики - См. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления +// Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления +// Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); @@ -291,7 +293,7 @@ // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. // Параметры: -// ТекущиеДела - См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел.Обработчики +// ТекущиеДела - см. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел.Обработчики // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт @@ -1386,18 +1388,18 @@ КонецЦикла; Если Ответ.Заголовки["Content-Type"] <> Неопределено Тогда - ContentType = Ответ.Заголовки["Content-Type"]; - Если СтрНайти(ContentType, "text/plain") > 0 Тогда + ТипСодержимого = Ответ.Заголовки["Content-Type"]; + Если СтрНайти(ТипСодержимого, "text/plain") > 0 Тогда Тело = Ответ.ПолучитьТелоКакСтроку(); Результат.Вставить("Тело", Тело); - ИначеЕсли СтрНайти(ContentType, "text/html") > 0 Тогда + ИначеЕсли СтрНайти(ТипСодержимого, "text/html") > 0 Тогда Тело = Ответ.ПолучитьТелоКакСтроку(); Результат.Вставить("Тело", Тело); - ИначеЕсли СтрНайти(ContentType, "application/json") Тогда + ИначеЕсли СтрНайти(ТипСодержимого, "application/json") Тогда Тело = Ответ.ПолучитьТелоКакСтроку(); Результат.Вставить("Тело", Тело); Иначе - Тело = "Не известный ContentType = " + ContentType + ". См. <Функция HTTPОтветВСтруктуру(Ответ) Экспорт>"; + Тело = "Не известный ContentType = " + ТипСодержимого + ". См. <Функция HTTPОтветВСтруктуру(Ответ) Экспорт>"; Результат.Вставить("Тело", Тело); КонецЕсли; КонецЕсли; @@ -2404,7 +2406,8 @@ Иначе КаталогНастроек.Путь = ""; КаталогНастроек.Существует = Ложь; - КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Не найден файл конфигурации настроек в каталоге'", ОбщегоНазначения.КодОсновногоЯзыка()) + " " + ПутьКаталога; + КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Файл конфигурации настроек в каталоге не существует'", + ОбщегоНазначения.КодОсновногоЯзыка()) + " " + ПутьКаталога; ПоискКаталога = Ложь; КонецЕсли; @@ -2689,8 +2692,8 @@ КонецЦикла; РолиПрофилей.Колонки.Удалить("Профиль"); - RolesOfProfiles = СформироватьJSONСтруктуру("RolesOfProfiles", РолиПрофилей, ДополнительныеПараметры); - ДанныеОбИспользованииРолей.Вставить("RolesOfProfiles", RolesOfProfiles["RolesOfProfiles"]); + РолиПрофилейСтруктура = СформироватьJSONСтруктуру("RolesOfProfiles", РолиПрофилей, ДополнительныеПараметры); + ДанныеОбИспользованииРолей.Вставить("RolesOfProfiles", РолиПрофилейСтруктура["RolesOfProfiles"]); // Формирование структуры: статистика по использованию профилей. КолонкиИндекса = Новый Соответствие; @@ -2711,8 +2714,8 @@ ДанныеПрофилей.Колонки.ИдентификаторПоставляемыхДанныхСтрока.Имя = "ИдентификаторПоставляемыхДанных"; ДанныеПрофилей.Колонки.Удалить("Профиль"); - Profiles = СформироватьJSONСтруктуру("Profiles", ДанныеПрофилей, ДополнительныеПараметры); - ДанныеОбИспользованииРолей.Вставить("Profiles", Profiles["Profiles"]); + Профили = СформироватьJSONСтруктуру("Profiles", ДанныеПрофилей, ДополнительныеПараметры); + ДанныеОбИспользованииРолей.Вставить("Profiles", Профили["Profiles"]); Возврат ДанныеОбИспользованииРолей; КонецФункции @@ -3669,7 +3672,7 @@ "СтатистикаКлиента.ИнформацияОСистеме.СвободноНаДиске." + БукваДиска, "", РезультатЗапроса.Значение, Истина); Исключение РезультатЗапроса.Успешно = Ложь; - РезультатЗапроса.ОписаниеОшибки = ОписаниеОшибки(); + РезультатЗапроса.ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; КонецЕсли; Иначе @@ -3737,8 +3740,8 @@ АдресРесурса = АдресРесурса + "/"; КонецЕсли; - GUID = Строка(Параметры.ИдентификаторИнформационнойБазы); - АдресРесурса = АдресРесурса + "IsDumpNeeded" + "/" + GUID + "/" + ВариантДампа + "/json"; + ГУИД = Строка(Параметры.ИдентификаторИнформационнойБазы); + АдресРесурса = АдресРесурса + "IsDumpNeeded" + "/" + ГУИД + "/" + ВариантДампа + "/json"; ПараметрыHTTP = Новый Структура; ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); @@ -3775,8 +3778,8 @@ АдресРесурса = АдресРесурса + "/"; КонецЕсли; - GUID = Строка(Параметры.ИдентификаторИнформационнойБазы); - АдресРесурса = АдресРесурса + "CanLoadDump" + "/" + GUID + "/" + ВариантДампа + "/" + ТипДампа; + ГУИД = Строка(Параметры.ИдентификаторИнформационнойБазы); + АдресРесурса = АдресРесурса + "CanLoadDump" + "/" + ГУИД + "/" + ВариантДампа + "/" + ТипДампа; ПараметрыHTTP = Новый Структура; ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); @@ -3831,17 +3834,17 @@ КонецЕсли; // Отправим дамп через http-сервис. - GUID = Строка(Параметры.ИдентификаторИнформационнойБазы); + ГУИД = Строка(Параметры.ИдентификаторИнформационнойБазы); Хеш = Новый ХешированиеДанных(ХешФункция.CRC32); Хеш.ДобавитьФайл(Данные.ПолноеИмя); - HASH = Формат(Хеш.ХешСумма,"ЧГ=0"); + ХешСуммаДампа = Формат(Хеш.ХешСумма,"ЧГ=0"); АдресРесурса = Параметры.АдресРесурсаДляДампов; Если Прав(АдресРесурса, 1) <> "/" Тогда АдресРесурса = АдресРесурса + "/"; КонецЕсли; - АдресРесурса = АдресРесурса + "LoadDump" + "/" + GUID + "/" + ВариантДампа + "/" + HASH + "/" + ТипДампа; + АдресРесурса = АдресРесурса + "LoadDump" + "/" + ГУИД + "/" + ВариантДампа + "/" + ХешСуммаДампа + "/" + ТипДампа; ПараметрыHTTP = Новый Структура; ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); @@ -3971,7 +3974,7 @@ // Отправляет тестовый пакет в центр мониторинга. // Параметры: // ПараметрыВыполнения - Структура: -// * Итератор - Число. При вызове извне должен быть равен 0. +// * Итератор - Число - при вызове извне должен быть равен 0. // * ОтправкаТестовогоПакета - Булево. // * ПолучениеИдентификатора - Булево. // diff --git a/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl index 038265ad9..4c9526358 100644 --- a/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl @@ -12,24 +12,24 @@ // // Параметры: // Шаблон - СправочникСсылка.ШаблоныСообщений - ссылка на шаблон сообщения. -// Предмет - Произвольный - Объект основание для шаблона сообщений, типы объектов перечислены в +// Предмет - Произвольный - объект основание для шаблона сообщений, типы объектов перечислены в // определяемом типе ПредметШаблонаСообщения. -// УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы, необходим для размещения вложений во +// УникальныйИдентификатор - УникальныйИдентификатор - идентификатор формы, необходим для размещения вложений во // временном хранилище при клиент-серверном вызове. Если вызов // происходит только на сервере, то можно использовать любой идентификатор. -// ДополнительныеПараметры - Структура - Необязательный, список дополнительных параметров, который будет передан в -// параметр Сообщение в процедурах ПриФормированииСообщения при создании сообщения. +// ДополнительныеПараметры - Структура - необязательный, список дополнительных параметров, который будет передан в +// параметр Сообщение в процедурах ПриФормированииСообщения при создании сообщения: // * ПреобразовыватьHTMLДляФорматированногоДокумента - Булево - необязательный, по умолчанию Ложь, определяет // необходимо ли преобразование HTML текста сообщения содержащего картинки в тексте письма из-за // особенностей вывода изображений в форматированном документе. // // Возвращаемое значение: -// Структура - подготовленное сообщение на основание шаблона для отправки. +// Структура - подготовленное сообщение на основание шаблона для отправки: // * Тема - Строка - тема письма // * Текст - Строка - текст письма // * Получатель - СписокЗначений - список получателей письма // * ДополнительныеПараметры - Структура - параметры шаблона сообщения. -// * Вложения - ТаблицаЗначений - список вложений +// * Вложения - ТаблицаЗначений: // ** Представление - Строка - имя файла вложения. // ** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище. // ** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма). @@ -51,16 +51,16 @@ // определяемом типе ПредметШаблонаСообщения. // УникальныйИдентификатор - УникальныйИдентификатор - идентификатор формы, необходим для размещения вложений во // временном хранилище. -// ДополнительныеПараметры - Структура - Необязательный, список дополнительных параметров, который будет передан в -// параметр Сообщение в процедурах ПриФормированииСообщения при создании сообщения. +// ДополнительныеПараметры - Структура - необязательный, список дополнительных параметров, который будет передан в +// параметр Сообщение в процедурах ПриФормированииСообщения при создании сообщения: // * ПреобразовыватьHTMLДляФорматированногоДокумента - Булево - необязательный, по умолчанию Ложь, определяет, // необходимо ли преобразование HTML-текста сообщения, содержащего картинки в тексте письма, из-за // особенностей вывода изображений в форматированном документе. -// * УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - Учетная запись электронной почты, +// * УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись электронной почты, // которая будет использована для отправки письма сформированного по шаблону. // // Возвращаемое значение: -// Структура - результат отправки сообщения. +// Структура - результат отправки сообщения: // * Отправлено - Булево - если Истина, то сообщение было успешно отправлено. // * ОписаниеОшибки - Строка - содержит описание ошибки, если письмо не было отправлено. // @@ -72,8 +72,8 @@ // Заполняет список реквизитов шаблона сообщений на основание макета СКД. // // Параметры: -// Реквизиты - ДеревоЗначений - Заполняемый список реквизитов. -// Макет - Макет - Макет СКД. +// Реквизиты - ДеревоЗначений - заполняемый список реквизитов. +// Макет - Макет - макет СКД. // Процедура СформироватьСписокРеквизитовПоСКД(Реквизиты, Макет) Экспорт ШаблоныСообщенийСлужебный.РеквизитыПоСКД(Реквизиты, Макет); @@ -82,9 +82,9 @@ // Заполняет список реквизитов шаблона сообщений на основании макета СКД. // // Параметры: -// Реквизиты - Соответствие - Список реквизитов. -// Предмет - Произвольный - Ссылка на объект основание для шаблона сообщений. -// ПараметрыШаблона - Структура - Список параметров шаблона, см. функцию ПараметрыШаблона. +// Реквизиты - Соответствие - список реквизитов. +// Предмет - Произвольный - ссылка на объект основание для шаблона сообщений. +// ПараметрыШаблона - см. ПараметрыШаблона. // Процедура ЗаполнитьРеквизитыПоСКД(Реквизиты, Предмет, ПараметрыШаблона) Экспорт ШаблоныСообщенийСлужебный.ЗаполнитьРеквизитыПоСКД(Реквизиты, Предмет, ПараметрыШаблона); @@ -94,7 +94,7 @@ // // Параметры: // Наименование - Строка - наименование шаблона. -// ПараметрыШаблона - Структура - параметры шаблона сообщения. см. ШаблоныСообщений.ОписаниеПараметровШаблона. +// ПараметрыШаблона - см. ШаблоныСообщений.ОписаниеПараметровШаблона. // // Возвращаемое значение: // СправочникСсылка.ШаблоныСообщений - ссылка на созданный шаблон. @@ -119,7 +119,7 @@ // Возвращает описание параметров шаблона. // // Возвращаемое значение: -// Структура - параметры шаблона. +// Структура: // * Наименование - Строка - наименование шаблона сообщений. // * Текст - Строка - текст шаблона письма или сообщения SMS. // * Тема - Строка - текст темы письма. Только для шаблонов электронной почты. @@ -244,10 +244,10 @@ // // Параметры: // ТаблицаПараметров - ТаблицаЗначений - таблица со списком параметров. -// ИмяПараметра - Строка - Имя добавляемого параметра. -// ОписаниеТипа - ОписаниеТипов - Тип параметра. -// ЭтоПредопределенныйПараметр - Булево - Если Истина, то параметр предопределенный. -// ПредставлениеПараметра - Строка - Представление параметра. +// ИмяПараметра - Строка - имя добавляемого параметра. +// ОписаниеТипа - ОписаниеТипов - тип параметра. +// ЭтоПредопределенныйПараметр - Булево - если Истина, то параметр предопределенный. +// ПредставлениеПараметра - Строка - представление параметра. // Процедура ДобавитьПараметрШаблона(ТаблицаПараметров, ИмяПараметра, ОписаниеТипа, ЭтоПредопределенныйПараметр, ПредставлениеПараметра = "") Экспорт @@ -293,11 +293,12 @@ // структура с незаполненными полями шаблона сообщения, заполнив которые, можно создать новый шаблон сообщения. // // Параметры: -// Шаблон - ДанныеФормыСтруктура, СправочникСсылка.ШаблоныСообщений, -// ЛюбаяСсылка - Ссылка на шаблон сообщения или на владельца контекстного шаблона. +// Шаблон - ДанныеФормыСтруктура +// - СправочникСсылка.ШаблоныСообщений +// - ЛюбаяСсылка - ссылка на шаблон сообщения или на владельца контекстного шаблона. // // Возвращаемое значение: -// Структура - Сведения о шаблоне. Подробнее см. ШаблоныСообщенийКлиентСервер.ОписаниеПараметровШаблона. +// см. ШаблоныСообщенийКлиентСервер.ОписаниеПараметровШаблона. // Функция ПараметрыШаблона(Знач Шаблон) Экспорт @@ -349,7 +350,7 @@ // Возвращает соответствие параметров текста сообщения шаблона. // // Параметры: -// ПараметрыШаблона - Структура - Сведения о шаблоне. +// ПараметрыШаблона - Структура - сведения о шаблоне. // // Возвращаемое значение: // Соответствие - соответствие имеющихся в тексте сообщения параметров. @@ -358,6 +359,29 @@ Возврат ШаблоныСообщенийСлужебный.ПараметрыИзТекстаСообщения(ПараметрыШаблона); КонецФункции +// Заполняет общие реквизитов значениями из программы. +// После выполнения процедуры соответствие будет содержать значения: +// ТекущаяДата, ЗаголовокСистемы, АдресБазыВИнтернете, АдресБазыВЛокальнойСети +// ТекущийПользователь +// +// Параметры: +// ОбщиеРеквизиты - соответствие из КлючЗначение: +// * Ключ - Строка - имя общего реквизита +// * Значение - Строка - значение заполненного реквизита. +// +Процедура ЗаполнитьОбщиеРеквизиты(ОбщиеРеквизиты) Экспорт + ШаблоныСообщенийСлужебный.ЗаполнитьОбщиеРеквизиты(ОбщиеРеквизиты); +КонецПроцедуры + +// Возвращает имя узла общих реквизитов. +// +// Возвращаемое значение: +// Строка - имя общего реквизита верхнего уровня. +// +Функция ИмяУзлаОбщихРеквизитов() Экспорт + Возврат НСтр("ru = 'ОбщиеРеквизиты'"); +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -365,10 +389,10 @@ // Определяет, является ли переданная ссылка элементом справочника шаблоны сообщений. // // Параметры: -// ШаблонСсылка - СправочникСсылка.ШаблоныСообщений - Ссылка на элемент справочника шаблоны сообщений. +// ШаблонСсылка - СправочникСсылка.ШаблоныСообщений - ссылка на элемент справочника шаблоны сообщений. // // Возвращаемое значение: -// Булево - Если Истина, то ссылка является элементом справочника шаблоны сообщений. +// Булево - если Истина, то ссылка является элементом справочника шаблоны сообщений. // Функция ЭтоШаблон(ШаблонСсылка) Экспорт Возврат ТипЗнч(ШаблонСсылка) = Тип("СправочникСсылка.ШаблоныСообщений"); @@ -377,7 +401,7 @@ // См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании // // Параметры: -// Объекты - См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании.Объекты +// Объекты - см. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании.Объекты // Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт @@ -403,17 +427,18 @@ // Параметры отправки // // Параметры: -// Шаблон - СправочникСсылка.ШаблоныСообщений - -// Предмет - ОпределяемыйТип.ПредметШаблонаСообщения - -// УникальныйИдентификатор - УникальныйИдентификатор - -// ДополнительныеПараметры - Неопределено, Структура - +// Шаблон - СправочникСсылка.ШаблоныСообщений +// Предмет - ОпределяемыйТип.ПредметШаблонаСообщения +// УникальныйИдентификатор - УникальныйИдентификатор +// ДополнительныеПараметры - Неопределено +// - Структура // // Возвращаемое значение: -// Структура - Описание: -// * ДополнительныеПараметры - Структура - -// * УникальныйИдентификатор - УникальныйИдентификатор - -// * Предмет - ОпределяемыйТип.ПредметШаблонаСообщения - -// * Шаблон - СправочникСсылка.ШаблоныСообщений - +// Структура: +// * ДополнительныеПараметры - Структура +// * УникальныйИдентификатор - УникальныйИдентификатор +// * Предмет - ОпределяемыйТип.ПредметШаблонаСообщения +// * Шаблон - СправочникСсылка.ШаблоныСообщений // Функция СформироватьПараметрыОтправки(Шаблон, Предмет, УникальныйИдентификатор, ДополнительныеПараметры = Неопределено) Экспорт @@ -442,5 +467,26 @@ КонецФункции +// Параметры: +// Вложения - ТаблицаЗначений +// Возвращаемое значение: +// СтрокаТаблицыЗначений: +// * Ссылка - СправочникСсылка.ШаблоныСообщенийПрисоединенныеФайлы +// * Идентификатор - Строка +// * Представление - Строка +// * Выбрано - Булево +// * ИндексКартинки - Число +// * ТипФайла - Строка +// * МенеджерПечати +// * ПараметрыПечати +// * Статус +// * Имя +// * Реквизит +// * ИмяПараметра - Строка +// +Функция СтрокаВложений(Вложение) Экспорт + Возврат Вложение; +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl index 76fcdbcf5..122c4cafc 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl @@ -13,14 +13,16 @@ // для переданного в параметре ПредметСообщения предмета. // // Параметры: -// ПредметСообщения - ОпределяемыйТип.ПредметШаблонаСообщения, Строка - объект-источник данных, выводимых в сообщение. +// ПредметСообщения - ОпределяемыйТип.ПредметШаблонаСообщения +// - Строка - объект-источник данных, выводимых в сообщение. // Для общих шаблонов необходимо передавать значение "Общий". // Для передачи предмета сообщения строкой необходимо указывать полное имя метаданных. // Например, "Справочник.Контрагенты". // ВидСообщения - Строка - "Письмо" для электронного письма и "СообщениеSMS" для сообщений SMS. // ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, которое вызывается после формирования сообщения. Содержит: -// * Результат - Булево - Если Истина, то сообщение было создано. -// * ПараметрыСообщения - Структура, Неопределено - значение, которое было передано в параметре ПараметрыСообщения. +// * Результат - Булево - если Истина, то сообщение было создано. +// * ПараметрыСообщения - Структура +// - Неопределено - значение, которое было передано в параметре ПараметрыСообщения. // ВладелецШаблона - ОпределяемыйТип.ВладелецШаблона - владелец шаблонов. Если не указан, то в окне выбора // шаблона выводятся все доступные шаблоны для указанного предмета ПредметСообщения. // ПараметрыСообщения - Структура - дополнительная информация для формирования сообщения, @@ -38,11 +40,12 @@ // Открывает форму для выбора шаблона. // // Параметры: -// Оповещение - ОписаниеОповещения - оповещение, которое будет вызвано после выбора шаблона. +// Оповещение - ОписаниеОповещения - оповещение, которое будет вызвано после выбора шаблона: // * Результат - СправочникСсылка.ШаблоныСообщений - выбранный шаблон. // * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. // ВидСообщения - Строка - "Письмо" для электронного письма и "СообщениеSMS" для сообщений SMS. -// ПредметШаблона - ЛюбаяСсылка, Строка - ссылка на объект, являющийся предметом, или его полное имя. +// ПредметШаблона - ЛюбаяСсылка +// - Строка - ссылка на объект, являющийся предметом, или его полное имя. // ВладелецШаблона - ОпределяемыйТип.ВладелецШаблона - владелец шаблонов. Если не указан, то в окне выбора шаблона // выводятся все доступные шаблоны для указанного предмета ПредметСообщения. // @@ -62,19 +65,21 @@ // Показывает форму шаблона сообщения. // // Параметры: -// Значение - СправочникСсылка.ШаблоныСообщений, Структура, ЛюбаяСсылка - если передана ссылка на шаблон сообщения, +// Значение - СправочникСсылка.ШаблоныСообщений +// - Структура +// - ЛюбаяСсылка - если передана ссылка на шаблон сообщения, // то будет открыт этот шаблон сообщения. // Если передана структура, то будет открыто окно нового шаблона сообщения заполненного из полей // структуры. Описание полей. см. ШаблоныСообщенийКлиентСервер.ОписаниеПараметровШаблона. // Если ссылка из состава типов ОпределяемыйТип.ВладелецШаблонаСообщения, то будет открыт шаблон // сообщения по владельцу. // ПараметрыОткрытия - Структура - параметры открытия формы: -// * Владелец - Произвольный - Форма или элемент управления другой формы. -// * Уникальность - Произвольный - Ключ, значение которого будет использоваться для поиска уже открытых форм. -// * НавигационнаяСсылка - Строка - Задает навигационную ссылку, возвращаемую формой. -// * ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - Содержит описание процедуры, которая будет вызвана после +// * Владелец - Произвольный - форма или элемент управления другой формы. +// * Уникальность - Произвольный - ключ, значение которого будет использоваться для поиска уже открытых форм. +// * НавигационнаяСсылка - Строка - задает навигационную ссылку, возвращаемую формой. +// * ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после // закрытия формы. -// * РежимОткрытияОкна - РежимОткрытияОкнаФормы - Указывает режим открытия окна управляемой формы. +// * РежимОткрытияОкна - РежимОткрытияОкнаФормы - указывает режим открытия окна управляемой формы. // Процедура ПоказатьФормуШаблона(Значение, ПараметрыОткрытия = Неопределено) Экспорт @@ -99,18 +104,18 @@ // Возвращает параметры открытия формы шаблона сообщения. // // Параметры: -// ДанныеЗаполнения - Произвольный - Значение, на основании которого выполняется заполнение. +// ДанныеЗаполнения - Произвольный - значение, на основании которого выполняется заполнение. // Значение данного параметра не может быть следующих типов: // Неопределено, Null, Число, Строка, Дата, Булево, Дата. // // Возвращаемое значение: -// Структура - Список параметров открытия формы. -// * Владелец - Произвольный - Форма или элемент управления другой формы. -// * Уникальность - Произвольный - Ключ, значение которого будет использоваться для поиска уже открытых форм. -// * НавигационнаяСсылка - Строка - Задает навигационную ссылку, возвращаемую формой. -// * ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - Содержит описание процедуры, которая будет вызвана после +// Структура - список параметров открытия формы: +// * Владелец - Произвольный - форма или элемент управления другой формы. +// * Уникальность - Произвольный - ключ, значение которого будет использоваться для поиска уже открытых форм. +// * НавигационнаяСсылка - Строка - задает навигационную ссылку, возвращаемую формой. +// * ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после // закрытия формы. -// * РежимОткрытияОкна - РежимОткрытияОкнаФормы - Указывает режим открытия окна управляемой формы. +// * РежимОткрытияОкна - РежимОткрытияОкнаФормы - указывает режим открытия окна управляемой формы. // Функция ПараметрыФормы(ДанныеЗаполнения) Экспорт ПараметрыОткрытия = Новый Структура(); @@ -136,12 +141,14 @@ // ПредметСообщения и возвращает сформированный шаблон. // // Параметры: -// ПредметСообщения - ЛюбаяСсылка, Строка - объект-источник данных, выводимых в сообщение. +// ПредметСообщения - ЛюбаяСсылка +// - Строка - объект-источник данных, выводимых в сообщение. // Для общих шаблонов необходимо передавать значение "Общий". // ВидСообщения - Строка - "Письмо" для электронного письма и "СообщениеSMS" для сообщений SMS. -// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, которое вызывается после формирования сообщения. -// * Результат - Структура - Если Истина, то сообщение было создано. -// * ПараметрыСообщения - Структура, Неопределено - значение, которое было передано в параметре ПараметрыСообщения. +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, которое вызывается после формирования сообщения: +// * Результат - Структура - если Истина, то сообщение было создано. +// * ПараметрыСообщения - Структура +// - Неопределено - значение, которое было передано в параметре ПараметрыСообщения. // ВладелецШаблона - ОпределяемыйТип.ВладелецШаблона - владелец шаблонов. Если не указан, то в окне выбора // шаблона выводятся все доступные шаблоны для указанного предмета ПредметСообщения. // ПараметрыСообщения - Структура - дополнительная информация для формирования сообщения, diff --git a/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl index 08de7402a..378ed88d1 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl @@ -11,11 +11,11 @@ // Описывает параметр шаблона для использования их во внешних обработках. // // Параметры: -// ТаблицаПараметров - ТаблицаЗначений - Таблица с параметрами. -// ИмяПараметра - Строка - Имя используемого параметра. -// ОписаниеТипа - ОписаниеТипов - Тип параметра. -// ЭтоПредопределенныйПараметр - Булево - Если Ложь, то это произвольный параметр, иначе основной. -// ПредставлениеПараметра - Строка - Выводимое представление параметра. +// ТаблицаПараметров - ТаблицаЗначений - таблица с параметрами. +// ИмяПараметра - Строка - имя используемого параметра. +// ОписаниеТипа - ОписаниеТипов - тип параметра. +// ЭтоПредопределенныйПараметр - Булево - если Ложь, то это произвольный параметр, иначе основной. +// ПредставлениеПараметра - Строка - выводимое представление параметра. // Процедура ДобавитьПараметрШаблона(ТаблицаПараметров, ИмяПараметра, ОписаниеТипа, ЭтоПредопределенныйПараметр, ПредставлениеПараметра = "") Экспорт @@ -65,26 +65,26 @@ // * ПодписьИПечать - Булево - признак подписи и печати в печатных формах; // * ПараметрыСообщения - Структура - дополнительные параметры сообщения; // * Наименование - Строка - наименование шаблона сообщения; -// * Ссылка - Неопределено - Ссылка на элемент справочника; +// * Ссылка - Неопределено - ссылка на элемент справочника; // * ВладелецШаблона - Неопределено - владельца контекстного шаблона; // * ПараметрыСКД - Соответствие - набор параметров при получении данных с использованием СКД; // * Параметры - Соответствие - параметры шаблона; -// * Макет - Строка - Имя макета СКД; +// * Макет - Строка - имя макета СКД; // * ВыбранныеВложения - Соответствие - выбранные печатные формы и вложения в шаблон; -// * ФорматыВложений - СписокЗначений - Формат, в котором сохраняются печатные формы; -// * РазворачиватьСсылочныеРеквизиты - Булево - Если Истина, то у ссылочных реквизитов доступны их реквизиты. -// * ШаблонПоВнешнейОбработке - Булево - Если Истина, то шаблон формирует внешней обработкой; -// * ВнешняяОбработка - Неопределено - Ссылка на внешнюю обработку; +// * ФорматыВложений - СписокЗначений - формат, в котором сохраняются печатные формы; +// * РазворачиватьСсылочныеРеквизиты - Булево - если Истина, то у ссылочных реквизитов доступны их реквизиты. +// * ШаблонПоВнешнейОбработке - Булево - если Истина, то шаблон формирует внешней обработкой; +// * ВнешняяОбработка - Неопределено - ссылка на внешнюю обработку; // * Отправитель - Строка - электронная почта отправителя; -// * ПеревестиВТранслит - Булево - Если Истина, то сформированные печатные формы и файлы будут иметь имена, +// * ПеревестиВТранслит - Булево - если Истина, то сформированные печатные формы и файлы будут иметь имена, // содержащие только латинские буквы и цифры, для возможности переноса между // различными операционными системами. Например, файл "Счет на оплату.pdf" // будет сохранен с именем "Schet na oplaty.pdf"; -// * УпаковатьВАрхив - Булево - Признак того, что вложения и печатные формы должны быть упакованы в архив +// * УпаковатьВАрхив - Булево - признак того, что вложения и печатные формы должны быть упакованы в архив // при отправке; -// * ФорматПисьма - ПеречислениеСсылка.СпособыРедактированияЭлектронныхПисем - Вид текста письма: HTML или ОбычныйТекст; -// * ПолноеИмяТипаНазначения - Строка - Полное имя объекта метаданных, на основании которого создается сообщения; -// * Назначение - Строка - Назначение шаблона сообщений; +// * ФорматПисьма - ПеречислениеСсылка.СпособыРедактированияЭлектронныхПисем - вид текста письма: HTML или ОбычныйТекст; +// * ПолноеИмяТипаНазначения - Строка - полное имя объекта метаданных, на основании которого создается сообщения; +// * Назначение - Строка - назначение шаблона сообщений; // * ТипШаблона - Строка - варианты: "Письмо" или "SMS". // Функция ОписаниеПараметровШаблона() Экспорт @@ -131,19 +131,19 @@ КонецФункции // Параметры: -// Шаблон - СправочникСсылка.ШаблоныСообщений - -// Предмет - ЛюбаяСсылка - -// УникальныйИдентификатор - УникальныйИдентификатор - +// Шаблон - СправочникСсылка.ШаблоныСообщений +// Предмет - ЛюбаяСсылка +// УникальныйИдентификатор - УникальныйИдентификатор // Возвращаемое значение: -// Структура - Описание: -// * ДополнительныеПараметры - Структура - где: -// ** ПреобразовыватьHTMLДляФорматированногоДокумента - Булево - -// ** ВидСообщения - Строка - -// ** ОтправитьСразу - Булево - -// ** УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - -// ** ПечатныеФормы - Массив - -// ** НастройкиСохранения - Произвольный - -// ** ПроизвольныеПараметры - Соответствие - +// Структура: +// * ДополнительныеПараметры - Структура: +// ** ПреобразовыватьHTMLДляФорматированногоДокумента - Булево +// ** ВидСообщения - Строка +// ** ОтправитьСразу - Булево +// ** УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты +// ** ПечатныеФормы - Массив +// ** НастройкиСохранения - Произвольный +// ** ПроизвольныеПараметры - Соответствие // Функция КонструкторПараметровОтправки(Шаблон, Предмет, УникальныйИдентификатор) Экспорт diff --git a/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl index e52accada..ff20ad814 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl @@ -11,19 +11,19 @@ // Определяет состав назначений и общие реквизиты в шаблонах сообщений // // Параметры: -// Настройки - Структура - Структура с ключами: -// * ПредметыШаблонов - ТаблицаЗначений - Содержит варианты предметов для шаблонов. Колонки: -// ** Имя - Строка - Уникальное имя назначения. -// ** Представление - Строка - Представление варианта. -// ** Макет - Строка - Имя макета СКД, если состав реквизитов определяется посредством СКД. -// ** ЗначенияПараметровСКД - Структура - Значения параметров СКД для текущего предмета шаблона сообщения. -// * ОбщиеРеквизиты - ДеревоЗначений - Содержит описание общих реквизитов доступных во всех шаблонах. Колонки: -// ** Имя - Строка - Уникальное имя общего реквизита. -// ** Представление - Строка - Представление общего реквизита. -// ** Тип - Тип - Тип общего реквизита. По умолчанию строка. +// Настройки - Структура: +// * ПредметыШаблонов - ТаблицаЗначений - содержит варианты предметов для шаблонов. Колонки: +// ** Имя - Строка - уникальное имя назначения. +// ** Представление - Строка - представление варианта. +// ** Макет - Строка - имя макета СКД, если состав реквизитов определяется посредством СКД. +// ** ЗначенияПараметровСКД - Структура - значения параметров СКД для текущего предмета шаблона сообщения. +// * ОбщиеРеквизиты - ДеревоЗначений - содержит описание общих реквизитов доступных во всех шаблонах. Колонки: +// ** Имя - Строка - уникальное имя общего реквизита. +// ** Представление - Строка - представление общего реквизита. +// ** Тип - Тип - тип общего реквизита. По умолчанию строка. // * ИспользоватьПроизвольныеПараметры - Булево - указывает, можно ли использовать произвольные пользовательские // параметры в шаблонах сообщений. -// * ЗначенияПараметровСКД - Структура - Общие значения параметров СКД, для всех макетов, где состав реквизитов +// * ЗначенияПараметровСКД - Структура - общие значения параметров СКД, для всех макетов, где состав реквизитов // определяется средствами СКД. // Процедура ПриОпределенииНастроек(Настройки) Экспорт @@ -35,19 +35,19 @@ // Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений. // // Параметры: -// Реквизиты - ДеревоЗначений - список реквизитов шаблона. -// * Имя - Строка - Уникальное имя общего реквизита; -// * Представление - Строка - Представление общего реквизита; -// * Тип - Тип - Тип реквизита. По умолчанию строка; -// * Подсказка - Строка - Расширенная информация о реквизите; -// * Формат - Строка - Формат вывода значения для чисел, дат, строк и булевых значений. +// Реквизиты - ДеревоЗначений - список реквизитов шаблона: +// * Имя - Строка - уникальное имя общего реквизита; +// * Представление - Строка - представление общего реквизита; +// * Тип - Тип - тип реквизита. По умолчанию строка; +// * Подсказка - Строка - расширенная информация о реквизите; +// * Формат - Строка - формат вывода значения для чисел, дат, строк и булевых значений. // Вложения - ТаблицаЗначений - печатные формы и вложения, где: // * Имя - Строка - уникальное имя вложения; // * Идентификатор - Строка - идентификатор вложения; // * Представление - Строка - представление варианта; // * Подсказка - Строка - расширенная информация о вложении; // * ТипФайла - Строка - тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl" и др. -// НазначениеШаблона - Строка - Имя назначения шаблон сообщения. +// НазначениеШаблона - Строка - имя назначения шаблон сообщения. // ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщения. // Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, НазначениеШаблона, ДополнительныеПараметры) Экспорт @@ -59,20 +59,21 @@ // Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений. // // Параметры: -// Сообщение - Структура - структура с ключами: -// * ЗначенияРеквизитов - Соответствие - список используемых в шаблоне реквизитов. +// Сообщение - Структура: +// * ЗначенияРеквизитов - Соответствие - список используемых в шаблоне реквизитов: // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. -// * ЗначенияОбщихРеквизитов - Соответствие - список используемых в шаблоне общих реквизитов. +// * ЗначенияОбщихРеквизитов - Соответствие - список используемых в шаблоне общих реквизитов: // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. -// * Вложения - Соответствие - значения реквизитов +// * Вложения - Соответствие: // ** Ключ - Строка - имя вложения в шаблоне; -// ** Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения. -// * ДополнительныеПараметры - Структура - Дополнительные параметры сообщения. +// ** Значение - ДвоичныеДанные +// - Строка - двоичные данные или адрес во временном хранилище вложения. +// * ДополнительныеПараметры - Структура - дополнительные параметры сообщения. // НазначениеШаблона - Строка - полное имя назначения шаблон сообщения. // ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных. -// ПараметрыШаблона - Структура - Дополнительная информация о шаблоне сообщения. +// ПараметрыШаблона - Структура - дополнительная информация о шаблоне сообщения. // Процедура ПриФормированииСообщения(Сообщение, НазначениеШаблона, ПредметСообщения, ПараметрыШаблона) Экспорт @@ -83,7 +84,7 @@ // Заполняет список получателей SMS при отправке сообщения сформированного по шаблону. // // Параметры: -// ПолучателиSMS - ТаблицаЗначений - список получателей SMS. +// ПолучателиSMS - ТаблицаЗначений: // * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS; // * Представление - Строка - представление получателя сообщения SMS; // * Контакт - Произвольный - контакт, которому принадлежит номер телефона. @@ -94,7 +95,7 @@ // * ВидСообщения - Строка - вид формируемого сообщения: "ЭлектроннаяПочта" или "СообщениеSMS"; // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров; // * ОтправитьСразу - Булево - признак мгновенной отправки; -// * ПараметрыСообщения - Структура - Дополнительные параметры сообщения. +// * ПараметрыСообщения - Структура - дополнительные параметры сообщения. // Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, НазначениеШаблона, ПредметСообщения) Экспорт @@ -103,7 +104,7 @@ // Заполняет список получателей почты при отправке сообщения сформированного по шаблону. // // Параметры: -// ПолучателиПисьма - ТаблицаЗначений - список получается письма. +// ПолучателиПисьма - ТаблицаЗначений - список получается письма: // * Адрес - Строка - адрес электронной почты получателя; // * Представление - Строка - представление получателя письма; // * Контакт - Произвольный - контакт, которому принадлежит адрес электронной почты. @@ -114,7 +115,7 @@ // * ВидСообщения - Строка - вид формируемого сообщения: "ЭлектроннаяПочта" или "СообщениеSMS"; // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров; // * ОтправитьСразу - Булево - признак мгновенной отправки письма; -// * ПараметрыСообщения - Структура - Дополнительные параметры сообщения; +// * ПараметрыСообщения - Структура - дополнительные параметры сообщения; // * ПреобразовыватьHTMLДляФорматированногоДокумента - Булево - признак преобразование HTML текста // сообщения содержащего картинки в тексте письма из-за особенностей вывода изображений // в форматированном документе; diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСервер/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСервер/Module.bsl index a9f9937d6..1eb1ed176 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСервер/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСервер/Module.bsl @@ -12,11 +12,11 @@ // Создает описание таблицы параметров шаблона сообщения. // // Возвращаемое значение: -// ТаблицаЗначений - Сформированная пустая таблица значений. -// * ИмяПараметра - Строка - Имя параметра. -// * ОписаниеТипа - ОписаниеТипов - Описание типа параметра. -// * ЭтоПредопределенныйПараметр - Булево - Является ли параметр предопределенным. -// * ПредставлениеПараметра - Строка - Представление параметра. +// ТаблицаЗначений - сформированная пустая таблица значений: +// * ИмяПараметра - Строка - имя параметра. +// * ОписаниеТипа - ОписаниеТипов - описание типа параметра. +// * ЭтоПредопределенныйПараметр - Булево - является ли параметр предопределенным. +// * ПредставлениеПараметра - Строка - представление параметра. // Функция ТаблицаПараметров() Экспорт diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl index d9a0cdc0a..e789ac8ca 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl @@ -10,22 +10,22 @@ // Создание сообщения по шаблону // Параметры: -// ПараметрыОтправки - Структура - где: -// * ДополнительныеПараметры - Структура - +// ПараметрыОтправки - Структура: +// * ДополнительныеПараметры - Структура // // Возвращаемое значение: -// Структура - Описание: -// * Вложения - ТаблицаЗначений - где: -// ** Представление - Строка - -// ** АдресВоВременномХранилище - Строка - -// ** Кодировка - Строка - -// ** Идентификатор - Строка - -// * СообщенияПользователю - ФиксированныйМассив - -// * ДополнительныеПараметры - Структура - где: -// ** Отправитель - Строка - -// * Получатель - Неопределено - -// * Текст - Строка - -// * Тема - Строка - +// Структура: +// * Вложения - ТаблицаЗначений: +// ** Представление - Строка +// ** АдресВоВременномХранилище - Строка +// ** Кодировка - Строка +// ** Идентификатор - Строка +// * СообщенияПользователю - ФиксированныйМассив +// * ДополнительныеПараметры - Структура: +// ** Отправитель - Строка +// * Получатель - Неопределено +// * Текст - Строка +// * Тема - Строка // Функция СформироватьСообщение(ПараметрыОтправки) Экспорт @@ -94,7 +94,7 @@ // Заполнение значений параметров СообщениеРезультат = УстановитьЗначенияРеквизитовВТекстСообщения(ПараметрыШаблона, ПараметрыТекстаСообщения, ПараметрыОтправки.Предмет); - СформированноеСообщение.Тема = СообщениеРезультат.Тема; + СформированноеСообщение.Тема = СообщениеРезультат.Тема; СформированноеСообщение.Текст = СообщениеРезультат.Текст; Для каждого Вложение Из Сообщение.Вложения Цикл @@ -121,13 +121,13 @@ // Сформировать сообщение и сразу отправить. // // Параметры: -// ПараметрыОтправки - Структура - содержит: -// * ДополнительныеПараметры - Структура - +// ПараметрыОтправки - Структура: +// * ДополнительныеПараметры - Структура // // Возвращаемое значение: -// Структура - содержит: -// * Отправлено - Булево - -// * ОписаниеОшибки - Строка - +// Структура: +// * Отправлено - Булево +// * ОписаниеОшибки - Строка // Функция СформироватьСообщениеИОтправить(ПараметрыОтправки) Экспорт @@ -262,6 +262,7 @@ // // Возвращаемое значение: // Массив - список из элементов типа ОбъектМетаданных. +// Функция ИсточникиШаблоновСообщений() Экспорт МассивТиповИлиМетаданных = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип.Типы(); @@ -294,6 +295,20 @@ Обработчик.Процедура = "ШаблоныСообщенийСлужебный.ДобавитьРольДобавлениеИзменениеЛичныхШаблоновВПрофилиСБазовымиПравами"; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.3.156"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("9fa8ac0b-1d3c-4584-8d32-bb46720e9d67"); + Обработчик.Процедура = "Справочники.ШаблоныСообщений.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.ШаблоныСообщений.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ОчередьОтложеннойОбработки = 1; + Обработчик.ЧитаемыеОбъекты = "Справочник.ШаблоныСообщений"; + Обработчик.ИзменяемыеОбъекты = "Справочник.ШаблоныСообщений"; + Обработчик.БлокируемыеОбъекты = "Справочник.ШаблоныСообщений"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.Комментарий = НСтр("ru = 'Обновление шаблонов сообщений. + |До завершения обработки формирование писем и сообщений SMS на основании шаблонов будет недоступно.'"); + КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. @@ -351,20 +366,22 @@ // Функция-конструктор параметров сообщения // // Параметры: -// ПараметрыШаблона - Структура, Неопределено - +// ПараметрыШаблона - Структура +// - Неопределено // // Возвращаемое значение: -// Структура - Описание: -// * Тема - Строка - -// * Текст - Строка - -// * Получатель - СписокЗначений - -// * Вложения - ТаблицаЗначений - где: -// ** Представление - Строка - -// ** АдресВоВременномХранилище - Строка - -// ** Кодировка - Строка - -// ** Идентификатор - Строка - -// * СообщенияПользователю - ФиксированныйМассив - -// * ДополнительныеПараметры - Неопределено, Структура - +// Структура: +// * Тема - Строка +// * Текст - Строка +// * Получатель - СписокЗначений +// * Вложения - ТаблицаЗначений: +// ** Представление - Строка +// ** АдресВоВременномХранилище - Строка +// ** Кодировка - Строка +// ** Идентификатор - Строка +// * СообщенияПользователю - ФиксированныйМассив +// * ДополнительныеПараметры - Неопределено +// - Структура // Функция КонструкторСообщения(ПараметрыШаблона = Неопределено) Экспорт @@ -395,7 +412,7 @@ СведенияОШаблоне = КонструкторСведенийОШаблоне(); - ИмяУзлаОбщихРеквизитов = ИмяУзлаОбщихРеквизитов(); + ИмяУзлаОбщихРеквизитов = ШаблоныСообщений.ИмяУзлаОбщихРеквизитов(); Если ТипЗнч(СведенияОШаблоне.ОбщиеРеквизиты) = Тип("ДеревоЗначений") Тогда Для каждого ОбщийРеквизит Из ОбщиеРеквизиты(СведенияОШаблоне.ОбщиеРеквизиты).Строки Цикл @@ -411,6 +428,9 @@ ОпределитьСписокРеквизитовИВложений(СведенияОШаблоне, ПараметрыШаблона); + СформироватьПолныеПредставления(СведенияОШаблоне.Реквизиты.Строки); + СформироватьПолныеПредставления(СведенияОШаблоне.ОбщиеРеквизиты.Строки); + Возврат СведенияОШаблоне; КонецФункции @@ -418,26 +438,26 @@ // Функция-конструктор сведений о шаблоне. // // Возвращаемое значение: -// Структура - Описание: -// * Назначение - Строка - -// * Вложения - ТаблицаЗначений - где: -// ** Имя - Строка - -// ** Идентификатор - Строка - -// ** Представление - Строка - -// ** МенеджерПечати - Строка - -// ** ПараметрыПечати - Структура - -// ** ТипФайла - Строка - -// ** Статус - Строка - -// ** Реквизит - Строка - -// ** ИмяПараметра - Строка - +// Структура: +// * Назначение - Строка +// * Вложения - ТаблицаЗначений: +// ** Имя - Строка +// ** Идентификатор - Строка +// ** Представление - Строка +// ** МенеджерПечати - Строка +// ** ПараметрыПечати - Структура +// ** ТипФайла - Строка +// ** Статус - Строка +// ** Реквизит - Строка +// ** ИмяПараметра - Строка // * ОбщиеРеквизиты -// * Реквизиты - ДеревоЗначений - где: -// ** Имя - Строка - -// ** Представление - Строка - -// ** Подсказка - Строка - -// ** Формат - Строка - -// ** Тип - ОписаниеТипов - -// ** ПроизвольныйПараметр - Булево - +// * Реквизиты - ДеревоЗначений: +// ** Имя - Строка +// ** Представление - Строка +// ** Подсказка - Строка +// ** Формат - Строка +// ** Тип - ОписаниеТипов +// ** ПроизвольныйПараметр - Булево // Функция КонструкторСведенийОШаблоне() @@ -454,6 +474,24 @@ КонецФункции +Функция ИмяПараметраБезСтрокиФормата(Знач ПараметрШаблонаИзТекста) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Имя", ""); + Результат.Вставить("Формат", ""); + + ПозицияФорматТекст = СтрНайти(ПараметрШаблонаИзТекста, "{", НаправлениеПоиска.СКонца); + Если ПозицияФорматТекст > 0 Тогда + Результат.Имя = Лев(ПараметрШаблонаИзТекста, ПозицияФорматТекст - 1); + Результат.Формат = Сред(ПараметрШаблонаИзТекста, ПозицияФорматТекст + 1, СтрДлина(ПараметрШаблонаИзТекста) - ПозицияФорматТекст - 1); + Иначе + Результат.Имя = ПараметрШаблонаИзТекста; + КонецЕсли; + + Возврат Результат; + +КонецФункции + Процедура ОпределитьСписокРеквизитовИВложений(СведенияОШаблоне, ПараметрыШаблона) Если ЗначениеЗаполнено(ПараметрыШаблона.ПолноеИмяТипаНазначения) Тогда @@ -464,25 +502,26 @@ Если МетаданныеОбъект <> Неопределено Тогда МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(МетаданныеОбъект.ПолноеИмя()); + + Префикс = МетаданныеОбъект.Имя + "."; + Если ПустаяСтрока(ПараметрыШаблона.Макет) Тогда - РеквизитыПоМетаданнымОбъекта(РеквизитыОбъектаНазначения, МетаданныеОбъект,,, МетаданныеОбъект.Имя + "."); + РеквизитыПоМетаданнымОбъекта(РеквизитыОбъектаНазначения, МетаданныеОбъект,,, Префикс); Иначе МакетСКД = МенеджерОбъекта.ПолучитьМакет(ПараметрыШаблона.Макет); РеквизитыПоСКД(РеквизитыОбъектаНазначения, МакетСКД, МетаданныеОбъект.Имя); КонецЕсли; ОпределитьСписокПечатныхФорм(МетаданныеОбъект, СведенияОШаблоне); - - Префикс = МетаданныеОбъект.Имя + "."; Представление = МетаданныеОбъект.Представление(); - СсылкаНаОбъект = РеквизитыОбъектаНазначения.Добавить(); СсылкаНаОбъект.Представление = НСтр("ru = 'Ссылка на'") + " """ + Представление + """"; СсылкаНаОбъект.Имя = Префикс + "ВнешняяСсылкаНаОбъект"; СсылкаНаОбъект.Тип = Новый ОписаниеТипов("Строка"); + СсылкаНаОбъект.ПолноеПредставление = Представление + "." + НСтр("ru = 'Ссылка на'") + " """ + Представление + """"; Иначе - Префикс = ПараметрыШаблона.ПолноеИмяТипаНазначения +"."; + Префикс = ПараметрыШаблона.ПолноеИмяТипаНазначения + "."; Представление = ПараметрыШаблона.Назначение; КонецЕсли; @@ -547,6 +586,81 @@ КонецПроцедуры +Функция ПреобразоватьТекстШаблона( Знач Текст, Знач СписокВсехПараметров, ВариантКонвертации) Экспорт + + Если ВариантКонвертации = "ПараметрыВПредставление" Тогда + ИмяРеквизитаИсточника = "Имя"; + ИмяРеквизитаПолучателя = "ПолноеПредставление"; + Иначе + ИмяРеквизитаИсточника = "ПолноеПредставление"; + ИмяРеквизитаПолучателя = "Имя"; + КонецЕсли; + + ПараметрыВШаблоне = ПараметрыТекстаСообщения(Текст); + + Для каждого ПараметрВШаблоне Из ПараметрыВШаблоне Цикл + + ОписаниеПараметра = ИмяПараметраБезСтрокиФормата(ПараметрВШаблоне.Ключ); + + НайденныеСтроки = СписокВсехПараметров.Строки.НайтиСтроки(Новый Структура(ИмяРеквизитаИсточника, ОписаниеПараметра.Имя), Истина); + Если НайденныеСтроки.Количество() > 0 Тогда + + Если ЗначениеЗаполнено(ОписаниеПараметра.Формат) И ИмяРеквизитаПолучателя = "ПолноеПредставление" Тогда + НайденныеСтроки[0].Формат = ОписаниеПараметра.Формат; + КонецЕсли; + + Если ПустаяСтрока(НайденныеСтроки[0].Формат) Тогда + ПараметрыВШаблоне[ПараметрВШаблоне.Ключ] = НайденныеСтроки[0][ИмяРеквизитаПолучателя]; + Иначе + ПараметрыВШаблоне[ПараметрВШаблоне.Ключ] = НайденныеСтроки[0][ИмяРеквизитаПолучателя] + "{" + НайденныеСтроки[0].Формат + "}"; + КонецЕсли; + + + КонецЕсли; + КонецЦикла; + + Возврат ЗаменитьПараметрыВТексте(Текст, ПараметрыВШаблоне); + +КонецФункции + +Функция ЗаменитьПараметрыВТексте(Знач ЗаменяемыйТекст, НаборПараметров) + + Для Каждого ОписаниеПараметра Из НаборПараметров Цикл + ЗаменяемыйТекст = СтрЗаменить(ЗаменяемыйТекст, "[" + ОписаниеПараметра.Ключ + "]", "[" + ОписаниеПараметра.Значение + "]"); + КонецЦикла; + + Возврат ЗаменяемыйТекст; + +КонецФункции + +Процедура СформироватьПолныеПредставления(РеквизитыОбъектаНазначения, Представление = "") + + Совпадения = Новый Соответствие; + Для каждого РеквизитОбъектаНазначения Из РеквизитыОбъектаНазначения Цикл + ПолноеПредставление = Представление + РеквизитОбъектаНазначения.Представление; + Если РеквизитОбъектаНазначения.Строки.Количество() > 0 Тогда + СформироватьПолныеПредставления(РеквизитОбъектаНазначения.Строки, ПолноеПредставление + "."); + КонецЕсли; + + Если Совпадения[ПолноеПредставление] = Неопределено Тогда + РеквизитОбъектаНазначения.ПолноеПредставление = ПолноеПредставление; + Совпадения.Вставить(ПолноеПредставление, РеквизитОбъектаНазначения); + Иначе + Для ПорядковыйНомер = 1 По 100 Цикл + ПолноеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "%1.%2 (%3)", Представление, РеквизитОбъектаНазначения.Представление, ПорядковыйНомер); + Если Совпадения[ПолноеПредставление] = Неопределено Тогда + РеквизитОбъектаНазначения.ПолноеПредставление = ПолноеПредставление; + Совпадения.Вставить(ПолноеПредставление, РеквизитОбъектаНазначения); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + Функция ОбъектЯвляетсяПредметомШаблона(ПолноеИмяТипаНазначения) Экспорт Результат = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек().ПредметыШаблонов.Найти(ПолноеИмяТипаНазначения, "Имя"); @@ -621,7 +735,7 @@ ПараметрыШаблона.ТипШаблона = "SMS"; КонецЕсли; - МенеджерОбъекта = Неопределено; + МенеджерОбъекта = Неопределено; Если ПараметрыОтправки.Свойство("Предмет") И ЗначениеЗаполнено(ПараметрыОтправки.Предмет) Тогда МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ПараметрыОтправки.Предмет)); Если МетаданныеОбъекта <> Неопределено Тогда @@ -765,16 +879,16 @@ | ШаблоныСообщений.ПредназначенДляSMS = &ПредназначенДляSMS | И ШаблоныСообщений.ПредназначенДляЭлектронныхПисем = &ПредназначенДляЭлектронныхПисем | И ШаблоныСообщений.Назначение <> ""Служебный"" - | %ВладелецШаблона% + | И &ОтборПоВладельцуШаблона | И ШаблоныСообщений.ПометкаУдаления = ЛОЖЬ"; Если ЗначениеЗаполнено(ВладелецШаблона) Тогда - ОтборПоВладельцу = "И ШаблоныСообщений.ВладелецШаблона = &ВладелецШаблона"; + ОтборПоВладельцу = "ШаблоныСообщений.ВладелецШаблона = &ВладелецШаблона"; Запрос.УстановитьПараметр("ВладелецШаблона", ВладелецШаблона); Иначе - ОтборПоВладельцу = ""; + ОтборПоВладельцу = "ИСТИНА"; КонецЕсли; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "%ВладелецШаблона%", ОтборПоВладельцу); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоВладельцуШаблона", ОтборПоВладельцу); Запрос.УстановитьПараметр("ПредназначенДляSMS", ПредназначенДляSMS); Запрос.УстановитьПараметр("ПредназначенДляЭлектронныхПисем", ПредназначенДляЭлектронныхПисем); @@ -798,16 +912,16 @@ // Реквизиты объекта основания. // // Параметры: -// Реквизиты - ДеревоЗначений - где: -// * Имя - Строка - -// * Представление - Строка - -// ПолноеИмяТипаНазначения - Строка - -// Представление - Строка - +// Реквизиты - ДеревоЗначений: +// * Имя - Строка +// * Представление - Строка +// ПолноеИмяТипаНазначения - Строка +// Представление - Строка // // Возвращаемое значение: -// ДеревоЗначений - где: -// * Имя - Строка - -// * Представление - Строка - +// ДеревоЗначений: +// * Имя - Строка +// * Представление - Строка // Функция РеквизитыОбъектаНазначения(Реквизиты, ПолноеИмяТипаНазначения, Знач Представление = "") @@ -825,6 +939,7 @@ УзелРеквизитовОбъектаНазначения = Реквизиты.Строки.Добавить(); УзелРеквизитовОбъектаНазначения.Имя = ИмяРодителя; УзелРеквизитовОбъектаНазначения.Представление = Представление; + УзелРеквизитовОбъектаНазначения.ПолноеПредставление = Представление; КонецЕсли; Возврат УзелРеквизитовОбъектаНазначения.Строки; @@ -889,6 +1004,14 @@ КонецПроцедуры // Записывает вложение электронного письма, расположенное во временном хранилище в файл. +// +// Параметры: +// Владелец - СправочникСсылка.ШаблоныСообщений +// Сведения - см. ШаблоныСообщенийКлиентСервер.СтрокаВложений +// ИмяФайла - Строка +// Размер - Число +// КоличествоПустыхИменВоВложениях - Число +// Функция ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(Владелец, Сведения, ИмяФайла, Размер, КоличествоПустыхИменВоВложениях = 0) Экспорт АдресВоВременномХранилище = Сведения.Имя; @@ -923,10 +1046,10 @@ // Процедура - Добавить вложение печатную форму // // Параметры: -// ПараметрыОтправки - - -// СведенияОШаблоне - - -// Вложения - - -// ПараметрыШаблоны - - +// ПараметрыОтправки +// СведенияОШаблоне +// Вложения +// ПараметрыШаблоны // Процедура ДобавитьВыбранныеПечатныеФормыВоВложения(ПараметрыОтправки, СведенияОШаблоне, Вложения, ПараметрыШаблона) @@ -1007,16 +1130,16 @@ // Функция-конструктор таблицы вложений // // Возвращаемое значение: -// ТаблицаЗначений - содержит колонки: -// * Имя - Строка - -// * Идентификатор- Строка - -// * Представление - Строка - -// * МенеджерПечати - Строка - -// * ПараметрыПечати - Структура - -// * ТипФайла - Строка - -// * Статус - Строка - -// * Реквизит- Строка - -// * ИмяПараметра - Строка - +// ТаблицаЗначений: +// * Имя - Строка +// * Идентификатор- Строка +// * Представление - Строка +// * МенеджерПечати - Строка +// * ПараметрыПечати - Структура +// * ТипФайла - Строка +// * Статус - Строка +// * Реквизит- Строка +// * ИмяПараметра - Строка // Функция ТаблицаВложений() @@ -1059,11 +1182,12 @@ // Определение и заполнение параметров(реквизитов) в тексте сообщения // // Параметры: -// Шаблон - ДанныеФормыСтруктура - где: -// * Отправитель - Строка - -// * ПечатныеФормыИВложения - Структура - где: -// ** Идентификатор - Строка - -// - СправочникСсылка.ШаблоныСообщений - +// Шаблон - ДанныеФормыСтруктура: +// * Отправитель - Строка +// * ПечатныеФормыИВложения - ТаблицаЗначений: +// ** Идентификатор - Строка +// ** Имя - Строка +// * Параметры - ТаблицаЗначений // // Возвращаемое значение: // см. ШаблоныСообщенийКлиентСервер.ОписаниеПараметровШаблона @@ -1072,38 +1196,9 @@ Результат = ШаблоныСообщенийКлиентСервер.ОписаниеПараметровШаблона(); - Если ТипЗнч(Шаблон) = Тип("ДанныеФормыСтруктура") Тогда + Если ТипЗнч(Шаблон) = Тип("ДанныеФормыСтруктура") Или ТипЗнч(Шаблон) = Тип("СправочникОбъект.ШаблоныСообщений") Тогда - Результат.ТипШаблона = ?(Шаблон.ПредназначенДляSMS, "SMS", "Письмо"); - Результат.Тема = Шаблон.ТемаПисьма; - - Если Шаблон.ПредназначенДляВводаНаОсновании Тогда - Результат.ПолноеИмяТипаНазначения = Шаблон.ПолноеИмяТипаПараметраВводаНаОсновании; - Результат.Назначение = Шаблон.Назначение; - КонецЕсли; - Результат.ФорматПисьма = Шаблон.ТипТекстаПисьма; - Результат.УпаковатьВАрхив = Шаблон.УпаковатьВАрхив; - Результат.ПеревестиВТранслит = Шаблон.ОтправлятьВТранслите; - Результат.Отправитель = Шаблон.Отправитель; - Если Результат.ТипШаблона = "SMS" Тогда - Результат.Текст = Шаблон.ТекстШаблонаSMS; - ИначеЕсли Шаблон.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - Результат.Текст = Шаблон.ТекстШаблонаПисьмаHTML; - Иначе - Результат.Текст = Шаблон.ТекстШаблонаПисьма; - КонецЕсли; - Результат.ТранслитерироватьИменаФайлов = Шаблон.ТранслитерироватьИменаФайлов; - Результат.ПодписьИПечать = Шаблон.ПодписьИПечать; - - ЗаполнитьЗначенияСвойств(Результат, Шаблон,, "Параметры"); - - Для каждого ПечатныеФормыИВложения Из Шаблон.ПечатныеФормыИВложения Цикл - Результат.ВыбранныеВложения.Вставить(ПечатныеФормыИВложения.Идентификатор, ПечатныеФормыИВложения.Имя); - КонецЦикла; - - Для каждого СтрокаПараметр Из Шаблон.Параметры Цикл - Результат.Параметры.Вставить(СтрокаПараметр.ИмяПараметра, Новый Структура("ОписаниеТипа, Представление", СтрокаПараметр.ОписаниеТипа, СтрокаПараметр.ПредставлениеПараметра)); - КонецЦикла; + УстановитьПараметрыШаблона(Шаблон, Результат); ИначеЕсли ТипЗнч(Шаблон) = Тип("СправочникСсылка.ШаблоныСообщений") Тогда Запрос = Новый Запрос; @@ -1219,13 +1314,81 @@ КонецФункции +// Параметры: +// Шаблон - СправочникОбъект.ШаблоныСообщений +// - ДанныеФормыСтруктура: +// * Отправитель - Строка +// * ПечатныеФормыИВложения - ТаблицаЗначений: +// ** Идентификатор - Строка +// ** Имя - Строка +// * Параметры - ТаблицаЗначений +// Результат - Структура: +// * Тема - Строка +// * Текст - Строка +// * ПодписьИПечать - Булево +// * ПараметрыСообщения - Структура +// * Наименование - Строка +// * Ссылка - Неопределено +// * ВладелецШаблона - Неопределено +// * ПараметрыСКД - Соответствие +// * Параметры - Соответствие +// * Макет - Строка +// * ВыбранныеВложения - Соответствие +// * ФорматыВложений - СписокЗначений +// * РазворачиватьСсылочныеРеквизиты - Булево +// * ШаблонПоВнешнейОбработке - Булево +// * ВнешняяОбработка - Неопределено +// * Отправитель - Строка +// * ПеревестиВТранслит - Булево +// * УпаковатьВАрхив - Булево +// * ФорматПисьма - ПеречислениеСсылка.СпособыРедактированияЭлектронныхПисем +// * ПолноеИмяТипаНазначения - Строка +// * Назначение - Строка +// * ТипШаблона - Строка +// +Процедура УстановитьПараметрыШаблона(Шаблон, Результат) + Перем ПечатныеФормыИВложения; + Результат.ТипШаблона = ?(Шаблон.ПредназначенДляSMS, "SMS", "Письмо"); + Результат.Тема = Шаблон.ТемаПисьма; + + Если Шаблон.ПредназначенДляВводаНаОсновании Тогда + Результат.ПолноеИмяТипаНазначения = Шаблон.ПолноеИмяТипаПараметраВводаНаОсновании; + Результат.Назначение = Шаблон.Назначение; + КонецЕсли; + Результат.ФорматПисьма = Шаблон.ТипТекстаПисьма; + Результат.УпаковатьВАрхив = Шаблон.УпаковатьВАрхив; + Результат.ПеревестиВТранслит = Шаблон.ОтправлятьВТранслите; + Результат.Отправитель = Шаблон.Отправитель; + Если Результат.ТипШаблона = "SMS" Тогда + Результат.Текст = Шаблон.ТекстШаблонаSMS; + ИначеЕсли Шаблон.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + Результат.Текст = Шаблон.ТекстШаблонаПисьмаHTML; + Иначе + Результат.Текст = Шаблон.ТекстШаблонаПисьма; + КонецЕсли; + Результат.ТранслитерироватьИменаФайлов = Шаблон.ТранслитерироватьИменаФайлов; + Результат.ПодписьИПечать = Шаблон.ПодписьИПечать; + + ЗаполнитьЗначенияСвойств(Результат, Шаблон,, "Параметры"); + + Для каждого ПечатныеФормыИВложения Из Шаблон.ПечатныеФормыИВложения Цикл + + Результат.ВыбранныеВложения.Вставить(ПечатныеФормыИВложения.Идентификатор, ПечатныеФормыИВложения.Имя); + КонецЦикла; + + Для каждого СтрокаПараметр Из Шаблон.Параметры Цикл + Результат.Параметры.Вставить(СтрокаПараметр.ИмяПараметра, Новый Структура("ОписаниеТипа, Представление", СтрокаПараметр.ОписаниеТипа, СтрокаПараметр.ПредставлениеПараметра)); + КонецЦикла; + +КонецПроцедуры + // Возвращает соответствие параметров текста сообщения шаблона. // // Параметры: -// ПараметрыШаблона - Структура - Сведения о шаблоне. +// ПараметрыШаблона - Структура - сведения о шаблоне. // // Возвращаемое значение: -// Соответствие - соответствие имеющихся в тексте сообщения параметров. +// Соответствие - соответствие имеющихся в тексте сообщения параметров. // Функция ПараметрыИзТекстаСообщения(ПараметрыШаблона) Экспорт @@ -1286,6 +1449,23 @@ КонецФункции +Функция ПараметрыТекстаСообщения(ТекстСообщения) Экспорт + + МассивПараметров = Новый Соответствие; + + Набор = СтрРазделить(ТекстСообщения, "["); + Для каждого ПараметрНабора Из Набор Цикл + Позиция = СтрНайти(ПараметрНабора, "]"); + Если Позиция > 0 Тогда + ИмяПараметра = Лев(ПараметрНабора, Позиция - 1); + МассивПараметров.Вставить(ИмяПараметра, ИмяПараметра); + КонецЕсли; + КонецЦикла; + + Возврат МассивПараметров; + +КонецФункции + Процедура УстановитьЭлементСоответствия(СоответствиеПараметров, Знач МассивРазобранныйПараметр, СтрокаФормата) ЭлементСоответствия = СоответствиеПараметров.Получить(МассивРазобранныйПараметр[0]); Если ЭлементСоответствия = Неопределено Тогда @@ -1370,13 +1550,19 @@ ПроизвольныеРеквизиты = ПараметрыТекстаСообщения[ШаблоныСообщенийКлиентСервер.ЗаголовокПроизвольныхПараметров()]; Если ТипЗнч(ПроизвольныеРеквизиты ) = Тип("Соответствие") Тогда Для Каждого ПроизвольныйРеквизит Из ПроизвольныеРеквизиты Цикл - ПроизвольныеРеквизиты[ПроизвольныйРеквизит.Ключ] = ПараметрыОтправки.ДополнительныеПараметры.ПроизвольныеПараметры[ПроизвольныйРеквизит.Ключ]; + ОписаниеПараметра = ИмяПараметраБезСтрокиФормата(ПроизвольныйРеквизит.Ключ); + Если ПустаяСтрока(ОписаниеПараметра.Формат) Тогда + ПроизвольныеРеквизиты[ПроизвольныйРеквизит.Ключ] = ПараметрыОтправки.ДополнительныеПараметры.ПроизвольныеПараметры[ПроизвольныйРеквизит.Ключ]; + Иначе + ПроизвольныеРеквизиты[ПроизвольныйРеквизит.Ключ] = + Формат(ПараметрыОтправки.ДополнительныеПараметры.ПроизвольныеПараметры[ОписаниеПараметра.Имя], ОписаниеПараметра.Формат); + КонецЕсли; КонецЦикла; КонецЕсли; Продолжить; КонецЕсли; - Если КлючПараметра = ИмяУзлаОбщихРеквизитов() Тогда + Если КлючПараметра = ШаблоныСообщений.ИмяУзлаОбщихРеквизитов() Тогда Продолжить; КонецЕсли; @@ -1406,13 +1592,13 @@ ПараметрыОтправки.ДополнительныеПараметры.ПроизвольныеПараметры.Вставить(КлючПараметра, ПроизвольныйПараметрШаблона.Значение); КонецЕсли; - + КонецЦикла; КонецЕсли; - Если ПараметрыТекстаСообщения[ИмяУзлаОбщихРеквизитов()] <> Неопределено Тогда - ЗаполнитьОбщиеРеквизиты(ПараметрыТекстаСообщения[ИмяУзлаОбщихРеквизитов()]); - Сообщение.ЗначенияОбщихРеквизитов = ПараметрыТекстаСообщения[ИмяУзлаОбщихРеквизитов()]; + Если ПараметрыТекстаСообщения[ШаблоныСообщений.ИмяУзлаОбщихРеквизитов()] <> Неопределено Тогда + ЗаполнитьОбщиеРеквизиты(ПараметрыТекстаСообщения[ШаблоныСообщений.ИмяУзлаОбщихРеквизитов()]); + Сообщение.ЗначенияОбщихРеквизитов = ПараметрыТекстаСообщения[ШаблоныСообщений.ИмяУзлаОбщихРеквизитов()]; КонецЕсли; Возврат Сообщение; @@ -1488,12 +1674,21 @@ Возврат ОписаниеТипа.ПривестиЗначение(Значение); КонецФункции -Процедура ЗаполнитьОбщиеРеквизиты(ОбщиеРеквизиты) +Процедура ЗаполнитьОбщиеРеквизиты(ОбщиеРеквизиты) Экспорт Если ТипЗнч(ОбщиеРеквизиты) = Тип("Соответствие") Тогда - Если ОбщиеРеквизиты.Получить("ТекущаяДата") <> Неопределено Тогда - ОбщиеРеквизиты["ТекущаяДата"] = ТекущаяДатаСеанса(); - КонецЕсли; + Для каждого ОбщийРеквизит Из ОбщиеРеквизиты Цикл + Если СтрНачинаетсяС(ОбщийРеквизит.Ключ, "ТекущаяДата") Тогда + ОписаниеПараметра = ИмяПараметраБезСтрокиФормата(ОбщийРеквизит.Ключ); + Если ПустаяСтрока(ОписаниеПараметра.Формат) Тогда + ОбщиеРеквизиты[ОбщийРеквизит.Ключ] = ТекущаяДатаСеанса(); + Иначе + ОбщиеРеквизиты[ОбщийРеквизит.Ключ] = Формат(ТекущаяДатаСеанса(), ОписаниеПараметра.Формат); + КонецЕсли; + Прервать; + КонецЕсли; + КонецЦикла; + Если ОбщиеРеквизиты.Получить("ЗаголовокСистемы") <> Неопределено Тогда ОбщиеРеквизиты["ЗаголовокСистемы"] = ИмяЭтойИнформационнойБазы(); КонецЕсли; @@ -1754,6 +1949,7 @@ // // Возвращаемое значение: // ДокументHTML - созданный документ HTML. +// Функция ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекстHTML,Кодировка = Неопределено) Экспорт Построитель = Новый ПостроительDOM; @@ -1810,22 +2006,36 @@ КонецПроцедуры -Процедура РеквизитыПоМетаданнымОбъекта(Реквизиты, МетаданныеОбъект, СписокРеквизитов = "", ИсключаяРеквизиты = "", Знач Префикс = "") +// Описание +// +// Параметры: +// Реквизиты - КоллекцияСтрокДереваЗначений +// - ДеревоЗначений: +// * Имя - Строка +// * Представление - Строка +// МетаданныеОбъект - ОбъектМетаданных +// - Неопределено +// СписокРеквизитов - Строка +// ИсключаяРеквизиты - Строка +// Префикс - Строка +// +Процедура РеквизитыПоМетаданнымОбъекта(Реквизиты, МетаданныеОбъект, СписокРеквизитов = "", ИсключаяРеквизиты = "", Префикс = "") СведенияОСпискеРеквизитов = Новый Структура("СписокРеквизитов, СписокСодержитДанные"); - СведенияОСпискеРеквизитов.СписокРеквизитов = СтрРазделить(ВРег(СписокРеквизитов), ",", Ложь); + СведенияОСпискеРеквизитов.СписокРеквизитов = СтрРазделить(ВРег(СписокРеквизитов), ",", Ложь); СведенияОСпискеРеквизитов.СписокСодержитДанные = (СведенияОСпискеРеквизитов.СписокРеквизитов.Количество() > 0); СведенияОИсключаемыхРеквизитах = Новый Структура("СписокРеквизитов, СписокСодержитДанные"); СведенияОИсключаемыхРеквизитах.СписокРеквизитов = СтрРазделить(ВРег(ИсключаяРеквизиты), ",", Ложь); СведенияОИсключаемыхРеквизитах.СписокСодержитДанные = (СведенияОИсключаемыхРеквизитах.СписокРеквизитов.Количество() > 0); - Если НЕ ОбщегоНазначения.ЭтоПеречисление(МетаданныеОбъект) Тогда + Если ТипЗнч(МетаданныеОбъект) = Тип("ОбъектМетаданных") И НЕ ОбщегоНазначения.ЭтоПеречисление(МетаданныеОбъект) Тогда Для каждого Реквизит Из МетаданныеОбъект.Реквизиты Цикл Если НЕ СтрНачинаетсяС(Реквизит.Имя, "Удалить") Тогда Если Реквизит.Тип.Типы().Количество() = 1 И Реквизит.Тип.Типы()[0] = Тип("ХранилищеЗначения") Тогда Продолжить; КонецЕсли; + ДобавитьРеквизитПоМетаданнымОбъекта(Реквизиты, Реквизит, Префикс, СведенияОСпискеРеквизитов, СведенияОИсключаемыхРеквизитах); КонецЕсли; КонецЦикла; @@ -1878,23 +2088,38 @@ КонецПроцедуры +// Описание +// +// Параметры: +// Реквизиты - см. РеквизитыОбъектаНазначения +// Реквизит - ОбъектМетаданных +// Префикс - Строка +// СведенияОСпискеРеквизитов - Структура: +// * СписокРеквизитов +// * СписокСодержитДанные +// СведенияОИсключаемыхРеквизитах - Структура: +// * СписокРеквизитов +// * СписокСодержитДанные +// Процедура ДобавитьРеквизитПоМетаданнымОбъекта(Реквизиты, Реквизит, Префикс, СведенияОСпискеРеквизитов, СведенияОИсключаемыхРеквизитах); Если ТипЗнч(Реквизит) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда - ИмяРеквизита = Реквизит.Наименование; - Представление = Реквизит.Наименование; - Тип = Реквизит.ТипЗначения; - Формат = Реквизит.ФорматСвойства; + ЗначенияСвойство = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Реквизит, "ИдентификаторДляФормул, ТипЗначения, ФорматСвойства"); + ИмяРеквизита = "~Свойство." + ЗначенияСвойство.ИдентификаторДляФормул; + Представление = Строка(Реквизит); + Тип = ЗначенияСвойство.ТипЗначения; + Формат = ЗначенияСвойство.ФорматСвойства; ИначеЕсли ТипЗнч(Реквизит) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - ИмяРеквизита = Реквизит.Наименование; - Представление = Реквизит.Наименование; - Тип = Новый ОписаниеТипов("Строка"); - Формат = ""; + ИдентификаторДляФормул = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Реквизит, "ИдентификаторДляФормул"); + ИмяРеквизита = "~КИ." + ИдентификаторДляФормул; + Представление = Строка(Реквизит); + Тип = Новый ОписаниеТипов("Строка"); + Формат = ""; Иначе - ИмяРеквизита = Реквизит.Имя; + ИмяРеквизита = Реквизит.Имя; Представление = Реквизит.Представление(); - Тип = Реквизит.Тип; - Формат = Реквизит.Формат; + Тип = Реквизит.Тип; + Формат = Реквизит.Формат; КонецЕсли; Если СведенияОСпискеРеквизитов.СписокСодержитДанные @@ -1908,10 +2133,10 @@ КонецЕсли; НовыйСтрока = Реквизиты.Добавить(); - НовыйСтрока.Имя = Префикс + ИмяРеквизита; + НовыйСтрока.Имя = Префикс + ИмяРеквизита; НовыйСтрока.Представление = Представление; - НовыйСтрока.Тип = Тип; - НовыйСтрока.Формат = Формат; + НовыйСтрока.Тип = Тип; + НовыйСтрока.Формат = Формат; КонецПроцедуры @@ -1977,14 +2202,14 @@ КонецПроцедуры // Параметры: -// ПараметрыТекстаСообщения - см. ШаблоныСообщенийСлужебный.ПараметрыИзТекстаСообщения -// ОшибочныеРеквизиты - Массив - -// СведенияОШаблоне - см. ШаблоныСообщенийСлужебный.СведенияОШаблоне -// Префикс - Строка - Описание +// ПараметрыТекстаСообщения - см. ШаблоныСообщенийСлужебный.ПараметрыИзТекстаСообщения +// ОшибочныеРеквизиты - Массив +// СведенияОШаблоне - см. ШаблоныСообщенийСлужебный.СведенияОШаблоне +// Префикс - Строка // -Процедура ОпределитьОшибочныеРеквизиты(ПараметрыТекстаСообщения, ОшибочныеРеквизиты, СведенияОШаблоне, Префикс = "") Экспорт +Процедура ОпределитьОшибочныеРеквизиты(ПараметрыТекстаСообщения, ОшибочныеРеквизиты, СведенияОШаблоне, Префикс = "") - ИмяУзлаОбщихРеквизитов = ИмяУзлаОбщихРеквизитов(); + ИмяУзлаОбщихРеквизитов = ШаблоныСообщений.ИмяУзлаОбщихРеквизитов(); Для каждого Реквизит Из ПараметрыТекстаСообщения Цикл Если ТипЗнч(Реквизит.Значение) = Тип("Соответствие") Тогда ОпределитьОшибочныеРеквизиты(Реквизит.Значение, ОшибочныеРеквизиты, СведенияОШаблоне, Префикс + Реквизит.Ключ + "."); @@ -2015,37 +2240,53 @@ КонтактнаяИнформацияОбъектов = ЗначенияРеквизитовКонтактнойИнформации(Предмет); Для каждого ПараметрОснования Из ПараметрыТекстаСообщения Цикл - Если ТипЗнч(ПараметрОснования.Значение) = Тип("Соответствие") Тогда - МетаданныеОбъектаПоКлючу = МетаданныеОбъекта.Реквизиты.Найти(ПараметрОснования.Ключ); - Если МетаданныеОбъектаПоКлючу <> Неопределено Тогда - ЗаполнитьРеквизитыСвойствИКонтактнойИнформации(ПараметрОснования.Значение, Предмет[ПараметрОснования.Ключ]); - КонецЕсли; - Иначе - РеквизитНеНайден = Истина; - Если ЗначенияСвойств <> Неопределено Тогда - Для каждого СтрокаСвойство Из ЗначенияСвойств Цикл - Если СтрСравнить(СтрокаСвойство.Свойство.Наименование, ПараметрОснования.Ключ) = 0 Тогда - ПараметрыТекстаСообщения[ПараметрОснования.Ключ] = Строка(СтрокаСвойство.Значение); - РеквизитНеНайден = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; + + Если СтрНачинаетсяС(ПараметрОснования.Ключ, "~Свойство") Тогда - Если РеквизитНеНайден И КонтактнаяИнформацияОбъектов <> Неопределено Тогда + Для каждого ПараметрСвойство Из ПараметрОснования.Значение Цикл + Если ЗначенияСвойств <> Неопределено Тогда + Для каждого СтрокаСвойство Из ЗначенияСвойств Цикл + ОписаниеПараметра = ИмяПараметраБезСтрокиФормата(ПараметрСвойство.Ключ); + ИдентификаторДляФормул = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаСвойство.Свойство, "ИдентификаторДляФормул"); + Если СтрСравнить(ИдентификаторДляФормул, ОписаниеПараметра.Имя) = 0 Тогда + Если ПустаяСтрока(ОписаниеПараметра.Формат) Тогда + ПараметрОснования.Значение[ПараметрСвойство.Ключ] = Строка(СтрокаСвойство.Значение); + Иначе + ПараметрОснования.Значение[ПараметрСвойство.Ключ] = Формат(СтрокаСвойство.Значение, ОписаниеПараметра.Формат); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + ИначеЕсли СтрНачинаетсяС(ПараметрОснования.Ключ, "~КИ") Тогда + + Для каждого ПараметрКонтактнойИнформации Из ПараметрОснования.Значение Цикл + Для каждого КонтактнаяИнформацияОбъекта Из КонтактнаяИнформацияОбъектов Цикл - Если СтрСравнить(КонтактнаяИнформацияОбъекта.Вид.Наименование, ПараметрОснования.Ключ) = 0 Тогда - Если ЗначениеЗаполнено(ПараметрыТекстаСообщения[ПараметрОснования.Ключ]) Тогда - ПредыдущиеЗначение = ПараметрыТекстаСообщения[ПараметрОснования.Ключ] +", "; + ИдентификаторДляФормул = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонтактнаяИнформацияОбъекта.Вид, "ИдентификаторДляФормул"); + + Если СтрСравнить(ИдентификаторДляФормул, ПараметрКонтактнойИнформации.Ключ) = 0 Тогда + Если ЗначениеЗаполнено(ПараметрыТекстаСообщения[ПараметрКонтактнойИнформации.Ключ]) Тогда + ПредыдущиеЗначение = ПараметрыТекстаСообщения[ПараметрКонтактнойИнформации.Ключ] +", "; Иначе ПредыдущиеЗначение = ""; КонецЕсли; - ПараметрыТекстаСообщения[ПараметрОснования.Ключ] = ПредыдущиеЗначение + Строка(КонтактнаяИнформацияОбъекта.Представление); + ПараметрОснования.Значение[ПараметрКонтактнойИнформации.Ключ] = ПредыдущиеЗначение + Строка(КонтактнаяИнформацияОбъекта.Представление); КонецЕсли; КонецЦикла; + + КонецЦикла; + + ИначеЕсли ТипЗнч(ПараметрОснования.Значение) = Тип("Соответствие") Тогда + + МетаданныеОбъектаПоКлючу = МетаданныеОбъекта.Реквизиты.Найти(ПараметрОснования.Ключ); + Если МетаданныеОбъектаПоКлючу <> Неопределено Тогда + ЗаполнитьРеквизитыСвойствИКонтактнойИнформации(ПараметрОснования.Значение, Предмет[ПараметрОснования.Ключ]); КонецЕсли; КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -2075,21 +2316,23 @@ // Работа с реквизитами вспомогательные методы // // Возвращаемое значение: -// ДеревоЗначений - содержит колонки: -// * Имя - Строка - -// * Представление - Строка - -// * Подсказка - Строка - -// * Формат - Строка - -// * Тип - ОписаниеТипов - -// * ПроизвольныйПараметр - Булево - +// ДеревоЗначений: +// * Имя - Строка +// * Представление - Строка +// * Подсказка - Строка +// * Формат - Строка +// * Тип - ОписаниеТипов +// * ПроизвольныйПараметр - Булево // Функция ДеревоРеквизитов() ТипСтрока = Новый ОписаниеТипов("Строка"); + Реквизиты = Новый ДеревоЗначений; Реквизиты.Колонки.Добавить("Имя", ТипСтрока); Реквизиты.Колонки.Добавить("Представление", ТипСтрока); Реквизиты.Колонки.Добавить("Подсказка", ТипСтрока); + Реквизиты.Колонки.Добавить("ПолноеПредставление", ОбщегоНазначения.ОписаниеТипаСтрока(300)); Реквизиты.Колонки.Добавить("Формат", ТипСтрока); Реквизиты.Колонки.Добавить("Тип", Новый ОписаниеТипов("ОписаниеТипов")); Реквизиты.Колонки.Добавить("ПроизвольныйПараметр", Новый ОписаниеТипов("Булево")); @@ -2098,16 +2341,13 @@ КонецФункции -Функция ИмяУзлаОбщихРеквизитов() - Возврат НСтр("ru = 'ОбщиеРеквизиты'"); -КонецФункции - Функция ОбщиеРеквизиты(Реквизиты) Экспорт - УзелРеквизитов = Реквизиты.Строки.Найти(ИмяУзлаОбщихРеквизитов(), "Имя"); + УзелРеквизитов = Реквизиты.Строки.Найти(ШаблоныСообщений.ИмяУзлаОбщихРеквизитов(), "Имя"); Если УзелРеквизитов = Неопределено Тогда УзелРеквизитов = Реквизиты.Строки.Добавить(); - УзелРеквизитов.Имя = ИмяУзлаОбщихРеквизитов(); + УзелРеквизитов.Имя = ШаблоныСообщений.ИмяУзлаОбщихРеквизитов(); + УзелРеквизитов.ПолноеПредставление = ЗаголовокОбщиеРеквизиты(); УзелРеквизитов.Представление = ЗаголовокОбщиеРеквизиты(); КонецЕсли; @@ -2125,7 +2365,20 @@ ДобавитьОбщийРеквизит(ОбщиеРеквизитыСтроки, "АдресБазыВИнтернете", НСтр("ru = 'Адрес базы в Интернете'"), Новый ОписаниеТипов("Строка")); ДобавитьОбщийРеквизит(ОбщиеРеквизитыСтроки, "АдресБазыВЛокальнойСети", НСтр("ru = 'Адрес базы в локальной сети'"), Новый ОписаниеТипов("Строка")); ДобавитьОбщийРеквизит(ОбщиеРеквизитыСтроки, "ТекущийПользователь", НСтр("ru = 'Текущий пользователь'"), Новый ОписаниеТипов("СправочникСсылка.Пользователи")); - РазвернутьРеквизит(ИмяУзлаОбщихРеквизитов() + ".ТекущийПользователь", ОбщиеРеквизитыСтроки.Строки,, "Недействителен, ИдентификаторПользователяИБ, ИдентификаторПользователяСервиса, Подготовлен, Служебный"); + + СписокИсключаемыхРеквизитов = "Недействителен,ИдентификаторПользователяИБ,ИдентификаторПользователяСервиса,Подготовлен,Служебный"; + + Если Метаданные.ОпределяемыеТипы.ФизическоеЛицо.Тип.Типы().Количество() = 1 + И Метаданные.ОпределяемыеТипы.ФизическоеЛицо.Тип.Типы()[0] = Тип("Строка") Тогда + СписокИсключаемыхРеквизитов = СписокИсключаемыхРеквизитов + ",ФизическоеЛицо"; + КонецЕсли; + + Если Метаданные.ОпределяемыеТипы.Подразделение.Тип.Типы().Количество() = 1 + И Метаданные.ОпределяемыеТипы.Подразделение.Тип.Типы()[0] = Тип("Строка") Тогда + СписокИсключаемыхРеквизитов = СписокИсключаемыхРеквизитов + ",Подразделение"; + КонецЕсли; + + РазвернутьРеквизит(ШаблоныСообщений.ИмяУзлаОбщихРеквизитов() + ".ТекущийПользователь", ОбщиеРеквизитыСтроки.Строки,, СписокИсключаемыхРеквизитов); Возврат ОбщиеРеквизиты; @@ -2134,13 +2387,10 @@ Процедура ДобавитьОбщийРеквизит(ОбщиеРеквизиты, Имя, Представление, Тип = Неопределено) НовыйРеквизит = ОбщиеРеквизиты.Строки.Добавить(); - НовыйРеквизит.Имя = ИмяУзлаОбщихРеквизитов() + "." + Имя; + НовыйРеквизит.Имя = ШаблоныСообщений.ИмяУзлаОбщихРеквизитов() + "." + Имя; НовыйРеквизит.Представление = Представление; - Если Тип = Неопределено Тогда - НовыйРеквизит.Тип = Новый ОписаниеТипов("Строка"); - Иначе - НовыйРеквизит.Тип = Тип; - КонецЕсли; + НовыйРеквизит.ПолноеПредставление = ЗаголовокОбщиеРеквизиты() + "." + Представление; + НовыйРеквизит.Тип =?(Тип = Неопределено, Новый ОписаниеТипов("Строка"), Тип); КонецПроцедуры @@ -2200,7 +2450,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); - СписокПрисоединенныхФайлов = Новый Массив; + СписокПрисоединенныхФайлов = Новый Массив; // Массив из ОпределяемыйТип.ПрисоединенныйФайл МодульРаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(ПараметрыОтправки.Шаблон, СписокПрисоединенныхФайлов); Для каждого ПрисоединенныйФайл Из СписокПрисоединенныхФайлов Цикл diff --git a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl index df62f31c4..60e1388c9 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl @@ -56,7 +56,7 @@ // Получает подписи объекта и возвращает их. // // Параметры: -// Объект - Ссылка - ссылка на подписанный объект. +// Объект - ЛюбаяСсылка - ссылка на подписанный объект. // Объект должен иметь реквизит ПодписанЭП. // // Возвращаемое значение: @@ -336,9 +336,13 @@ // Удаляет подпись объекта и записывает его. // // Параметры: -// Объект - Ссылка - по ссылке будет получен объект, заблокирован, изменен, записан. +// Объект - ЛюбаяСсылка - по ссылке будет получен объект, заблокирован, изменен, записан. // Объект должен иметь реквизит ПодписанЭП. -// - Объект - объект будет изменен без блокировки и без записи. +// - СправочникОбъект - объект будет изменен без блокировки и без записи. +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект // // ПорядковыйНомер - Число - порядковый номер подписи. // - Массив - значения указанного выше типа. @@ -516,7 +520,7 @@ Попытка Если ЭтоСсылка Тогда ЗаблокироватьДанныеДляРедактирования(ОбъектСсылка, ВерсияОбъекта, ИдентификаторФормы); - ОбъектДанных = Объект.ПолучитьОбъект(); + ОбъектДанных = Объект.ПолучитьОбъект();// СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект, ПланСчетовОбъект, ПланВидовРасчетаОбъект Иначе ОбъектДанных = Объект; КонецЕсли; @@ -583,11 +587,11 @@ // Параметры: // Сертификат - СертификатКриптографии - сертификат. // - ДвоичныеДанные - двоичные данные сертификата. -// - Строка - Строка (28) - отпечаток сертификата в формате Base64. +// - Строка - строка (28) - отпечаток сертификата в формате Base64. // - Строка - адрес временного хранилища, содержащего двоичные данные сертификата. // // Возвращаемое значение: -// Неопределено - сертификат не найден в справочнике. +// Неопределено - сертификат не существует в справочнике. // СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - ссылка на найденный сертификат. // Функция СсылкаНаСертификат(Знач Сертификат) Экспорт @@ -861,44 +865,62 @@ // См. ЭлектроннаяПодписьКлиент.ПредставлениеСертификата. Функция ПредставлениеСертификата(Сертификат) Экспорт - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСертификата(Сертификат, - ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), МодульЛокализации()); + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСертификата(Сертификат, ЭлектроннаяПодписьСлужебный.ДобавкаВремени()); КонецФункции // См. ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта. Функция ПредставлениеСубъекта(Сертификат) Экспорт - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСубъекта(Сертификат, МодульЛокализации()); + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСубъекта(Сертификат); КонецФункции // См. ЭлектроннаяПодписьКлиент.ПредставлениеИздателя. Функция ПредставлениеИздателя(Сертификат) Экспорт - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеИздателя(Сертификат, МодульЛокализации()); + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеИздателя(Сертификат); КонецФункции // См. ЭлектроннаяПодписьКлиент.СвойстваСертификата. Функция СвойстваСертификата(Сертификат) Экспорт - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(Сертификат, - ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), МодульЛокализации()); + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(Сертификат, ЭлектроннаяПодписьСлужебный.ДобавкаВремени()); КонецФункции // См. ЭлектроннаяПодписьКлиент.СвойстваСубъектаСертификата. Функция СвойстваСубъектаСертификата(Сертификат) Экспорт - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат, МодульЛокализации()); + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат); КонецФункции // См. ЭлектроннаяПодписьКлиент.СвойстваИздателяСертификата. Функция СвойстваИздателяСертификата(Сертификат) Экспорт - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваИздателяСертификата(Сертификат, МодульЛокализации()); + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваИздателяСертификата(Сертификат); + +КонецФункции + +// Ищет текст ошибки в классификаторе типовых проблем при работе с электронной подписью и, +// если находит, возвращает причины ее возникновения и способы устранения. +// +// Параметры: +// ТекстДляПоискаВКлассификаторе - Строка - текст, по которому осуществляется поиск в классификаторе. +// +// Возвращаемое значение: +// Неопределено - ошибка не существует в классификаторе. +// Структура: +// * Причина - Строка - возможные причины возникновения ошибки. +// * Решение - Строка - возможные способы решения возникшей ошибки. +// * СпособУстранения - Строка - идентификатор способа автоматического устранения ошибки. +// * Ссылка - Строка - идентификатора якоря в статье на сайте ИТС. +// +Функция ОшибкаПоКлассификатору(ТекстДляПоискаВКлассификаторе) Экспорт + + Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ТекстДляПоискаВКлассификаторе); КонецФункции @@ -954,7 +976,7 @@ // - Строка - адрес временного хранилища, содержащего двоичные данные. // - Строка - полное имя файла, содержащего двоичные данные, // которые были подписаны. -// - Структура - со свойствами: +// - Структура: // * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего // модуля ЭлектроннаяПодпись. // * КонвертSOAP - Строка - шаблон сообщения . @@ -1244,7 +1266,7 @@ // // Возвращаемое значение: // СертификатКриптографии - сертификат электронной подписи и шифрования. -// Неопределено - сертификат не найден в хранилище. +// Неопределено - сертификат не существует в хранилище. // Функция ПолучитьСертификатПоОтпечатку(Отпечаток, ТолькоВЛичномХранилище) Экспорт @@ -1416,11 +1438,11 @@ // Извлекает сертификаты из данных подписи. // // Параметры: -// Подпись - ДвоичныеДанные - Файл подписи. +// Подпись - ДвоичныеДанные - файл подписи. // // Возвращаемое значение: -// Неопределено - Если при разборе возникла ошибка. -// Структура - Данные подписи. +// Неопределено - если при разборе возникла ошибка. +// Структура: // * Отпечаток - Строка. // * КомуВыданСертификат - Строка. // * ДвоичныеДанныеСертификата - ДвоичныеДанные. @@ -1460,15 +1482,15 @@ // Возвращает настройки текущего пользователя для работы с электронной подписью. // // Возвращаемое значение: -// Структура - Персональные настройки для работы с электронной подписью. -// * ДействияПриСохраненииСЭП - Строка - Что делать при сохранении файлов с электронной подписью: -// ** "Спрашивать" - Показывать диалог выбора подписей для сохранения. -// ** "СохранятьВсеПодписи" - Всегда все подписи. -// * ПутиКПрограммамЭлектроннойПодписиИШифрования - Соответствие - где: +// Структура - персональные настройки для работы с электронной подписью: +// * ДействияПриСохраненииСЭП - Строка - что делать при сохранении файлов с электронной подписью: +// ** "Спрашивать" - показывать диалог выбора подписей для сохранения. +// ** "СохранятьВсеПодписи" - всегда все подписи. +// * ПутиКПрограммамЭлектроннойПодписиИШифрования - Соответствие: // ** Ключ - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования - программа. // ** Значение - Строка - путь к программе на компьютере пользователя. -// * РасширениеДляФайловПодписи - Строка - Расширение для файлов ЭП. -// * РасширениеДляЗашифрованныхФайлов - Строка - Расширение для зашифрованных файлов. +// * РасширениеДляФайловПодписи - Строка - расширение для файлов ЭП. +// * РасширениеДляЗашифрованныхФайлов - Строка - расширение для зашифрованных файлов. // // См. также: // ОбщаяФорма.НастройкиЭлектроннойПодписиИШифрования - место определения данных параметров и @@ -1508,13 +1530,14 @@ // Возвращает общие настройки всех пользователей для работы с электронной подписью. // // Возвращаемое значение: -// Структура - Общие настройки подсистемы для работы с электронной подписью. +// Структура - общие настройки подсистемы для работы с электронной подписью: // * ИспользоватьЭлектронныеПодписи - Булево - если Истина, то электронный подписи используются. // * ИспользоватьШифрование - Булево - если Истина, то шифрование используются. // * ПроверятьЭлектронныеПодписиНаСервере - Булево - если Истина, то электронные подписи и // сертификаты проверяются на сервере. // * СоздаватьЭлектронныеПодписиНаСервере - Булево - если Истина, то электронные подписи создаются // сначала на сервере, а в случае неудачи на клиенте. +// * ОписанияПрограмм - Массив из см. ОписаниеПрограмм - сведения о поддерживаемых программах криптографии. // // См. также: // ОбщаяФорма.НастройкиЭлектроннойПодписиИШифрования - место определения данных параметров и @@ -1619,7 +1642,7 @@ ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Если ВыборкаДетальныеЗаписи.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'Строка с подписью не найдена.'"); + ВызватьИсключение НСтр("ru = 'Строка с подписью не существует.'"); КонецЕсли; МенеджерЗаписи = РегистрыСведений.ЭлектронныеПодписи.СоздатьМенеджерЗаписи(); @@ -1722,13 +1745,4 @@ КонецПроцедуры -Функция МодульЛокализации() - - Если ЭлектроннаяПодписьСлужебныйПовтИсп.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно Тогда - Возврат ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); - КонецЕсли; - Возврат Неопределено; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl index 195e34f75..9f6627198 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl @@ -63,7 +63,7 @@ // выполнения возникает ошибка, тогда в эту структуру нужно вставить свойство ОписаниеОшибки типа Строка. // // Параметры: -// ОписаниеДанных - Структура - со свойствами: +// ОписаниеДанных - Структура: // * Операция - Строка - заголовок формы подписания данных, например Подписание файла. // * ЗаголовокДанных - Строка - заголовок элемента или набора данных, например Файл. // * СообщитьОЗавершении - Булево - (необязательный) - если Ложь, то не будет показано оповещение о успешном @@ -74,7 +74,7 @@ // СертификатыЭлектроннойПодписиИШифрования, которые могут быть выбраны // пользователем. Отбор блокирует возможность выбора других сертификатов // из личного хранилища. -// - Структура - со свойством: +// - Структура: // Организация - ОпределяемыйТип.Организация - содержит ссылку на организацию, по которой // будет установлен отбор в списке сертификатов пользователя. // * БезПодтверждения - Булево - (необязательный) - пропустить подтверждение пользователя, если @@ -89,7 +89,8 @@ // В этом обработчике можно заполнить параметр Данные, если он зависит // от сертификата, который в момент вызова уже вставлен в ОписаниеДанных // как ВыбранныйСертификат (см. ниже). Следует учесть общий подход (см. выше). -// * ВыполнятьНаСервере - Неопределено, Булево - (необязательный) - когда не указан или Неопределено, +// * ВыполнятьНаСервере - Неопределено +// - Булево - (необязательный) - когда не указан или Неопределено, // тогда выполнение будет определено автоматически: если есть сервер, то сначала // на сервере, потом (при неудаче) на клиенте, потом сообщение о двух ошибках. // Когда Истина: если разрешено выполнение на сервере, тогда выполнение @@ -122,11 +123,11 @@ // - ОписаниеОповещения - обработчик получения данных, который возвращает // их в свойстве Данные (см. выше общий подход). В момент вызова // в ОписаниеДанных уже вставлен параметр ВыбранныйСертификат (см. ниже). -// - Структура - со свойствами: +// - Структура: // * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего // модуля ЭлектроннаяПодписьКлиент. // * КонвертSOAP - Строка - шаблон сообщения . -// - Структура - со свойствами: +// - Структура: // * ПараметрыCMS - Структура - как возвращает функция ПараметрыCMS общего // модуля ЭлектроннаяПодписьКлиент. // * Данные - Строка - произвольная строка для подписания, @@ -140,10 +141,13 @@ // свойство ТекущийЭлементНабораДанных, содержащее параметр СвойстваПодписи. // * ВерсияОбъекта - Строка - (необязательный) - версия данных объекта для проверки и // блокировки объекта перед добавлением подписи. -// * Представление - Ссылка, Строка, Структура - (необязательный), если не указан, тогда +// * Представление - Ссылка +// - Строка +// - Структура - (необязательный), если не указан, тогда // представление вычисляется по значению свойства Объект. // Структура содержит свойства: -// * Значение - Ссылка, ОписаниеОповещения - для открытия. +// * Значение - Ссылка +// - ОписаниеОповещения - для открытия. // * Представление - Строка - представление значения. // Вариант 2: // * НаборДанных - Массив - структуры со свойствами, описанными в Варианте 1. @@ -153,7 +157,8 @@ // Если в наборе данных 1 элемент, тогда используется значение // в свойстве Представление свойства НаборДанных, если не указано, тогда // представление вычисляется по значению свойства Объект элемента набора данных. -// * СписокПредставлений - СписокЗначений, Массив - (необязательный) - произвольный список элементов +// * СписокПредставлений - СписокЗначений +// - Массив - (необязательный) - произвольный список элементов // или массив со значениями, как у свойства Представление, которые // сможет открыть пользователь. Если не указан, то заполняется из // свойств Представление или Объект в свойстве НаборДанных. @@ -248,7 +253,7 @@ // выполнения возникает ошибка, тогда в эту структуру нужно вставить свойство ОписаниеОшибки типа Строка. // // Параметры: -// ОписаниеДанных - Структура - со свойствами: +// ОписаниеДанных - Структура: // * ЗаголовокДанных - Строка - заголовок элемента данных, например Файл. // * ПоказатьКомментарий - Булево - (необязательный) - разрешает ввод комментария в форме // добавления подписей. Если не указан, значит Ложь. @@ -258,7 +263,8 @@ // В момент вызова в ОписаниеДанных уже вставлен параметр Подписи. // * ВерсияОбъекта - Строка - (необязательный) - версия данных объекта для проверки и // блокировки объекта перед добавлением подписи. -// * Представление - Ссылка, Строка - (необязательный), если не указан, тогда +// * Представление - Ссылка +// - Строка - (необязательный), если не указан, тогда // представление вычисляется по значению свойства Объект. // * Данные - ДвоичныеДанные - (необязательный) - данные для проверки подписи. // - Строка - (необязательный) - адрес временного хранилища, содержащего двоичные данные. @@ -364,11 +370,12 @@ // выполнения возникает ошибка, тогда в эту структуру нужно вставить свойство ОписаниеОшибки типа Строка. // // Параметры: -// ОписаниеДанных - Структура - со свойствами: +// ОписаниеДанных - Структура: // * ЗаголовокДанных - Строка - заголовок элемента данных, например Файл. // * ПоказатьКомментарий - Булево - (необязательный) - разрешает ввод комментария в форме // добавления подписей. Если не указан, значит Ложь. -// * Представление - Ссылка, Строка - (необязательный), если не указан, тогда +// * Представление - Ссылка +// - Строка - (необязательный), если не указан, тогда // представление вычисляется по значению свойства Объект. // * Объект - Ссылка - ссылка на объект, из которого нужно получить список подписей. // - Строка - адрес временного хранилища массива подписей с составом свойств, @@ -416,7 +423,7 @@ // Это повышает производительность, а также безопасность, когда проверяется // подпись в расшифрованном файле (он не будет передан на сервер). // - Строка - адрес временного хранилища, содержащего исходные двоичные данные. -// - Структура - со свойствами: +// - Структура: // * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего // модуля ЭлектроннаяПодписьКлиент. // * КонвертSOAP - Строка - шаблон сообщения . @@ -453,7 +460,7 @@ // выполнения возникает ошибка, тогда в эту структуру нужно вставить свойство ОписаниеОшибки типа Строка. // // Параметры: -// ОписаниеДанных - Структура - со свойствами: +// ОписаниеДанных - Структура: // * Операция - Строка - заголовок формы шифрования данных, например Шифрование файла. // * ЗаголовокДанных - Строка - заголовок элемента или набора данных, например Файл. // * СообщитьОЗавершении - Булево - (необязательный) - если Ложь, то не будет показано оповещение об успешном @@ -467,7 +474,8 @@ // на сертификаты, тогда будет возможность изменить состав сертификатов. // * БезПодтверждения - Булево - (необязательный) - пропустить подтверждение пользователя, // если указано свойство ОтборСертификатов. -// * ВыполнятьНаСервере - Неопределено, Булево - (необязательный) - когда не указан или Неопределено, +// * ВыполнятьНаСервере - Неопределено +// - Булево - (необязательный) - когда не указан или Неопределено, // тогда выполнение будет определено автоматически: если есть сервер, то сначала // на сервере, потом (при неудаче) на клиенте, потом сообщение о двух ошибках. // Когда Истина: если разрешено выполнение на сервере, тогда выполнение @@ -502,10 +510,13 @@ // Если не указан, то сертификаты шифрования не требуется добавлять. // * ВерсияОбъекта - Строка - (необязательный) - версия данных объекта для проверки и // блокировки объекта перед добавлением сертификатов шифрования. -// * Представление - Ссылка, Строка, Структура - (необязательный), если не указан, тогда +// * Представление - Ссылка +// - Строка +// - Структура - (необязательный), если не указан, тогда // представление вычисляется по значению свойства Объект. // Структура содержит свойства: -// * Значение - Ссылка, ОписаниеОповещения - для открытия. +// * Значение - Ссылка +// - ОписаниеОповещения - для открытия. // * Представление - Строка - представление значения. // // Вариант 2: @@ -516,7 +527,8 @@ // Если в наборе данных 1 элемент, тогда используется значение // в свойстве Представление свойства НаборДанных, если не указано, тогда // представление вычисляется по значению свойства Объект элемента набора данных. -// * СписокПредставлений - СписокЗначений, Массив - (необязательный) - произвольный список элементов +// * СписокПредставлений - СписокЗначений +// - Массив - (необязательный) - произвольный список элементов // или массив со значениями, как у свойства Представление, которые // сможет открыть пользователь. Если не указан, то заполняется из // свойств Представление или Объект в свойстве НаборДанных. @@ -590,7 +602,7 @@ // выполнения возникает ошибка, тогда в эту структуру нужно вставить свойство ОписаниеОшибки типа Строка. // // Параметры: -// ОписаниеДанных - Структура - со свойствами: +// ОписаниеДанных - Структура: // * Операция - Строка - заголовок формы расшифровки данных, например, Расшифровка файла. // * ЗаголовокДанных - Строка - заголовок элемента или набора данных, например Файл. // * СообщитьОЗавершении - Булево - (необязательный) - если Ложь, то не будет показано оповещение о успешном @@ -614,7 +626,8 @@ // В этом обработчике можно заполнить параметр Данные, если необходимо. // В момент вызова в ОписаниеДанных уже вставлен выбранный сертификат, // как ВыбранныйСертификат (см. ниже). Следует учесть общий подход (см. выше). -// * ВыполнятьНаСервере - Неопределено, Булево - (необязательный) - когда не указан или Неопределено, +// * ВыполнятьНаСервере - Неопределено +// - Булево - (необязательный) - когда не указан или Неопределено, // тогда выполнение будет определено автоматически: если есть сервер, то сначала // на сервере, потом (при неудаче) на клиенте, потом сообщение о двух ошибках. // Когда Истина: если разрешено выполнение на сервере, тогда выполнение @@ -665,10 +678,13 @@ // полученное из двоичных данных сертификата. // * Сертификат - ДвоичныеДанные - содержит выгрузку сертификата, // который использовался для шифрования. -// * Представление - Ссылка, Строка, Структура - (необязательный), если не указан, тогда +// * Представление - Ссылка +// - Строка +// - Структура - (необязательный), если не указан, тогда // представление вычисляется по значению свойства Объект. // Структура содержит свойства: -// * Значение - Ссылка, ОписаниеОповещения - для открытия. +// * Значение - Ссылка +// - ОписаниеОповещения - для открытия. // * Представление - Строка - представление значения. // // Вариант 2: @@ -679,7 +695,8 @@ // Если в наборе данных 1 элемент, тогда используется значение // в свойстве Представление свойства НаборДанных, если не указано, тогда // представление вычисляется по значению свойства Объект элемента набора данных. -// * СписокПредставлений - СписокЗначений, Массив - (необязательный) - произвольный список элементов +// * СписокПредставлений - СписокЗначений +// - Массив - (необязательный) - произвольный список элементов // или массив со значениями, как у свойства Представление, которые // сможет открыть пользователь. Если не указан, то заполняется из // свойств Представление или Объект в свойстве НаборДанных. @@ -829,18 +846,26 @@ // * ПроверкиПройдены - Булево - (возвращаемое значение) устанавливается в процедуре параметра ОбработкаРезультата. // * ПроверкиНаСервере - Неопределено - проверка не выполнялась на сервере: // - Структура - со свойствами, как в следующем параметре. -// * ПроверкиНаКлиенте - Структура - со свойствами: -// * НаличиеСертификата - Булево, Неопределено - если Истина, тогда проверка прошла успешно, +// * ПроверкиНаКлиенте - Структура: +// * НаличиеСертификата - Булево +// - Неопределено - если Истина, тогда проверка прошла успешно, // если Ложь - проверка прошла не успешно, если Неопределено - не выполнялась. // Если стандартные проверки скрыты в процедуре ПриСозданииФормыПроверкаСертификата, // общего модуля ЭлектроннаяПодписьПереопределяемый, тогда свойства нет. -// * ДанныеСертификата - Булево, Неопределено - так же, как указано выше. -// * НаличиеПрограммы - Булево, Неопределено - так же, как указано выше. -// * Подписание - Булево, Неопределено - так же, как указано выше. -// * ПроверкаПодписи - Булево, Неопределено - так же, как указано выше. -// * Шифрование - Булево, Неопределено - так же, как указано выше. -// * Расшифровка - Булево, Неопределено - так же, как указано выше. -// * <Имя дополнительной проверки> - Булево, Неопределено - так же, как указано выше. +// * ДанныеСертификата - Булево +// - Неопределено - так же, как указано выше. +// * НаличиеПрограммы - Булево +// - Неопределено - так же, как указано выше. +// * Подписание - Булево +// - Неопределено - так же, как указано выше. +// * ПроверкаПодписи - Булево +// - Неопределено - так же, как указано выше. +// * Шифрование - Булево +// - Неопределено - так же, как указано выше. +// * Расшифровка - Булево +// - Неопределено - так же, как указано выше. +// * <Имя дополнительной проверки> - Булево +// - Неопределено - так же, как указано выше. // * <Имя дополнительной проверки>Ошибка - Строка - заполняется текстом ошибки, если проверка имеет значение // Ложь. // @@ -927,7 +952,8 @@ // Процедура ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(ИмяРаздела = "") Экспорт - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://its.1c.ru/db/metod81#content:5784:hdoc" + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку( + "https://its.1c.ru/db/metod81#content:5784:hdoc" + ?(ПустаяСтрока(ИмяРаздела), "", ":" + ИмяРаздела)); КонецПроцедуры @@ -967,7 +993,7 @@ Функция ПредставлениеСертификата(Сертификат) Экспорт Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСертификата(Сертификат, - ЭлектроннаяПодписьСлужебныйКлиент.ДобавкаВремени(), МодульЛокализации()); + ЭлектроннаяПодписьСлужебныйКлиент.ДобавкаВремени()); КонецФункции @@ -984,7 +1010,7 @@ // Функция ПредставлениеСубъекта(Сертификат) Экспорт - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСубъекта(Сертификат, МодульЛокализации()); + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСубъекта(Сертификат); КонецФункции @@ -999,7 +1025,7 @@ // Функция ПредставлениеИздателя(Сертификат) Экспорт - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеИздателя(Сертификат, МодульЛокализации()); + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеИздателя(Сертификат); КонецФункции @@ -1009,12 +1035,12 @@ // Сертификат - СертификатКриптографии - сертификат криптографии. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Отпечаток - Строка - отпечаток сертификата в формате строки Base64. // * СерийныйНомер - ДвоичныеДанные - свойство сертификата СерийныйНомер. -// * Представление - Строка - см. ЭлектроннаяПодписьКлиент.ПредставлениеСертификата. -// * КомуВыдан - Строка - см. ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта. -// * КемВыдан - Строка - см. ЭлектроннаяПодписьКлиент.ПредставлениеИздателя. +// * Представление - см. ЭлектроннаяПодписьКлиент.ПредставлениеСертификата. +// * КомуВыдан - см. ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта. +// * КемВыдан - см. ЭлектроннаяПодписьКлиент.ПредставлениеИздателя. // * ДатаНачала - Дата - свойство сертификата ДатаНачала в часовом поясе сеанса. // * ДатаОкончания - Дата - свойство сертификата ДатаОкончания в часовом поясе сеанса. // * Назначение - Строка - описание расширенного свойства сертификата EKU. @@ -1024,7 +1050,7 @@ Функция СвойстваСертификата(Сертификат) Экспорт Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(Сертификат, - ЭлектроннаяПодписьСлужебныйКлиент.ДобавкаВремени(), МодульЛокализации()); + ЭлектроннаяПодписьСлужебныйКлиент.ДобавкаВремени()); КонецФункции @@ -1046,7 +1072,7 @@ // // * Страна - Строка - (2) - извлекается из поля C - двухсимвольный код страны // согласно ИСО 3166-1:1997 (ГОСТ 7.67-2003). -// - Неопределено - нужное свойство сертификата не найдено. +// - Неопределено - свойство сертификата не существует. // // * Регион - Строка - (128) - извлекается из поля S - наименование субъекта РФ. // ЮЛ - по адресу местонахождения. @@ -1112,7 +1138,7 @@ // Функция СвойстваСубъектаСертификата(Сертификат) Экспорт - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат, МодульЛокализации()); + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат); КонецФункции @@ -1162,7 +1188,7 @@ // Функция СвойстваИздателяСертификата(Сертификат) Экспорт - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваИздателяСертификата(Сертификат, МодульЛокализации()); + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваИздателяСертификата(Сертификат); КонецФункции @@ -1170,7 +1196,7 @@ // алгоритмов подписания и хеширования. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * XPathSignedInfo - Строка - например, "(//. | //@* | //namespace::*)[ancestor-or-self::*[local-name()='SignedInfo']]". // * XPathПодписываемыйТег - Строка - например, "(//. | //@* | //namespace::*)[ancestor-or-self::soap:Body]". // * ИмяАлгоритмаПодписи - Строка - например, "GOST R 34.10-2001" + Символы.ПС + "GOST R 34.11-2012" + ... @@ -1192,7 +1218,7 @@ // Формирует структуру свойств для подписания данных в формате CMS. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ТипПодписи - Строка - "CAdES-BES" - остальные варианты пока не используются. // * Открепленная - Булево - Ложь (по умолчанию) - включать данные в контейнер подписи. // Истина - не включать данные в контейнер подписи. @@ -1213,7 +1239,7 @@ // Для использования в ЭлектроннаяПодписьКлиент.ЗаписатьСертификатВСправочник // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * Наименование - Строка - представление сертификата в списке. // Значение по умолчанию - "". // * Пользователь - СправочникСсылка.Пользователь - пользователь, которому принадлежит сертификат. @@ -1257,7 +1283,8 @@ // сертификат. // * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта // ОписаниеОповещения. -// Сертификат - ДвоичныеДанные, Строка - двоичные данные сертификата электронной подписи или +// Сертификат - ДвоичныеДанные +// - Строка - двоичные данные сертификата электронной подписи или // адрес данных во временном хранилище. // ПарольСертификата - Строка - пароль сертификата для проверки операций с закрытым ключом. // ДляШифрования - Булево - определяет состав проверок, @@ -1330,7 +1357,7 @@ // Для использования в ЭлектроннаяПодписьКлиент.ДобавитьСертификат // // Возвращаемое значение: -// Структура - со свойствами: +// Структура: // * ВЛичныйСписок - Булево - если параметр принимает значение Истина, то реквизит Пользователь // будет заполнен текущим пользователем, иначе - реквизит не будет заполнен. // Значение по умолчанию - Ложь. @@ -1361,7 +1388,7 @@ // ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после // добавления сертификата: // * Сертификат - Неопределено - при проверке или добавлении сертификата произошла ошибка. -// - Структура с полями: +// - Структура: // ** Ссылка - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - добавленный сертификат. // ** Добавлен - Булево - признак того, что сертификат успешно добавлен. Если сертификат добавляется // с помощью заявления на выпуск нового квалифицированного сертификата, признак принимает @@ -1462,7 +1489,7 @@ // Параметры: // Оповещение - ОписаниеОповещения - оповещение о результате выполнения следующих типов: // СертификатКриптографии - найденный сертификат. -// Неопределено - сертификат не найден в хранилище. +// Неопределено - сертификат не существует в хранилище. // Строка - текст ошибки создания менеджера криптографии (или другая ошибка). // // Отпечаток - Строка - Base64 кодированный отпечаток сертификата. @@ -1488,7 +1515,7 @@ // * Соответствие - Ключ - отпечаток в формате строки Base64, а Значение - Истина; // * Строка - текст ошибки создания менеджера криптографии (или другая ошибка). // -// ТолькоЛичные - Булево - Если Ложь, то к личным сертификатам добавляются сертификаты получателей. +// ТолькоЛичные - Булево - если Ложь, то к личным сертификатам добавляются сертификаты получателей. // // ПоказатьОшибку - Булево - показать ошибку создания менеджера криптографии. // @@ -1510,7 +1537,7 @@ // * Данные - Строка - адрес временного хранилища, содержащего двоичные данные сертификата. // * Организация - СправочникСсылка.Организация - организация к которой относится сертификат. // Отбор - Неопределено - использовать значения по умолчанию, для свойств структуры, описанных ниже. -// - Структура - со свойствами: +// - Структура: // * ПроверятьСрокДействия - Булево - если свойства нет, значит Истина. // * ТолькоСертификатыСЗаполненнойПрограммой - Булево - если свойства нет, значит Истина, // в запросе к справочнику выбираются только те сертификаты, @@ -1603,7 +1630,8 @@ // под паролем вместо флажка ЗапомнитьПароль: // * ТекстПояснения - Строка - только текст; // * ПояснениеГиперссылка - Булево - если истина, то при нажатии на пояснение, вызывать ОбработкаДействия. -// * ТекстПодсказки - Строка, ФорматированнаяСтрока - текст или текст со ссылками. +// * ТекстПодсказки - Строка +// - ФорматированнаяСтрока - текст или текст со ссылками. // * ОбработкаДействия - ОписаниеОповещения - вызывает процедуру, в которую передается // структура со свойствами: // * Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - ссылка @@ -1643,6 +1671,31 @@ КонецПроцедуры +// Показывает результат проверки сертификата, выполнявшейся в фоновом режиме. +// +// Параметры: +// Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - сертификат, +// для которого выполнялась проверка. +// Результат - см. ЭлектроннаяПодписьКлиент.ПроверитьСертификатСправочника.ДополнительныеПараметры.Результат +// ВладелецФормы - ФормаКлиентскогоПриложения - владелец открываемой формы проверки сертификата. +// Заголовок - Строка - заголовок открываемой формы проверки сертификата. +// ОбъединятьРезультаты - Строка - определяет способ отображения результатов проверки в клиент-серверном +// варианте при использовании электронной подписи на сервере. Может принимать +// значения НеОбъединять, ОбъединятьПоИ, ОбъединятьПоИли. Если принимает значение +// ОбъединятьПоИ или ОбъединятьПоИли, результаты проверки будут объединены с +// соответствующим условием. В ином случае результаты будут отображаться +// раздельно для клиентской и серверной проверок. +// ОбработкаЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после +// закрытия формы проверки сертификата. +// +Процедура ПоказатьРезультатПроверкиСертификата(Сертификат, Результат, ВладелецФормы, + Заголовок = "", ОбъединятьРезультаты = "НеОбъединять", ОбработкаЗавершения = Неопределено) Экспорт + + ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьРезультатПроверкиСертификата( + Сертификат, Результат, ВладелецФормы, Заголовок, ОбъединятьРезультаты, ОбработкаЗавершения); + +КонецПроцедуры + #КонецОбласти #КонецОбласти @@ -1774,13 +1827,4 @@ КонецФункции -Функция МодульЛокализации() - - Если СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭлектроннаяПодпись.ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно Тогда - Возврат ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); - КонецЕсли; - Возврат Неопределено; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl index 1ca9a9932..45ee7d63b 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl @@ -32,7 +32,7 @@ // Вызывается из формы ПроверкаСертификата, если при создании формы были добавлены дополнительные проверки. // // Параметры: -// Параметры - Структура - со свойствами: +// Параметры - Структура: // * ОжидатьПродолжения - Булево - (возвращаемое значение) - если Истина, тогда дополнительная проверка // будет выполнятся асинхронно, продолжение возобновится после выполнения оповещения. // Начальное значение Ложь. @@ -52,13 +52,14 @@ // * Пароль - Строка - пароль, введенный пользователем. // - Неопределено - если свойство ВводитьПароль установлено в Ложь в процедуре // ПриСозданииФормыПроверкаСертификата общего модуля ЭлектроннаяПодписьПереопределяемый. -// * РезультатыПроверок - Структура - со свойствами: +// * РезультатыПроверок - Структура: // * Ключ - Строка - имя стандартной или дополнительной проверки или имя ошибки. Ключ свойства, содержащего // ошибку, содержит имя проверки с окончанием Ошибка. // * Значение - Неопределено - проверка не выполнялась (ОписаниеОшибки осталось Неопределено). // - Булево - результат выполнения дополнительной проверки. // - Строка - когда ключ свойства содержит окончание Ошибка и результат выполненной проверки Ложь, // содержит описание возникшей ошибки. +// Процедура ПриДополнительнойПроверкеСертификата(Параметры) Экспорт diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСерверЛокализация/Module.bsl similarity index 83% rename from SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/Module.bsl rename to SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСерверЛокализация/Module.bsl index 52e87de6a..05c00113f 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСерверЛокализация/Module.bsl @@ -8,58 +8,27 @@ #Область СлужебныеПроцедурыИФункции -Функция ПредставлениеСертификата(Сертификат, ДобавкаВремени) Экспорт +Процедура ПриПолученииПредставленияСертификата(Знач Сертификат, Знач ДобавкаВремени, Представление) Экспорт + // Локализация ДатыСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатыСертификата(Сертификат, ДобавкаВремени); - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1, до %2'"), - ПредставлениеСубъекта(Сертификат, Ложь), - Формат(ДатыСертификата.ДатаОкончания, "ДФ=MM.yyyy")); + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1, до %2'"), + ПредставлениеСубъекта(Сертификат, Ложь), Формат(ДатыСертификата.ДатаОкончания, "ДФ=MM.yyyy")); + // Конец Локализация -КонецФункции +КонецПроцедуры -Функция ПредставлениеСубъекта(Сертификат, Отчество = Истина) Экспорт +Процедура ПриПолученииПредставленияСубъекта(Знач Сертификат, Представление) Экспорт - Субъект = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат, ЭлектроннаяПодписьЛокализацияКлиентСервер); + // Локализация + Представление = ПредставлениеСубъекта(Сертификат, Истина); + // Конец Локализация - Представление = ""; - - Если ЗначениеЗаполнено(Субъект.Фамилия) - И ЗначениеЗаполнено(Субъект.Имя) Тогда - - Представление = Субъект.Фамилия + " " + Субъект.Имя; - - ИначеЕсли ЗначениеЗаполнено(Субъект.Фамилия) Тогда - Представление = Субъект.Фамилия; - - ИначеЕсли ЗначениеЗаполнено(Субъект.Имя) Тогда - Представление = Субъект.Имя; - КонецЕсли; - - Если Отчество И ЗначениеЗаполнено(Субъект.Отчество) Тогда - Представление = Представление + " " + Субъект.Отчество; - КонецЕсли; - - Если ЗначениеЗаполнено(Представление) Тогда - Если ЗначениеЗаполнено(Субъект.Организация) Тогда - Представление = Представление + ", " + Субъект.Организация; - КонецЕсли; - Если ЗначениеЗаполнено(Субъект.Подразделение) Тогда - Представление = Представление + ", " + Субъект.Подразделение; - КонецЕсли; - Если ЗначениеЗаполнено(Субъект.Должность) Тогда - Представление = Представление + ", " + Субъект.Должность; - КонецЕсли; - - ИначеЕсли ЗначениеЗаполнено(Субъект.ОбщееИмя) Тогда - Представление = Субъект.ОбщееИмя; - КонецЕсли; - - Возврат Представление; - -КонецФункции +КонецПроцедуры -Функция РасширенныеСвойстваСубъектаСертификата(Субъект) Экспорт +Процедура ПриПолученииРасширенныхСвойствСубъектаСертификата(Знач Субъект, Свойства) Экспорт + // Локализация Свойства = Новый Структура; Свойства.Вставить("ОГРН"); Свойства.Вставить("ОГРНИП"); @@ -114,13 +83,13 @@ Свойства.Фамилия = ПодготовитьСтроку(Субъект.SN); Если Субъект.Свойство("GN") Тогда - GivenName = ПодготовитьСтроку(Субъект.GN); - Позиция = СтрНайти(GivenName, " "); + Отчество = ПодготовитьСтроку(Субъект.GN); + Позиция = СтрНайти(Отчество, " "); Если Позиция = 0 Тогда - Свойства.Имя = GivenName; + Свойства.Имя = Отчество; Иначе - Свойства.Имя = Лев(GivenName, Позиция - 1); - Свойства.Отчество = ПодготовитьСтроку(Сред(GivenName, Позиция + 1)); + Свойства.Имя = Лев(Отчество, Позиция - 1); + Свойства.Отчество = ПодготовитьСтроку(Сред(Отчество, Позиция + 1)); КонецЕсли; КонецЕсли; @@ -164,12 +133,13 @@ КонецЕсли; КонецЕсли; - Возврат Свойства; + // Конец Локализация -КонецФункции +КонецПроцедуры -Функция РасширенныеСвойстваИздателяСертификата(Издатель) Экспорт +Процедура ПриПолученииРасширенныхСвойствИздателяСертификата(Знач Издатель, Свойства) Экспорт + // Локализация Свойства = Новый Структура; Свойства.Вставить("ОГРН"); Свойства.Вставить("ИНН"); @@ -187,8 +157,46 @@ ИначеЕсли Издатель.Свойство("OID1_2_643_3_131_1_1")Тогда Свойства.ИНН = ПодготовитьСтроку(Издатель.OID1_2_643_3_131_1_1); КонецЕсли; + // Конец Локализация - Возврат Свойства; +КонецПроцедуры + +// Локализация +Функция ПредставлениеСубъекта(Знач Сертификат, Знач Отчество) + + Субъект = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат); + + Если ЗначениеЗаполнено(Субъект.Фамилия) + И ЗначениеЗаполнено(Субъект.Имя) Тогда + + Представление = Субъект.Фамилия + " " + Субъект.Имя; + + ИначеЕсли ЗначениеЗаполнено(Субъект.Фамилия) Тогда + Представление = Субъект.Фамилия; + + ИначеЕсли ЗначениеЗаполнено(Субъект.Имя) Тогда + Представление = Субъект.Имя; + КонецЕсли; + + Если Отчество И ЗначениеЗаполнено(Субъект.Отчество) Тогда + Представление = Представление + " " + Субъект.Отчество; + КонецЕсли; + + Если ЗначениеЗаполнено(Представление) Тогда + Если ЗначениеЗаполнено(Субъект.Организация) Тогда + Представление = Представление + ", " + Субъект.Организация; + КонецЕсли; + Если ЗначениеЗаполнено(Субъект.Подразделение) Тогда + Представление = Представление + ", " + Субъект.Подразделение; + КонецЕсли; + Если ЗначениеЗаполнено(Субъект.Должность) Тогда + Представление = Представление + ", " + Субъект.Должность; + КонецЕсли; + + ИначеЕсли ЗначениеЗаполнено(Субъект.ОбщееИмя) Тогда + Представление = Субъект.ОбщееИмя; + КонецЕсли; + Возврат Представление; КонецФункции @@ -215,5 +223,6 @@ Возврат Истина; КонецФункции +// Конец Локализация #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/ЭлектроннаяПодписьЛокализацияКлиентСервер.mdo b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСерверЛокализация/ЭлектроннаяПодписьКлиентСерверЛокализация.mdo similarity index 67% rename from SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/ЭлектроннаяПодписьЛокализацияКлиентСервер.mdo rename to SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСерверЛокализация/ЭлектроннаяПодписьКлиентСерверЛокализация.mdo index e46154b8f..1a0b77891 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 575989bd5..74152ab04 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl @@ -18,7 +18,7 @@ // // Сертификат - СертификатКриптографии - сертификат, для которого создается или обновляется элемент справочника. // -// ПараметрыРеквизитов - ТаблицаЗначений - с колонками: +// ПараметрыРеквизитов - ТаблицаЗначений: // * ИмяРеквизита - Строка - имя реквизита, для которого можно уточнить параметры. // * ТолькоПросмотр - Булево - если установить Истина, редактирование будет запрещено. // * ПроверкаЗаполнения - Булево - если установить Истина, заполнение будет проверяться. @@ -57,7 +57,7 @@ // Параметры: // Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - проверяемый сертификат. // -// ДополнительныеПроверки - ТаблицаЗначений - с полями: +// ДополнительныеПроверки - ТаблицаЗначений: // * Имя - Строка - имя дополнительной проверки, например, АвторизацияВТакском. // * Представление - Строка - пользовательское имя проверки, например, "Авторизация на сервере Такском". // * Подсказка - Строка - подсказка, которая будет показана пользователю при нажатии на знак вопроса. @@ -83,7 +83,7 @@ // Вызывается из формы ПроверкаСертификата, если при создании формы были добавлены дополнительные проверки. // // Параметры: -// Параметры - Структура - со свойствами: +// Параметры - Структура: // * Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - проверяемый сертификат. // * Проверка - Строка - имя проверки, добавленное в процедуре ПриСозданииФормыПроверкаСертификата // общего модуля ЭлектроннаяПодписьПереопределяемый. @@ -98,7 +98,7 @@ // * Пароль - Строка - пароль, введенный пользователем. // - Неопределено - если свойство ВводитьПароль установлено в Ложь в процедуре // ПриСозданииФормыПроверкаСертификата общего модуля ЭлектроннаяПодписьПереопределяемый. -// * РезультатыПроверок - Структура - со свойствами: +// * РезультатыПроверок - Структура: // * Ключ - Строка - имя дополнительной проверки, которая уже выполнена. // * Значение - Неопределено - дополнительная проверка не выполнялась (ОписаниеОшибки осталось Неопределено). // - Булево - результат выполнения дополнительной проверки. diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl index c029e1db6..9bda74952 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl @@ -39,7 +39,7 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - . +// Форма - ФормаКлиентскогоПриложения // Процедура ОформитьСписокПодписей(Форма, ИмяСпискаПодписей) Экспорт @@ -67,13 +67,13 @@ // Возвращает адрес сертификата во временном хранилище и его расширение. // // Параметры: -// СведенияОЭлектроннойПодписи - Структура - Строка с подписями из массива полученного методом ЭлектроннаяПодпись.УстановленныеПодписи. -// УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы. +// СведенияОЭлектроннойПодписи - Структура - строка с подписями из массива полученного методом ЭлектроннаяПодпись.УстановленныеПодписи. +// УникальныйИдентификатор - УникальныйИдентификатор - идентификатор формы. // // Возвращаемое значение: -// Структура - -// * РасширениеСертификата - Строка - Расширение файла сертификата. -// * АдресСертификата - Строка - Адрес во временном хранилище, по которому был помещен сертификат. +// Структура: +// * РасширениеСертификата - Строка - расширение файла сертификата. +// * АдресСертификата - Строка - адрес во временном хранилище, по которому был помещен сертификат. // Функция ДанныеПоСертификату(СведенияОЭлектроннойПодписи, УникальныйИдентификатор) Экспорт @@ -115,7 +115,7 @@ // ИменаФайлов - Массив - имена файлов типа Строка. // // Возвращаемое значение: -// Соответствие - содержит: +// Соответствие: // * Ключ - Строка - имя файла. // * Значение - Массив - имена файлов подписей типа Строка. // @@ -305,6 +305,10 @@ #Область ПоставляемыеДанные // См. ПоставляемыеДанныеПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных. +// +// Параметры: +// Обработчики - см. ПоставляемыеДанныеПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных.Обработчики +// Процедура ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); @@ -319,7 +323,7 @@ // и если да - установить флажок Загружать. // // Параметры: -// Дескриптор - ОбъектXDTO - Дескриптор. +// Дескриптор - ОбъектXDTO // Загружать - Булево - Истина, если загружать, Ложь - иначе. // Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт @@ -331,7 +335,7 @@ // Вызывается после вызова ДоступныНовыеДанные, позволяет разобрать данные. // // Параметры: -// Дескриптор - ОбъектXDTO - Дескриптор. +// Дескриптор - ОбъектXDTO // ПутьКФайлу - Строка - полное имя извлеченного файла. Файл будет автоматически удален // после завершения процедуры. Если в менеджере сервиса не был // указан файл - значение аргумента равно Неопределено. @@ -347,7 +351,7 @@ // Вызывается при отмене обработки данных в случае сбоя. // // Параметры: -// Дескриптор - ОбъектXDTO - Дескриптор. +// Дескриптор - ОбъектXDTO // Процедура ОбработкаДанныхОтменена(Знач Дескриптор) Экспорт @@ -362,7 +366,7 @@ // Возвращает дополнительные параметры создания менеджера криптографии. // // Возвращаемое значение: -// Структура - с полями: +// Структура: // * ПоказатьОшибку - Булево - если Истина, тогда будет вызвано исключение, содержащее описание ошибки. // // * ОписаниеОшибки - Строка - возвращаемое описание ошибки, когда функция возвратила значение Неопределено. @@ -479,7 +483,7 @@ // // Возвращаемое значение: // СертификатКриптографии - сертификат электронной подписи и шифрования. -// Неопределено - сертификат не найден. +// Неопределено - сертификат не существует. // Функция ПолучитьСертификатПоОтпечатку(Отпечаток, ТолькоВЛичномХранилище, ПоказатьОшибку = Истина, Программа = Неопределено, ОписаниеОшибки = "") Экспорт @@ -763,20 +767,18 @@ Ошибка = ПараметрыСоздания.ОписаниеОшибки; Если МенеджерКриптографии <> Неопределено Тогда - ПараметрыДобавленияСвойств = Новый Структура("МодульЛокализации", МодульЛокализации()); - МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты).ПолучитьВсе(); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, - МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); + МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса()); Если Не Личные Тогда МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( ТипХранилищаСертификатовКриптографии.СертификатыПолучателей).ПолучитьВсе(); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, - МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); + МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса()); КонецЕсли; КонецЕсли; @@ -788,7 +790,7 @@ МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов"); МассивСертификатов = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); - ПараметрыДобавленияСвойств = Новый Структура("ВОблачномСервисе, МодульЛокализации", Истина, МодульЛокализации()); + ПараметрыДобавленияСвойств = Новый Структура("ВОблачномСервисе", Истина); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); @@ -852,9 +854,9 @@ // Только для внутреннего использования. // // Параметры: -// Контекст - Структура - со свойствами: -// * ОшибкаНаСервере - Структура - со свойствами: -// ** Ошибки - Массив - . +// Контекст - Структура: +// * ОшибкаНаСервере - Структура: +// ** Ошибки - Массив // Функция ЗаписатьСертификатПослеПроверки(Контекст) Экспорт @@ -1244,6 +1246,16 @@ КонецФункции // Только для внутреннего использования. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения: +// * СертификатПараметрыРеквизитов - Структура: +// ** Ключ - Строка +// ** Значение - Структура: +// *** ЗначениеЗаполнения - Структура +// Программа - Неопределено +// ДляШифрования - Булево +// Процедура ЗаписатьСертификатВСправочник(Форма, Программа = Неопределено, ДляШифрования = Ложь) Экспорт ДополнительныеПараметры = Новый Структура; @@ -1287,7 +1299,7 @@ // Только для внутреннего использования. // // Параметры: -// Список - ДинамическийСписок - . +// Список - ДинамическийСписок // Процедура УстановитьУсловноеОформлениеСпискаСертификатов(Список, ИсключитьЗаявления = Ложь) Экспорт @@ -1329,7 +1341,7 @@ // Только для внутреннего использования. // // Параметры: -// ДанныеСертификата - ДвоичныеДанные - . +// ДанныеСертификата - ДвоичныеДанные // Функция СертификатИзДвоичныхДанных(ДанныеСертификата) Экспорт @@ -1396,13 +1408,10 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - . +// Форма - ФормаКлиентскогоПриложения +// Процедура НастроитьПояснениеВводаПароля(Форма, ИмяЭлементаУсиленнаяЗащитаЗакрытогоКлюча = "", ИмяЭлементаПояснениеУсиленногоПароля = "") Экспорт - Если Не ЭлектроннаяПодписьСлужебныйКлиентСервер.ИнтерактивныйРежимДоступен() Тогда - Возврат; - КонецЕсли; - Если ЗначениеЗаполнено(ИмяЭлементаУсиленнаяЗащитаЗакрытогоКлюча) Тогда Элемент = Форма.Элементы[ИмяЭлементаУсиленнаяЗащитаЗакрытогоКлюча]; // ПолеФормы Элемент.Заголовок = НСтр("ru = 'Вводить пароль в программе электронной подписи'"); @@ -1433,7 +1442,7 @@ // // Параметры: // КонвертSOAP - Строка - шаблон формируемого сообщения в формате SOAP -// ДанныеАлгоритмаПодписания - Структура с полями: +// ДанныеАлгоритмаПодписания - Структура: // * XPathПодписываемыйТег - Строка - запрос для получения тега подписи. // * XPathSignedInfo - Строка - запрос для получения тега подписываемой информации. // * OIDАлгоритмаХеширования - Строка - идентификатор алгоритма хеширования. @@ -1448,7 +1457,7 @@ // Функция Подписать(Знач КонвертSOAP, ДанныеАлгоритмаПодписания, СертификатКриптографии, МенеджерКриптографии) Экспорт - XPathSignedInfo = ДанныеАлгоритмаПодписания.XPathSignedInfo; + XPathПодписываемаяИнформация = ДанныеАлгоритмаПодписания.XPathSignedInfo; XPathПодписываемыйТег = ДанныеАлгоритмаПодписания.XPathПодписываемыйТег; Пароль = МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу; @@ -1479,7 +1488,7 @@ АтрибутSignatureValue = РезультатSign( ОбъектКомпоненты, - C14N(ОбъектКомпоненты, КонвертSOAP, XPathSignedInfo), + C14N(ОбъектКомпоненты, КонвертSOAP, XPathПодписываемаяИнформация), СертификатКриптографии, Пароль); @@ -1491,9 +1500,10 @@ // В параметре возвращается сертификат, с помощью которого была произведена подпись (если сертификат включен в данные подписи). // Если проверка подписи завершилась неудачно, генерируется исключительная ситуация. +// Функция ПроверитьПодпись(Знач КонвертSOAP, ДанныеАлгоритмаПодписания, МенеджерКриптографии) Экспорт - XPathSignedInfo = ДанныеАлгоритмаПодписания.XPathSignedInfo; + XPathПодписываемаяИнформация = ДанныеАлгоритмаПодписания.XPathSignedInfo; XPathПодписываемыйТег = ДанныеАлгоритмаПодписания.XPathПодписываемыйТег; ОбъектКомпоненты = ОбъектВнешнейКомпонентыXMLDSig(); @@ -1507,7 +1517,7 @@ ПодписьВерна = РезультатVerifySign( ОбъектКомпоненты, - C14N(ОбъектКомпоненты, КонвертSOAP, XPathSignedInfo), + C14N(ОбъектКомпоненты, КонвертSOAP, XPathПодписываемаяИнформация), ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "SignatureValue"), СертификатКриптографииBase64, СвойстваКриптопровайдера.Тип); @@ -1620,7 +1630,7 @@ ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя; ОписаниеПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеПрограммыПоИмениКриптопровайдера(ИмяКриптопровайдера, - ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм); + ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм);// см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм Если ОписаниеПрограммы = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось определить тип криптопровайдера %1'"), ИмяКриптопровайдера); @@ -1826,14 +1836,6 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Функция МодульЛокализации() Экспорт - - Возврат ?(ЭлектроннаяПодписьСлужебныйПовтИсп.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно, - ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"), - Неопределено); - -КонецФункции - // Для процедуры ОбновитьСписокСертификатов. Процедура ОбработатьДобавленныеСертификаты(ТаблицаСвойствСертификатов, КромеУжеДобавленных, ОтборПоОрганизации = Неопределено) @@ -1899,13 +1901,15 @@ КонецПроцедуры -// Для процедуры СохраненныеСвойстваСертификата. Процедура ЗаполнитьРеквизит(СохраненныеСвойства, ПараметрыРеквизитов, ИмяРеквизита) - Если ПараметрыРеквизитов.Свойство(ИмяРеквизита) - И ПараметрыРеквизитов[ИмяРеквизита].ЗначениеЗаполнения <> Неопределено Тогда - - СохраненныеСвойства[ИмяРеквизита] = ПараметрыРеквизитов[ИмяРеквизита].ЗначениеЗаполнения; + Если ПараметрыРеквизитов.Свойство(ИмяРеквизита) Тогда + ПараметрыРеквизита = ПараметрыРеквизитов[ИмяРеквизита]; // Структура + Если ПараметрыРеквизита.ЗначениеЗаполнения <> Неопределено Тогда + + СохраненныеСвойства[ИмяРеквизита] = ПараметрыРеквизита.ЗначениеЗаполнения; + + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -2448,10 +2452,10 @@ КонецФункции // Возвращаемое значение: -// ТаблицаЗначений - Колонки: -// * АлгоритмыПодписи - Массив - . -// * АлгоритмыХеширования - Массив - . -// * АлгоритмыШифрования - Массив - . +// ТаблицаЗначений: +// * АлгоритмыПодписи - Массив +// * АлгоритмыХеширования - Массив +// * АлгоритмыШифрования - Массив // Функция ПоставляемыеНастройкиПрограмм() Экспорт diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl index 58501948e..bac625105 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl @@ -35,14 +35,10 @@ Ошибка = ПараметрыСоздания.ОписаниеОшибки; Если МенеджерКриптографии <> Неопределено Тогда - МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты).ПолучитьВсе(); - - ПараметрыДобавленияСвойств = Новый Структура("МодульЛокализации",ЭлектроннаяПодписьСлужебный.МодульЛокализации()); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, МассивСертификатов, Истина, - ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); - + ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса()); КонецЕсли; КонецЕсли; @@ -52,9 +48,7 @@ МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов"); МассивСертификатов = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); - ПараметрыДобавленияСвойств = Новый Структура("ВОблачномСервисе, МодульЛокализации", - Истина, ЭлектроннаяПодписьСлужебный.МодульЛокализации()); - + ПараметрыДобавленияСвойств = Новый Структура("ВОблачномСервисе", Истина); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, МассивСертификатов, Истина, ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); @@ -395,8 +389,10 @@ КонецПроцедуры +// Параметры: +// Контекст - см. ЭлектроннаяПодписьСлужебныйКлиент.КонтекстПоискаУстановленныхПрограмм +// Процедура НайтиУстановленныеПрограммыНаСервереЦиклНачало(Контекст) - Если Контекст.Программы.Количество() <= Контекст.Индекс + 1 Тогда // После цикла. Возврат; @@ -449,7 +445,8 @@ ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииДобавитьОшибку(Контекст.ОписаниеОшибок.Ошибки, Неопределено, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), Истина, Истина, Истина); - ТекстОшибки = НСтр("ru = 'Не установлена на сервере.'") + " " + Контекст.ОписаниеОшибок.Ошибки[0].Описание; + СвойстваОшибки = Контекст.ОписаниеОшибок.Ошибки[0]; // см. ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваОшибки + ТекстОшибки = НСтр("ru = 'Не установлена на сервере.'") + " " + СвойстваОшибки.Описание; ОбновитьЗначение(Контекст.ОписаниеПрограммы.РезультатПроверкиНаСервере, ТекстОшибки); НайтиУстановленныеПрограммыНаСервереЦиклНачало(ПараметрыВыполнения); Возврат; @@ -548,7 +545,7 @@ КонецЕсли; КонецЦикла; - ОписанияНастроенныхПрограмм = ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм; + ОписанияНастроенныхПрограмм = ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм; // Массив из см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм Для Каждого ПоставляемаяПрограмма Из ПоставляемыеНастройки Цикл ОписаниеПрограммы = РасширенноеОписаниеПрограммы(); @@ -595,6 +592,11 @@ #Область ДиагностикаЭлектроннойПодписи +// Возвращаемое значение: +// Массив Из Структура: +// * Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования +// * Представление - Строка +// Функция ИспользуемыеПрограммы() Экспорт Запрос = Новый Запрос; @@ -678,7 +680,8 @@ ДанныеФайла = ИнформацияОФайле.Данные; КонецЕсли; - ИнформацияОФайле.Данные.Записать(ВременныйФайл); + ДанныеДляЗаписи = ИнформацияОФайле.Данные; // ДвоичныеДанные + ДанныеДляЗаписи.Записать(ВременныйФайл); Архив.Добавить(ВременныйФайл); КонецПроцедуры diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl index 8fee487f7..7f6aa765d 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl @@ -10,10 +10,6 @@ Функция ИспользуетсяИнтерактивныйРежимКриптографии(МенеджерКриптографии) Экспорт - Если Не ЭлектроннаяПодписьСлужебныйКлиентСервер.ИнтерактивныйРежимДоступен() Тогда - Возврат Ложь; - КонецЕсли; - Если МенеджерКриптографии.ИспользованиеИнтерактивногоРежима = ИспользованиеИнтерактивногоРежимаКриптографииИспользовать() Тогда Возврат Истина; КонецЕсли; @@ -107,11 +103,11 @@ Возврат; КонецЕсли; - Контекст = Новый Структура; - Контекст.Вставить("Индекс", -1); - Контекст.Вставить("Программы", ДополнительныеПараметры.Программы); - Контекст.Вставить("ПроверятьНаСервере", ДополнительныеПараметры.ПроверятьНаСервере); - Контекст.Вставить("ОповещениеОЗавершении", ДополнительныеПараметры.ОповещениеОЗавершении); + Контекст = КонтекстПоискаУстановленныхПрограмм(); + Контекст.Индекс = -1; + Контекст.Программы = ДополнительныеПараметры.Программы; + Контекст.ПроверятьНаСервере = ДополнительныеПараметры.ПроверятьНаСервере; + Контекст.ОповещениеОЗавершении = ДополнительныеПараметры.ОповещениеОЗавершении; НайтиУстановленныеПрограммыЦиклНачало(Контекст); @@ -161,7 +157,7 @@ Процедура НайтиУстановленныеПрограммыЦиклПродолжение(Менеджер, Контекст) Экспорт ОписаниеПрограммы = Контекст.ОписаниеПрограммы; - Ошибки = Контекст.ПараметрыВыполнения.ОписаниеОшибок.Ошибки; + Ошибки = Контекст.ПараметрыВыполнения.ОписаниеОшибок.Ошибки; // Массив Из ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваОшибки Если Менеджер <> Неопределено Тогда ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверкиНаКлиенте, ""); @@ -210,10 +206,10 @@ // Процедура ОткрытьСертификат(ДанныеСертификата, ОткрытьДанные = Ложь) Экспорт - Контекст = Новый Структура; - Контекст.Вставить("ДанныеСертификата", ДанныеСертификата); - Контекст.Вставить("ОткрытьДанные", ОткрытьДанные); - Контекст.Вставить("АдресСертификата", Неопределено); + Контекст = КонтекстОткрытияСертификата(); + Контекст.ДанныеСертификата = ДанныеСертификата; + Контекст.ОткрытьДанные = ОткрытьДанные; + Контекст.АдресСертификата = Неопределено; Если ТипЗнч(ДанныеСертификата) = Тип("СертификатКриптографии") Тогда ДанныеСертификата.НачатьВыгрузку(Новый ОписаниеОповещения( @@ -224,6 +220,20 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * АдресСертификата - Строка +// * ОткрытьДанные - см. ОткрытьСертификат.ОткрытьДанные +// * ДанныеСертификата - см. ОткрытьСертификат.ДанныеСертификата +// +Функция КонтекстОткрытияСертификата() + Контекст = Новый Структура; + Контекст.Вставить("ДанныеСертификата"); + Контекст.Вставить("ОткрытьДанные"); + Контекст.Вставить("АдресСертификата"); + Возврат Контекст; +КонецФункции + // Продолжение процедуры ОткрытьСертификат. Процедура ОткрытьСертификатПослеВыгрузкиСертификата(ВыгруженныеДанные, Контекст) Экспорт @@ -326,14 +336,14 @@ // Процедура СохранитьСертификат(Оповещение, Сертификат, ИмяФайлаБезРасширения = "") Экспорт - Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("Сертификат", Сертификат); - Контекст.Вставить("ИмяФайлаБезРасширения", ИмяФайлаБезРасширения); - Контекст.Вставить("АдресСертификата", Неопределено); + Контекст = КонтекстСохраненияСертификата(); + Контекст.Оповещение = Оповещение; + Контекст.Сертификат = Сертификат; + Контекст.ИмяФайлаБезРасширения = ИмяФайлаБезРасширения; + Контекст.АдресСертификата = Неопределено; - Если ТипЗнч(Контекст.Сертификат) = Тип("СертификатКриптографии") Тогда - Контекст.Сертификат.НачатьВыгрузку(Новый ОписаниеОповещения( + Если ТипЗнч(Сертификат) = Тип("СертификатКриптографии") Тогда + Сертификат.НачатьВыгрузку(Новый ОписаниеОповещения( "СохранитьСертификатПослеВыгрузкиСертификата", ЭтотОбъект, Контекст)); Иначе СохранитьСертификатПродолжение(Контекст); @@ -341,10 +351,28 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * АдресСертификата - Строка +// * ИмяФайлаБезРасширения - Строка +// * Сертификат - см. СохранитьСертификат.Сертификат +// * Оповещение - см. СохранитьСертификат.Оповещение +// +Функция КонтекстСохраненияСертификата() + Контекст = Новый Структура; + Контекст.Вставить("Оповещение"); + Контекст.Вставить("Сертификат"); + Контекст.Вставить("ИмяФайлаБезРасширения"); + Контекст.Вставить("АдресСертификата"); + + Возврат Контекст; +КонецФункции + // Продолжение процедуры СохранитьСертификат. Процедура СохранитьСертификатПослеВыгрузкиСертификата(ВыгруженныеДанные, Контекст) Экспорт Контекст.АдресСертификата = ПоместитьВоВременноеХранилище(ВыгруженныеДанные, Новый УникальныйИдентификатор); + Контекст.Вставить("УдалитьСертификатИзВременногоХранилища", Истина); СохранитьСертификатПродолжение(Контекст); КонецПроцедуры @@ -357,7 +385,7 @@ ИначеЕсли ТипЗнч(Контекст.Сертификат) = Тип("ДвоичныеДанные") Тогда Контекст.АдресСертификата = ПоместитьВоВременноеХранилище(Контекст.Сертификат, Новый УникальныйИдентификатор); - Контекст.Вставить("ОчищатьХранилище", Истина); + Контекст.Вставить("УдалитьСертификатИзВременногоХранилища", Истина); ИначеЕсли ТипЗнч(Контекст.Сертификат) = Тип("Строка") И ЭтоАдресВременногоХранилища(Контекст.Сертификат) Тогда @@ -385,6 +413,11 @@ КонецПроцедуры // Продолжение процедуры СохранитьСертификат. +// +// Параметры: +// ПолученныеФайлы - Массив из ОписаниеПереданногоФайла +// Контекст - Структура +// Процедура СохранитьСертификатПослеПолученияФайлов(ПолученныеФайлы, Контекст) Экспорт Если ПолученныеФайлы = Неопределено @@ -397,7 +430,7 @@ ПолученныеФайлы[0].Имя); КонецЕсли; - Если Контекст.Свойство("ОчищатьХранилище") Тогда + Если Контекст.Свойство("УдалитьСертификатИзВременногоХранилища") Тогда УдалитьИзВременногоХранилища(Контекст.АдресСертификата); КонецЕсли; @@ -424,6 +457,11 @@ КонецПроцедуры // Продолжение процедуры СохранитьПодпись. +// +// Параметры: +// ПолученныеФайлы - Массив из ОписаниеПереданногоФайла +// Контекст - Структура +// Процедура СохранитьПодписьПослеПолученияФайла(ПолученныеФайлы, Контекст) Экспорт Если ПолученныеФайлы = Неопределено @@ -442,7 +480,7 @@ // Параметры: // Оповещение - ОписаниеОповещения - оповещение о результате выполнения следующих типов: // СертификатКриптографии - найденный сертификат. -// Неопределено - сертификат не найден в хранилище. +// Неопределено - сертификат не существует в хранилище. // Строка - текст ошибки создания менеджера криптографии (или другая ошибка). // Структура - описание ошибки в виде структуры. // @@ -604,7 +642,7 @@ // * Соответствие - Ключ - отпечаток в формате строки Base64, а Значение - Истина; // * Строка - текст ошибки создания менеджера криптографии (или другая ошибка). // -// ТолькоЛичные - Булево - Если Ложь, то к личным сертификатам добавляются сертификаты получателей. +// ТолькоЛичные - Булево - если Ложь, то к личным сертификатам добавляются сертификаты получателей. // // ПоказатьОшибку - Булево - показать ошибку создания менеджера криптографии. // @@ -907,7 +945,7 @@ Если Сертификат = Неопределено Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, - НСтр("ru = 'Сертификат не найден в данных подписи.'")); + НСтр("ru = 'Сертификат не существует в данных подписи.'")); Возврат; КонецЕсли; @@ -961,14 +999,14 @@ // Процедура ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии = Неопределено, НаДату = Неопределено, ПоказатьОшибку = Истина) Экспорт - Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("Сертификат", Сертификат); - Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии); - Контекст.Вставить("НаДату", НаДату); - Контекст.Вставить("ПоказатьОшибку", ПоказатьОшибку); - Контекст.Вставить("ОписаниеОшибкиНаКлиенте", Неопределено); - Контекст.Вставить("ОписаниеОшибкиНаСервере", Неопределено); + Контекст = КонтекстПроверкиСертификата(); + Контекст.Оповещение = Оповещение; + Контекст.Сертификат = Сертификат; + Контекст.МенеджерКриптографии = МенеджерКриптографии; + Контекст.НаДату = НаДату; + Контекст.ПоказатьОшибку = ПоказатьОшибку; + Контекст.ОписаниеОшибкиНаКлиенте = Неопределено; + Контекст.ОписаниеОшибкиНаСервере = Неопределено; Если Контекст.МенеджерКриптографии = Неопределено И ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда @@ -988,6 +1026,29 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * ОписаниеОшибкиНаСервере - Строка +// * ОписаниеОшибкиНаКлиенте - Строка +// * ПоказатьОшибку - см. ПроверитьСертификат.ПоказатьОшибку +// * НаДату - см. ПроверитьСертификат.НаДату +// * МенеджерКриптографии - см. ПроверитьСертификат.МенеджерКриптографии +// * Сертификат - см. ПроверитьСертификат.Сертификат +// * Оповещение - см. ПроверитьСертификат.Оповещение +// +Функция КонтекстПроверкиСертификата() + Контекст = Новый Структура; + Контекст.Вставить("Оповещение"); + Контекст.Вставить("Сертификат"); + Контекст.Вставить("МенеджерКриптографии"); + Контекст.Вставить("НаДату"); + Контекст.Вставить("ПоказатьОшибку"); + Контекст.Вставить("ОписаниеОшибкиНаКлиенте"); + Контекст.Вставить("ОписаниеОшибкиНаСервере"); + + Возврат Контекст; +КонецФункции + // Продолжение процедуры ПроверитьСертификат. Процедура ПроверитьСертификатПослеВыгрузкиСертификата(Сертификат, Контекст) Экспорт @@ -1015,12 +1076,7 @@ Контекст.Сертификат.НачатьВыгрузку(Новый ОписаниеОповещения( "ПроверитьСертификатПослеОпределенияАлгоритмаПодписания", ЭтотОбъект, Контекст)); Иначе - - Контекст.Вставить("АлгоритмПодписи", - ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(Контекст.Сертификат)); - - ПродолжитьПроверкуСертификатаНаКлиенте(Контекст); - + ПроверитьСертификатПослеОпределенияАлгоритмаПодписания(Контекст.Сертификат, Контекст); КонецЕсли; КонецПроцедуры @@ -1143,8 +1199,8 @@ // Продолжение процедуры ПроверитьСертификат. // // Параметры: -// Контекст - Структура - со свойствами: -// * Сертификат - СертификатКриптографии - . +// Контекст - Структура: +// * Сертификат - СертификатКриптографии // Процедура ПроверитьСертификатВМоделиСервиса(Контекст) @@ -1218,7 +1274,7 @@ // Возвращает дополнительные параметры создания менеджера криптографии. // // Возвращаемое значение: -// Структура - с полями: +// Структура: // * ПоказатьОшибку - Булево - если Истина, тогда будет открыта форма ОшибкаОбращенияКПрограмме // из которой можно перейти к списку установленных программ // в форму персональных настроек на страницу "Установленные программы", @@ -1254,7 +1310,6 @@ // МенеджерКриптографии - инициализированный менеджер криптографии. // Строка - описание ошибки при создании менеджера криптографии. // Структура - см. ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок -// если ПоказатьОшибку = Неопределено. // // Операция - Строка - если не пустая, то должна содержать одну из строк, которые определяют // операцию для вставки в описание ошибки: Подписание, ПроверкаПодписи, Шифрование, @@ -1267,23 +1322,48 @@ ПараметрыСозданияМенеджераКриптографии = ПараметрыСозданияМенеджераКриптографии(); КонецЕсли; - Контекст = Новый Структура; - Контекст.Вставить("Операция", Операция); - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("Программа", - ПараметрыСозданияМенеджераКриптографии.Программа); - Контекст.Вставить("ПоказатьОшибку", - ПараметрыСозданияМенеджераКриптографии.ПоказатьОшибку); - Контекст.Вставить("АлгоритмПодписи", - ПараметрыСозданияМенеджераКриптографии.АлгоритмПодписи); - Контекст.Вставить("ИнтерактивныйРежим", - ПараметрыСозданияМенеджераКриптографии.ИнтерактивныйРежим); + Контекст = КонтекстСоздатьМенеджерКриптографии(); + Контекст.Операция = Операция; + Контекст.Оповещение = Оповещение; + Контекст.Программа = + ПараметрыСозданияМенеджераКриптографии.Программа; + Контекст.ПоказатьОшибку = + ПараметрыСозданияМенеджераКриптографии.ПоказатьОшибку; + Контекст.АлгоритмПодписи = + ПараметрыСозданияМенеджераКриптографии.АлгоритмПодписи; + Контекст.ИнтерактивныйРежим = + ПараметрыСозданияМенеджераКриптографии.ИнтерактивныйРежим; НачатьПодключениеРасширенияРаботыСКриптографией(Новый ОписаниеОповещения( "СоздатьМенеджерКриптографииПослеПодключенияРасширенияРаботыСКриптографией", ЭтотОбъект, Контекст)); КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * ИнтерактивныйРежим - Булево +// * АлгоритмПодписи - Строка +// * ПоказатьОшибку - Булево +// * Программа - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования +// * Оповещение - ОписаниеОповещения +// * Операция - см. СоздатьМенеджерКриптографии.Операция +// * ОписаниеПрограмм - Массив из см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм +// * СвойстваОшибки - Массив из Структура: +// ** Описание - Строка +// +Функция КонтекстСоздатьМенеджерКриптографии() + + Контекст = Новый Структура; + Контекст.Вставить("Операция"); + Контекст.Вставить("Оповещение"); + Контекст.Вставить("Программа"); + Контекст.Вставить("ПоказатьОшибку"); + Контекст.Вставить("АлгоритмПодписи"); + Контекст.Вставить("ИнтерактивныйРежим"); + Возврат Контекст; + +КонецФункции + // Продолжение процедуры СоздатьМенеджерКриптографии. Процедура СоздатьМенеджерКриптографииПослеПодключенияРасширенияРаботыСКриптографией(Подключено, Контекст) Экспорт @@ -1413,6 +1493,11 @@ КонецПроцедуры // Продолжение процедуры СоздатьМенеджерКриптографии. +// +// Параметры: +// ИнформацияМодуля - ИнформацияМодуляКриптографии +// Контекст - Структура +// Процедура СоздатьМенеджерКриптографииЦиклПослеПолученияИнформации(ИнформацияМодуля, Контекст) Экспорт Если ИнформацияМодуля = Неопределено Тогда @@ -1456,9 +1541,7 @@ Контекст.Менеджер = Новый МенеджерКриптографии; - Если Не Контекст.ИнтерактивныйРежим - Или Не ЭлектроннаяПодписьСлужебныйКлиентСервер.ИнтерактивныйРежимДоступен() Тогда - + Если Не Контекст.ИнтерактивныйРежим Тогда Контекст.Менеджер.НачатьИнициализацию(Новый ОписаниеОповещения( "СоздатьМенеджерКриптографииЦиклПослеИнициализации", ЭтотОбъект, Контекст, "СоздатьМенеджерКриптографииЦиклПриОшибкеИнициализации", ЭтотОбъект), @@ -1483,9 +1566,10 @@ СтандартнаяОбработка = Ложь; Контекст.Менеджер = Неопределено; + ОписаниеПрограммы = Контекст.ОписаниеПрограммы; // см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииДобавитьОшибку( Контекст.ОписаниеОшибок.Ошибки, - Контекст.ОписаниеПрограммы.Ссылка, + ОписаниеПрограммы.Ссылка, КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Ложь, Истина, Истина); @@ -1545,7 +1629,7 @@ // Только для внутреннего назначения. // // Параметры: -// ПараметрыСоздания - Структура - со свойствами: +// ПараметрыСоздания - Структура: // * ВЛичныйСписок - Булево - если не указано, значит Ложь. // Если Истина, то реквизит Пользователь будет заполнено текущим пользователем. // * Организация - СправочникСсылка.Организации - значение по умолчанию. @@ -1737,8 +1821,8 @@ // Продолжение процедуры ПолучитьСвойстваСертификатовНаКлиенте. // // Параметры: -// Контекст - Структура - со свойствами: -// * МассивСертификатов - Массив - . +// Контекст - Структура: +// * МассивСертификатов - Массив // Процедура ПолучитьСвойстваСертификатовНаКлиентеПослеПолученияВсехСертификатовПолучателей(Массив, Контекст) Экспорт @@ -1753,9 +1837,7 @@ // Продолжение процедуры ПолучитьСвойстваСертификатовНаКлиенте. Процедура ПолучитьСвойстваСертификатовНаКлиентеПослеПолученияВсех(Контекст) - ПараметрыДобавленияСвойств = Новый Структура("ТолькоОтпечатки, МодульЛокализации", - Контекст.ТолькоОтпечатки, МодульЛокализации()); - + ПараметрыДобавленияСвойств = Новый Структура("ТолькоОтпечатки", Контекст.ТолькоОтпечатки); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( Контекст.Результат.СвойстваСертификатовНаКлиенте, Контекст.МассивСертификатов, @@ -1763,7 +1845,6 @@ ДобавкаВремени(), ОбщегоНазначенияКлиент.ДатаСеанса(), ПараметрыДобавленияСвойств); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Результат); КонецПроцедуры @@ -2036,15 +2117,15 @@ Если ЗначениеЗаполнено(НедоступныеСертификаты) Тогда Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда Если ЗначениеЗаполнено(ДоступныеСертификаты) Тогда - Заголовок = НСтр("ru = 'Следующие разрешенные сертификаты не найдены ни на компьютере, ни на сервере:'"); + Заголовок = НСтр("ru = 'Следующие разрешенные сертификаты не установлены ни на компьютере, ни на сервере:'"); Иначе - Заголовок = НСтр("ru = 'Ни один из следующих разрешенных сертификатов не найден ни на компьютере, ни на сервере:'"); + Заголовок = НСтр("ru = 'Ни один из следующих разрешенных сертификатов не установлен ни на компьютере, ни на сервере:'"); КонецЕсли; Иначе Если ЗначениеЗаполнено(ДоступныеСертификаты) Тогда - Заголовок = НСтр("ru = 'Следующие разрешенные сертификаты не найдены на компьютере:'"); + Заголовок = НСтр("ru = 'Следующие разрешенные сертификаты не установлены на компьютере:'"); Иначе - Заголовок = НСтр("ru = 'Ни один из следующих разрешенных сертификатов не найден на компьютере:'"); + Заголовок = НСтр("ru = 'Ни один из следующих разрешенных сертификатов не установлен на компьютере:'"); КонецЕсли; КонецЕсли; Текст = Текст + Символы.ПС + Символы.ПС + Заголовок + Символы.ПС + СокрЛП(НедоступныеСертификаты); @@ -2164,7 +2245,6 @@ Иначе Контекст.ФормаДобавления.Открыть(); Если Контекст.ФормаДобавления.Открыта() Тогда - Контекст.ФормаДобавления.ОбновитьОтображениеДанных(); Возврат; КонецЕсли; КонецЕсли; @@ -2186,11 +2266,12 @@ // выполнения возникает ошибка, тогда в эту структуру нужно вставить свойство ОписаниеОшибки типа Строка. // // Параметры: -// ОписаниеДанных - Структура - со свойствами: +// ОписаниеДанных - Структура: // * ЗаголовокДанных - Строка - заголовок элемента данных, например Файл. // * ПоказатьКомментарий - Булево - (необязательный) - разрешает ввод комментария в форме // добавления подписей. Если не указан, значит Ложь. -// * Представление - Ссылка, Строка - (необязательный), если не указан, тогда +// * Представление - Ссылка +// - Строка - (необязательный), если не указан, тогда // представление вычисляется по значению свойства Объект. // * Объект - Ссылка - ссылка на объект с табличной частью ЭлектронныеПодписи, // из которой нужно получить список подписей. @@ -2602,7 +2683,7 @@ // Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью. // // Параметры: -// ПолученныеФайлы - Массив из ОписаниеПередаваемогоФайла - . +// ПолученныеФайлы - Массив из ОписаниеПередаваемогоФайла // Процедура СохранитьДанныеВместеСПодписьюПослеПолученияФайлов(ПолученныеФайлы, Контекст) Экспорт @@ -2616,11 +2697,9 @@ КонецЦикла; КонецЕсли; - Текст = НСтр("ru = 'Папка с файлами:'") + Символы.ПС; - Текст = Текст + Контекст.ПутьКФайлам; - Текст = Текст + Символы.ПС + Символы.ПС; - - Текст = Текст + НСтр("ru = 'Файлы:'") + Символы.ПС; + Текст = НСтр("ru = 'Папка с файлами:'") + Символы.ПС + + Контекст.ПутьКФайлам + Символы.ПС + Символы.ПС + + НСтр("ru = 'Файлы:'") + Символы.ПС; Для Каждого КлючИЗначение Из ИменаПолученныхФайлов Цикл Текст = Текст + КлючИЗначение.Ключ + Символы.ПС; @@ -2628,7 +2707,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Текст", Текст); - ПараметрыФормы.Вставить("ПапкаСФайлами", Контекст.СоставИмениФайлаДанных.Путь); + ПараметрыФормы.Вставить("КаталогСФайлами", Контекст.СоставИмениФайлаДанных.Путь); ОткрытьФорму("ОбщаяФорма.ОтчетОСохраненииФайловЭлектронныхПодписей", ПараметрыФормы,,,,, Новый ОписаниеОповещения("СохранитьДанныеВместеСПодписьюПослеЗакрытияОтчета", ЭтотОбъект, Контекст)); @@ -2664,9 +2743,9 @@ // БезВопроса - Булево - если указано Истина, тогда вопроса показано не будет. // Требуется, если пользователь нажал на кнопку Установить расширение. // -// ОбработчикРезультата - ОписаниеОповещения - Описание процедуры, принимающей результат выбора. -// ТекстВопроса - Строка - Текст вопроса. -// ЗаголовокВопроса - Строка - Заголовок вопроса. +// ОбработчикРезультата - ОписаниеОповещения - описание процедуры, принимающей результат выбора. +// ТекстВопроса - Строка - текст вопроса. +// ЗаголовокВопроса - Строка - заголовок вопроса. // // Значение первого параметра, возвращаемого в обработчик вызывающего кода: // РасширениеУстановлено @@ -2870,7 +2949,7 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - . +// Форма - ФормаКлиентскогоПриложения // Процедура ОбработатьПарольВФорме(Форма, ВнутренниеДанные, СвойстваПароля, ДополнительныеПараметры = Неопределено, НовыйПароль = Null) Экспорт @@ -2930,10 +3009,13 @@ ЗаполнитьЗначенияСвойств(ТекущиеСвойства, Форма); ЭлементПароль = Элементы.Пароль; // ПолеФормы + ЭлементЗапомнитьПароль = Элементы.ЗапомнитьПароль; Если ТекущиеСвойства.ВыполнятьВМоделиСервиса И ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда ЭлементПароль.Доступность = Ложь; + ЭлементЗапомнитьПароль.Доступность = Ложь; + Элементы.Страницы.Видимость = Истина; Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПояснениеУсиленногоПароля; Элементы.ПояснениеУсиленногоПароля.Подсказка = НСтр("ru = 'Облачный сервис вышлет одноразовый пароль по SMS или E-Mail, @@ -2942,6 +3024,8 @@ ИначеЕсли ДополнительныеПараметры.УсиленнаяЗащитаЗакрытогоКлюча Тогда ЭлементПароль.Доступность = Ложь; + ЭлементЗапомнитьПароль.Доступность = Ложь; + Элементы.Страницы.Видимость = Истина; Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПояснениеУсиленногоПароля; Элементы.ПояснениеУсиленногоПароля.Подсказка = НСтр("ru = 'Пароль запрашивает программа электронной подписи, а не программа 1С:Предприятие, @@ -2951,6 +3035,7 @@ Если ДополнительныеПараметры.ПарольУстановленПрограммно Тогда + Элементы.Страницы.Видимость = Истина; Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПояснениеУстановленногоПароля; ПояснениеПароля = ДополнительныеПараметры.ПояснениеПароля; @@ -2960,14 +3045,19 @@ ЭлементПояснениеУстановленногоПароляРасширеннаяПодсказка = Элементы.ПояснениеУстановленногоПароляРасширеннаяПодсказка; // ПолеФормы ЭлементПояснениеУстановленногоПароляРасширеннаяПодсказка.Заголовок = ПояснениеПароля.ТекстПодсказки; СвойстваПароля.ОбработкаПоясненияПароля = ПояснениеПароля.ОбработкаДействия; + ЭлементПароль.Доступность = Истина; + ЭлементЗапомнитьПароль.Доступность = Истина; Иначе ЭлементПароль.Доступность = Не ДополнительныеПараметры.ПарольВПамяти; + ЭлементЗапомнитьПароль.Доступность = Не ДополнительныеПараметры.ПарольВПамяти; + Если Элементы.Найти("СтраницаЗапоминаниеПароля") = Неопределено Тогда Элементы.Страницы.Видимость = Ложь; Иначе + Элементы.Страницы.Видимость = Истина; Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаЗапоминаниеПароля; КонецЕсли; @@ -3042,7 +3132,7 @@ // Только для внутреннего использования. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - . +// Форма - ФормаКлиентскогоПриложения // Функция ПолноеПредставлениеДанных(Форма) Экспорт @@ -3141,8 +3231,8 @@ // Продолжение процедуры ВыполнитьНаСтороне. // // Параметры: -// Контекст - Структура - со свойствами: -// * СертификатКриптографии - СертификатКриптографии - . +// Контекст - Структура: +// * СертификатКриптографии - СертификатКриптографии // Процедура ВыполнитьНаСторонеПослеПоискаСертификата(Результат, Контекст) Экспорт @@ -3183,7 +3273,7 @@ // Продолжение процедуры ВыполнитьНаСтороне. // // Параметры: -// Контекст - Структура - . +// Контекст - Структура // Процедура ВыполнитьНаСторонеПодготовкаСертификатовЦиклНачало(Контекст) @@ -3203,8 +3293,8 @@ // Продолжение процедуры ВыполнитьНаСтороне. // // Параметры: -// Контекст - Структура - со свойствами: -// * СертификатыШифрования - Массив - . +// Контекст - Структура: +// * СертификатыШифрования - Массив // Процедура ВыполнитьНаСторонеПодготовкаСертификатовПослеИнициализацииСертификата(СертификатКриптографии, Контекст) Экспорт @@ -3488,6 +3578,13 @@ КонецПроцедуры // Продолжение процедуры ВыполнитьНаСтороне. +// +// Параметры: +// ДвоичныеДанные - Структура: +// * ИнформацияОбОшибке - Структура: +// ** Описание - Строка +// Контекст - Структура +// Процедура ВыполнитьНаСторонеЦиклПослеОперацииНаКлиенте(ДвоичныеДанные, Контекст) Экспорт Если Контекст.Свойство("МенеджерКриптографии") И Контекст.МенеджерКриптографии = "СервисКриптографии" Тогда @@ -3906,8 +4003,8 @@ // // Параметры: // ОповещенияПриЗавершении - ОписаниеОповещения - процедура, которая будет вызвана после подписания сообщения. -// КонвертSOAP - Строка - Шаблон подписываемого сообщения. -// СертификатКриптографии - СертификатКриптографии - . +// КонвертSOAP - Строка - шаблон подписываемого сообщения. +// СертификатКриптографии - СертификатКриптографии // МенеджерКриптографии - МенеджерКриптографии. // Процедура НачатьВыгрузкуСертификатаКриптографииДляПодписанияXMLDSig(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, СертификатКриптографии, МенеджерКриптографии) @@ -3938,8 +4035,8 @@ // // Параметры: // ОповещенияПриЗавершении - ОписаниеОповещения - процедура, которая будет вызвана после подписания сообщения. -// КонвертSOAP - Строка - Шаблон подписываемого сообщения. -// ДанныеАлгоритмаПодписания - Структура со свойствами: +// КонвертSOAP - Строка - шаблон подписываемого сообщения. +// ДанныеАлгоритмаПодписания - Структура: // МенеджерКриптографии - МенеджерКриптографии. // Процедура НачатьИнициализациюСертификатаКриптографииДляПроверкиПодписиXMLDSig(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, МенеджерКриптографии) @@ -3974,8 +4071,8 @@ // // Параметры: // ОповещенияПриЗавершении - ОписаниеОповещения - процедура, которая будет вызвана после подписания сообщения. -// КонвертSOAP - Строка - Шаблон подписываемого сообщения. -// СертификатКриптографии - СертификатКриптографии -. +// КонвертSOAP - Строка - шаблон подписываемого сообщения. +// СертификатКриптографии - СертификатКриптографии // МенеджерКриптографии - МенеджерКриптографии. // Процедура НачатьВыгрузкуСертификатаКриптографииДляПодписанияCMS(ОповещенияПриЗавершении, Данные, ПараметрыCMS, СертификатКриптографии, МенеджерКриптографии) @@ -4006,8 +4103,8 @@ // // Параметры: // ОповещенияПриЗавершении - ОписаниеОповещения - процедура, которая будет вызвана после подписания сообщения. -// КонвертSOAP - Строка - Шаблон подписываемого сообщения. -// ДанныеАлгоритмаПодписания - Структура со свойствами: +// КонвертSOAP - Строка - шаблон подписываемого сообщения. +// ДанныеАлгоритмаПодписания - Структура: // МенеджерКриптографии - МенеджерКриптографии. // Процедура НачатьИнициализациюСертификатаКриптографииДляПроверкиПодписиCMS(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, МенеджерКриптографии) @@ -4025,7 +4122,8 @@ ОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакета( Новый ОписаниеОповещения("ПослеПодключенияКомпоненты", ЭтотОбъект, Контекст), - "XMLDSignAddIn", "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Макет.КомпонентаXMLDSig", + "XMLDSignAddIn", + "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Макет.КомпонентаXMLDSig", ПараметрыПодключения); КонецПроцедуры @@ -4061,36 +4159,39 @@ КонецПроцедуры +// Параметры: +// ИнформацияМодуляКриптографии - ИнформацияМодуляКриптографии +// Контекст - Структура +// Процедура ПослеПолученияИнформацииМодуляКриптографии(ИнформацияМодуляКриптографии, Контекст) Экспорт ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя; ОписаниеПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеПрограммыПоИмениКриптопровайдера( - ИмяКриптопровайдера, ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм); + ИмяКриптопровайдера, ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм); // см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм - Если ОписаниеПрограммы = Неопределено Тогда + Если ОписаниеПрограммы <> Неопределено Тогда + Контекст.ТипКриптопровайдера = ОписаниеПрограммы.ТипПрограммы; + Контекст.ИмяКриптопровайдера = ИмяКриптопровайдера; + + Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + ПутьКПрограмме = ""; + Иначе + ПерсональныеНастройки = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки(); + ПутьКПрограмме = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить( + ОписаниеПрограммы.Ссылка); + КонецЕсли; + Контекст.ПутьКриптопровайдера = ПутьКПрограмме; + + Контекст.ОбъектКомпоненты.НачатьУстановкуПутьККриптопровайдеру( + Новый ОписаниеОповещения("ПослеУстановкиСвойстваКомпонентыПутьККриптопровайдеру", ЭтотОбъект, Контекст), + Контекст.ПутьКриптопровайдера); + Иначе ЗавершитьОперациюСОшибкой(Контекст, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось определить тип криптопровайдера %1'"), ИнформацияМодуляКриптографии.Имя)); - Возврат; КонецЕсли; - Контекст.ТипКриптопровайдера = ОписаниеПрограммы.ТипПрограммы; - Контекст.ИмяКриптопровайдера = ИмяКриптопровайдера; - - Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда - ПутьКПрограмме = ""; - Иначе - ПерсональныеНастройки = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки(); - ПутьКПрограмме = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить( - ОписаниеПрограммы.Ссылка); - КонецЕсли; - Контекст.ПутьКриптопровайдера = ПутьКПрограмме; - - Контекст.ОбъектКомпоненты.НачатьУстановкуПутьККриптопровайдеру( - Новый ОписаниеОповещения("ПослеУстановкиСвойстваКомпонентыПутьККриптопровайдеру", ЭтотОбъект, Контекст), - Контекст.ПутьКриптопровайдера); - КонецПроцедуры Процедура ПослеУстановкиСвойстваКомпонентыПутьККриптопровайдеру(Контекст) Экспорт @@ -4098,8 +4199,7 @@ Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда Контекст.ОбъектКомпоненты.НачатьУстановкуЗапретитьПользовательскийИнтерфейс( Новый ОписаниеОповещения("ПослеУстановкиСвойстваЗапретитьПользовательскийИнтерфейс", ЭтотОбъект, Контекст), - ЭлектроннаяПодписьСлужебныйКлиентСервер.ИнтерактивныйРежимДоступен() - И Не ИспользуетсяИнтерактивныйРежимКриптографии(Контекст.МенеджерКриптографии)); + Не ИспользуетсяИнтерактивныйРежимКриптографии(Контекст.МенеджерКриптографии)); Иначе ПослеУстановкиСвойстваЗапретитьПользовательскийИнтерфейс(Контекст); КонецЕсли; @@ -4773,14 +4873,6 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Функция МодульЛокализации() - - Возврат ?(СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭлектроннаяПодпись.ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно, - ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"), - Неопределено); - -КонецФункции - // Для процедур УстановитьПарольСертификата, ОткрытьНовуюФорму, ВыборСертификатаДляПодписанияИлиРасшифровки, // ПроверитьСертификатСправочника. // @@ -5177,6 +5269,12 @@ КонецПроцедуры // Продолжение процедуры ВыполнитьНаСтороне. +// +// Параметры: +// РезультатПоиска - Структура: +// * ОписаниеОшибки - ИнформацияОбОшибке +// Контекст - Структура +// Процедура ВыполнитьНаСторонеПослеВыгрузкиСертификатаВМоделиСервиса(РезультатПоиска, Контекст) Экспорт Если Не РезультатПоиска.Выполнено Тогда @@ -5268,6 +5366,13 @@ КонецПроцедуры // Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. +// +// Параметры: +// Контекст - Структура: +// * ОшибкаНаКлиенте - Структура: +// ** Ошибки - Массив - ИнформацияОбОшибке +// * ОписаниеПрограмм - см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм +// Процедура ДобавитьСертификатЦиклНачало(Контекст) Если Контекст.ОписанияПрограмм.Количество() <= Контекст.Индекс + 1 Тогда @@ -5281,10 +5386,11 @@ Контекст.Индекс = Контекст.Индекс + 1; Контекст.ОписаниеПрограммы = Контекст.ОписанияПрограмм[Контекст.Индекс]; + ОписаниеПрограммы = Контекст.ОписаниеПрограммы; // см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм ПараметрыСоздания = ПараметрыСозданияМенеджераКриптографии(); ПараметрыСоздания.ПоказатьОшибку = Неопределено; - ПараметрыСоздания.Программа = Контекст.ОписаниеПрограммы.Ссылка; + ПараметрыСоздания.Программа = ОписаниеПрограммы.Ссылка; ПараметрыСоздания.ИнтерактивныйРежим = Контекст.ДополнительныеПараметры.УсиленнаяЗащитаЗакрытогоКлюча; ПараметрыСоздания.АлгоритмПодписи = Контекст.АлгоритмПодписи; @@ -5297,9 +5403,9 @@ // Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. // // Параметры: -// Контекст - Структура - со свойствами: -// * ОшибкаНаКлиенте - Структура - со свойствами: -// ** Ошибки - Массив -. +// Контекст - Структура: +// * ОшибкаНаКлиенте - Структура: +// ** Ошибки - Массив // Процедура ДобавитьСертификатЦиклПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт @@ -5350,9 +5456,10 @@ // Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. // // Параметры: -// Контекст - Структура - со свойствами: -// * ОшибкаНаКлиенте - Структура - со свойствами: -// ** Ошибки - Массив -. +// Контекст - Структура: +// * ОшибкаНаКлиенте - Структура: +// ** Ошибки - Массив +// * ОписаниеПрограмм - см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм // Процедура ДобавитьСертификатЦиклПослеОшибкиШифрования(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт @@ -5372,7 +5479,8 @@ // Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. // // Параметры: -// Контекст - Структура - . +// Контекст - Структура: +// * ОписаниеОшибки - см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм // Процедура ДобавитьСертификатЦиклПослеПодписания(ДанныеПодписи, Контекст) Экспорт @@ -5428,7 +5536,7 @@ // Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. // // Параметры: -// Контекст - Структура - . +// Контекст - Структура // Процедура ДобавитьСертификатЦиклПослеРасшифровки(РасшифрованныеДанные, Контекст) Экспорт @@ -5501,15 +5609,18 @@ // // Параметры: // Причина - Строка - причина сбора технической информации. -// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - содержит описание процедуры, +// ОбработчикЗавершения - ОписаниеОповещения +// - Неопределено - содержит описание процедуры, // которая будет вызвана после сохранения архива на диск со следующими параметрами: // * АрхивСохранен - Булево - результат сохранения архива на диск. // * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта // ОписаниеОповещения. -// ДополнительныеФайлы - Структура, Массив - дополнительные данные, которые необходимо поместить +// ДополнительныеФайлы - Структура +// - Массив - дополнительные данные, которые необходимо поместить // в архив, или массив таких данных. Поля структуры: // * Имя - Строка - имя файла с расширением. -// * Данные - ДвоичныеДанные, Строка - данные файла или адрес данных во временном хранилище. +// * Данные - ДвоичныеДанные +// - Строка - данные файла или адрес данных во временном хранилище. // Процедура СформироватьТехническуюИнформацию(Причина, ОбработчикЗавершения = Неопределено, @@ -5567,6 +5678,14 @@ КонецФункции + +// Описание +// +// Параметры: +// МенеджерКриптографии - МенеджерКриптографии +// Контекст - Структура: +// * Индекс - Число +// Процедура ИнформацияОПрограммахПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст) Экспорт Контекст.ДиагностическаяИнформация = Контекст.ДиагностическаяИнформация @@ -5607,4 +5726,38 @@ #КонецОбласти +Процедура ПоказатьРезультатПроверкиСертификата(Сертификат, Результат, ВладелецФормы, + Заголовок = "", ОбъединятьРезультаты = "НеОбъединять", ОбработкаЗавершения = Неопределено) Экспорт + + СерверныеПараметры = Новый Структура; + СерверныеПараметры.Вставить("ЗаголовокФормы", Заголовок); + СерверныеПараметры.Вставить("ПроверкаПриВыборе"); + СерверныеПараметры.Вставить("ПараметрыДополнительныхПроверок"); + СерверныеПараметры.Вставить("Сертификат", Сертификат); + СерверныеПараметры.Вставить("РезультатПроверки", Результат); + СерверныеПараметры.Вставить("ОбъединятьРезультаты", ОбъединятьРезультаты); + + ФормаПередачаПараметров().ОткрытьНовуюФорму("ПроверкаСертификата", + СерверныеПараметры, Новый Структура, ОбработкаЗавершения, ВладелецФормы); + +КонецПроцедуры + +// Возвращаемое значение: +// Структура: +// * ОповещениеОЗавершении - ОписаниеОповещения +// * ПроверятьНаСервере - Булево +// * Программы - см. ЭлектроннаяПодписьСлужебныйВызовСервера.ЗаполнитьСписокПрограммДляПоиска +// * Индекс - Число +// +Функция КонтекстПоискаУстановленныхПрограмм() + Контекст = Новый Структура; + + Контекст.Вставить("Индекс"); + Контекст.Вставить("Программы"); + Контекст.Вставить("ПроверятьНаСервере"); + Контекст.Вставить("ОповещениеОЗавершении"); + + Возврат Контекст; +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl index 9772880f7..01e69cb31 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl @@ -56,15 +56,8 @@ КонецФункции -Функция ИнтерактивныйРежимДоступен() Экспорт - - СистемнаяИнформация = Новый СистемнаяИнформация; - Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.13.1549") >= 0; - -КонецФункции - // Возвращаемое значение: -// Структура - содержит ошибки выполнения операций программами. +// Структура - содержит ошибки выполнения операций программами: // * ОписаниеОшибки - Строка - полное описание ошибки, когда оно возвращается строкой. // * ЗаголовокОшибки - Строка - заголовок ошибки, который соответствует операции // когда операция одна (не заполнен, когда операций несколько). @@ -124,6 +117,14 @@ КонецФункции // Только для внутреннего использования. +// +// Параметры: +// Программа - Строка +// Ошибки - Массив +// ОписанияПрограмм - Массив из см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм +// Возвращаемое значение: +// Массив из см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм +// Функция МенеджерКриптографииОписанияПрограмм(Программа, Ошибки, Знач ОписанияПрограмм) Экспорт Если Программа <> Неопределено Тогда @@ -154,6 +155,17 @@ КонецФункции // Только для внутреннего использования. +// +// Параметры: +// ОписаниеПрограммы - см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм +// ЭтоLinux - Булево +// Ошибки - Массив +// ЭтоСервер - Булево +// ПутиКПрограммамНаСерверахLinux - Строка +// Возвращаемое значение: +// Структура, Неопределено: +// * ПутьКПрограмме - Строка +// Функция МенеджерКриптографииСвойстваПрограммы(ОписаниеПрограммы, ЭтоLinux, Ошибки, ЭтоСервер, ПутиКПрограммамНаСерверахLinux) Экспорт @@ -224,6 +236,14 @@ КонецФункции // Только для внутреннего использования. +// +// Параметры: +// ОписаниеПрограммы - см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм +// Менеджер - МенеджерКриптографии +// Ошибки - Массив +// Возвращаемое значение: +// Булево +// Функция МенеджерКриптографииАлгоритмыУстановлены(ОписаниеПрограммы, Менеджер, Ошибки) Экспорт Если ВыполненОбходНарушенияОбратнойСовместимостиВViPNetCSP_4_4(ОписаниеПрограммы, Менеджер) Тогда @@ -325,14 +345,29 @@ КонецФункции // Только для внутреннего использования. +// +// Параметры: +// ОписаниеПрограммы - см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм +// Ошибки - Массив +// ЭтоСервер - Булево +// Процедура МенеджерКриптографииПрограммаНеНайдена(ОписаниеПрограммы, Ошибки, ЭтоСервер) Экспорт МенеджерКриптографииДобавитьОшибку(Ошибки, ОписаниеПрограммы.Ссылка, - НСтр("ru = 'Программа не найдена на компьютере.'"), ЭтоСервер, Истина); + НСтр("ru = 'Программа не установлена на компьютере.'"), ЭтоСервер, Истина); КонецПроцедуры // Только для внутреннего использования. +// +// Параметры: +// ОписаниеПрограммы - см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограмм +// ИмяПрограммыПолученное - Строка +// Ошибки - Массив +// ЭтоСервер - Булево +// Возвращаемое значение: +// Булево +// Функция МенеджерКриптографииИмяПрограммыСовпадает(ОписаниеПрограммы, ИмяПрограммыПолученное, Ошибки, ЭтоСервер) Экспорт Если КодСимвола(Прав(ИмяПрограммыПолученное, 1)) = 0 Тогда @@ -623,19 +658,13 @@ ТолькоОтпечатки = Ложь; ВОблачномСервисе = Ложь; - МодульЛокализации = Неопределено; Если Параметры <> Неопределено Тогда - Если Параметры.Свойство("ТолькоОтпечатки") Тогда ТолькоОтпечатки = Параметры.ТолькоОтпечатки; КонецЕсли; Если Параметры.Свойство("ВОблачномСервисе") Тогда ВОблачномСервисе = Параметры.ВОблачномСервисе; КонецЕсли; - Если Параметры.Свойство("МодульЛокализации") Тогда - МодульЛокализации = Параметры.МодульЛокализации; - КонецЕсли; - КонецЕсли; Если ТолькоОтпечатки Тогда @@ -677,11 +706,9 @@ СвойстваСертификата = Новый Структура; СвойстваСертификата.Вставить("Отпечаток", Отпечаток); - СвойстваСертификата.Вставить("Представление", - ПредставлениеСертификата(ТекущийСертификат, ДобавкаВремени, МодульЛокализации)); - - СвойстваСертификата.Вставить("КемВыдан", ПредставлениеИздателя(ТекущийСертификат, МодульЛокализации)); + ПредставлениеСертификата(ТекущийСертификат, ДобавкаВремени)); + СвойстваСертификата.Вставить("КемВыдан", ПредставлениеИздателя(ТекущийСертификат)); Если ТипЗнч(Таблица) = Тип("Массив") Тогда Таблица.Добавить(СвойстваСертификата); @@ -700,7 +727,7 @@ // Только для внутреннего использования. // // Параметры: -// Массив - Массив - . +// Массив - Массив // Процедура ДобавитьОтпечаткиСертификатов(Массив, МассивСертификатов, ДобавкаВремени, ТекущаяДатаСеанса) Экспорт @@ -871,16 +898,14 @@ КонецФункции // См. ЭлектроннаяПодписьКлиент.ПредставлениеСертификата. -Функция ПредставлениеСертификата(Сертификат, ДобавкаВремени, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт +Функция ПредставлениеСертификата(Сертификат, ДобавкаВремени) Экспорт Представление = ""; - Если МодульЭлектроннаяПодписьЛокализацияКлиентСервер <> Неопределено Тогда - Представление = МодульЭлектроннаяПодписьЛокализацияКлиентСервер.ПредставлениеСертификата(Сертификат, ДобавкаВремени); - КонецЕсли; + ЭлектроннаяПодписьКлиентСерверЛокализация.ПриПолученииПредставленияСертификата(Сертификат, ДобавкаВремени, Представление); Если ПустаяСтрока(Представление) Тогда ДатыСертификата = ДатыСертификата(Сертификат, ДобавкаВремени); Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1, до %2'"), - ПредставлениеСубъекта(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер), + ПредставлениеСубъекта(Сертификат), Формат(ДатыСертификата.ДатаОкончания, "ДФ=MM.yyyy")); КонецЕсли; Возврат Представление; @@ -888,14 +913,12 @@ КонецФункции // См. ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта. -Функция ПредставлениеСубъекта(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт +Функция ПредставлениеСубъекта(Сертификат) Экспорт Представление = ""; - Если МодульЭлектроннаяПодписьЛокализацияКлиентСервер <> Неопределено Тогда - Представление = МодульЭлектроннаяПодписьЛокализацияКлиентСервер.ПредставлениеСубъекта(Сертификат); - КонецЕсли; + ЭлектроннаяПодписьКлиентСерверЛокализация.ПриПолученииПредставленияСубъекта(Сертификат, Представление); Если ПустаяСтрока(Представление) Тогда - Субъект = СвойстваСубъектаСертификата(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер); + Субъект = СвойстваСубъектаСертификата(Сертификат); Если ЗначениеЗаполнено(Субъект.ОбщееИмя) Тогда Представление = Субъект.ОбщееИмя; КонецЕсли; @@ -905,9 +928,9 @@ КонецФункции // См. ЭлектроннаяПодписьКлиент.ПредставлениеИздателя. -Функция ПредставлениеИздателя(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт +Функция ПредставлениеИздателя(Сертификат) Экспорт - Издатель = СвойстваИздателяСертификата(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер); + Издатель = СвойстваИздателяСертификата(Сертификат); Представление = ""; @@ -931,16 +954,16 @@ КонецФункции // См. ЭлектроннаяПодписьКлиент.СвойстваСертификата. -Функция СвойстваСертификата(Сертификат, ДобавкаВремени, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт +Функция СвойстваСертификата(Сертификат, ДобавкаВремени) Экспорт ДатыСертификата = ДатыСертификата(Сертификат, ДобавкаВремени); Свойства = Новый Структура; Свойства.Вставить("Отпечаток", Base64Строка(Сертификат.Отпечаток)); Свойства.Вставить("СерийныйНомер", Сертификат.СерийныйНомер); - Свойства.Вставить("Представление", ПредставлениеСертификата(Сертификат, ДобавкаВремени, МодульЭлектроннаяПодписьЛокализацияКлиентСервер)); - Свойства.Вставить("КомуВыдан", ПредставлениеСубъекта(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер)); - Свойства.Вставить("КемВыдан", ПредставлениеИздателя(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер)); + Свойства.Вставить("Представление", ПредставлениеСертификата(Сертификат, ДобавкаВремени)); + Свойства.Вставить("КомуВыдан", ПредставлениеСубъекта(Сертификат)); + Свойства.Вставить("КемВыдан", ПредставлениеИздателя(Сертификат)); Свойства.Вставить("ДатаНачала", ДатыСертификата.ДатаНачала); Свойства.Вставить("ДатаОкончания", ДатыСертификата.ДатаОкончания); Свойства.Вставить("ДействителенДо", ДатыСертификата.ДатаОкончания); @@ -984,7 +1007,7 @@ КонецПроцедуры // См. ЭлектроннаяПодписьКлиент.СвойстваСубъектаСертификата. -Функция СвойстваСубъектаСертификата(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт +Функция СвойстваСубъектаСертификата(Сертификат) Экспорт Субъект = Сертификат.Субъект; @@ -1032,8 +1055,9 @@ Свойства.ЭлектроннаяПочта = ПодготовитьСтроку(Субъект.E); КонецЕсли; - Если МодульЭлектроннаяПодписьЛокализацияКлиентСервер <> Неопределено Тогда - РасширенныеСвойства = МодульЭлектроннаяПодписьЛокализацияКлиентСервер.РасширенныеСвойстваСубъектаСертификата(Субъект); + РасширенныеСвойства = Неопределено; + ЭлектроннаяПодписьКлиентСерверЛокализация.ПриПолученииРасширенныхСвойствСубъектаСертификата(Субъект, РасширенныеСвойства); + Если ТипЗнч(РасширенныеСвойства) = Тип("Структура") Тогда ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Свойства, РасширенныеСвойства, Истина); КонецЕсли; @@ -1042,7 +1066,7 @@ КонецФункции // См. ЭлектроннаяПодписьКлиент.СвойстваИздателяСертификата. -Функция СвойстваИздателяСертификата(Сертификат, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт +Функция СвойстваИздателяСертификата(Сертификат) Экспорт Издатель = Сертификат.Издатель; @@ -1088,8 +1112,9 @@ Свойства.ЭлектроннаяПочта = ПодготовитьСтроку(Издатель.E); КонецЕсли; - Если МодульЭлектроннаяПодписьЛокализацияКлиентСервер <> Неопределено Тогда - РасширенныеСвойства = МодульЭлектроннаяПодписьЛокализацияКлиентСервер.РасширенныеСвойстваИздателяСертификата(Издатель); + РасширенныеСвойства = Неопределено; + ЭлектроннаяПодписьКлиентСерверЛокализация.ПриПолученииРасширенныхСвойствИздателяСертификата(Издатель, РасширенныеСвойства); + Если ТипЗнч(РасширенныеСвойства) = Тип("Структура") Тогда ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Свойства, РасширенныеСвойства, Истина); КонецЕсли; @@ -1192,7 +1217,7 @@ // Для функций СертификатПросрочен, ПредставлениеСертификата, СвойстваСертификата. // // Параметры: -// Сертификат - СертификатКриптографии - . +// Сертификат - СертификатКриптографии // Функция ДатыСертификата(Сертификат, ДобавкаВремени) Экспорт @@ -1287,7 +1312,7 @@ // Возвращает информацию об используемом компьютере. // // Возвращаемое значение: -// Строка - Информация о компьютере. +// Строка - информация о компьютере. // Функция ДиагностическаяИнформацияОКомпьютере() Экспорт @@ -1335,10 +1360,12 @@ АнализДанных.Вставить("Буфер", ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные)); Иначе + ОжидаемыеТипы = Новый Массив; + ОжидаемыеТипы.Добавить(Тип("ДвоичныеДанные")); + ОжидаемыеТипы.Добавить(Тип("Строка")); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( "ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписи", - "Данные", - Данные, Новый ОписаниеТипов("Строка, ДвоичныеДанные")); + "Данные", Данные, ОжидаемыеТипы); КонецЕсли; Если ЭтоДанныеСертификата Тогда diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl index e4bb84a7d..13d2939b1 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl @@ -9,6 +9,16 @@ #Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * ИспользоватьЭлектронныеПодписи - Булево +// * ИспользоватьШифрование - Булево +// * ПроверятьЭлектронныеПодписиНаСервере - Булево +// * СоздаватьЭлектронныеПодписиНаСервере - Булево +// * ЗаявлениеНаВыпускСертификатаДоступно - Булево +// * ОписанияПрограмм - Массив из см. ОписаниеПрограмм +// Функция ОбщиеНастройки() Экспорт ОбщиеНастройки = Новый Структура; @@ -70,15 +80,9 @@ Строки = ПоставляемыеНастройки.НайтиСтроки(Отбор); Идентификатор = ?(Строки.Количество() = 0, "", Строки[0].Идентификатор); - Описание = Новый Структура; - Описание.Вставить("Ссылка", Выборка.Ссылка); - Описание.Вставить("Наименование", Выборка.Наименование); - Описание.Вставить("ИмяПрограммы", Выборка.ИмяПрограммы); - Описание.Вставить("ТипПрограммы", Выборка.ТипПрограммы); - Описание.Вставить("АлгоритмПодписи", Выборка.АлгоритмПодписи); - Описание.Вставить("АлгоритмХеширования", Выборка.АлгоритмХеширования); - Описание.Вставить("АлгоритмШифрования", Выборка.АлгоритмШифрования); - Описание.Вставить("Идентификатор", Идентификатор); + Описание = ОписаниеПрограмм(); + ЗаполнитьЗначенияСвойств(Описание, Выборка); + Описание.Идентификатор = Идентификатор; ОписанияПрограмм.Добавить(Новый ФиксированнаяСтруктура(Описание)); КонецЦикла; @@ -88,6 +92,30 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования +// * Наименование - Строка +// * ИмяПрограммы - Строка +// * ТипПрограммы - Число +// * АлгоритмПодписи - Строка +// * АлгоритмХеширования - Строка +// * АлгоритмШифрования - Строка +// * Идентификатор - Строка +// +Функция ОписаниеПрограмм() Экспорт + Описание = Новый Структура; + Описание.Вставить("Ссылка"); + Описание.Вставить("Наименование"); + Описание.Вставить("ИмяПрограммы"); + Описание.Вставить("ТипПрограммы"); + Описание.Вставить("АлгоритмПодписи"); + Описание.Вставить("АлгоритмХеширования"); + Описание.Вставить("АлгоритмШифрования"); + Описание.Вставить("Идентификатор"); + Возврат Описание; +КонецФункции + Функция ТипыВладельцев(ТолькоСсылки = Ложь) Экспорт Результат = Новый Соответствие; diff --git a/SSL/src/CommonPictures/BotFather/BotFather.mdo b/SSL/src/CommonPictures/BotFather/BotFather.mdo new file mode 100644 index 000000000..13351375a --- /dev/null +++ b/SSL/src/CommonPictures/BotFather/BotFather.mdo @@ -0,0 +1,8 @@ + + + BotFather + + ru + Bot father + + diff --git a/SSL/src/CommonPictures/BotFather/Picture.png b/SSL/src/CommonPictures/BotFather/Picture.png new file mode 100644 index 000000000..be0b98917 Binary files /dev/null and b/SSL/src/CommonPictures/BotFather/Picture.png differ diff --git a/SSL/src/CommonPictures/BotFatherВконтакте/BotFatherВконтакте.mdo b/SSL/src/CommonPictures/BotFatherВконтакте/BotFatherВконтакте.mdo new file mode 100644 index 000000000..a9d975d0b --- /dev/null +++ b/SSL/src/CommonPictures/BotFatherВконтакте/BotFatherВконтакте.mdo @@ -0,0 +1,8 @@ + + + BotFatherВконтакте + + ru + Bot father вконтакте + + diff --git a/SSL/src/CommonPictures/BotFatherВконтакте/Picture.png b/SSL/src/CommonPictures/BotFatherВконтакте/Picture.png new file mode 100644 index 000000000..777ae6266 Binary files /dev/null and b/SSL/src/CommonPictures/BotFatherВконтакте/Picture.png differ diff --git a/SSL/src/CommonPictures/ВКонтакте16х16/Picture.png b/SSL/src/CommonPictures/ВКонтакте16х16/Picture.png new file mode 100644 index 000000000..3bd951f9c Binary files /dev/null and b/SSL/src/CommonPictures/ВКонтакте16х16/Picture.png differ diff --git a/SSL/src/CommonPictures/ВКонтакте16х16/ВКонтакте16х16.mdo b/SSL/src/CommonPictures/ВКонтакте16х16/ВКонтакте16х16.mdo new file mode 100644 index 000000000..40f580675 --- /dev/null +++ b/SSL/src/CommonPictures/ВКонтакте16х16/ВКонтакте16х16.mdo @@ -0,0 +1,8 @@ + + + ВКонтакте16х16 + + ru + В контакте16х16 + + diff --git a/SSL/src/CommonPictures/ДлительнаяОперация16/Picture.zip b/SSL/src/CommonPictures/ДлительнаяОперация16/Picture.zip index de09281cf..f1d26ef17 100644 Binary files a/SSL/src/CommonPictures/ДлительнаяОперация16/Picture.zip and b/SSL/src/CommonPictures/ДлительнаяОперация16/Picture.zip differ diff --git a/SSL/src/CommonPictures/КоллекцияПиктограммНаличиеОригиналаПервичногоДокумента/Picture.zip b/SSL/src/CommonPictures/КоллекцияПиктограммНаличиеОригиналаПервичногоДокумента/Picture.zip new file mode 100644 index 000000000..bff06d3d4 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..f6279d6ed --- /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..9237cce41 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..dffa17708 --- /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..56764e320 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..147fc2533 --- /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..91fea0b30 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..4ae3d3e38 --- /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..cd6c68985 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..4c1eddc79 --- /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..1f68db052 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..03d45e375 --- /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..72b8fe1e5 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..bdce01f3e --- /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..faf597ced 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..7a56a5451 --- /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..9041a8730 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..8f8b3291d --- /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..705305059 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..164d3909f --- /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..f1639f22c 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..af8c23e9a --- /dev/null +++ b/SSL/src/CommonPictures/СтруктураПодчиненности/СтруктураПодчиненности.mdo @@ -0,0 +1,8 @@ + + + СтруктураПодчиненности + + ru + Структура подчиненности + + diff --git a/SSL/src/CommonPictures/Телеграм16х16/Picture.png b/SSL/src/CommonPictures/Телеграм16х16/Picture.png new file mode 100644 index 000000000..c67611dd4 Binary files /dev/null and b/SSL/src/CommonPictures/Телеграм16х16/Picture.png differ diff --git a/SSL/src/CommonPictures/Телеграм16х16/Телеграм16х16.mdo b/SSL/src/CommonPictures/Телеграм16х16/Телеграм16х16.mdo new file mode 100644 index 000000000..d2efd94a7 --- /dev/null +++ b/SSL/src/CommonPictures/Телеграм16х16/Телеграм16х16.mdo @@ -0,0 +1,8 @@ + + + Телеграм16х16 + + ru + Телеграм16х16 + + diff --git a/SSL/src/CommonPictures/УстановитьСостояниеОригиналаПервичногоДокумента/Picture.zip b/SSL/src/CommonPictures/УстановитьСостояниеОригиналаПервичногоДокумента/Picture.zip new file mode 100644 index 000000000..87a709d4c 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..01f97cb34 --- /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..0d4d208b3 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..da336d874 --- /dev/null +++ b/SSL/src/CommonPictures/УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам/УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам.mdo @@ -0,0 +1,8 @@ + + + УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам + + ru + Уточнить состояние оригинала первичного документа по печатным формам + + diff --git a/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.addin b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.addin index bf80abe74..756d49d12 100644 Binary files a/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.addin and b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.addin differ diff --git a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs index 037f99c92..69f896d65 100644 --- a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs +++ b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs @@ -308,6 +308,23 @@ xs:boolean + + ИзменяемыеОбъекты + ИзменяемыеОбъекты + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменяемые объекты</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + ИсточникДанных1 Обработчики @@ -577,6 +594,9 @@ НачальноеЗаполнение + + ИзменяемыеОбъекты + Комментарий diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index 671cfa8bb..28b5caa9b 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,17 +1,17 @@ - + БиблиотекаСтандартныхПодсистем ru Библиотека стандартных подсистем, редакция 3.1 - - - - - - - + + + + + + + ManagedApplication PersonalComputer Russian @@ -19,7 +19,7 @@ Role.АдминистраторСистемы Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Фирма "1С" - 3.1.2.406 + 3.1.3.162 http://downloads.v8.1c.ru/tmplts/ true @@ -82,6 +82,7 @@ StyleItem.ГруппаВариантовОтчетовЦвет StyleItem.ГруппаВариантовОтчетовЦвет82 StyleItem.ДатаГрафикаИзмененнаяФон + StyleItem.ДействиеВКолонкеСпискаШрифт StyleItem.ДобавленныйРеквизитФон StyleItem.ЗаблокированныйРеквизитЦвет StyleItem.ЗавершенныйБизнесПроцесс @@ -103,11 +104,16 @@ StyleItem.НерабочийПериодПроизводственногоКалендаряФон StyleItem.НеСтартованныйБизнесПроцесс StyleItem.ОбразецНастройкиКолонтитуловЦвет + StyleItem.ОбразецНастройкиКолонтитуловШрифт StyleItem.ОсновнойЭлементСписка StyleItem.ОшибкаПолнотекстовыйПоискФон StyleItem.ПользовательВыбранный StyleItem.ПоясняющийОшибкуТекст StyleItem.ПоясняющийТекст + StyleItem.ПравоНедействительногоПользователяФон + StyleItem.ПравоПросмотраФон + StyleItem.ПравоРедактированияФон + StyleItem.ПравоСозданияФон StyleItem.ПросроченныеДанныеЦвет StyleItem.РазделВариантовОтчетовШрифт StyleItem.РезультатУспехЦвет @@ -125,6 +131,8 @@ StyleItem.ЦветРазделаПанелиФункций StyleItem.ЦветТекстаНевыбраннойКартинки StyleItem.ЦветФонаПредупреждения + CommonPicture.BotFather + CommonPicture.BotFatherВконтакте CommonPicture.GoogleMaps CommonPicture.Skype CommonPicture.АрхивАнкета @@ -148,6 +156,7 @@ CommonPicture.ВидыНавигацииПоВзаимодействиямОтПредметовВзаимодействий CommonPicture.ВидыНавигацииПоВзаимодействиямОтРеквизитаПредмета CommonPicture.ВидыОпераций + CommonPicture.ВКонтакте16х16 CommonPicture.ВнешняяКомпонентаДоступна CommonPicture.ВнешняяКомпонентаНеДоступна CommonPicture.ВнешняяСсылкаНаОбъектИнформационнойБазы @@ -237,7 +246,9 @@ CommonPicture.КоллекцияНапоминания CommonPicture.КоллекцияОбъектыМетаданных CommonPicture.КоллекцияОтсутствуетСогласие + CommonPicture.КоллекцияПиктограммНаличиеОригиналаПервичногоДокумента CommonPicture.КоллекцияПиктограммПараметрыШаблонаСообщения + CommonPicture.КоллекцияПиктограммПечатныеФормыОригиналаПервичногоДокумента CommonPicture.КоллекцияПиктограммФайлов CommonPicture.КоллекцияПиктограммЭлементов CommonPicture.КоллекцияСкрепка @@ -259,6 +270,7 @@ CommonPicture.Минимум CommonPicture.НаписатьSMS CommonPicture.Напоминание + CommonPicture.НастроитьСостоянияОригиналаПервичногоДокумента CommonPicture.НезавершившаясяПроверка CommonPicture.НетГраницы CommonPicture.ОбновитьФайлИзФайлаНаДиске @@ -299,8 +311,10 @@ CommonPicture.ПиктограммыНастроекОтчета CommonPicture.ПиктограммыПланОбменаУзел CommonPicture.ПиктограммыЭлементов + CommonPicture.ПиктограммыЭлементовСправочникаСостоянияОригиналовПервичныхДокументов CommonPicture.ПодключениеОбсуждений CommonPicture.Подменю + CommonPicture.ПодменюСервис CommonPicture.ПодписанЗашифрованЗаголовок CommonPicture.ПодписанЗашифрованСостояния CommonPicture.ПодписанЭП @@ -329,6 +343,7 @@ CommonPicture.ПроверкаСертификатаОшибка CommonPicture.ПроверкаСертификатаПредупреждение CommonPicture.ПроверкаСертификатаУспех + CommonPicture.Просмотр CommonPicture.ПроцессОтложен CommonPicture.ПрочиеПользовательскиеНастройки CommonPicture.Пустая @@ -340,6 +355,7 @@ CommonPicture.Рассчитать CommonPicture.РассылкаОтчетов CommonPicture.РасширениеКонфигурацииИзГлавногоУзла + CommonPicture.Редактирование CommonPicture.РедактироватьАдресСайта CommonPicture.РедактироватьМакет CommonPicture.РедактироватьФайл @@ -364,8 +380,11 @@ CommonPicture.Скрепка CommonPicture.СкрытаяНастройкаОтчета CommonPicture.СнятьПризнакРассмотреноУВзаимодействия + CommonPicture.Создание CommonPicture.СостояниеОбменаДанными CommonPicture.СостояниеОбменаДаннымиОшибка + CommonPicture.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен + CommonPicture.СостояниеОригиналаПервичногоДокументаОригиналПолучен CommonPicture.СостояниеПользователя01 CommonPicture.СостояниеПользователя02 CommonPicture.СостояниеПользователя03 @@ -412,7 +431,9 @@ CommonPicture.СтрелкаВправо CommonPicture.СтрелкаВправоКрасная CommonPicture.Структура + CommonPicture.СтруктураПодчиненности CommonPicture.Сумма + CommonPicture.Телеграм16х16 CommonPicture.ТелефонныйЗвонок CommonPicture.ТипыМакетов CommonPicture.ТолстаяГраницаВокруг @@ -425,6 +446,8 @@ CommonPicture.УстановитьОтветственногоЗаВзаимодействие CommonPicture.УстановитьПредметВзаимодействия CommonPicture.УстановитьПризнакРассмотреноДляВзаимодействия + CommonPicture.УстановитьСостояниеОригиналаПервичногоДокумента + CommonPicture.УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам CommonPicture.ФорматExcel CommonPicture.ФорматExcel2007 CommonPicture.ФорматHTML @@ -454,6 +477,7 @@ SessionParameter.ВсеВидыДоступаКромеСпециальных SessionParameter.ВыполняетсяЗаписьОбъекта SessionParameter.ВыполняетсяОбновлениеИБ + SessionParameter.ВыполняетсяУдалениеОбъектов SessionParameter.ДатаОбновленияПовторноИспользуемыхЗначенийМРО SessionParameter.ДействующиеДатыЗапретаИзменения SessionParameter.ИдентификаторыТаблицСОтдельнымиНастройкамиПрав @@ -530,6 +554,7 @@ Role.ДобавлениеИзменениеПользователей Role.ДобавлениеИзменениеРассылокОтчетов Role.ДобавлениеИзменениеРолейИсполнителей + Role.ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов Role.ДобавлениеИзменениеУчетныхЗаписейЭлектроннойПочты Role.ДобавлениеИзменениеШаблоновАнкет Role.ДобавлениеИзменениеШаблоновСообщений @@ -543,6 +568,7 @@ Role.ИзменениеВыполнениеЗадач Role.ИзменениеДополнительныхСведений Role.ИзменениеМакетовПечатныхФорм + Role.ИзменениеСостоянийОригиналовПервичныхДокументов Role.ИзменениеУчастниковГруппДоступа Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Role.ИспользованиеОбработкиТекущиеДела @@ -577,6 +603,7 @@ Role.ЧтениеОтветовНаВопросыАнкет Role.ЧтениеРассылокОтчетов Role.ЧтениеРезультатовПроверкиУчета + Role.ЧтениеСостоянийОригиналовПервичныхДокументов Role.ЧтениеУчетныхЗаписейЭлектроннойПочты Role.ЧтениеШаблоновСообщений CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную @@ -651,6 +678,7 @@ CommonModule.ВызовОнлайнПоддержкиПереопределяемый CommonModule.ГрафикиРаботы CommonModule.ГрафикиРаботыКлиент + CommonModule.ГрупповоеИзменениеОбъектов CommonModule.ГрупповоеИзменениеОбъектовКлиент CommonModule.ГрупповоеИзменениеОбъектовПереопределяемый CommonModule.ДатыЗапретаИзменения @@ -766,9 +794,12 @@ CommonModule.ОбновлениеКонфигурации CommonModule.ОбновлениеКонфигурацииВызовСервера CommonModule.ОбновлениеКонфигурацииКлиент + CommonModule.Обсуждения + CommonModule.ОбсужденияКлиент CommonModule.ОбсужденияСлужебный CommonModule.ОбсужденияСлужебныйВызовСервера CommonModule.ОбсужденияСлужебныйКлиент + CommonModule.ОбсужденияСлужебныйКлиентСервер CommonModule.ОбщегоНазначения CommonModule.ОбщегоНазначенияВызовСервера CommonModule.ОбщегоНазначенияГлобальный @@ -959,6 +990,8 @@ CommonModule.УдалениеПомеченныхОбъектовПереопределяемый CommonModule.УдалениеПомеченныхОбъектовСлужебный CommonModule.УдалениеПомеченныхОбъектовСлужебныйВызовСервера + CommonModule.УдалениеПомеченныхОбъектовСлужебныйКлиентСервер + CommonModule.УдалениеПомеченныхПовтИсп CommonModule.УправлениеДоступом CommonModule.УправлениеДоступомПереопределяемый CommonModule.УправлениеДоступомСлужебный @@ -994,6 +1027,11 @@ CommonModule.УправлениеСвойствамиСлужебный CommonModule.УправлениеЭлектроннойПочтой CommonModule.УправлениеЭлектроннойПочтойКлиент + CommonModule.УчетОригиналовПервичныхДокументов + CommonModule.УчетОригиналовПервичныхДокументовВызовСервера + CommonModule.УчетОригиналовПервичныхДокументовКлиент + CommonModule.УчетОригиналовПервичныхДокументовКлиентПереопределяемый + CommonModule.УчетОригиналовПервичныхДокументовПереопределяемый CommonModule.ФайловаяСистема CommonModule.ФайловаяСистемаКлиент CommonModule.ФайловаяСистемаСлужебныйКлиент @@ -1016,7 +1054,7 @@ CommonModule.ЭлектроннаяПодписьКлиент CommonModule.ЭлектроннаяПодписьКлиентПереопределяемый CommonModule.ЭлектроннаяПодписьКлиентСервер - CommonModule.ЭлектроннаяПодписьЛокализацияКлиентСервер + CommonModule.ЭлектроннаяПодписьКлиентСерверЛокализация CommonModule.ЭлектроннаяПодписьПереопределяемый CommonModule.ЭлектроннаяПодписьСлужебный CommonModule.ЭлектроннаяПодписьСлужебныйВызовСервера @@ -1102,6 +1140,10 @@ EventSubscription.ЗаполнитьКонтактнуюИнформацию EventSubscription.ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей EventSubscription.ЗаполнитьНаборыЗначенийДоступаТабличныхЧастейДокументовВзаимодействия + EventSubscription.ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантах + EventSubscription.ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписей + EventSubscription.ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчета + EventSubscription.ЗапретитьИспользованиеУдаляемыхОбъектовВОбъектах EventSubscription.ЗапретитьПометкуУдаленияПредопределенныхЭлементов EventSubscription.ЗапретитьУдалениеПредопределенныхЭлементов EventSubscription.ЗарегистрироватьИзмененияОбщихДанныхУзлов @@ -1109,11 +1151,11 @@ EventSubscription.КонтактнаяИнформацияОбработкаПроверкиЗаполнения EventSubscription.КонтрольНеразделенныхНаборовЗаписейПриЗаписи EventSubscription.КонтрольНеразделенныхОбъектовПриЗаписи + EventSubscription.ОбновитьВнешнегоПользователя EventSubscription.ОбновитьГруппыВладельцевНастроекПрав EventSubscription.ОбновитьГруппыЗначенийДоступа EventSubscription.ОбновитьЗначенияГруппДоступа EventSubscription.ОбновитьКонтактнуюИнформацию - EventSubscription.ОбновитьПредставлениеВнешнегоПользователя EventSubscription.ОбновитьСостояниеБизнесПроцесса EventSubscription.ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных EventSubscription.ОбновлениеВерсииИБПередУдалениемСсылочногоОбъекта @@ -1165,6 +1207,7 @@ ScheduledJob.ЗаполнениеДанныхДляОграниченияДоступа ScheduledJob.ЗапускДополнительныхОбработок ScheduledJob.ИзвлечениеТекста + ScheduledJob.ИсправлениеУстаревшихАдресов ScheduledJob.КонтрольАктивностиПользователей ScheduledJob.МониторингЗадач ScheduledJob.ОбновлениеАгрегатов @@ -1172,6 +1215,7 @@ ScheduledJob.ОбновлениеИндексаППД ScheduledJob.ОбновлениеПредопределенныхВариантовОтчетов ScheduledJob.ОбновлениеСтатусовДоставкиSMS + ScheduledJob.ОтключениеПроверкиИспользованияУдаляемыхОбъектов ScheduledJob.ОтложенноеОбновлениеИБ ScheduledJob.ОтправкаSMS ScheduledJob.ОчисткаЗамеровВремени @@ -1237,6 +1281,7 @@ FunctionalOption.ИспользоватьСинхронизациюФайлов FunctionalOption.ИспользоватьСкрытиеПерсональныхДанныхСубъектов FunctionalOption.ИспользоватьУдалениеПомеченныхОбъектов + FunctionalOption.ИспользоватьУчетОригиналовПервичныхДокументов FunctionalOption.ИспользоватьШаблоныСообщений FunctionalOption.ИспользоватьШифрование FunctionalOption.ИспользоватьЭлектроннуюПочтуВШаблонахСообщений @@ -1295,11 +1340,13 @@ DefinedType.КонечнаяТочкаОбменаСообщениями DefinedType.КонтактВзаимодействия DefinedType.КонтекстПроверокВеденияУчета + DefinedType.КурсВалюты DefinedType.МестоХраненияФункциональныхОпций DefinedType.ОбъектАдресации DefinedType.ОбъектСДополнительнымиКомандами DefinedType.ОбъектСклонения DefinedType.ОбъектСНастраиваемымПорядком + DefinedType.ОбъектСУчетомОригиналовПервичныхДокументов DefinedType.Организация DefinedType.ОтложенныйБизнесПроцесс DefinedType.ПодписанныйОбъект @@ -1328,6 +1375,7 @@ CommonCommand.ДополнительныеОбработкиАдминистрирование CommonCommand.ДополнительныеОтчетыАдминистрирование CommonCommand.ДополнительныеСведенияКоманднаяПанель + CommonCommand.ЖурналУчетаОригиналовПервичныхДокументов CommonCommand.ЗагрузитьКомплектПравил CommonCommand.ЗагрузитьКурсыВалют CommonCommand.ЗагрузитьПравилаКонвертацииОбъектов @@ -1444,6 +1492,7 @@ Constant.ИспользоватьСинхронизациюДанныхВМоделиСервисаСПриложениемВИнтернете Constant.ИспользоватьСкрытиеПерсональныхДанныхСубъектов Constant.ИспользоватьУдалениеПомеченныхОбъектов + Constant.ИспользоватьУчетОригиналовПервичныхДокументов Constant.ИспользоватьШаблоныСообщений Constant.ИспользоватьШифрование Constant.ИспользоватьЭлектроннуюПочтуВШаблонахСообщений @@ -1490,6 +1539,7 @@ Constant.ПрефиксУзлаРаспределеннойИнформационнойБазы Constant.ПриоритетОбновленияВОбластяхДанных Constant.ПровайдерSMS + Constant.ПроверятьИспользованиеУдаляемыхОбъектов Constant.ПроверятьЭлектронныеПодписиНаСервере Constant.ПрофильБезопасностиИнформационнойБазы Constant.РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса @@ -1650,6 +1700,7 @@ Catalog.РолиИсполнителей Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования Catalog.СообщениеSMSПрисоединенныеФайлы + Catalog.СостоянияОригиналовПервичныхДокументов Catalog.СтраныМира Catalog.СтроковыеКонтактыВзаимодействий Catalog.СценарииОбменовДанными @@ -1706,6 +1757,8 @@ Enum.РазрешенияСканированногоИзображения Enum.РежимыАнкетирования Enum.РежимыВыгрузкиОбъектовОбмена + Enum.РежимыВыполненияОбработчиков + Enum.РежимыВыполненияОтложенныхОбработчиков Enum.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок Enum.РезультатыВыполненияОбмена Enum.СостоянияБизнесПроцессов @@ -1728,6 +1781,7 @@ Enum.СрокиХраненияВерсий Enum.СтатусыИзвлеченияТекстаФайлов Enum.СтатусыИсходящегоЭлектронногоПисьма + Enum.СтатусыОбработчиковОбновления Enum.ТипыВерсийОбъекта Enum.ТипыВопросовШаблонаАнкеты Enum.ТипыДанныхКэшаПрограммныхИнтерфейсов @@ -1749,6 +1803,7 @@ Report.АнализВерсийОбъектов Report.АнализЖурналаРегистрации Report.АнализОпроса + Report.АнализПравДоступа Report.АналитическийОтчетПоАнкетированию Report.БизнесПроцессы Report.ДатыЗапретаЗагрузки @@ -1764,6 +1819,7 @@ Report.ОценкаПроизводительности Report.ПраваДоступа Report.ПроверкаЦелостностиТома + Report.ПрогрессОбновленияОбластейДанных Report.ПрогрессОтложенногоОбновления Report.ПросроченныеЗадачи Report.РезультатыПроверкиУчета @@ -1803,6 +1859,7 @@ DataProcessor.НастройкиПользователей DataProcessor.НастройкиЦентраМониторинга DataProcessor.НерекомендуемаяВерсияПлатформы + DataProcessor.ОписаниеОбработчиковОбновления DataProcessor.ОценкаПроизводительности DataProcessor.ПанельАдминистрированияБСП DataProcessor.ПанельАдминистрированияБСПВМоделиСервиса @@ -1907,12 +1964,15 @@ InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма InformationRegister.НеразделенныеПользователи + InformationRegister.НеудаленныеОбъекты InformationRegister.НомераОтсканированныхФайлов InformationRegister.ОбластиПерсональныхДанных InformationRegister.ОбластиСтатистики InformationRegister.ОбновлениеКлючейДоступаКДанным InformationRegister.ОбновлениеКлючейДоступаПользователей InformationRegister.ОбновлениеКлючейДоступаТекущиеЗадания + InformationRegister.ОбработчикиОбновления + InformationRegister.ОбработчикиОбновленияОбщихДанных InformationRegister.ОбработчикиСобытийСинхронизацииДанных InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз InformationRegister.ОбщиеПоставляемыеМакетыПечати @@ -1930,6 +1990,7 @@ InformationRegister.ПользовательскиеМакетыПечати InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам InformationRegister.ПоставляемыеМакетыПечати + InformationRegister.ПотокиОбновления InformationRegister.ПраваРолей InformationRegister.ПравилаДляОбменаДанными InformationRegister.ПредметыПапкиВзаимодействий @@ -1961,6 +2022,7 @@ InformationRegister.СостоянияКонтактовВзаимодействий InformationRegister.СостоянияОбменовДанными InformationRegister.СостоянияОбменовДаннымиОбластейДанных + InformationRegister.СостоянияОригиналовПервичныхДокументов InformationRegister.СостоянияПапокПисем InformationRegister.СостоянияПредметовВзаимодействий InformationRegister.СостоянияПроверокВеденияУчета @@ -1977,6 +2039,7 @@ InformationRegister.УдалитьОбластиПерсональныхДанных InformationRegister.УдалитьРезультатыОбменаДанными InformationRegister.УдалитьХранимыеФайлыВерсий + InformationRegister.УдаляемыеОбъекты InformationRegister.УровниСокращенийАдресныхСведений InformationRegister.ФайлыВРабочемКаталоге InformationRegister.ЭлектронныеПодписи diff --git a/SSL/src/Configuration/ManagedApplicationModule.bsl b/SSL/src/Configuration/ManagedApplicationModule.bsl index aa1b1e468..2dec52b52 100644 --- a/SSL/src/Configuration/ManagedApplicationModule.bsl +++ b/SSL/src/Configuration/ManagedApplicationModule.bsl @@ -59,4 +59,17 @@ КонецПроцедуры +Процедура ОбработкаПолученияФормыВыбораПользователейСистемыВзаимодействия(НазначениеВыбора, Форма, ИдентификаторОбсуждения, Параметры, ВыбраннаяФорма, СтандартнаяОбработка) + + // СтандартныеПодсистемы.Обсуждения + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + + МодульОбсужденияСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбсужденияСлужебныйКлиент"); + МодульОбсужденияСлужебныйКлиент.ПриПолученииФормыВыбораПользователейСистемыВзаимодействия(НазначениеВыбора, Форма, ИдентификаторОбсуждения, Параметры, ВыбраннаяФорма, СтандартнаяОбработка); + + КонецЕсли; + // Конец СтандартныеПодсистемы.Обсуждения + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Configuration/OrdinaryApplicationModule.bsl b/SSL/src/Configuration/OrdinaryApplicationModule.bsl index aa1b1e468..2dec52b52 100644 --- a/SSL/src/Configuration/OrdinaryApplicationModule.bsl +++ b/SSL/src/Configuration/OrdinaryApplicationModule.bsl @@ -59,4 +59,17 @@ КонецПроцедуры +Процедура ОбработкаПолученияФормыВыбораПользователейСистемыВзаимодействия(НазначениеВыбора, Форма, ИдентификаторОбсуждения, Параметры, ВыбраннаяФорма, СтандартнаяОбработка) + + // СтандартныеПодсистемы.Обсуждения + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + + МодульОбсужденияСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбсужденияСлужебныйКлиент"); + МодульОбсужденияСлужебныйКлиент.ПриПолученииФормыВыбораПользователейСистемыВзаимодействия(НазначениеВыбора, Форма, ИдентификаторОбсуждения, Параметры, ВыбраннаяФорма, СтандартнаяОбработка); + + КонецЕсли; + // Конец СтандартныеПодсистемы.Обсуждения + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index afe01069a..61695a2a1 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,309388ee-debe-4fa3-9ac9-23100d02d97f,1,f72dd8f4-8b87-4a80-b0c1-4310f8e912da,"3.1.2.406","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5935,1,0,770a5a55-c9f6-44f7-8afe-a1a493237ce1,770a5a55-c9f6-44f7-8afe-a1a493237ce1,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,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,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,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7-49aa-aa63-45da087e0d0a,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,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,fa2a9ef2-00a1-44f4-a82c-6c7288dd62dc,fa2a9ef2-00a1-44f4-a82c-6c7288dd62dc,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,1c877cee-d9b8-48dc-8d79-04d27bb522f7,1c877cee-d9b8-48dc-8d79-04d27bb522f7,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,3d428bdf-c41b-43ac-957e-2943406c832c,3d428bdf-c41b-43ac-957e-2943406c832c,1,0,85cbc0b7-6aa5-455b-abed-7bc659d9ad51,85cbc0b7-6aa5-455b-abed-7bc659d9ad51,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,5578afd2-5aed-4164-8467-52a66f4773c4,5578afd2-5aed-4164-8467-52a66f4773c4,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,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,1,0,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,1,0,d9bad22e-4049-4371-86a3-1b00ae6215af,d9bad22e-4049-4371-86a3-1b00ae6215af,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,85e05ed7-25ed-4148-8247-86ff531ec48d,85e05ed7-25ed-4148-8247-86ff531ec48d,1,0,dcd34215-200c-4d3c-828c-4c3cd8b17a81,dcd34215-200c-4d3c-828c-4c3cd8b17a81,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,5797e28d-1318-4728-8b17-bcb78d85349a,5797e28d-1318-4728-8b17-bcb78d85349a,1,0,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,1,0,9f9e6146-17ce-4296-a89f-33dfe4d0468d,9f9e6146-17ce-4296-a89f-33dfe4d0468d,1,0,3aa020db-a811-4fb9-9ea9-00a3359fbb53,3aa020db-a811-4fb9-9ea9-00a3359fbb53,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,1fbd4cfa-58cb-41ea-920e-a39cfa6ad90c,1fbd4cfa-58cb-41ea-920e-a39cfa6ad90c,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,f6dd250e-75fd-47fc-abcb-79ea19ebd747,f6dd250e-75fd-47fc-abcb-79ea19ebd747,1,0,53c41e6c-89b0-4818-9832-02140373979b,53c41e6c-89b0-4818-9832-02140373979b,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,57e75b31-13b3-46fc-8ec4-7570ab0e9928,57e75b31-13b3-46fc-8ec4-7570ab0e9928,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,716302cc-ad47-4823-a81a-4c58857aa0a4,716302cc-ad47-4823-a81a-4c58857aa0a4,1,0,d0f3824e-ddfb-491d-8aea-e4e4806dc3ee,d0f3824e-ddfb-491d-8aea-e4e4806dc3ee,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,6d93ec4f-167a-4804-910b-988ee8aad78e,6d93ec4f-167a-4804-910b-988ee8aad78e,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,046e6f4f-3d92-4b20-b19f-fca608fa0f11,046e6f4f-3d92-4b20-b19f-fca608fa0f11,1,0,74bea66f-15bf-48de-9ff9-f9c35a8bf5cc,74bea66f-15bf-48de-9ff9-f9c35a8bf5cc,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,913743c3-9529-4c86-b056-93e954df7819,913743c3-9529-4c86-b056-93e954df7819,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,6b5720a8-0bcc-4196-934d-84db9d99ec27,6b5720a8-0bcc-4196-934d-84db9d99ec27,1,0,c0b3e3e9-20bc-42e1-a68f-646a958586d1,c0b3e3e9-20bc-42e1-a68f-646a958586d1,1,0,39496918-7d71-4960-ad8b-0028ae659266,39496918-7d71-4960-ad8b-0028ae659266,1,0,bdf2fd35-2000-45c2-9df6-65031ee0e4af,bdf2fd35-2000-45c2-9df6-65031ee0e4af,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,89574884-bce2-406d-9961-d1656b306eb8,89574884-bce2-406d-9961-d1656b306eb8,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,871a75ef-1987-4695-9916-07439aeedc53,871a75ef-1987-4695-9916-07439aeedc53,1,0,ba64deac-5826-43f2-b88a-2e180da87059,ba64deac-5826-43f2-b88a-2e180da87059,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,77de81f0-97c5-4751-9f38-f5785c7c45e0,77de81f0-97c5-4751-9f38-f5785c7c45e0,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,9136814a-89e6-4b0f-8ca1-73e4ef29f534,9136814a-89e6-4b0f-8ca1-73e4ef29f534,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,31ba33d4-5941-4b11-ae99-b15188bfef76,31ba33d4-5941-4b11-ae99-b15188bfef76,1,0,0744e8be-747c-47bb-85f3-58b6f6f9b786,0744e8be-747c-47bb-85f3-58b6f6f9b786,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,1a3eff9b-6598-4e11-9b8f-81249c53abec,1a3eff9b-6598-4e11-9b8f-81249c53abec,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,3da31d2f-24dd-469b-bd3b-073fa3b3d585,3da31d2f-24dd-469b-bd3b-073fa3b3d585,1,0,33b12dd8-7a86-4a51-bd3d-4911ec1ffde4,33b12dd8-7a86-4a51-bd3d-4911ec1ffde4,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,4a70416b-6598-4239-be70-2c0c8255388a,4a70416b-6598-4239-be70-2c0c8255388a,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,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,a5cc5ae2-be80-4957-8aca-9e477433dfcc,a5cc5ae2-be80-4957-8aca-9e477433dfcc,1,0,62fa393c-687c-49bf-8a25-81adc04430fb,62fa393c-687c-49bf-8a25-81adc04430fb,1,0,13fcf1e8-730e-436f-b316-6bcb8301f894,13fcf1e8-730e-436f-b316-6bcb8301f894,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,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,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,e6af9db4-b93f-422e-846c-e6c5fd33f992,e6af9db4-b93f-422e-846c-e6c5fd33f992,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,590aba18-7d56-48e3-9454-5f2882a32f80,590aba18-7d56-48e3-9454-5f2882a32f80,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,7ea3206a-2a16-460d-ad6d-849103f50bdb,7ea3206a-2a16-460d-ad6d-849103f50bdb,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,1,0,10302ca9-850c-4561-a774-d099c20b1919,10302ca9-850c-4561-a774-d099c20b1919,1,0,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,1,0,d693bfcf-e117-445b-b0e1-d895bc5227c4,d693bfcf-e117-445b-b0e1-d895bc5227c4,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,0508e7ab-3dd9-42b4-9542-089ce0656bbb,0508e7ab-3dd9-42b4-9542-089ce0656bbb,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,f78ffd16-5bd4-421a-99af-9cf5f126d960,f78ffd16-5bd4-421a-99af-9cf5f126d960,1,0,2bd23dd2-8107-410f-8137-3d022546594b,2bd23dd2-8107-410f-8137-3d022546594b,1,0,3f09badb-70bd-4996-822f-2e2e9524f09d,3f09badb-70bd-4996-822f-2e2e9524f09d,1,0,aca89232-c531-47ca-a82e-e7bfadd56674,aca89232-c531-47ca-a82e-e7bfadd56674,1,0,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,1,0,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,1,0,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,1,0,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,1,0,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,1,0,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,1,0,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,1,0,c7130560-3953-496f-b1d0-cae676fcb5a9,c7130560-3953-496f-b1d0-cae676fcb5a9,1,0,b7d5c226-a787-45e5-b46b-c51b145fcf6a,b7d5c226-a787-45e5-b46b-c51b145fcf6a,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,9b77e99b-b1d3-4368-a671-59e0ebba3f0e,9b77e99b-b1d3-4368-a671-59e0ebba3f0e,1,0,ad847998-6e50-4160-81fc-3b58ad68f202,ad847998-6e50-4160-81fc-3b58ad68f202,1,0,b2b98bcf-41da-4643-a6dc-39e5379b99e5,b2b98bcf-41da-4643-a6dc-39e5379b99e5,1,0,fdd9fb90-f5f0-4c08-9341-4374403bc950,fdd9fb90-f5f0-4c08-9341-4374403bc950,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,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,e9e242b7-0077-4c47-8f45-df50e7cc90cf,e9e242b7-0077-4c47-8f45-df50e7cc90cf,1,0,820383e1-9b95-4c0f-8464-722f1fe64ad5,820383e1-9b95-4c0f-8464-722f1fe64ad5,1,0,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,1,0,292bfe6b-703e-40cb-856d-abb470e6709f,292bfe6b-703e-40cb-856d-abb470e6709f,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,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,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,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,40cefda6-490e-4962-9747-94b823ea4ed7,40cefda6-490e-4962-9747-94b823ea4ed7,1,0,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,1,0,7e8d7d4f-98f7-4c81-94b1-f2d552b1ae5d,7e8d7d4f-98f7-4c81-94b1-f2d552b1ae5d,1,0,6aa6d14f-cd6c-413a-864e-d847d9ce120b,6aa6d14f-cd6c-413a-864e-d847d9ce120b,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,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,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,933ae96b-c69e-4396-bbfb-0daa81e529a4,933ae96b-c69e-4396-bbfb-0daa81e529a4,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,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,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,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,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,543c32a4-ad43-4f60-9b35-77081f841ad9,543c32a4-ad43-4f60-9b35-77081f841ad9,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,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,63066bee-d428-4e32-a032-f17475056537,63066bee-d428-4e32-a032-f17475056537,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,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,08c83b5e-08dd-425d-b024-62af684df926,08c83b5e-08dd-425d-b024-62af684df926,1,0,9e40a2ef-0c96-4455-8ed6-6e09011df3df,9e40a2ef-0c96-4455-8ed6-6e09011df3df,1,0,0de78690-2038-456b-b140-2b2b81f14e44,0de78690-2038-456b-b140-2b2b81f14e44,1,0,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,1,0,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,1,0,b953eafc-20be-4463-8c3e-903184e18402,b953eafc-20be-4463-8c3e-903184e18402,1,0,dcefdde9-645e-43c7-9244-384dadc75439,dcefdde9-645e-43c7-9244-384dadc75439,1,0,fa787228-aed5-4a16-b958-d102b78bf776,fa787228-aed5-4a16-b958-d102b78bf776,1,0,d511a261-4f9b-44e8-b3a1-1e6d393ec6e1,d511a261-4f9b-44e8-b3a1-1e6d393ec6e1,1,0,be900d20-c02d-476d-9ede-2bc5303ef6cb,be900d20-c02d-476d-9ede-2bc5303ef6cb,1,0,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,1,0,07b53437-cc8d-4834-a1e0-7007538b6eab,07b53437-cc8d-4834-a1e0-7007538b6eab,1,0,0dbec644-cb98-4368-ab76-5997259cbce7,0dbec644-cb98-4368-ab76-5997259cbce7,1,0,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,1,0,74b1237b-4a46-438d-9756-b564260df99d,74b1237b-4a46-438d-9756-b564260df99d,1,0,19decf0f-c24e-4551-b3d6-8ebd413cba78,19decf0f-c24e-4551-b3d6-8ebd413cba78,1,0,66a2df23-3a08-40d2-8e6c-2db10a3bca7a,66a2df23-3a08-40d2-8e6c-2db10a3bca7a,1,0,189383a5-0001-4427-9e00-18451e4bfb6e,189383a5-0001-4427-9e00-18451e4bfb6e,1,0,966ecce5-ec91-4f8e-82b2-364b38eb7ff4,966ecce5-ec91-4f8e-82b2-364b38eb7ff4,1,0,5ee4b3ee-b795-48c1-9bad-f4010b559b0e,5ee4b3ee-b795-48c1-9bad-f4010b559b0e,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,1ef34700-ce65-4985-b4d6-7133133ef32d,1ef34700-ce65-4985-b4d6-7133133ef32d,1,0,886d99ce-9ea2-4160-8d73-84df7197c030,886d99ce-9ea2-4160-8d73-84df7197c030,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,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,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,8f4d5fc1-5c2c-4202-bb79-a180b03b3267,8f4d5fc1-5c2c-4202-bb79-a180b03b3267,1,0,da881296-fea4-444b-96b2-12cb69d588c7,da881296-fea4-444b-96b2-12cb69d588c7,1,0,03f9d2d0-eae4-4098-a70e-4eb569b11fd9,03f9d2d0-eae4-4098-a70e-4eb569b11fd9,1,0,30031e74-e58a-44a2-98dd-fc8c950831c4,30031e74-e58a-44a2-98dd-fc8c950831c4,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,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,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,2c04d747-c363-4218-92c9-5c83393e928b,2c04d747-c363-4218-92c9-5c83393e928b,1,0,093b8255-7ee5-4463-bd20-542b1d63e799,093b8255-7ee5-4463-bd20-542b1d63e799,1,0,5afb95e0-51a3-4a0f-bea7-e06716421974,5afb95e0-51a3-4a0f-bea7-e06716421974,1,0,2bce3fbe-436b-4a9f-8478-5436d61cd57c,2bce3fbe-436b-4a9f-8478-5436d61cd57c,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,3d02ca78-c396-4797-909c-e6b910c0ff66,3d02ca78-c396-4797-909c-e6b910c0ff66,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,80c18959-93f0-46e6-90fd-b564efcaa395,80c18959-93f0-46e6-90fd-b564efcaa395,1,0,c53b9e19-54e4-49b4-ac63-eaeee5c2e040,c53b9e19-54e4-49b4-ac63-eaeee5c2e040,1,0,47afc45d-719e-4740-a8aa-6157c4b1aea8,47afc45d-719e-4740-a8aa-6157c4b1aea8,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,b6d891e4-15d6-4b40-b474-a8a1d10231e8,b6d891e4-15d6-4b40-b474-a8a1d10231e8,1,0,e60a7341-3995-4d8c-a3c6-a23ea0137754,e60a7341-3995-4d8c-a3c6-a23ea0137754,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,77fe53c2-de9d-4483-97c9-f7d44e137d5e,77fe53c2-de9d-4483-97c9-f7d44e137d5e,1,0,ac7ea771-4b10-4d43-9c0a-9cd36e4c49a4,ac7ea771-4b10-4d43-9c0a-9cd36e4c49a4,1,0,593be64c-6792-46d9-8618-84c50c9ad9e4,593be64c-6792-46d9-8618-84c50c9ad9e4,1,0,208d29cb-040f-4282-b8e8-dda8417b8e92,208d29cb-040f-4282-b8e8-dda8417b8e92,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,3913f78f-ce34-4ae3-840a-ccdf06319cbb,3913f78f-ce34-4ae3-840a-ccdf06319cbb,1,0,104cf3e3-2104-4ac2-bdc6-792750a63ea0,104cf3e3-2104-4ac2-bdc6-792750a63ea0,1,0,35dee1ee-ca9e-4b6b-9767-1107283f5a04,35dee1ee-ca9e-4b6b-9767-1107283f5a04,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,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,48659b94-ace8-45f4-a043-6b2731ec6925,48659b94-ace8-45f4-a043-6b2731ec6925,1,0,3a8e60f9-19cb-42a6-a448-ad211261d9b8,3a8e60f9-19cb-42a6-a448-ad211261d9b8,1,0,74320602-094a-4645-b2c9-3053377a3ac3,74320602-094a-4645-b2c9-3053377a3ac3,1,0,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,1,0,b066c732-9c5f-4504-894f-96d457b0768f,b066c732-9c5f-4504-894f-96d457b0768f,1,0,9366463d-aa8a-4e89-86d8-c7f746f9551b,9366463d-aa8a-4e89-86d8-c7f746f9551b,1,0,e25da569-d435-45b2-b4e8-fc76d7f1c8df,e25da569-d435-45b2-b4e8-fc76d7f1c8df,1,0,a51a7f57-9c52-4457-819c-13e1b6f886e1,a51a7f57-9c52-4457-819c-13e1b6f886e1,1,0,7d08daba-5e36-4ce3-8a70-17750959b89e,7d08daba-5e36-4ce3-8a70-17750959b89e,1,0,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,1,0,39344a8c-2662-48ff-937b-12951bb268fb,39344a8c-2662-48ff-937b-12951bb268fb,1,0,b577663f-ead2-4b18-a4f6-f7f303e89319,b577663f-ead2-4b18-a4f6-f7f303e89319,1,0,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,1,0,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,1,0,72663843-4010-42ed-989b-0b58bf9f7146,72663843-4010-42ed-989b-0b58bf9f7146,1,0,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,1,0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,1,0,a132189c-6584-4bb1-9cfd-1415cd83228a,a132189c-6584-4bb1-9cfd-1415cd83228a,1,0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,1,0,a3670f95-5abe-49ee-8ea5-d7e4438801ba,a3670f95-5abe-49ee-8ea5-d7e4438801ba,1,0,4443dea1-5143-4e76-97a7-c35dbe1665e4,4443dea1-5143-4e76-97a7-c35dbe1665e4,1,0,0d780521-0767-425a-b44d-315d2dc42d04,0d780521-0767-425a-b44d-315d2dc42d04,1,0,c5b1572d-28f5-42f3-b2e0-8b54f091642e,c5b1572d-28f5-42f3-b2e0-8b54f091642e,1,0,0986c1b6-b677-428d-b49f-a93e40e77171,0986c1b6-b677-428d-b49f-a93e40e77171,1,0,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,1,0,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,1,0,b6662b2e-7e93-4eaa-9e4b-b5647285932b,b6662b2e-7e93-4eaa-9e4b-b5647285932b,1,0,4a180f2c-dc54-4591-8f62-f236d1e07799,4a180f2c-dc54-4591-8f62-f236d1e07799,1,0,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,1,0,a9a51e79-4c79-4a43-931b-c0321c1cd65b,a9a51e79-4c79-4a43-931b-c0321c1cd65b,1,0,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,1,0,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,1,0,22f2696e-0ac1-4a74-bca9-987b267b2b59,22f2696e-0ac1-4a74-bca9-987b267b2b59,1,0,d705cacc-3485-46d7-9ff4-48c3c0757c81,d705cacc-3485-46d7-9ff4-48c3c0757c81,1,0,98f043ea-633c-4a03-a56f-efbc9e6ef288,98f043ea-633c-4a03-a56f-efbc9e6ef288,1,0,2033b92a-0750-478a-a12d-cf4f74d0a9da,2033b92a-0750-478a-a12d-cf4f74d0a9da,1,0,92fa2196-d8e5-45f9-9d2e-59d837b163ea,92fa2196-d8e5-45f9-9d2e-59d837b163ea,1,0,25dc2290-e283-4449-81c1-1ce15b58067f,25dc2290-e283-4449-81c1-1ce15b58067f,1,0,c534a865-a17f-41e7-88b9-c6af89c9d202,c534a865-a17f-41e7-88b9-c6af89c9d202,1,0,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,1,0,0127937c-94c0-43fe-9630-cc2ec6904ad8,0127937c-94c0-43fe-9630-cc2ec6904ad8,1,0,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,1,0,8df5b3cd-7788-4198-a530-e88be83f1cdf,8df5b3cd-7788-4198-a530-e88be83f1cdf,1,0,ffaeea66-66d5-4741-a9b5-875afebfce7f,ffaeea66-66d5-4741-a9b5-875afebfce7f,1,0,8f6b6576-1d21-46c1-905c-f1685f0eee7a,8f6b6576-1d21-46c1-905c-f1685f0eee7a,1,0,06827a85-a9d1-472e-8087-906ff94a4adc,06827a85-a9d1-472e-8087-906ff94a4adc,1,0,bb3954de-5eaa-4ec0-931b-a1a9f233c120,bb3954de-5eaa-4ec0-931b-a1a9f233c120,1,0,10689022-cbbb-4134-901f-1e778fac2693,10689022-cbbb-4134-901f-1e778fac2693,1,0,f14e363f-512b-4658-afb5-10c3be5ff870,f14e363f-512b-4658-afb5-10c3be5ff870,1,0,4d211427-4494-45d4-ae84-38235f35eaef,4d211427-4494-45d4-ae84-38235f35eaef,1,0,f7784993-d95c-4652-9894-3cf67aeabeb8,f7784993-d95c-4652-9894-3cf67aeabeb8,1,0,485d8b29-79b1-4798-a742-75546ddb7262,485d8b29-79b1-4798-a742-75546ddb7262,1,0,e248de85-8f76-4471-ab3d-d35514b69b78,e248de85-8f76-4471-ab3d-d35514b69b78,1,0,8928ce42-2b12-402f-8115-98b5655db556,8928ce42-2b12-402f-8115-98b5655db556,1,0,9b62c109-7b52-4803-83e6-a5413cd00984,9b62c109-7b52-4803-83e6-a5413cd00984,1,0,cddb4bb0-22ec-49ae-b332-62d7307b93fe,cddb4bb0-22ec-49ae-b332-62d7307b93fe,1,0,72876709-806e-4406-b9c1-b8117f4d750a,72876709-806e-4406-b9c1-b8117f4d750a,1,0,b1efafef-74cc-4d36-a32c-b472712f11f3,b1efafef-74cc-4d36-a32c-b472712f11f3,1,0,ceb05584-1ecd-4681-8575-c0452f95b685,ceb05584-1ecd-4681-8575-c0452f95b685,1,0,03d08c14-f814-4e12-8f96-020c36cca2bf,03d08c14-f814-4e12-8f96-020c36cca2bf,1,0,a1a7aab6-cf35-42ce-97bb-c112638a2748,a1a7aab6-cf35-42ce-97bb-c112638a2748,1,0,4e36184e-d818-4f38-9257-6d91d9cc85ae,4e36184e-d818-4f38-9257-6d91d9cc85ae,1,0,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,1,0,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,1,0,3893a258-a9c7-441a-b80c-1cc8c3f4735c,3893a258-a9c7-441a-b80c-1cc8c3f4735c,1,0,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,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,8a6cdb21-4eff-46dc-b928-738199f54581,8a6cdb21-4eff-46dc-b928-738199f54581,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,5299d417-02c6-4f73-9c0c-8c22d267ab99,5299d417-02c6-4f73-9c0c-8c22d267ab99,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,4a2c2478-03ad-4521-9356-09ee07fce972,4a2c2478-03ad-4521-9356-09ee07fce972,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,879304f7-9507-4fb8-9177-355428d6bba9,879304f7-9507-4fb8-9177-355428d6bba9,1,0,efb50581-cc7e-47ac-bfa2-86da2860bf1d,efb50581-cc7e-47ac-bfa2-86da2860bf1d,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,a2f943a4-05a3-4eb6-9a10-74b6859469a6,a2f943a4-05a3-4eb6-9a10-74b6859469a6,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,f6d6f1b9-3956-4fdb-bbb0-5d81f083a072,f6d6f1b9-3956-4fdb-bbb0-5d81f083a072,1,0,a5dd4200-0f25-452d-9014-3b1506c31557,a5dd4200-0f25-452d-9014-3b1506c31557,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,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,02082174-7276-4256-b9bb-9872065a01c4,02082174-7276-4256-b9bb-9872065a01c4,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,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,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,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,554320a0-55dc-4289-bb08-63d405cb4ca5,554320a0-55dc-4289-bb08-63d405cb4ca5,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,f5bb88eb-c239-4ae3-a297-dfbbd679e008,f5bb88eb-c239-4ae3-a297-dfbbd679e008,1,0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,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,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,1,0,7433b2a9-f634-4af7-ac85-6aa1280ea239,7433b2a9-f634-4af7-ac85-6aa1280ea239,1,0,9f32e85c-2ed6-41db-b0ec-6d8596940e80,9f32e85c-2ed6-41db-b0ec-6d8596940e80,1,0,f259b6b4-d582-429f-a16f-027a6bcb7438,f259b6b4-d582-429f-a16f-027a6bcb7438,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,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,1,0,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,f4afd271-64de-4a6d-b0ef-f27db4d66d32,f4afd271-64de-4a6d-b0ef-f27db4d66d32,1,0,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,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,0248a6c4-7ce5-4898-bb1d-9ad9509e6795,0248a6c4-7ce5-4898-bb1d-9ad9509e6795,1,0,6a5b9e7f-c368-40d8-812a-64f68ea1ef9d,6a5b9e7f-c368-40d8-812a-64f68ea1ef9d,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,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,caea53be-d2f7-4109-8017-d2bfdfde8c6f,caea53be-d2f7-4109-8017-d2bfdfde8c6f,1,0,60f30706-9919-4767-a17c-660754b9d542,60f30706-9919-4767-a17c-660754b9d542,1,0,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,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,e590825f-10c6-4fdd-98cd-3da01da2ed4f,e590825f-10c6-4fdd-98cd-3da01da2ed4f,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,bea697f4-46a8-4698-ac60-64326e442f2b,bea697f4-46a8-4698-ac60-64326e442f2b,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,195ea1f8-3e38-4254-a33d-c87424b8f7dc,195ea1f8-3e38-4254-a33d-c87424b8f7dc,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,bc2dd611-b589-4519-b274-40db5c66b378,bc2dd611-b589-4519-b274-40db5c66b378,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,75ffd0b9-79be-4600-a310-591fddb6d63e,75ffd0b9-79be-4600-a310-591fddb6d63e,1,0,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,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,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,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,1,0,8c4c7982-36cc-4dc9-b055-9954f61e6365,8c4c7982-36cc-4dc9-b055-9954f61e6365,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,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,1,0,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,1,0,95a71c2e-aa39-42ec-8889-2390a553f146,95a71c2e-aa39-42ec-8889-2390a553f146,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,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,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,387d3bbf-cddd-4506-b14f-89c1f37adbbc,387d3bbf-cddd-4506-b14f-89c1f37adbbc,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,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,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,8947286f-ba4a-44e7-b805-2f096028dc4f,8947286f-ba4a-44e7-b805-2f096028dc4f,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,e353db15-71c5-4b68-9ffb-9800800a59dc,e353db15-71c5-4b68-9ffb-9800800a59dc,1,0,976d9ba7-d9c7-4a9e-ad5d-53cb5bca8984,976d9ba7-d9c7-4a9e-ad5d-53cb5bca8984,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,19b98b60-deb1-4642-8159-2a11332558e2,19b98b60-deb1-4642-8159-2a11332558e2,1,0,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,a687748a-0b2a-4277-b935-07616d28430d,a687748a-0b2a-4277-b935-07616d28430d,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,9059defa-047f-4dac-9749-3d0a6a77308a,9059defa-047f-4dac-9749-3d0a6a77308a,1,0,6010c27f-e857-4fc3-be13-1eea51f02ea7,6010c27f-e857-4fc3-be13-1eea51f02ea7,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,5e4ee280-3dd2-4f68-be6c-fb5343438817,5e4ee280-3dd2-4f68-be6c-fb5343438817,1,0,75d1b6df-ede3-4172-987f-fe1551f686ee,75d1b6df-ede3-4172-987f-fe1551f686ee,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,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,6527be82-a665-4f8a-818b-a35b96b3484b,6527be82-a665-4f8a-818b-a35b96b3484b,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,fbbb2449-9a07-4229-8ea5-bee0afab5f56,fbbb2449-9a07-4229-8ea5-bee0afab5f56,1,0,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,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,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,52f3e20c-1cf7-4284-a083-6539782f4bc3,52f3e20c-1cf7-4284-a083-6539782f4bc3,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,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,1,0,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,1,0,9039f720-5728-4918-87d5-8b2d07cabcfd,9039f720-5728-4918-87d5-8b2d07cabcfd,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,3705a086-46e6-4090-a52a-535908eea8a5,3705a086-46e6-4090-a52a-535908eea8a5,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,5d336d1e-24f9-404a-9671-3bcdc7c48a25,5d336d1e-24f9-404a-9671-3bcdc7c48a25,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,ea2e9a4e-eca1-4a6e-b7a6-8922a11334aa,ea2e9a4e-eca1-4a6e-b7a6-8922a11334aa,1,0,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,1,0,9d8496ea-fc0c-410d-994d-7480350d71d3,9d8496ea-fc0c-410d-994d-7480350d71d3,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,5b62e0d1-8dba-47db-8dbb-517ad935fa0d,5b62e0d1-8dba-47db-8dbb-517ad935fa0d,1,0,e7a63151-fc1a-4563-8768-26d854ab012b,e7a63151-fc1a-4563-8768-26d854ab012b,1,0,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,73c7750f-8291-4e19-8551-635cd6b94215,73c7750f-8291-4e19-8551-635cd6b94215,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,65dd4904-0837-4de5-a5e5-601151055d94,65dd4904-0837-4de5-a5e5-601151055d94,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,df48bfa3-5502-4a61-a79f-1dea043dac36,df48bfa3-5502-4a61-a79f-1dea043dac36,1,0,adee37e6-f087-422f-91b3-681f3d73189c,adee37e6-f087-422f-91b3-681f3d73189c,1,0,eb276904-cad7-4401-bb78-2d13946291f1,eb276904-cad7-4401-bb78-2d13946291f1,1,0,171a64b6-39d2-455f-b304-1c6ea8d85494,171a64b6-39d2-455f-b304-1c6ea8d85494,1,0,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,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,1e633034-6dcc-4564-9f40-348c32143314,1e633034-6dcc-4564-9f40-348c32143314,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,1f3057c2-135f-44b2-9f86-34481fbc5596,1f3057c2-135f-44b2-9f86-34481fbc5596,1,0,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,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,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,3e4361e9-2baf-407b-9320-b2a265b44e46,3e4361e9-2baf-407b-9320-b2a265b44e46,1,0,a5902ed4-a8f1-460e-aced-0094b2c384a3,a5902ed4-a8f1-460e-aced-0094b2c384a3,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,e2c76c41-4c47-4588-a081-7bd81ac1698b,e2c76c41-4c47-4588-a081-7bd81ac1698b,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,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,5e380276-2a08-435c-927e-a7f56f5a4dbc,5e380276-2a08-435c-927e-a7f56f5a4dbc,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,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,c0218ef0-4aa1-4ff1-963b-e6ab1001ae9e,c0218ef0-4aa1-4ff1-963b-e6ab1001ae9e,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,62d4d073-80df-41e6-a915-43a4f5575206,62d4d073-80df-41e6-a915-43a4f5575206,1,0,145ecede-baae-4725-832a-5387794922ed,145ecede-baae-4725-832a-5387794922ed,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,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,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,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,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,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,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,322645d4-e3fb-467b-a55d-d8e74cff2ea3,322645d4-e3fb-467b-a55d-d8e74cff2ea3,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,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,826c2821-147d-4aaf-910c-acfbdb58a29f,826c2821-147d-4aaf-910c-acfbdb58a29f,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,862e2759-5311-4c68-8977-86133bcf8c0e,862e2759-5311-4c68-8977-86133bcf8c0e,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,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,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,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,11c5930d-f882-46bd-9e7b-63e5344f6604,11c5930d-f882-46bd-9e7b-63e5344f6604,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,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,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,b3f188f4-d83e-4e97-b7d3-fc384b46a80a,b3f188f4-d83e-4e97-b7d3-fc384b46a80a,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,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,d3b09b09-df2d-40e5-86ce-84dab4898231,d3b09b09-df2d-40e5-86ce-84dab4898231,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,210972af-8687-4526-b288-60e7ee76cd61,210972af-8687-4526-b288-60e7ee76cd61,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,a56ff7f4-2259-455f-b707-b98aacd7d0b2,a56ff7f4-2259-455f-b707-b98aacd7d0b2,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,b6f745d7-1326-494e-b442-e4118955b5db,b6f745d7-1326-494e-b442-e4118955b5db,1,0,86755cbc-efd8-43e7-bba8-975c0a51f38f,86755cbc-efd8-43e7-bba8-975c0a51f38f,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,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,1,0,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,1,0,4dbf114a-5402-40b0-9cab-19601aa8328e,4dbf114a-5402-40b0-9cab-19601aa8328e,1,0,a0856ca2-6a66-4108-b6d4-82443cdccca6,a0856ca2-6a66-4108-b6d4-82443cdccca6,1,0,378b0708-a0a1-4c82-b55a-796acb27e696,378b0708-a0a1-4c82-b55a-796acb27e696,1,0,8e462c0e-c67a-45e9-9871-1f976b01632d,8e462c0e-c67a-45e9-9871-1f976b01632d,1,0,c5335e1f-3e47-46b7-b695-0653f825d855,c5335e1f-3e47-46b7-b695-0653f825d855,1,0,d7faad11-1e35-460c-8943-49370f328c03,d7faad11-1e35-460c-8943-49370f328c03,1,0,e4726010-85c5-4ccc-b574-4b3b55f0d391,e4726010-85c5-4ccc-b574-4b3b55f0d391,1,0,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,1,0,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,1,0,1f4f839a-4e19-45b8-a988-13ee604c269c,1f4f839a-4e19-45b8-a988-13ee604c269c,1,0,b3aa97e1-baef-45f4-9179-052f35527a5e,b3aa97e1-baef-45f4-9179-052f35527a5e,1,0,d613941f-ed4c-4957-b469-ea6b0d2a121d,d613941f-ed4c-4957-b469-ea6b0d2a121d,1,0,0d8d08e3-194f-416c-a1e0-aa92b40b7911,0d8d08e3-194f-416c-a1e0-aa92b40b7911,1,0,af0178fe-eb3a-485b-9acf-35c8702aa330,af0178fe-eb3a-485b-9acf-35c8702aa330,1,0,201d323b-4c0c-4c93-ae43-43a378ec0d9e,201d323b-4c0c-4c93-ae43-43a378ec0d9e,1,0,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,1,0,c513ceb0-0855-43ce-a311-c9bea88e2563,c513ceb0-0855-43ce-a311-c9bea88e2563,1,0,974bfc13-85c2-454a-b562-e72384eb4c31,974bfc13-85c2-454a-b562-e72384eb4c31,1,0,69cd6adc-b129-4fbc-804d-8d5aaef77280,69cd6adc-b129-4fbc-804d-8d5aaef77280,1,0,3431a3de-cb9d-46dc-b597-3203831796a9,3431a3de-cb9d-46dc-b597-3203831796a9,1,0,f3866271-04ed-4963-852e-cf41e9e18e1d,f3866271-04ed-4963-852e-cf41e9e18e1d,1,0,b77e5ec2-35cd-43ae-957f-af35214fa621,b77e5ec2-35cd-43ae-957f-af35214fa621,1,0,4a04d83d-cadd-4f36-9ec8-f926259c18ba,4a04d83d-cadd-4f36-9ec8-f926259c18ba,1,0,85e670c0-1616-4611-984c-3d40e890b2e9,85e670c0-1616-4611-984c-3d40e890b2e9,1,0,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,1,0,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,1,0,f1693207-2637-412a-972f-2bc79b9c7fc8,f1693207-2637-412a-972f-2bc79b9c7fc8,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,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,65f3ad72-ed03-482b-a2f1-05053eef408a,65f3ad72-ed03-482b-a2f1-05053eef408a,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,ec44f92a-06bf-4a53-a7ba-fbe9846a68a6,ec44f92a-06bf-4a53-a7ba-fbe9846a68a6,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,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,d7afa1a6-0ac9-4527-8f1c-5317ce259b52,d7afa1a6-0ac9-4527-8f1c-5317ce259b52,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,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,9cfd3d38-4e0e-40f4-ae77-7a997646e4b2,9cfd3d38-4e0e-40f4-ae77-7a997646e4b2,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,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,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,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,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,626cbb27-6af2-4a9a-959e-15af4417e489,626cbb27-6af2-4a9a-959e-15af4417e489,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,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,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,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,a5f5bc90-e670-4ee7-95fe-067fe1b129f7,a5f5bc90-e670-4ee7-95fe-067fe1b129f7,1,0,f790f620-2247-4a04-b0ad-8aa591655948,f790f620-2247-4a04-b0ad-8aa591655948,1,0,6d9d9087-91ad-4368-9087-0af8f83fdc9e,6d9d9087-91ad-4368-9087-0af8f83fdc9e,1,0,61fdb27e-b449-40a7-8ecd-7e3e8ae3aa23,61fdb27e-b449-40a7-8ecd-7e3e8ae3aa23,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,ea7ab9fa-5119-4773-b17d-fc74c7479d3d,ea7ab9fa-5119-4773-b17d-fc74c7479d3d,1,0,3e0fe508-87fa-47af-a47f-c0630a186900,3e0fe508-87fa-47af-a47f-c0630a186900,1,0,09740271-b8a8-4949-a116-b64449d80036,09740271-b8a8-4949-a116-b64449d80036,1,0,c8fedc0b-33d6-46a5-b4fc-a3cd728f5fd7,c8fedc0b-33d6-46a5-b4fc-a3cd728f5fd7,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,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,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,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,efd4e0a3-2f98-40ef-8089-c853cd588fa6,efd4e0a3-2f98-40ef-8089-c853cd588fa6,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,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,4ec26e3d-6c38-4c90-9f91-c2235f8b4154,4ec26e3d-6c38-4c90-9f91-c2235f8b4154,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,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,5d990585-02dd-4a13-8dfa-920df7d1dbb0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,1,0,788a98e0-194f-466c-b4fa-bafd527aae26,788a98e0-194f-466c-b4fa-bafd527aae26,1,0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,1,0,364218e0-87ba-4008-a3e3-e2351a5e04b8,364218e0-87ba-4008-a3e3-e2351a5e04b8,1,0,143f6db9-a4dc-4039-90d0-6161394a3e2f,143f6db9-a4dc-4039-90d0-6161394a3e2f,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,c343495b-5947-4fe7-a94b-d1f2b2455b4f,c343495b-5947-4fe7-a94b-d1f2b2455b4f,1,0,fbce7316-bb9a-40c1-af3c-352f4b559ab6,fbce7316-bb9a-40c1-af3c-352f4b559ab6,1,0,a3721457-b33b-4742-b6e1-531af10969d1,a3721457-b33b-4742-b6e1-531af10969d1,1,0,9619a603-e578-4f30-bcc6-adfddfa915c0,9619a603-e578-4f30-bcc6-adfddfa915c0,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,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,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,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,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,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,d1ade16c-bd56-46e5-874f-3117c5653192,d1ade16c-bd56-46e5-874f-3117c5653192,1,0,339398c0-6407-483c-82f7-266ef08b8657,339398c0-6407-483c-82f7-266ef08b8657,1,0,4f0a8f8c-68cb-4afe-b487-64e7ceeef9ab,4f0a8f8c-68cb-4afe-b487-64e7ceeef9ab,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,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,cee126de-d567-44d3-b14c-35da6e501324,cee126de-d567-44d3-b14c-35da6e501324,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,310aef5a-84d9-4a68-af78-d623beff8a88,310aef5a-84d9-4a68-af78-d623beff8a88,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,8efa4c12-b5ba-4dfd-bdc9-e824402fc4b1,8efa4c12-b5ba-4dfd-bdc9-e824402fc4b1,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,e8045f52-7b27-48b0-b009-d488718b3bef,e8045f52-7b27-48b0-b009-d488718b3bef,1,0,1796bcbb-a629-4509-95c9-78562689f809,1796bcbb-a629-4509-95c9-78562689f809,1,0,cd9799c9-f5bf-4537-8885-06fb6e6b8f93,cd9799c9-f5bf-4537-8885-06fb6e6b8f93,1,0,d19e8fcc-62cc-4ce4-81bc-ead33a2714df,d19e8fcc-62cc-4ce4-81bc-ead33a2714df,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,6fe997a3-d729-420b-b2b2-558e9a1031ee,6fe997a3-d729-420b-b2b2-558e9a1031ee,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,70a06a02-8fb8-4a39-9e50-b7c27c41f49f,70a06a02-8fb8-4a39-9e50-b7c27c41f49f,1,0,810755ad-e921-4250-a0d3-af77fe1b6c79,810755ad-e921-4250-a0d3-af77fe1b6c79,1,0,f0f2f6de-b5ca-416c-b2e7-70a2df0993a1,f0f2f6de-b5ca-416c-b2e7-70a2df0993a1,1,0,99a40d71-f47a-4c04-9137-d297eda2fad9,99a40d71-f47a-4c04-9137-d297eda2fad9,1,0,33fa908a-5516-43c8-94d3-28c60eba8d66,33fa908a-5516-43c8-94d3-28c60eba8d66,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,04013c34-8d59-4f87-b272-732d5a6dd675,04013c34-8d59-4f87-b272-732d5a6dd675,1,0,f9df9b6b-5051-46ef-bb1f-1974f41054a7,f9df9b6b-5051-46ef-bb1f-1974f41054a7,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,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,1,0,4a2d2790-debf-4dc2-8216-878d8808d161,4a2d2790-debf-4dc2-8216-878d8808d161,1,0,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,1,0,4507a92e-abb6-4329-88b2-3429bc694bc6,4507a92e-abb6-4329-88b2-3429bc694bc6,1,0,2694c1b4-536b-4187-adf6-0f8757aaae76,2694c1b4-536b-4187-adf6-0f8757aaae76,1,0,e523f88b-b3de-476e-a3cc-592970492dec,e523f88b-b3de-476e-a3cc-592970492dec,1,0,0e2107e2-8648-4b2e-9dfb-c23b1ff5b007,0e2107e2-8648-4b2e-9dfb-c23b1ff5b007,1,0,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,1,0,ea0843f4-60fb-4d44-abf4-0021867c636b,ea0843f4-60fb-4d44-abf4-0021867c636b,1,0,59aadc03-adbc-481f-89bc-d7f391789522,59aadc03-adbc-481f-89bc-d7f391789522,1,0,254f6ccd-0451-4231-91c9-4abe57b647be,254f6ccd-0451-4231-91c9-4abe57b647be,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,c6a4d03d-f3b2-449c-8a2b-deb542dd2c99,c6a4d03d-f3b2-449c-8a2b-deb542dd2c99,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,388f7571-8f1b-45c5-a8b8-45d648f2f5dd,388f7571-8f1b-45c5-a8b8-45d648f2f5dd,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,905b787b-c638-4703-af70-416a2ce43b50,905b787b-c638-4703-af70-416a2ce43b50,1,0,d7ea882a-6ef9-407f-b0e9-7bb42cf5ef17,d7ea882a-6ef9-407f-b0e9-7bb42cf5ef17,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,f9c0862c-34a2-41a3-ae46-b6a8e1ad1b08,f9c0862c-34a2-41a3-ae46-b6a8e1ad1b08,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,ef098c52-fcfa-4f0f-85b0-aba0d5aa46b2,ef098c52-fcfa-4f0f-85b0-aba0d5aa46b2,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,d7a72321-5f1f-427e-a54d-f308dab1b9c4,d7a72321-5f1f-427e-a54d-f308dab1b9c4,1,0,b183eb38-a96e-4e12-9220-4b4027ae875c,b183eb38-a96e-4e12-9220-4b4027ae875c,1,0,07f7e1b5-07b0-4017-bb91-31759c4ffed1,07f7e1b5-07b0-4017-bb91-31759c4ffed1,1,0,6de76d43-40d5-494f-8d30-2ef80c79bc7e,6de76d43-40d5-494f-8d30-2ef80c79bc7e,1,0,60146806-ee46-44d5-8a7a-2ed48741e1c1,60146806-ee46-44d5-8a7a-2ed48741e1c1,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,bdc51d67-5fc2-4d28-8875-69e33e625be6,bdc51d67-5fc2-4d28-8875-69e33e625be6,1,0,94ca9aa0-f61f-496b-8fef-9e6fb7bd8f87,94ca9aa0-f61f-496b-8fef-9e6fb7bd8f87,1,0,b494ca7b-6548-4fa2-932c-acdf8c62a78a,b494ca7b-6548-4fa2-932c-acdf8c62a78a,1,0,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,1,0,f335aa38-4e9e-4653-9a76-b6d4ae178c93,f335aa38-4e9e-4653-9a76-b6d4ae178c93,1,0,a62894bc-fab4-4ed4-a57d-cbe725527198,a62894bc-fab4-4ed4-a57d-cbe725527198,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,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,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,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,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,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,c4b3cb31-356e-4868-921c-f6710349def8,c4b3cb31-356e-4868-921c-f6710349def8,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,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,46c3341c-352c-43fb-b338-15c8ad487fbf,46c3341c-352c-43fb-b338-15c8ad487fbf,1,0,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,1,0,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,1,0,f9450d6a-849c-4621-b528-9cafc4819b44,f9450d6a-849c-4621-b528-9cafc4819b44,1,0,5b7cac99-2fca-4dbb-8d49-b84f310a2496,5b7cac99-2fca-4dbb-8d49-b84f310a2496,1,0,a4673d5c-9dae-48f7-9c91-53c1302a266a,a4673d5c-9dae-48f7-9c91-53c1302a266a,1,0,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,1,0,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,1,0,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,1,0,3f410b53-e762-41fe-9469-d538dfec3a9a,3f410b53-e762-41fe-9469-d538dfec3a9a,1,0,bb11c22e-0fbd-4985-be67-0866df7f7e61,bb11c22e-0fbd-4985-be67-0866df7f7e61,1,0,92ea60c0-1027-4337-9130-40028951f09b,92ea60c0-1027-4337-9130-40028951f09b,1,0,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,1,0,d64f18a4-ff93-4284-9eca-085109eafd24,d64f18a4-ff93-4284-9eca-085109eafd24,1,0,6381b8d2-7722-45c7-8800-19f6574d7d7a,6381b8d2-7722-45c7-8800-19f6574d7d7a,1,0,bf428e7a-2970-4bab-8c8e-35ea16151c0e,bf428e7a-2970-4bab-8c8e-35ea16151c0e,1,0,232dbd5f-b7f1-4463-946c-b8fbf93ac466,232dbd5f-b7f1-4463-946c-b8fbf93ac466,1,0,a1a74b34-4174-4769-8f03-bd4a32e83418,a1a74b34-4174-4769-8f03-bd4a32e83418,1,0,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,1,0,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,1,0,7086199b-20ec-4a74-a52f-71824134e8c5,7086199b-20ec-4a74-a52f-71824134e8c5,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,8e07a76d-db30-491c-b296-181c8e689382,8e07a76d-db30-491c-b296-181c8e689382,1,0,4f1752ae-42d0-477d-854b-de143c428a85,4f1752ae-42d0-477d-854b-de143c428a85,1,0,29674b66-c542-4a34-8caa-8e57a51bd190,29674b66-c542-4a34-8caa-8e57a51bd190,1,0,1a41acdd-3503-4c69-b93b-eb1cb6749712,1a41acdd-3503-4c69-b93b-eb1cb6749712,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,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,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1,0,7b638691-416d-4484-81f4-e4c796a92818,7b638691-416d-4484-81f4-e4c796a92818,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,8984f28e-8c83-499a-838c-5f51410d7b0e,8984f28e-8c83-499a-838c-5f51410d7b0e,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,eb48f8a9-1644-432d-a8a8-e63bc013a2fe,eb48f8a9-1644-432d-a8a8-e63bc013a2fe,1,0,36951804-70a4-45fa-9fad-1c37fd3ce7b7,36951804-70a4-45fa-9fad-1c37fd3ce7b7,1,0,d0031774-fa35-469f-9f8a-3aaa920928a0,d0031774-fa35-469f-9f8a-3aaa920928a0,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,84ba4ba7-2743-438a-8b65-cc14090f8a92,84ba4ba7-2743-438a-8b65-cc14090f8a92,1,0,cdc4312c-b1af-407c-bfc3-28db04915aa6,cdc4312c-b1af-407c-bfc3-28db04915aa6,1,0,97b76ee8-c73f-456b-9008-b453bd376317,97b76ee8-c73f-456b-9008-b453bd376317,1,0,ee305e39-978b-4069-a4e6-05e761a5d6ae,ee305e39-978b-4069-a4e6-05e761a5d6ae,1,0,965650ae-8a6e-469a-869a-0ce821818058,965650ae-8a6e-469a-869a-0ce821818058,1,0,00fde8e2-3eb3-484a-a960-a390cbdaa16a,00fde8e2-3eb3-484a-a960-a390cbdaa16a,1,0,c7a82aa5-043c-46a2-9f5a-cba098ca36bd,c7a82aa5-043c-46a2-9f5a-cba098ca36bd,1,0,94744edd-61d0-4329-95d8-fc19dc7c6af1,94744edd-61d0-4329-95d8-fc19dc7c6af1,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,d3aca87c-2b47-48da-82dd-18ca867c8463,d3aca87c-2b47-48da-82dd-18ca867c8463,1,0,669b81a6-6526-4b5c-aafa-1988ae5253ce,669b81a6-6526-4b5c-aafa-1988ae5253ce,1,0,ab138a0c-71fe-4ca2-9d82-21f5830dde24,ab138a0c-71fe-4ca2-9d82-21f5830dde24,1,0,ffa6c000-ec84-4749-8ffe-42b0599751cd,ffa6c000-ec84-4749-8ffe-42b0599751cd,1,0,740bde9c-9fe1-4183-ab01-3fbe91d33b61,740bde9c-9fe1-4183-ab01-3fbe91d33b61,1,0,e8e19542-c5c8-418b-8a83-20336fd9075a,e8e19542-c5c8-418b-8a83-20336fd9075a,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,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,1,0,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,1,0,703453e8-cb49-491b-8e19-a17b89894d1e,703453e8-cb49-491b-8e19-a17b89894d1e,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,0a92df3d-fb51-4fba-938c-55846929bd5f,0a92df3d-fb51-4fba-938c-55846929bd5f,1,0,1d005a8d-aaac-4442-a7dc-12634d03f6f3,1d005a8d-aaac-4442-a7dc-12634d03f6f3,1,0,348d0ad2-f64e-4ea0-8b8e-11bbc10926f7,348d0ad2-f64e-4ea0-8b8e-11bbc10926f7,1,0,7f7eb00d-7a38-4025-8853-9d1cf2dab1e3,7f7eb00d-7a38-4025-8853-9d1cf2dab1e3,1,0,36221881-a9c8-4b91-acac-44f7c065c05a,36221881-a9c8-4b91-acac-44f7c065c05a,1,0,3fdcf013-38e0-4a30-9ae8-19100e6704ba,3fdcf013-38e0-4a30-9ae8-19100e6704ba,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,f6d79449-eca9-4d13-9ddc-8b36ae9e729e,f6d79449-eca9-4d13-9ddc-8b36ae9e729e,1,0,b9d56dc6-3a10-4795-9ca3-dbf69310813e,b9d56dc6-3a10-4795-9ca3-dbf69310813e,1,0,f4b53ce1-8c1b-4f57-b5de-acb4692a37d8,f4b53ce1-8c1b-4f57-b5de-acb4692a37d8,1,0,9b18e04f-036d-43ae-b949-9432f96d71d9,9b18e04f-036d-43ae-b949-9432f96d71d9,1,0,e99a1f54-4001-45ee-81e3-472656c05f57,e99a1f54-4001-45ee-81e3-472656c05f57,1,0,b104e7b9-8a41-4154-a84b-d1bb12fab939,b104e7b9-8a41-4154-a84b-d1bb12fab939,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,c8015ae6-31a7-49f4-a9e6-5d13774f64e5,c8015ae6-31a7-49f4-a9e6-5d13774f64e5,1,0,970430c4-37fc-476c-a3f6-5f6bebd2e663,970430c4-37fc-476c-a3f6-5f6bebd2e663,1,0,4cddde4a-42d5-44d0-a693-ea90eab9b169,4cddde4a-42d5-44d0-a693-ea90eab9b169,1,0,d9d612bb-6d04-4186-b243-f99aded0ba43,d9d612bb-6d04-4186-b243-f99aded0ba43,1,0,15db8b7b-59f5-4551-b2bd-b24801f056b5,15db8b7b-59f5-4551-b2bd-b24801f056b5,1,0,88d2236b-794b-485a-b075-f1a54cadcd3a,88d2236b-794b-485a-b075-f1a54cadcd3a,1,0,b7f9553f-6219-4401-a6f4-9debd47186d2,b7f9553f-6219-4401-a6f4-9debd47186d2,1,0,26a7e044-a583-40af-9daa-5aea628c8f19,26a7e044-a583-40af-9daa-5aea628c8f19,1,0,548717ca-0645-49b4-9580-c77cd4d03ebb,548717ca-0645-49b4-9580-c77cd4d03ebb,1,0,b451f2fc-ced2-418a-a803-4fe99488b394,b451f2fc-ced2-418a-a803-4fe99488b394,1,0,62269222-67a7-489e-ba59-4294902275bc,62269222-67a7-489e-ba59-4294902275bc,1,0,fed1b714-a2c9-42cf-9ced-35ed895e4167,fed1b714-a2c9-42cf-9ced-35ed895e4167,1,0,6f334263-10c8-4187-9a84-d2fd1afadc48,6f334263-10c8-4187-9a84-d2fd1afadc48,1,0,f5674a0d-a106-4cc0-a402-b378280eab3d,f5674a0d-a106-4cc0-a402-b378280eab3d,1,0,fa99302b-3e86-4330-b9ff-c38d933f81f0,fa99302b-3e86-4330-b9ff-c38d933f81f0,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,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,b67fb4f8-e895-4a8e-9230-31bc5cde4953,b67fb4f8-e895-4a8e-9230-31bc5cde4953,1,0,f3c9fde1-6d0e-4319-a798-ed8e330750de,f3c9fde1-6d0e-4319-a798-ed8e330750de,1,0,50d1bd75-3523-41c0-8da1-500731c0872b,50d1bd75-3523-41c0-8da1-500731c0872b,1,0,1a8d3872-6e19-4a49-b0ea-b120b6c09d7f,1a8d3872-6e19-4a49-b0ea-b120b6c09d7f,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,4e892154-3279-492c-9eae-124304225c5d,4e892154-3279-492c-9eae-124304225c5d,1,0,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,1,0,575a135a-6ffd-4ae8-a597-7e584df9bac4,575a135a-6ffd-4ae8-a597-7e584df9bac4,1,0,693a7196-f525-4bd2-a417-e902977f21cb,693a7196-f525-4bd2-a417-e902977f21cb,1,0,9bb39184-08b7-440e-a8f8-5caf0083ba0f,9bb39184-08b7-440e-a8f8-5caf0083ba0f,1,0,d48e817e-f6a4-47e5-a052-35d09e066490,d48e817e-f6a4-47e5-a052-35d09e066490,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,b69b611d-18d3-4e78-8a09-f010bcf9c261,b69b611d-18d3-4e78-8a09-f010bcf9c261,1,0,e8e087c1-9131-4037-8562-8bce8c38f78c,e8e087c1-9131-4037-8562-8bce8c38f78c,1,0,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,1,0,6adaef8e-82b6-4664-9748-4f41b170d91a,6adaef8e-82b6-4664-9748-4f41b170d91a,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,a27244c2-ac65-423f-afce-42efd288a83d,a27244c2-ac65-423f-afce-42efd288a83d,1,0,d4002184-8e08-4dcc-9070-62f595e82e23,d4002184-8e08-4dcc-9070-62f595e82e23,1,0,62163fda-1a09-4d4f-b290-76ff324042ab,62163fda-1a09-4d4f-b290-76ff324042ab,1,0,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,1,0,6e6a1557-06fa-45c0-ad98-c43809553cd7,6e6a1557-06fa-45c0-ad98-c43809553cd7,1,0,179f7436-e328-42b8-9382-19ee6f10c768,179f7436-e328-42b8-9382-19ee6f10c768,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,3d140a17-40b4-46a7-a846-78f2f77d49f2,3d140a17-40b4-46a7-a846-78f2f77d49f2,1,0,965646a5-5e5b-49cd-864a-c3870844cfdb,965646a5-5e5b-49cd-864a-c3870844cfdb,1,0,27c88cf7-c0ed-44af-bb70-f14269ce1e87,27c88cf7-c0ed-44af-bb70-f14269ce1e87,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,aec7df6a-21a1-495d-b0a9-3769e1069888,aec7df6a-21a1-495d-b0a9-3769e1069888,1,0,463b98bf-b4d4-4edb-995d-0a75ff29b60d,463b98bf-b4d4-4edb-995d-0a75ff29b60d,1,0,317f88a7-12a4-4d21-b637-3050525406f4,317f88a7-12a4-4d21-b637-3050525406f4,1,0,2d9d2319-68fb-436d-b431-98858b88a75a,2d9d2319-68fb-436d-b431-98858b88a75a,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,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,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,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,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,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,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,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,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,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,14077038-2e41-4a05-a476-99f6f88a5c29,14077038-2e41-4a05-a476-99f6f88a5c29,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,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,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,9052e27f-1be1-4aa0-aa14-1156f4a9eb63,1,c105b26a-36d3-44c1-aa9c-1ce20bda8246,"3.1.3.162","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",6174,1,0,a47699ea-20cb-443c-8055-e9ba0feb5371,a47699ea-20cb-443c-8055-e9ba0feb5371,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,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,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,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7-49aa-aa63-45da087e0d0a,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,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,bc89af7a-1971-4245-8d88-1a5a50c50a8b,bc89af7a-1971-4245-8d88-1a5a50c50a8b,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,fa2a9ef2-00a1-44f4-a82c-6c7288dd62dc,fa2a9ef2-00a1-44f4-a82c-6c7288dd62dc,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,1c877cee-d9b8-48dc-8d79-04d27bb522f7,1c877cee-d9b8-48dc-8d79-04d27bb522f7,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,3d428bdf-c41b-43ac-957e-2943406c832c,3d428bdf-c41b-43ac-957e-2943406c832c,1,0,85cbc0b7-6aa5-455b-abed-7bc659d9ad51,85cbc0b7-6aa5-455b-abed-7bc659d9ad51,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,75561d71-4b06-40fc-8a46-ed5d33c80dea,75561d71-4b06-40fc-8a46-ed5d33c80dea,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,5578afd2-5aed-4164-8467-52a66f4773c4,5578afd2-5aed-4164-8467-52a66f4773c4,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,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,1,0,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,1,0,d9bad22e-4049-4371-86a3-1b00ae6215af,d9bad22e-4049-4371-86a3-1b00ae6215af,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,85e05ed7-25ed-4148-8247-86ff531ec48d,85e05ed7-25ed-4148-8247-86ff531ec48d,1,0,dcd34215-200c-4d3c-828c-4c3cd8b17a81,dcd34215-200c-4d3c-828c-4c3cd8b17a81,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,5797e28d-1318-4728-8b17-bcb78d85349a,5797e28d-1318-4728-8b17-bcb78d85349a,1,0,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,1,0,9f9e6146-17ce-4296-a89f-33dfe4d0468d,9f9e6146-17ce-4296-a89f-33dfe4d0468d,1,0,3cf15377-a5bb-4c37-9780-0dbff8d3d5bb,3cf15377-a5bb-4c37-9780-0dbff8d3d5bb,1,0,3aa020db-a811-4fb9-9ea9-00a3359fbb53,3aa020db-a811-4fb9-9ea9-00a3359fbb53,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,46692974-34aa-45e1-8fec-9b36064073cd,46692974-34aa-45e1-8fec-9b36064073cd,1,0,a6308250-2b1b-40ef-bd20-589d519e3c38,a6308250-2b1b-40ef-bd20-589d519e3c38,1,0,22eafd3b-dc42-4a99-89af-3cd5311dc29f,22eafd3b-dc42-4a99-89af-3cd5311dc29f,1,0,c67f671a-3c83-44f4-9c6a-e06667ac8da6,c67f671a-3c83-44f4-9c6a-e06667ac8da6,1,0,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,1,0,1fbd4cfa-58cb-41ea-920e-a39cfa6ad90c,1fbd4cfa-58cb-41ea-920e-a39cfa6ad90c,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,f6dd250e-75fd-47fc-abcb-79ea19ebd747,f6dd250e-75fd-47fc-abcb-79ea19ebd747,1,0,53c41e6c-89b0-4818-9832-02140373979b,53c41e6c-89b0-4818-9832-02140373979b,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,57e75b31-13b3-46fc-8ec4-7570ab0e9928,57e75b31-13b3-46fc-8ec4-7570ab0e9928,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,68704139-32bb-4b00-b439-147025d06a35,68704139-32bb-4b00-b439-147025d06a35,1,0,df80f175-7f2b-44f8-90d4-118e2e157356,df80f175-7f2b-44f8-90d4-118e2e157356,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,716302cc-ad47-4823-a81a-4c58857aa0a4,716302cc-ad47-4823-a81a-4c58857aa0a4,1,0,d0f3824e-ddfb-491d-8aea-e4e4806dc3ee,d0f3824e-ddfb-491d-8aea-e4e4806dc3ee,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,7707d7b0-bf30-4362-929a-a5de104266fc,7707d7b0-bf30-4362-929a-a5de104266fc,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,6d93ec4f-167a-4804-910b-988ee8aad78e,6d93ec4f-167a-4804-910b-988ee8aad78e,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,c5871658-94dd-4df4-9a3f-db5d245dd106,c5871658-94dd-4df4-9a3f-db5d245dd106,1,0,a3131bf3-88b1-431c-a01c-be6e26396f91,a3131bf3-88b1-431c-a01c-be6e26396f91,1,0,5c3edcbd-fb62-471c-b75b-f1a759956ebe,5c3edcbd-fb62-471c-b75b-f1a759956ebe,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,15111bf5-5bf5-4486-aff0-20ded684b67f,15111bf5-5bf5-4486-aff0-20ded684b67f,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,046e6f4f-3d92-4b20-b19f-fca608fa0f11,046e6f4f-3d92-4b20-b19f-fca608fa0f11,1,0,74bea66f-15bf-48de-9ff9-f9c35a8bf5cc,74bea66f-15bf-48de-9ff9-f9c35a8bf5cc,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,07288e13-583c-4caf-983a-76c5d2ebf66f,07288e13-583c-4caf-983a-76c5d2ebf66f,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,b8d7bdc9-2778-4f36-a0d9-c43fce15eb3c,b8d7bdc9-2778-4f36-a0d9-c43fce15eb3c,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,913743c3-9529-4c86-b056-93e954df7819,913743c3-9529-4c86-b056-93e954df7819,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,6b5720a8-0bcc-4196-934d-84db9d99ec27,6b5720a8-0bcc-4196-934d-84db9d99ec27,1,0,c0b3e3e9-20bc-42e1-a68f-646a958586d1,c0b3e3e9-20bc-42e1-a68f-646a958586d1,1,0,39496918-7d71-4960-ad8b-0028ae659266,39496918-7d71-4960-ad8b-0028ae659266,1,0,bdf2fd35-2000-45c2-9df6-65031ee0e4af,bdf2fd35-2000-45c2-9df6-65031ee0e4af,1,0,e91118e9-d054-41a1-bfe9-343179718f33,e91118e9-d054-41a1-bfe9-343179718f33,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,042245ef-3a30-46fb-b3e3-6599d5426cbd,042245ef-3a30-46fb-b3e3-6599d5426cbd,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,89574884-bce2-406d-9961-d1656b306eb8,89574884-bce2-406d-9961-d1656b306eb8,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,d1034240-ab06-413a-9828-a5c7dc879680,d1034240-ab06-413a-9828-a5c7dc879680,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,4f4916dc-b6fe-4f99-9220-bd7c076408ae,4f4916dc-b6fe-4f99-9220-bd7c076408ae,1,0,857daa3a-0058-4464-9173-13a2926812e2,857daa3a-0058-4464-9173-13a2926812e2,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,93ec2af7-2ca8-4133-8cc0-31073f9bf216,93ec2af7-2ca8-4133-8cc0-31073f9bf216,1,0,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,1,0,681b27ac-69a5-4c5b-b2c7-285330fe5a4a,681b27ac-69a5-4c5b-b2c7-285330fe5a4a,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,999df397-a730-4110-b253-59fd5583dab9,999df397-a730-4110-b253-59fd5583dab9,1,0,7f7bf652-0375-4f49-94f1-ebe6a00e4e23,7f7bf652-0375-4f49-94f1-ebe6a00e4e23,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,528d3535-f20f-4d3c-8b7d-482d4d626eb0,528d3535-f20f-4d3c-8b7d-482d4d626eb0,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,871a75ef-1987-4695-9916-07439aeedc53,871a75ef-1987-4695-9916-07439aeedc53,1,0,ba64deac-5826-43f2-b88a-2e180da87059,ba64deac-5826-43f2-b88a-2e180da87059,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,77de81f0-97c5-4751-9f38-f5785c7c45e0,77de81f0-97c5-4751-9f38-f5785c7c45e0,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,9136814a-89e6-4b0f-8ca1-73e4ef29f534,9136814a-89e6-4b0f-8ca1-73e4ef29f534,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,31ba33d4-5941-4b11-ae99-b15188bfef76,31ba33d4-5941-4b11-ae99-b15188bfef76,1,0,0744e8be-747c-47bb-85f3-58b6f6f9b786,0744e8be-747c-47bb-85f3-58b6f6f9b786,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,68e207e7-8c20-426d-8a0e-c3dd4d683631,68e207e7-8c20-426d-8a0e-c3dd4d683631,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,69530795-5a90-47b0-ae8d-a44b420b51f6,69530795-5a90-47b0-ae8d-a44b420b51f6,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,1a3eff9b-6598-4e11-9b8f-81249c53abec,1a3eff9b-6598-4e11-9b8f-81249c53abec,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,3da31d2f-24dd-469b-bd3b-073fa3b3d585,3da31d2f-24dd-469b-bd3b-073fa3b3d585,1,0,33b12dd8-7a86-4a51-bd3d-4911ec1ffde4,33b12dd8-7a86-4a51-bd3d-4911ec1ffde4,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,160e9608-7301-4572-af02-6a7cceca1560,160e9608-7301-4572-af02-6a7cceca1560,1,0,4a70416b-6598-4239-be70-2c0c8255388a,4a70416b-6598-4239-be70-2c0c8255388a,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,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,a5cc5ae2-be80-4957-8aca-9e477433dfcc,a5cc5ae2-be80-4957-8aca-9e477433dfcc,1,0,62fa393c-687c-49bf-8a25-81adc04430fb,62fa393c-687c-49bf-8a25-81adc04430fb,1,0,13fcf1e8-730e-436f-b316-6bcb8301f894,13fcf1e8-730e-436f-b316-6bcb8301f894,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,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,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,e6af9db4-b93f-422e-846c-e6c5fd33f992,e6af9db4-b93f-422e-846c-e6c5fd33f992,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,590aba18-7d56-48e3-9454-5f2882a32f80,590aba18-7d56-48e3-9454-5f2882a32f80,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,e678bb94-3cb1-4706-8e76-4fada4d5036c,e678bb94-3cb1-4706-8e76-4fada4d5036c,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,7ea3206a-2a16-460d-ad6d-849103f50bdb,7ea3206a-2a16-460d-ad6d-849103f50bdb,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,1,0,10302ca9-850c-4561-a774-d099c20b1919,10302ca9-850c-4561-a774-d099c20b1919,1,0,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,1,0,d693bfcf-e117-445b-b0e1-d895bc5227c4,d693bfcf-e117-445b-b0e1-d895bc5227c4,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,0508e7ab-3dd9-42b4-9542-089ce0656bbb,0508e7ab-3dd9-42b4-9542-089ce0656bbb,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,f78ffd16-5bd4-421a-99af-9cf5f126d960,f78ffd16-5bd4-421a-99af-9cf5f126d960,1,0,2bd23dd2-8107-410f-8137-3d022546594b,2bd23dd2-8107-410f-8137-3d022546594b,1,0,3f09badb-70bd-4996-822f-2e2e9524f09d,3f09badb-70bd-4996-822f-2e2e9524f09d,1,0,aca89232-c531-47ca-a82e-e7bfadd56674,aca89232-c531-47ca-a82e-e7bfadd56674,1,0,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,1,0,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,1,0,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,1,0,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,1,0,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,1,0,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,1,0,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,1,0,c7130560-3953-496f-b1d0-cae676fcb5a9,c7130560-3953-496f-b1d0-cae676fcb5a9,1,0,b7d5c226-a787-45e5-b46b-c51b145fcf6a,b7d5c226-a787-45e5-b46b-c51b145fcf6a,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,9b77e99b-b1d3-4368-a671-59e0ebba3f0e,9b77e99b-b1d3-4368-a671-59e0ebba3f0e,1,0,ad847998-6e50-4160-81fc-3b58ad68f202,ad847998-6e50-4160-81fc-3b58ad68f202,1,0,b2b98bcf-41da-4643-a6dc-39e5379b99e5,b2b98bcf-41da-4643-a6dc-39e5379b99e5,1,0,fdd9fb90-f5f0-4c08-9341-4374403bc950,fdd9fb90-f5f0-4c08-9341-4374403bc950,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,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,e9e242b7-0077-4c47-8f45-df50e7cc90cf,e9e242b7-0077-4c47-8f45-df50e7cc90cf,1,0,820383e1-9b95-4c0f-8464-722f1fe64ad5,820383e1-9b95-4c0f-8464-722f1fe64ad5,1,0,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,1,0,292bfe6b-703e-40cb-856d-abb470e6709f,292bfe6b-703e-40cb-856d-abb470e6709f,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,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,6ddd9c1f-daff-494c-bd6f-741bd40881ab,6ddd9c1f-daff-494c-bd6f-741bd40881ab,1,0,683c1238-5828-4ab9-a89e-7a3b31fc7fa5,683c1238-5828-4ab9-a89e-7a3b31fc7fa5,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,313d9858-3995-4a4c-b2b0-15d2350417b4,313d9858-3995-4a4c-b2b0-15d2350417b4,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,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,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,40cefda6-490e-4962-9747-94b823ea4ed7,40cefda6-490e-4962-9747-94b823ea4ed7,1,0,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,1,0,7e8d7d4f-98f7-4c81-94b1-f2d552b1ae5d,7e8d7d4f-98f7-4c81-94b1-f2d552b1ae5d,1,0,6aa6d14f-cd6c-413a-864e-d847d9ce120b,6aa6d14f-cd6c-413a-864e-d847d9ce120b,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,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,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,933ae96b-c69e-4396-bbfb-0daa81e529a4,933ae96b-c69e-4396-bbfb-0daa81e529a4,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,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,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,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,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,543c32a4-ad43-4f60-9b35-77081f841ad9,543c32a4-ad43-4f60-9b35-77081f841ad9,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,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,63066bee-d428-4e32-a032-f17475056537,63066bee-d428-4e32-a032-f17475056537,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,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,08c83b5e-08dd-425d-b024-62af684df926,08c83b5e-08dd-425d-b024-62af684df926,1,0,9e40a2ef-0c96-4455-8ed6-6e09011df3df,9e40a2ef-0c96-4455-8ed6-6e09011df3df,1,0,0de78690-2038-456b-b140-2b2b81f14e44,0de78690-2038-456b-b140-2b2b81f14e44,1,0,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,1,0,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,1,0,b953eafc-20be-4463-8c3e-903184e18402,b953eafc-20be-4463-8c3e-903184e18402,1,0,dcefdde9-645e-43c7-9244-384dadc75439,dcefdde9-645e-43c7-9244-384dadc75439,1,0,fa787228-aed5-4a16-b958-d102b78bf776,fa787228-aed5-4a16-b958-d102b78bf776,1,0,d511a261-4f9b-44e8-b3a1-1e6d393ec6e1,d511a261-4f9b-44e8-b3a1-1e6d393ec6e1,1,0,be900d20-c02d-476d-9ede-2bc5303ef6cb,be900d20-c02d-476d-9ede-2bc5303ef6cb,1,0,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,1,0,07b53437-cc8d-4834-a1e0-7007538b6eab,07b53437-cc8d-4834-a1e0-7007538b6eab,1,0,0dbec644-cb98-4368-ab76-5997259cbce7,0dbec644-cb98-4368-ab76-5997259cbce7,1,0,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,1,0,74b1237b-4a46-438d-9756-b564260df99d,74b1237b-4a46-438d-9756-b564260df99d,1,0,19decf0f-c24e-4551-b3d6-8ebd413cba78,19decf0f-c24e-4551-b3d6-8ebd413cba78,1,0,66a2df23-3a08-40d2-8e6c-2db10a3bca7a,66a2df23-3a08-40d2-8e6c-2db10a3bca7a,1,0,189383a5-0001-4427-9e00-18451e4bfb6e,189383a5-0001-4427-9e00-18451e4bfb6e,1,0,966ecce5-ec91-4f8e-82b2-364b38eb7ff4,966ecce5-ec91-4f8e-82b2-364b38eb7ff4,1,0,5ee4b3ee-b795-48c1-9bad-f4010b559b0e,5ee4b3ee-b795-48c1-9bad-f4010b559b0e,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,1ef34700-ce65-4985-b4d6-7133133ef32d,1ef34700-ce65-4985-b4d6-7133133ef32d,1,0,886d99ce-9ea2-4160-8d73-84df7197c030,886d99ce-9ea2-4160-8d73-84df7197c030,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,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,1c32ac14-580d-4ac2-939b-dc5ce64b4f7f,1c32ac14-580d-4ac2-939b-dc5ce64b4f7f,1,0,9162a85e-a385-42b0-b809-da916fce44b7,9162a85e-a385-42b0-b809-da916fce44b7,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,fb7a9f90-15ef-4121-adff-cd40f699182b,fb7a9f90-15ef-4121-adff-cd40f699182b,1,0,0fa52339-2d11-4c81-92b9-aa27d116134d,0fa52339-2d11-4c81-92b9-aa27d116134d,1,0,26135cf4-fbe1-4f72-a1fd-69e85ec008a6,26135cf4-fbe1-4f72-a1fd-69e85ec008a6,1,0,d83b8068-512d-4c10-88b4-f9b3413a3a81,d83b8068-512d-4c10-88b4-f9b3413a3a81,1,0,b3bbcd07-a593-4591-9d7e-9a990c0acb62,b3bbcd07-a593-4591-9d7e-9a990c0acb62,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,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,8f4d5fc1-5c2c-4202-bb79-a180b03b3267,8f4d5fc1-5c2c-4202-bb79-a180b03b3267,1,0,da881296-fea4-444b-96b2-12cb69d588c7,da881296-fea4-444b-96b2-12cb69d588c7,1,0,03f9d2d0-eae4-4098-a70e-4eb569b11fd9,03f9d2d0-eae4-4098-a70e-4eb569b11fd9,1,0,30031e74-e58a-44a2-98dd-fc8c950831c4,30031e74-e58a-44a2-98dd-fc8c950831c4,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,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,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,2c04d747-c363-4218-92c9-5c83393e928b,2c04d747-c363-4218-92c9-5c83393e928b,1,0,093b8255-7ee5-4463-bd20-542b1d63e799,093b8255-7ee5-4463-bd20-542b1d63e799,1,0,5afb95e0-51a3-4a0f-bea7-e06716421974,5afb95e0-51a3-4a0f-bea7-e06716421974,1,0,2bce3fbe-436b-4a9f-8478-5436d61cd57c,2bce3fbe-436b-4a9f-8478-5436d61cd57c,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,3d02ca78-c396-4797-909c-e6b910c0ff66,3d02ca78-c396-4797-909c-e6b910c0ff66,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,80c18959-93f0-46e6-90fd-b564efcaa395,80c18959-93f0-46e6-90fd-b564efcaa395,1,0,c53b9e19-54e4-49b4-ac63-eaeee5c2e040,c53b9e19-54e4-49b4-ac63-eaeee5c2e040,1,0,47afc45d-719e-4740-a8aa-6157c4b1aea8,47afc45d-719e-4740-a8aa-6157c4b1aea8,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,b6d891e4-15d6-4b40-b474-a8a1d10231e8,b6d891e4-15d6-4b40-b474-a8a1d10231e8,1,0,e60a7341-3995-4d8c-a3c6-a23ea0137754,e60a7341-3995-4d8c-a3c6-a23ea0137754,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,77fe53c2-de9d-4483-97c9-f7d44e137d5e,77fe53c2-de9d-4483-97c9-f7d44e137d5e,1,0,ac7ea771-4b10-4d43-9c0a-9cd36e4c49a4,ac7ea771-4b10-4d43-9c0a-9cd36e4c49a4,1,0,593be64c-6792-46d9-8618-84c50c9ad9e4,593be64c-6792-46d9-8618-84c50c9ad9e4,1,0,208d29cb-040f-4282-b8e8-dda8417b8e92,208d29cb-040f-4282-b8e8-dda8417b8e92,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,3913f78f-ce34-4ae3-840a-ccdf06319cbb,3913f78f-ce34-4ae3-840a-ccdf06319cbb,1,0,104cf3e3-2104-4ac2-bdc6-792750a63ea0,104cf3e3-2104-4ac2-bdc6-792750a63ea0,1,0,35dee1ee-ca9e-4b6b-9767-1107283f5a04,35dee1ee-ca9e-4b6b-9767-1107283f5a04,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,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,48659b94-ace8-45f4-a043-6b2731ec6925,48659b94-ace8-45f4-a043-6b2731ec6925,1,0,3a8e60f9-19cb-42a6-a448-ad211261d9b8,3a8e60f9-19cb-42a6-a448-ad211261d9b8,1,0,74320602-094a-4645-b2c9-3053377a3ac3,74320602-094a-4645-b2c9-3053377a3ac3,1,0,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,1,0,b066c732-9c5f-4504-894f-96d457b0768f,b066c732-9c5f-4504-894f-96d457b0768f,1,0,9366463d-aa8a-4e89-86d8-c7f746f9551b,9366463d-aa8a-4e89-86d8-c7f746f9551b,1,0,e25da569-d435-45b2-b4e8-fc76d7f1c8df,e25da569-d435-45b2-b4e8-fc76d7f1c8df,1,0,a51a7f57-9c52-4457-819c-13e1b6f886e1,a51a7f57-9c52-4457-819c-13e1b6f886e1,1,0,7d08daba-5e36-4ce3-8a70-17750959b89e,7d08daba-5e36-4ce3-8a70-17750959b89e,1,0,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,1,0,39344a8c-2662-48ff-937b-12951bb268fb,39344a8c-2662-48ff-937b-12951bb268fb,1,0,b577663f-ead2-4b18-a4f6-f7f303e89319,b577663f-ead2-4b18-a4f6-f7f303e89319,1,0,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,1,0,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,1,0,72663843-4010-42ed-989b-0b58bf9f7146,72663843-4010-42ed-989b-0b58bf9f7146,1,0,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,1,0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,1,0,a132189c-6584-4bb1-9cfd-1415cd83228a,a132189c-6584-4bb1-9cfd-1415cd83228a,1,0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,1,0,a3670f95-5abe-49ee-8ea5-d7e4438801ba,a3670f95-5abe-49ee-8ea5-d7e4438801ba,1,0,4443dea1-5143-4e76-97a7-c35dbe1665e4,4443dea1-5143-4e76-97a7-c35dbe1665e4,1,0,0d780521-0767-425a-b44d-315d2dc42d04,0d780521-0767-425a-b44d-315d2dc42d04,1,0,c5b1572d-28f5-42f3-b2e0-8b54f091642e,c5b1572d-28f5-42f3-b2e0-8b54f091642e,1,0,0986c1b6-b677-428d-b49f-a93e40e77171,0986c1b6-b677-428d-b49f-a93e40e77171,1,0,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,1,0,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,1,0,b6662b2e-7e93-4eaa-9e4b-b5647285932b,b6662b2e-7e93-4eaa-9e4b-b5647285932b,1,0,4a180f2c-dc54-4591-8f62-f236d1e07799,4a180f2c-dc54-4591-8f62-f236d1e07799,1,0,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,1,0,a9a51e79-4c79-4a43-931b-c0321c1cd65b,a9a51e79-4c79-4a43-931b-c0321c1cd65b,1,0,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,1,0,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,1,0,22f2696e-0ac1-4a74-bca9-987b267b2b59,22f2696e-0ac1-4a74-bca9-987b267b2b59,1,0,d705cacc-3485-46d7-9ff4-48c3c0757c81,d705cacc-3485-46d7-9ff4-48c3c0757c81,1,0,98f043ea-633c-4a03-a56f-efbc9e6ef288,98f043ea-633c-4a03-a56f-efbc9e6ef288,1,0,2033b92a-0750-478a-a12d-cf4f74d0a9da,2033b92a-0750-478a-a12d-cf4f74d0a9da,1,0,92fa2196-d8e5-45f9-9d2e-59d837b163ea,92fa2196-d8e5-45f9-9d2e-59d837b163ea,1,0,25dc2290-e283-4449-81c1-1ce15b58067f,25dc2290-e283-4449-81c1-1ce15b58067f,1,0,c534a865-a17f-41e7-88b9-c6af89c9d202,c534a865-a17f-41e7-88b9-c6af89c9d202,1,0,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,1,0,0127937c-94c0-43fe-9630-cc2ec6904ad8,0127937c-94c0-43fe-9630-cc2ec6904ad8,1,0,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,1,0,8df5b3cd-7788-4198-a530-e88be83f1cdf,8df5b3cd-7788-4198-a530-e88be83f1cdf,1,0,ffaeea66-66d5-4741-a9b5-875afebfce7f,ffaeea66-66d5-4741-a9b5-875afebfce7f,1,0,8f6b6576-1d21-46c1-905c-f1685f0eee7a,8f6b6576-1d21-46c1-905c-f1685f0eee7a,1,0,06827a85-a9d1-472e-8087-906ff94a4adc,06827a85-a9d1-472e-8087-906ff94a4adc,1,0,bb3954de-5eaa-4ec0-931b-a1a9f233c120,bb3954de-5eaa-4ec0-931b-a1a9f233c120,1,0,10689022-cbbb-4134-901f-1e778fac2693,10689022-cbbb-4134-901f-1e778fac2693,1,0,f14e363f-512b-4658-afb5-10c3be5ff870,f14e363f-512b-4658-afb5-10c3be5ff870,1,0,4d211427-4494-45d4-ae84-38235f35eaef,4d211427-4494-45d4-ae84-38235f35eaef,1,0,f7784993-d95c-4652-9894-3cf67aeabeb8,f7784993-d95c-4652-9894-3cf67aeabeb8,1,0,485d8b29-79b1-4798-a742-75546ddb7262,485d8b29-79b1-4798-a742-75546ddb7262,1,0,e248de85-8f76-4471-ab3d-d35514b69b78,e248de85-8f76-4471-ab3d-d35514b69b78,1,0,8928ce42-2b12-402f-8115-98b5655db556,8928ce42-2b12-402f-8115-98b5655db556,1,0,9b62c109-7b52-4803-83e6-a5413cd00984,9b62c109-7b52-4803-83e6-a5413cd00984,1,0,cddb4bb0-22ec-49ae-b332-62d7307b93fe,cddb4bb0-22ec-49ae-b332-62d7307b93fe,1,0,72876709-806e-4406-b9c1-b8117f4d750a,72876709-806e-4406-b9c1-b8117f4d750a,1,0,b1efafef-74cc-4d36-a32c-b472712f11f3,b1efafef-74cc-4d36-a32c-b472712f11f3,1,0,ceb05584-1ecd-4681-8575-c0452f95b685,ceb05584-1ecd-4681-8575-c0452f95b685,1,0,03d08c14-f814-4e12-8f96-020c36cca2bf,03d08c14-f814-4e12-8f96-020c36cca2bf,1,0,a1a7aab6-cf35-42ce-97bb-c112638a2748,a1a7aab6-cf35-42ce-97bb-c112638a2748,1,0,4e36184e-d818-4f38-9257-6d91d9cc85ae,4e36184e-d818-4f38-9257-6d91d9cc85ae,1,0,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,1,0,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,1,0,3893a258-a9c7-441a-b80c-1cc8c3f4735c,3893a258-a9c7-441a-b80c-1cc8c3f4735c,1,0,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,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,8a6cdb21-4eff-46dc-b928-738199f54581,8a6cdb21-4eff-46dc-b928-738199f54581,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,d927f1f0-df5f-44a1-bbfd-152ebf1559dd,d927f1f0-df5f-44a1-bbfd-152ebf1559dd,1,0,7ce7aec1-fa24-4dd7-8754-8124e78521bf,7ce7aec1-fa24-4dd7-8754-8124e78521bf,1,0,8b115575-9d8b-42f8-9ec8-0825a4397c7f,8b115575-9d8b-42f8-9ec8-0825a4397c7f,1,0,40fa5847-28f0-41ff-bfb8-ec33c8626d33,40fa5847-28f0-41ff-bfb8-ec33c8626d33,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,5299d417-02c6-4f73-9c0c-8c22d267ab99,5299d417-02c6-4f73-9c0c-8c22d267ab99,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,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,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,4a2c2478-03ad-4521-9356-09ee07fce972,4a2c2478-03ad-4521-9356-09ee07fce972,1,0,077af11c-fd3c-4e87-b169-5f3137464f77,077af11c-fd3c-4e87-b169-5f3137464f77,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,879304f7-9507-4fb8-9177-355428d6bba9,879304f7-9507-4fb8-9177-355428d6bba9,1,0,efb50581-cc7e-47ac-bfa2-86da2860bf1d,efb50581-cc7e-47ac-bfa2-86da2860bf1d,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,a2f943a4-05a3-4eb6-9a10-74b6859469a6,a2f943a4-05a3-4eb6-9a10-74b6859469a6,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,f6d6f1b9-3956-4fdb-bbb0-5d81f083a072,f6d6f1b9-3956-4fdb-bbb0-5d81f083a072,1,0,a5dd4200-0f25-452d-9014-3b1506c31557,a5dd4200-0f25-452d-9014-3b1506c31557,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,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,65678df4-a323-451f-98ba-305a74fc5805,65678df4-a323-451f-98ba-305a74fc5805,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,02082174-7276-4256-b9bb-9872065a01c4,02082174-7276-4256-b9bb-9872065a01c4,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,1,0,b1230b96-f4c8-4311-bfc0-df33bcc41394,b1230b96-f4c8-4311-bfc0-df33bcc41394,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,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,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,554320a0-55dc-4289-bb08-63d405cb4ca5,554320a0-55dc-4289-bb08-63d405cb4ca5,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,f5bb88eb-c239-4ae3-a297-dfbbd679e008,f5bb88eb-c239-4ae3-a297-dfbbd679e008,1,0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,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,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,1,0,7433b2a9-f634-4af7-ac85-6aa1280ea239,7433b2a9-f634-4af7-ac85-6aa1280ea239,1,0,9f32e85c-2ed6-41db-b0ec-6d8596940e80,9f32e85c-2ed6-41db-b0ec-6d8596940e80,1,0,f259b6b4-d582-429f-a16f-027a6bcb7438,f259b6b4-d582-429f-a16f-027a6bcb7438,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,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,1,0,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,f4afd271-64de-4a6d-b0ef-f27db4d66d32,f4afd271-64de-4a6d-b0ef-f27db4d66d32,1,0,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,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,0248a6c4-7ce5-4898-bb1d-9ad9509e6795,0248a6c4-7ce5-4898-bb1d-9ad9509e6795,1,0,6a5b9e7f-c368-40d8-812a-64f68ea1ef9d,6a5b9e7f-c368-40d8-812a-64f68ea1ef9d,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,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,caea53be-d2f7-4109-8017-d2bfdfde8c6f,caea53be-d2f7-4109-8017-d2bfdfde8c6f,1,0,60f30706-9919-4767-a17c-660754b9d542,60f30706-9919-4767-a17c-660754b9d542,1,0,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,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,94928ba3-6bbf-4bd3-94cf-9c51b50e005f,94928ba3-6bbf-4bd3-94cf-9c51b50e005f,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,e590825f-10c6-4fdd-98cd-3da01da2ed4f,e590825f-10c6-4fdd-98cd-3da01da2ed4f,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,bea697f4-46a8-4698-ac60-64326e442f2b,bea697f4-46a8-4698-ac60-64326e442f2b,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,195ea1f8-3e38-4254-a33d-c87424b8f7dc,195ea1f8-3e38-4254-a33d-c87424b8f7dc,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,bc2dd611-b589-4519-b274-40db5c66b378,bc2dd611-b589-4519-b274-40db5c66b378,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,2388e3f4-b23b-488f-9ea5-d9434efca195,2388e3f4-b23b-488f-9ea5-d9434efca195,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,bf5faaef-3a03-40bc-8d3a-644c0874b9ce,bf5faaef-3a03-40bc-8d3a-644c0874b9ce,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,75ffd0b9-79be-4600-a310-591fddb6d63e,75ffd0b9-79be-4600-a310-591fddb6d63e,1,0,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,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,c7f544c6-488e-4178-af0d-d2ae07a8b89a,c7f544c6-488e-4178-af0d-d2ae07a8b89a,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,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,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,1,0,8c4c7982-36cc-4dc9-b055-9954f61e6365,8c4c7982-36cc-4dc9-b055-9954f61e6365,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,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,1,0,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,1,0,95a71c2e-aa39-42ec-8889-2390a553f146,95a71c2e-aa39-42ec-8889-2390a553f146,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,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,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,387d3bbf-cddd-4506-b14f-89c1f37adbbc,387d3bbf-cddd-4506-b14f-89c1f37adbbc,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,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,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,8947286f-ba4a-44e7-b805-2f096028dc4f,8947286f-ba4a-44e7-b805-2f096028dc4f,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,e353db15-71c5-4b68-9ffb-9800800a59dc,e353db15-71c5-4b68-9ffb-9800800a59dc,1,0,976d9ba7-d9c7-4a9e-ad5d-53cb5bca8984,976d9ba7-d9c7-4a9e-ad5d-53cb5bca8984,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,19b98b60-deb1-4642-8159-2a11332558e2,19b98b60-deb1-4642-8159-2a11332558e2,1,0,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,a687748a-0b2a-4277-b935-07616d28430d,a687748a-0b2a-4277-b935-07616d28430d,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,9059defa-047f-4dac-9749-3d0a6a77308a,9059defa-047f-4dac-9749-3d0a6a77308a,1,0,6010c27f-e857-4fc3-be13-1eea51f02ea7,6010c27f-e857-4fc3-be13-1eea51f02ea7,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,5e4ee280-3dd2-4f68-be6c-fb5343438817,5e4ee280-3dd2-4f68-be6c-fb5343438817,1,0,75d1b6df-ede3-4172-987f-fe1551f686ee,75d1b6df-ede3-4172-987f-fe1551f686ee,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,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,6527be82-a665-4f8a-818b-a35b96b3484b,6527be82-a665-4f8a-818b-a35b96b3484b,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,fbbb2449-9a07-4229-8ea5-bee0afab5f56,fbbb2449-9a07-4229-8ea5-bee0afab5f56,1,0,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,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,f38b6034-5246-42a7-8f3c-51eaf3e5399c,f38b6034-5246-42a7-8f3c-51eaf3e5399c,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,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,52f3e20c-1cf7-4284-a083-6539782f4bc3,52f3e20c-1cf7-4284-a083-6539782f4bc3,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,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,1,0,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,1,0,9039f720-5728-4918-87d5-8b2d07cabcfd,9039f720-5728-4918-87d5-8b2d07cabcfd,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,3705a086-46e6-4090-a52a-535908eea8a5,3705a086-46e6-4090-a52a-535908eea8a5,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,5d336d1e-24f9-404a-9671-3bcdc7c48a25,5d336d1e-24f9-404a-9671-3bcdc7c48a25,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,ea2e9a4e-eca1-4a6e-b7a6-8922a11334aa,ea2e9a4e-eca1-4a6e-b7a6-8922a11334aa,1,0,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,1,0,9d8496ea-fc0c-410d-994d-7480350d71d3,9d8496ea-fc0c-410d-994d-7480350d71d3,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,5b62e0d1-8dba-47db-8dbb-517ad935fa0d,5b62e0d1-8dba-47db-8dbb-517ad935fa0d,1,0,e7a63151-fc1a-4563-8768-26d854ab012b,e7a63151-fc1a-4563-8768-26d854ab012b,1,0,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,73c7750f-8291-4e19-8551-635cd6b94215,73c7750f-8291-4e19-8551-635cd6b94215,1,0,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,1,0,a1463001-f3d8-4064-95e4-cf49aedc2a8c,a1463001-f3d8-4064-95e4-cf49aedc2a8c,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,65dd4904-0837-4de5-a5e5-601151055d94,65dd4904-0837-4de5-a5e5-601151055d94,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,df48bfa3-5502-4a61-a79f-1dea043dac36,df48bfa3-5502-4a61-a79f-1dea043dac36,1,0,adee37e6-f087-422f-91b3-681f3d73189c,adee37e6-f087-422f-91b3-681f3d73189c,1,0,eb276904-cad7-4401-bb78-2d13946291f1,eb276904-cad7-4401-bb78-2d13946291f1,1,0,171a64b6-39d2-455f-b304-1c6ea8d85494,171a64b6-39d2-455f-b304-1c6ea8d85494,1,0,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,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,1e633034-6dcc-4564-9f40-348c32143314,1e633034-6dcc-4564-9f40-348c32143314,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,1f3057c2-135f-44b2-9f86-34481fbc5596,1f3057c2-135f-44b2-9f86-34481fbc5596,1,0,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,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,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,3e4361e9-2baf-407b-9320-b2a265b44e46,3e4361e9-2baf-407b-9320-b2a265b44e46,1,0,a5902ed4-a8f1-460e-aced-0094b2c384a3,a5902ed4-a8f1-460e-aced-0094b2c384a3,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,e2c76c41-4c47-4588-a081-7bd81ac1698b,e2c76c41-4c47-4588-a081-7bd81ac1698b,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,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,5e380276-2a08-435c-927e-a7f56f5a4dbc,5e380276-2a08-435c-927e-a7f56f5a4dbc,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,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,c0218ef0-4aa1-4ff1-963b-e6ab1001ae9e,c0218ef0-4aa1-4ff1-963b-e6ab1001ae9e,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,62d4d073-80df-41e6-a915-43a4f5575206,62d4d073-80df-41e6-a915-43a4f5575206,1,0,145ecede-baae-4725-832a-5387794922ed,145ecede-baae-4725-832a-5387794922ed,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,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,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,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,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,db28f23f-a771-46c0-96e8-5e4389b28b8b,db28f23f-a771-46c0-96e8-5e4389b28b8b,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,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,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,322645d4-e3fb-467b-a55d-d8e74cff2ea3,322645d4-e3fb-467b-a55d-d8e74cff2ea3,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,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,9cd2fc77-a4b0-457e-a6b0-63dbf521bf90,9cd2fc77-a4b0-457e-a6b0-63dbf521bf90,1,0,8363bd46-1ea5-44f0-858a-05bc03f6020e,8363bd46-1ea5-44f0-858a-05bc03f6020e,1,0,a321b6db-391b-4c65-8d27-ce486d10055e,a321b6db-391b-4c65-8d27-ce486d10055e,1,0,800ef5f0-fdd1-4f8b-8c0b-9744952bfb5b,800ef5f0-fdd1-4f8b-8c0b-9744952bfb5b,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,826c2821-147d-4aaf-910c-acfbdb58a29f,826c2821-147d-4aaf-910c-acfbdb58a29f,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,862e2759-5311-4c68-8977-86133bcf8c0e,862e2759-5311-4c68-8977-86133bcf8c0e,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,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,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,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,11c5930d-f882-46bd-9e7b-63e5344f6604,11c5930d-f882-46bd-9e7b-63e5344f6604,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,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,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,b3f188f4-d83e-4e97-b7d3-fc384b46a80a,b3f188f4-d83e-4e97-b7d3-fc384b46a80a,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,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,d3b09b09-df2d-40e5-86ce-84dab4898231,d3b09b09-df2d-40e5-86ce-84dab4898231,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,210972af-8687-4526-b288-60e7ee76cd61,210972af-8687-4526-b288-60e7ee76cd61,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,a56ff7f4-2259-455f-b707-b98aacd7d0b2,a56ff7f4-2259-455f-b707-b98aacd7d0b2,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,b6f745d7-1326-494e-b442-e4118955b5db,b6f745d7-1326-494e-b442-e4118955b5db,1,0,86755cbc-efd8-43e7-bba8-975c0a51f38f,86755cbc-efd8-43e7-bba8-975c0a51f38f,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,622d6de2-7404-41cc-961b-131d078d7ab4,622d6de2-7404-41cc-961b-131d078d7ab4,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,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,1,0,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,1,0,4dbf114a-5402-40b0-9cab-19601aa8328e,4dbf114a-5402-40b0-9cab-19601aa8328e,1,0,a0856ca2-6a66-4108-b6d4-82443cdccca6,a0856ca2-6a66-4108-b6d4-82443cdccca6,1,0,378b0708-a0a1-4c82-b55a-796acb27e696,378b0708-a0a1-4c82-b55a-796acb27e696,1,0,8e462c0e-c67a-45e9-9871-1f976b01632d,8e462c0e-c67a-45e9-9871-1f976b01632d,1,0,c5335e1f-3e47-46b7-b695-0653f825d855,c5335e1f-3e47-46b7-b695-0653f825d855,1,0,d7faad11-1e35-460c-8943-49370f328c03,d7faad11-1e35-460c-8943-49370f328c03,1,0,e4726010-85c5-4ccc-b574-4b3b55f0d391,e4726010-85c5-4ccc-b574-4b3b55f0d391,1,0,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,1,0,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,1,0,1f4f839a-4e19-45b8-a988-13ee604c269c,1f4f839a-4e19-45b8-a988-13ee604c269c,1,0,b3aa97e1-baef-45f4-9179-052f35527a5e,b3aa97e1-baef-45f4-9179-052f35527a5e,1,0,d613941f-ed4c-4957-b469-ea6b0d2a121d,d613941f-ed4c-4957-b469-ea6b0d2a121d,1,0,0d8d08e3-194f-416c-a1e0-aa92b40b7911,0d8d08e3-194f-416c-a1e0-aa92b40b7911,1,0,af0178fe-eb3a-485b-9acf-35c8702aa330,af0178fe-eb3a-485b-9acf-35c8702aa330,1,0,201d323b-4c0c-4c93-ae43-43a378ec0d9e,201d323b-4c0c-4c93-ae43-43a378ec0d9e,1,0,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,1,0,c513ceb0-0855-43ce-a311-c9bea88e2563,c513ceb0-0855-43ce-a311-c9bea88e2563,1,0,974bfc13-85c2-454a-b562-e72384eb4c31,974bfc13-85c2-454a-b562-e72384eb4c31,1,0,69cd6adc-b129-4fbc-804d-8d5aaef77280,69cd6adc-b129-4fbc-804d-8d5aaef77280,1,0,3431a3de-cb9d-46dc-b597-3203831796a9,3431a3de-cb9d-46dc-b597-3203831796a9,1,0,f3866271-04ed-4963-852e-cf41e9e18e1d,f3866271-04ed-4963-852e-cf41e9e18e1d,1,0,b77e5ec2-35cd-43ae-957f-af35214fa621,b77e5ec2-35cd-43ae-957f-af35214fa621,1,0,4a04d83d-cadd-4f36-9ec8-f926259c18ba,4a04d83d-cadd-4f36-9ec8-f926259c18ba,1,0,85e670c0-1616-4611-984c-3d40e890b2e9,85e670c0-1616-4611-984c-3d40e890b2e9,1,0,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,1,0,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,1,0,f1693207-2637-412a-972f-2bc79b9c7fc8,f1693207-2637-412a-972f-2bc79b9c7fc8,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,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,65f3ad72-ed03-482b-a2f1-05053eef408a,65f3ad72-ed03-482b-a2f1-05053eef408a,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,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,1,0,ec44f92a-06bf-4a53-a7ba-fbe9846a68a6,ec44f92a-06bf-4a53-a7ba-fbe9846a68a6,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,d7afa1a6-0ac9-4527-8f1c-5317ce259b52,d7afa1a6-0ac9-4527-8f1c-5317ce259b52,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,8b5358e9-5810-45a7-a49e-fe7fe63c73f3,8b5358e9-5810-45a7-a49e-fe7fe63c73f3,1,0,23afa5f6-9c3f-4f79-885b-b20785fc5e45,23afa5f6-9c3f-4f79-885b-b20785fc5e45,1,0,379a8bf7-b760-43d6-b5c4-6393b00e294f,379a8bf7-b760-43d6-b5c4-6393b00e294f,1,0,e44b737f-9076-4070-94ba-ed0b00e60393,e44b737f-9076-4070-94ba-ed0b00e60393,1,0,5582e533-b908-40c9-8c81-876906f0d47e,5582e533-b908-40c9-8c81-876906f0d47e,1,0,71656b8b-2d9b-4ac9-884d-72f47b9c69b7,71656b8b-2d9b-4ac9-884d-72f47b9c69b7,1,0,e0797541-88c2-4ad9-9ff4-d56899e6a6ee,e0797541-88c2-4ad9-9ff4-d56899e6a6ee,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,9cfd3d38-4e0e-40f4-ae77-7a997646e4b2,9cfd3d38-4e0e-40f4-ae77-7a997646e4b2,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,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,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,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,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,b5b56a64-5550-4da9-8872-d42ab871d21c,b5b56a64-5550-4da9-8872-d42ab871d21c,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,626cbb27-6af2-4a9a-959e-15af4417e489,626cbb27-6af2-4a9a-959e-15af4417e489,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,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,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,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,a5f5bc90-e670-4ee7-95fe-067fe1b129f7,a5f5bc90-e670-4ee7-95fe-067fe1b129f7,1,0,f790f620-2247-4a04-b0ad-8aa591655948,f790f620-2247-4a04-b0ad-8aa591655948,1,0,6d9d9087-91ad-4368-9087-0af8f83fdc9e,6d9d9087-91ad-4368-9087-0af8f83fdc9e,1,0,61fdb27e-b449-40a7-8ecd-7e3e8ae3aa23,61fdb27e-b449-40a7-8ecd-7e3e8ae3aa23,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,ea7ab9fa-5119-4773-b17d-fc74c7479d3d,ea7ab9fa-5119-4773-b17d-fc74c7479d3d,1,0,3e0fe508-87fa-47af-a47f-c0630a186900,3e0fe508-87fa-47af-a47f-c0630a186900,1,0,09740271-b8a8-4949-a116-b64449d80036,09740271-b8a8-4949-a116-b64449d80036,1,0,c8fedc0b-33d6-46a5-b4fc-a3cd728f5fd7,c8fedc0b-33d6-46a5-b4fc-a3cd728f5fd7,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,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,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,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,efd4e0a3-2f98-40ef-8089-c853cd588fa6,efd4e0a3-2f98-40ef-8089-c853cd588fa6,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,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,4ec26e3d-6c38-4c90-9f91-c2235f8b4154,4ec26e3d-6c38-4c90-9f91-c2235f8b4154,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,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,5d990585-02dd-4a13-8dfa-920df7d1dbb0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,1,0,788a98e0-194f-466c-b4fa-bafd527aae26,788a98e0-194f-466c-b4fa-bafd527aae26,1,0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,1,0,364218e0-87ba-4008-a3e3-e2351a5e04b8,364218e0-87ba-4008-a3e3-e2351a5e04b8,1,0,143f6db9-a4dc-4039-90d0-6161394a3e2f,143f6db9-a4dc-4039-90d0-6161394a3e2f,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,c343495b-5947-4fe7-a94b-d1f2b2455b4f,c343495b-5947-4fe7-a94b-d1f2b2455b4f,1,0,fbce7316-bb9a-40c1-af3c-352f4b559ab6,fbce7316-bb9a-40c1-af3c-352f4b559ab6,1,0,a3721457-b33b-4742-b6e1-531af10969d1,a3721457-b33b-4742-b6e1-531af10969d1,1,0,9619a603-e578-4f30-bcc6-adfddfa915c0,9619a603-e578-4f30-bcc6-adfddfa915c0,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,573c2153-7069-4589-8a2a-4517edca877d,573c2153-7069-4589-8a2a-4517edca877d,1,0,0a2f03c1-87d7-4589-9c47-8dd67faa1759,0a2f03c1-87d7-4589-9c47-8dd67faa1759,1,0,d1475ede-879c-4085-9980-2edaaf0eb0e9,d1475ede-879c-4085-9980-2edaaf0eb0e9,1,0,54eac28f-da81-4939-b2f9-924d3c215de5,54eac28f-da81-4939-b2f9-924d3c215de5,1,0,20d34659-1bde-4af0-be2c-da922e4ace6e,20d34659-1bde-4af0-be2c-da922e4ace6e,1,0,dec45aee-a4a8-473c-904e-15d5ff31efc3,dec45aee-a4a8-473c-904e-15d5ff31efc3,1,0,8b9318e5-c6ce-4253-9759-8ddd42468775,8b9318e5-c6ce-4253-9759-8ddd42468775,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,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,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,36b15776-5211-4afa-9b6c-c042121218c0,36b15776-5211-4afa-9b6c-c042121218c0,1,0,422a0e10-361f-46ba-b92e-3088d81e12a4,422a0e10-361f-46ba-b92e-3088d81e12a4,1,0,f37b7b25-abd2-4e19-9712-78aafceb4f43,f37b7b25-abd2-4e19-9712-78aafceb4f43,1,0,7cd4c6ea-5795-4bea-a159-1e66650c42fe,7cd4c6ea-5795-4bea-a159-1e66650c42fe,1,0,091fcffa-da7e-4375-bf0b-11cc4950b5ad,091fcffa-da7e-4375-bf0b-11cc4950b5ad,1,0,57e91491-73b6-43f7-b7f8-26efec56ce9e,57e91491-73b6-43f7-b7f8-26efec56ce9e,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,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,d1ade16c-bd56-46e5-874f-3117c5653192,d1ade16c-bd56-46e5-874f-3117c5653192,1,0,339398c0-6407-483c-82f7-266ef08b8657,339398c0-6407-483c-82f7-266ef08b8657,1,0,4f0a8f8c-68cb-4afe-b487-64e7ceeef9ab,4f0a8f8c-68cb-4afe-b487-64e7ceeef9ab,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,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,8fbf9432-77e8-4951-87a1-4368e3a5e117,8fbf9432-77e8-4951-87a1-4368e3a5e117,1,0,fbd5d6d8-05cd-43a3-85da-8dcbeee08333,fbd5d6d8-05cd-43a3-85da-8dcbeee08333,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,928e0e05-b946-48c8-9619-2d93eb94b036,928e0e05-b946-48c8-9619-2d93eb94b036,1,0,99e701f7-9206-4b20-bb32-e60c9a1d570e,99e701f7-9206-4b20-bb32-e60c9a1d570e,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,ec892726-dee3-4edb-ad71-020404b09477,ec892726-dee3-4edb-ad71-020404b09477,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,cee126de-d567-44d3-b14c-35da6e501324,cee126de-d567-44d3-b14c-35da6e501324,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,310aef5a-84d9-4a68-af78-d623beff8a88,310aef5a-84d9-4a68-af78-d623beff8a88,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,8efa4c12-b5ba-4dfd-bdc9-e824402fc4b1,8efa4c12-b5ba-4dfd-bdc9-e824402fc4b1,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,e8045f52-7b27-48b0-b009-d488718b3bef,e8045f52-7b27-48b0-b009-d488718b3bef,1,0,1796bcbb-a629-4509-95c9-78562689f809,1796bcbb-a629-4509-95c9-78562689f809,1,0,cd9799c9-f5bf-4537-8885-06fb6e6b8f93,cd9799c9-f5bf-4537-8885-06fb6e6b8f93,1,0,d19e8fcc-62cc-4ce4-81bc-ead33a2714df,d19e8fcc-62cc-4ce4-81bc-ead33a2714df,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,6fe997a3-d729-420b-b2b2-558e9a1031ee,6fe997a3-d729-420b-b2b2-558e9a1031ee,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,70a06a02-8fb8-4a39-9e50-b7c27c41f49f,70a06a02-8fb8-4a39-9e50-b7c27c41f49f,1,0,810755ad-e921-4250-a0d3-af77fe1b6c79,810755ad-e921-4250-a0d3-af77fe1b6c79,1,0,f0f2f6de-b5ca-416c-b2e7-70a2df0993a1,f0f2f6de-b5ca-416c-b2e7-70a2df0993a1,1,0,99a40d71-f47a-4c04-9137-d297eda2fad9,99a40d71-f47a-4c04-9137-d297eda2fad9,1,0,33fa908a-5516-43c8-94d3-28c60eba8d66,33fa908a-5516-43c8-94d3-28c60eba8d66,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,797f4377-ee0f-4a2d-be90-a74ac10ef682,797f4377-ee0f-4a2d-be90-a74ac10ef682,1,0,f401c5be-2698-452d-8908-08faad120a47,f401c5be-2698-452d-8908-08faad120a47,1,0,98de52ae-dfab-480b-a167-4cf2a3962ed1,98de52ae-dfab-480b-a167-4cf2a3962ed1,1,0,efa5c204-b827-4860-aadd-3737c8fc5f6b,efa5c204-b827-4860-aadd-3737c8fc5f6b,1,0,ef438c21-9d10-4116-8fc7-03927062db59,ef438c21-9d10-4116-8fc7-03927062db59,1,0,7ffa25d5-5199-4e08-af76-969c17709ad4,7ffa25d5-5199-4e08-af76-969c17709ad4,1,0,a93180c6-fcb7-4b28-b954-d2f2831f1832,a93180c6-fcb7-4b28-b954-d2f2831f1832,1,0,b46fff37-cc0e-4ff4-8fde-6bd9d9b895ec,b46fff37-cc0e-4ff4-8fde-6bd9d9b895ec,1,0,eeeede5e-9534-498e-b820-87a5f919c068,eeeede5e-9534-498e-b820-87a5f919c068,1,0,8b1f81e0-1eb0-4aae-9bb6-b25d97a6c9c2,8b1f81e0-1eb0-4aae-9bb6-b25d97a6c9c2,1,0,55ecc3a2-3d94-4201-8a29-06469e0b1a17,55ecc3a2-3d94-4201-8a29-06469e0b1a17,1,0,4123c760-0e30-48d0-8211-1db84f53314b,4123c760-0e30-48d0-8211-1db84f53314b,1,0,a086da23-29d8-4d02-846b-5d171e14d730,a086da23-29d8-4d02-846b-5d171e14d730,1,0,9ec76352-5e4a-485d-bd93-eb739869e406,9ec76352-5e4a-485d-bd93-eb739869e406,1,0,6d3619e3-d125-44b6-9b51-ebf9505b04d2,6d3619e3-d125-44b6-9b51-ebf9505b04d2,1,0,9d2c802c-c946-44e5-b9bc-13ef534968cd,9d2c802c-c946-44e5-b9bc-13ef534968cd,1,0,8046b46e-d855-4a80-8270-72a104e4a941,8046b46e-d855-4a80-8270-72a104e4a941,1,0,4524e15c-4c35-4e1d-910f-5859b5702dff,4524e15c-4c35-4e1d-910f-5859b5702dff,1,0,e200002c-9f3a-49d9-bba1-dca11555511d,e200002c-9f3a-49d9-bba1-dca11555511d,1,0,efa0f74a-7ec0-42f4-a948-7ce3890559d8,efa0f74a-7ec0-42f4-a948-7ce3890559d8,1,0,97e11b91-9590-44b3-afcd-f465ce23e509,97e11b91-9590-44b3-afcd-f465ce23e509,1,0,301c1fc5-ca0a-4fac-ac51-c2e42fb3c2a8,301c1fc5-ca0a-4fac-ac51-c2e42fb3c2a8,1,0,6f2d0c99-3354-4924-959c-59320e1b0063,6f2d0c99-3354-4924-959c-59320e1b0063,1,0,aee8df57-983b-440d-9c02-cace7e632f15,aee8df57-983b-440d-9c02-cace7e632f15,1,0,6e9648dd-388f-4563-88b0-feddc6e9ce8e,6e9648dd-388f-4563-88b0-feddc6e9ce8e,1,0,eb975d96-d230-4454-8f14-6bf5522e06d2,eb975d96-d230-4454-8f14-6bf5522e06d2,1,0,6aa6513c-6f3b-4897-96fd-4a08aeb9eb1e,6aa6513c-6f3b-4897-96fd-4a08aeb9eb1e,1,0,c29d3ae4-9458-46b8-a09b-012e5d435d43,c29d3ae4-9458-46b8-a09b-012e5d435d43,1,0,dad62d28-168c-4659-a800-e484772d9003,dad62d28-168c-4659-a800-e484772d9003,1,0,4cada7d2-f1b1-4914-95fc-c5e1431c13a7,4cada7d2-f1b1-4914-95fc-c5e1431c13a7,1,0,ecbe1ead-4e4b-49db-b7f1-c097c9df2fb9,ecbe1ead-4e4b-49db-b7f1-c097c9df2fb9,1,0,be026f77-285b-4470-8a4e-c68f6e9859e2,be026f77-285b-4470-8a4e-c68f6e9859e2,1,0,a9d54a18-9c35-471b-ad8b-44ba743b7977,a9d54a18-9c35-471b-ad8b-44ba743b7977,1,0,4f75014c-831f-4de5-8b6e-94874ce274ce,4f75014c-831f-4de5-8b6e-94874ce274ce,1,0,c9f74923-95e1-4f5c-8649-3543fae6b116,c9f74923-95e1-4f5c-8649-3543fae6b116,1,0,b00616bb-406d-4e8e-80a0-f0c14cc850c0,b00616bb-406d-4e8e-80a0-f0c14cc850c0,1,0,d60aae4f-7c61-416c-bbc9-e7c95d757848,d60aae4f-7c61-416c-bbc9-e7c95d757848,1,0,62f9c12c-1837-4320-99b0-8f7ae44af735,62f9c12c-1837-4320-99b0-8f7ae44af735,1,0,ae352e0c-9f89-4ed9-ab45-f4e9040f7858,ae352e0c-9f89-4ed9-ab45-f4e9040f7858,1,0,853a5fdc-3621-442c-abd3-2fd266fddd84,853a5fdc-3621-442c-abd3-2fd266fddd84,1,0,daaff4d7-bc0b-4ab5-a277-fc02472f76ed,daaff4d7-bc0b-4ab5-a277-fc02472f76ed,1,0,33c9ebee-7b42-4010-a5c9-71ca7479d95c,33c9ebee-7b42-4010-a5c9-71ca7479d95c,1,0,cf202dca-e0ee-45c8-8792-46fc2f126e68,cf202dca-e0ee-45c8-8792-46fc2f126e68,1,0,be150cca-e977-4663-af19-79d8b0f91b3d,be150cca-e977-4663-af19-79d8b0f91b3d,1,0,f12857d7-bcae-4c6c-9169-2a0b1f9e9e6a,f12857d7-bcae-4c6c-9169-2a0b1f9e9e6a,1,0,1c13d12d-5c96-4d96-a07d-ec4a766c86ac,1c13d12d-5c96-4d96-a07d-ec4a766c86ac,1,0,6279f4bc-b77f-4618-9ce3-d50efc798871,6279f4bc-b77f-4618-9ce3-d50efc798871,1,0,fb05b40b-8cf5-4821-afcb-f00a77458a9b,fb05b40b-8cf5-4821-afcb-f00a77458a9b,1,0,37c68cb5-6aaf-4e57-b68c-1a5b5db252b7,37c68cb5-6aaf-4e57-b68c-1a5b5db252b7,1,0,3967bec7-9af5-40bf-9e22-a0f6b13cc795,3967bec7-9af5-40bf-9e22-a0f6b13cc795,1,0,eab9da25-07b6-4c60-9a83-08e8277d0ae7,eab9da25-07b6-4c60-9a83-08e8277d0ae7,1,0,b79ed991-f5d9-42b6-8f0b-0df49e550ced,b79ed991-f5d9-42b6-8f0b-0df49e550ced,1,0,ac50e8d6-fe0b-45a4-b0dd-cc81d7fd7357,ac50e8d6-fe0b-45a4-b0dd-cc81d7fd7357,1,0,f58a3df1-ddf3-45c8-b470-cc026cb0537f,f58a3df1-ddf3-45c8-b470-cc026cb0537f,1,0,c4e9954b-59d8-46e3-ada8-bda66e8aaceb,c4e9954b-59d8-46e3-ada8-bda66e8aaceb,1,0,568c16cf-c3fc-4e16-8f05-e00be8e136c2,568c16cf-c3fc-4e16-8f05-e00be8e136c2,1,0,b36ad726-fb8f-4974-986a-33f997e3fc64,b36ad726-fb8f-4974-986a-33f997e3fc64,1,0,e196c73e-c09b-4aed-b403-2b97a8bf6e47,e196c73e-c09b-4aed-b403-2b97a8bf6e47,1,0,27fdab52-f1ab-48d3-b117-06afcf319eaa,27fdab52-f1ab-48d3-b117-06afcf319eaa,1,0,bf3530c3-3244-4528-a846-ea175af53804,bf3530c3-3244-4528-a846-ea175af53804,1,0,5bdfff5e-f04c-4fe3-ae92-10a99da3a6a8,5bdfff5e-f04c-4fe3-ae92-10a99da3a6a8,1,0,3d0ae989-2d16-42df-a442-7bde817ec1b2,3d0ae989-2d16-42df-a442-7bde817ec1b2,1,0,f3d1adac-197a-4194-89fe-7178f8ccd788,f3d1adac-197a-4194-89fe-7178f8ccd788,1,0,7077b04e-75c0-414d-b295-d28aeda2bdd4,7077b04e-75c0-414d-b295-d28aeda2bdd4,1,0,c8330995-22f4-4be6-beff-64f87c6f09ed,c8330995-22f4-4be6-beff-64f87c6f09ed,1,0,56b6b570-764b-4220-9b5f-70753b0fadbd,56b6b570-764b-4220-9b5f-70753b0fadbd,1,0,588f481e-4486-4649-b584-08f7e3ab8cde,588f481e-4486-4649-b584-08f7e3ab8cde,1,0,5dfe90e2-cb1a-4510-b22c-af94ca06dd7b,5dfe90e2-cb1a-4510-b22c-af94ca06dd7b,1,0,70c217b8-ddf0-4b7c-80b0-f5a76dbbcec7,70c217b8-ddf0-4b7c-80b0-f5a76dbbcec7,1,0,74e3e5c4-7dec-4fde-975b-01e7f4002a87,74e3e5c4-7dec-4fde-975b-01e7f4002a87,1,0,689b382f-308e-4558-817c-819ceb59f61e,689b382f-308e-4558-817c-819ceb59f61e,1,0,ed96d8d2-3164-4a85-8408-06d9a1f0c2ce,ed96d8d2-3164-4a85-8408-06d9a1f0c2ce,1,0,2482e800-50c9-4c7c-909f-18ba2e30ff31,2482e800-50c9-4c7c-909f-18ba2e30ff31,1,0,fdb20bf0-6dc5-4ce6-acdc-4def1cc23a67,fdb20bf0-6dc5-4ce6-acdc-4def1cc23a67,1,0,b528d506-be3f-47f2-880b-af7093c71649,b528d506-be3f-47f2-880b-af7093c71649,1,0,7f3f55d5-b1f5-4b6b-b189-ff5715341489,7f3f55d5-b1f5-4b6b-b189-ff5715341489,1,0,5a32d342-8b80-4069-98c3-cf392f473b06,5a32d342-8b80-4069-98c3-cf392f473b06,1,0,888c5a1f-5329-40da-9102-eac26657a7d9,888c5a1f-5329-40da-9102-eac26657a7d9,1,0,0b2c1689-22ba-4ed6-80f3-10475f11db1a,0b2c1689-22ba-4ed6-80f3-10475f11db1a,1,0,46bbfede-5b4d-44fc-90ec-f6f3598340c4,46bbfede-5b4d-44fc-90ec-f6f3598340c4,1,0,acc6358f-be29-4931-8ed2-b769a48cee08,acc6358f-be29-4931-8ed2-b769a48cee08,1,0,51c58d33-32f7-401a-84d4-5a942129fbd5,51c58d33-32f7-401a-84d4-5a942129fbd5,1,0,07d5174e-8422-471f-a435-bf51d5af1bf0,07d5174e-8422-471f-a435-bf51d5af1bf0,1,0,e58672f5-84c9-462f-b5a6-7f15a6f2f797,e58672f5-84c9-462f-b5a6-7f15a6f2f797,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,04013c34-8d59-4f87-b272-732d5a6dd675,04013c34-8d59-4f87-b272-732d5a6dd675,1,0,f9df9b6b-5051-46ef-bb1f-1974f41054a7,f9df9b6b-5051-46ef-bb1f-1974f41054a7,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,8640eacd-e6f9-4b0b-8511-c6ad2336ec6c,8640eacd-e6f9-4b0b-8511-c6ad2336ec6c,1,0,b374e22f-17f3-4186-af1f-fa35d1a7e559,b374e22f-17f3-4186-af1f-fa35d1a7e559,1,0,53555ee4-f99d-4935-a884-89313aa3ca6a,53555ee4-f99d-4935-a884-89313aa3ca6a,1,0,f38bb317-8a59-4786-be76-e1d4e534628d,f38bb317-8a59-4786-be76-e1d4e534628d,1,0,25741b39-1c6b-4851-8584-9711d25ef05a,25741b39-1c6b-4851-8584-9711d25ef05a,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,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,1,0,4a2d2790-debf-4dc2-8216-878d8808d161,4a2d2790-debf-4dc2-8216-878d8808d161,1,0,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,1,0,4507a92e-abb6-4329-88b2-3429bc694bc6,4507a92e-abb6-4329-88b2-3429bc694bc6,1,0,2694c1b4-536b-4187-adf6-0f8757aaae76,2694c1b4-536b-4187-adf6-0f8757aaae76,1,0,e523f88b-b3de-476e-a3cc-592970492dec,e523f88b-b3de-476e-a3cc-592970492dec,1,0,0e2107e2-8648-4b2e-9dfb-c23b1ff5b007,0e2107e2-8648-4b2e-9dfb-c23b1ff5b007,1,0,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,1,0,ea0843f4-60fb-4d44-abf4-0021867c636b,ea0843f4-60fb-4d44-abf4-0021867c636b,1,0,59aadc03-adbc-481f-89bc-d7f391789522,59aadc03-adbc-481f-89bc-d7f391789522,1,0,254f6ccd-0451-4231-91c9-4abe57b647be,254f6ccd-0451-4231-91c9-4abe57b647be,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,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,c6a4d03d-f3b2-449c-8a2b-deb542dd2c99,c6a4d03d-f3b2-449c-8a2b-deb542dd2c99,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,388f7571-8f1b-45c5-a8b8-45d648f2f5dd,388f7571-8f1b-45c5-a8b8-45d648f2f5dd,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,e62845df-704f-4ad5-b227-e0128877a814,e62845df-704f-4ad5-b227-e0128877a814,1,0,4f1393e4-9db5-43d6-b47e-caa1aad9b35c,4f1393e4-9db5-43d6-b47e-caa1aad9b35c,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,905b787b-c638-4703-af70-416a2ce43b50,905b787b-c638-4703-af70-416a2ce43b50,1,0,d7ea882a-6ef9-407f-b0e9-7bb42cf5ef17,d7ea882a-6ef9-407f-b0e9-7bb42cf5ef17,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,f9c0862c-34a2-41a3-ae46-b6a8e1ad1b08,f9c0862c-34a2-41a3-ae46-b6a8e1ad1b08,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,ef098c52-fcfa-4f0f-85b0-aba0d5aa46b2,ef098c52-fcfa-4f0f-85b0-aba0d5aa46b2,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,d7a72321-5f1f-427e-a54d-f308dab1b9c4,d7a72321-5f1f-427e-a54d-f308dab1b9c4,1,0,b183eb38-a96e-4e12-9220-4b4027ae875c,b183eb38-a96e-4e12-9220-4b4027ae875c,1,0,07f7e1b5-07b0-4017-bb91-31759c4ffed1,07f7e1b5-07b0-4017-bb91-31759c4ffed1,1,0,6de76d43-40d5-494f-8d30-2ef80c79bc7e,6de76d43-40d5-494f-8d30-2ef80c79bc7e,1,0,60146806-ee46-44d5-8a7a-2ed48741e1c1,60146806-ee46-44d5-8a7a-2ed48741e1c1,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,bdc51d67-5fc2-4d28-8875-69e33e625be6,bdc51d67-5fc2-4d28-8875-69e33e625be6,1,0,94ca9aa0-f61f-496b-8fef-9e6fb7bd8f87,94ca9aa0-f61f-496b-8fef-9e6fb7bd8f87,1,0,b494ca7b-6548-4fa2-932c-acdf8c62a78a,b494ca7b-6548-4fa2-932c-acdf8c62a78a,1,0,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,1,0,f335aa38-4e9e-4653-9a76-b6d4ae178c93,f335aa38-4e9e-4653-9a76-b6d4ae178c93,1,0,a62894bc-fab4-4ed4-a57d-cbe725527198,a62894bc-fab4-4ed4-a57d-cbe725527198,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,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,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,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,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,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,c4b3cb31-356e-4868-921c-f6710349def8,c4b3cb31-356e-4868-921c-f6710349def8,1,0,f98a7b6d-f364-4b84-9aeb-8dd822ef582f,f98a7b6d-f364-4b84-9aeb-8dd822ef582f,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,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,46c3341c-352c-43fb-b338-15c8ad487fbf,46c3341c-352c-43fb-b338-15c8ad487fbf,1,0,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,1,0,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,1,0,f9450d6a-849c-4621-b528-9cafc4819b44,f9450d6a-849c-4621-b528-9cafc4819b44,1,0,5b7cac99-2fca-4dbb-8d49-b84f310a2496,5b7cac99-2fca-4dbb-8d49-b84f310a2496,1,0,a4673d5c-9dae-48f7-9c91-53c1302a266a,a4673d5c-9dae-48f7-9c91-53c1302a266a,1,0,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,1,0,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,1,0,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,1,0,3f410b53-e762-41fe-9469-d538dfec3a9a,3f410b53-e762-41fe-9469-d538dfec3a9a,1,0,bb11c22e-0fbd-4985-be67-0866df7f7e61,bb11c22e-0fbd-4985-be67-0866df7f7e61,1,0,92ea60c0-1027-4337-9130-40028951f09b,92ea60c0-1027-4337-9130-40028951f09b,1,0,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,1,0,d64f18a4-ff93-4284-9eca-085109eafd24,d64f18a4-ff93-4284-9eca-085109eafd24,1,0,6381b8d2-7722-45c7-8800-19f6574d7d7a,6381b8d2-7722-45c7-8800-19f6574d7d7a,1,0,bf428e7a-2970-4bab-8c8e-35ea16151c0e,bf428e7a-2970-4bab-8c8e-35ea16151c0e,1,0,232dbd5f-b7f1-4463-946c-b8fbf93ac466,232dbd5f-b7f1-4463-946c-b8fbf93ac466,1,0,a1a74b34-4174-4769-8f03-bd4a32e83418,a1a74b34-4174-4769-8f03-bd4a32e83418,1,0,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,1,0,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,1,0,7086199b-20ec-4a74-a52f-71824134e8c5,7086199b-20ec-4a74-a52f-71824134e8c5,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,8e07a76d-db30-491c-b296-181c8e689382,8e07a76d-db30-491c-b296-181c8e689382,1,0,4f1752ae-42d0-477d-854b-de143c428a85,4f1752ae-42d0-477d-854b-de143c428a85,1,0,29674b66-c542-4a34-8caa-8e57a51bd190,29674b66-c542-4a34-8caa-8e57a51bd190,1,0,1a41acdd-3503-4c69-b93b-eb1cb6749712,1a41acdd-3503-4c69-b93b-eb1cb6749712,1,0,0e45c53e-7571-49bf-b673-cff53d32af89,0e45c53e-7571-49bf-b673-cff53d32af89,1,0,169b0670-8fa7-48d1-b6b1-2cf581b18390,169b0670-8fa7-48d1-b6b1-2cf581b18390,1,0,2e239650-973b-4908-b91e-477062046528,2e239650-973b-4908-b91e-477062046528,1,0,4692eeee-5b73-42f3-ad39-794141af9e2b,4692eeee-5b73-42f3-ad39-794141af9e2b,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,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,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1,0,7b638691-416d-4484-81f4-e4c796a92818,7b638691-416d-4484-81f4-e4c796a92818,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,8984f28e-8c83-499a-838c-5f51410d7b0e,8984f28e-8c83-499a-838c-5f51410d7b0e,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,eb48f8a9-1644-432d-a8a8-e63bc013a2fe,eb48f8a9-1644-432d-a8a8-e63bc013a2fe,1,0,36951804-70a4-45fa-9fad-1c37fd3ce7b7,36951804-70a4-45fa-9fad-1c37fd3ce7b7,1,0,d0031774-fa35-469f-9f8a-3aaa920928a0,d0031774-fa35-469f-9f8a-3aaa920928a0,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,84ba4ba7-2743-438a-8b65-cc14090f8a92,84ba4ba7-2743-438a-8b65-cc14090f8a92,1,0,cdc4312c-b1af-407c-bfc3-28db04915aa6,cdc4312c-b1af-407c-bfc3-28db04915aa6,1,0,97b76ee8-c73f-456b-9008-b453bd376317,97b76ee8-c73f-456b-9008-b453bd376317,1,0,ee305e39-978b-4069-a4e6-05e761a5d6ae,ee305e39-978b-4069-a4e6-05e761a5d6ae,1,0,965650ae-8a6e-469a-869a-0ce821818058,965650ae-8a6e-469a-869a-0ce821818058,1,0,00fde8e2-3eb3-484a-a960-a390cbdaa16a,00fde8e2-3eb3-484a-a960-a390cbdaa16a,1,0,c7a82aa5-043c-46a2-9f5a-cba098ca36bd,c7a82aa5-043c-46a2-9f5a-cba098ca36bd,1,0,94744edd-61d0-4329-95d8-fc19dc7c6af1,94744edd-61d0-4329-95d8-fc19dc7c6af1,1,0,43bbf87f-8f21-49b9-be2f-eceb64c2c650,43bbf87f-8f21-49b9-be2f-eceb64c2c650,1,0,69db1a1c-3e9d-4e3c-b31e-731f2b8635b9,69db1a1c-3e9d-4e3c-b31e-731f2b8635b9,1,0,621b1881-9a7f-4fa4-a373-46467743e29c,621b1881-9a7f-4fa4-a373-46467743e29c,1,0,932ef5a0-4bad-424d-9772-ad8393c12006,932ef5a0-4bad-424d-9772-ad8393c12006,1,0,35dbc542-3ad9-4a72-9863-229a67cda425,35dbc542-3ad9-4a72-9863-229a67cda425,1,0,8e4277e9-983a-4d43-b08e-a4f918df87bf,8e4277e9-983a-4d43-b08e-a4f918df87bf,1,0,110e76d3-26ad-4392-9f82-255d792478a1,110e76d3-26ad-4392-9f82-255d792478a1,1,0,9117730e-1d3f-47b6-84fc-7a02377f86a0,9117730e-1d3f-47b6-84fc-7a02377f86a0,1,0,0a7eec2f-41c6-4d77-98a4-5e0bfc698997,0a7eec2f-41c6-4d77-98a4-5e0bfc698997,1,0,ec06e6a7-7894-4411-9b54-f811837b8a2e,ec06e6a7-7894-4411-9b54-f811837b8a2e,1,0,f43f3a1b-7f71-4a4f-9ec2-5f4d7d77efca,f43f3a1b-7f71-4a4f-9ec2-5f4d7d77efca,1,0,0947bd87-9542-4d2b-8439-9f6ccdb2c9cc,0947bd87-9542-4d2b-8439-9f6ccdb2c9cc,1,0,c0e2673a-1846-4ae5-933a-4e33b73a866b,c0e2673a-1846-4ae5-933a-4e33b73a866b,1,0,3996aff6-b6ce-4f6b-a2f3-1b0bf8b1d0c2,3996aff6-b6ce-4f6b-a2f3-1b0bf8b1d0c2,1,0,f5fadf27-b8ca-421b-8a73-c3f10aef248b,f5fadf27-b8ca-421b-8a73-c3f10aef248b,1,0,006fa20c-ba4b-4003-a743-b47c4b7bd815,006fa20c-ba4b-4003-a743-b47c4b7bd815,1,0,4ecd2da3-4d0c-416b-ae97-66f6f753226b,4ecd2da3-4d0c-416b-ae97-66f6f753226b,1,0,ec680d71-eb28-4b42-a664-c6137c259eaa,ec680d71-eb28-4b42-a664-c6137c259eaa,1,0,efa1d27f-0620-4b3a-b058-12f160008478,efa1d27f-0620-4b3a-b058-12f160008478,1,0,2dd0ec2e-457d-4147-b806-ff3d6fa091fb,2dd0ec2e-457d-4147-b806-ff3d6fa091fb,1,0,005d4afc-7d09-4cef-acaa-50d49e455df0,005d4afc-7d09-4cef-acaa-50d49e455df0,1,0,d773673e-992d-4f22-9fb3-acfb8863217d,d773673e-992d-4f22-9fb3-acfb8863217d,1,0,6cf00002-d685-4340-a873-196126a19664,6cf00002-d685-4340-a873-196126a19664,1,0,e422c08d-f54f-4a49-b0c5-a50bf63973c9,e422c08d-f54f-4a49-b0c5-a50bf63973c9,1,0,8288078e-0d2f-47c5-8e58-c5a17a76cc11,8288078e-0d2f-47c5-8e58-c5a17a76cc11,1,0,82abcc34-c8aa-42a0-b2fe-f66b7cafc2a0,82abcc34-c8aa-42a0-b2fe-f66b7cafc2a0,1,0,304feda3-6d33-466c-9e0d-9cea97d763be,304feda3-6d33-466c-9e0d-9cea97d763be,1,0,ecaf5d2f-0cea-4ad0-8550-51be37cead5c,ecaf5d2f-0cea-4ad0-8550-51be37cead5c,1,0,448e7386-cc56-4578-9c57-ef270980a0ff,448e7386-cc56-4578-9c57-ef270980a0ff,1,0,c2cdc60c-157d-450f-b3ba-2b6242459ebb,c2cdc60c-157d-450f-b3ba-2b6242459ebb,1,0,186f87ca-b9d5-48fa-b196-eed2794bade4,186f87ca-b9d5-48fa-b196-eed2794bade4,1,0,b87d9e04-9e12-42a5-b9fd-ea9a9bab59eb,b87d9e04-9e12-42a5-b9fd-ea9a9bab59eb,1,0,65b653b7-1298-40e4-9d69-2ce7810d5985,65b653b7-1298-40e4-9d69-2ce7810d5985,1,0,5fd170a9-44fc-4d18-9e51-2dbf09ca902e,5fd170a9-44fc-4d18-9e51-2dbf09ca902e,1,0,66359bb1-8692-415a-86d9-f40545f88d3a,66359bb1-8692-415a-86d9-f40545f88d3a,1,0,83be7bdf-e915-440f-a39f-1bb74db34b3e,83be7bdf-e915-440f-a39f-1bb74db34b3e,1,0,190b6efe-e67e-4274-abb9-263178a6ec4a,190b6efe-e67e-4274-abb9-263178a6ec4a,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,d3aca87c-2b47-48da-82dd-18ca867c8463,d3aca87c-2b47-48da-82dd-18ca867c8463,1,0,669b81a6-6526-4b5c-aafa-1988ae5253ce,669b81a6-6526-4b5c-aafa-1988ae5253ce,1,0,ab138a0c-71fe-4ca2-9d82-21f5830dde24,ab138a0c-71fe-4ca2-9d82-21f5830dde24,1,0,ffa6c000-ec84-4749-8ffe-42b0599751cd,ffa6c000-ec84-4749-8ffe-42b0599751cd,1,0,740bde9c-9fe1-4183-ab01-3fbe91d33b61,740bde9c-9fe1-4183-ab01-3fbe91d33b61,1,0,e8e19542-c5c8-418b-8a83-20336fd9075a,e8e19542-c5c8-418b-8a83-20336fd9075a,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,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,1,0,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,1,0,703453e8-cb49-491b-8e19-a17b89894d1e,703453e8-cb49-491b-8e19-a17b89894d1e,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,0a92df3d-fb51-4fba-938c-55846929bd5f,0a92df3d-fb51-4fba-938c-55846929bd5f,1,0,1d005a8d-aaac-4442-a7dc-12634d03f6f3,1d005a8d-aaac-4442-a7dc-12634d03f6f3,1,0,348d0ad2-f64e-4ea0-8b8e-11bbc10926f7,348d0ad2-f64e-4ea0-8b8e-11bbc10926f7,1,0,7f7eb00d-7a38-4025-8853-9d1cf2dab1e3,7f7eb00d-7a38-4025-8853-9d1cf2dab1e3,1,0,36221881-a9c8-4b91-acac-44f7c065c05a,36221881-a9c8-4b91-acac-44f7c065c05a,1,0,3fdcf013-38e0-4a30-9ae8-19100e6704ba,3fdcf013-38e0-4a30-9ae8-19100e6704ba,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,f6d79449-eca9-4d13-9ddc-8b36ae9e729e,f6d79449-eca9-4d13-9ddc-8b36ae9e729e,1,0,b9d56dc6-3a10-4795-9ca3-dbf69310813e,b9d56dc6-3a10-4795-9ca3-dbf69310813e,1,0,f4b53ce1-8c1b-4f57-b5de-acb4692a37d8,f4b53ce1-8c1b-4f57-b5de-acb4692a37d8,1,0,9b18e04f-036d-43ae-b949-9432f96d71d9,9b18e04f-036d-43ae-b949-9432f96d71d9,1,0,e99a1f54-4001-45ee-81e3-472656c05f57,e99a1f54-4001-45ee-81e3-472656c05f57,1,0,b104e7b9-8a41-4154-a84b-d1bb12fab939,b104e7b9-8a41-4154-a84b-d1bb12fab939,1,0,86b835c4-341e-4b0d-99e5-2369684ff3f4,86b835c4-341e-4b0d-99e5-2369684ff3f4,1,0,55c48fa8-8d12-4378-97a0-c0ed683f6b83,55c48fa8-8d12-4378-97a0-c0ed683f6b83,1,0,b0f74a92-f5e4-4859-9a72-643ddb5315cb,b0f74a92-f5e4-4859-9a72-643ddb5315cb,1,0,1864093d-62ac-4b12-ad16-c460432c99f6,1864093d-62ac-4b12-ad16-c460432c99f6,1,0,6eb78c87-24ed-43a8-800d-ccde02358b32,6eb78c87-24ed-43a8-800d-ccde02358b32,1,0,787d5fec-c476-4519-884b-f62492fc8396,787d5fec-c476-4519-884b-f62492fc8396,1,0,59ebd5fb-d782-46ea-b693-7885d2ababa8,59ebd5fb-d782-46ea-b693-7885d2ababa8,1,0,39a39567-43d8-47c5-9f17-0a11f31e129a,39a39567-43d8-47c5-9f17-0a11f31e129a,1,0,b24e8ff0-eb86-4ce6-84f5-49134b48f031,b24e8ff0-eb86-4ce6-84f5-49134b48f031,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,c8015ae6-31a7-49f4-a9e6-5d13774f64e5,c8015ae6-31a7-49f4-a9e6-5d13774f64e5,1,0,970430c4-37fc-476c-a3f6-5f6bebd2e663,970430c4-37fc-476c-a3f6-5f6bebd2e663,1,0,4cddde4a-42d5-44d0-a693-ea90eab9b169,4cddde4a-42d5-44d0-a693-ea90eab9b169,1,0,d9d612bb-6d04-4186-b243-f99aded0ba43,d9d612bb-6d04-4186-b243-f99aded0ba43,1,0,15db8b7b-59f5-4551-b2bd-b24801f056b5,15db8b7b-59f5-4551-b2bd-b24801f056b5,1,0,88d2236b-794b-485a-b075-f1a54cadcd3a,88d2236b-794b-485a-b075-f1a54cadcd3a,1,0,b7f9553f-6219-4401-a6f4-9debd47186d2,b7f9553f-6219-4401-a6f4-9debd47186d2,1,0,26a7e044-a583-40af-9daa-5aea628c8f19,26a7e044-a583-40af-9daa-5aea628c8f19,1,0,548717ca-0645-49b4-9580-c77cd4d03ebb,548717ca-0645-49b4-9580-c77cd4d03ebb,1,0,b451f2fc-ced2-418a-a803-4fe99488b394,b451f2fc-ced2-418a-a803-4fe99488b394,1,0,62269222-67a7-489e-ba59-4294902275bc,62269222-67a7-489e-ba59-4294902275bc,1,0,fed1b714-a2c9-42cf-9ced-35ed895e4167,fed1b714-a2c9-42cf-9ced-35ed895e4167,1,0,6f334263-10c8-4187-9a84-d2fd1afadc48,6f334263-10c8-4187-9a84-d2fd1afadc48,1,0,f5674a0d-a106-4cc0-a402-b378280eab3d,f5674a0d-a106-4cc0-a402-b378280eab3d,1,0,fa99302b-3e86-4330-b9ff-c38d933f81f0,fa99302b-3e86-4330-b9ff-c38d933f81f0,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,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,b67fb4f8-e895-4a8e-9230-31bc5cde4953,b67fb4f8-e895-4a8e-9230-31bc5cde4953,1,0,f3c9fde1-6d0e-4319-a798-ed8e330750de,f3c9fde1-6d0e-4319-a798-ed8e330750de,1,0,50d1bd75-3523-41c0-8da1-500731c0872b,50d1bd75-3523-41c0-8da1-500731c0872b,1,0,1a8d3872-6e19-4a49-b0ea-b120b6c09d7f,1a8d3872-6e19-4a49-b0ea-b120b6c09d7f,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,4e892154-3279-492c-9eae-124304225c5d,4e892154-3279-492c-9eae-124304225c5d,1,0,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,1,0,575a135a-6ffd-4ae8-a597-7e584df9bac4,575a135a-6ffd-4ae8-a597-7e584df9bac4,1,0,693a7196-f525-4bd2-a417-e902977f21cb,693a7196-f525-4bd2-a417-e902977f21cb,1,0,9bb39184-08b7-440e-a8f8-5caf0083ba0f,9bb39184-08b7-440e-a8f8-5caf0083ba0f,1,0,d48e817e-f6a4-47e5-a052-35d09e066490,d48e817e-f6a4-47e5-a052-35d09e066490,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,b69b611d-18d3-4e78-8a09-f010bcf9c261,b69b611d-18d3-4e78-8a09-f010bcf9c261,1,0,e8e087c1-9131-4037-8562-8bce8c38f78c,e8e087c1-9131-4037-8562-8bce8c38f78c,1,0,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,1,0,6adaef8e-82b6-4664-9748-4f41b170d91a,6adaef8e-82b6-4664-9748-4f41b170d91a,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,a27244c2-ac65-423f-afce-42efd288a83d,a27244c2-ac65-423f-afce-42efd288a83d,1,0,d4002184-8e08-4dcc-9070-62f595e82e23,d4002184-8e08-4dcc-9070-62f595e82e23,1,0,62163fda-1a09-4d4f-b290-76ff324042ab,62163fda-1a09-4d4f-b290-76ff324042ab,1,0,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,1,0,6e6a1557-06fa-45c0-ad98-c43809553cd7,6e6a1557-06fa-45c0-ad98-c43809553cd7,1,0,179f7436-e328-42b8-9382-19ee6f10c768,179f7436-e328-42b8-9382-19ee6f10c768,1,0,2093344a-47d4-43ac-98df-29c4dff7fca9,2093344a-47d4-43ac-98df-29c4dff7fca9,1,0,3343cb0c-0f80-4ef9-9871-3db9f2299186,3343cb0c-0f80-4ef9-9871-3db9f2299186,1,0,791d7289-b188-4120-a5f5-f5eb1fd675bf,791d7289-b188-4120-a5f5-f5eb1fd675bf,1,0,e996d749-1aa5-4fe5-b87b-3d8d06144d93,e996d749-1aa5-4fe5-b87b-3d8d06144d93,1,0,6613153f-4f81-4bac-8144-7562cce67f55,6613153f-4f81-4bac-8144-7562cce67f55,1,0,488ce902-b60e-4255-8aec-92dafd1d5dd0,488ce902-b60e-4255-8aec-92dafd1d5dd0,1,0,411779cc-de2c-4731-acc0-631a01367eb5,411779cc-de2c-4731-acc0-631a01367eb5,1,0,30794af1-3180-4ed5-b11d-ca139acb22fa,30794af1-3180-4ed5-b11d-ca139acb22fa,1,0,39aeb27d-62d2-480a-aa6b-33e2363194d1,39aeb27d-62d2-480a-aa6b-33e2363194d1,1,0,60410722-dca9-4c3a-a9c4-33fcd45fe584,60410722-dca9-4c3a-a9c4-33fcd45fe584,1,0,3f200f5a-01bd-4304-9c57-18703cac9ec9,3f200f5a-01bd-4304-9c57-18703cac9ec9,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,3d140a17-40b4-46a7-a846-78f2f77d49f2,3d140a17-40b4-46a7-a846-78f2f77d49f2,1,0,965646a5-5e5b-49cd-864a-c3870844cfdb,965646a5-5e5b-49cd-864a-c3870844cfdb,1,0,27c88cf7-c0ed-44af-bb70-f14269ce1e87,27c88cf7-c0ed-44af-bb70-f14269ce1e87,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,aec7df6a-21a1-495d-b0a9-3769e1069888,aec7df6a-21a1-495d-b0a9-3769e1069888,1,0,463b98bf-b4d4-4edb-995d-0a75ff29b60d,463b98bf-b4d4-4edb-995d-0a75ff29b60d,1,0,317f88a7-12a4-4d21-b637-3050525406f4,317f88a7-12a4-4d21-b637-3050525406f4,1,0,2d9d2319-68fb-436d-b431-98858b88a75a,2d9d2319-68fb-436d-b431-98858b88a75a,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,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,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,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,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,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,d5b23aac-ea1c-497e-bed7-8685bb682e36,d5b23aac-ea1c-497e-bed7-8685bb682e36,1,0,2b37c085-7c70-4004-93d3-24418b7b3ef2,2b37c085-7c70-4004-93d3-24418b7b3ef2,1,0,6da15163-dd4c-4981-82e8-ad3bd2f516aa,6da15163-dd4c-4981-82e8-ad3bd2f516aa,1,0,e3000fff-aaba-4396-8026-768108ea8f2b,e3000fff-aaba-4396-8026-768108ea8f2b,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,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,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,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,1,0,f237a21e-066a-48e6-a5c4-5dc2487c7a3b,f237a21e-066a-48e6-a5c4-5dc2487c7a3b,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,14077038-2e41-4a05-a476-99f6f88a5c29,14077038-2e41-4a05-a476-99f6f88a5c29,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,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,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,1,0,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,1,0,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,1,0,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,1,0,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,1,0,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,1,0,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,1,0,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,1,0,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,1,0,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,1,0,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,1,0,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,1,0,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,1,0,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,1,0,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,1,0,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,1,0,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,1,0,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,1,0,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,1,0,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,1,0,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,1,0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,1,0,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,1,0,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,1,0,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,1,0,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,1,0,8c576405-29c1-46b1-ab2e-40e52c21cab0,8c576405-29c1-46b1-ab2e-40e52c21cab0,1,0,b33a89da-8589-4902-83fa-6545e5fce23e,b33a89da-8589-4902-83fa-6545e5fce23e,1,0,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,1,0,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,1,0,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,1,0,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,1,0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,1,0,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,1,0,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,1,0,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,1,0,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,1,0,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,1,0,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,1,0,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,1,0,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,1,0,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,1,0,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,1,0,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,1,0,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,1,0,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,1,0,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,1,0,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,1,0,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,1,0,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,1,0,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,1,0,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,1,0,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,1,0,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,1,0,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,1,0,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,1,0,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,1,0,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,1,0,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,1,0,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,1,0,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,1,0,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,1,0,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьУчетОригиналовПервичныхДокументов/ИспользоватьУчетОригиналовПервичныхДокументов.mdo b/SSL/src/Constants/ИспользоватьУчетОригиналовПервичныхДокументов/ИспользоватьУчетОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..c44022c9b --- /dev/null +++ b/SSL/src/Constants/ИспользоватьУчетОригиналовПервичныхДокументов/ИспользоватьУчетОригиналовПервичныхДокументов.mdo @@ -0,0 +1,20 @@ + + + + + + + + ИспользоватьУчетОригиналовПервичныхДокументов + + ru + Использовать учет оригиналов первичных документов + + + Boolean + + true + + + Managed + diff --git a/SSL/src/Constants/ПроверятьИспользованиеУдаляемыхОбъектов/ПроверятьИспользованиеУдаляемыхОбъектов.mdo b/SSL/src/Constants/ПроверятьИспользованиеУдаляемыхОбъектов/ПроверятьИспользованиеУдаляемыхОбъектов.mdo new file mode 100644 index 000000000..a8655caf9 --- /dev/null +++ b/SSL/src/Constants/ПроверятьИспользованиеУдаляемыхОбъектов/ПроверятьИспользованиеУдаляемыхОбъектов.mdo @@ -0,0 +1,20 @@ + + + + + + + + ПроверятьИспользованиеУдаляемыхОбъектов + + ru + Проверять использование удаляемых объектов + + + Boolean + + true + + + Managed + diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl index 509ccfe15..472aadf01 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -396,6 +396,16 @@ КонецПроцедуры + +// Параметры: +// КоличествоФайловВПорции - Число +// Возвращаемое значение: +// Массив из Структура: +// * Ссылка - ОпределяемыйТип.ПрисоединенныйФайл +// * Расширение - Строка +// * Наименование - Строка +// * Кодировка - Строка +// &НаСервереБезКонтекста Функция ПолучитьФайлыДляИзвлеченияТекста(КоличествоФайловВПорции) diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form index d315dbb4b..1a8545379 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form @@ -2173,6 +2173,18 @@ + + Страна + + CatalogRef.СтраныМира + + + + ТолькоПросмотр + + Boolean + + diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl index 65076eb89..aa243e7f6 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl @@ -64,6 +64,7 @@ НаселенныйПунктДетально = ПодготовитьАдресДляВвода(ДанныеАдреса); КонецЕсли; + ЗаполнитьПредопределенныеВариантыАдреса(Параметры); УстановитьЗначениеРеквизитовПоКонтактнойИнформации(ЭтотОбъект, НаселенныйПунктДетально); Если ЗначениеЗаполнено(НаселенныйПунктДетально.Comment) Тогда @@ -74,6 +75,8 @@ КонецЕсли; УстановитьКлючИспользованияФормы(); + Элементы.ФормаОчиститьАдрес.Доступность = Не Параметры.ТолькоПросмотр; + Элементы.ГруппаКомандаДобавить.Видимость = Не Параметры.ТолькоПросмотр; КонецПроцедуры @@ -511,11 +514,11 @@ Если Контекст.ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И Контекст.ВидКонтактнойИнформации.ВидРедактирования = "Диалог" Тогда - АдресВВидеГиперссылки = Истина; + ВВидеГиперссылки = Истина; Иначе - АдресВВидеГиперссылки = Ложь; + ВВидеГиперссылки = Ложь; КонецЕсли; - Результат.ДанныеВыбора.Вставить("АдресВВидеГиперссылки", АдресВВидеГиперссылки); + Результат.ДанныеВыбора.Вставить("ВВидеГиперссылки", ВВидеГиперссылки); // Подавляем перенос строк в возвращаемом отдельно представлении. Результат.ДанныеВыбора.Представление = СокрЛП(СтрЗаменить(Результат.ДанныеВыбора.Представление, Символы.ПС, " ")); @@ -622,6 +625,39 @@ КонецПроцедуры +&НаСервере +Процедура ЗаполнитьПредопределенныеВариантыАдреса(Параметры) + + Если Параметры.Свойство("Индекс") И ЗначениеЗаполнено(Параметры.Индекс) Тогда + Индекс = Параметры.Индекс; + НаселенныйПунктДетально.ZipCode = Индекс; + КонецЕсли; + + Если Параметры.Свойство("Страна") И ПустаяСтрока(НаселенныйПунктДетально.Country) Тогда + + Если ТипЗнч(Параметры.Страна) = Тип("СправочникСсылка.СтраныМира") Тогда + Если ЗначениеЗаполнено(Параметры.Страна) Тогда + Страна = Параметры.Страна; + НаселенныйПунктДетально.Country = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.Страна, "Наименование"); + Иначе + Страна = ОсновнаяСтрана(); + НаселенныйПунктДетально.Country = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Страна, "Наименование"); + КонецЕсли; + Иначе + Страна = УправлениеКонтактнойИнформацией.СтранаМираПоКодуИлиНаименованию(Параметры.Страна); + Если Страна <> Справочники.СтраныМира.ПустаяСсылка() Тогда + НаселенныйПунктДетально.Country = Параметры.Страна; + Иначе + Страна = ОсновнаяСтрана(); + НаселенныйПунктДетально.Country = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Страна, "Наименование"); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + + &НаСервере Процедура УдалитьГруппуЭлементов(Группа) Пока Группа.ПодчиненныеЭлементы.Количество()>0 Цикл @@ -820,7 +856,7 @@ XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(ЗначенияПолей, Параметры.Представление, ); Если Параметры.Свойство("Страна") И ЗначениеЗаполнено(Параметры.Страна) Тогда Если ТипЗнч(Параметры.Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда - XDTOКонтактная.Состав.Страна = Параметры.Страна.Наименование; + XDTOКонтактная.Состав.Страна = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.Страна, "Наименование"); Иначе XDTOКонтактная.Состав.Страна = Строка(Параметры.Страна); КонецЕсли; diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form index cc61ae302..ebb24734b 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form @@ -1058,6 +1058,12 @@ ВидКонтактнойИнформации + + ТолькоПросмотр + + Boolean + + diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl index ae97834c1..b1dd8d52d 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl @@ -78,6 +78,7 @@ ЗначениеРеквизитовПоКонтактнойИнформации(Данные); Элементы.Добавочный.Видимость = СтруктураВидКонтактнойИнформации.ТелефонCДобавочнымНомером; + Элементы.ОчиститьТелефон.Доступность = Не Параметры.ТолькоПросмотр; Коды = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона", "КодыСтраныИГорода"); Если ТипЗнч(Коды) = Тип("Структура") Тогда @@ -297,6 +298,7 @@ Результат.Вставить("Значение", ДанныеВыбора); Результат.Вставить("Представление", КонтактнаяИнформация.Value); Результат.Вставить("Комментарий", КонтактнаяИнформация.Comment); + Результат.Вставить("ВВидеГиперссылки", Ложь); Результат.Вставить("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов", КонтактнаяИнформацияОписаниеДополнительныхРеквизитов); @@ -377,6 +379,7 @@ // Возвращает список ошибок заполнения в виде списка значений: // Представление - описание ошибки. // Значение - XPath для поля. +// &НаКлиенте Функция ОшибкиЗаполненияТелефона() @@ -444,7 +447,7 @@ // Проверяет, содержит ли строка только ~ // // Параметры: -// СтрокаПроверки - Строка - Строка для проверки. +// СтрокаПроверки - Строка - строка для проверки. // // Возвращаемое значение: // Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы. diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl index f7271be32..d4388d18f 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl @@ -207,7 +207,8 @@ Если ВариантыДат[История[Индекс].ДействуетС] = Неопределено Тогда ВариантыДат.Вставить(История[Индекс].ДействуетС, Истина); Иначе - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не допускается ввод адресов с одинаковыми датами.'"),, "История[" + Строка(Индекс) + "].ДействуетС"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не допускается ввод адресов с одинаковыми датами.'"),, + "История[" + Формат(Индекс, "ЧГ=0") + "].ДействуетС"); Возврат; КонецЕсли; Дельта = История[Индекс].ДействуетС - ТекущаяДатаПроверки; @@ -248,6 +249,7 @@ ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("ВидКонтактнойИнформации", ВидКонтактнойИнформации); ПараметрыОткрытия.Вставить("ИзФормыИстории", Истина); + ПараметрыОткрытия.Вставить("ТолькоПросмотр", Элементы.История.ТолькоПросмотр); Если ВыбраннаяСтрока = Неопределено Тогда Если История.Количество() = 1 И ПустаяСтрока(История[0].Представление) Тогда ПараметрыОткрытия.Вставить("ДействуетС", Дата(1, 1, 1)); @@ -306,7 +308,8 @@ Отбор = Новый Структура("ДействуетС", НоваяДата); НайденныеСтроки = История.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() > 1 Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не допускается ввод адресов с одинаковыми датами.'"),, "История[" + Строка(Индекс) + "].ДействуетС"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не допускается ввод адресов с одинаковыми датами.'"),, + "История[" + Формат(Индекс, "ЧГ=0") + "].ДействуетС"); Если ЗначениеЗаполнено(СтараяДата) Тогда Возврат СтараяДата; Иначе diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl index 2dd6f671b..c2a537db3 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl @@ -35,7 +35,8 @@ // Возвращает имя формы для редактирования типа контактной информации. // // Параметры: -// ВидИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации, СправочникСсылка.ВидыКонтактнойИнформации - +// ВидИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации +// - СправочникСсылка.ВидыКонтактнойИнформации - // запрашиваемый тип. // // Возвращаемое значение: diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Form.form b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Form.form index 6c6ba99cd..b404d8f17 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Form.form @@ -617,6 +617,52 @@ Normal + + РасширениеФормата + 259 + + <key>ru</key> + <value>Расширение формата</value> + + true + true + + true + + + Объект.РасширениеФормата + + + РасширениеФорматаРасширеннаяПодсказка + 261 + Label + true + true + + Left + + + + РасширениеФорматаКонтекстноеМеню + 260 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + true true @@ -638,6 +684,7 @@ UsualGroup + Vertical Auto true true @@ -2090,6 +2137,23 @@ true + + ОтборПоПериоду + + <key>ru</key> + <value>Отбор по периоду</value> + + 19 + + Boolean + + + true + + + true + + @@ -2354,6 +2418,47 @@ true + + РасширенияФормата + 19 + + ValueTable + + + true + + + true + + + ПространствоИмен + 1 + + String + + + + true + + + true + + + + БазоваяВерсия + 2 + + String + + + + true + + + true + + + СохранитьXML diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl index 98b19dc3a..b32f9c1cc 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl @@ -12,12 +12,20 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) МассивДоступныхВерсий = Новый Соответствие; + КоллекцияРасширений = Новый Соответствие; Попытка ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(МассивДоступныхВерсий); + ОбменДаннымиПереопределяемый.ПриПолученииДоступныхРасширенийФормата(КоллекцияРасширений); Исключение // Не удалось получить доступные версии формата. ВызватьИсключение НСтр("ru = 'В информационной базе не поддерживается синхронизация данных через универсальный формат'"); КонецПопытки; + + Для Каждого Расширение Из КоллекцияРасширений Цикл + СтрокаРасширения = РасширенияФормата.Добавить(); + СтрокаРасширения.ПространствоИмен = Расширение.Ключ; + СтрокаРасширения.БазоваяВерсия = Расширение.Значение; + КонецЦикла; ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ВариантОткрытияФормы = ?(Параметры.Свойство("ТолькоЗагрузка"), "ТолькоЗагрузка", ""); @@ -268,7 +276,7 @@ РежимРазработчика = Не РежимРазработчика; ИсточникЗагрузки = ?(РежимРазработчика, ИсточникЗагрузки, 0); МестоВыгрузки = ?(РежимРазработчика, МестоВыгрузки, 0); - ИсточникВыгрузки = ?(РежимРазработчика, ИсточникВыгрузки, "Отбор"); + Объект.ИсточникВыгрузки = ?(РежимРазработчика, Объект.ИсточникВыгрузки, "Отбор"); УстановитьВидимость(); КонецПроцедуры @@ -379,7 +387,8 @@ КонецПроцедуры // Параметры: -// ПолученныеФайлы - Массив из ОписаниеПереданногоФайла, Неопределено - результат получения файлов. +// ПолученныеФайлы - Массив из ОписаниеПереданногоФайла +// - Неопределено - результат получения файлов. // ДополнительныеПараметры - Произвольный - произвольные дополнительные параметры. // &НаКлиенте @@ -389,7 +398,6 @@ ПутьКФайлуВыгрузки = ПолученныеФайлы.Получить(0).Имя; КонецЕсли; СообщитьОбОкончанииОперации(Ложь); - ЭтотОбъект.ОбновитьОтображениеДанных(); КонецЕсли; КонецПроцедуры @@ -528,7 +536,6 @@ КонецЕсли; Для Каждого СтрГруппыМД Из Объект.ТаблицаПравилВыгрузки.ПолучитьЭлементы() Цикл - ЭтоДокумент = (СтрГруппыМД.Наименование = "Документы"); Для Каждого СтрМД Из СтрГруппыМД.ПолучитьЭлементы() Цикл ПолноеИмяМД = СтрМД.ПолноеИмяМетаданных; СтрокиДополнения = Объект.ДополнительнаяРегистрация.НайтиСтроки(Новый Структура("ПолноеИмяМетаданных", ПолноеИмяМД)); @@ -544,9 +551,7 @@ НовСтрока = Объект.ДополнительнаяРегистрация.Добавить(); ЗаполнитьЗначенияСвойств(НовСтрока, СтрМД, "ПолноеИмяМетаданных, Представление"); НовСтрока.ОтборСтрокой = НСтр("ru = 'Все объекты'"); - Если ЭтоДокумент Тогда - НовСтрока.ВыборПериода = Истина; - КонецЕсли; + НовСтрока.ВыборПериода = СтрМД.ОтборПоПериоду; КонецЕсли; КонецЦикла; КонецЦикла; @@ -771,6 +776,13 @@ &НаСервере Процедура ОбновитьПравилаВыгрузкиНаСервере() + + Элементы.РасширениеФормата.СписокВыбора.Очистить(); + Элементы.РасширениеФормата.СписокВыбора.Добавить("", НСтр("ru = '<без расширения>'")); + Для Каждого Расширение Из РасширенияФормата.НайтиСтроки(Новый Структура("БазоваяВерсия", Объект.ВерсияФормата)) Цикл + Элементы.РасширениеФормата.СписокВыбора.Добавить(Расширение.ПространствоИмен); + КонецЦикла; + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ОбработкаОбъект.ЗаполнениеПравилВыгрузки(); ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); @@ -885,7 +897,6 @@ Элементы.ФормаВыполнитьОперацию.Видимость = ФлагДоступность; Элементы.ФормаВключитьРасширенныеВозможности.Доступность = ФлагДоступность; Элементы.ФормаПрервать.Видимость = НЕ ФлагДоступность; - ЭтотОбъект.ОбновитьОтображениеДанных(); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl index 882d881a6..330e88164 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl @@ -12,16 +12,17 @@ // Выполняет подготовку структуры КомпонентыОбмена. // Параметры: -// НаправлениеОбмена - Строка - Отправка или Получение. -// ВерсияФорматаОбменаПриЗагрузке - Строка - Версия формата, которая должна применяться при загрузке данных. +// НаправлениеОбмена - Строка - отправка или Получение. +// ВерсияФорматаОбменаПриЗагрузке - Строка - версия формата, которая должна применяться при загрузке данных. // // Возвращаемое значение: -// Структура - Компоненты обмена. +// Структура - компоненты обмена. // -Функция КомпонентыОбмена(НаправлениеОбмена, ВерсияФорматаОбменаПриЗагрузке = "") +Функция КомпонентыОбмена(НаправлениеОбмена, ВерсияФорматаОбменаПриЗагрузке = "", РасширениеФорматаПриЗагрузке = "") - КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена(НаправлениеОбмена); - ТекВерсияФормата = ?(НаправлениеОбмена = "Отправка", ВерсияФормата, ВерсияФорматаОбменаПриЗагрузке); + КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена(НаправлениеОбмена); + ТекВерсияФормата = ?(НаправлениеОбмена = "Отправка", ВерсияФормата, ВерсияФорматаОбменаПриЗагрузке); + ТекРасширениеФормата = ?(НаправлениеОбмена = "Отправка", РасширениеФормата, РасширениеФорматаПриЗагрузке); Если ЗначениеЗаполнено(УзелОбмена) И НаправлениеОбмена = "Отправка" Тогда КомпонентыОбмена.ЭтоОбменЧерезПланОбмена = Истина; КомпонентыОбмена.УзелКорреспондента = УзелОбмена; @@ -33,6 +34,7 @@ КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = НСтр("ru = 'Перенос данных через буфер обмена'", ОбщегоНазначения.КодОсновногоЯзыка()); КомпонентыОбмена.ВерсияФорматаОбмена = ТекВерсияФормата; КомпонентыОбмена.XMLСхема = "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/" + ТекВерсияФормата; + ОбменДаннымиXDTOСервер.ВключитьПространствоИмен(КомпонентыОбмена, ТекРасширениеФормата, "ext"); МенеджерОбменаВнутренний = Ложь; Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -75,12 +77,15 @@ // Выполняет выгрузку данных в соответствии с настройками. // Параметры: -// СтруктураПараметров - Структура - Параметры выполнения обработки +// СтруктураПараметров - Структура - параметры выполнения обработки: // * МестоВыгрузки - Число - 0 (в файл), 1 (в текст). +// * ЭтоФоновоеЗадание - Булево - признак вызова процедуры из фонового задания. // При запуске из фонового задания в структуре содержатся данные для заполнения реквизитов объекта. -// +// АдресДляРазмещенияРезультата - Строка - адрес во временном хранилище. +// // Возвращаемое значение: -// Строка - Адрес во временном хранилище, куда помещен результат выгрузки. +// Строка - адрес во временном хранилище, куда помещен результат выгрузки. +// Функция РезультатВыгрузкиВXML(СтруктураПараметров, АдресДляРазмещенияРезультата = Неопределено) Экспорт МестоВыгрузки = СтруктураПараметров.МестоВыгрузки; @@ -135,13 +140,13 @@ // Выгружает объекты по настройкам, указанным в реквизитах обработки и возвращает результат выгрузки. // // Возвращаемое значение: -// - РезультатВыгрузки - Структура - Структура с результатом выгрузки. -// * ТекстВыгрузки - Строка - Текст сообщения обмена. -// * ЕстьВыгруженныеОбъекты - Булево - Истина, если выгружен хотя бы один объект. -// * ЕстьОшибки - Булево - Истина, если при выгрузке произошли ошибки. -// * ТекстОшибки - Строка - Текст ошибки при выгрузке. -// * ВыгруженныеОбъекты - Массив - Массив выгруженных объектов по настройкам обработки. -// * ВыгруженныеПоСсылкеОбъекты - Массив - Массив выгруженных объектов по ссылкам. +// Структура - структура с результатом выгрузки: +// * ТекстВыгрузки - Строка - текст сообщения обмена. +// * ЕстьВыгруженныеОбъекты - Булево - Истина, если выгружен хотя бы один объект. +// * ЕстьОшибки - Булево - Истина, если при выгрузке произошли ошибки. +// * ТекстОшибки - Строка - текст ошибки при выгрузке. +// * ВыгруженныеОбъекты - Массив - массив выгруженных объектов по настройкам обработки. +// * ВыгруженныеПоСсылкеОбъекты - Массив - массив выгруженных объектов по ссылкам. // Функция ВыгрузитьДанныеВXML() @@ -261,10 +266,11 @@ // Выполняет загрузку сообщения. // Параметры: -// СтруктураПараметров - Структура +// СтруктураПараметров - Структура: // * ТекстXML - Строка - сообщение которое следует загрузить (в случае загрузки из текста). -// * АдресНаСервере - Строка - Имя временного файла с данными для загрузки (при загрузке из файла) -// АдресРезультата - Строка - Адрес для размещения результата, при запуске из фонового задания. +// * АдресНаСервере - Строка - имя временного файла с данными для загрузки (при загрузке из файла) +// АдресРезультата - Строка - адрес для размещения результата, при запуске из фонового задания. +// Процедура ЗагрузкаСообщения(СтруктураПараметров, АдресРезультата) Экспорт Если СтруктураПараметров.Свойство("ЭтоФоновоеЗадание") Тогда @@ -299,10 +305,10 @@ // ЧтениеXML - ЧтениеXML - инициализированный сообщением обмена объект ЧтениеXML. // // Возвращаемое значение: -// Структура - результат загрузки. -// * ЕстьОшибки - Булево - Признак, что во время загрузки сообщения обмена возникли ошибки. -// * ТекстОшибки - Строка - Текст сообщения об ошибке. -// * ЗагруженныеОбъекты - Массив - Массив загруженных объектов. +// Структура: +// * ЕстьОшибки - Булево - признак, что во время загрузки сообщения обмена возникли ошибки. +// * ТекстОшибки - Строка - текст сообщения об ошибке. +// * ЗагруженныеОбъекты - Массив - массив загруженных объектов. // Функция ЗагрузитьДанныеИзXML(ЧтениеXML) @@ -313,7 +319,7 @@ ЧтениеXML.Прочитать(); // Message ЧтениеXML.Прочитать(); // Header - Header = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("http://www.1c.ru/SSL/Exchange/Message", "Header")); + ЗаголовокСообщенияXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("http://www.1c.ru/SSL/Exchange/Message", "Header")); Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.ЛокальноеИмя <> "Body" Тогда @@ -323,10 +329,17 @@ Возврат РезультатЗагрузки; КонецЕсли; - ФорматОбмена = РазложитьФорматОбмена(Header.Format); + СтруктураФормата = СтрРазделить(ЗаголовокСообщенияXDTO.Format, " ", Ложь); + + ФорматОбмена = РазложитьФорматОбмена(СтруктураФормата[0]); ВерсияФорматаДляЗагрузки = ФорматОбмена.Версия; - КомпонентыОбмена = КомпонентыОбмена("Получение", ВерсияФорматаДляЗагрузки); - КомпонентыОбмена.XMLСхема = Header.Format; + РасширениеФорматаДляЗагрузки = ""; + + Если СтруктураФормата.Количество() > 0 Тогда + РасширениеФорматаДляЗагрузки = СтруктураФормата[СтруктураФормата.ВГраница()]; + КонецЕсли; + + КомпонентыОбмена = КомпонентыОбмена("Получение", ВерсияФорматаДляЗагрузки, РасширениеФорматаДляЗагрузки); ЧтениеXML.Прочитать(); // Body КомпонентыОбмена.Вставить("ФайлОбмена", ЧтениеXML); @@ -364,6 +377,7 @@ УзелДереваДокументы = ТаблицаПравилВыгрузки.Строки.Добавить(); УзелДереваДокументы.ЭтоГруппа = Истина; УзелДереваДокументы.Наименование = НСтр("ru = 'Документы'"); + УзелДереваДокументы.ОтборПоПериоду = Истина; УзелДереваПВХ = ТаблицаПравилВыгрузки.Строки.Добавить(); УзелДереваПВХ.ЭтоГруппа = Истина; @@ -385,6 +399,7 @@ Представление = НСтр("ru = 'Справочник %1'"); ИначеЕсли Метаданные.Документы.Содержит(ТекМД) Тогда НовСтрока = УзелДереваДокументы.Строки.Добавить(); + НовСтрока.ОтборПоПериоду = Истина; ПолноеИмяМДСтрокой = "Документ." + ТекИмя; Представление = НСтр("ru = 'Документ %1'"); ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ТекМД) Тогда @@ -432,7 +447,8 @@ // или ссылка на группу. // Представление - Строка - представление объекта в отборе. // Отбор - ОтборКомпоновкиДанных - отбор компоновки для заполнения. -// АдресСохраненияСхемы - Строка, УникальныйИдентификатор - адрес временного хранилища для сохранения схемы +// АдресСохраненияСхемы - Строка +// - УникальныйИдентификатор - адрес временного хранилища для сохранения схемы // компоновки. // // Возвращаемое значение: @@ -467,7 +483,8 @@ // Возвращает массив имен таблиц метаданных по составному типу параметра "ПолноеИмяМетаданных". // // Параметры: -// ПолноеИмяМетаданных - Строка, ДеревоЗначений- имя таблицы (например "Справочник.Валюты") или имя +// ПолноеИмяМетаданных - Строка +// - ДеревоЗначений - имя таблицы (например "Справочник.Валюты") или имя // предопределенной группы // (например "ВсеДокументы") или дерево значений, описывающее группу. // @@ -515,6 +532,7 @@ // ОписаниеПустогоОтбора - Строка - значение, возвращаемое в случае пустого отбора. // Возвращаемое значение: // Строка - строковое представление отбора. +// Функция ПредставлениеОтбора(Период, Отбор, Знач ОписаниеПустогоОтбора = Неопределено) Экспорт НашОтбор = ?(ТипЗнч(Отбор)=Тип("КомпоновщикНастроекКомпоновкиДанных"), Отбор.Настройки.Отбор, Отбор); @@ -541,7 +559,7 @@ // Параметры: // ЭлементыПриемника - КоллекцияЭлементовОтбораКомпоновкиДанных - приемник. // ЭлементыИсточника - КоллекцияЭлементовОтбораКомпоновкиДанных - источник. -// СоответствиеПолей - Соответствие - данные для коррекции полей. +// СоответствиеПолей - Соответствие - данные для коррекции полей: // Ключ - исходный путь к данным поля, Значение - путь // для результата. Например для замены полей типа. // "Ссылка.Наименование" -> "ОбъектСсылка.Наименование" @@ -644,11 +662,12 @@ // "все документов" или "все НСИ"), для которых будет построена схема. // Если не указано, то для всего состава узла. // -// АдресСохраненияСхемы - Строка, УникальныйИдентификатор - адрес временного хранилища для сохранения схемы +// АдресСохраненияСхемы - Строка +// - УникальныйИдентификатор - адрес временного хранилища для сохранения схемы // компоновки. // // Возвращаемое значение: -// Структура - поля: +// Структура: // * ТаблицаМетаданныхСоставаУзла - ТаблицаЗначений - описание состава узла. // * СхемаКомпоновки - СхемаКомпоновкиДанных - инициированное значение. // * КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - инициированное значение. @@ -1083,6 +1102,7 @@ КонецЕсли; КонецЦикла; КонецПроцедуры + #КонецОбласти #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ВыгрузкаЗагрузкаEnterpriseData.mdo b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ВыгрузкаЗагрузкаEnterpriseData.mdo index 8ca85f143..35b0b65c4 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ВыгрузкаЗагрузкаEnterpriseData.mdo +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ВыгрузкаЗагрузкаEnterpriseData.mdo @@ -238,6 +238,19 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="ec892726-dee3-4edb-ad71-020404b09477"> + <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"/> + </attributes> <forms uuid="5fb5320c-cd7c-4f28-ad6a-8670a60a9e11"> <name>Форма</name> <synonym> diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ManagerModule.bsl index e666b85ae..838e92d25 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ManagerModule.bsl @@ -14,7 +14,7 @@ // ссылок в файлах выгрузки. // // Параметры: -// Типы - Массив из ОбъектМетаданных - +// Типы - Массив из ОбъектМетаданных // Процедура ПриЗаполненииТиповТребующихАннотациюСсылокПриВыгрузке(Типы) Экспорт @@ -36,7 +36,7 @@ // колонок таблицы значений, // Версия - Строка - номер версии интерфейса обработчиков выгрузки / загрузки данных, // поддерживаемого обработчиком, -// ПередВыгрузкойТипа - Булево, флаг необходимости вызова обработчика перед +// ПередВыгрузкойТипа - Булево - флаг необходимости вызова обработчика перед // выгрузкой всех объектов информационной базы, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередВыгрузкойТипа(), @@ -52,10 +52,10 @@ // контекста СериализаторXDTO, // ОбъектМетаданных - ОбъектМетаданных, перед выгрузкой данных которого // был вызван обработчик, -// Отказ - Булево. Если в процедуре ПередВыгрузкойТипа() установить значение +// Отказ - Булево - если в процедуре ПередВыгрузкойТипа() установить значение // данного параметра равным Истина - выгрузка объектов, соответствующих // текущему объекту метаданных, выполняться не будет. -// ПередВыгрузкойОбъекта - Булево, флаг необходимости вызова обработчика перед +// ПередВыгрузкойОбъекта - Булево - флаг необходимости вызова обработчика перед // выгрузкой конкретного объекта информационной базы. Если присвоено значение // Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура // ПередВыгрузкойОбъекта(), поддерживающая следующие параметры: @@ -91,10 +91,10 @@ // помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. В дальнейшем // артефакты, сформированные в процедуре ПередВыгрузкойОбъекта(), будут доступны в процедурах // обработчиков загрузки данных (см. комментарий к процедуре ПриРегистрацииОбработчиковЗагрузкиДанных(). -// Отказ - Булево. Если в процедуре ПередВыгрузкойОбъекта() установить значение +// Отказ - Булево - если в процедуре ПередВыгрузкойОбъекта() установить значение // данного параметра равным Истина - выгрузка объекта, для которого был вызван обработчик, // выполняться не будет. -// ПослеВыгрузкиТипа() - Булево, флаг необходимости вызова обработчика после выгрузки всех +// ПослеВыгрузкиТипа() - Булево - флаг необходимости вызова обработчика после выгрузки всех // объектов информационной базы, относящихся к данному объекту метаданных. Если присвоено значение // Истина - в общем модуле обработчика должна быть реализована экспортируемая процедура // ПослеВыгрузкиТипа(), поддерживающая следующие параметры: @@ -138,7 +138,7 @@ // колонок таблицы значений, // Версия - Строка - номер версии интерфейса обработчиков выгрузки / загрузки данных, // поддерживаемого обработчиком, -// ПередСопоставлениемСсылок - Булево, флаг необходимости вызова обработчика перед +// ПередСопоставлениемСсылок - Булево - флаг необходимости вызова обработчика перед // сопоставлением ссылок (в исходной ИБ и в текущей), относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередСопоставлениемСсылок(), @@ -148,7 +148,7 @@ // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. // ОбъектМетаданных - ОбъектМетаданных, перед сопоставлением ссылок которого // был вызван обработчик, -// СтандартнаяОбработка - Булево. Если процедуре ПередСопоставлениемСсылок() +// СтандартнаяОбработка - Булево - если процедуре ПередСопоставлениемСсылок() // установить значение данного параметра равным Ложь, вместо стандартного // сопоставления ссылок (поиск объектов в текущей ИБ с теми же значениями // естественного ключа, которые были выгружены из ИБ-источника) будет @@ -159,7 +159,7 @@ // Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер // контейнера, используемый в процессе загрузки данных. Подробнее см. комментарий // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера, -// ТаблицаИсходныхСсылок - ТаблицаЗначений, содержащая информацию о ссылках, +// ТаблицаИсходныхСсылок - ТаблицаЗначений - содержащая информацию о ссылках, // выгруженных из исходной ИБ. Колонки: // ИсходнаяСсылка - ЛюбаяСсылка, ссылка объекта исходной ИБ, которую требуется // сопоставить c ссылкой в текущей ИБ, @@ -169,10 +169,10 @@ // Возвращаемое значение функции СопоставитьСсылки() - ТаблицаЗначений, колонки: // ИсходнаяСсылка - ЛюбаяСсылка, ссылка объекта, выгруженная из исходной ИБ, // Ссылка - ЛюбаяСсылка, сопоставленная исходной ссылка в текущей ИБ. -// Отказ - Булево. Если в процедуре ПередСопоставлениемСсылок() установить значение +// Отказ - Булево - если в процедуре ПередСопоставлениемСсылок() установить значение // данного параметра равным Истина - сопоставление ссылок, соответствующих // текущему объекту метаданных, выполняться не будет. -// ПередЗагрузкойТипа - Булево, флаг необходимости вызова обработчика перед +// ПередЗагрузкойТипа - Булево - флаг необходимости вызова обработчика перед // загрузкой всех объектов данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередЗагрузкойТипа(), @@ -182,10 +182,10 @@ // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. // ОбъектМетаданных - ОбъектМетаданных, перед загрузкой всех данных которого // был вызван обработчик, -// Отказ - Булево. Если в процедуре ПередЗагрузкойТипа() установить значение данного +// Отказ - Булево - если в процедуре ПередЗагрузкойТипа() установить значение данного // параметра равным Истина - загрузка всех объектов данных соответствующих текущему // объекту метаданных выполняться не будет. -// ПередЗагрузкойОбъекта - Булево, флаг необходимости вызова обработчика перед +// ПередЗагрузкойОбъекта - Булево - флаг необходимости вызова обработчика перед // загрузкой объекта данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПередЗагрузкойОбъекта(), @@ -208,9 +208,9 @@ // для типа которого в качестве базового типа используется абстрактный XDTO-тип // {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}Artefact. Допускается использовать XDTO-пакеты, // помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. -// Отказ - Булево. Если в процедуре ПередЗагрузкойОбъекта() установить значение данного +// Отказ - Булево - если в процедуре ПередЗагрузкойОбъекта() установить значение данного // параметра равным Истина - загрузка объекта данных выполняться не будет. -// ПослеЗагрузкиОбъекта - Булево, флаг необходимости вызова обработчика после +// ПослеЗагрузкиОбъекта - Булево - флаг необходимости вызова обработчика после // загрузки объекта данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПослеЗагрузкиОбъекта(), @@ -231,7 +231,7 @@ // для типа которого в качестве базового типа используется абстрактный XDTO-тип // {http://www.1c.ru/1cFresh/Data/Dump/1.0.2.1}Artefact. Допускается использовать XDTO-пакеты, // помимо изначально поставляемых в составе подсистемы ВыгрузкаЗагрузкаДанных. -// ПослеЗагрузкиТипа - Булево, флаг необходимости вызова обработчика после +// ПослеЗагрузкиТипа - Булево - флаг необходимости вызова обработчика после // загрузки всех объектов данных, относящихся к данному объекту // метаданных. Если присвоено значение Истина - в общем модуле обработчика должна // быть реализована экспортируемая процедура ПослеЗагрузкиТипа(), diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ObjectModule.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ObjectModule.bsl index a11665eb5..6eabe6610 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаДанныхСверткаСсылокНаПользователейВРазделенныхДанных/ObjectModule.bsl @@ -33,25 +33,26 @@ // см. "ПриРегистрацииОбработчиковВыгрузкиДанных". // // Параметры: -// Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - -// МенеджерВыгрузкиОбъекта - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерВыгрузкиДанныхИнформационнойБазы - -// Сериализатор - СериализаторXDTO - -// Объект - КонстантаМенеджерЗначения - -// - СправочникОбъект, ДокументОбъект - -// - БизнесПроцессОбъект - -// - ЗадачаОбъект - -// - ПланСчетовОбъект - -// - ПланОбменаОбъект - -// - ПланВидовХарактеристикОбъект - -// - ПланВидовРасчетаОбъект - -// - РегистрСведенийНаборЗаписей - -// - РегистрНакопленияНаборЗаписей - -// - РегистрБухгалтерииНаборЗаписей - -// - РегистрРасчетаНаборЗаписей - -// - ПоследовательностьНаборЗаписей - -// - ПерерасчетНаборЗаписей - -// Артефакты - Массив - -// Отказ - Булево - +// Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера +// МенеджерВыгрузкиОбъекта - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерВыгрузкиДанныхИнформационнойБазы +// Сериализатор - СериализаторXDTO +// Объект - КонстантаМенеджерЗначения +// - СправочникОбъект +// - ДокументОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - ПланСчетовОбъект +// - ПланОбменаОбъект +// - ПланВидовХарактеристикОбъект +// - ПланВидовРасчетаОбъект +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей +// - ПоследовательностьНаборЗаписей +// - ПерерасчетНаборЗаписей +// Артефакты - Массив +// Отказ - Булево // Процедура ПередВыгрузкойОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты, Отказ) Экспорт @@ -439,7 +440,7 @@ // ИмяФайла - Строка - путь к файлу. // // Возвращаемое значение: -// Объект - . +// Объект // Функция ПрочитатьОбъектИзФайла(Знач ИмяФайла) @@ -461,7 +462,7 @@ // ПотокЧтения - ЧтениеXML - поток чтения. // // Возвращаемое значение: -// Объект - . +// Объект // Функция ПрочитатьОбъектИзПотока(ПотокЧтения) diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl index c5bacc87d..c7f957af1 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl @@ -469,12 +469,12 @@ // // Параметры: // -// ИмяОсновнойСтраницы (обязательный) - Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему +// ИмяОсновнойСтраницы (обязательный) - Строка - имя страницы панели "ПанельОсновная", которая соответствует текущему // номеру перехода. -// ИмяОбработчикаПриОткрытии (необязательный) - Строка. Имя функции-обработчика события открытия текущей страницы +// ИмяОбработчикаПриОткрытии (необязательный) - Строка - имя функции-обработчика события открытия текущей страницы // помощника. -// ДлительнаяОперация (необязательный) - Булево. Признак отображения страницы длительной операции. -// Истина - отображается страница длительной операции; Ложь - отображается обычная страница. Значение по умолчанию - +// ДлительнаяОперация (необязательный) - Булево - признак отображения страницы длительной операции. +// Истина - отображается страница длительной операции; Ложь - отображается обычная страница. Значение по умолчанию // Ложь. // &НаСервере diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl index 422a6716e..27aaeb991 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl @@ -13,8 +13,8 @@ // Запускает обмен данными, используется в фоновом задании. // // Параметры: -// ПараметрыЗадания - Структура - Параметры, необходимые для выполнения процедуры. -// АдресХранилища - Строка - Адрес временного хранилища. +// ПараметрыЗадания - Структура - параметры, необходимые для выполнения процедуры. +// АдресХранилища - Строка - адрес временного хранилища. // Процедура ВыполнитьЗапускОбменаДанными(ПараметрыЗадания, АдресХранилища) Экспорт @@ -59,8 +59,8 @@ // Запускает загрузку полученного из интернета файла, используется в фоновом задании. // // Параметры: -// ПараметрыЗадания - Структура - Параметры, необходимые для выполнения процедуры. -// АдресХранилища - Строка - Адрес временного хранилища. +// ПараметрыЗадания - Структура - параметры, необходимые для выполнения процедуры. +// АдресХранилища - Строка - адрес временного хранилища. // Процедура ВыполнитьЗагрузкуПолученногоИзИнтернетаФайла(ПараметрыЗадания, АдресХранилища) Экспорт diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl index f6c1f3152..87394347b 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl @@ -59,6 +59,11 @@ ОбработкаОбъект.ЗаполнитьКоллекциюДоступныхДляИзмененияОбъектов(ДоступныеОбъектыДляИзменения, Параметры.ПоказыватьСкрытые); КонецПроцедуры +// Параметры: +// РодительскаяПодсистема - ОбъектМетаданныхПодсистема +// Возвращаемое значение: +// Соответствие +// &НаСервереБезКонтекста Функция ИменаПодчиненныхПодсистем(РодительскаяПодсистема) diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form index 8edf86192..cc998b010 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form @@ -2,7 +2,7 @@ <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> <title> <key>ru</key> - <value>Выбранные элементы</value> + <value>Выбор элементов для изменения</value> ГруппаУсловияОтбора @@ -23,15 +23,79 @@ КомпоновщикНастроек.Settings.Filter None + SetPresentation + UserSettingItemProperties КомпоновщикНастроекНастройкиОтборКоманднаяПанель 25 + + СписокВосстановитьЗначения + 112 + + <key>ru</key> + <value>Загрузить отбор...</value> + + true + true + + true + + + СписокВосстановитьЗначенияРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + Form.StandardCommand.RestoreValues + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СписокСохранитьЗначения + 110 + + <key>ru</key> + <value>Сохранить отбор...</value> + + true + true + + true + + + СписокСохранитьЗначенияРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + Form.StandardCommand.SaveValues + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + КомпоновщикНастроекНастройкиОтборДобавитьЭлементОтбора 49 <key>ru</key> - <value>Добавить условие отбора</value> + <value>Добавить условие</value> true true @@ -108,6 +172,32 @@ Form + + КомпоновщикНастроекНастройкиОтборСправка + 114 + true + true + + true + + + КомпоновщикНастроекНастройкиОтборСправкаРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left @@ -259,7 +349,7 @@ Vertical Auto - WeakSeparation + NormalSeparation true true auto @@ -293,6 +383,7 @@ ListSettings LoadDynamicListSettings SaveDynamicListSettings + SearchHistory СписокСсылка 87 @@ -337,15 +428,52 @@ Normal + Bottom СписокКоманднаяПанель 76 + + СписокИзменитьФорму + 102 + + <key>ru</key> + <value>Колонки списка...</value> + + true + true + + true + + + СписокИзменитьФормуРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + CommandBarHyperlink + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + InCommandBar + Left Selection СписокВыбор + + OnActivateRow + СписокПриАктивизацииСтроки + СписокСтрокаПоиска 78 @@ -366,7 +494,9 @@ Список + 40 true + false @@ -457,7 +587,7 @@ Auto - СписокКонтекстноеМенюОбновить1 + СписокКонтекстноеМенюОбновить 90 true true @@ -465,7 +595,7 @@ true - СписокКонтекстноеМенюОбновить1РасширеннаяПодсказка + СписокКонтекстноеМенюОбновитьРасширеннаяПодсказка 91 Label true @@ -483,7 +613,7 @@ Auto - СписокКонтекстноеМенюВывестиСписок1 + СписокКонтекстноеМенюВывестиСписок 92 true true @@ -491,7 +621,7 @@ true - СписокКонтекстноеМенюВывестиСписок1РасширеннаяПодсказка + СписокКонтекстноеМенюВывестиСписокРасширеннаяПодсказка 93 Label true @@ -523,16 +653,17 @@ true true false - false - false Auto Auto + ExpandTopLevel true true true Список.DefaultPicture + Top + None true 60 @@ -569,7 +700,7 @@ Vertical Auto - WeakSeparation + NormalSeparation true true auto @@ -636,6 +767,14 @@ Right + + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере + + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + OnCreateAtServer ПриСозданииНаСервере @@ -645,11 +784,10 @@ Ignore No OK - RestoreValues Retry - SaveValues Yes LockOwner + UseList true true Vertical @@ -672,22 +810,6 @@
      true
      - - ОбъектыДляОбработки - 2 - - ValueList - - - true - - - true - - - - - Список @@ -704,16 +826,22 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.DefaultPicture</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.Ссылка</segments> </notDefaultUseAlwaysAttributes> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ - "" КАК Ссылка -</queryText> + ТаблицаПереопределяемый.Ссылка КАК Ссылка +ИЗ + Справочник.Пользователи КАК ТаблицаПереопределяемый</queryText> + <dynamicDataRead>true</dynamicDataRead> <autoFillAvailableFields>true</autoFillAvailableFields> <customQuery>true</customQuery> <getInvisibleFieldPresentations>true</getInvisibleFieldPresentations> + <keyField>Ссылка</keyField> </extInfo> </attributes> <attributes> @@ -771,6 +899,22 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>КоличествоВыбранных</name> + <id>5</id> + <valueType> + <types>Number</types> + <numberQualifiers> + <precision>10</precision> + </numberQualifiers> + </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 7bb88a30a..ddb114443 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl @@ -12,6 +12,7 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ВыбранныеТипы = Параметры.ВыбранныеТипы; + КлючНазначенияИспользования = ВыбранныеТипы; ОбъектОбработка = РеквизитФормыВЗначение("Объект"); ТекстЗапроса = ОбъектОбработка.ТекстЗапроса(ВыбранныеТипы); @@ -25,6 +26,20 @@ КонецПроцедуры +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + Настройки["Отбор"] = НастройкиКомпоновкиДанных(); +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + НастройкиКомпоновки = Настройки["Отбор"]; + Если НастройкиКомпоновки <> Неопределено Тогда + КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновки); + ОбновитьСписокВыбранныхНаСервере(); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыКомпоновщикНастроекНастройкиОтбор @@ -41,6 +56,7 @@ &НаКлиенте Процедура КомпоновщикНастроекНастройкиОтборПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + ОтключитьОбработчикОжидания("ОбновитьКоличествоВыбранных"); ОтключитьОбработчикОжидания("ОбновитьСписокВыбранных"); КонецПроцедуры @@ -55,16 +71,29 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура СписокПриАктивизацииСтроки(Элемент) + ОтключитьОбработчикОжидания("ОбновитьКоличествоВыбранных"); + Если Элементы.ГруппаВыбранныеОбъекты.Видимость Тогда + ПодключитьОбработчикОжидания("ОбновитьКоличествоВыбранных", 0.1, Истина); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) - Результат = КомпоновщикНастроек.Настройки; + Результат = НастройкиКомпоновкиДанных(); Закрыть(Результат); КонецПроцедуры +&НаСервере +Функция НастройкиКомпоновкиДанных() + Возврат Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных(); +КонецФункции + &НаКлиенте Процедура ОткрытьЭлемент(Команда) @@ -111,14 +140,33 @@ ПолеВыбора.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); ПолеВыбора.Использование = Истина; + ОбновитьКоличествоВыбранныхСервер(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьКоличествоВыбранных() + ОбновитьКоличествоВыбранныхСервер(); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьКоличествоВыбранныхСервер() + + ПредыдущееКоличествоВыбранных = КоличествоВыбранных; + КоличествоВыбранных = ВыбранныеОбъекты().Строки.Количество(); + ТекстКоличествоВыбранных = Строка(КоличествоВыбранных); Если КоличествоВыбранных > 1000 Тогда - КоличествоВыбранных = НСтр("ru = '> 1000'"); + КоличествоВыбранных = 1000; + ТекстКоличествоВыбранных = НСтр("ru = '> 1000'"); ИначеЕсли КоличествоВыбранных = 0 Тогда Список.КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.Полное); КонецЕсли; - Элементы.ГруппаВыбранныеОбъекты.Заголовок = ПодставитьПараметрыВСтроку(НСтр("ru = 'Выбранные элементы (%1)'"), КоличествоВыбранных); - + Если ПредыдущееКоличествоВыбранных <> КоличествоВыбранных Тогда + Элементы.ГруппаВыбранныеОбъекты.Заголовок = ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выбранные элементы (%1)'"), ТекстКоличествоВыбранных); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -140,20 +188,12 @@ Результат = Новый ДеревоЗначений; Если Не ПустаяСтрока(ВыбранныеТипы) Тогда - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - ТекстЗапроса = ОбработкаОбъект.ТекстЗапроса(ВыбранныеТипы, Истина); - СхемаКомпоновкиДанных = СхемаКомпоновкиДанных(ТекстЗапроса); - - КомпоновщикНастроекКомпоновкиДанных = Новый КомпоновщикНастроекКомпоновкиДанных; - АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор); - КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); - КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(КомпоновщикНастроек.Настройки); - - Результат = Новый ДеревоЗначений; - КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + СхемаКомпоновкиДанных = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных(); + Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных(); + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных(); Попытка МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, - КомпоновщикНастроекКомпоновкиДанных.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); Исключение Возврат Результат; КонецПопытки; diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl index 8d58f7e16..bbf18a76a 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl @@ -137,7 +137,9 @@ Процедура ОперандыОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) Если Элемент.ТекущиеДанные.ПометкаУдаления Тогда - ПоказатьВопрос(Новый ОписаниеОповещения("ОперандыОкончаниеПеретаскиванияЗавершение", ЭтотОбъект), НСтр("ru = 'Выбранный элемент помечен на удаление'") + Символы.ПС + НСтр("ru = 'Продолжить?'"), РежимДиалогаВопрос.ДаНет); + ПоказатьВопрос(Новый ОписаниеОповещения("ОперандыОкончаниеПеретаскиванияЗавершение", ЭтотОбъект), + НСтр("ru = 'Выбранный элемент помечен на удаление. + |Продолжить?'"), РежимДиалогаВопрос.ДаНет); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form index a09750e3d..d1974dbd4 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form @@ -65,13 +65,17 @@ <textSize>Normal</textSize> <inputHint> <key>ru</key> - <value>Введите первые буквы вида элементов</value> + <value>Введите первые буквы справочника или документа</value> </inputHint> </extInfo> </items> <items xsi:type="form:Decoration"> <name>НастройкаОтбора</name> <id>107</id> + <title> + <key>ru</key> + <value>Все элементы</value> + true true @@ -127,10 +131,9 @@ HorizontalIfPossible Auto - WeakSeparation + NormalSeparation true true - auto Auto Auto @@ -2799,6 +2802,9 @@ true + + РеквизитыОбъекта + Имя 1 @@ -3220,6 +3226,9 @@ true + + ВидыИзменяемыхОбъектов + РежимРазработчика diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl index 22f912801..3a45ab120 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl @@ -12,15 +12,13 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); - ПроверитьВерсиюИРежимСовместимостиПлатформы(); - Параметры.Свойство("ДополнительнаяОбработкаСсылка", ДополнительнаяОбработкаСсылка); - ЗагрузитьНастройкиОбработки(); КонтекстныйВызов = ТипЗнч(Параметры.МассивОбъектов) = Тип("Массив"); - Элементы.ФормаНазад.Видимость = Ложь; + ЗагрузитьНастройкиОбработки(); + Элементы.ФормаНазад.Видимость = Ложь; ЗапретРедактированияВстроен = Метаданные.НайтиПоПолномуИмени("ОбщийМодуль.ЗапретРедактированияРеквизитовОбъектовКлиент") <> Неопределено; Если КонтекстныйВызов Тогда @@ -77,7 +75,8 @@ КонецЕсли; ОбновитьВидимостьЭлементов(); - СохранитьНастройки(); + СохранитьНастройкиОбработки(Объект.ИзменятьВТранзакции, Объект.ПрерыватьПриОшибке, + ТОНастройкаПорции, ТОПроцентОбъектовВПорции, ТОЧислоОбъектовВПорции, ОбрабатыватьРекурсивно); КонецЕсли; КонецЕсли; @@ -117,9 +116,13 @@ ВидыИзменяемыхОбъектов = ВыбранныйТип.Значение; ВыбранныеОбъектыВКонтексте.Очистить(); ПерестроитьИнтерфейсФормыДляВыбранногоВидаОбъектов(); + Если Не КонтекстныйВызов Тогда + СохранитьВидыИзменяемыхОбъектов(ВидыИзменяемыхОбъектов); + КонецЕсли; КонецЕсли; Алгоритм = ПредставлениеИзменяемыхОбъектов; + КонецПроцедуры &НаКлиенте @@ -351,6 +354,9 @@ ПодключитьОбработчикОжидания("ОбновитьПояснениеОНастроенныхИзменениях", 0.1, Истина); КонецПроцедуры +// Параметры: +// Команда - КомандаФормы +// &НаКлиенте Процедура Подключаемый_УстановитьНастройку(Команда) @@ -459,7 +465,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(192, 192, 192)); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(192, 192, 192)); // АПК:1346 - автономная обработка не может использовать стили // Пояснения по связанным реквизитам @@ -494,36 +500,48 @@ Для Каждого ТабличнаяЧасть Из ТабличныеЧастиОбъекта Цикл Для Каждого Реквизит Из ЭтотОбъект[ТабличнаяЧасть.Значение] Цикл - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ТабличнаяЧасть.Значение + "Значение"); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ТабличнаяЧасть.Значение + ".Имя"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Реквизит.Имя; - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ТабличнаяЧасть.Значение + ".Значение"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ТабличнаяЧасть.Значение + ".Изменять"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Ложь; - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ТабличнаяЧасть.Значение + ".ПредставлениеСвязейПараметровВыбора"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; - - Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Реквизит.ПредставлениеСвязейПараметровВыбора); - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый); + УстановитьУсловноеФорматированиеРеквизитаТабличнойЧасти(Реквизит, ТабличнаяЧасть); КонецЦикла; КонецЦикла; КонецПроцедуры +// Параметры: +// Реквизит - Структура: +// * Имя - Строка +// ПредставлениеСвязейПараметровВыбора - Строка +// ТабличнаяЧасть - ЭлементСпискаЗначений +// +&НаСервере +Процедура УстановитьУсловноеФорматированиеРеквизитаТабличнойЧасти(Реквизит, ТабличнаяЧасть) + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ТабличнаяЧасть.Значение + "Значение"); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ТабличнаяЧасть.Значение + ".Имя"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Реквизит.Имя; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ТабличнаяЧасть.Значение + ".Значение"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ТабличнаяЧасть.Значение + ".Изменять"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ТабличнаяЧасть.Значение + ".ПредставлениеСвязейПараметровВыбора"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Реквизит.ПредставлениеСвязейПараметровВыбора); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый); +КонецПроцедуры + + &НаКлиенте Процедура ВыполнитьИзменениеПроверкаОтбораВыполнена(РезультатВопроса = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -631,14 +649,9 @@ &НаСервере Процедура ДобавитьИзменениеВИсторию(СтруктураИзменения, ПредставлениеИзменения) - // Настройки истории изменений это массив структур с ключами: - // Изменение - массив со структурой изменения. - // Представление - представление настройки пользователю. - Если Объект.ТипОперации = "ВыполнитьАлгоритм" Тогда - Настройки = ХранилищеОбщихНастроекЗагрузить( - "ГрупповоеИзменениеОбъектов", - "ИсторияАлгоритмов/" + ВидыИзменяемыхОбъектов); + Настройки = ХранилищеОбщихНастроекЗагрузить("ГрупповоеИзменениеОбъектов", + "ИсторияАлгоритмов/" + ВидыИзменяемыхОбъектов); Если Настройки = Неопределено Тогда Настройки = Новый Массив; @@ -665,8 +678,7 @@ Возврат; КонецЕсли; - Настройки = ХранилищеОбщихНастроекЗагрузить( - "ГрупповоеИзменениеОбъектов", + Настройки = ХранилищеОбщихНастроекЗагрузить("ГрупповоеИзменениеОбъектов", "ИсторияИзменений/" + ВидыИзменяемыхОбъектов); Если Настройки = Неопределено Тогда @@ -783,54 +795,77 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура СохранитьНастройкиОбработки(ПолноеИмя, ИзменятьВТранзакции, ПрерыватьПриОшибке, - ТОНастройкаПорции, ТОПроцентОбъектовВПорции, ТОЧислоОбъектовВПорции, ОбрабатыватьРекурсивно) +Процедура СохранитьНастройкиОбработки(ИзменятьВТранзакции, ПрерыватьПриОшибке, + ТОНастройкаПорции, ТОПроцентОбъектовВПорции, ТОЧислоОбъектовВПорции, ОбрабатыватьРекурсивно) Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда Возврат; КонецЕсли; - СтруктураНастроек = Новый Структура; - - СтруктураНастроек.Вставить("ИзменятьВТранзакции", ИзменятьВТранзакции); - СтруктураНастроек.Вставить("ПрерыватьПриОшибке", ПрерыватьПриОшибке); - СтруктураНастроек.Вставить("ТОНастройкаПорции", ТОНастройкаПорции); - СтруктураНастроек.Вставить("ТОПроцентОбъектовВПорции", ТОПроцентОбъектовВПорции); - СтруктураНастроек.Вставить("ТОЧислоОбъектовВПорции", ТОЧислоОбъектовВПорции); - СтруктураНастроек.Вставить("ОбрабатыватьРекурсивно", ОбрабатыватьРекурсивно); - - ХранилищеОбщихНастроекСохранить("Обработка.ГрупповоеИзменениеОбъектов", ПолноеИмя, СтруктураНастроек); + СтруктураНастроек = СтруктураНастроек(); + СтруктураНастроек.ИзменятьВТранзакции = ИзменятьВТранзакции; + СтруктураНастроек.ПрерыватьПриОшибке = ПрерыватьПриОшибке; + СтруктураНастроек.ТОНастройкаПорции = ТОНастройкаПорции; + СтруктураНастроек.ТОПроцентОбъектовВПорции = ТОПроцентОбъектовВПорции; + СтруктураНастроек.ТОЧислоОбъектовВПорции = ТОЧислоОбъектовВПорции; + СтруктураНастроек.ОбрабатыватьРекурсивно = ОбрабатыватьРекурсивно; + ХранилищеОбщихНастроекСохранить("Обработка.ГрупповоеИзменениеОбъектов", "", СтруктураНастроек); КонецПроцедуры +&НаСервереБезКонтекста +Процедура СохранитьВидыИзменяемыхОбъектов(ВидыИзменяемыхОбъектов) + + Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда + Возврат; + КонецЕсли; + ХранилищеОбщихНастроекСохранить("ГрупповоеИзменениеОбъектов", "ВидыИзменяемыхОбъектов", ВидыИзменяемыхОбъектов); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СтруктураНастроек() + + СтруктураНастроек = Новый Структура; + СтруктураНастроек.Вставить("ИзменятьВТранзакции", Истина); + СтруктураНастроек.Вставить("ПрерыватьПриОшибке", Истина); + СтруктураНастроек.Вставить("ТОНастройкаПорции", 1); + СтруктураНастроек.Вставить("ТОПроцентОбъектовВПорции", 100); + СтруктураНастроек.Вставить("ТОЧислоОбъектовВПорции", 1); + СтруктураНастроек.Вставить("ОбрабатыватьРекурсивно", Ложь); + Возврат СтруктураНастроек; + +КонецФункции + &НаСервере Процедура ЗагрузитьНастройкиОбработки() - Объект.ИзменятьВТранзакции = Истина; - Объект.ПрерыватьПриОшибке = Истина; Объект.ТипОперации = "ВвестиЗначения"; - ТОНастройкаПорции = 1; - ТОПроцентОбъектовВПорции = 100; - ТОЧислоОбъектовВПорции = 1; - ОбрабатыватьРекурсивно = Ложь; - Объект.ПоказыватьСлужебныеРеквизиты = Ложь; Объект.ВариантЗаписиОбъекта = "Записывать"; - СтруктураНастроек = ХранилищеОбщихНастроекЗагрузить( - "Обработка.ГрупповоеИзменениеОбъектов", - ВидыИзменяемыхОбъектов); - - Если СтруктураНастроек <> Неопределено Тогда - Объект.ИзменятьВТранзакции = СтруктураНастроек.ИзменятьВТранзакции; - Объект.ПрерыватьПриОшибке = СтруктураНастроек.ПрерыватьПриОшибке; - ОбрабатыватьРекурсивно = СтруктураНастроек.ОбрабатыватьРекурсивно; - Если ПравоДоступа("АдминистрированиеДанных", Метаданные) И СтруктураНастроек.Свойство("ПоказыватьСлужебныеРеквизиты") Тогда - Объект.ПоказыватьСлужебныеРеквизиты = СтруктураНастроек.ПоказыватьСлужебныеРеквизиты; - Иначе - Объект.ПоказыватьСлужебныеРеквизиты = Ложь; + Если Не КонтекстныйВызов Тогда + ВидыИзменяемыхОбъектов = ХранилищеОбщихНастроекЗагрузить("ГрупповоеИзменениеОбъектов", "ВидыИзменяемыхОбъектов", ""); + Если Не ПустаяСтрока(ВидыИзменяемыхОбъектов) Тогда + ПредставлениеИзменяемыхОбъектов = ПредставлениеИзменяемыхОбъектов(); + ВыбранныеОбъектыВКонтексте.Очистить(); + ПерестроитьИнтерфейсФормыДляВыбранногоВидаОбъектов(); + Алгоритм = ПредставлениеИзменяемыхОбъектов; КонецЕсли; КонецЕсли; + СтруктураНастроек = ХранилищеОбщихНастроекЗагрузить("Обработка.ГрупповоеИзменениеОбъектов", ВидыИзменяемыхОбъектов, СтруктураНастроек()); + Объект.ИзменятьВТранзакции = СтруктураНастроек.ИзменятьВТранзакции; + Объект.ПрерыватьПриОшибке = СтруктураНастроек.ПрерыватьПриОшибке; + ОбрабатыватьРекурсивно = СтруктураНастроек.ОбрабатыватьРекурсивно; + ТОНастройкаПорции = СтруктураНастроек.ТОНастройкаПорции; + ТОПроцентОбъектовВПорции = СтруктураНастроек.ТОПроцентОбъектовВПорции; + ТОЧислоОбъектовВПорции = СтруктураНастроек.ТОЧислоОбъектовВПорции; + Если ПравоДоступа("АдминистрированиеДанных", Метаданные) И СтруктураНастроек.Свойство("ПоказыватьСлужебныеРеквизиты") Тогда + Объект.ПоказыватьСлужебныеРеквизиты = СтруктураНастроек.ПоказыватьСлужебныеРеквизиты; + Иначе + Объект.ПоказыватьСлужебныеРеквизиты = Ложь; + КонецЕсли; + ДоступноВыполнениеКода = ДоступноВыполнениеКода(); Элементы.ПроизвольныйАлгоритм.Видимость = ДоступноВыполнениеКода; Элементы.ТипОперации.Видимость = ДоступноВыполнениеКода; @@ -913,15 +948,12 @@ КонецЦикла; Если ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда - ЗапретРедактированияРеквизитовОбъектовКлиентМодуль = ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовКлиент"); - Если ЗапретРедактированияРеквизитовОбъектовКлиентМодуль <> Неопределено Тогда - ЗапретРедактированияРеквизитовОбъектовКлиентМодуль.ПроверитьСсылкиНаОбъект( - Новый ОписаниеОповещения( - "РазрешитьРедактированиеРеквизитовЗавершение", - ЭтотОбъект, + МодульЗапретРедактированияРеквизитовОбъектовКлиентМодуль = ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовКлиент"); + Если МодульЗапретРедактированияРеквизитовОбъектовКлиентМодуль <> Неопределено Тогда + МодульЗапретРедактированияРеквизитовОбъектовКлиентМодуль.ПроверитьСсылкиНаОбъект( + Новый ОписаниеОповещения("РазрешитьРедактированиеРеквизитовЗавершение", ЭтотОбъект, ЗаблокированныеРеквизитыСтроки), - МассивСсылок, - СинонимыРеквизитов); + МассивСсылок, СинонимыРеквизитов); КонецЕсли; КонецЕсли; КонецЕсли; @@ -1530,6 +1562,18 @@ Возврат Результат; КонецФункции +// Параметры: +// НастройкиОтбора - Неопределено +// - Структура: +// * ОграничитьВыборку - Булево +// * ВключитьТабличныеЧастиВВыборку - Булево +// * ОбновитьСписок - Булево +// ТекстСообщенияОбОшибке - Строка +// +// Возвращаемое значение: +// ДеревоЗначений: +// * Ссылка - ЛюбаяСсылка +// &НаСервере Функция ВыбранныеОбъекты(НастройкиОтбора = Неопределено, ТекстСообщенияОбОшибке = "") @@ -1668,6 +1712,9 @@ ВыбранныеОбъектыВКонтексте.Очистить(); ПерестроитьИнтерфейсФормыДляВыбранногоВидаОбъектов(); Элементы.РеквизитыОбъектаАлгоритм.ОтборСтрок = Новый ФиксированнаяСтруктура(Новый Структура("ВидОперации", "1")); + Если Не КонтекстныйВызов Тогда + СохранитьВидыИзменяемыхОбъектов(ВидыИзменяемыхОбъектов); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -1703,6 +1750,10 @@ &НаСервере Процедура ИнициализироватьКомпоновщикНастроек() + Если ПустаяСтрока(ВидыИзменяемыхОбъектов) Тогда + Возврат; + КонецЕсли; + ОбъектОбработка = РеквизитФормыВЗначение("Объект"); ТекстЗапроса = ОбъектОбработка.ТекстЗапроса(ВидыИзменяемыхОбъектов); СхемаКомпоновкиДанных = СхемаКомпоновкиДанных(ТекстЗапроса); @@ -1946,11 +1997,13 @@ КонецЕсли; ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); - Для Каждого ОписаниеРеквизита Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + ОписаниеСтандартныхРеквизитов = ОбъектМетаданных.СтандартныеРеквизиты;// массив из ОписаниеСтандартногоРеквизита + Для Каждого ОписаниеРеквизита Из ОписаниеСтандартныхРеквизитов Цикл НеРедактируемые.Добавить(ОписаниеРеквизита.Имя); КонецЦикла; - Для Каждого ОписаниеРеквизита Из ОбъектМетаданных.Реквизиты Цикл + ОписаниеРеквизитов = ОбъектМетаданных.Реквизиты;// массив из ОбъектМетаданныхРеквизит + Для Каждого ОписаниеРеквизита Из ОписаниеРеквизитов Цикл НеРедактируемые.Добавить(ОписаниеРеквизита.Имя); КонецЦикла; @@ -1958,7 +2011,8 @@ Если Редактируемые.Найти(ТабличнаяЧасть.Имя + ".*") <> Неопределено Тогда Прервать; КонецЕсли; - Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл + ОписаниеРеквизитовТабличнойЧасти = ТабличнаяЧасть.Реквизиты;// массив из ОбъектМетаданныхРеквизит + Для Каждого Реквизит Из ОписаниеРеквизитовТабличнойЧасти Цикл НеРедактируемые.Добавить(ТабличнаяЧасть.Имя + "." + Реквизит.Имя); КонецЦикла; КонецЦикла; @@ -2007,14 +2061,16 @@ Продолжить; КонецЕсли; - Для Каждого РеквизитОМ Из ОбъектМетаданных.Реквизиты Цикл + ОписаниеРеквизитов = ОбъектМетаданных.Реквизиты;// массив из ОбъектМетаданныхРеквизит + Для Каждого РеквизитОМ Из ОписаниеРеквизитов Цикл Если ОписаниеФО.Состав.Содержит(РеквизитОМ) Тогда НоваяСтрока = ЗакрытыеФункциональнымиОпциями.Добавить(); НоваяСтрока.ИмяРеквизита = РеквизитОМ.Имя; КонецЕсли; КонецЦикла; - Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл + ОписаниеТабличныхЧастей = ОбъектМетаданных.ТабличныеЧасти;// массив из ОбъектМетаданныхТабличнаяЧасть + Для Каждого ТабличнаяЧасть Из ОписаниеТабличныхЧастей Цикл Если ОписаниеФО.Состав.Содержит(ТабличнаяЧасть) Тогда НоваяСтрока = ЗакрытыеФункциональнымиОпциями.Добавить(); НоваяСтрока.ИмяРеквизита = ТабличнаяЧасть.Имя + ".*"; @@ -2134,10 +2190,11 @@ КонецЦикла; ДоступныеДляИзмененияРеквизиты = ДоступныеДляИзмененияРеквизиты(ОписаниеТабличнойЧасти, НередактируемыеРеквизиты, - ФильтруемыеРеквизиты, ДоступныеТабличныеЧасти[ОписаниеТабличнойЧасти.Имя]); + ФильтруемыеРеквизиты, ДоступныеТабличныеЧасти[ОписаниеТабличнойЧасти.Имя]); Для Каждого ОписаниеРеквизита Из ДоступныеДляИзмененияРеквизиты Цикл - Реквизит = ЭтотОбъект[ТаблицаОбъекта.Ключ].Добавить(); + ДанныеФормыТаблица = ЭтотОбъект[ТаблицаОбъекта.Ключ];// см. ОписанияКолонокТаблицыРеквизитов + Реквизит = ДанныеФормыТаблица.Добавить(); Реквизит.Имя = ОписаниеРеквизита.Имя; Реквизит.Представление = ?(ПустаяСтрока(ОписаниеРеквизита.Представление()), ОписаниеРеквизита.Имя, ОписаниеРеквизита.Представление()); Реквизит.ДопустимыеТипы = ОписаниеРеквизита.Тип; @@ -2150,6 +2207,15 @@ КонецПроцедуры +// Параметры: +// ОписаниеТабличнойЧасти - Структура: +// * Реквизиты - Массив из ОбъектМетаданныхРеквизит +// НередактируемыеРеквизиты - Массив из Строка +// ФильтруемыеРеквизиты - Массив +// ДоступныеРеквизиты - Массив +// Возвращаемое значение: +// Массив из ОбъектМетаданныхРеквизит +// &НаСервере Функция ДоступныеДляИзмененияРеквизиты(ОписаниеТабличнойЧасти, НередактируемыеРеквизиты, ФильтруемыеРеквизиты, ДоступныеРеквизиты) @@ -2178,6 +2244,19 @@ КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Имя - Строка +// * Тип - Строка +// * Представление - Строка +// * ВидПоля - Строка +// * Действия - Структура: +// ** ПриИзменении - Булево +// ** Подключаемый_ПриИзмененииФлажка - Булево +// * ТолькоПросмотр - Булево +// * Картинка - Картинка +// &НаСервере Функция ОписанияКолонокТаблицыРеквизитов() @@ -2358,7 +2437,7 @@ КонецЕсли; КонецЦикла; - Страница = ТаблицаФормы.Родитель; + Страница = ТаблицаФормы.Родитель;// СтраницаПанели Страница.Заголовок = ТаблицаФормы.Заголовок + ?(КоличествоИзменяемых = 0, "", " (" + КоличествоИзменяемых+ ")"); КонецЦикла; @@ -2387,19 +2466,21 @@ &НаСервере Процедура ЗаполнитьРеквизитыОбъекта(БлокируемыеРеквизиты, НеРедактируемые, ФильтруемыеРеквизиты, ДоступныеРеквизиты) + РеквизитыОбъекта.Очистить(); + + СписокВидовИзменяемыхОбъектов = СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь); + Если СписокВидовИзменяемыхОбъектов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + НаборыРеквизитов = Новый Структура; НаборыРеквизитов.Вставить("НеРедактируемые", НеРедактируемые); НаборыРеквизитов.Вставить("Фильтруемые", ФильтруемыеРеквизиты); НаборыРеквизитов.Вставить("Блокируемые", БлокируемыеРеквизиты); НаборыРеквизитов.Вставить("Доступные", ДоступныеРеквизиты); - - СписокВидовИзменяемыхОбъектов = СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь); ИмяОбъекта = СписокВидовИзменяемыхОбъектов[0]; - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъекта); - РеквизитыОбъекта.Очистить(); - НаборыРеквизитов.Вставить("ОписанияРеквизитов", ОбъектМетаданных.СтандартныеРеквизиты); ДобавитьРеквизитыВНабор(НаборыРеквизитов, ОбъектМетаданных); @@ -2440,7 +2521,8 @@ Если КонтекстныйВызов Тогда НастройкиОтбора = НастройкиОтбора(); НастройкиОтбора.ОбновитьСписок = Истина; - Для Каждого ДанныеОбъекта Из ВыбранныеОбъекты(НастройкиОтбора).Строки Цикл + ВыбранныеОбъекты = ВыбранныеОбъекты(НастройкиОтбора).Строки; + Для Каждого ДанныеОбъекта Из ВыбранныеОбъекты Цикл ОбъектДляИзменения = ДанныеОбъекта.Ссылка; ВидОбъектаПоСсылке = ВидОбъектаПоСсылке(ОбъектДляИзменения); @@ -2606,6 +2688,11 @@ // Получает массив реквизитов, редактирование которых не предусмотрено // на уровне конфигурации. // +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных +// Возвращаемое значение: +// Массив +// &НаСервере Функция ПолучитьФильтрРедактированияПоТипу(ОбъектМетаданных) @@ -2633,7 +2720,8 @@ КонецЦикла; ПрефиксУдаляемыхРеквизитов = "Удалить"; - Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + ОписаниеРеквизитов = ОбъектМетаданных.Реквизиты;// Массив из ОбъектМетаданныхРеквизит + Для Каждого Реквизит Из ОписаниеРеквизитов Цикл Если НРег(Лев(Реквизит.Имя, СтрДлина(ПрефиксУдаляемыхРеквизитов))) = НРег(ПрефиксУдаляемыхРеквизитов) Тогда ФильтруемыеРеквизиты.Добавить(Реквизит.Имя); КонецЕсли; @@ -2642,7 +2730,8 @@ Если НРег(Лев(ТабличнаяЧасть.Имя, СтрДлина(ПрефиксУдаляемыхРеквизитов))) = НРег(ПрефиксУдаляемыхРеквизитов) Тогда ФильтруемыеРеквизиты.Добавить(ТабличнаяЧасть.Имя + ".*"); Иначе - Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл + ОписаниеРеквизитовТабличнойЧасти = ТабличнаяЧасть.Реквизиты;// Массив из ОбъектМетаданныхРеквизит + Для Каждого Реквизит Из ОписаниеРеквизитовТабличнойЧасти Цикл Если НРег(Лев(Реквизит.Имя, СтрДлина(ПрефиксУдаляемыхРеквизитов))) = НРег(ПрефиксУдаляемыхРеквизитов) Тогда ФильтруемыеРеквизиты.Добавить(ТабличнаяЧасть.Имя + "." + Реквизит.Имя); КонецЕсли; @@ -3020,7 +3109,8 @@ Если ВладелецРеквизитов <> Неопределено Тогда Реквизит = ВладелецРеквизитов.Реквизиты.Найти(ИмяРеквизита); Если Реквизит = Неопределено Тогда - Для Каждого СтандартныйРеквизит Из ВладелецРеквизитов.СтандартныеРеквизиты Цикл + ОписаниеСтандартныхРеквизитов = ВладелецРеквизитов.СтандартныеРеквизиты;// ОписанияСтандартныхРеквизитов + Для Каждого СтандартныйРеквизит Из ОписаниеСтандартныхРеквизитов Цикл Если СтандартныйРеквизит.Имя = ИмяРеквизита Тогда Реквизит = СтандартныйРеквизит; Прервать; @@ -3070,7 +3160,7 @@ Если Не ПустаяСтрока(ВидыИзменяемыхОбъектов) Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбранныхОбъектов", ЭтотОбъект); ОткрытьФорму(ПолноеИмяФормы("ВыбранныеЭлементы"), - Новый Структура("ВыбранныеТипы, Настройки", ВидыИзменяемыхОбъектов, КомпоновщикНастроек.Настройки), , , , , ОписаниеОповещения); + Новый Структура("ВыбранныеТипы, Настройки", ВидыИзменяемыхОбъектов, КомпоновщикНастроек.Настройки), , , , , ОписаниеОповещения); КонецЕсли; КонецПроцедуры @@ -3149,18 +3239,6 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура СохранитьНастройки() - СохранитьНастройкиОбработки( - "", - Объект.ИзменятьВТранзакции, - Объект.ПрерыватьПриОшибке, - ТОНастройкаПорции, - ТОПроцентОбъектовВПорции, - ТОЧислоОбъектовВПорции, - ОбрабатыватьРекурсивно); -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции из базовой функциональности для обеспечения автономности. @@ -3265,7 +3343,7 @@ // Не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// ПолноеИмя - Строка, полное имя объекта метаданных, +// ПолноеИмя - Строка - полное имя объекта метаданных, // например, "Справочник.Организации". // // Возвращаемое значение: @@ -3394,7 +3472,7 @@ // Не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// Тип - Тип прикладного объекта, определенный в конфигурации. +// Тип - тип прикладного объекта, определенный в конфигурации. // // Возвращаемое значение: // Строка - имя вида объектов метаданных, например, "Справочник", "Документ" ... @@ -3439,10 +3517,10 @@ // Проверяет является ли объект группой элементов. // // Параметры: -// Объект - Объект, Ссылка, ДанныеФормыСтруктура по типу Объект. +// Объект - объект, Ссылка, ДанныеФормыСтруктура по типу Объект. // // Возвращаемое значение: -// Булево - +// Булево // &НаСервереБезКонтекста Функция ОбъектЯвляетсяГруппой(Объект) @@ -3485,7 +3563,7 @@ // ОбъектМетаданных - объект метаданных, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - +// Булево // &НаСервереБезКонтекста Функция ЭтоСправочник(ОбъектМетаданных) @@ -3578,7 +3656,7 @@ // ОбъектМетаданных - объект метаданных, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - +// Булево // &НаСервереБезКонтекста Функция ЭтоПланВидовХарактеристик(ОбъектМетаданных) @@ -3660,7 +3738,7 @@ // Возвращает значение для идентификации общего типа "Регистры сведений". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаРегистрыСведений() @@ -3672,7 +3750,7 @@ // Возвращает значение для идентификации общего типа "Регистры накопления". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаРегистрыНакопления() @@ -3684,7 +3762,7 @@ // Возвращает значение для идентификации общего типа "Регистры бухгалтерии". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаРегистрыБухгалтерии() @@ -3696,7 +3774,7 @@ // Возвращает значение для идентификации общего типа "Регистры расчета". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаРегистрыРасчета() @@ -3708,7 +3786,7 @@ // Возвращает значение для идентификации общего типа "Документы". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаДокументы() @@ -3720,7 +3798,7 @@ // Возвращает значение для идентификации общего типа "Справочники". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаСправочники() @@ -3732,7 +3810,7 @@ // Возвращает значение для идентификации общего типа "Перечисления". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаПеречисления() @@ -3744,7 +3822,7 @@ // Возвращает значение для идентификации общего типа "ПланыОбмена". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаПланыОбмена() @@ -3756,7 +3834,7 @@ // Возвращает значение для идентификации общего типа "Планы видов характеристик". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаПланыВидовХарактеристик() @@ -3768,7 +3846,7 @@ // Возвращает значение для идентификации общего типа "Бизнес-процессы". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаБизнесПроцессы() @@ -3780,7 +3858,7 @@ // Возвращает значение для идентификации общего типа "Задачи". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаЗадачи() @@ -3792,7 +3870,7 @@ // Возвращает значение для идентификации общего типа "Планы счетов". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаПланыСчетов() @@ -3804,7 +3882,7 @@ // Возвращает значение для идентификации общего типа "Планы видов расчета". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаПланыВидовРасчета() @@ -3816,7 +3894,7 @@ // Возвращает значение для идентификации общего типа "Константы". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаКонстанты() @@ -3828,7 +3906,7 @@ // Возвращает значение для идентификации общего типа "Журналы документов". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаЖурналыДокументов() @@ -3840,7 +3918,7 @@ // Возвращает значение для идентификации общего типа "Последовательности". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаПоследовательности() @@ -3852,7 +3930,7 @@ // Возвращает значение для идентификации общего типа "РегламентныеЗадания". // // Возвращаемое значение: -// Строка - . +// Строка // &НаСервереБезКонтекста Функция ИмяТипаРегламентныеЗадания() @@ -3869,16 +3947,18 @@ // то следует использовать предварительный переход в привилегированный режим. // // Параметры: -// Ссылка - Ссылка на объект - элемент справочника, документ, ... +// Ссылка - ссылка на объект - элемент справочника, документ, ... // // Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате // требований к свойствам структуры. // Например, "Код, Наименование, Родитель". -// - Структура, ФиксированнаяСтруктура - в качестве ключа передается +// - Структура +// - ФиксированнаяСтруктура - в качестве ключа передается // псевдоним поля для возвращаемой структуры с результатом, а в качестве // значения (опционально) фактическое имя поля в таблице. // Если значение не определено, то имя поля берется из ключа. -// - Массив, ФиксированныйМассив - имена реквизитов в формате требований +// - Массив +// - ФиксированныйМассив - имена реквизитов в формате требований // к свойствам структуры. // // Возвращаемое значение: @@ -3949,7 +4029,7 @@ // // Параметры: // Ссылка - ссылка на объект - элемент справочника, документ, ... -// ИмяРеквизита - Строка, например, "Код". +// ИмяРеквизита - Строка - например, "Код". // // Возвращаемое значение: // Произвольный - зависит от типа значения прочитанного реквизита. @@ -3970,7 +4050,7 @@ // "ОбщегоНазначенияКлиент". // // Возвращаемое значение: -// ОбщийМодуль - . +// ОбщийМодуль // &НаКлиентеНаСервереБезКонтекста Функция ОбщийМодуль(Имя) @@ -3983,12 +4063,12 @@ КонецЕсли; Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя); КонецЕсли; #Иначе Модуль = Вычислить(Имя); Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя); КонецЕсли; #КонецЕсли @@ -3999,7 +4079,7 @@ // Возвращает Истина, если подсистема существует. // // Параметры: -// ПолноеИмяПодсистемы - Строка. Полное имя объекта метаданных подсистема без слов "Подсистема.". +// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема без слов "Подсистема.". // Например: "СтандартныеПодсистемы.БазоваяФункциональность". // // Пример вызова необязательной подсистемы: @@ -4010,7 +4090,7 @@ // КонецЕсли; // // Возвращаемое значение: -// Булево - +// Булево // &НаСервере Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) @@ -4144,7 +4224,7 @@ // ПолучитьМакет("КлассификаторАдресныхОбъектовРоссии").ПолучитьТекст()); // // Возвращаемое значение: -// Структура с полями +// Структура: // ИмяТаблицы - Строка // Данные - ТаблицаЗначений. // @@ -4218,7 +4298,7 @@ // Параметры: // ТаблицаЗначений // Возвращаемое значение: -// Массив - . +// Массив // &НаСервереБезКонтекста Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) @@ -4251,7 +4331,8 @@ // Минимальная версия программы 1.1. Обновите программу. // // Возвращаемое значение: -// ФорматированнаяСтрока - +// ФорматированнаяСтрока +// &НаСервереБезКонтекста Функция ФорматированнаяСтрока(Знач Строка) @@ -4313,7 +4394,7 @@ Для Каждого ЧастьСтроки Из СтрокиСоСсылками Цикл Если ЧастьСтроки.Пометка Тогда - МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ЧастьСтроки.Значение, Новый Шрифт(,,Истина))); + МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ЧастьСтроки.Значение, Новый Шрифт(,,Истина))); // АПК:1345 - автономная обработка не может использовать стили ИначеЕсли Не ПустаяСтрока(ЧастьСтроки.Представление) Тогда МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ЧастьСтроки.Значение,,,, ЧастьСтроки.Представление)); Иначе @@ -4322,23 +4403,23 @@ КонецЦикла; - Возврат Новый ФорматированнаяСтрока(МассивСтроки); + Возврат Новый ФорматированнаяСтрока(МассивСтроки); // АПК:1356 - можно использовать составную форматированную строку, так как массив строк формируется из переданного в функцию текста. КонецФункции // Формирует представление числа для определенного языка и параметров числа. // // Параметры: -// Шаблон - Строка - Строка, содержит перечисленные через точку с запятой 6 форм строки +// Шаблон - Строка - строка, содержит перечисленные через точку с запятой 6 форм строки // для каждой категории числительного: // - %1 обозначает позицию числа; -// Число - Число - Число, которое будет подставлено в строку вместо параметра "%1". -// Вид - ВидЧисловогоЗначения - Определяет вид числового значения, для которого формируется представление. -// - Количественное (по умолчанию) или Порядковое. -// ФорматнаяСтрока - Строка - Строка параметров форматирования. См. аналогичный параметр в СтрокаСЧислом. +// Число - Число - число, которое будет подставлено в строку вместо параметра "%1". +// Вид - ВидЧисловогоЗначения - определяет вид числового значения, для которого формируется представление. +// - количественное (по умолчанию) или Порядковое. +// ФорматнаяСтрока - Строка - строка параметров форматирования. См. аналогичный параметр в СтрокаСЧислом. // // Возвращаемое значение: -// Строка - Представление строки числа в требуемой форме. +// Строка - представление строки числа в требуемой форме. // // Пример: // @@ -4393,7 +4474,7 @@ // Возвращает признак наличия в конфигурации общих реквизитов-разделителей. // // Возвращаемое значение: -// Булево - +// Булево // &НаСервереБезКонтекста Функция ЭтоРазделеннаяКонфигурация() @@ -4488,7 +4569,8 @@ СтрокаПоиска = Сред(СтрокаПоиска, Позиция + СтрДлина(Подстрока)); ФорматированныеСтроки.Добавить(ПодстрокаДоВхождения); - ФорматированныеСтроки.Добавить(Новый ФорматированнаяСтрока(ПодстрокаВхождения, Новый Шрифт( , , Истина), Новый Цвет(0,128,0))); + ФорматированныеСтроки.Добавить(Новый ФорматированнаяСтрока(ПодстрокаВхождения, + Новый Шрифт( , , Истина), Новый Цвет(0,128,0))); // АПК:1345 АПК:1346 - автономная обработка не может использовать стили КонецЦикла; Если Не ЗначениеЗаполнено(ФорматированныеСтроки) Тогда @@ -4496,7 +4578,7 @@ КонецЕсли; ФорматированныеСтроки.Добавить(СтрокаПоиска); - СтрокаСПодсветкой = Новый ФорматированнаяСтрока(ФорматированныеСтроки); + СтрокаСПодсветкой = Новый ФорматированнаяСтрока(ФорматированныеСтроки); // АПК:1356 - можно использовать составную форматированную строку, так как массив строк формируется из переданного в функцию текста. Результат.Добавить(Элемент.Значение, СтрокаСПодсветкой); КонецЦикла; diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl index ae980c738..92d111436 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl @@ -17,7 +17,7 @@ // Возвращает сведения о внешней обработке. // // Возвращаемое значение: -// Структура - Подробнее см. ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(). +// см. ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке // Функция СведенияОВнешнейОбработке() Экспорт Перем ПараметрыРегистрации; @@ -26,7 +26,7 @@ МодульДополнительныеОтчетыИОбработки = ОбщийМодуль("ДополнительныеОтчетыИОбработки"); МодульДополнительныеОтчетыИОбработкиКлиентСервер = ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиентСервер"); - ПараметрыРегистрации = МодульДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.1.3.1"); + ПараметрыРегистрации = МодульДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.1.3.1");// см. ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке ПараметрыРегистрации.Вид = МодульДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка(); ПараметрыРегистрации.Версия = "2.2.1"; @@ -117,6 +117,10 @@ Результат.Вставить("Реквизиты", Новый Массив); Результат.Вставить("ТабличныеЧасти", Новый Структура); + Если ОбъектыМетаданных.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + ОбщийСписокРеквизитов = СписокЭлементов(ОбъектыМетаданных[0].Реквизиты, Ложь); Для Индекс = 1 По ОбъектыМетаданных.Количество() - 1 Цикл ОбщийСписокРеквизитов = ПересечениеРеквизитов(ОбщийСписокРеквизитов, ОбъектыМетаданных[Индекс].Реквизиты); @@ -151,6 +155,14 @@ КонецФункции + +// Параметры: +// Коллекция - Массив из ОбъектМетаданныхРеквизит +// - Массив из ОбъектМетаданныхТабличнаяЧасть +// ТолькоИмена - Булево +// Возвращаемое значение: +// Массив +// Функция СписокЭлементов(Коллекция, ТолькоИмена = Истина) Результат = Новый Массив; Для Каждого Элемент Из Коллекция Цикл @@ -224,7 +236,7 @@ РезультатИзменения.СостояниеОбработки = Новый Соответствие; Если ОбрабатываемыеОбъекты = Неопределено Тогда - ОбрабатываемыеОбъекты = Новый Массив; + ОбрабатываемыеОбъекты = Новый Массив;// Массив из ЛюбаяСсылка Для Каждого ИзменяемыйОбъект Из ОбъектыДляИзменения Цикл ОбрабатываемыеОбъекты.Добавить(ИзменяемыйОбъект); КонецЦикла; @@ -371,6 +383,10 @@ КонецПроцедуры +// Параметры: +// Блокировка - БлокировкаДанных +// Ссылка - ЛюбаяСсылка +// Процедура ЗаблокироватьСсылку(Знач Блокировка, Знач Ссылка) ЗаблокироватьДанныеДляРедактирования(Ссылка); @@ -379,6 +395,13 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * ИзменяемыеРеквизитыОбъекта - Массив из Строка +// * ИзменяемыеДопРеквизитыОбъекта - Соответствие +// * ИзменяемыеДопСведенияОбъекта - Соответствие +// * МассивЗаписейДопСведений - Массив из РегистрСведенийМенеджерЗаписи.ДополнительныеСведения +// Функция ВнестиИзменения(Знач ДанныеОбъекта, Знач ИзменяемыйОбъект, Знач Параметры) Результат = Новый Структура; @@ -482,7 +505,7 @@ // Возвращает признак наличия в конфигурации общих реквизитов-разделителей. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоРазделеннаяКонфигурация() @@ -607,6 +630,12 @@ КонецПроцедуры +// Параметры: +// СтрокаТаблицы - СтрокаТаблицыЗначений: +// * НомерСтроки - Число +// ДанныеОбъекта - ЛюбаяСсылка +// ИмяТаблицы - Строка +// Функция СтрокаСоответствуетОтбору(СтрокаТаблицы, ДанныеОбъекта, ИмяТаблицы) Возврат ДанныеОбъекта.Строки.НайтиСтроки(Новый Структура(ИмяТаблицы + "НомерСтроки", СтрокаТаблицы.НомерСтроки)).Количество() = 1; @@ -983,7 +1012,7 @@ // Не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// Тип - Тип прикладного объекта, определенный в конфигурации. +// Тип - тип прикладного объекта, определенный в конфигурации. // // Возвращаемое значение: // Строка - имя вида объектов метаданных, например, "Справочник", "Документ" ... @@ -1027,10 +1056,10 @@ // Проверяет является ли объект группой элементов. // // Параметры: -// Объект - Объект, Ссылка, ДанныеФормыСтруктура по типу Объект. +// Объект - объект, Ссылка, ДанныеФормыСтруктура по типу Объект. // // Возвращаемое значение: -// Булево - +// Булево // Функция ОбъектЯвляетсяГруппой(Объект) Экспорт @@ -1132,16 +1161,18 @@ // то следует использовать предварительный переход в привилегированный режим. // // Параметры: -// Ссылка - Ссылка на объект - элемент справочника, документ, ... +// Ссылка - ссылка на объект - элемент справочника, документ, ... // // Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате // требований к свойствам структуры. // Например, "Код, Наименование, Родитель". -// - Структура, ФиксированнаяСтруктура - в качестве ключа передается +// - Структура +// - ФиксированнаяСтруктура - в качестве ключа передается // псевдоним поля для возвращаемой структуры с результатом, а в качестве // значения (опционально) фактическое имя поля в таблице. // Если значение не определено, то имя поля берется из ключа. -// - Массив, ФиксированныйМассив - имена реквизитов в формате требований +// - Массив +// - ФиксированныйМассив - имена реквизитов в формате требований // к свойствам структуры. // // Возвращаемое значение: @@ -1211,7 +1242,7 @@ // // Параметры: // Ссылка - ссылка на объект - элемент справочника, документ, ... -// ИмяРеквизита - Строка, например, "Код". +// ИмяРеквизита - Строка - например, "Код". // // Возвращаемое значение: // Произвольный - зависит от типа значения прочитанного реквизита. @@ -1226,7 +1257,7 @@ // Возвращает Истина, если подсистема существует. // // Параметры: -// ПолноеИмяПодсистемы - Строка. Полное имя объекта метаданных подсистема без слов "Подсистема.". +// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема без слов "Подсистема.". // Например: "СтандартныеПодсистемы.БазоваяФункциональность". // // Пример вызова необязательной подсистемы: @@ -1237,7 +1268,7 @@ // КонецЕсли; // // Возвращаемое значение: -// Булево - +// Булево // Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт @@ -1279,7 +1310,7 @@ // "ОбщегоНазначенияКлиент". // // Возвращаемое значение: -// ОбщийМодуль - . +// ОбщийМодуль // Функция ОбщийМодуль(Имя) Экспорт @@ -1290,7 +1321,7 @@ КонецЕсли; Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя); КонецЕсли; Возврат Модуль; diff --git a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl index 2102d0914..afc54e944 100644 --- a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl @@ -130,6 +130,7 @@ // Параметры: // СтрокаДерева - СтрокаДереваЗначений - на основании ее формируется представление // анкет и опросов в дереве. +// &НаСервере Функция ПолучитьПредставлениеСтрокиДереваАнкеты(СтрокаДерева) diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index b9858a113..81f7de7ce 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -2764,6 +2764,17 @@ true + + ХранилищеДанных + 10 + + + true + + + true + + ПросмотрТекущегоСобытияВОтдельномОкне diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index 4d6cffc22..74f99f24c 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -196,13 +196,14 @@ &НаКлиенте Процедура ЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ПараметрыВыбора = Новый Структура; + ПараметрыВыбора.Вставить("ТекущиеДанные", Элементы.Журнал.ТекущиеДанные); + ПараметрыВыбора.Вставить("Поле", Поле); + ПараметрыВыбора.Вставить("ИнтервалДат", ИнтервалДат); + ПараметрыВыбора.Вставить("ОтборЖурналаРегистрации", ОтборЖурналаРегистрации); + ПараметрыВыбора.Вставить("ХранилищеДанных", ХранилищеДанных); - ЖурналРегистрацииКлиент.СобытияВыбор( - Элементы.Журнал.ТекущиеДанные, - Поле, - ИнтервалДат, - ОтборЖурналаРегистрации); - + ЖурналРегистрацииКлиент.СобытияВыбор(ПараметрыВыбора); КонецПроцедуры &НаКлиенте @@ -293,7 +294,7 @@ &НаКлиенте Процедура ПросмотрТекущегоСобытияВОтдельномОкне() - ЖурналРегистрацииКлиент.ПросмотрТекущегоСобытияВОтдельномОкне(Элементы.Журнал.ТекущиеДанные); + ЖурналРегистрацииКлиент.ПросмотрТекущегоСобытияВОтдельномОкне(Элементы.Журнал.ТекущиеДанные, ХранилищеДанных); КонецПроцедуры @@ -427,7 +428,13 @@ Результат = ПолучитьИзВременногоХранилища(АдресРезультата); СобытияЖурнала = Результат.СобытияЖурнала; - ЖурналРегистрации.ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, УникальныйИдентификатор); + Если ХранилищеДанных = Неопределено Тогда + Адрес = УникальныйИдентификатор; + Иначе + Адрес = ХранилищеДанных; + КонецЕсли; + ХранилищеДанных = ПоместитьВоВременноеХранилище(Новый Соответствие, Адрес); + ЖурналРегистрации.ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, ХранилищеДанных); ЗначениеВДанныеФормы(СобытияЖурнала, Журнал); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form index 1b1a79764..f54e202e9 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form @@ -2996,6 +2996,20 @@ <stringQualifiers/> </valueType> </parameters> + <parameters> + <name>Уровень</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </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 ec3c3c946..6dc583455 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl @@ -32,6 +32,9 @@ РазделениеДанныхСеанса = Параметры.РазделениеДанныхСеанса; КонецЕсли; + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 от %2'"), + Параметры.Уровень, Дата); + // Для списка метаданных включается кнопка открытия. Если ТипЗнч(ПредставлениеМетаданных) = Тип("СписокЗначений") Тогда Элементы.ПредставлениеМетаданных.КнопкаОткрытия = Истина; @@ -49,10 +52,16 @@ Элементы.ПростыеДанные.Видимость = Ложь; Элементы.ПредставленияДанных.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + Если Не ЗначениеЗаполнено(Параметры.ХранилищеДанных) Тогда + ДанныеСобытий = Новый Соответствие; + Иначе + ДанныеСобытий = ПолучитьИзВременногоХранилища(Параметры.ХранилищеДанных); + КонецЕсли; + Если Событие = "_$Access$_.Access" Тогда Элементы.ПредставленияДанных.ТекущаяСтраница = Элементы.ДанныеДоступа; Элементы.ДанныеДоступа.Видимость = Истина; - ДанныеСобытия = ПолучитьИзВременногоХранилища(Параметры.АдресДанных); + ДанныеСобытия = ДанныеСобытий[Параметры.АдресДанных]; Если ДанныеСобытия <> Неопределено Тогда СоздатьТаблицуФормы("ТаблицаДанныхДоступа", "ТаблицаДанных", ДанныеСобытия.Данные); КонецЕсли; @@ -60,7 +69,7 @@ Элементы.Комментарий.Высота = 1; ИначеЕсли Событие = "_$Access$_.AccessDenied" Тогда - ДанныеСобытия = ПолучитьИзВременногоХранилища(Параметры.АдресДанных); + ДанныеСобытия = ДанныеСобытий[Параметры.АдресДанных]; Если ДанныеСобытия <> Неопределено Тогда Если ДанныеСобытия.Свойство("Право") Тогда @@ -79,7 +88,7 @@ ИначеЕсли Событие = "_$Session$_.Authentication" ИЛИ Событие = "_$Session$_.AuthenticationError" Тогда - ДанныеСобытия = ПолучитьИзВременногоХранилища(Параметры.АдресДанных); + ДанныеСобытия = ДанныеСобытий[Параметры.АдресДанных]; Элементы.ПредставленияДанных.ТекущаяСтраница = Элементы.ДанныеАутентификации; Элементы.ДанныеАутентификации.Видимость = Истина; Если ДанныеСобытия <> Неопределено Тогда @@ -91,7 +100,7 @@ ИначеЕсли Событие = "_$User$_.Delete" ИЛИ Событие = "_$User$_.New" ИЛИ Событие = "_$User$_.Update" Тогда - ДанныеСобытия = ПолучитьИзВременногоХранилища(Параметры.АдресДанных); + ДанныеСобытия = ДанныеСобытий[Параметры.АдресДанных]; Элементы.ПредставленияДанных.ТекущаяСтраница = Элементы.ДанныеПользователяИБ; Элементы.ДанныеПользователяИБ.Видимость = Истина; СвойстваПользователяИБ = Новый ТаблицаЗначений; diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl index 530be0de5..fbf1c2e1f 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl @@ -78,11 +78,11 @@ КонецПроцедуры // Возвращаемое значение: -// Структура - где: -// * ТипЗагрузки - Строка - -// * ПолноеИмяОбъекта - Строка - -// * Макет - Строка - -// * ДополнительныеПараметры - Структура - +// Структура: +// * ТипЗагрузки - Строка +// * ПолноеИмяОбъекта - Строка +// * Макет - Строка +// * ДополнительныеПараметры - Структура // &НаСервере Функция ПараметрыЗагрузки() @@ -518,7 +518,7 @@ КонецПроцедуры // Параметры: -// Результат - Произвольный - +// Результат - Произвольный // Параметр - см. ОписаниеПараметраСопоставленияНеоднозначностей // &НаКлиенте @@ -662,6 +662,11 @@ КонецПроцедуры +&НаКлиенте +Процедура ОповеститьФормыОбИзменении(МассивСсылок) + СтандартныеПодсистемыКлиент.ОповеститьФормыОбИзменении(МассивСсылок); +КонецПроцедуры + /////////////////////////////////////// СЕРВЕР /////////////////////////////////////////// &НаСервере @@ -717,8 +722,6 @@ КонецПроцедуры - - #Область ШагВыборВариантаЗагрузки &НаСервере @@ -741,18 +744,13 @@ &НаКлиенте Функция ТаблицаСДаннымиПустая() - Если ИнформацияПоКолонкам.Количество() = 1 И ШаблонСДанными.ВысотаТаблицы < 2 Тогда - Если НЕ ЗначениеЗаполнено(ШаблонСДаннымиОднаКолонка) Тогда - Возврат Истина; - КонецЕсли; - СкопироватьОднуКолонкуВШаблонСДанными(); - Иначе - Если ШаблонСДанными.ВысотаТаблицы < 2 Тогда - Возврат Истина; - КонецЕсли; + + Если ШаблонСДанными.ВысотаТаблицы < 2 Тогда + Возврат Истина; КонецЕсли; Возврат Ложь; + КонецФункции &НаКлиенте @@ -788,11 +786,14 @@ Возврат Неопределено; КонецФункции +// Параметры: +// ОписаниеСтрокиВыбора - СправочникСсылка +// &НаСервере Процедура ВыполнитьШагЗаполнениеТаблицыДаннымиНаСервере(ОписаниеСтрокиВыбора) Если СтрНайти(ОписаниеСтрокиВыбора.ПолноеИмяОбъектаМетаданных, ".") > 0 Тогда - ИмяОбъектаСопоставления = ОписаниеСтрокиВыбора.ПолноеИмяОбъектаМетаданных; + ИмяОбъектаСопоставления = ОписаниеСтрокиВыбора.ПолноеИмяОбъектаМетаданных; Иначе ИмяОбъектаСопоставления = ПолучитьПолноеИмяОбъектаМетаданных(ОписаниеСтрокиВыбора.ПолноеИмяОбъектаМетаданных); КонецЕсли; @@ -819,30 +820,30 @@ &НаСервере Процедура СформироватьМакетПоТипуЗагрузки() - ПараметрыЗагрузки = Новый Структура; + ПараметрыЗагрузкиПоУмолчанию = ЗагрузкаДанныхИзФайла.ПараметрыЗагрузкиИзФайла(ИмяОбъектаСопоставления); + ПараметрыЗагрузкиПоУмолчанию.ТипЗагрузки = ТипЗагрузки; + Если ТипЗагрузки = "УниверсальнаяЗагрузка" Тогда - ЭтотОбъект.АвтоЗаголовок = Ложь; + АвтоЗаголовок = Ложь; ИначеЕсли ТипЗагрузки = "ПрикладнаяЗагрузка" Тогда - ОпределитьПараметрыЗагрузки(ПараметрыЗагрузки); - ЭтотОбъект.АвтоЗаголовок = Ложь; - Если ПараметрыЗагрузки.Свойство("Заголовок") Тогда - ЭтотОбъект.Заголовок = ПараметрыЗагрузки.Заголовок; - КонецЕсли; + АвтоЗаголовок = Ложь; + МенеджерОбъекта(ИмяОбъектаСопоставления).ОпределитьПараметрыЗагрузкиДанныхИзФайла(ПараметрыЗагрузкиПоУмолчанию); + Заголовок = ПараметрыЗагрузкиПоУмолчанию.Заголовок; ИначеЕсли ТипЗагрузки = "ВнешняяЗагрузка" Тогда - ПараметрыЗагрузки.Вставить("ИмяМакетаСШаблоном", "ЗагрузкаДанныхИзФайла"); + ПараметрыЗагрузкиПоУмолчанию.Вставить("ИмяМакетаСШаблоном", "ЗагрузкаДанныхИзФайла"); Обработки.ЗагрузкаДанныхИзФайла.ПараметрыЗагрузкиИзФайлаВнешняяОбработка(ИдентификаторКоманды, - ВнешняяОбработкаСсылка, ПараметрыЗагрузки); + ВнешняяОбработкаСсылка, ПараметрыЗагрузкиПоУмолчанию); КонецЕсли; - ПараметрыЗагрузки.Вставить("ТипЗагрузки", ТипЗагрузки); - ПараметрыЗагрузки.Вставить("ПолноеИмяОбъекта", ИмяОбъектаСопоставления); ИнформацияПоКолонкамТаблица = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЗагрузкаДанныхИзФайла", ИмяОбъектаСопоставления,, ИмяПользователя()); Если ИнформацияПоКолонкамТаблица = Неопределено Тогда ИнформацияПоКолонкамТаблица = РеквизитФормыВЗначение("ИнформацияПоКолонкам"); КонецЕсли; - Обработки.ЗагрузкаДанныхИзФайла.ОпределитьИнформацияПоКолонкам(ПараметрыЗагрузки, ИнформацияПоКолонкамТаблица); + Обработки.ЗагрузкаДанныхИзФайла.ОпределитьИнформацияПоКолонкам(ПараметрыЗагрузкиПоУмолчанию, ИнформацияПоКолонкамТаблица); ЗначениеВРеквизитФормы(ИнформацияПоКолонкамТаблица, "ИнформацияПоКолонкам"); + ПараметрыЗагрузки = ПараметрыЗагрузкиПоУмолчанию; + ИзменитьБланкПоИнформацииПоКолонкам(); КонецПроцедуры @@ -871,6 +872,7 @@ НомерСтрокиВШаблоне = НомерСтрокиВШаблоне + 1; КонецЕсли; КонецЦикла; + КонецПроцедуры &НаСервере @@ -938,12 +940,16 @@ &НаКлиенте Процедура СопоставитьЗагружаемыеДанные() - Если ТаблицаСДаннымиПустая() Тогда - Если ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда + Если ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда + Если ПустаяСтрока(ШаблонСДаннымиОднаКолонка) Тогда ПоказатьПредупреждение(, (НСтр("ru = 'Для вставки сопоставленных данных в список, необходимо заполнить текстовое поле.'"))); Возврат; КонецЕсли; + СкопироватьОднуКолонкуВШаблонСДанными(); + + ИначеЕсли ТаблицаСДаннымиПустая() Тогда + Если ВариантЗагрузки = 0 Тогда ПоказатьПредупреждение(, (НСтр("ru = 'Для сопоставления и загрузки данных, необходимо заполнить таблицу.'"))); Иначе @@ -979,8 +985,6 @@ Процедура ПослеВопросаОНезаполненныхСтроках(Результат, Параметр) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда ВыполнитьШагСопоставлениеЗагружаемыхДанныхПослеПроверки(); - Иначе - ШагНазад(); КонецЕсли; КонецПроцедуры @@ -1037,12 +1041,17 @@ ИмяОбъекта = ПредставлениеСправочника(ИмяОбъектаСопоставления); Элементы.ОткрытьСправочникПослеЗакрытияПомощника.Заголовок = - СтрЗаменить(Элементы.ОткрытьСправочникПослеЗакрытияПомощника.Заголовок, "%1", ИмяОбъекта); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ОткрытьСправочникПослеЗакрытияПомощника.Заголовок, + ИмяОбъекта); Элементы.ПояснениеОтчетаОЗагрузке.Заголовок = - СтрЗаменить(Элементы.ПояснениеОтчетаОЗагрузке.Заголовок, "%1", ИмяОбъекта); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ПояснениеОтчетаОЗагрузке.Заголовок, ИмяОбъекта); Если ТипЗагрузки <> "УниверсальнаяЗагрузка" Тогда - ЗаписатьЗагружаемыеДанныеОтчет(); + СсылкиНаОбъектыОповещения = Новый Массив; + + ОбработатьЗагружаемыеДанные(СсылкиНаОбъектыОповещения); + ОповеститьФормыОбИзменении(СсылкиНаОбъектыОповещения); + ФоновоеЗаданиеОтчетНаКлиенте(); Иначе ФоновоеЗаданиеПроцент = 0; @@ -1124,8 +1133,6 @@ Статистика.Всего, Статистика.Сопоставленных); Если Статистика.Неоднозначных > 0 И Статистика.НеНайдено > 0 Тогда - ТекстНеНайдено = НСтр("ru = '%3 строк будут пропущены:'") + Символы.ПС + " - " + НСтр("ru = 'Нет данных в программе: %1'") - + Символы.ПС + " - " +НСтр("ru = 'Несколько вариантов для вставки: %2'"); ТекстНеНайдено = НСтр("ru = 'Будет пропущено строк: %3 | - Нет данных в программе: %1 | - Несколько вариантов для вставки: %2'"); @@ -1286,9 +1293,9 @@ КонецПроцедуры // Возвращаемое значение: -// Структура - Где: -// * Идентификатор - Число - -// * Имя - Строка - +// Структура: +// * Идентификатор - Число +// * Имя - Строка // &НаКлиенте Функция ОписаниеПараметраСопоставленияНеоднозначностей(Знач ВыбраннаяСтрока, Знач Имя) @@ -1320,7 +1327,7 @@ #Область ШагОтчетОЗагрузке &НаСервере -Процедура ЗаписатьЗагружаемыеДанныеОтчет() +Процедура ОбработатьЗагружаемыеДанные(СсылкиНаОбъектыОповещения) СопоставленныеДанные = РеквизитФормыВЗначение("ТаблицаСопоставленияДанных"); @@ -1332,6 +1339,20 @@ ЗначениеВРеквизитФормы(СопоставленныеДанные, "ТаблицаСопоставленияДанных"); КонецЕсли; + ПодготовитьСписокДляОповещения(СопоставленныеДанные, СсылкиНаОбъектыОповещения); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПодготовитьСписокДляОповещения(СопоставленныеДанные, СсылкиНаОбъектыОповещения) + + СсылкиНаОбъекты = Новый Массив; + Для каждого СтрокаСопоставленныхДанных Из СопоставленныеДанные Цикл + СсылкиНаОбъекты.Добавить(СтрокаСопоставленныхДанных.ОбъектСопоставления); + КонецЦикла; + + СсылкиНаОбъектыОповещения = СтандартныеПодсистемыСервер.ПодготовитьОповещениеФормОбИзменении(СсылкиНаОбъекты); + КонецПроцедуры &НаКлиенте @@ -1348,9 +1369,8 @@ #КонецОбласти // Параметры: -// ТаблицаИнформацияПоКолонкам - ТаблицаЗначений - -// КолонкиМакета - Массив из Структура - где: -// См. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета +// ТаблицаИнформацияПоКолонкам - ТаблицаЗначений +// КолонкиМакета - Массив из см. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета // &НаСервере Процедура ОпределитьДинамическийМакет(ТаблицаИнформацияПоКолонкам, КолонкиМакета) @@ -1363,6 +1383,7 @@ Строка = ТаблицаИнформацияПоКолонкам.Добавить(); Строка.ИмяКолонки = Колонка.Имя; Строка.Ширина = ?(ЗначениеЗаполнено(Колонка.Ширина), Колонка.Ширина, 20); + Строка.Примечание = Колонка.Подсказка; Если Колонка.Позиция = 0 Тогда Строка.Позиция = Индекс; Индекс = Индекс + 1; @@ -1380,18 +1401,18 @@ КонецПроцедуры // Возвращаемое значение: -// ТаблицаЗначений - Описание: -// ИмяКолонки - Строка - -// ПредставлениеКолонки - Строка - -// ТипКолонки - Произвольный - -// ОбязательнаДляЗаполнения - Булево - -// Позиция - Число - -// Группа - Строка - -// Родитель - Строка - -// Видимость - Булево - -// Примечание - Строка - -// Ширина - Число - -// Синоним - Строка - +// ТаблицаЗначений: +// ИмяКолонки - Строка +// ПредставлениеКолонки - Строка +// ТипКолонки - Произвольный +// ОбязательнаДляЗаполнения - Булево +// Позиция - Число +// Группа - Строка +// Родитель - Строка +// Видимость - Булево +// Примечание - Строка +// Ширина - Число +// Синоним - Строка // &НаСервере Функция ИнформацияПоКолонкам() @@ -1973,7 +1994,6 @@ #Область ЗагрузкаВТабличнуюЧасть - &НаСервере Процедура СкопироватьСтруктуруТабличнойЧасти(АдресТабличнойЧасти) @@ -1997,8 +2017,8 @@ КонецПроцедуры // Возвращаемое значение: -// ТаблицаЗначений - Описание: -// * Идентификатор - Число - +// ТаблицаЗначений: +// * Идентификатор - Число // &НаСервере Функция ОписаниеТабличнойЧасти() @@ -2066,21 +2086,6 @@ КонецПроцедуры -// Параметры: -// ПараметрыЗагрузкиИзФайла - Структура - где: -// * Заголовок - Строка - -// * ОбязательныеКолонки - Массив - -// * ТипДанныхКолонки - Соответствие - -// -&НаСервере -Процедура ОпределитьПараметрыЗагрузки(ПараметрыЗагрузкиИзФайла) - - МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаСопоставления); - ПараметрыЗагрузкиИзФайла = Обработки.ЗагрузкаДанныхИзФайла.ПараметрыЗагрузкиИзФайла(МетаданныеОбъекта); - МенеджерОбъекта(ИмяОбъектаСопоставления).ОпределитьПараметрыЗагрузкиДанныхИзФайла(ПараметрыЗагрузкиИзФайла); - -КонецПроцедуры - &НаСервере Процедура ДобавитьСтандартныеКолонкиВТаблицуСопоставления(ВременнаяТЗ, СтруктураОбъектаСопоставления, ДобавитьИдентификатор, ДобавитьОписаниеОшибки, ДобавитьРезультатСопоставленияСтроки, ДобавитьСписокНеоднозначностей) @@ -2513,7 +2518,9 @@ Если ЗначениеЗаполнено(Результат) Тогда АдресВоВременномХранилище = ЭтотОбъект.УникальныйИдентификатор; СохранитьШаблонВоВременноеХранилище(Результат, АдресВоВременномХранилище); - ПолучитьФайл(АдресВоВременномХранилище, ИмяОбъектаСопоставления + "." + Результат, Истина); + ПараметрыСохраненияФайла = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, АдресВоВременномХранилище, + ИмяОбъектаСопоставления + "." + Результат, ПараметрыСохраненияФайла); КонецЕсли; КонецПроцедуры @@ -2610,7 +2617,7 @@ Процедура ОбновитьНаименованияКолонокТаблицыСопоставления() Для каждого СтрокаТаблицы Из ИнформацияПоКолонкам Цикл - Колонка = Элементы.ТаблицаСопоставленияДанных.ПодчиненныеЭлементы.Найти(СтрокаТаблицы.ИмяКолонки); + Колонка = Элементы.ТаблицаСопоставленияДанных.ПодчиненныеЭлементы.Найти(СтрокаТаблицы.ИмяКолонки); // ПолеФормы Если Колонка <> Неопределено Тогда Колонка.Заголовок = ?(НЕ ПустаяСтрока(СтрокаТаблицы.Синоним), СтрокаТаблицы.Синоним + " (" + СтрокаТаблицы.ПредставлениеКолонки +")", @@ -2762,19 +2769,23 @@ Если ФоновоеЗадание.Статус = "Ошибка" Тогда ВывестиСообщениеОбОшибке(НСтр("ru = 'Не удалось произвести запись данных.'"), ФоновоеЗадание.КраткоеПредставлениеОшибки); ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда - ЗаполнитьТаблицуСопоставленияИзВременногоХранилища(ФоновоеЗадание.АдресРезультата); + СсылкиНаОбъектыОповещения = Новый Массив; + ЗаполнитьТаблицуСопоставленияИзВременногоХранилища(ФоновоеЗадание.АдресРезультата, СсылкиНаОбъектыОповещения); + ОповеститьФормыОбИзменении(СсылкиНаОбъектыОповещения); ФоновоеЗаданиеОтчетНаКлиенте(); КонецЕсли; КонецПроцедуры &НаСервере -Процедура ЗаполнитьТаблицуСопоставленияИзВременногоХранилища(АдресВоВременномХранилище) +Процедура ЗаполнитьТаблицуСопоставленияИзВременногоХранилища(АдресВоВременномХранилище, СсылкиНаОбъектыОповещения) СопоставленныеДанные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище); ЗначениеВРеквизитФормы(СопоставленныеДанные, "ТаблицаСопоставленияДанных"); + + ПодготовитьСписокДляОповещения(СопоставленныеДанные, СсылкиНаОбъектыОповещения); + КонецПроцедуры - // Фоновое формирование отчета &НаСервере @@ -2839,4 +2850,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl index 9c4dc07ff..7d8f97756 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl @@ -10,13 +10,13 @@ &НаКлиенте Процедура Выбрать(Команда) - Если ТипСохраняемогоФайла = 0 Тогда + Если ТипСохраняемогоФайла = 0 Тогда Результат = "xlsx"; ИначеЕсли ТипСохраняемогоФайла = 1 Тогда Результат = "csv"; - ИначеЕсли ТипСохраняемогоФайла = 4 Тогда + ИначеЕсли ТипСохраняемогоФайла = 3 Тогда Результат = "xls"; - ИначеЕсли ТипСохраняемогоФайла = 5 Тогда + ИначеЕсли ТипСохраняемогоФайла = 4 Тогда Результат = "ods"; Иначе Результат = "mxl"; diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl index e42ea92f7..8cc55758b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl @@ -10,53 +10,23 @@ #Область СлужебныйПрограммныйИнтерфейс -// Сообщает все требуемые сведения о процедуре загрузки данных из файла. -// -// Возвращаемое значение: -// Структура - содержит структуру со свойствами: -// * Представление - Строка - Представление в списке вариантов загрузки. -// * ИмяМакетаСШаблоном - Строка - Название макета со структурой данных(необязательный -// параметр, значение по -// умолчанию - "ЗагрузкаДанныхИзФайла"). -// * ОбязательныеКолонкиМакета - Массив - Содержит список обязательных полей для заполнения. -// * ЗаголовокКолонкиСопоставления - Строка - Представление колонки сопоставления в шапке таблицы -// сопоставления данных(необязательный параметр, значение по -// умолчанию формируются - "Справочник: <синоним справочника>"). -// * ИмяОбъекта - Строка - Имя Объекта. -// -Функция ПараметрыЗагрузкиИзФайла(МетаданныеСправочника = Неопределено) Экспорт - - ОбязательныеКолонкиМакета = Новый Массив; - Для каждого Реквизит Из МетаданныеСправочника.Реквизиты Цикл - Если Реквизит.ПроверкаЗаполнения=ПроверкаЗаполнения.ВыдаватьОшибку Тогда - ОбязательныеКолонкиМакета.Добавить(Реквизит.Имя); - КонецЕсли; - КонецЦикла; - - ПараметрыПоУмолчанию = Новый Структура; - ПараметрыПоУмолчанию.Вставить("Заголовок", МетаданныеСправочника.Представление()); - ПараметрыПоУмолчанию.Вставить("ОбязательныеКолонки", ОбязательныеКолонкиМакета); - ПараметрыПоУмолчанию.Вставить("ТипДанныхКолонки", Новый Соответствие); - Возврат ПараметрыПоУмолчанию; -КонецФункции - // Сообщает все требуемые сведения о процедуре загрузки данных из файла для внешней обработки. // // Параметры: -// ИмяКоманды - Строка - Имя команды (Идентификатор). -// СсылкаНаОбработку - Ссылка - Ссылка на обработку. -// ИмяМакетаСШаблоном - Строка - Имя шаблона с макетом колонок для загрузки данных. +// ИмяКоманды - Строка - имя команды (Идентификатор). +// СсылкаНаОбработку - ЛюбаяСсылка - ссылка на обработку. +// ПараметрыЗагрузки - Структура // Возвращаемое значение // Структура - содержит структуру со свойствами: -// * Представление - Строка - Представление в списке вариантов загрузки. -// * ИмяМакетаСШаблоном - Строка - Название макета со структурой данных(необязательный +// * Представление - Строка - представление в списке вариантов загрузки. +// * ИмяМакетаСШаблоном - Строка - название макета со структурой данных(необязательный // параметр, значение по умолчанию - "ЗагрузкаДанныхИзФайла"). -// * ОбязательныеКолонкиМакета - Массив - Содержит список обязательных полей для заполнения. -// * ЗаголовокКолонкиСопоставления - Строка - Представление колонки сопоставления в шапке таблицы +// * ОбязательныеКолонкиМакета - Массив - содержит список обязательных полей для заполнения. +// * ЗаголовокКолонкиСопоставления - Строка - представление колонки сопоставления в шапке таблицы // сопоставления данных(необязательный параметр, значение по // умолчанию формируются - "Справочник: <синоним // справочника>"). -// * ИмяОбъекта - Строка - Имя Объекта. +// * ИмяОбъекта - Строка - имя Объекта. // Процедура ПараметрыЗагрузкиИзФайлаВнешняяОбработка(ИмяКоманды, СсылкаНаОбработку, ПараметрыЗагрузки) Экспорт @@ -178,6 +148,24 @@ #Область ПоискСсылок + +// Описание +// +// Параметры: +// ШаблонСДанными - ТабличныйДокумент +// ИнформацияПоКолонкам - ТаблицаЗначений: +// * ИмяКолонки - Строка +// * Идентификатор - Строка +// * ПредставлениеКолонки - Строка +// * ТипКолонки - Произвольный +// * ОбязательнаДляЗаполнения - Булево +// * Позиция - Число +// * Группа - Строка +// * Видимость - Булево +// * Примечание - Строка +// * Ширина - Число +// ОписаниеТипов - ОписаниеТипов +// Процедура УстановитьРежимВставкиИзБуфераОбмена(ШаблонСДанными, ИнформацияПоКолонкам, ОписаниеТипов) Экспорт СоответствиеКолонок = Новый Соответствие; ЗаголовокКолонки = ""; @@ -396,6 +384,13 @@ // Заполняет таблицу значений сопоставленные данные по данным из макета. // +// Параметры: +// ПараметрыВыгрузки - Структура: +// * ТаблицаСопоставления - ТаблицаЗначений: +// ** Идентификатор - Строка +// * ИнформацияПоКолонкам - ТаблицаЗначений +// АдресХранилища- Строка +// Процедура ЗаполнитьТаблицуСопоставленияДаннымиИзШаблонаФон(ПараметрыВыгрузки, АдресХранилища) Экспорт ШаблонСДанными = ПараметрыВыгрузки.ШаблонСДанными; @@ -691,6 +686,20 @@ // Определяет состав колонок для загрузки данных. // +// Параметры: +// ПараметрыЗагрузки - Структура +// ИнформацияПоКолонкам - ТаблицаЗначений: +// * ИмяКолонки - Строка +// * ПредставлениеКолонки - Строка +// * ТипКолонки - ОписаниеТипов +// * ОбязательнаДляЗаполнения - Булево +// * Позиция - Число +// * Группа - Строка +// * Видимость - Булево +// * Примечание - Строка +// * Ширина - Число +// ИменаДобавляемыхКолонок - Неопределено +// Процедура ОпределитьИнформацияПоКолонкам(ПараметрыЗагрузки, ИнформацияПоКолонкам, ИменаДобавляемыхКолонок = Неопределено) Экспорт Если ПараметрыЗагрузки.ТипЗагрузки = "ПрикладнаяЗагрузка" Тогда @@ -818,8 +827,8 @@ // Заполняет таблицу о колонках в макете. Информация используется для построения таблицы сопоставления. // // Параметры: -// ОбластьЗаголовокТаблицы - ТабличныйДокумент - Область заголовка макета. -// ПараметрыЗагрузкиИзФайла - Структура - Параметры загрузки. +// ОбластьЗаголовокТаблицы - ТабличныйДокумент - область заголовка макета. +// ПараметрыЗагрузкиИзФайла - Структура - параметры загрузки. // ИнформацияПоКолонкам - ТаблицаЗначений - ОписаниеТабличнойЧасти с описание колонок. // ИменаДобавляемыхКолонок - Строка - список добавляемых колонок через запятую. Если значение не заполонено, то // добавляются все. @@ -1249,10 +1258,11 @@ // Возвращает имя объекта в виде структуры. // // Параметры: -// ПолноеИмяОбъекта - Структура - Имя объекта. -// * ТипОбъекта - Строка - Тип объекта. -// * НазваниеОбъекта - Строка - Название объекта. -// * ИмяТабличнойЧасти - Строка - Имя табличной части. +// ПолноеИмяОбъекта - Структура: +// * ТипОбъекта - Строка - тип объекта. +// * НазваниеОбъекта - Строка - название объекта. +// * ИмяТабличнойЧасти - Строка - имя табличной части. +// Функция РазложитьПолноеИмяОбъекта(ПолноеИмяОбъекта) Экспорт Результат = СтрРазделить(ПолноеИмяОбъекта, ".", Ложь); @@ -1751,11 +1761,12 @@ // Возвращает колонки-реквизиты зависимые от функциональных опций. // // Параметры: -// ПолноеИмяОбъекта - Строка - Полное наименование объекта. +// ПолноеИмяОбъекта - Строка - полное наименование объекта. // Возвращаемое значение: -// - Соответствие -// * Ключ - Строка - Имя колонки. -// * Значение - Булево - Признак доступности. +// - Соответствие: +// * Ключ - Строка - имя колонки. +// * Значение - Булево - признак доступности. +// Функция КолонкиЗависимыеОтФункциональныхОпций(ПолноеИмяОбъекта) ИнформацияОФункциональныхОпциях = Новый Соответствие; @@ -1778,7 +1789,7 @@ Процедура ДобавитьЗначениеСвойства(ТаблицаСвойств, Свойства, Префикс, ИмяКолонки, Значение) ИмяСвойства = СокрЛП(СтандартныеПодсистемыСервер.ПреобразоватьАдаптированноеНаименованиеКолонкиВСтроку(Сред(ИмяКолонки, СтрДлина(Префикс) + 1))); - Свойство = Свойства.Получить(ИмяСвойства); + Свойство = Свойства.Получить(ИмяСвойства); // ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения Если Свойство <> Неопределено Тогда НоваяСтрокаСвойств = ТаблицаСвойств.Добавить(); НоваяСтрокаСвойств.Свойство = Свойство.Ссылка; @@ -1789,7 +1800,7 @@ // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: -// Строка - +// Строка // Функция СобытиеЖурналаРегистрации() @@ -1797,7 +1808,6 @@ КонецФункции - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl index a6c024e69..c033f367e 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl @@ -14,7 +14,12 @@ // ИнтернетПоддержкаПользователей.РаботаСКлассификаторами -// См. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов. +// См. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов +// +// Параметры: +// Классификаторы - см. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов.Классификаторы +// Описатель - см. РаботаСКлассификаторами.ОписаниеКлассификатора +// Процедура ПриДобавленииКлассификаторов(Классификаторы, Описатель) Экспорт Описатель.Идентификатор = ИдентификаторКлассификатора(); @@ -36,7 +41,7 @@ КонецЕсли; ИмяВременногоФайла = ПолучитьИмяВременногоФайла("zip"); - ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес); // ДвоичныеДанные ДвоичныеДанные.Записать(ИмяВременногоФайла); ЗагрузитьДанныеИзФайла(ИмяВременногоФайла); УдалитьФайлы(ИмяВременногоФайла); @@ -154,10 +159,10 @@ // Формирует структуру полей для банка. // Параметры: -// Строка - Строка - Строка из текстового файла классификатора. -// Регионы - Соответствие - Код региона и регион банка. +// Строка - Строка - строка из текстового файла классификатора. +// Регионы - Соответствие - код региона и регион банка. // Возвращаемое значение: -// Банк - Структура - Реквизиты банка. +// Банк - Структура - реквизиты банка. // Функция СведенияОБанке(Знач Строка, Регионы) @@ -213,17 +218,17 @@ // Выполняет загрузку классификатора банков РФ из файла, полученного с сайта 1С. Процедура ЗагрузитьДанныеИзФайла(ИмяФайла) - ПапкаСИзвлеченнымиФайлами = ИзвлечьФайлыИзАрхива(ИмяФайла); - Если ФайлыКлассификатораПолучены(ПапкаСИзвлеченнымиФайлами) Тогда + ИмяКаталога = ИзвлечьФайлыИзАрхива(ИмяФайла); + Если ФайлыКлассификатораПолучены(ИмяКаталога) Тогда Параметры = Новый Структура; - ФайлБИКСВИФТ = Новый Файл(ИмяФайлаБИКСВИФТ(ПапкаСИзвлеченнымиФайлами)); + ФайлБИКСВИФТ = Новый Файл(ИмяФайлаБИКСВИФТ(ИмяКаталога)); Если ФайлБИКСВИФТ.Существует() Тогда - Параметры.Вставить("ПутьКФайлуБИК", ИмяФайлаБИКСВИФТ(ПапкаСИзвлеченнымиФайлами)); + Параметры.Вставить("ПутьКФайлуБИК", ИмяФайлаБИКСВИФТ(ИмяКаталога)); Иначе - Параметры.Вставить("ПутьКФайлуБИК", ИмяФайлаБИК(ПапкаСИзвлеченнымиФайлами)); + Параметры.Вставить("ПутьКФайлуБИК", ИмяФайлаБИК(ИмяКаталога)); КонецЕсли; - Параметры.Вставить("ПутьКФайлуРегионов", ИмяФайлаРегионов(ПапкаСИзвлеченнымиФайлами)); - Параметры.Вставить("ПутьКФайлуНедействующихБанков", ИмяФайлаНедействующихБанков(ПапкаСИзвлеченнымиФайлами)); + Параметры.Вставить("ПутьКФайлуРегионов", ИмяФайлаРегионов(ИмяКаталога)); + Параметры.Вставить("ПутьКФайлуНедействующихБанков", ИмяФайлаНедействующихБанков(ИмяКаталога)); Параметры.Вставить("ТекстСообщения", ""); Параметры.Вставить("ЗагрузкаВыполнена", Неопределено); @@ -233,14 +238,14 @@ КонецПроцедуры -Функция ФайлыКлассификатораПолучены(ПапкаСФайлами) +Функция ФайлыКлассификатораПолучены(ИмяКаталога) Результат = Истина; ИменаФайловДляПроверки = Новый Массив; - ИменаФайловДляПроверки.Добавить(ИмяФайлаБИК(ПапкаСФайлами)); - ИменаФайловДляПроверки.Добавить(ИмяФайлаРегионов(ПапкаСФайлами)); - ИменаФайловДляПроверки.Добавить(ИмяФайлаНедействующихБанков(ПапкаСФайлами)); + ИменаФайловДляПроверки.Добавить(ИмяФайлаБИК(ИмяКаталога)); + ИменаФайловДляПроверки.Добавить(ИмяФайлаРегионов(ИмяКаталога)); + ИменаФайловДляПроверки.Добавить(ИмяФайлаНедействующихБанков(ИмяКаталога)); Для Каждого ИмяФайла Из ИменаФайловДляПроверки Цикл Файл = Новый Файл(ИмяФайла); @@ -256,42 +261,42 @@ Функция ИзвлечьФайлыИзАрхива(ZipФайл) - ВременнаяПапка = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ВременнаяПапка); + ИмяВременногоКаталога = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ИмяВременногоКаталога); Попытка ЧтениеZipФайла = Новый ЧтениеZipФайла(ZipФайл); - ЧтениеZipФайла.ИзвлечьВсе(ВременнаяПапка); + ЧтениеZipФайла.ИзвлечьВсе(ИмяВременногоКаталога); Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - УдалитьФайлы(ВременнаяПапка); + УдалитьФайлы(ИмяВременногоКаталога); КонецПопытки; - Возврат ВременнаяПапка; + Возврат ИмяВременногоКаталога; КонецФункции -Функция ИмяФайлаРегионов(ПапкаСФайламиКлассификатора) +Функция ИмяФайлаРегионов(ИмяКаталога) - Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПапкаСФайламиКлассификатора) + "reg.txt"; + Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога) + "reg.txt"; КонецФункции -Функция ИмяФайлаБИК(ПапкаСФайламиКлассификатора) +Функция ИмяФайлаБИК(ИмяКаталога) - Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПапкаСФайламиКлассификатора) + "bnkseek.txt"; + Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога) + "bnkseek.txt"; КонецФункции -Функция ИмяФайлаБИКСВИФТ(ПапкаСФайламиКлассификатора) +Функция ИмяФайлаБИКСВИФТ(ИмяКаталога) - Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПапкаСФайламиКлассификатора) + "bnkseek_swift.txt"; + Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога) + "bnkseek_swift.txt"; КонецФункции -Функция ИмяФайлаНедействующихБанков(ПапкаСФайламиКлассификатора) +Функция ИмяФайлаНедействующихБанков(ИмяКаталога) - Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПапкаСФайламиКлассификатора) + "bnkdel.txt"; + Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога) + "bnkdel.txt"; КонецФункции @@ -359,7 +364,7 @@ КонецФункции -Функция ОтметитьНедействующиеБанки(ДействующиеБанки, НедействующиеБанки) +Процедура ОтметитьНедействующиеБанки(ДействующиеБанки, НедействующиеБанки) Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; @@ -426,9 +431,7 @@ КонецПопытки; КонецЦикла; - Возврат ВыборкаБанков.Количество(); - -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Запись обработанных данных @@ -436,9 +439,9 @@ /// Записывает/перезаписывает в справочник КлассификаторБанков данные банка. // Параметры: // ПараметрыЗагрузкиДанных - Структура: -// СтруктураБанк - Структура или СтрокаТаблицыЗначений - Данные банка. -// Загружено - Число - Количество новых записей классификатора. -// Обновлено - Число - Количество обновленных записей классификатора. +// СтруктураБанк - Структура или СтрокаТаблицыЗначений - данные банка. +// Загружено - Число - количество новых записей классификатора. +// Обновлено - Число - количество обновленных записей классификатора. // Процедура ЗаписатьЭлементКлассификатораБанковРФ(СведенияОБанке) diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl index 75af3d634..7de3d31e0 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl @@ -216,7 +216,7 @@ ЭлементБлокировки.УстановитьЗначение("Ссылка", ВалютаСсылка); Блокировка.Заблокировать(); - ВалютаОбъект = ВалютаСсылка.ПолучитьОбъект(); + ВалютаОбъект = ВалютаСсылка.ПолучитьОбъект(); // СправочникОбъект.Валюты ВалютаОбъект.СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РучнойВвод; ВалютаОбъект.Записать(); ЗафиксироватьТранзакцию(); diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl index 44a09e4e4..fdb03785a 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl @@ -14,7 +14,12 @@ // ИнтернетПоддержкаПользователей.РаботаСКлассификаторами -// См. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов. +// См. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов +// +// Параметры: +// Классификаторы - см. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов.Классификаторы +// Описатель - см. РаботаСКлассификаторами.ОписаниеКлассификатора +// Процедура ПриДобавленииКлассификаторов(Классификаторы, Описатель) Экспорт Описатель.Идентификатор = ИдентификаторКлассификатора(); @@ -92,10 +97,10 @@ // Загружает курсы валют на текущую дату. // // Параметры: -// ПараметрыЗагрузки - Структура - детали загрузки: +// ПараметрыЗагрузки - Структура: // * НачалоПериода - Дата - начало периода загрузки; // * КонецПериода - Дата - конец периода загрузки; -// * СписокВалют - ТаблицаЗначений - загружаемые валюты: +// * СписокВалют - ТаблицаЗначений: // ** Валюта - СправочникСсылка.Валюты; // ** КодВалюты - Строка. // АдресРезультата - Строка - адрес во временном хранилище для помещения результатов загрузки. @@ -191,6 +196,10 @@ КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +// +// Параметры: +// Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления +// Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); @@ -241,6 +250,10 @@ КонецПроцедуры // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. +// +// Параметры: +// Зависимости - ТаблицаЗначений +// Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЗагрузкаКурсовВалют; @@ -251,7 +264,7 @@ // Процедура для загрузки курсов валют по определенному периоду. // // Параметры: -// Валюты - Любая коллекция - со следующими полями: +// Валюты - любая коллекция - со следующими полями: // КодВалюты - числовой код валюты. // Валюта - ссылка на валюту. // НачалоПериодаЗагрузки - Дата - начало периода загрузки курсов. @@ -347,7 +360,7 @@ Если ЭтоАдресВременногоХранилища(ПутьКФайлу) Тогда ИмяФайла = ПолучитьИмяВременногоФайла(); - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПутьКФайлу); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПутьКФайлу); // ДвоичныеДанные ДвоичныеДанные.Записать(ИмяФайла); Иначе ИмяФайла = ПутьКФайлу; @@ -459,6 +472,7 @@ // Предназначена для преобразования формата чисел, используемого в файле курсов валюты. // Работает в любой локализации, не поддерживает отрицательные числа. +// Функция КурсИзСтроки(Знач Строка) Строка = СокрЛП(Строка); @@ -493,7 +507,7 @@ Функция СуммаПрописью(СуммаЧислом, ПараметрыПрописиНаРусскомЯзыке, ВыводитьСуммуБезКопеек = Ложь) Экспорт Сумма = ?(СуммаЧислом < 0, -СуммаЧислом, СуммаЧислом); - Результат = ЧислоПрописью(Сумма, "L=ru_RU;ДП=Ложь", ПараметрыПрописиНаРусскомЯзыке); // АПК:1297 не локализуется и всегда на русском языке + Результат = ЧислоПрописью(Сумма, "L=ru_RU;ДП=Ложь", ПараметрыПрописиНаРусскомЯзыке); // АПК:1297 АПК:1357 не локализуется и всегда на русском языке Если ВыводитьСуммуБезКопеек И Цел(Сумма) = Сумма Тогда Результат = Лев(Результат, СтрНайти(Результат, "0") - 1); КонецЕсли; @@ -633,4 +647,4 @@ #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl index 30f32e9a7..d082a2256 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl @@ -91,11 +91,8 @@ // Подготавливает строку с информацией о правилах на основании зачитанных данных из XML-файла. // -// Параметры: -// Нет. -// // Возвращаемое значение: -// СтрокаИнформации - Строка - строка с информацией о правилах. +// Строка - строка с информацией о правилах. // Функция ИнформацияОПравилах() Экспорт @@ -235,7 +232,7 @@ // Осуществляет загрузку правил регистрации в соответствии с форматом правил обмена. // // Параметры: -// Правила - ЧтениеXML - Объект типа ЧтениеXML. +// Правила - ЧтениеXML - объект типа ЧтениеXML. // Процедура ЗагрузитьПравилаРегистрации(Правила) @@ -277,7 +274,7 @@ // Осуществляет загрузку правила регистрации объектов. // // Параметры: -// Правила - ЧтениеXML - Объект типа ЧтениеXML. +// Правила - ЧтениеXML - объект типа ЧтениеXML. // Процедура ЗагрузитьПравилоРегистрации(Правила) @@ -581,7 +578,7 @@ // Осуществляет загрузку группы правил регистрации объекта по свойству. // // Параметры: -// Правила - ЧтениеXML - Объект типа ЧтениеXML. +// Правила - ЧтениеXML - объект типа ЧтениеXML. // НоваяСтрока - СтрокаДереваЗначений - строка дерева правил регистрации объекта. // Процедура ЗагрузитьГруппуЭлементовОтбораПланаОбмена(Правила, НоваяСтрока) @@ -622,7 +619,7 @@ // Осуществляет загрузку группы правил регистрации объекта по свойству. // // Параметры: -// Правила - ЧтениеXML - Объект типа ЧтениеXML. +// Правила - ЧтениеXML - объект типа ЧтениеXML. // НоваяСтрока - СтрокаДереваЗначений - строка дерева правил регистрации объекта. // Процедура ЗагрузитьГруппуЭлементовОтбораОбъекта(Правила, НоваяСтрока) @@ -1057,13 +1054,13 @@ // к указанному примитивному типу. // // Параметры: -// Объект - объект типа ЧтениеXML, спозиционированный на начале элемента, -// атрибут которого требуется получить. -// Тип - Значение Тип - типа Тип. Тип атрибута. -// Имя - Строка. Имя атрибута. +// Объект - ЧтениеXML - объект, спозиционированный на начале элемента, +// атрибут которого требуется получить. +// Тип - Тип - тип атрибута. +// Имя - Строка - имя атрибута. // // Возвращаемое значение: -// Значение атрибута полученное по имени и приведенное к указанному типу. +// Произвольный - значение атрибута полученное по имени и приведенное к указанному типу. // Функция одАтрибут(Объект, Тип, Имя) @@ -1094,13 +1091,13 @@ // Читает текст элемента и приводит значение к указанному типу. // // Параметры: -// Объект - объект типа ЧтениеXML, из которого осуществляется чтение. -// Тип - тип получаемого значения. -// ИскатьПоСвойству - для ссылочных типов может быть указано свойство, по которому +// Объект - ЧтениеXML - объект, из которого осуществляется чтение. +// Тип - Тип - тип получаемого значения. +// ИскатьПоСвойству - Строка - для ссылочных типов может быть указано свойство, по которому // следует искать объект: "Код", "Наименование", <ИмяРеквизита>, "Имя" (предопределенного значения). // // Возвращаемое значение: -// Значение xml-элемента, приведенное к соответствующему типу. +// Произвольный - значение xml-элемента, приведенное к соответствующему типу. // Функция одЗначениеЭлемента(Объект, Тип, ИскатьПоСвойству="") diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl index bd31e9429..3d0a218f9 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl @@ -74,7 +74,7 @@ Элементы.ПодсказкаВыбораЦелевогоЭлемента.Заголовок = НСтр("ru = 'Элемент для замены не выбран.'"); // Инициализация шагов пошагового мастера. - ИнициализироватьНастройкиПошаговогоМастера(); + НастройкиМастера = НастройкиПошаговогоМастера(Элементы); // 1. Выбор основного элемента. ШагВыбор = ДобавитьШагМастера(Элементы.ШагВыборЦелевогоЭлемента); @@ -287,22 +287,26 @@ // Программный интерфейс мастера // Инициализирует структуры мастера. -// В реквизит формы НастройкиПошаговогоМастера записывается следующее значение: -// Структура - Описание настроек мастера. +// +// Параметры: +// Элементы - ЭлементыФормы +// +// Возвращаемое значение: +// Структура - описание настроек мастера. // Общедоступные настройки мастера: -// * Шаги - Массив - Описание шагов мастера. Только для чтения. +// * Шаги - Массив - описание шагов мастера. Только для чтения. // Для добавления шагов следует использовать функцию ДобавитьШагМастера. -// * ТекущийШаг - Структура - Текущий шаг мастера. Только для чтения. -// * ПоказатьДиалогПередЗакрытием - Булево - Если Истина, то перед закрытием формы будет показано предупреждение. +// * ТекущийШаг - см. ДобавитьШагМастера. +// * ПоказатьДиалогПередЗакрытием - Булево - если Истина, то перед закрытием формы будет показано предупреждение. // Для изменения. // Служебные настройки мастера: -// * ГруппаСтраниц - Строка - Имя элемента формы, переданного в параметре ГруппаСтраниц. -// * КнопкаДалее - Строка - Имя элемента формы, переданного в параметре КнопкаДалее. -// * КнопкаНазад - Строка - Имя элемента формы, переданного в параметре КнопкаНазад. -// * КнопкаОтмена - Строка - Имя элемента формы, переданного в параметре КнопкаОтмена. +// * ГруппаСтраниц - Строка - имя элемента формы, переданного в параметре ГруппаСтраниц. +// * КнопкаДалее - Строка - имя элемента формы, переданного в параметре КнопкаДалее. +// * КнопкаНазад - Строка - имя элемента формы, переданного в параметре КнопкаНазад. +// * КнопкаОтмена - Строка - имя элемента формы, переданного в параметре КнопкаОтмена. // -&НаСервере -Процедура ИнициализироватьНастройкиПошаговогоМастера() +&НаСервереБезКонтекста +Функция НастройкиПошаговогоМастера(Элементы) НастройкиМастера = Новый Структура; НастройкиМастера.Вставить("Шаги", Новый Массив); НастройкиМастера.Вставить("ТекущийШаг", Неопределено); @@ -320,48 +324,53 @@ Элементы.ШагМастераДалее.Видимость = Ложь; Элементы.ШагМастераНазад.Видимость = Ложь; Элементы.ШагМастераОтмена.Видимость = Ложь; -КонецПроцедуры + + Возврат НастройкиМастера; +КонецФункции // Добавляет шаг мастера. Переходы между страницами будут происходить согласно порядку добавления. // // Параметры: -// Страница - ГруппаФормы - Страница, содержащая элементы шага. +// Страница - ГруппаФормы - страница, содержащая элементы шага. // // Возвращаемое значение: -// Структура - Описание настроек страницы, где: -// * ИмяСтраницы - Строка - Имя страницы. -// * КнопкаДалее - Структура - Описание кнопки "Далее", где: -// ** Заголовок - Строка - Заголовок кнопки. По умолчанию - "Далее >". -// ** Подсказка - Строка - Подсказка для кнопки. По умолчанию соответствует заголовку кнопки. -// ** Видимость - Булево - Когда Истина то кнопка видна. По умолчанию - Истина. -// ** Доступность - Булево - Когда Истина то кнопку можно нажимать. По умолчанию - Истина. -// ** КнопкаПоУмолчанию - Булево - Когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Истина. -// * КнопкаНазад - Структура - Описание кнопки "Назад", где: -// ** Заголовок - Строка - Заголовок кнопки. По умолчанию - "< Назад". -// ** Подсказка - Строка - Подсказка для кнопки. По умолчанию соответствует заголовку кнопки. -// ** Видимость - Булево - Когда Истина то кнопка видна. По умолчанию - Истина. -// ** Доступность - Булево - Когда Истина то кнопку можно нажимать. По умолчанию - Истина. -// ** КнопкаПоУмолчанию - Булево - Когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Ложь. -// * КнопкаОтмена - Структура - Описание кнопки "Отмена", где: -// ** Заголовок - Строка - Заголовок кнопки. По умолчанию - "Отмена". -// ** Подсказка - Строка - Подсказка для кнопки. По умолчанию соответствует заголовку кнопки. -// ** Видимость - Булево - Когда Истина то кнопка видна. По умолчанию - Истина. -// ** Доступность - Булево - Когда Истина то кнопку можно нажимать. По умолчанию - Истина. -// ** КнопкаПоУмолчанию - Булево - Когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Ложь. +// Структура - описание настроек страницы, где: +// * ИмяСтраницы - Строка - имя страницы. +// * КнопкаДалее - Структура - описание кнопки "Далее", где: +// ** Заголовок - Строка - заголовок кнопки. По умолчанию - "Далее >". +// ** Подсказка - Строка - подсказка для кнопки. По умолчанию соответствует заголовку кнопки. +// ** Видимость - Булево - когда Истина то кнопка видна. По умолчанию - Истина. +// ** Доступность - Булево - когда Истина то кнопку можно нажимать. По умолчанию - Истина. +// ** КнопкаПоУмолчанию - Булево - когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Истина. +// * КнопкаНазад - Структура - описание кнопки "Назад", где: +// ** Заголовок - Строка - заголовок кнопки. По умолчанию - "< Назад". +// ** Подсказка - Строка - подсказка для кнопки. По умолчанию соответствует заголовку кнопки. +// ** Видимость - Булево - когда Истина то кнопка видна. По умолчанию - Истина. +// ** Доступность - Булево - когда Истина то кнопку можно нажимать. По умолчанию - Истина. +// ** КнопкаПоУмолчанию - Булево - когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Ложь. +// * КнопкаОтмена - Структура - описание кнопки "Отмена", где: +// ** Заголовок - Строка - заголовок кнопки. По умолчанию - "Отмена". +// ** Подсказка - Строка - подсказка для кнопки. По умолчанию соответствует заголовку кнопки. +// ** Видимость - Булево - когда Истина то кнопка видна. По умолчанию - Истина. +// ** Доступность - Булево - когда Истина то кнопку можно нажимать. По умолчанию - Истина. +// ** КнопкаПоУмолчанию - Булево - когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Ложь. // &НаСервере Функция ДобавитьШагМастера(Знач Страница) - ОписаниеШага = Новый Структура("Индекс, ИмяСтраницы, КнопкаНазад, КнопкаДалее, КнопкаОтмена"); + ОписаниеШага = Новый Структура; + ОписаниеШага.Вставить("Индекс", 0); + ОписаниеШага.Вставить("ИмяСтраницы", ""); + ОписаниеШага.Вставить("КнопкаНазад", КнопкаМастера()); + ОписаниеШага.Вставить("КнопкаДалее", КнопкаМастера()); + ОписаниеШага.Вставить("КнопкаОтмена", КнопкаМастера()); + ОписаниеШага.ИмяСтраницы = Страница.Имя; - ОписаниеШага.КнопкаНазад = КнопкаМастера(); ОписаниеШага.КнопкаНазад.Заголовок = НСтр("ru = '< Назад'"); - ОписаниеШага.КнопкаДалее = КнопкаМастера(); ОписаниеШага.КнопкаДалее.КнопкаПоУмолчанию = Истина; ОписаниеШага.КнопкаДалее.Заголовок = НСтр("ru = 'Далее >'"); - ОписаниеШага.КнопкаОтмена = КнопкаМастера(); ОписаниеШага.КнопкаОтмена.Заголовок = НСтр("ru = 'Отмена'"); НастройкиМастера.Шаги.Добавить(ОписаниеШага); @@ -391,7 +400,9 @@ // Выполняет переход мастера на указанную страницу. // // Параметры: -// ШагИлиИндексИлиГруппаФормы - Структура, Число, ГруппаФормы - Страницу, на которую необходимо перейти. +// ШагИлиИндексИлиГруппаФормы - Структура +// - Число +// - ГруппаФормы - страницу, на которую необходимо перейти. // &НаКлиенте Процедура ПерейтиНаШагМастера(Знач ШагИлиИндексИлиГруппаФормы) @@ -501,7 +512,8 @@ Иначе - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); + ТекущийШаг = НастройкиМастера.ТекущийШаг;// см. ДобавитьШагМастера + ПерейтиНаШагМастера(ТекущийШаг.Индекс + 1); КонецЕсли; @@ -518,7 +530,8 @@ Иначе - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс - 1); + Шаг = НастройкиМастера.ТекущийШаг;// см. ДобавитьШагМастера + ПерейтиНаШагМастера(Шаг.Индекс - 1); КонецЕсли; @@ -582,20 +595,7 @@ &НаКлиенте Процедура ОповеститьОбУспешнойЗамене(Знач СписокДанных) - // Изменения объектов, в которых происходили замены. - СписокТипов = Новый Соответствие; - Для Каждого Элемент Из СписокДанных Цикл - Тип = ТипЗнч(Элемент); - Если СписокТипов[Тип] = Неопределено Тогда - ОповеститьОбИзменении(Тип); - СписокТипов.Вставить(Тип, Истина); - КонецЕсли; - КонецЦикла; - - // Общее оповещение - Если СписокТипов.Количество()>0 Тогда - Оповестить(СобытиеОповещенияОЗамене, , ЭтотОбъект); - КонецЕсли; + ОбщегоНазначенияКлиент.ОповеститьОбИзмененииОбъектов(СписокДанных); КонецПроцедуры &НаКлиенте @@ -631,7 +631,8 @@ Возврат; КонецЕсли; - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); + Шаг = НастройкиМастера.ТекущийШаг;// см. ДобавитьШагМастера + ПерейтиНаШагМастера(Шаг.Индекс + 1); КонецПроцедуры &НаКлиенте @@ -719,6 +720,14 @@ КонецФункции +// Параметры: +// Ссылки - СписокЗначений из ЛюбаяСсылка +// - Массив из ЛюбаяСсылка +// - ТаблицаЗначений: +// * Ссылка - ЛюбаяСсылка +// Возвращаемое значение: +// Массив +// &НаСервереБезКонтекста Функция МассивСсылокИзСписка(Знач Ссылки) // Преобразует массив, список значений или коллекцию в массив. @@ -1034,12 +1043,14 @@ // Описание настроек кнопки мастера. // // Возвращаемое значение: -// Структура - Настройки кнопки формы, где: -// * Заголовок - Строка - Заголовок кнопки. -// * Подсказка - Строка - Подсказка для кнопки. -// * Видимость - Булево - Когда Истина то кнопка видна. Значение по умолчанию: Истина. -// * Доступность - Булево - Когда Истина то кнопку можно нажимать. Значение по умолчанию: Истина. -// * КнопкаПоУмолчанию - Булево - Когда Истина то кнопка будет основной кнопкой формы. Значение по умолчанию - Ложь. +// Структура - настройки кнопки формы, где: +// * Заголовок - Строка - заголовок кнопки. +// * Подсказка - Строка - подсказка для кнопки. +// * Видимость - Булево - когда Истина то кнопка видна. Значение по умолчанию: Истина. +// * Доступность - Булево - когда Истина то кнопку можно нажимать. Значение по умолчанию: Истина. +// * КнопкаПоУмолчанию - Булево - когда Истина то кнопка будет основной кнопкой формы. Значение по умолчанию - Ложь. +// * РасширеннаяПодсказка - Структура: +// ** Заголовок - Строка // &НаКлиентеНаСервереБезКонтекста Функция КнопкаМастера() @@ -1056,7 +1067,7 @@ // Параметры: // КнопкаМастера - см. КнопкаМастера -// Описание - Строка - +// Описание - Строка // &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьСвойстваКнопкиМастера(КнопкаМастера, Описание) diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl index 41d767738..ec69792f1 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl @@ -387,43 +387,45 @@ // Добавляет шаг мастера. Переходы между страницами будут происходить согласно порядку добавления. // // Параметры: -// Страница - ГруппаФормы - Страница, содержащая элементы шага. +// Страница - ГруппаФормы - страница, содержащая элементы шага. // // Возвращаемое значение: -// Структура - Описание настроек страницы, где: -// * ИмяСтраницы - Строка - Имя страницы. -// * КнопкаДалее - Структура - Описание кнопки "Далее", где: -// ** Заголовок - Строка - Заголовок кнопки. По умолчанию - "Далее >". -// ** Подсказка - Строка - Подсказка для кнопки. По умолчанию соответствует заголовку кнопки. -// ** Видимость - Булево - Когда Истина то кнопка видна. По умолчанию - Истина. -// ** Доступность - Булево - Когда Истина то кнопку можно нажимать. По умолчанию - Истина. -// ** КнопкаПоУмолчанию - Булево - Когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Истина. -// * КнопкаНазад - Структура - Описание кнопки "Назад", где: -// ** Заголовок - Строка - Заголовок кнопки. По умолчанию - "< Назад". -// ** Подсказка - Строка - Подсказка для кнопки. По умолчанию соответствует заголовку кнопки. -// ** Видимость - Булево - Когда Истина то кнопка видна. По умолчанию - Истина. -// ** Доступность - Булево - Когда Истина то кнопку можно нажимать. По умолчанию - Истина. -// ** КнопкаПоУмолчанию - Булево - Когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Ложь. -// * КнопкаОтмена - Структура - Описание кнопки "Отмена", где: -// ** Заголовок - Строка - Заголовок кнопки. По умолчанию: "Отмена". -// ** Подсказка - Строка - Подсказка для кнопки. По умолчанию соответствует заголовку кнопки. -// ** Видимость - Булево - Когда Истина то кнопка видна. По умолчанию: Истина. -// ** Доступность - Булево - Когда Истина то кнопку можно нажимать. По умолчанию - Истина. -// ** КнопкаПоУмолчанию - Булево - Когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Ложь. +// Структура - описание настроек страницы, где: +// * ИмяСтраницы - Строка - имя страницы. +// * КнопкаДалее - Структура - описание кнопки "Далее", где: +// ** Заголовок - Строка - заголовок кнопки. По умолчанию - "Далее >". +// ** Подсказка - Строка - подсказка для кнопки. По умолчанию соответствует заголовку кнопки. +// ** Видимость - Булево - когда Истина то кнопка видна. По умолчанию - Истина. +// ** Доступность - Булево - когда Истина то кнопку можно нажимать. По умолчанию - Истина. +// ** КнопкаПоУмолчанию - Булево - когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Истина. +// * КнопкаНазад - Структура - описание кнопки "Назад", где: +// ** Заголовок - Строка - заголовок кнопки. По умолчанию - "< Назад". +// ** Подсказка - Строка - подсказка для кнопки. По умолчанию соответствует заголовку кнопки. +// ** Видимость - Булево - когда Истина то кнопка видна. По умолчанию - Истина. +// ** Доступность - Булево - когда Истина то кнопку можно нажимать. По умолчанию - Истина. +// ** КнопкаПоУмолчанию - Булево - когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Ложь. +// * КнопкаОтмена - Структура - описание кнопки "Отмена", где: +// ** Заголовок - Строка - заголовок кнопки. По умолчанию: "Отмена". +// ** Подсказка - Строка - подсказка для кнопки. По умолчанию соответствует заголовку кнопки. +// ** Видимость - Булево - когда Истина то кнопка видна. По умолчанию: Истина. +// ** Доступность - Булево - когда Истина то кнопку можно нажимать. По умолчанию - Истина. +// ** КнопкаПоУмолчанию - Булево - когда Истина то кнопка будет основной кнопкой формы. По умолчанию - Ложь. // &НаСервере Функция ДобавитьШагМастера(Знач Страница) - ОписаниеШага = Новый Структура("Индекс, ИмяСтраницы, КнопкаНазад, КнопкаДалее, КнопкаОтмена"); + ОписаниеШага = Новый Структура; + ОписаниеШага.Вставить("Индекс", 0); + ОписаниеШага.Вставить("ИмяСтраницы", ""); + ОписаниеШага.Вставить("КнопкаНазад", КнопкаМастера()); + ОписаниеШага.Вставить("КнопкаДалее", КнопкаМастера()); + ОписаниеШага.Вставить("КнопкаОтмена", КнопкаМастера()); ОписаниеШага.ИмяСтраницы = Страница.Имя; - ОписаниеШага.КнопкаНазад = КнопкаМастера(); ОписаниеШага.КнопкаНазад.Заголовок = НСтр("ru = '< Назад'"); - ОписаниеШага.КнопкаДалее = КнопкаМастера(); ОписаниеШага.КнопкаДалее.КнопкаПоУмолчанию = Истина; ОписаниеШага.КнопкаДалее.Заголовок = НСтр("ru = 'Далее >'"); - ОписаниеШага.КнопкаОтмена = КнопкаМастера(); ОписаниеШага.КнопкаОтмена.Заголовок = НСтр("ru = 'Отмена'"); НастройкиМастера.Шаги.Добавить(ОписаниеШага); @@ -453,7 +455,9 @@ // Выполняет переход мастера на указанную страницу. // // Параметры: -// ШагИлиИндексИлиГруппаФормы - Структура, Число, ГруппаФормы - Страницу, на которую необходимо перейти. +// ШагИлиИндексИлиГруппаФормы - Структура +// - Число +// - ГруппаФормы - страницу, на которую необходимо перейти. // &НаКлиенте Процедура ПерейтиНаШагМастера(Знач ШагИлиИндексИлиГруппаФормы) @@ -543,7 +547,7 @@ Процедура ШагМастераДалее() ТекущаяСтраница = Элементы.ШагиМастера.ТекущаяСтраница; - + Шаг = НастройкиМастера.ТекущийШаг;// см. ДобавитьШагМастера Если ТекущаяСтраница = Элементы.ШагВыборОсновногоЭлемента Тогда ТекстОшибки = ПроверитьВозможностьЗаменыСсылок(); @@ -554,7 +558,8 @@ Возврат; КонецЕсли; - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); + + ПерейтиНаШагМастера(Шаг.Индекс + 1); ИначеЕсли ТекущаяСтраница = Элементы.ШагПовторОбъединения Тогда @@ -562,7 +567,7 @@ Иначе - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); + ПерейтиНаШагМастера(Шаг.Индекс + 1); КонецЕсли; @@ -579,7 +584,8 @@ Иначе - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс - 1); + Шаг = НастройкиМастера.ТекущийШаг;// см. ДобавитьШагМастера + ПерейтиНаШагМастера(Шаг.Индекс - 1); КонецЕсли; @@ -642,7 +648,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ОсновнойЭлемент"); - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтыСтиля.ОсновнойЭлементСписка); // @@ -803,8 +809,8 @@ КонецФункции // Параметры: -// РезультатВопроса - КодВозвратаДиалога - -// ДополнительныеПараметры - Структура - +// РезультатВопроса - КодВозвратаДиалога +// ДополнительныеПараметры - Структура // &НаКлиенте Процедура МестаИспользованияПередУдалениемЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт @@ -878,20 +884,7 @@ // &НаКлиенте Процедура ОповеститьОбУспешнойЗамене(Знач СписокДанных) - // Изменения объектов, в которых происходили замены. - СписокТипов = Новый Соответствие; - Для Каждого Элемент Из СписокДанных Цикл - Тип = ТипЗнч(Элемент); - Если СписокТипов[Тип] = Неопределено Тогда - ОповеститьОбИзменении(Тип); - СписокТипов.Вставить(Тип, Истина); - КонецЕсли; - КонецЦикла; - - // Общее оповещение - Если СписокТипов.Количество() > 0 Тогда - Оповестить(СобытиеОповещенияОЗамене, , ЭтотОбъект); - КонецЕсли; + ОбщегоНазначенияКлиент.ОповеститьОбИзмененииОбъектов(СписокДанных); КонецПроцедуры &НаСервереБезКонтекста @@ -1118,7 +1111,8 @@ ЗаполнитьМестаИспользования(Задание.АдресРезультата); Активизировать(); - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); + Шаг = НастройкиМастера.ТекущийШаг;// см. ДобавитьШагМастера + ПерейтиНаШагМастера(Шаг.Индекс + 1); ИначеЕсли ТекущаяСтраница = Элементы.ШагОбъединение Тогда @@ -1268,12 +1262,14 @@ // Описание настроек кнопки мастера. // // Возвращаемое значение: -// Структура - Настройки кнопки формы, где: -// * Заголовок - Строка - Заголовок кнопки. -// * Подсказка - Строка - Подсказка для кнопки. -// * Видимость - Булево - Когда Истина то кнопка видна. Значение по умолчанию: Истина. -// * Доступность - Булево - Когда Истина то кнопку можно нажимать. Значение по умолчанию: Истина. -// * КнопкаПоУмолчанию - Булево - Когда Истина то кнопка будет основной кнопкой формы. Значение по умолчанию - Ложь. +// Структура - настройки кнопки формы, где: +// * Заголовок - Строка - заголовок кнопки. +// * Подсказка - Строка - подсказка для кнопки. +// * Видимость - Булево - когда Истина то кнопка видна. Значение по умолчанию: Истина. +// * Доступность - Булево - когда Истина то кнопку можно нажимать. Значение по умолчанию: Истина. +// * КнопкаПоУмолчанию - Булево - когда Истина то кнопка будет основной кнопкой формы. Значение по умолчанию - Ложь. +// * РасширеннаяПодсказка - Структура: +// ** Заголовок - Строка // &НаКлиентеНаСервереБезКонтекста Функция КнопкаМастера() @@ -1290,7 +1286,7 @@ // Параметры: // КнопкаМастера - см. КнопкаМастера -// Описание - Строка - +// Описание - Строка // &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьСвойстваКнопкиМастера(КнопкаМастера, Описание) diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl index feadad56f..320fda2dc 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl @@ -45,19 +45,19 @@ Функция ВерсияКалендарей() Экспорт - Возврат 8; + Возврат 9; КонецФункции Функция ВерсияОбновленияПроизводственныхКалендарей() Экспорт - Возврат "3.1.2.395"; + Возврат "3.1.3.146"; КонецФункции Функция ВерсияОбновленияДанныхПроизводственныхКалендарей() Экспорт - Возврат "3.1.2.405"; + Возврат "3.1.3.161"; КонецФункции @@ -102,6 +102,7 @@ ЗаполнитьПраздничныеДниЧеченскойРеспублики(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); ЗаполнитьПраздничныеДниЧувашскойРеспублики(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); ЗаполнитьПраздничныеДниСтавропольскогоКрая(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); + ЗаполнитьПраздничныеДниБелгородскойОбласти(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); ЗаполнитьПраздничныеДниПензенскойОбласти(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); ЗаполнитьПраздничныеДниСаратовскойОбласти(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); ЗаполнитьПраздничныеДниЗабайкальскогоКрая(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни); @@ -309,6 +310,19 @@ КонецПроцедуры +Процедура ЗаполнитьПраздничныеДниБелгородскойОбласти(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) + + Если КодПроизводственногоКалендаря <> "31" Тогда + Возврат; + КонецЕсли; + + // 12 июля - День Прохоровского поля. + Если НомерГода >= 2020 Тогда + ДобавитьПраздничныйДень(ПраздничныеДни, 12, 7, НомерГода); + КонецЕсли; + +КонецПроцедуры + Процедура ЗаполнитьПраздничныеДниЗабайкальскогоКрая(КодПроизводственногоКалендаря, НомерГода, ПраздничныеДни) Если КодПроизводственногоКалендаря <> "75" Тогда @@ -483,8 +497,13 @@ ОписаниеПериода.Период = Новый СтандартныйПериод(Начало, Окончание); ОписаниеПериода.Основание = Основание; ОписаниеПериода.Даты = Новый Массив; - ОписаниеПериода.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'с %1 по %2 - %3'"), Формат(Начало, "ДЛФ=D;"), Формат(Окончание, "ДЛФ=D;"), ОписаниеПериода.Основание); + Если НачалоДня(Начало) = НачалоДня(Окончание) Тогда + ОписаниеПериода.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 - %2'"), Формат(Начало, "ДЛФ=D;"), ОписаниеПериода.Основание); + Иначе + ОписаниеПериода.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'с %1 по %2 - %3'"), Формат(Начало, "ДЛФ=D;"), Формат(Окончание, "ДЛФ=D;"), ОписаниеПериода.Основание); + КонецЕсли; ДатаОбхода = НачалоДня(Начало); Пока ДатаОбхода <= Окончание Цикл diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt index 23699d604..f796c4e3d 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ДанныеПроизводственныхКалендарей/Template.txt @@ -1037,7 +1037,7 @@ <Item Calendar="РФ" Year="2020" DayType="Суббота" Date="20200511" SwapDate="20200509"/> <Item Calendar="РФ" Year="2020" DayType="Предпраздничный" Date="20200611" SwapDate=""/> <Item Calendar="РФ" Year="2020" DayType="Праздник" Date="20200612" SwapDate=""/> - <Item Calendar="РФ" Year="2020" DayType="Нерабочий" Date="20200624" SwapDate=""/> + <Item Calendar="РФ" Year="2020" DayType="Рабочий" Date="20200624" SwapDate=""/> <Item Calendar="РФ" Year="2020" DayType="Нерабочий" Date="20200701" SwapDate=""/> <Item Calendar="РФ" Year="2020" DayType="Предпраздничный" Date="20201103" SwapDate=""/> <Item Calendar="РФ" Year="2020" DayType="Праздник" Date="20201104" SwapDate=""/> diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ПериодыНерабочихДней/Template.txt b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ПериодыНерабочихДней/Template.txt index 4e9a0d121..4bb637f81 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ПериодыНерабочихДней/Template.txt +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Templates/ПериодыНерабочихДней/Template.txt @@ -2,4 +2,5 @@ <Item Calendar="РФ" Order="1" StartDate="20200330" EndDate="20200403" Description="Указ Президента РФ от 25.03.2020 № 206"/> <Item Calendar="РФ" Order="2" StartDate="20200404" EndDate="20200430" Description="Указ Президента РФ от 02.04.2020 № 239"/> <Item Calendar="РФ" Order="3" StartDate="20200506" EndDate="20200508" Description="Указ Президента РФ от 28.04.2020 № 294"/> + <Item Calendar="РФ" Order="4" StartDate="20200624" EndDate="20200624" Description="Указ Президента РФ от 29.05.2020 № 345"/> </Items> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form index cb2cdb0b8..96e9321ff 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form @@ -2578,6 +2578,17 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ХранилищеДанных</name> + <id>11</id> + <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 063f94063..5a1460560 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl @@ -51,9 +51,14 @@ &НаКлиенте Процедура ЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ПараметрыВыбора = Новый Структура; + ПараметрыВыбора.Вставить("ТекущиеДанные", Элементы.Журнал.ТекущиеДанные); + ПараметрыВыбора.Вставить("Поле", Поле); + ПараметрыВыбора.Вставить("ИнтервалДат", ИнтервалДат); + ПараметрыВыбора.Вставить("ОтборЖурналаРегистрации", ОтборЖурналаРегистрации); + ПараметрыВыбора.Вставить("ХранилищеДанных", ХранилищеДанных); - ЖурналРегистрацииКлиент.СобытияВыбор(Элементы.Журнал.ТекущиеДанные, Поле, ИнтервалДат, ОтборЖурналаРегистрации); - + ЖурналРегистрацииКлиент.СобытияВыбор(ПараметрыВыбора); КонецПроцедуры &НаКлиенте @@ -103,7 +108,7 @@ &НаКлиенте Процедура ПросмотрТекущегоСобытияВОтдельномОкне() - ЖурналРегистрацииКлиент.ПросмотрТекущегоСобытияВОтдельномОкне(Элементы.Журнал.ТекущиеДанные); + ЖурналРегистрацииКлиент.ПросмотрТекущегоСобытияВОтдельномОкне(Элементы.Журнал.ТекущиеДанные, ХранилищеДанных); КонецПроцедуры @@ -305,7 +310,13 @@ РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресХранилища); СобытияЖурнала = РезультатВыполнения.СобытияЖурнала; - ЖурналРегистрации.ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, УникальныйИдентификатор); + Если ХранилищеДанных = Неопределено Тогда + Адрес = УникальныйИдентификатор; + Иначе + Адрес = ХранилищеДанных; + КонецЕсли; + ХранилищеДанных = ПоместитьВоВременноеХранилище(Новый Соответствие, Адрес); + ЖурналРегистрации.ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, ХранилищеДанных); ЗначениеВДанныеФормы(СобытияЖурнала, Журнал); ИдентификаторЗадания = Неопределено; diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl index 2e757ac37..8ba976e7b 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl @@ -63,8 +63,10 @@ КонецПроцедуры -// Процедура добавляет колонки, -// которые имеют смысл только для формы Защита персональных данных. +// Процедура добавляет колонки, которые имеют смысл только для формы Защита персональных данных. +// +// Параметры: +// ЖурналСобытий - ТаблицаЗначений // Процедура ДобавитьДополнительныеКолонкиСобытия(ЖурналСобытий) Экспорт diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl index 482273682..709733abf 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl @@ -257,10 +257,12 @@ ПараметрыРеквизитаДляПроверки.Вставить("Имя", ИмяРеквизита); ПараметрыРеквизитаДляПроверки.Вставить("Значение", ЭтотОбъект[ИмяРеквизита]); ПараметрыРеквизитаДляПроверки.Вставить("ПолеСообщения", ИмяРеквизита); + + Элемент = Элементы[ИмяРеквизита]; // ПолеФормы ПараметрыРеквизитаДляПроверки.Вставить("ТекстНезаполненного", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Поле ""%1"" не заполнено'"), - ?(ИмяРеквизита = "Фамилия", "Фамилия", Элементы[ИмяРеквизита].Заголовок))); + ?(ИмяРеквизита = "Фамилия", "Фамилия", Элемент.Заголовок))); ПроверяемыеРеквизиты.Добавить(ПараметрыРеквизитаДляПроверки); diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl index 01de744c4..eb332dfa7 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl @@ -260,7 +260,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( "УправлениеКонтактнойИнформациейКлиент"); - ВидКонтактнойИнформации.Наименование = ЗаголовокФормы; + УстановитьНаименованиеКонтактнойИнформации(ВидКонтактнойИнформации, ЗаголовокФормы); ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( ВидКонтактнойИнформации, ЭтотОбъект[ИмяРеквизита + "XML"], ЭтотОбъект[ИмяРеквизита]); @@ -268,6 +268,15 @@ КонецПроцедуры +// Параметры: +// ВидКИ - см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации +// ЗаголовокФормы - Строка +// +&НаКлиенте +Процедура УстановитьНаименованиеКонтактнойИнформации(ВидКИ, ЗаголовокФормы) + ВидКИ.Наименование = ЗаголовокФормы; +КонецПроцедуры + &НаКлиенте Процедура ПредставлениеАдресаОчистка(Форма, Элемент, СтандартнаяОбработка, ИмяРеквизита) @@ -393,9 +402,11 @@ КонецЕсли; ПараметрыРеквизитаДляПроверки.Вставить("ПолеСообщения", ИмяРеквизита); + + Элемент = Элементы[ИмяРеквизита]; // ПолеФормы ПараметрыРеквизитаДляПроверки.Вставить("ТекстНезаполненного", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Поле ""%1"" не заполнено'"), Элементы[ИмяРеквизита].Заголовок)); + НСтр("ru = 'Поле ""%1"" не заполнено'"), Элемент.Заголовок)); ПроверяемыеРеквизиты.Добавить(ПараметрыРеквизитаДляПроверки); diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl index 84082c44a..7bd182721 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl @@ -458,10 +458,8 @@ |2. Копия* свидетельства о постановке на учет в налоговом органе (ИНН). |3. Копия* свидетельства о государственной регистрации юридического лица (ОГРН) или лист записи ЕГРЮЛ (Форма № Р50007). |4. Копия* документа, удостоверяющего личность представителя организации, указанного для выпуска сертификата. - |5. Копия* страхового свидетельства обязательного пенсионного страхования (СНИЛС) представителя организации, - | указанного для выпуска сертификата. - |6. Копия* документа, подтверждающего полномочия руководителя, подписавшего заявление (протокол собрания - | учредителей, решение собственника, устав) или актуальная выписка из ЕГРЮЛ, заверенная налоговым органом. + |5. Копия* страхового свидетельства обязательного пенсионного страхования (СНИЛС) представителя организации, указанного для выпуска сертификата. + |6. Копия* документа, подтверждающего полномочия руководителя, подписавшего заявление (протокол собрания учредителей, решение собственника, устав) или актуальная выписка из ЕГРЮЛ, заверенная налоговым органом. | |* Копии документов заверяются подписью руководителя и печатью организации.'"); КонецЕсли; @@ -962,6 +960,9 @@ Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.ИсполненоСертификатНеУстановлен; ИначеЕсли Результат = Ложь Тогда Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отклонено; + Если ЗначениеЗаполнено(ОшибкаУстановкиСертификата) Тогда + СостояниеОбработкиЗаявления = СостояниеОбработкиЗаявления + Символы.ПС + ОшибкаУстановкиСертификата; + КонецЕсли; КонецЕсли; ЗаписатьЗаявление(); @@ -2014,7 +2015,16 @@ // Поле S (ST) - регион (<код региона> <имя региона>) - наименование субъекта РФ для СКПЭП, // например, "77 г. Москва". - ПолеРегион = Адрес.КодРегиона + " " + ИмяРегионаРФПоРекомендациямДляСКПЭП(Адрес.КодРегиона); + Попытка + ПолеРегион = Адрес.КодРегиона + " " + ИмяРегионаРФПоРекомендациямДляСКПЭП(Адрес.КодРегиона); + Исключение + + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректный юридический адрес ""%1"": + |%2'"), ТекстОшибки); + + КонецПопытки; Поля.Вставить("S", Лев(ПолеРегион, 128)); СписокПараметров.Добавить("2.5.4.8", Поля.S); @@ -2565,9 +2575,9 @@ КонецПроцедуры // Параметры: -// Контекст - Структура - контекст операции: -// * Строка - СтрокаТаблицыЗначений - где: -// ** Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования -. +// Контекст - Структура: +// * Строка - СтрокаТаблицыЗначений: +// ** Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования // &НаКлиенте Процедура ЗаполнитьПрограммуЦиклНачало(Контекст) @@ -2604,10 +2614,10 @@ КонецПроцедуры // Параметры: -// Менеджер - МенеджерКриптографии - . -// Контекст - Структура - контекст операции: -// * Строка - СтрокаТаблицыЗначений - где: -// ** Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования -. +// Менеджер - МенеджерКриптографии +// Контекст - Структура: +// * Строка - СтрокаТаблицыЗначений: +// ** Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования // &НаКлиенте Процедура ЗаполнитьПрограммуЦиклПослеСозданияМенеджераКриптографии(Менеджер, Контекст) Экспорт @@ -3565,8 +3575,8 @@ // Параметры: // Существует - Булево - признак существования файла. -// Контекст - Структура - контекст операции: -// * Файл - Файл - . +// Контекст - Структура: +// * Файл - Файл // &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеПроверкиСуществованияФайла(Существует, Контекст) Экспорт @@ -3833,7 +3843,7 @@ КонецПроцедуры // Параметры: -// СписокОшибок - Строка - . +// СписокОшибок - Строка // Контекст - Структура - контекст операции. // &НаКлиенте @@ -4298,8 +4308,8 @@ КонецПроцедуры // Параметры: -// Каталог - Строка - . -// Контекст - Структура - . +// Каталог - Строка +// Контекст - Структура // &НаКлиенте Процедура УстановитьСертификатПослеПолученияКаталогаВременныхФайловКомпоненты(Каталог, Контекст) Экспорт @@ -4332,11 +4342,9 @@ Процедура УстановитьСертификатПослеПолученияРазрешений(РазрешенияПолучены, Контекст) Экспорт Если Не РазрешенияПолучены Тогда - - ОшибкаУстановкиСертификата = НСтр("ru = 'Сохранение сертификатов во временную папку отменено пользователем.'"); + ОшибкаУстановкиСертификата = НСтр("ru = 'Сохранение сертификатов во временную папку отменено.'"); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); Возврат; - КонецЕсли; НачатьСозданиеКаталога(Новый ОписаниеОповещения( @@ -4359,13 +4367,10 @@ &НаКлиенте Процедура УстановитьСертификатПослеПолученияФайлов(ПолученныеФайлы, Контекст) Экспорт - Если ПолученныеФайлы = Неопределено - Или ПолученныеФайлы.Количество() <> 2 Тогда - + Если ПолученныеФайлы = Неопределено Или ПолученныеФайлы.Количество() <> 2 Тогда ОшибкаУстановкиСертификата = НСтр("ru = 'Сертификаты не были сохранены во временную папку.'"); УстановитьСертификатУдалитьВременныйКаталогИЗавершить(Ложь, Контекст); Возврат; - КонецЕсли; ПроверитьСуществованиеКонтейнераКлючей(Новый ОписаниеОповещения( @@ -4671,9 +4676,6 @@ Иначе СостояниеОбработкиЗаявления = НСтр("ru = 'Исполнено. Сертификат не установлен.'"); Объект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.ИсполненоСертификатНеУстановлен; - Если ЗначениеЗаполнено(ОшибкаУстановкиСертификата) Тогда - СостояниеОбработкиЗаявления = СостояниеОбработкиЗаявления + Символы.ПС + ОшибкаУстановкиСертификата; - КонецЕсли; КонецЕсли; ЗаписатьЗаявление(); @@ -4704,6 +4706,10 @@ // Приложение 2. Формат названия субъекта федерации. // Из раздела "Справочник кодов регионов". + Если ПустаяСтрока(КодРегиона) Тогда + ВызватьИсключение НСтр("ru = 'Не указан регион РФ.'"); + КонецЕсли; + ИменаВсехРегионовРФ = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПолучитьМакет( "ИменаРегионовРФ"); @@ -4878,10 +4884,6 @@ Доступность = Истина; ОписаниеОшибки = ""; Если Не ОтветСервиса.Выполнено Тогда - Если ОтветСервиса.Свойство("КодОшибки") - И ОтветСервиса.КодОшибки = "ПользовательОтменилДействие" Тогда - Возврат; - КонецЕсли; ОписаниеОшибки = ОтветСервиса.ОписаниеОшибки; Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда ОписаниеОшибки = НСтр("ru = 'Сервис облачной подписи сообщил, что действие не выполнено.'"); diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl index 933f768b4..c98d8c633 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl @@ -17,7 +17,7 @@ // 4. Подсистема Интернет поддержка пользователей - для подключения к сервисам 1С. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЗаявлениеНаВыпускСертификатаДоступно() Экспорт @@ -51,8 +51,8 @@ // Параметры: // Объект - СправочникОбъект.СертификатыКлючейЭлектроннойПодписиИШифрования - сертификат. // Элементы - ЭлементыФормы - элементы формы, где: -// * ФормаПоказатьЗаявлениеПоКоторомуБылПолученСертификат - ПолеФормы -. -// * ПоказатьЗаявлениеПоКоторомуБылПолученСертификат - ПолеФормы -. +// * ФормаПоказатьЗаявлениеПоКоторомуБылПолученСертификат - ПолеФормы +// * ПоказатьЗаявлениеПоКоторомуБылПолученСертификат - ПолеФормы // Процедура ПриСозданииНаСервереПриЧтенииНаСервере(Объект, Элементы) Экспорт @@ -68,6 +68,9 @@ КонецПроцедуры +// Параметры: +// ЭлементУсловногоОформления - ЭлементУсловногоОформленияКомпоновкиДанных +// Процедура УстановитьУсловноеОформлениеСпискаСертификатов(ЭлементУсловногоОформления) Экспорт СписокСостояний = Новый СписокЗначений; @@ -107,7 +110,7 @@ КонецПроцедуры // Параметры: -// НеРедактируемыеРеквизиты - Массив - . +// НеРедактируемыеРеквизиты - Массив // Процедура РеквизитыНеРедактируемыеВГрупповойОбработке(НеРедактируемыеРеквизиты) Экспорт @@ -116,6 +119,9 @@ КонецПроцедуры +// Параметры: +// Гражданство - СправочникСсылка.СтраныМира +// Функция ГражданствоСвойства(Гражданство) Экспорт Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Гражданство, @@ -260,28 +266,14 @@ ИначеЕсли ИмяРеквизита = "ЮридическийАдрес" Или ИмяРеквизита = "ФактическийАдрес" Тогда - ТекстОшибки = ОшибкиПроверкиАдреса(ЗначениеРеквизита); - Если ПустаяСтрока(ТекстОшибки) Тогда + ТекстСообщения = ОшибкиПроверкиАдреса(ЗначениеРеквизита); + Если ПустаяСтрока(ТекстСообщения) Тогда ПродолжитьПриОшибке = Истина; - ТекстОшибки = ПроверитьАдрес(ЗначениеРеквизита); - КонецЕсли; - Если Не ПустаяСтрока(ТекстОшибки) Тогда - Если СтрНайти(ТекстНезаполненного, "%1") > 0 Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстНезаполненного, ТекстОшибки); - Иначе - ТекстСообщения = ТекстНезаполненного + ". " + ТекстОшибки; - КонецЕсли; + ТекстСообщения = ПроверитьАдрес(ЗначениеРеквизита); КонецЕсли; ИначеЕсли ИмяРеквизита = "Телефон" Тогда - - ТекстОшибки = ОшибкиПроверкиТелефона(ЗначениеРеквизита); - Если Не ПустаяСтрока(ТекстОшибки) Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстНезаполненного, ТекстОшибки); - КонецЕсли; - + ТекстСообщения = ОшибкиПроверкиТелефона(ЗначениеРеквизита); ИначеЕсли ИмяРеквизита = "СтраховойНомерПФР" Тогда РегламентированныеДанныеКлиентСервер.СтраховойНомерПФРСоответствуетТребованиям( ЗначениеРеквизита, ТекстСообщения); @@ -407,6 +399,10 @@ ТекстСообщения = ""; ТелефонСтруктура = МодульУправлениеКонтактнойИнформацией.СведенияОТелефоне(ТелефонXML); + Если СтрДлина(ТелефонСтруктура.Представление) > 24 Тогда + Возврат НСтр("ru = 'Номер телефона, включая добавочный, не может быть длиннее 24 символов.'"); + КонецЕсли; + // Проверка, что телефон российский. Если СтрЗаменить(ТелефонСтруктура.КодСтраны, "+", "") <> "7" Тогда Возврат ТекстСообщения + НСтр("ru = 'Код страны не российский (должен быть ""7"")'"); diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl index 976a6b233..bd1c5d088 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl @@ -125,10 +125,11 @@ // Инициализирует весь объект. // // Параметры: -// Источник - Строка, УникальныйИдентификатор - адрес объекта-источника во временном хранилище или данные. +// Источник - Строка +// - УникальныйИдентификатор - адрес объекта-источника во временном хранилище или данные. // // Возвращаемое значение: -// ОбработкаОбъект - ИнтерактивноеИзменениеВыгрузки. +// ОбработкаОбъект.ИнтерактивноеИзменениеВыгрузки - ИнтерактивноеИзменениеВыгрузки. // Функция ИнициализироватьЭтотОбъект(Знач Источник = "") Экспорт @@ -168,7 +169,8 @@ // Сохраняет данные этого объекта во временном хранилище. // // Параметры: -// АдресХранилища - Строка, УникальныйИдентификатор - идентификатор формы хранилища или адрес для помещения. +// АдресХранилища - Строка +// - УникальныйИдентификатор - идентификатор формы хранилища или адрес для помещения. // // Возвращаемое значение: // Строка - адрес сохраненного. @@ -190,13 +192,14 @@ // Опирается на значения реквизитов "УзелИнформационнойБазы", "ДополнительнаяРегистрация". // // Параметры: -// АдресСохраненияСхемы - Строка, УникальныйИдентификатор - адрес временного хранилища для сохранения схемы +// АдресСохраненияСхемы - Строка +// - УникальныйИдентификатор - адрес временного хранилища для сохранения схемы // компоновки. // // Возвращаемое значение: -// Структура - поля: -// * Настройки - НастройкиКомпоновкиДанных - Настройки компоновщика. -// * СхемаКомпоновки - СхемаКомпоновкиДанных - Схема компоновки. +// Структура: +// * Настройки - НастройкиКомпоновкиДанных - настройки компоновщика. +// * СхемаКомпоновки - СхемаКомпоновкиДанных - схема компоновки. // Функция КомпоновщикНастроекОбщегоОтбора(АдресСохраненияСхемы = Неопределено) Экспорт @@ -221,7 +224,8 @@ // или ссылка на группу. // Представление - Строка - представление объекта в отборе. // Отбор - ОтборКомпоновкиДанных - отбор компоновки для заполнения. -// АдресСохраненияСхемы - Строка, УникальныйИдентификатор - адрес временного хранилища для сохранения схемы +// АдресСохраненияСхемы - Строка +// - УникальныйИдентификатор - адрес временного хранилища для сохранения схемы // компоновки. // // Возвращаемое значение: @@ -320,7 +324,7 @@ // Параметры: // ЭлементыПриемника - КоллекцияЭлементовОтбораКомпоновкиДанных - приемник. // ЭлементыИсточника - КоллекцияЭлементовОтбораКомпоновкиДанных - источник. -// СоответствиеПолей - Соответствие - определяет состав заменяемых полей отбора. +// СоответствиеПолей - Соответствие - определяет состав заменяемых полей отбора: // * Ключ - исходный путь к данным поля. // * Значение - путь для результата. // Например для замены полей типа. @@ -365,8 +369,8 @@ // Представление - Строка - параметр для поиска. // // Возвращаемое значение: -// ЭлементСписка - найденный элемент. -// Неопределено - если элемент не найден. +// - ЭлементСпискаЗначений - найденный элемент. +// - Неопределено - если элемент не найден. // Функция НайтиПоПредставлениюЭлементСписка(СписокЗначений, Представление) Для Каждого ЭлементСписка Из СписокЗначений Цикл @@ -437,7 +441,8 @@ // Представление - Строка - представление восстанавливаемых настроек. // Варианты - Массив - если указано, то фильтруем восстанавливаемые настройки по вариантам // 0 - без отбора, 1 - отбор всех документов, 2 - подробный, 3 - сценарий узла. -// АдресХранилищаФормы - Строка, УникальныйИдентификатор - необязательный адрес для сохранения. +// АдресХранилищаФормы - Строка +// - УникальныйИдентификатор - необязательный адрес для сохранения. // // Возвращаемое значение: // Булево - Истина - успешно восстановлено, Ложь - настройка не найдена. @@ -521,7 +526,8 @@ // Опирается на текущее значение реквизита "УзелИнформационнойБазы". // // Параметры: -// ПолноеИмяМетаданных - Строка, ДеревоЗначений- имя таблицы (например "Справочник.Валюты") или имя +// ПолноеИмяМетаданных - Строка +// - ДеревоЗначений - имя таблицы (например "Справочник.Валюты") или имя // предопределенной группы // (например "ВсеДокументы") или дерево значений, описывающее группу. // @@ -655,11 +661,12 @@ // ОграничиватьИспользованиеОтбором - Булево - флаг того, что компоновка будет инициализирована только // для отбора элементов выгрузки. // -// АдресСохраненияСхемы - Строка, УникальныйИдентификатор - адрес временного хранилища для сохранения схемы +// АдресСохраненияСхемы - Строка +// - УникальныйИдентификатор - адрес временного хранилища для сохранения схемы // компоновки. // // Возвращаемое значение: -// Структура - поля: +// Структура: // * ТаблицаМетаданныхСоставаУзла - ТаблицаЗначений - описание состава узла. // * СхемаКомпоновки - СхемаКомпоновкиДанных - инициированное значение. // * КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - инициированное значение. diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl index fe653e37e..b00eaeafd 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl @@ -54,6 +54,8 @@ Возврат; // Не ссылка КонецЕсли; + ИмяОткрываемойСтраницы = РаскодированнаяСтрока(ИмяОткрываемойСтраницы); + Если СтрНайти(ИмяОткрываемойСтраницы, СтандартныйПрефикс) > 0 Тогда ИмяОткрываемойСтраницы = СтрЗаменить(ИмяОткрываемойСтраницы, СтандартныйПрефикс, ""); Если СтрНачинаетсяС(ИмяОткрываемойСтраницы, "#") Тогда @@ -341,7 +343,9 @@ &НаСервере Процедура РазместитьСтраницыПакета(ПакетСтраниц, ФайлыПакета) - ФайлыПакета.Картинки.Колонки.Добавить("Адрес", Новый ОписаниеТипов("Строка")); + + Колонка = ФайлыПакета.Картинки.Колонки; // КолонкаТаблицыЗначений + Колонка.Добавить("Адрес", Новый ОписаниеТипов("Строка")); // Регистрация картинок и ссылок на страницы встроенной справки. Для Каждого ВебСтраница Из ФайлыПакета.ВебСтраницы Цикл @@ -433,4 +437,11 @@ Возврат СтрокаДоТочки; КонецФункции +&НаСервере +Функция РаскодированнаяСтрока(Строка) + + Возврат РаскодироватьСтроку(Строка, СпособКодированияСтроки.КодировкаURL); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl index 805b65283..8ec72b8e9 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl @@ -155,6 +155,7 @@ // // Параметры: // ОбработкаДляЗагрузкиДанных - ОбработкаОбъект.КонвертацияОбъектовXDTO - обработка для загрузки в COM-соединении. +// Процедура ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных = Неопределено) Экспорт ПолеОбработкаДляЗагрузкиДанных = ОбработкаДляЗагрузкиДанных; @@ -174,6 +175,11 @@ ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); КомпонентыОбмена.XMLСхема = ОбменДаннымиXDTOСервер.ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена); + ОбменДаннымиXDTOСервер.ВключитьПространствоИмен( + КомпонентыОбмена, + ОбменДаннымиXDTOСервер.СхемаРасширенияФормата(КомпонентыОбмена.УзелКорреспондента), + "ext"); + Если Не КомпонентыОбмена.ТолькоНастройкиXDTO Тогда КомпонентыОбмена.МенеджерОбмена = ОбменДаннымиXDTOСервер.МенеджерОбменаВерсииФормата( @@ -275,7 +281,8 @@ // Данные загружаются в информационную базу. // // Параметры: -// ПараметрыЗагрузки - Структура, Неопределено - служебный параметр. Не предназначен для использования. +// ПараметрыЗагрузки - Структура +// - Неопределено - служебный параметр. Не предназначен для использования. // Процедура ВыполнитьЗагрузкуДанных(ПараметрыЗагрузки = Неопределено) Экспорт @@ -296,7 +303,6 @@ КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации; КомпонентыОбмена.ВедениеПротоколаДанных.ВыводВПротоколИнформационныхСообщений = ВыводВПротоколИнформационныхСообщений; - КомпонентыОбмена.СостояниеОбменаДанными.ДатаНачала = ТекущаяДатаСеанса(); ОбменДаннымиXDTOСервер.ИнициализироватьВедениеПротоколаОбмена(КомпонентыОбмена, ИмяФайлаПротоколаОбмена); @@ -390,13 +396,12 @@ // Выполняет загрузку данных из файла сообщения обмена в Информационную Базу только заданных типов объектов. // // Параметры: -// ТаблицыДляЗагрузки - Массив - массив типов, которые необходимо загрузить из сообщения обмена; элемент массива - Строка -// Например, для загрузки из сообщения обмена только элементов справочника Контрагенты: -// ТаблицыДляЗагрузки = Новый Массив; -// ТаблицыДляЗагрузки.Добавить("СправочникСсылка.Контрагенты"); -// -// Список всех типов, которые содержаться в текущем сообщении обмена -// можно получить вызовом процедуры ВыполнитьАнализСообщенияОбмена(). +// ТаблицыДляЗагрузки - Массив из Строка - массив типов, которые необходимо загрузить из сообщения обмена. +// Например, для загрузки из сообщения обмена только элементов справочника "Демо: Контрагенты": +// ТаблицыДляЗагрузки = Новый Массив; +// ТаблицыДляЗагрузки.Добавить("СправочникСсылка._ДемоКонтрагенты"); +// Список всех типов, которые содержаться в текущем сообщении обмена, +// можно получить вызовом процедуры ВыполнитьАнализСообщенияОбмена(). // Процедура ВыполнитьЗагрузкуДанныхВИнформационнуюБазу(ТаблицыДляЗагрузки) Экспорт @@ -407,8 +412,6 @@ РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; - КомпонентыОбмена.СостояниеОбменаДанными.ДатаНачала = ТекущаяДатаСеанса(); - ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена); Отказ = Ложь; @@ -446,7 +449,10 @@ ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Ложь); // Запись в журнале регистрации. - СтрокаСообщения = НСтр("ru = '%1, %2; Обработано %3 объектов'", ОбщегоНазначения.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Выполняемое действие: %1; + |Статус завершения: %2; + |Обработано объектов: %3.'", + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, @@ -465,7 +471,7 @@ // - собирается информация о типах объектов и их количестве. // // Параметры: -// ПараметрыАнализа - Структура - Не используется, оставлен для целей совместимости. +// ПараметрыАнализа - Структура - не используется, оставлен для целей совместимости. // Процедура ВыполнитьАнализСообщенияОбмена(ПараметрыАнализа = Неопределено) Экспорт @@ -486,9 +492,6 @@ Возврат; КонецЕсли; - // дата начала анализа - КомпонентыОбмена.СостояниеОбменаДанными.ДатаНачала = ТекущаяДатаСеанса(); - ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена); Отказ = Ложь; @@ -532,7 +535,7 @@ Исключение СтрокаСообщения = НСтр("ru = 'Ошибка при анализе данных: %1'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ОписаниеОшибки()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения,,,,,Истина); КонецПопытки; @@ -545,13 +548,12 @@ // Выполняет загрузку данных из файла сообщения обмена в Таблицу значений только заданных типов объектов. // // Параметры: -// ТаблицыДляЗагрузки - Массив - массив типов, которые необходимо загрузить из сообщения обмена; элемент массива - Строка -// Например, для загрузки из сообщения обмена только элементов справочника Контрагенты: -// ТаблицыДляЗагрузки = Новый Массив; -// ТаблицыДляЗагрузки.Добавить("СправочникСсылка.Контрагенты"); -// -// Список всех типов, которые содержаться в текущем сообщении обмена -// можно получить вызовом процедуры ВыполнитьАнализСообщенияОбмена(). +// ТаблицыДляЗагрузки - Массив из Строка - массив типов, которые необходимо загрузить из сообщения обмена. +// Например, для загрузки из сообщения обмена только элементов справочника "Демо: Контрагенты": +// ТаблицыДляЗагрузки = Новый Массив; +// ТаблицыДляЗагрузки.Добавить("СправочникСсылка._ДемоКонтрагенты"); +// Список всех типов, которые содержаться в текущем сообщении обмена, +// можно получить вызовом процедуры ВыполнитьАнализСообщенияОбмена(). // Процедура ВыполнитьЗагрузкуДанныхВТаблицуЗначений(ТаблицыДляЗагрузки) Экспорт @@ -576,7 +578,6 @@ Возврат; КонецЕсли; - КомпонентыОбмена.СостояниеОбменаДанными.ДатаНачала = ТекущаяДатаСеанса(); КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу = Ложь; // Инициализируем таблицы данных сообщения обмена. @@ -612,7 +613,6 @@ КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации; КомпонентыОбмена.ВедениеПротоколаДанных.ВыводВПротоколИнформационныхСообщений = ВыводВПротоколИнформационныхСообщений; - КомпонентыОбмена.СостояниеОбменаДанными.ДатаНачала = ТекущаяДатаСеанса(); ОбменДаннымиXDTOСервер.ИнициализироватьВедениеПротоколаОбмена(КомпонентыОбмена, ИмяФайлаПротоколаОбмена); diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index 0fb5fe10e..cd61436a3 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -260,7 +260,7 @@ // конвертации свойств. // ИмяПКО - Строка - имя правила конвертации, согласно которому осуществляется выгрузка. // УзелСсылки - ЗаписьXML - xml-узел ссылки объекта приемника. -// ТолькоПолучитьУзелСсылки - Булево - Если Истина, то выгрузка объекта не производится, только формируется +// ТолькоПолучитьУзелСсылки - Булево - если Истина, то выгрузка объекта не производится, только формируется // xml-узел ссылки. // ПКО - СтрокаТаблицыЗначений - строка таблицы правил конвертации. // ВыгружатьСсылкиУПодчиненныхОбъектов - Булево - если Истина то выгружаются ссылки у подчиненных объектов. @@ -483,7 +483,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ОписаниеОшибки(), ПКО, Источник, НСтр("ru = 'ПередКонвертациейОбъекта (глобальный)'")); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, НСтр("ru = 'ПередКонвертациейОбъекта (глобальный)'")); КонецПопытки; Если Отказ Тогда // Отказ от дальнейшей обработки правила. @@ -512,7 +512,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ОписаниеОшибки(), ПКО, Источник, "ПередВыгрузкойОбъекта"); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ПередВыгрузкойОбъекта"); КонецПопытки; Если Отказ Тогда // Отказ от дальнейшей обработки правила. @@ -887,7 +887,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(42, ОписаниеОшибки(), ПКО, Источник, "ПриВыгрузкеОбъекта"); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(42, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ПриВыгрузкеОбъекта"); КонецПопытки; Если Отказ Тогда // Отказ от записи объекта в файл. @@ -965,7 +965,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(43, ОписаниеОшибки(), ПКО, Источник, "ПослеВыгрузкиОбъекта"); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(43, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ПослеВыгрузкиОбъекта"); КонецПопытки; Если Отказ Тогда // Отказ от записи объекта в файл. @@ -1064,7 +1064,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(79, ОписаниеОшибки(), ПКО, Источник, "ЕстьОбработчикПослеВыгрузкиВФайл"); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(79, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ЕстьОбработчикПослеВыгрузкиВФайл"); КонецПопытки; КонецЕсли; @@ -1268,30 +1268,30 @@ // // Параметры: // Правило - СтрокаТаблицыЗначений - ссылка на правило выгрузки данных: -// * Включить - Булево - -// * Имя - Произвольный - -// * Наименование - Произвольный - -// * Порядок - Произвольный - -// * СпособОтбораДанных - Произвольный - -// * ОбъектВыборки - Произвольный - -// * ОбъектВыборкиМетаданные - Произвольный - -// * ПравилоКонвертации - Произвольный - -// * ПередОбработкой - Произвольный - -// * ИмяОбработчикаПередОбработкой - Произвольный - -// * ПослеОбработки - Произвольный - -// * ИмяОбработчикаПослеОбработки - Произвольный - -// * ПередВыгрузкой - Произвольный - -// * ИмяОбработчикаПередВыгрузкой - Произвольный - -// * ПослеВыгрузки - Произвольный - -// * ИмяОбработчикаПослеВыгрузки - Произвольный - -// * ИспользоватьОтбор - Булево - -// * НастройкиПостроителя - Произвольный - -// * ИмяОбъектаДляЗапроса - Произвольный - -// * ИмяОбъектаДляЗапросаРегистра - Произвольный - -// * ИмяТипаПриемника - Произвольный - -// * НеВыгружатьОбъектыСозданныеВБазеПриемнике - Булево - -// * СсылкаНаУзелОбмена - Произвольный - -// * СинхронизироватьПоИдентификатору - Булево - +// * Включить - Булево +// * Имя - Произвольный +// * Наименование - Произвольный +// * Порядок - Произвольный +// * СпособОтбораДанных - Произвольный +// * ОбъектВыборки - Произвольный +// * ОбъектВыборкиМетаданные - Произвольный +// * ПравилоКонвертации - Произвольный +// * ПередОбработкой - Произвольный +// * ИмяОбработчикаПередОбработкой - Произвольный +// * ПослеОбработки - Произвольный +// * ИмяОбработчикаПослеОбработки - Произвольный +// * ПередВыгрузкой - Произвольный +// * ИмяОбработчикаПередВыгрузкой - Произвольный +// * ПослеВыгрузки - Произвольный +// * ИмяОбработчикаПослеВыгрузки - Произвольный +// * ИспользоватьОтбор - Булево +// * НастройкиПостроителя - Произвольный +// * ИмяОбъектаДляЗапроса - Произвольный +// * ИмяОбъектаДляЗапросаРегистра - Произвольный +// * ИмяТипаПриемника - Произвольный +// * НеВыгружатьОбъектыСозданныеВБазеПриемнике - Булево +// * СсылкаНаУзелОбмена - Произвольный +// * СинхронизироватьПоИдентификатору - Булево // Процедура ВыгрузитьДанныеПоПравилу(Правило) Экспорт @@ -1334,7 +1334,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОписаниеОшибки(), Правило.Имя, "ПередОбработкойВыгрузкиДанных"); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПередОбработкойВыгрузкиДанных"); КонецПопытки; @@ -1452,7 +1452,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), Правило.Имя, "ПослеОбработкиВыгрузкиДанных"); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; @@ -1594,7 +1594,8 @@ // // Параметры: // Приемник - ЗаписьXML - xml-узел объекта приемника. -// Тип - Строка, Массив из Строка - выгружаемый одиночный тип, или список выгружаемых строковых типов. +// Тип - Строка +// - Массив из Строка - выгружаемый одиночный тип, или список выгружаемых строковых типов. // СписокАтрибутов - Структура - ключ содержит имя атрибута. // Процедура ВыгрузитьИнформациюОТипах(Приемник, Тип, СписокАтрибутов = Неопределено) Экспорт @@ -1622,9 +1623,10 @@ // Создает в файле обмена запись об удалении объекта. // // Параметры: -// Ссылка - СправочникСсылка, ДокументСсылка - удаляемый объект. -// ТипПриемника - Строка - Содержит строковое представление типа приемника. -// ТипИсточника - Строка - Содержит строковое представление типа источника. +// Ссылка - СправочникСсылка +// - ДокументСсылка - удаляемый объект. +// ТипПриемника - Строка - содержит строковое представление типа приемника. +// ТипИсточника - Строка - содержит строковое представление типа источника. // Процедура ЗаписатьВФайлУдалениеОбъекта(Ссылка, Знач ТипПриемника, Знач ТипИсточника) Экспорт @@ -1644,7 +1646,8 @@ // Регистрирует объект, созданный при выгрузке. // // Параметры: -// Ссылка - СправочникСсылка, ДокументСсылка - регистрируемый объект. +// Ссылка - СправочникСсылка +// - ДокументСсылка - регистрируемый объект. // Процедура ЗарегистрироватьОбъектСозданныйПриВыгрузке(Ссылка) Экспорт @@ -1686,7 +1689,7 @@ // Признак того, что это загрузка в информационную базу. // // Возвращаемое значение: -// Булево - Признак режима загрузки данных. +// Булево - признак режима загрузки данных. // Функция РежимЗагрузкиДанныхВИнформационнуюБазу() Экспорт @@ -1716,8 +1719,9 @@ // Записывает объект в информационную базу. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект - записываемый объект. -// Тип - Строка - Тип объекта строкой. +// Объект - СправочникОбъект +// - ДокументОбъект - записываемый объект. +// Тип - Строка - тип объекта строкой. // ЗаписатьОбъект - Булево - признак того что объект был записан. // ОтправкаНазад - Булево - признак того что состояние элемента данных в этой информационной // базе должно быть передано в информационную базу корреспондента. @@ -1792,7 +1796,7 @@ // // Параметры: // Объект - ДокументОбъект - документ для отмены проведения. -// Тип - Строка - Тип объекта строкой. +// Тип - Строка - тип объекта строкой. // ЗаписатьОбъект - булево - признак того что объект был записан. // Процедура ОтменитьПроведениеОбъектаВИБ(Объект, Тип, ЗаписатьОбъект = Ложь) Экспорт @@ -1844,9 +1848,10 @@ // Устанавливает пометку удаления. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект - объект для установки пометки. -// ПометкаУдаления - Булево - Флаг пометки удаления. -// ИмяТипаОбъекта - Строка - Тип объекта строкой. +// Объект - СправочникОбъект +// - ДокументОбъект - объект для установки пометки. +// ПометкаУдаления - Булево - флаг пометки удаления. +// ИмяТипаОбъекта - Строка - тип объекта строкой. // Процедура УстановитьПометкуУдаленияУОбъекта(Объект, ПометкаУдаления, ИмяТипаОбъекта) Экспорт @@ -1894,7 +1899,7 @@ // если не было ошибок. // // Параметры: -// Предупреждение - Строка - Текст предупреждения, который надо зарегистрировать. +// Предупреждение - Строка - текст предупреждения, который надо зарегистрировать. // Информация, предупреждения и ошибки, возникающие в процессе обмена данными регистрируются в журнале регистрации. // Процедура ЗарегистрироватьПредупреждение(Предупреждение) Экспорт @@ -2028,7 +2033,7 @@ // Функция-свойство: результат выполнения обмена данными. // // Возвращаемое значение: -// Строка - Строковое представление значения перечисления ПеречислениеСсылка.РезультатыВыполненияОбмена. +// Строка - строковое представление значения перечисления ПеречислениеСсылка.РезультатыВыполненияОбмена. // Функция РезультатВыполненияОбменаСтрокой() Экспорт @@ -2149,6 +2154,7 @@ // // Параметры: // ОбработкаДляЗагрузкиДанных - ОбработкаОбъект.КонвертацияОбъектовИнформационныхБаз в COM-соединении. +// Процедура ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных = Неопределено) Экспорт УстановитьФлагОшибки(Ложь); @@ -2477,7 +2483,10 @@ ЗафиксироватьЗавершениеЗагрузкиДанных(); // Запись в журнале регистрации. - СтрокаСообщения = НСтр("ru = '%1, %2; Обработано %3 объектов'", ОбщегоНазначения.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Выполняемое действие: %1; + |Статус завершения: %2; + |Обработано объектов: %3.'", + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, РезультатВыполненияОбмена(), Перечисления.ДействияПриОбмене.ЗагрузкаДанных, @@ -2562,7 +2571,7 @@ // // Параметры: // ПараметрыАнализа - Структура - необязательные дополнительные параметры анализа. Допустимые поля: -// * СобиратьСтатистикуКлассификаторов - Булево - Флаг того, что данные по классификаторам будут включены в +// * СобиратьСтатистикуКлассификаторов - Булево - флаг того, что данные по классификаторам будут включены в // статистику. // Под классификаторами понимаются справочники, ПВХ, планы // счетов, ПВР, у которых в ПКО установлены @@ -2730,7 +2739,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); Отказ = Истина; КонецПопытки; @@ -2819,7 +2828,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); КонецПопытки; КонецЕсли; @@ -2969,7 +2978,7 @@ // Параметры: // Объект - Произвольный - объект данных, для которого устанавливается свойство. // Значение - Булево - значение устанавливаемого свойства "Загрузка". -// ОтправкаНазад - Булево - +// ОтправкаНазад - Булево // Процедура УстановитьОбменДаннымиЗагрузка(Объект, Значение = Истина, Знач ОтправкаНазад = Ложь) Экспорт @@ -2980,7 +2989,7 @@ // Подготавливает строку с информацией о правилах на основании зачитанных данных из XML-файла. // // Параметры: -// ЭтоПравилаКорреспондента - Булево - +// ЭтоПравилаКорреспондента - Булево // // Возвращаемое значение: // Строка - строка с информацией о правилах. @@ -3007,6 +3016,17 @@ Формат(Конвертация.ДатаВремяСоздания, "ДЛФ =ДД")); КонецФункции +// Устанавливает имя события для записи сообщений в журнал регистрации. +// +// Параметры: +// ИмяСобытия - Строка +// +Процедура УстановитьКлючСообщенияЖурналаРегистрации(ИмяСобытия) Экспорт + + КлючСообщенияЖурналаРегистрации = ИмяСобытия; + +КонецПроцедуры + #КонецОбласти #КонецОбласти @@ -3386,7 +3406,7 @@ // Преобразует значения из строки в массив, используя указанный разделитель. // // Параметры: -// Стр - Разбираемая строка. +// Стр - разбираемая строка. // Разделитель - подстрока разделитель. // // Возвращаемое значение: @@ -3437,9 +3457,9 @@ // Разбирает строку, выделяя из нее префикс и числовую часть. // // Параметры: -// Стр - Строка. Разбираемая строка; -// ЧисловаяЧасть - Число. Переменная, в которую возвратится числовая часть строки; -// Режим - Строка. Если "Число", то возвратит числовую часть, иначе - префикс. +// Стр - Строка - разбираемая строка; +// ЧисловаяЧасть - Число - переменная, в которую возвратится числовая часть строки; +// Режим - Строка - если "Число", то возвратит числовую часть, иначе - префикс. // // Возвращаемое значение: // Префикс строки @@ -3588,7 +3608,7 @@ // ЗначениеТипа - строка с именем типа или значение Тип - типа Тип. // // Возвращаемое значение: -// ОписаниеТипов - +// ОписаниеТипов // Функция одОписаниеТипа(ЗначениеТипа) @@ -3869,8 +3889,8 @@ // // Параметры: // Объект - объект типа ЗаписьXML. -// Имя - Строка. Имя элемента. -// Значение - Значение элемента. +// Имя - Строка - имя элемента. +// Значение - значение элемента. // Процедура одЗаписатьЭлемент(Объект, Имя, Значение="") @@ -3926,8 +3946,8 @@ // Параметры: // Объект - объект типа ЧтениеXML, спозиционированный на начале элемента, // атрибут которого требуется получить. -// Тип - Значение Тип - типа Тип. Тип атрибута. -// Имя - Строка. Имя атрибута. +// Тип - значение Тип - типа Тип. Тип атрибута. +// Имя - Строка - имя атрибута. // // Возвращаемое значение: // Значение атрибута полученное по имени и приведенное к указанному типу. @@ -4172,7 +4192,7 @@ // Нет. // // Возвращаемое значение: -// структура - Объект типа структура +// структура - объект типа структура // Функция ЗаписьПротоколаОбмена(КСообщенияОбОшибках = "", Знач СтрокаОшибки = "") @@ -4245,7 +4265,7 @@ ФайлПротоколаДанных = Неопределено; СтрокаСообщения = НСтр("ru = 'Ошибка при попытке записи в файл протокола данных: %1. Описание ошибки: %2'", ОбщегоНазначения.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяФайлаПротоколаОбмена, ОписаниеОшибки()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяФайлаПротоколаОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Предупреждение); КонецПопытки; @@ -4301,9 +4321,9 @@ // Сохраняет в протокол выполнения (или выводит на экран) сообщения указанной структуры. // // Параметры: -// Код - Число. Код сообщения. -// СтруктураЗаписи - Структура. Структура записи протокола. -// ВзвестиФлагОшибок - Если истина, то - это сообщение об ошибке. Взводится ФлагОшибки. +// Код - Число - код сообщения. +// СтруктураЗаписи - Структура - структура записи протокола. +// ВзвестиФлагОшибок - если истина, то - это сообщение об ошибке. Взводится ФлагОшибки. // Функция ЗаписатьВПротоколВыполнения(Код = "", СтруктураЗаписи=Неопределено, @@ -4550,63 +4570,63 @@ // Возвращаемое значение: // ТаблицаЗначений - коллекция правил конвертации данных: -// * Имя - Строка - -// * Наименование - Строка - -// * Порядок - Число - -// * СинхронизироватьПоИдентификатору - Булево - -// * НеСоздаватьЕслиНеНайден - Булево - -// * НеВыгружатьОбъектыСвойствПоСсылкам - Булево - -// * ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли - Булево - -// * ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD - Булево - -// * НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике - Булево - -// * ИспользоватьБыстрыйПоискПриЗагрузке - Булево - -// * ГенерироватьНовыйНомерИлиКодЕслиНеУказан - Булево - -// * МаленькоеКоличествоОбъектов - Булево - -// * КоличествоОбращенийДляВыгрузкиСсылки - Число - -// * КоличествоЭлементовВИБ - Число - -// * СпособВыгрузки - Произвольный - -// * Источник - Произвольный - -// * Приемник - Произвольный - -// * ТипИсточника - Строка - -// * ТипПриемника - Строка - -// * ПередВыгрузкой - Произвольный - -// * ИмяОбработчикаПередВыгрузкой - Строка - -// * ПриВыгрузке - Произвольный - -// * ИмяОбработчикаПриВыгрузке - Строка - -// * ПослеВыгрузки - Произвольный - -// * ИмяОбработчикаПослеВыгрузки - Строка - -// * ПослеВыгрузкиВФайл - Произвольный - -// * ИмяОбработчикаПослеВыгрузкиВФайл - Строка - -// * ЕстьОбработчикПередВыгрузкой - Булево - -// * ЕстьОбработчикПриВыгрузке - Булево - -// * ЕстьОбработчикПослеВыгрузки - Булево - -// * ЕстьОбработчикПослеВыгрузкиВФайл - Булево - -// * ПередЗагрузкой - Произвольный - -// * ИмяОбработчикаПередЗагрузкой - Строка - -// * ПриЗагрузке - Произвольный - -// * ИмяОбработчикаПриЗагрузке - Строка - -// * ПослеЗагрузки - Произвольный - -// * ИмяОбработчикаПослеЗагрузки - Строка - -// * ПоследовательностьПолейПоиска - Произвольный - -// * ИмяОбработчикаПоследовательностьПолейПоиска - Строка - +// * Имя - Строка +// * Наименование - Строка +// * Порядок - Число +// * СинхронизироватьПоИдентификатору - Булево +// * НеСоздаватьЕслиНеНайден - Булево +// * НеВыгружатьОбъектыСвойствПоСсылкам - Булево +// * ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли - Булево +// * ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD - Булево +// * НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике - Булево +// * ИспользоватьБыстрыйПоискПриЗагрузке - Булево +// * ГенерироватьНовыйНомерИлиКодЕслиНеУказан - Булево +// * МаленькоеКоличествоОбъектов - Булево +// * КоличествоОбращенийДляВыгрузкиСсылки - Число +// * КоличествоЭлементовВИБ - Число +// * СпособВыгрузки - Произвольный +// * Источник - Произвольный +// * Приемник - Произвольный +// * ТипИсточника - Строка +// * ТипПриемника - Строка +// * ПередВыгрузкой - Произвольный +// * ИмяОбработчикаПередВыгрузкой - Строка +// * ПриВыгрузке - Произвольный +// * ИмяОбработчикаПриВыгрузке - Строка +// * ПослеВыгрузки - Произвольный +// * ИмяОбработчикаПослеВыгрузки - Строка +// * ПослеВыгрузкиВФайл - Произвольный +// * ИмяОбработчикаПослеВыгрузкиВФайл - Строка +// * ЕстьОбработчикПередВыгрузкой - Булево +// * ЕстьОбработчикПриВыгрузке - Булево +// * ЕстьОбработчикПослеВыгрузки - Булево +// * ЕстьОбработчикПослеВыгрузкиВФайл - Булево +// * ПередЗагрузкой - Произвольный +// * ИмяОбработчикаПередЗагрузкой - Строка +// * ПриЗагрузке - Произвольный +// * ИмяОбработчикаПриЗагрузке - Строка +// * ПослеЗагрузки - Произвольный +// * ИмяОбработчикаПослеЗагрузки - Строка +// * ПоследовательностьПолейПоиска - Произвольный +// * ИмяОбработчикаПоследовательностьПолейПоиска - Строка // * ПоискПоТабличнымЧастям - см. КоллекцияПоискПоТабличнымЧастям -// * ПриоритетОбъектовОбмена - Произвольный - -// * ЕстьОбработчикПередЗагрузкой - Булево - -// * ЕстьОбработчикПриЗагрузке - Булево - -// * ЕстьОбработчикПослеЗагрузки - Булево - -// * ЕстьОбработчикПоследовательностьПолейПоиска - Булево - +// * ПриоритетОбъектовОбмена - Произвольный +// * ЕстьОбработчикПередЗагрузкой - Булево +// * ЕстьОбработчикПриЗагрузке - Булево +// * ЕстьОбработчикПослеЗагрузки - Булево +// * ЕстьОбработчикПоследовательностьПолейПоиска - Булево // * Свойства - см. КоллекцияПравилаКонвертацииСвойств // * СвойстваПоиска - см. КоллекцияПравилаКонвертацииСвойств // * СвойстваОтключенные - см. КоллекцияПравилаКонвертацииСвойств -// * ЗначенияПредопределенныхДанных - Соответствие - -// * ЗначенияПредопределенныхДанныхПрочитанные - Структура - -// * Выгруженные - ТаблицаЗначений - -// * ВыгружатьПредставлениеИсточника - Булево - -// * НеЗамещать - Булево - -// * ЗапоминатьВыгруженные - Булево - -// * ВсеОбъектыВыгружены - Булево - -// * ПоляПоиска - Строка - -// * ПоляТаблицы - Строка - +// * ЗначенияПредопределенныхДанных - Соответствие +// * ЗначенияПредопределенныхДанныхПрочитанные - Структура +// * Выгруженные - ТаблицаЗначений +// * ВыгружатьПредставлениеИсточника - Булево +// * НеЗамещать - Булево +// * ЗапоминатьВыгруженные - Булево +// * ВсеОбъектыВыгружены - Булево +// * ПоляПоиска - Строка +// * ПоляТаблицы - Строка // Функция КоллекцияПравилаКонвертации() @@ -4616,10 +4636,10 @@ // Возвращаемое значение: // ТаблицаЗначений - коллекция правил поиска по табличным частям: -// * ИмяЭлемента - Произвольный - -// * МассивКлючевыхПолейПоиска - Массив из Произвольный - -// * КлючевыеПоляПоиска - Произвольный - -// * Валидное - Булево - +// * ИмяЭлемента - Произвольный +// * МассивКлючевыхПолейПоиска - Массив из Произвольный +// * КлючевыеПоляПоиска - Произвольный +// * Валидное - Булево // Функция КоллекцияПоискПоТабличнымЧастям() @@ -4635,46 +4655,46 @@ // Возвращаемое значение: // ТаблицаЗначений - коллекция правил конвертации свойств данных: -// * Имя - Строка - -// * Наименование - Строка - -// * Порядок - Число - -// * ЭтоГруппа - Булево - -// * ЭтоПолеПоиска - Булево - +// * Имя - Строка +// * Наименование - Строка +// * Порядок - Число +// * ЭтоГруппа - Булево +// * ЭтоПолеПоиска - Булево // * ПравилаГруппы - см. КоллекцияПравилаКонвертацииСвойств -// * ПравилаГруппыОтключенные - Произвольный - -// * ВидИсточника - Произвольный - -// * ВидПриемника - Произвольный - -// * УпрощеннаяВыгрузкаСвойства - Булево - -// * НуженУзелXMLПриВыгрузке - Булево - -// * НуженУзелXMLПриВыгрузкеГруппы - Булево - -// * ТипИсточника - Строка - -// * ТипПриемника - Строка - -// * Источник - Произвольный - -// * Приемник - Произвольный - -// * ПравилоКонвертации - Произвольный - -// * ПолучитьИзВходящихДанных - Булево - -// * НеЗамещать - Булево - -// * ЭтоОбязательноеСвойство - Булево - -// * ПередВыгрузкой - Произвольный - -// * ИмяОбработчикаПередВыгрузкой - Произвольный - -// * ПриВыгрузке - Произвольный - -// * ИмяОбработчикаПриВыгрузке - Произвольный - -// * ПослеВыгрузки - Произвольный - -// * ИмяОбработчикаПослеВыгрузки - Произвольный - -// * ПередОбработкойВыгрузки - Произвольный - -// * ИмяОбработчикаПередОбработкойВыгрузки - Произвольный - -// * ПослеОбработкиВыгрузки - Произвольный - -// * ИмяОбработчикаПослеОбработкиВыгрузки - Произвольный - -// * ЕстьОбработчикПередВыгрузкой - Булево - -// * ЕстьОбработчикПриВыгрузке - Булево - -// * ЕстьОбработчикПослеВыгрузки - Булево - -// * ЕстьОбработчикПередОбработкойВыгрузки - Булево - -// * ЕстьОбработчикПослеОбработкиВыгрузки - Булево - -// * ПриводитьКДлине - Число - -// * ИмяПараметраДляПередачи - Строка - -// * ПоискПоДатеНаРавенство - Булево - -// * ВыгружатьГруппуЧерезФайл - Булево - -// * СтрокаПолейПоиска - Произвольный - +// * ПравилаГруппыОтключенные - Произвольный +// * ВидИсточника - Произвольный +// * ВидПриемника - Произвольный +// * УпрощеннаяВыгрузкаСвойства - Булево +// * НуженУзелXMLПриВыгрузке - Булево +// * НуженУзелXMLПриВыгрузкеГруппы - Булево +// * ТипИсточника - Строка +// * ТипПриемника - Строка +// * Источник - Произвольный +// * Приемник - Произвольный +// * ПравилоКонвертации - Произвольный +// * ПолучитьИзВходящихДанных - Булево +// * НеЗамещать - Булево +// * ЭтоОбязательноеСвойство - Булево +// * ПередВыгрузкой - Произвольный +// * ИмяОбработчикаПередВыгрузкой - Произвольный +// * ПриВыгрузке - Произвольный +// * ИмяОбработчикаПриВыгрузке - Произвольный +// * ПослеВыгрузки - Произвольный +// * ИмяОбработчикаПослеВыгрузки - Произвольный +// * ПередОбработкойВыгрузки - Произвольный +// * ИмяОбработчикаПередОбработкойВыгрузки - Произвольный +// * ПослеОбработкиВыгрузки - Произвольный +// * ИмяОбработчикаПослеОбработкиВыгрузки - Произвольный +// * ЕстьОбработчикПередВыгрузкой - Булево +// * ЕстьОбработчикПриВыгрузке - Булево +// * ЕстьОбработчикПослеВыгрузки - Булево +// * ЕстьОбработчикПередОбработкойВыгрузки - Булево +// * ЕстьОбработчикПослеОбработкиВыгрузки - Булево +// * ПриводитьКДлине - Число +// * ИмяПараметраДляПередачи - Строка +// * ПоискПоДатеНаРавенство - Булево +// * ВыгружатьГруппуЧерезФайл - Булево +// * СтрокаПолейПоиска - Произвольный // Функция КоллекцияПравилаКонвертацииСвойств() @@ -4684,30 +4704,30 @@ // Возвращаемое значение: // ТаблицаЗначений - коллекция правил выгрузки данных: -// * Включить - Булево - -// * Имя - Произвольный - -// * Наименование - Произвольный - -// * Порядок - Произвольный - -// * СпособОтбораДанных - Произвольный - -// * ОбъектВыборки - Произвольный - -// * ОбъектВыборкиМетаданные - Произвольный - -// * ПравилоКонвертации - Произвольный - -// * ПередОбработкой - Произвольный - -// * ИмяОбработчикаПередОбработкой - Произвольный - -// * ПослеОбработки - Произвольный - -// * ИмяОбработчикаПослеОбработки - Произвольный - -// * ПередВыгрузкой - Произвольный - -// * ИмяОбработчикаПередВыгрузкой - Произвольный - -// * ПослеВыгрузки - Произвольный - -// * ИмяОбработчикаПослеВыгрузки - Произвольный - -// * ИспользоватьОтбор - Булево - -// * НастройкиПостроителя - Произвольный - -// * ИмяОбъектаДляЗапроса - Произвольный - -// * ИмяОбъектаДляЗапросаРегистра - Произвольный - -// * ИмяТипаПриемника - Произвольный - -// * НеВыгружатьОбъектыСозданныеВБазеПриемнике - Булево - -// * СсылкаНаУзелОбмена - Произвольный - -// * СинхронизироватьПоИдентификатору - Булево - +// * Включить - Булево +// * Имя - Произвольный +// * Наименование - Произвольный +// * Порядок - Произвольный +// * СпособОтбораДанных - Произвольный +// * ОбъектВыборки - Произвольный +// * ОбъектВыборкиМетаданные - Произвольный +// * ПравилоКонвертации - Произвольный +// * ПередОбработкой - Произвольный +// * ИмяОбработчикаПередОбработкой - Произвольный +// * ПослеОбработки - Произвольный +// * ИмяОбработчикаПослеОбработки - Произвольный +// * ПередВыгрузкой - Произвольный +// * ИмяОбработчикаПередВыгрузкой - Произвольный +// * ПослеВыгрузки - Произвольный +// * ИмяОбработчикаПослеВыгрузки - Произвольный +// * ИспользоватьОтбор - Булево +// * НастройкиПостроителя - Произвольный +// * ИмяОбъектаДляЗапроса - Произвольный +// * ИмяОбъектаДляЗапросаРегистра - Произвольный +// * ИмяТипаПриемника - Произвольный +// * НеВыгружатьОбъектыСозданныеВБазеПриемнике - Булево +// * СсылкаНаУзелОбмена - Произвольный +// * СинхронизироватьПоИдентификатору - Булево // Функция КоллекцияПравилаВыгрузкиДанных() @@ -4717,21 +4737,21 @@ // Возвращаемое значение: // ДеревоЗначений - коллекция правил очистки данных: -// * Включить - Булево - -// * ЭтоГруппа - Булево - -// * Имя - Строка - -// * Наименование - Строка - -// * Порядок - Число - -// * СпособОтбораДанных - Произвольный - -// * ОбъектВыборки - Произвольный - -// * УдалятьЗаПериод - Произвольный - -// * Непосредственно - Булево - -// * ПередОбработкой - Произвольный - -// * ИмяОбработчикаПередОбработкой - Произвольный - -// * ПослеОбработки - Произвольный - -// * ИмяОбработчикаПослеОбработки - Произвольный - -// * ПередУдалением - Произвольный - -// * ИмяОбработчикаПередУдалением - Произвольный - +// * Включить - Булево +// * ЭтоГруппа - Булево +// * Имя - Строка +// * Наименование - Строка +// * Порядок - Число +// * СпособОтбораДанных - Произвольный +// * ОбъектВыборки - Произвольный +// * УдалятьЗаПериод - Произвольный +// * Непосредственно - Булево +// * ПередОбработкой - Произвольный +// * ИмяОбработчикаПередОбработкой - Произвольный +// * ПослеОбработки - Произвольный +// * ИмяОбработчикаПослеОбработки - Произвольный +// * ПередУдалением - Произвольный +// * ИмяОбработчикаПередУдалением - Произвольный // Функция КоллекцияПравилаОчисткиДанных() @@ -4740,7 +4760,7 @@ КонецФункции // Возвращаемое значение: -// ТаблицаЗначений - стек выгрузки: +// ТаблицаЗначений: // * Ссылка - ЛюбаяСсылка - ссылка на выгружаемый объект. // Функция КоллекцияСтекВызововВыгрузкиДанных() @@ -4756,7 +4776,7 @@ // Осуществляет загрузку правила конвертации группы свойств. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // ТаблицаСвойств - см. КоллекцияПравилаКонвертацииСвойств // СвойстваОтключенные - см. КоллекцияПравилаКонвертацииСвойств // СинхронизироватьПоИдентификатору - Булево - Истина, если синхронизация выполняется по идентификатору. @@ -4946,7 +4966,7 @@ // ТаблицаСвойств - см. КоллекцияПравилаКонвертацииСвойств // СвойстваОтключенные - см. КоллекцияПравилаКонвертацииСвойств // СвойстваПКО - Структура - уточняющие сведения об изменяемых данных: -// * ИмяПКО - Строка - Имя ПКО. +// * ИмяПКО - Строка - имя ПКО. // * СинхронизироватьПоИдентификатору - Булево - признак использования алгоритма поиска по уникальному идентификатору. // * ИмяРодителя - Строка - имя родительского ПКО или ПКГС. // СтрокаПолейПоиска - Строка - свойства поиска ПКО. @@ -5115,7 +5135,7 @@ // Осуществляет загрузку правил конвертации свойств. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // ТаблицаСвойств - ТаблицаЗначений - таблица значений, содержащая ПКС. // ТаблицаПоиска - ТаблицаЗначений - таблица значений, содержащая ПКС (синхронизирующих). // @@ -5159,7 +5179,7 @@ // Осуществляет загрузку правила конвертации значений. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // Значения - соответствие значений объекта источника - строковым // представлениям объекта приемника. // ТипИсточника - значение Тип - типа Тип - тип объекта источника. @@ -5191,7 +5211,7 @@ // Осуществляет загрузку правил конвертации значений. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // Значения - соответствие значений объекта источника - строковым // представлениям объекта приемника. // ТипИсточника - значение Тип - типа Тип - тип объекта источника. @@ -5215,8 +5235,8 @@ // Осуществляет загрузку правила конвертации объектов. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьПравилоКонвертации(ПравилаОбмена, ЗаписьXML) @@ -5331,7 +5351,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеВПротокол(11, ОписаниеОшибки(), Строка(НоваяСтрока.Источник)); + ЗаписатьИнформациюОбОшибкеВПротокол(11, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Строка(НоваяСтрока.Источник)); КонецПопытки; @@ -5654,9 +5674,9 @@ КонецПроцедуры // Возвращаемое значение: -// ТаблицаЗначений - колонки: -// * КодПравилаОбмена - Строка - -// * НаименованиеПравилаОбмена - Строка - +// ТаблицаЗначений: +// * КодПравилаОбмена - Строка +// * НаименованиеПравилаОбмена - Строка // Функция РезультатыЗагрузкиИнформацииОПоляхПоиска() Возврат ТаблицаРезультатовЗагрузкиИнформацииОПоляхПоиска; @@ -5694,8 +5714,8 @@ // Осуществляет загрузку правил конвертации объектов. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьПравилаКонвертации(ПравилаОбмена, ЗаписьXML) @@ -5852,8 +5872,8 @@ // Осуществляет загрузку правил очистки данных. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьПравилаОчистки(ПравилаОбмена, ЗаписьXML) @@ -5908,8 +5928,8 @@ // Осуществляет загрузку алгоритма в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьАлгоритм(ПравилаОбмена, ЗаписьXML) @@ -5954,8 +5974,8 @@ // Осуществляет загрузку алгоритмов в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьАлгоритмы(ПравилаОбмена, ЗаписьXML) @@ -5981,8 +6001,8 @@ // Осуществляет загрузку запроса в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьЗапрос(ПравилаОбмена, ЗаписьXML) @@ -6027,8 +6047,8 @@ // Осуществляет загрузку запросов в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьЗапросы(ПравилаОбмена, ЗаписьXML) @@ -6056,7 +6076,7 @@ // Осуществляет загрузку параметров в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // Процедура ЗагрузитьПараметры(ПравилаОбмена, ЗаписьXML) @@ -6159,8 +6179,8 @@ // Осуществляет загрузку обработки в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьОбработку(ПравилаОбмена, ЗаписьXML) @@ -6206,8 +6226,8 @@ // Осуществляет загрузку внешних обработок в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьОбработки(ПравилаОбмена, ЗаписьXML) @@ -6239,7 +6259,7 @@ // Осуществляет загрузку правила выгрузки данных в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // Процедура ЗагрузитьПВД(ПравилаОбмена) @@ -6343,7 +6363,7 @@ // Осуществляет загрузку правил выгрузки данных в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // Процедура ЗагрузитьПравилаВыгрузки(ПравилаОбмена) @@ -6444,14 +6464,14 @@ // переданного объекта. // // Параметры: -// Объект - Произвольный - Объект-источник, для которого ищем правило конвертации. +// Объект - Произвольный - объект-источник, для которого ищем правило конвертации. // ИмяПравила - Строка - имя правила конвертации. // // Возвращаемое значение: // СтрокаТаблицыЗначений - ссылка на правило конвертации (строка в таблице правил): -// * Имя - Строка - -// * Наименование - Строка - -// * Источник - Строка - +// * Имя - Строка +// * Наименование - Строка +// * Источник - Строка // * Свойства - см. КоллекцияПравилаКонвертацииСвойств // Функция НайтиПравило(Объект = Неопределено, ИмяПравила = "") @@ -6478,13 +6498,36 @@ КонецФункции -Процедура ВосстановитьПравилаИзВнутреннегоФормата() Экспорт - +// Возвращаемое значение: +// Структура: +// * ВерсияФорматаХраненияПравил - Число +// * Конвертация +// * ТаблицаПравилВыгрузки - см. КоллекцияПравилаВыгрузкиДанных +// * ТаблицаПравилКонвертации - см. КоллекцияПравилаКонвертации +// * ТаблицаНастройкиПараметров +// * Алгоритмы +// * Запросы +// * Параметры +// * XMLПравила +// * СтрокаТиповДляПриемника +// +Функция СтруктураПравилКонвертации() + Если СохраненныеНастройки = Неопределено Тогда - Возврат; + Возврат Неопределено; КонецЕсли; - СтруктураПравил = СохраненныеНастройки.Получить(); + Возврат СохраненныеНастройки.Получить(); + +КонецФункции + +Процедура ВосстановитьПравилаИзВнутреннегоФормата() Экспорт + + СтруктураПравил = СтруктураПравилКонвертации(); + + Если СтруктураПравил = Неопределено Тогда + Возврат; + КонецЕсли; // Выполняем проверку на версию формата хранения правил обмена. ВерсияФорматаХраненияПравил = Неопределено; @@ -6495,8 +6538,8 @@ КонецЕсли; Конвертация = СтруктураПравил.Конвертация; - ТаблицаПравилВыгрузки = СтруктураПравил.ТаблицаПравилВыгрузки; // см. КоллекцияПравилаВыгрузкиДанных - ТаблицаПравилКонвертации = СтруктураПравил.ТаблицаПравилКонвертации; // см. КоллекцияПравилаКонвертации + ТаблицаПравилВыгрузки = СтруктураПравил.ТаблицаПравилВыгрузки; + ТаблицаПравилКонвертации = СтруктураПравил.ТаблицаПравилКонвертации; ТаблицаНастройкиПараметров = СтруктураПравил.ТаблицаНастройкиПараметров; Алгоритмы = СтруктураПравил.Алгоритмы; @@ -6542,7 +6585,7 @@ Менеджеры[СтрокаТаблицы.Источник].ПКО = СтрокаТаблицы; КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВПротокол(11, ОписаниеОшибки(), Строка(СтрокаТаблицы.Источник)); + ЗаписатьИнформациюОбОшибкеВПротокол(11, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Строка(СтрокаТаблицы.Источник)); КонецПопытки; КонецЕсли; @@ -6655,7 +6698,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(29, ОписаниеОшибки(), Правило.Имя, Объект, "ПередУдалениемОбъектаВыборки"); + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(29, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, Объект, "ПередУдалениемОбъектаВыборки"); КонецПопытки; @@ -6673,7 +6716,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(24, ОписаниеОшибки(), Правило.Имя, Объект, ""); + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(24, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, Объект, ""); КонецПопытки; @@ -6710,7 +6753,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(27, ОписаниеОшибки(), Правило.Имя, "", "ПередОбработкойПравилаОчистки"); + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(27, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "", "ПередОбработкойПравилаОчистки"); КонецПопытки; @@ -6815,7 +6858,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(28, ОписаниеОшибки(), Правило.Имя, "", "ПослеОбработкиПравилаОчистки"); + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(28, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "", "ПослеОбработкиПравилаОчистки"); КонецПопытки; @@ -6931,7 +6974,7 @@ КонецЕсли; Исключение - ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); + ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); КонецПопытки; Если Отказ Тогда @@ -7057,7 +7100,7 @@ КонецЕсли; Исключение - ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); + ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); КонецПопытки; КонецЕсли; @@ -7146,7 +7189,7 @@ Исключение - ЗП = ЗаписьПротоколаОбмена(78, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(78, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.Обработчик = "ПослеЗагрузкиПараметров"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(78, ЗП); @@ -7238,8 +7281,8 @@ // // Параметры: // Тип - тип создаваемого объекта. -// СвойстваПоиска - Структура, содержащая устанавливаемые реквизиты нового объекта. -// Объект - Объект информационной базы, созданный в результате выполнения. +// СвойстваПоиска - Структура - содержащая устанавливаемые реквизиты нового объекта. +// Объект - объект информационной базы, созданный в результате выполнения. // ЗаписыватьОбъектСразуПослеСоздания - булево. // НоваяСсылка - ссылка на созданный объект. // УстанавливатьУОбъектаВсеСвойстваПоиска - Булево. @@ -7949,7 +7992,7 @@ Иначе ВыбранныеСвойства = СтрРазделить(СтрокаИменСвойствПоиска, ", ", Ложь); - + ВременныеСвойстваПоиска = Новый Соответствие; Для Каждого ЭлементСвойств Из СвойстваПоиска Цикл @@ -8058,7 +8101,7 @@ // // Параметры: // ТипОбъекта - тип искомого объекта. -// СвойстваПоиска - структура, содержащая свойства по которым производится поиск объекта. +// СвойстваПоиска - структура - содержащая свойства по которым производится поиск объекта. // ОбъектНайден - если Ложь, то объект не найден, а создан новый. // // Возвращаемое значение: @@ -8342,7 +8385,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(73, ОписаниеОшибки(), "", "", + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(73, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "", "", ТипОбъекта, Неопределено, НСтр("ru = 'Последовательность полей поиска'")); КонецПопытки; @@ -8496,7 +8539,7 @@ Исключение - ЗП = ЗаписьПротоколаОбмена(26, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ИмяПКО = ИмяПКО; ЗП.Объект = Объект; ЗП.ТипОбъекта = ТипЗнч(Объект); @@ -8642,7 +8685,7 @@ Текст = НСтр("ru = 'Имя табличной части: %1'"); - ЗП = ЗаписьПротоколаОбмена(83, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(83, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.Объект = Объект; ЗП.ТипОбъекта = ТипЗнч(Объект); ЗП.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ИмяТабличнойЧасти); @@ -8871,7 +8914,7 @@ Исключение - ЗП = ЗаписьПротоколаОбмена(26, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ИмяПКО = ИмяПКО; ЗП.Объект = Запись; ЗП.ТипОбъекта = ТипЗнч(Запись); @@ -9428,7 +9471,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(53, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(53, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Неопределено, НСтр("ru = 'ПередЗагрузкойОбъекта (глобальный)'")); КонецПопытки; @@ -9464,7 +9507,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(19, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(19, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Неопределено, "ПередЗагрузкойОбъекта"); КонецПопытки; @@ -9541,7 +9584,7 @@ Исключение - ЗП = ЗаписьПротоколаОбмена(26, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ИмяПКО = ИмяПравила; ЗП.Источник = Источник; ЗП.Объект = Объект; @@ -9582,7 +9625,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; @@ -9635,7 +9678,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); КонецПопытки; @@ -9852,7 +9895,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(53, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(53, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Неопределено, НСтр("ru = 'ПередЗагрузкойОбъекта (глобальный)'")); КонецПопытки; @@ -9888,7 +9931,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(19, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(19, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Неопределено, "ПередЗагрузкойОбъекта"); КонецПопытки; @@ -9948,7 +9991,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; @@ -10013,7 +10056,7 @@ Исключение - ЗП = ЗаписьПротоколаОбмена(26, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ИмяПКО = ИмяПравила; ЗП.НПП = НПП; ЗП.ГНПП = ГНПП; @@ -10112,7 +10155,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); // КонецПопытки; @@ -10164,7 +10207,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; @@ -10226,7 +10269,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(54, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(54, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, НСтр("ru = 'ПослеЗагрузкиОбъекта (глобальный)'")); КонецПопытки; @@ -10251,7 +10294,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); КонецПопытки; @@ -10392,7 +10435,7 @@ Исключение - СтрокаОписанияОшибки = ОписаниеОшибки(); + СтрокаОписанияОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Если ЗаписатьОбъект Тогда // Не смогли выполнить необходимые действия для документа. @@ -10615,7 +10658,7 @@ Исключение - ЗП = ЗаписьПротоколаОбмена(48, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(48, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; ЗП.ПКГС = ПКГС.Имя + " (" + ПКГС.Наименование + ")"; @@ -10721,7 +10764,7 @@ Исключение - ЗП = ЗаписьПротоколаОбмена(49, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(49, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; ЗП.ПКГС = ПКГС.Имя + " (" + ПКГС.Наименование + ")"; @@ -10768,7 +10811,7 @@ Исключение - ЗП = ЗаписьПротоколаОбмена(66, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(66, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; ЗП.ПКГС = ПКГС.Имя + " (" + ПКГС.Наименование + ")"; @@ -11026,7 +11069,7 @@ Исключение - ЗП = ЗаписьПротоколаОбмена(49, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(49, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; ЗП.ПКГС = ПКГС.Имя + " (" + ПКГС.Наименование + ")"; @@ -11143,7 +11186,7 @@ Исключение Если КодОшибки <> 14 Тогда - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(КодОшибки, ОписаниеОшибки(), ПКО, ПКС, Источник, ""); + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(КодОшибки, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, ""); КонецЕсли; КонецПопытки; @@ -11193,7 +11236,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПередВыгрузкойСвойства", Значение); КонецПопытки; @@ -11246,7 +11289,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПриВыгрузкеСвойства", Значение); КонецПопытки; @@ -11400,7 +11443,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПослеВыгрузкиСвойства", Значение); КонецПопытки; @@ -11897,7 +11940,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПередВыгрузкойСвойства", Значение); КонецПопытки; @@ -12016,7 +12059,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПриВыгрузкеСвойства", Значение); КонецПопытки; @@ -12216,7 +12259,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПослеВыгрузкиСвойства", Значение); КонецПопытки; @@ -12396,7 +12439,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(65, ОписаниеОшибки(), Правило.Имя, НСтр("ru = 'ПередВыгрузкойОбъектаВыборки (глобальный)'"), Объект); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(65, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, НСтр("ru = 'ПередВыгрузкойОбъектаВыборки (глобальный)'"), Объект); КонецПопытки; Если Отказ Тогда @@ -12421,7 +12464,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(33, ОписаниеОшибки(), Правило.Имя, "ПередВыгрузкойОбъектаВыборки", Объект); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(33, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПередВыгрузкойОбъектаВыборки", Объект); КонецПопытки; КонецЕсли; @@ -12449,7 +12492,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(69, ОписаниеОшибки(), Правило.Имя, НСтр("ru = 'ПослеВыгрузкиОбъектаВыборки (глобальный)'"), Объект); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(69, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, НСтр("ru = 'ПослеВыгрузкиОбъектаВыборки (глобальный)'"), Объект); КонецПопытки; КонецЕсли; @@ -12469,7 +12512,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(34, ОписаниеОшибки(), Правило.Имя, "ПослеВыгрузкиОбъектаВыборки", Объект); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(34, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПослеВыгрузкиОбъектаВыборки", Объект); КонецПопытки; КонецЕсли; @@ -12654,7 +12697,7 @@ КонецЕсли; Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(76, ОписаниеОшибки(), НСтр("ru = 'ПередОтправкойИнформацииОбУдалении (конвертация)'")); + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(76, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПередОтправкойИнформацииОбУдалении (конвертация)'")); Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; @@ -12793,13 +12836,13 @@ // Возвращаемое значение: // ТаблицаЗначений - коллекция реквизитов регистрации: -// * Порядок - Число - -// * ИмяОбъекта - Строка - -// * ТипОбъектаСтрокой - Строка - -// * ИмяПланаОбмена - Строка - -// * ИмяТабличнойЧасти - Строка - -// * РеквизитыРегистрации - Строка - -// * СтруктураРеквизитовРегистрации - Структура - +// * Порядок - Число +// * ИмяОбъекта - Строка +// * ТипОбъектаСтрокой - Строка +// * ИмяПланаОбмена - Строка +// * ИмяТабличнойЧасти - Строка +// * РеквизитыРегистрации - Строка +// * СтруктураРеквизитовРегистрации - Структура // Функция ИнициализацияТаблицыРеквизитовРегистрации() @@ -12901,7 +12944,7 @@ ОбъектМД = Метаданные.НайтиПоТипу(ТипОбъекта); // Проверку выполняем только для ссылочных типов. - Если НЕ ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ОбъектМД) Тогда + Если Не ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ОбъектМД) Тогда Продолжить; КонецЕсли; @@ -12914,10 +12957,10 @@ Если ОбщегоНазначения.ЭтоЗадача(ОбъектМД) Тогда - Если НЕ (ОбъектМД.Реквизиты.Найти(Реквизит.Ключ) <> Неопределено - ИЛИ ОбъектМД.РеквизитыАдресации.Найти(Реквизит.Ключ) <> Неопределено - ИЛИ ОбменДаннымиСервер.ЭтоСтандартныйРеквизит(ОбъектМД.СтандартныеРеквизиты, Реквизит.Ключ) - ИЛИ ЭтоОбщийРеквизит(Реквизит.Ключ, ОбъектМД.ПолноеИмя(), ТаблицаОбщихРеквизитов)) Тогда + Если Не (ОбъектМД.Реквизиты.Найти(Реквизит.Ключ) <> Неопределено + Или ОбъектМД.РеквизитыАдресации.Найти(Реквизит.Ключ) <> Неопределено + Или ОбменДаннымиСервер.ЭтоСтандартныйРеквизит(ОбъектМД.СтандартныеРеквизиты, Реквизит.Ключ) + Или ЭтоОбщийРеквизит(Реквизит.Ключ, ОбъектМД.ПолноеИмя(), ТаблицаОбщихРеквизитов)) Тогда СтрокаСообщения = НСтр("ru = 'Неправильно указаны реквизиты шапки объекта ""%1"". Реквизит ""%2"" не существует.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(ОбъектМД), Реквизит.Ключ); @@ -12927,9 +12970,9 @@ Иначе - Если НЕ (ОбъектМД.Реквизиты.Найти(Реквизит.Ключ) <> Неопределено - ИЛИ ОбменДаннымиСервер.ЭтоСтандартныйРеквизит(ОбъектМД.СтандартныеРеквизиты, Реквизит.Ключ) - ИЛИ ЭтоОбщийРеквизит(Реквизит.Ключ, ОбъектМД.ПолноеИмя(), ТаблицаОбщихРеквизитов)) Тогда + Если Не (ОбъектМД.Реквизиты.Найти(Реквизит.Ключ) <> Неопределено + Или ОбменДаннымиСервер.ЭтоСтандартныйРеквизит(ОбъектМД.СтандартныеРеквизиты, Реквизит.Ключ) + Или ЭтоОбщийРеквизит(Реквизит.Ключ, ОбъектМД.ПолноеИмя(), ТаблицаОбщихРеквизитов)) Тогда СтрокаСообщения = НСтр("ru = 'Неправильно указаны реквизиты шапки объекта ""%1"". Реквизит ""%2"" не существует.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(ОбъектМД), Реквизит.Ключ); @@ -12943,7 +12986,7 @@ Иначе // Табличная часть, стандартная табличная часть, движения. - МетаТаблица = МетаТабличнаяЧастьРеквизитовРегистрацииОбъектов(ОбъектМД, СтрокаТаблицы.ИмяТабличнойЧасти); + МетаТаблица = МетаТабличнаяЧастьРеквизитовРегистрацииОбъектов(ОбъектМД, СтрокаТаблицы.ИмяТабличнойЧасти); Если МетаТаблица = Неопределено Тогда ЗаписатьВПротоколВыполнения(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Табличная часть (стандартная табличная часть, движения) ""%1"" объекта ""%2"" не существует.'"), @@ -12999,10 +13042,10 @@ КонецФункции -Функция РеквизитНайденВТабличнойЧастиРеквизитовРегистрацииОбъектов(МетаданныеТабличнойЧасти, ИмяИскомогоРеквизита) +Функция РеквизитНайденВТабличнойЧастиРеквизитовРегистрацииОбъектов(МетаданныеТаблицы, ИмяИскомогоРеквизита) МетаТест = Новый Структура("Реквизиты, СтандартныеРеквизиты, Измерения, Ресурсы"); - ЗаполнитьЗначенияСвойств(МетаТест, МетаданныеТабличнойЧасти); + ЗаполнитьЗначенияСвойств(МетаТест, МетаданныеТаблицы); ИмяКандидата = ВРег(ИмяИскомогоРеквизита); @@ -13821,62 +13864,62 @@ КонецПроцедуры // Возвращаемое значение: -// Структура - поля: -// * ВерсияФормата - Строка - -// * Ид - Строка - -// * Наименование - Строка - -// * ДатаВремяСоздания - Дата - -// * ВерсияПлатформыИсточника - Строка - -// * СинонимКонфигурацииИсточника - Строка - -// * ВерсияКонфигурацииИсточника - Строка - -// * Источник - Строка - -// * ВерсияПлатформыПриемника - Строка - -// * СинонимКонфигурацииПриемника - Строка - -// * ВерсияКонфигурацииПриемника - Строка - -// * Приемник - Строка - -// * ПослеЗагрузкиПравилОбмена - Строка - -// * ИмяОбработчикаПослеЗагрузкиПравилОбмена - Строка - -// * ПередВыгрузкойДанных - Строка - -// * ИмяОбработчикаПередВыгрузкойДанных - Строка - -// * ПередПолучениемИзмененныхОбъектов - Строка - -// * ИмяОбработчикаПередПолучениемИзмененныхОбъектов - Строка - -// * ПослеПолученияИнформацииОбУзлахОбмена - Строка - -// * ИмяОбработчикаПослеПолученияИнформацииОбУзлахОбмена - Строка - -// * ПослеВыгрузкиДанных - Строка - -// * ИмяОбработчикаПослеВыгрузкиДанных - Строка - -// * ПередОтправкойИнформацииОбУдалении - Строка - -// * ИмяОбработчикаПередОтправкойИнформацииОбУдалении - Строка - -// * ПередВыгрузкойОбъекта - Строка - -// * ИмяОбработчикаПередВыгрузкойОбъекта - Строка - -// * ПослеВыгрузкиОбъекта - Строка - -// * ИмяОбработчикаПослеВыгрузкиОбъекта - Строка - -// * ПередЗагрузкойОбъекта - Строка - -// * ИмяОбработчикаПередЗагрузкойОбъекта - Строка - -// * ПослеЗагрузкиОбъекта - Строка - -// * ИмяОбработчикаПослеЗагрузкиОбъекта - Строка - -// * ПередКонвертациейОбъекта - Строка - -// * ИмяОбработчикаПередКонвертациейОбъекта - Строка - -// * ПередЗагрузкойДанных - Строка - -// * ИмяОбработчикаПередЗагрузкойДанных - Строка - -// * ПослеЗагрузкиДанных - Строка - -// * ИмяОбработчикаПослеЗагрузкиДанных - Строка - -// * ПослеЗагрузкиПараметров - Строка - -// * ИмяОбработчикаПослеЗагрузкиПараметров - Строка - -// * ПриПолученииИнформацииОбУдалении - Строка - -// * ИмяОбработчикаПриПолученииИнформацииОбУдалении - Строка - -// * УдалятьСопоставленныеОбъектыВПриемникеПриИхУдаленииВИсточнике - Булево - +// Структура: +// * ВерсияФормата - Строка +// * Ид - Строка +// * Наименование - Строка +// * ДатаВремяСоздания - Дата +// * ВерсияПлатформыИсточника - Строка +// * СинонимКонфигурацииИсточника - Строка +// * ВерсияКонфигурацииИсточника - Строка +// * Источник - Строка +// * ВерсияПлатформыПриемника - Строка +// * СинонимКонфигурацииПриемника - Строка +// * ВерсияКонфигурацииПриемника - Строка +// * Приемник - Строка +// * ПослеЗагрузкиПравилОбмена - Строка +// * ИмяОбработчикаПослеЗагрузкиПравилОбмена - Строка +// * ПередВыгрузкойДанных - Строка +// * ИмяОбработчикаПередВыгрузкойДанных - Строка +// * ПередПолучениемИзмененныхОбъектов - Строка +// * ИмяОбработчикаПередПолучениемИзмененныхОбъектов - Строка +// * ПослеПолученияИнформацииОбУзлахОбмена - Строка +// * ИмяОбработчикаПослеПолученияИнформацииОбУзлахОбмена - Строка +// * ПослеВыгрузкиДанных - Строка +// * ИмяОбработчикаПослеВыгрузкиДанных - Строка +// * ПередОтправкойИнформацииОбУдалении - Строка +// * ИмяОбработчикаПередОтправкойИнформацииОбУдалении - Строка +// * ПередВыгрузкойОбъекта - Строка +// * ИмяОбработчикаПередВыгрузкойОбъекта - Строка +// * ПослеВыгрузкиОбъекта - Строка +// * ИмяОбработчикаПослеВыгрузкиОбъекта - Строка +// * ПередЗагрузкойОбъекта - Строка +// * ИмяОбработчикаПередЗагрузкойОбъекта - Строка +// * ПослеЗагрузкиОбъекта - Строка +// * ИмяОбработчикаПослеЗагрузкиОбъекта - Строка +// * ПередКонвертациейОбъекта - Строка +// * ИмяОбработчикаПередКонвертациейОбъекта - Строка +// * ПередЗагрузкойДанных - Строка +// * ИмяОбработчикаПередЗагрузкойДанных - Строка +// * ПослеЗагрузкиДанных - Строка +// * ИмяОбработчикаПослеЗагрузкиДанных - Строка +// * ПослеЗагрузкиПараметров - Строка +// * ИмяОбработчикаПослеЗагрузкиПараметров - Строка +// * ПриПолученииИнформацииОбУдалении - Строка +// * ИмяОбработчикаПриПолученииИнформацииОбУдалении - Строка +// * УдалятьСопоставленныеОбъектыВПриемникеПриИхУдаленииВИсточнике - Булево // Функция Конвертация() Возврат Конвертация; КонецФункции // Возвращаемое значение: -// Структура - содержит поля: -// * Имя - Строка - -// * ИмяТипа - Строка - -// * ТипСсылкиСтрокой - Строка - -// * Менеджер - СправочникМенеджер, ДокументМенеджер, РегистрСведенийМенеджер, и т.п. - -// * ОбъектМД - ОбъектМетаданныхСправочник, ОбъектМетаданныхДокумент, ОбъектМетаданныхРегистрСведений, и т.п. - +// Структура: +// * Имя - Строка +// * ИмяТипа - Строка +// * ТипСсылкиСтрокой - Строка +// * Менеджер - СправочникМенеджер, ДокументМенеджер, РегистрСведенийМенеджер, и т.п. +// * ОбъектМД - ОбъектМетаданныхСправочник, ОбъектМетаданныхДокумент, ОбъектМетаданныхРегистрСведений, и т.п. // * ПКО - СтрокаТаблицыЗначений - строка таблицы правил конвертации: // ** Свойства - см. КоллекцияПравилаКонвертацииСвойств // @@ -15427,8 +15470,9 @@ // Осуществляет загрузку правил обмена в соответствии с форматом. // // Параметры: -// Источник - ЧтениеXML, Строка - Объект, из которого осуществляется загрузка правил обмена; -// ТипИсточника - Строка - Строка, указывающая тип источника: "XMLФайл", "ЧтениеXML", "Строка". +// Источник - ЧтениеXML +// - Строка - объект, из которого осуществляется загрузка правил обмена; +// ТипИсточника - Строка - строка, указывающая тип источника: "XMLФайл", "ЧтениеXML", "Строка". // СтрокаСообщенияОбОшибке - Строка - сообщение об ошибке. // ЗагружатьТолькоЗаголовокПравил - Булево - Истина, если требуется загрузить только заголовок правил. // @@ -15742,7 +15786,7 @@ КонецЕсли; Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(75, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиПравилОбмена (конвертация)'")); + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(75, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПослеЗагрузкиПравилОбмена (конвертация)'")); Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; @@ -15813,7 +15857,7 @@ КонецЕсли; Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(77, ОписаниеОшибки(), НСтр("ru = 'ПриПолученииИнформацииОбУдалении (конвертация)'")); + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(77, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПриПолученииИнформацииОбУдалении (конвертация)'")); Отказ = Истина; Если Не ПродолжитьПриОшибке Тогда @@ -16461,7 +16505,7 @@ Исключение - ЗП = ЗаписьПротоколаОбмена(78, ОписаниеОшибки()); + ЗП = ЗаписьПротоколаОбмена(78, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.Обработчик = "ПослеЗагрузкиПараметров"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(78, ЗП, Истина); @@ -16522,13 +16566,13 @@ // Возвращаемое значение: // Структура - параметры чтения сообщения обмена: -// * НомерСообщения - Число - -// * НомерПринятого - Число - -// * Отправитель - ПланОбменаСсылка - -// * ОтправительОбъект - ПланОбменаОбъект - -// * СообщениеБылоПринятоРанее - Булево - -// * АнализДанных - Булево - -// * ВосстановленаРезервнаяКопия - Булево - +// * НомерСообщения - Число +// * НомерПринятого - Число +// * Отправитель - ПланОбменаСсылка +// * ОтправительОбъект - ПланОбменаОбъект +// * СообщениеБылоПринятоРанее - Булево +// * АнализДанных - Булево +// * ВосстановленаРезервнаяКопия - Булево // Функция ОписаниеЧтенияСообщения() @@ -16547,7 +16591,7 @@ // Параметры: // ЧтениеСообщения - см. ОписаниеЧтенияСообщения -// АнализДанных - Булево - +// АнализДанных - Булево // Процедура ПрочитатьДанныеПоОбмену(ЧтениеСообщения, АнализДанных) @@ -16651,7 +16695,7 @@ КонецЕсли; Исключение - ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ОписаниеОшибки(), НСтр("ru = 'ПослеПолученияИнформацииОбУзлахОбмена (конвертация)'")); + ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПослеПолученияИнформацииОбУзлахОбмена (конвертация)'")); КонецПопытки; КонецЕсли; @@ -16818,12 +16862,14 @@ Для Каждого Реквизит Из МетаданныеТЧ.Реквизиты Цикл + ИмяРеквизита = Реквизит.Имя; + ПКГС = ТаблицаПКГС.Добавить(); ПКГС.ЭтоГруппа = Ложь; ПКГС.ВидИсточника = "Реквизит"; ПКГС.ВидПриемника = "Реквизит"; - ПКГС.Источник = Реквизит.Имя; - ПКГС.Приемник = Реквизит.Имя; + ПКГС.Источник = ИмяРеквизита; + ПКГС.Приемник = ИмяРеквизита; КонецЦикла; @@ -17076,7 +17122,7 @@ КонецЦикла; // Получаем типы объектов метаданных, которые будут участвовать в выгрузке. - ТаблицаПравилВыгрузкиИспользуемые = ТаблицаПравилВыгрузки.Скопировать(Новый Структура("Включить", Истина)); + ТаблицаПравилВыгрузкиИспользуемые = КоллекцияПравилаВыгрузкиДанных().Скопировать(Новый Структура("Включить", Истина)); ТаблицаПравилВыгрузкиИспользуемые.Индексы.Добавить("ОбъектВыборкиМетаданные"); Для Каждого СтрокаТаблицы Из ТаблицаПравилВыгрузкиИспользуемые Цикл @@ -17109,7 +17155,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ОписаниеОшибки(), НСтр("ru = 'ПередВыгрузкойДанных (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПередВыгрузкойДанных (конвертация)'")); Отказ = Истина; КонецПопытки; @@ -17243,7 +17289,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ОписаниеОшибки(), НСтр("ru = 'ПослеВыгрузкиДанных (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПослеВыгрузкиДанных (конвертация)'")); КонецПопытки; КонецЕсли; @@ -17313,7 +17359,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(175, ОписаниеОшибки(), НСтр("ru = 'ПередПолучениемИзмененныхОбъектов (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(175, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПередПолучениемИзмененныхОбъектов (конвертация)'")); Возврат; КонецПопытки; @@ -17375,18 +17421,21 @@ ВыборкаИзменений.Сбросить(); + ЕстьПолеСчетчикЗагруженныхОбъектовВнешнееСоединение = Ложь; Если ЭтоОбменЧерезВнешнееСоединение() Тогда + РеквизитыОбработкиЗагрузки = ОбработкаДляЗагрузкиДанных().Метаданные().Реквизиты; // В базе-корреспонденте может не быть этого реквизита обработки. - Если ОбработкаДляЗагрузкиДанных().Метаданные().Реквизиты.Найти("КоличествоОбъектовКЗагрузкеВнешнееСоединение") <> Неопределено Тогда + Если РеквизитыОбработкиЗагрузки.Найти("КоличествоОбъектовКЗагрузкеВнешнееСоединение") <> Неопределено Тогда ОбработкаДляЗагрузкиДанных().КоличествоОбъектовКЗагрузкеВнешнееСоединение = КоличествоОбъектовКВыгрузке; КонецЕсли; + ЕстьПолеСчетчикЗагруженныхОбъектовВнешнееСоединение = РеквизитыОбработкиЗагрузки.Найти("СчетчикЗагруженныхОбъектовВнешнееСоединение") <> Неопределено; КонецЕсли; Пока ВыборкаИзменений.Следующий() Цикл Если ЭтоОбменЧерезВнешнееСоединение() Тогда // В базе-корреспонденте может не быть этого реквизита обработки. - Если ОбработкаДляЗагрузкиДанных().Метаданные().Реквизиты.Найти("СчетчикЗагруженныхОбъектовВнешнееСоединение") <> Неопределено Тогда + Если ЕстьПолеСчетчикЗагруженныхОбъектовВнешнееСоединение Тогда Инкремент(ОбработкаДляЗагрузкиДанных().СчетчикЗагруженныхОбъектовВнешнееСоединение); КонецЕсли; КонецЕсли; @@ -17432,7 +17481,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПравилоВыгрузкиДанныхПредыдущее.Имя, "ПослеОбработкиВыгрузкиДанных"); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПравилоВыгрузкиДанныхПредыдущее["Имя"], "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; КонецЕсли; @@ -17488,7 +17537,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОписаниеОшибки(), ПравилоВыгрузкиДанных.Имя, "ПередОбработкойВыгрузкиДанных"); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПравилоВыгрузкиДанных.Имя, "ПередОбработкойВыгрузкиДанных"); КонецПопытки; @@ -17594,7 +17643,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПравилоВыгрузкиДанных.Имя, "ПослеОбработкиВыгрузкиДанных"); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПравилоВыгрузкиДанных.Имя, "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; КонецЕсли; @@ -17631,7 +17680,7 @@ КонецЕсли; КонецЕсли; - ВызватьИсключение(НСтр("ru = 'Ошибка при отправке данных'") + ": " + ОписаниеОшибки()); + ВызватьИсключение(НСтр("ru = 'Ошибка при отправке данных'") + ": " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index 09987524c..5a5588767 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -16,7 +16,9 @@ // Выполняет загрузку данных из файла сообщения обмена. // // Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при обработке сообщения обмена. +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при обработке сообщения обмена. +// ЗагрузитьТолькоПараметры - Булево +// СообщениеОбОшибке - Строка // Процедура ВыполнитьЗагрузкуДанных(Отказ, Знач ЗагрузитьТолькоПараметры, СообщениеОбОшибке = "") Экспорт diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl index bfbe78c61..adc8d4eb5 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl @@ -365,7 +365,7 @@ // Применяет изменения разрешений в профилях безопасности в кластере серверов по сценарию. // // Параметры: -// ВидыОпераций - Структура, описывающая значения перечисления ОперацииАдминистрированияПрофилейБезопасности: +// ВидыОпераций - Структура - описывающая значения перечисления ОперацииАдминистрированияПрофилейБезопасности: // * Ключ - Строка - имя значения перечисления, // * Значение - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности, // СценарийПримененияРазрешений - Массив Из Структура - сценарий применения изменений разрешений на @@ -373,13 +373,10 @@ // со следующими полями: // * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности - операция, которую // требуется выполнить, -// * Профиль - Строка, имя профиля безопасности, -// * Разрешения - Структура - описание свойств профиля безопасности, см. -// АдминистрированиеКластера.СвойстваПрофиляБезопасности(), -// ПараметрыАдминистрированияКластера - Структура - параметры администрирования кластера серверов, см. -// АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИнформационнойБазы - Структура - параметры администрирования информационной -// базы, см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// * Профиль - Строка - имя профиля безопасности, +// * Разрешения - см. АдминистрированиеКластера.СвойстваПрофиляБезопасности +// ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера +// ПараметрыАдминистрированияИнформационнойБазы - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера // &НаСервереБезКонтекста Процедура ПрименитьИзмененияРазрешенийВПрофиляхБезопасностиВКластереСерверов(Знач ВидыОпераций, Знач СценарийПримененияРазрешений, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы = Неопределено) diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl index e058a6074..d335df7ce 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl @@ -18,8 +18,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Оповещение = Новый ОписаниеОповещения("ФайлОбработкиИмяНачалоВыбораПослеПомещенияФайла", ЭтотОбъект); - НачатьПомещениеФайла(Оповещение, , , Истина, ЭтотОбъект.УникальныйИдентификатор); + ЗагрузитьФайлОбработки(); КонецПроцедуры @@ -54,25 +53,7 @@ &НаКлиенте Процедура ФайлОбработкиИмяНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - Оповещение = Новый ОписаниеОповещения("ФайлОбработкиИмяНачалоВыбораПослеПомещенияФайла", ЭтотОбъект); - НачатьПомещениеФайла(Оповещение, , , Истина, ЭтотОбъект.УникальныйИдентификатор); - -КонецПроцедуры - -&НаКлиенте -Процедура ФайлОбработкиИмяНачалоВыбораПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, Контекст) Экспорт - - Если Не ЗначениеЗаполнено(Адрес) Тогда - Возврат; - КонецЕсли; - - ФайлОбработкиИмя = ВыбранноеИмяФайла; - ФайлОбработкиАдрес = Адрес; - - СвойстваФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ФайлОбработкиИмя); - Если НРег(СвойстваФайла.Расширение) <> НРег(".epf") И НРег(СвойстваФайла.Расширение) <> НРег(".erf") Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выбранный файл не является внешним отчетом или обработкой.'")); - КонецЕсли; + ЗагрузитьФайлОбработки(); КонецПроцедуры @@ -107,6 +88,33 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ЗагрузитьФайлОбработки() + + Оповещение = Новый ОписаниеОповещения("ЗагрузитьФайлОбработкиЗавершение", ЭтотОбъект); + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьФайлОбработкиЗавершение(ПомещенныйФайл, ДополнительныеПараметры) Экспорт + + Если ПомещенныйФайл = Неопределено Тогда + Возврат; + КонецЕсли; + + ФайлОбработкиИмя = ПомещенныйФайл.Имя; + ФайлОбработкиАдрес = ПомещенныйФайл.Хранение; + + СвойстваФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ФайлОбработкиИмя); + Если НРег(СвойстваФайла.Расширение) <> НРег(".epf") И НРег(СвойстваФайла.Расширение) <> НРег(".erf") Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выбранный файл не является внешним отчетом или обработкой.'")); + КонецЕсли; + +КонецПроцедуры + &НаСервере Функция ПодключитьНаСервере(ЭтоВнешняяОбработка) diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index 81c56bfcb..7e50a8422 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -138,13 +138,12 @@ ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИдентификаторыЗапросов, РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ЗапросыЗамещенияДляВсехПредоставленныхРазрешений()); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИдентификаторыЗапросов, РаботаВБезопасномРежимеСлужебный.ЗапросыОбновленияРазрешенийКонфигурации(Ложь)); - Сериализация = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ЗаписатьЗапросыВСтрокуXML(ИдентификаторыЗапросов); - + ЗапросыXML = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ЗаписатьЗапросыВСтрокуXML(ИдентификаторыЗапросов); ВыполнитьОбработкуЗапросов(ИдентификаторыЗапросов, АдресВременногоХранилища, АдресВременногоХранилищаСостояния, Истина); ОтменитьТранзакцию(); - РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ПрочитатьЗапросыИзСтрокиXML(Сериализация); + РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ПрочитатьЗапросыИзСтрокиXML(ЗапросыXML); КонецПроцедуры @@ -166,7 +165,7 @@ Менеджер = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.МенеджерПримененияРазрешений(ИдентификаторыЗапросов); - Сериализация = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ЗаписатьЗапросыВСтрокуXML(ИдентификаторыЗапросов); + ЗапросыXML = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ЗаписатьЗапросыВСтрокуXML(ИдентификаторыЗапросов); ОтменитьТранзакцию(); @@ -174,7 +173,7 @@ АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор()); - РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ПрочитатьЗапросыИзСтрокиXML(Сериализация); + РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ПрочитатьЗапросыИзСтрокиXML(ЗапросыXML); Результат.Вставить("РезультатПроверки", Ложь); Результат.Вставить("ИдентификаторыЗапросов", ИдентификаторыЗапросов); @@ -270,7 +269,7 @@ // ПрограммныйМодуль - ЛюбаяСсылка, ссылка на элемент справочника, соответствующая внешнему модулю, информацию // о ранее предоставленных разрешениях по которому требуется очистить. Если значение параметра не задано - // будет очищена информация о предоставленных разрешениях по всем внешним модулям. -// ОчиститьРежимыПодключения - Булево, флаг необходимости дополнительной очистки режимов подключения +// ОчиститьРежимыПодключения - Булево - флаг необходимости дополнительной очистки режимов подключения // внешних модулей. // Процедура ОчиститьПредоставленныеРазрешения(Знач ПрограммныйМодуль = Неопределено, Знач ОчиститьРежимыПодключения = Истина) Экспорт @@ -318,16 +317,16 @@ // Если в таблице больше одной строки, соответствующей отбору - генерируется исключение. // // Параметры: -// ТаблицаРазрешений - ТаблицаЗначений - где: -// * ТипПрограммногоМодуля - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// * ИдентификаторПрограммногоМодуля - УникальныйИдентификатор - -// * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности - +// ТаблицаРазрешений - ТаблицаЗначений: +// * ТипПрограммногоМодуля - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ИдентификаторПрограммногоМодуля - УникальныйИдентификатор +// * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности // * Имя - Строка - имя профиля безопасности. -// Отбор - Структура - -// ДобавитьПриОтсутствии - Булево - +// Отбор - Структура +// ДобавитьПриОтсутствии - Булево // // Возвращаемое значение: -// СтрокаТаблицыЗначений, Неопределено - +// СтрокаТаблицыЗначений, Неопределено // Функция СтрокаТаблицыРазрешений(Знач ТаблицаРазрешений, Знач Отбор, Знач ДобавитьПриОтсутствии = Истина) Экспорт diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl index 132debd51..e80203fcc 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl @@ -432,7 +432,7 @@ // Проверяет необходимость применения разрешений в кластере серверов. // // Возвращаемое значение: -// Булево - +// Булево // Функция ТребуетсяПрименениеРазрешенийВКластереСерверов() Экспорт @@ -457,7 +457,7 @@ // Проверяет необходимости записи разрешений в регистры. // // Возвращаемое значение: -// Булево - +// Булево // Функция ТребуетсяЗаписьРазрешенийВРегистр() Экспорт @@ -486,7 +486,7 @@ // при изменении разрешений. // // Возвращаемое значение: -// ТабличныйДокумент - . +// ТабличныйДокумент // Функция Представление(Знач КакТребуемые = Ложь) Экспорт @@ -504,8 +504,7 @@ // Массив(Структура), поля структуры: // * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности, // * Профиль - Строка - имя профиля безопасности, -// * Разрешения - см. -// АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// * Разрешения - см. АдминистрированиеКластера.СвойстваПрофиляБезопасности // Функция СценарийПрименения() Экспорт @@ -1113,7 +1112,7 @@ // ИдентификаторПрограммногоМодуля - УникальныйИдентификатор. // // Возвращаемое значение: -// см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// см. АдминистрированиеКластера.СвойстваПрофиляБезопасности // Функция ПрофильВНотацииИнтерфейсаАдминистрированияКластера(Знач ИмяПрофиля, Знач ТипПрограммногоМодуля, Знач ИдентификаторПрограммногоМодуля) @@ -1183,7 +1182,7 @@ ВнешнийКомпонент = АдминистрированиеКластера.СвойстваВнешнейКомпоненты(); ВнешнийКомпонент.Имя = Разрешение.TemplateName + "\" + КлючИЗначениеДополнения.Ключ; - ВнешнийКомпонент.ХэшСумма = КлючИЗначениеДополнения.Значение; + ВнешнийКомпонент.ХешСумма = КлючИЗначениеДополнения.Значение; ВнешнийКомпонент.Описание = Разрешение.Description; Профиль.ВнешниеКомпоненты.Добавить(ВнешнийКомпонент); @@ -1193,7 +1192,7 @@ ВнешнийМодуль = АдминистрированиеКластера.СвойстваВнешнегоМодуля(); ВнешнийМодуль.Имя = Разрешение.Name; - ВнешнийМодуль.ХэшСумма = Разрешение.Hash; + ВнешнийМодуль.ХешСумма = Разрешение.Hash; ВнешнийМодуль.Описание = Разрешение.Description; Профиль.ВнешниеМодули.Добавить(ВнешнийМодуль); @@ -1290,7 +1289,7 @@ // ИсходнаяСтрока - Строка - исходный физический путь виртуального каталога. // // Возвращаемое значение: -// Строка - . +// Строка // Функция ЭкранироватьСимволПроцент(Знач ИсходнаяСтрока) diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form index 59790d603..f640964ca 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form @@ -519,7 +519,7 @@ <id>55</id> <title> <key>ru</key> - <value>Каталог для сохранения резервных копий</value> + <value>Папка для сохранения резервных копий</value> true true @@ -536,8 +536,7 @@ 292 <key>ru</key> - <value>Рекомендуется выполнять резервное копирование -на другой компьютер или внешний носитель.</value> + <value>Рекомендуется выполнять резервное копирование на другой компьютер или внешний носитель.</value> Label true diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl index a1ed9b1ac..6056ce5aa 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl @@ -273,13 +273,13 @@ Если ПустаяСтрока(Объект.КаталогСРезервнымиКопиями) Тогда - ТекстСообщения = НСтр("ru = 'Не выбран каталог для резервной копии.'"); + ТекстСообщения = НСтр("ru = 'Не выбрана папка для резервной копии.'"); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); РеквизитыЗаполнены = Ложь; ИначеЕсли НайтиФайлы(Объект.КаталогСРезервнымиКопиями).Количество() = 0 Тогда - ТекстСообщения = НСтр("ru = 'Указан несуществующий каталог.'"); + ТекстСообщения = НСтр("ru = 'Указана несуществующая папка.'"); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); РеквизитыЗаполнены = Ложь; @@ -291,7 +291,7 @@ ТестовыйФайл.ЗаписатьОбъявлениеXML(); ТестовыйФайл.Закрыть(); Исключение - ТекстСообщения = НСтр("ru = 'Нет доступа к каталогу с резервными копиями.'"); + ТекстСообщения = НСтр("ru = 'Нет доступа к папке с резервными копиями.'"); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); РеквизитыЗаполнены = Ложь; КонецПопытки; diff --git a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Form.form b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Form.form index 76d9a5bf1..8a3b85b3d 100644 --- a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Form.form +++ b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Form.form @@ -1448,7 +1448,7 @@ 5 ru - Загрузить метаданные + Показать список объектов для настройки доступа true diff --git a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Module.bsl b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Module.bsl index 5a62173ef..b4ace94b0 100644 --- a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Forms/НастройкаИспользованияСтандартногоИнтерфейсаOData/Module.bsl @@ -41,17 +41,24 @@ &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - Если СоздатьПользователяСтандартногоИнтерфейсаOData Тогда - - ПроверяемыеРеквизиты.Добавить("ИмяПользователя"); - ПроверяемыеРеквизиты.Добавить("Пароль"); - ПроверяемыеРеквизиты.Добавить("ПодтверждениеПароля"); - - Если Пароль <> ПодтверждениеПароля Тогда - ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Подтверждение пароля не совпадает с паролем'"), , "ПодтверждениеПароля"); - Отказ = Истина; - КонецЕсли; + Если Не СоздатьПользователяСтандартногоИнтерфейсаOData Тогда + Возврат; + КонецЕсли; + ПроверяемыеРеквизиты.Добавить("ИмяПользователя"); + ПроверяемыеРеквизиты.Добавить("Пароль"); + ПроверяемыеРеквизиты.Добавить("ПодтверждениеПароля"); + + Если Пароль <> ПодтверждениеПароля Тогда + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Подтверждение пароля не совпадает с паролем'"), , "ПодтверждениеПароля"); + Отказ = Истина; + КонецЕсли; + + Если ОбъектыМетаданных.ПолучитьЭлементы().Количество() = 0 Тогда + ОбщегоНазначения.СообщитьПользователю( + НСтр("ru = 'Не указаны объекты, доступ к которым может быть предоставлен через автоматический REST-сервис.'"),, + "ОбъектыМетаданных"); + Отказ = Истина; КонецЕсли; КонецПроцедуры @@ -102,15 +109,8 @@ ОписаниеОповещения = Новый ОписаниеОповещения("ОбъектыМетаданныхИспользованиеПриИзмененииПродолжение", ЭтотОбъект, Контекст); - ОткрытьФорму( - "Обработка.НастройкаСтандартногоИнтерфейсаOData.Форма.ЗависимостиОбъектаМетаданных", - ПараметрыФормы, - , - , - , - , - ОписаниеОповещения, - РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОткрытьФорму("Обработка.НастройкаСтандартногоИнтерфейсаOData.Форма.ЗависимостиОбъектаМетаданных", + ПараметрыФормы,,,,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецЕсли; @@ -130,21 +130,18 @@ &НаКлиенте Функция Сохранить(Команда = Неопределено) - Если Модифицированность Тогда - - Если ПроверитьЗаполнение() - И ОбъектыМетаданных.ПолучитьЭлементы().Количество() > 0 Тогда - - СохранитьНаСервере(); - Возврат Истина; - - Иначе - Возврат Ложь; - КонецЕсли; - - Иначе + ОчиститьСообщения(); + + Если Не Модифицированность Тогда Возврат Истина; КонецЕсли; + + Если Не ПроверитьЗаполнение() Тогда + Возврат Ложь; + КонецЕсли; + + СохранитьНаСервере(); + Возврат Истина; КонецФункции @@ -153,7 +150,7 @@ Если Сохранить() Тогда Закрыть(); - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -208,8 +205,10 @@ КонецПроцедуры // Параметры: -// Результат - КодВозвратаДиалога, Неопределено -. -// Контекст - Структура - . +// Результат - КодВозвратаДиалога +// - Неопределено +// Контекст - Структура +// &НаКлиенте Процедура ОбъектыМетаданныхИспользованиеПриИзмененииПродолжение(Результат, Контекст) Экспорт diff --git a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl index 49c8b7973..0f0cdba6f 100644 --- a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl @@ -15,8 +15,8 @@ // Помещает во временное хранилище подготовленную структуру для просмотра метаданных // // Параметры: -// Параметры - Структура - Пустая структура. Наличие параметра обусловлено использованием в подсистеме ДлительныеОперации -// АдресХранилища - Строка - Адрес временного хранилища, куда будут возвращены данные. Наличие параметра обусловлено использованием в подсистеме ДлительныеОперации +// Параметры - Структура - пустая структура. Наличие параметра обусловлено использованием в подсистеме ДлительныеОперации +// АдресХранилища - Строка - адрес временного хранилища, куда будут возвращены данные. Наличие параметра обусловлено использованием в подсистеме ДлительныеОперации // Процедура ПодготовитьПараметрыНастройкиСоставаСтандартногоИнтерфейсаOData(Параметры, АдресХранилища) Экспорт @@ -41,7 +41,7 @@ // Возвращает настройки авторизации для стандартного интерфейса OData (в модели сервиса). // // Возвращаемое значение: -// ФиксированнаяСтруктура - , поля: +// ФиксированнаяСтруктура: // * Используется - Булево - флаг включения авторизации для доступа // к стандартному интерфейсу OData, // * Логин - Строка - логин пользователя для авторизации при доступе @@ -65,7 +65,7 @@ // Записывает настройки авторизации для стандартного интерфейса OData (в модели сервиса). // // Параметры: -// НастройкиАвторизации - Структура, поля: +// НастройкиАвторизации - Структура: // * Используется - Булево - флаг включения авторизации для доступа // к стандартному интерфейсу OData, // * Логин - Строка - логин пользователя для авторизации при доступе @@ -213,7 +213,7 @@ // интерфейса OData (в модели сервиса). // // Возвращаемое значение: -// ТаблицаЗначений - , колонки: +// ТаблицаЗначений: // * ОбъектМетаданных - ОбъектМетаданных - объект метаданных, который может // включен в состав стандартного интерфейса OData, // * Чтение - Булево - через стандартный интерфейс OData может быть предоставлен @@ -1024,7 +1024,7 @@ // ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоОбъектМетаданныхКонфигурация(Знач ОбъектМетаданных) @@ -1038,7 +1038,7 @@ // ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоПараметрСеанса(Знач ОбъектМетаданных) @@ -1053,7 +1053,7 @@ // ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоОбщийРеквизит(Знач ОбъектМетаданных) @@ -1068,7 +1068,7 @@ // ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоСсылочныеДанные(Знач ОбъектМетаданных) @@ -1090,7 +1090,7 @@ // ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоСсылочныеДанныеПоддерживающиеПредопределенныеЭлементы(Знач ОбъектМетаданных) @@ -1107,7 +1107,7 @@ // ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоНаборЗаписейПоддерживающийИтоги(Знач ОбъектМетаданных) diff --git a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ObjectModule.bsl b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ObjectModule.bsl index 25feb2ab1..6659252e2 100644 --- a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ObjectModule.bsl +++ b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ObjectModule.bsl @@ -180,7 +180,7 @@ // ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// Булево - +// Булево // Функция ЭтоНезависимыйНаборЗаписей(Знач ОбъектМетаданных) Экспорт diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form index 49f330538..d30bf7a1a 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form @@ -667,6 +667,7 @@ true LabelField + true Auto true Left @@ -676,6 +677,86 @@ true + + СписокПользователейПодразделение + 95 + true + true + + + СписокПользователей.Подразделение + + + СписокПользователейПодразделениеРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + СписокПользователейПодразделениеКонтекстноеМеню + 96 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокПользователейФизическоеЛицо + 98 + true + true + + + СписокПользователей.ФизическоеЛицо + + + СписокПользователейФизическоеЛицоРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + СписокПользователейФизическоеЛицоКонтекстноеМеню + 99 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + true true @@ -1094,6 +1175,12 @@ true + + СписокПользователей.Подразделение + + + СписокПользователей.ФизическоеЛицо + Пользователь @@ -1129,6 +1216,40 @@ <common>true</common> </edit> </columns> + <columns> + <name>Подразделение</name> + <title> + <key>ru</key> + <value>Подразделение</value> + + 3 + + DefinedType.Подразделение + + + true + + + true + + + + ФизическоеЛицо + + <key>ru</key> + <value>Физическое лицо</value> + + 4 + + DefinedType.ФизическоеЛицо + + + true + + + true + + Объект @@ -1282,9 +1403,6 @@ true - - СписокВсехПользователей - Пользователь 1 @@ -1312,6 +1430,32 @@ true + + Подразделение + 3 + + DefinedType.Подразделение + + + true + + + true + + + + ФизическоеЛицо + 4 + + DefinedType.ФизическоеЛицо + + + true + + + true + + ПоказыватьПользователейДочернихГрупп diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl index 9f1137443..789fcce10 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl @@ -422,15 +422,13 @@ Иначе СоставГруппы = ТекущаяГруппа.Состав; КонецЕсли; + Для Каждого Элемент Из СписокВсехПользователей Цикл - Если СоставГруппы.НайтиПоЗначению(Элемент.Пользователь) <> Неопределено Или ГруппаВсеПользователи = ТекущаяГруппа.Группа Тогда СтрокаСписокПользователей = СписокПользователей.Добавить(); - СтрокаСписокПользователей.Пользователь = Элемент.Пользователь; - СтрокаСписокПользователей.Пометка = Элемент.Пометка; + ЗаполнитьЗначенияСвойств(СтрокаСписокПользователей, Элемент); КонецЕсли; - КонецЦикла; КонецПроцедуры @@ -442,12 +440,7 @@ СписокВсехПользователейТаблица = РеквизитФормыВЗначение("СписокВсехПользователей"); СписокПользователейТаблица = РеквизитФормыВЗначение("СписокПользователей"); - Если ТипПользователя = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - ПользовательВнешний = Истина; - Иначе - ПользовательВнешний = Ложь; - КонецЕсли; - + ПользовательВнешний = (ТипПользователя = Тип("СправочникСсылка.ВнешниеПользователи")); Если ИспользоватьГруппы Тогда Обработки.НастройкиПользователей.ЗаполнитьДеревоГрупп(ДеревоГрупп, ПользовательВнешний); СписокВсехПользователейТаблица = Обработки.НастройкиПользователей.ПользователиДляКопирования( diff --git a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl index 3bd6603ed..bdcb69db5 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl @@ -20,7 +20,7 @@ // получить настройки форм. // // Возвращаемое значение -// СписокЗначений - Список форм, для которых у переданного пользователя есть настройки. +// СписокЗначений - список форм, для которых у переданного пользователя есть настройки. // Функция НастройкиВсехФорм(ИмяПользователя) @@ -61,7 +61,7 @@ // Список - СписокЗначений - список значений, в который будут добавлены описания форм. // // Возвращаемое значение -// СписокЗначений - Список всех форм объектов метаданных. +// СписокЗначений - список всех форм объектов метаданных. // Функция ФормыОбъектовМетаданных() @@ -239,13 +239,13 @@ // Конструктор коллекции настроек форм. // // Возвращаемое значение: -// ТаблицаЗначений - где: -// * Значение - Строка - -// * Представление - Строка - -// * Пометка - Булево - -// * Картинка - Картинка - -// * СписокКлючей - СписокЗначений - где: -// ** Значение - Строка - +// ТаблицаЗначений: +// * Значение - Строка +// * Представление - Строка +// * Пометка - Булево +// * Картинка - Картинка +// * СписокКлючей - СписокЗначений: +// ** Значение - Строка // Функция ПалитраСвойствСпискаНастроекФорм() @@ -325,9 +325,9 @@ // Удаляет настройки пользователей из хранилища. // // Параметры: -// ОчищаемыеНастройки - Массив, где элемент массива - тип настроек, которые необходимо +// ОчищаемыеНастройки - Массив - где элемент массива - тип настроек, которые необходимо // очистить. Например, НастройкиОтчетов или НастройкиВнешнегоВида. -// Источники - Массив, где элемент массива - Справочник.ПользовательСсылка. Массив пользователей, +// Источники - Массив - где элемент массива - Справочник.ПользовательСсылка. Массив пользователей, // у которых необходимо очистить настройки. // Процедура УдалитьНастройкиПользователей(ОчищаемыеНастройки, Источники, ТаблицаПользовательскихВариантовОтчетов = Неопределено) Экспорт @@ -433,16 +433,16 @@ // Выполняет копирование настроек пользователя с возвратом признака о наличии настроек. // // Параметры: -// ПользовательИсточникСсылка - СправочникСсылка.Пользователи - -// - СправочникСсылка.ВнешниеПользователи - -// ПользователиПриемник - Массив из ТаблицаЗначений - -// КопируемыеНастройки - Массив из Строка - -// НеСкопированныеНастройкиОтчетов - ТаблицаЗначений - где: -// * Пользователь - СправочникСсылка.Пользователи - -// * СписокОтчетов - СписокЗначений - +// ПользовательИсточникСсылка - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// ПользователиПриемник - Массив из ТаблицаЗначений +// КопируемыеНастройки - Массив из Строка +// НеСкопированныеНастройкиОтчетов - ТаблицаЗначений: +// * Пользователь - СправочникСсылка.Пользователи +// * СписокОтчетов - СписокЗначений // // Возвращаемое значение: -// Булево - +// Булево // Функция КопированиеНастроекПользователей(ПользовательИсточникСсылка, ПользователиПриемник, КопируемыеНастройки, НеСкопированныеНастройкиОтчетов = Неопределено) Экспорт @@ -544,20 +544,21 @@ // Возвращает список пользовательских настроек. // // Параметры: -// ИмяПользователя - Неопределено, Строка - -// МенеджерНастроек - СтандартноеХранилищеНастроекМенеджер - -// - ХранилищеНастроекМенеджер.ХранилищеВариантовОтчетов - -// КопируемаяНастройка - Строка - -// ТаблицаКлючейИТиповВариантовОтчетов - Неопределено - -// - ТаблицаЗначений - где: -// * КлючВарианта - Строка - -// * Пометка - Булево - -// ДляКопирования - Булево - +// ИмяПользователя - Неопределено +// - Строка +// МенеджерНастроек - СтандартноеХранилищеНастроекМенеджер +// - ХранилищеНастроекМенеджер.ХранилищеВариантовОтчетов +// КопируемаяНастройка - Строка +// ТаблицаКлючейИТиповВариантовОтчетов - Неопределено +// - ТаблицаЗначений: +// * КлючВарианта - Строка +// * Пометка - Булево +// ДляКопирования - Булево // // Возвращаемое значение: -// ТаблицаЗначений - где: -// * КлючОбъекта - Строка - -// * КлючНастроек - Строка - +// ТаблицаЗначений: +// * КлючОбъекта - Строка +// * КлючНастроек - Строка // Функция СписокНастроек(ИмяПользователя, МенеджерНастроек, КопируемаяНастройка, ТаблицаКлючейИТиповВариантовОтчетов = Неопределено, ДляКопирования = Ложь) @@ -656,12 +657,13 @@ // // Параметры: // МенеджерНастроек -// ТаблицаНастроек - ТаблицаЗначений - где: -// * КлючОбъекта - Строка - -// * КлючНастроек - Строка - -// ПользовательИсточник - Неопределено, Строка - -// ПользовательПриемник - СправочникСсылка.Пользователи - -// НеСкопированныеНастройкиОтчетов - Неопределено - +// ТаблицаНастроек - ТаблицаЗначений: +// * КлючОбъекта - Строка +// * КлючНастроек - Строка +// ПользовательИсточник - Неопределено +// - Строка +// ПользовательПриемник - СправочникСсылка.Пользователи +// НеСкопированныеНастройкиОтчетов - Неопределено // Процедура СкопироватьНастройки(МенеджерНастроек, ТаблицаНастроек, ПользовательИсточник, ПользовательПриемник, НеСкопированныеНастройкиОтчетов) @@ -731,15 +733,15 @@ // Копирует пользовательские настройки отчетов. // // Параметры: -// МенеджерНастроек - СтандартноеХранилищеНастроекМенеджер - -// - ХранилищеНастроекМенеджер.ХранилищеВариантовОтчетов - -// ПользовательИсточник - Строка - Имя пользователя информационной базы, от которого берутся настройки для копирования. -// ПользователиПриемник - Массив из СправочникСсылка.Пользователи - Пользователи, которым необходимо скопировать +// МенеджерНастроек - СтандартноеХранилищеНастроекМенеджер +// - ХранилищеНастроекМенеджер.ХранилищеВариантовОтчетов +// ПользовательИсточник - Строка - имя пользователя информационной базы, от которого берутся настройки для копирования. +// ПользователиПриемник - Массив из СправочникСсылка.Пользователи - пользователи, которым необходимо скопировать // выбранные настройки. // МассивНастроекДляКопирования - Массив из СписокЗначений - список, в котором содержатся ключи выбранных настроек. -// НеСкопированныеНастройкиОтчетов - ТаблицаЗначений - где: -// * Пользователь - СправочникСсылка.Пользователи - -// * СписокОтчетов - СписокЗначений - +// НеСкопированныеНастройкиОтчетов - ТаблицаЗначений: +// * Пользователь - СправочникСсылка.Пользователи +// * СписокОтчетов - СписокЗначений // Процедура СкопироватьНастройкиОтчетовИПерсональныеНастройки(МенеджерНастроек, ПользовательИсточник, ПользователиПриемник, МассивНастроекДляКопирования, НеСкопированныеНастройкиОтчетов = Неопределено) Экспорт @@ -798,8 +800,8 @@ // Копирует настройки внешнего вида. // // Параметры: -// ПользовательИсточник - Строка - Имя пользователя информационной базы, от которого берутся настройки для копирования. -// ПользователиПриемник - Массив элементов ПользовательСсылка - Пользователи, которым необходимо скопировать выбранные +// ПользовательИсточник - Строка - имя пользователя информационной базы, от которого берутся настройки для копирования. +// ПользователиПриемник - Массив элементов ПользовательСсылка - пользователи, которым необходимо скопировать выбранные // настройки. // МассивНастроекДляКопирования - Массив - элемент массива - СписокЗначений, в котором содержатся ключи выбранных // настроек. @@ -1071,14 +1073,12 @@ // пользователей при включенном разделителе, а также пользователей с пустым идентификатором. // // Параметры: -// ПользовательИсточник - СправочникСсылка - Пользователь, которого необходимо убрать из итоговой таблицы пользователей. -// ТаблицаПользователей - ТаблицаЗначений - Таблица, в которую записываются отобранные пользователи. -// ПользовательВнешний - Булево - Если Истина, то отбираются пользователи из справочника ВнешниеПользователи. +// ПользовательИсточник - СправочникСсылка - пользователь, которого необходимо убрать из итоговой таблицы пользователей. +// ТаблицаПользователей - ТаблицаЗначений - таблица, в которую записываются отобранные пользователи. +// ПользовательВнешний - Булево - если Истина, то отбираются пользователи из справочника ВнешниеПользователи. // Функция ПользователиДляКопирования(ПользовательИсточник, ТаблицаПользователей, ПользовательВнешний, Очистка = Ложь) Экспорт - УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; Запрос.Параметры.Вставить("ПользовательИсточник", ПользовательИсточник); Запрос.Параметры.Вставить("НеуказанныйПользователь", Пользователи.СсылкаНеуказанногоПользователя()); @@ -1086,25 +1086,23 @@ ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Если Очистка Тогда - Запрос.Текст = ТекстЗапросаСпискаВсехПользователей(Ложь, Очистка) + Запрос.Текст = ТекстЗапросаСпискаПользователей(Очистка) + Символы.ПС + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + Символы.ПС - + ТекстЗапросаСпискаВсехПользователей(Истина, Очистка); + + ТекстЗапросаСпискаВнешнихПользователей(Очистка); Иначе - Запрос.Текст = ТекстЗапросаСпискаВсехПользователей(ПользовательВнешний, Очистка); + Запрос.Текст = ?(ПользовательВнешний, ТекстЗапросаСпискаВнешнихПользователей(Очистка), + ТекстЗапросаСпискаПользователей(Очистка)) КонецЕсли; - НачатьТранзакцию(); - Попытка - СписокПользователей = Запрос.Выполнить().Выгрузить(); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + УстановитьПривилегированныйРежим(Истина); + СписокПользователей = Запрос.Выполнить().Выгрузить(); + УстановитьПривилегированныйРежим(Ложь); Для Каждого ПользовательСсылка Из СписокПользователей Цикл СтрокаТаблицыПользователей = ТаблицаПользователей.Добавить(); СтрокаТаблицыПользователей.Пользователь = ПользовательСсылка.Пользователь; + СтрокаТаблицыПользователей.Подразделение = ПользовательСсылка.Подразделение; + СтрокаТаблицыПользователей.ФизическоеЛицо = ПользовательСсылка.ФизическоеЛицо; КонецЦикла; ТаблицаПользователей.Сортировать("Пользователь Возр"); @@ -1112,11 +1110,13 @@ КонецФункции -Функция ТекстЗапросаСпискаВсехПользователей(ПользовательВнешний, Очистка) +Функция ТекстЗапросаСпискаПользователей(Очистка) ТекстЗапроса = "ВЫБРАТЬ - | Пользователи.Ссылка КАК Пользователь + | Пользователи.Ссылка КАК Пользователь, + | Пользователи.Подразделение КАК Подразделение, + | Пользователи.ФизическоеЛицо КАК ФизическоеЛицо |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ @@ -1127,29 +1127,48 @@ | И НЕ(Пользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор | И Пользователи.Ссылка <> &НеуказанныйПользователь)"; - Если ПользовательВнешний Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); - КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КромеПомеченныхНаУдаление", ?(Очистка, "Истина", "НЕ Пользователи.ПометкаУдаления")); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КромеНедействительных", ?(Очистка, "Истина", "НЕ Пользователи.Недействителен")); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КромеСлужебныхПользователей", - ?(Очистка И Не ОбщегоНазначения.РазделениеВключено() Или ПользовательВнешний, + ?(Очистка И Не ОбщегоНазначения.РазделениеВключено(), "Истина", "НЕ Пользователи.Служебный")); - Возврат ТекстЗапроса; КонецФункции +Функция ТекстЗапросаСпискаВнешнихПользователей(Очистка) + + ТекстЗапроса = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь, + | Неопределено КАК Подразделение, + | Неопределено КАК ФизическоеЛицо + |ИЗ + | Справочник.Пользователи КАК ВнешниеПользователи + |ГДЕ + | &КромеНедействительных + | И &КромеПомеченныхНаУдаление + | И Пользователи.Ссылка <> &ПользовательИсточник + | И НЕ(Пользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор + | И Пользователи.Ссылка <> &НеуказанныйПользователь)"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КромеПомеченныхНаУдаление", + ?(Очистка, "Истина", "НЕ Пользователи.ПометкаУдаления")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КромеНедействительных", + ?(Очистка, "Истина", "НЕ Пользователи.Недействителен")); + Возврат ТекстЗапроса; + +КонецФункции + + // Формирует дерево значений групп пользователей. // // Параметры: -// ДеревоГрупп - ДеревоЗначений - Дерево, которое заполняется группами пользователей. -// ПользовательВнешний - Булево - Если Истина, то отбираются пользователи из справочника ГруппыВнешнихПользователей. +// ДеревоГрупп - ДеревоЗначений - дерево, которое заполняется группами пользователей. +// ПользовательВнешний - Булево - если Истина, то отбираются пользователи из справочника ГруппыВнешнихПользователей. +// Процедура ЗаполнитьДеревоГрупп(ДеревоГрупп, ПользовательВнешний) Экспорт ГруппыМассив = Новый Массив; @@ -1307,7 +1326,7 @@ // права доступа на отчет. // // Возвращаемое значение: -// Массив - Результат - Массив - ключи отчетов, доступных переданному пользователю. +// Массив - результат - Массив - ключи отчетов, доступных переданному пользователю. // Функция ОтчетыДоступныеПользователю(ИмяПользователяИБ, ПользовательСсылка) Результат = Новый Массив; @@ -1340,8 +1359,8 @@ // имя пользователя информационной базы. // // Возвращаемое значение -// - Неопределено - Если Пользователь ИБ не найден. -// - Строка - Имя пользователя информационной базы. +// - Неопределено - если Пользователь ИБ не найден. +// - Строка - имя пользователя информационной базы. // Функция ИмяПользователяИБ(ПользовательСсылка) Экспорт @@ -1872,9 +1891,9 @@ // Заполняет коллекцию настроек отчета. // // Параметры: -// Параметры - Структура - где: -// * НастройкиОтчетовДерево - ДеревоЗначений - где: -// ** Ключи - СписокЗначений - +// Параметры - Структура: +// * НастройкиОтчетовДерево - ДеревоЗначений: +// ** Ключи - СписокЗначений // Процедура ЗаполнитьСписокНастроекОтчетов(Параметры) @@ -2265,8 +2284,8 @@ // Добавляет настройки. // // Параметры: -// Параметры - -// ДеревоНастроек - ДеревоЗначений - +// Параметры +// ДеревоНастроек - ДеревоЗначений // Процедура ДобавитьНастройкиРабочегоСтолаИКомандногоИнтерфейса(Параметры, ДеревоНастроек) @@ -2366,8 +2385,8 @@ // Объединяет списки значений. // // Параметры: -// СписокПриемник - СписокЗначений - -// СписокИсточник - СписокЗначений - +// СписокПриемник - СписокЗначений +// СписокИсточник - СписокЗначений // Процедура ОбъединитьСпискиЗначений(СписокПриемник, СписокИсточник) Для Каждого Элемент Из СписокИсточник Цикл @@ -2378,12 +2397,13 @@ // Добавляет строку дерева. // // Параметры: -// ДеревоЗначений - ДеревоЗначений - -// Настройка - Строка - -// Картинка - Картинка - -// Ключи - СписокЗначений - -// Тип - Строка - -// ТипСтроки - Произвольный, Строка - +// ДеревоЗначений - ДеревоЗначений +// Настройка - Строка +// Картинка - Картинка +// Ключи - СписокЗначений +// Тип - Строка +// ТипСтроки - Произвольный +// - Строка // Процедура ДобавитьСтрокуДерева(ДеревоЗначений, Настройка, Картинка, Ключи, Тип = "", ТипСтроки = "") diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Commands/ОписаниеОбработчиковОбновления/CommandModule.bsl b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Commands/ОписаниеОбработчиковОбновления/CommandModule.bsl new file mode 100644 index 000000000..b33c008b1 --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Commands/ОписаниеОбработчиковОбновления/CommandModule.bsl @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ОбъектыПересеченияОбработчика/Form.form b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ОбъектыПересеченияОбработчика/Form.form new file mode 100644 index 000000000..37667b64b --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ОбъектыПересеченияОбработчика/Form.form @@ -0,0 +1,516 @@ + + + + <key>ru</key> + <value>Объекты пересечения обработчика</value> + + + Пересечения + 1 + + <key>ru</key> + <value>Пересечения</value> + + true + true + + true + + + Пересечения + + None + + ПересеченияЗаписьЧитаемых + 23 + true + true + + true + + + Пересечения.ЗаписьЧитаемых + + None + + ru + Текущий обработчик изменяет объекты, которые читаются другими обработчиками +или другие обработчики изменяют объекты, которые читает текущий обработчик. + + + ПересеченияЗаписьЧитаемыхРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ПересеченияЗаписьЧитаемыхКонтекстноеМеню + 24 + true + + CheckBoxField + true + Auto + true + + CommonPicture.АрхивАнкета + + Left + true + + + + ПересеченияПовторнаяЗапись + 26 + true + true + + true + + + Пересечения.ПовторнаяЗапись + + None + + ru + Повторная запись изменяемых объектов другими обработчиками. + + + ПересеченияПовторнаяЗаписьРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ПересеченияПовторнаяЗаписьКонтекстноеМеню + 27 + true + + CheckBoxField + true + Auto + true + + CommonPicture.Предупреждение + + Left + true + + + + ПересеченияОбъектМетаданных + 20 + true + true + + true + + + Пересечения.ОбъектМетаданных + + + ПересеченияОбъектМетаданныхРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ПересеченияОбъектМетаданныхКонтекстноеМеню + 21 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПересеченияПроцедураПисатель + 14 + + <key>ru</key> + <value>Обработчик писатель</value> + + true + true + + true + + + Пересечения.ПроцедураПисатель + + + ПересеченияПроцедураПисательРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ПересеченияПроцедураПисательКонтекстноеМеню + 15 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПересеченияПроцедураЧитательИлиПисатель2 + 17 + + <key>ru</key> + <value>Обработчик читатель (или писатель 2)</value> + + true + true + + true + + + Пересечения.ПроцедураЧитательИлиПисатель2 + + + ПересеченияПроцедураЧитательИлиПисатель2РасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ПересеченияПроцедураЧитательИлиПисатель2КонтекстноеМеню + 18 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПересеченияКоманднаяПанель + 3 + Left + + + ПересеченияСтрокаПоиска + 5 + + ПересеченияСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ПересеченияСтрокаПоискаКонтекстноеМеню + 6 + true + + Пересечения + + true + + + + ПересеченияСостояниеПросмотра + 8 + + ПересеченияСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ПересеченияСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + Пересечения + + true + + + + ПересеченияУправлениеПоиском + 11 + + ПересеченияУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ПересеченияУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + Пересечения + + true + + + + ПересеченияРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + ПересеченияКонтекстноеМеню + 2 + true + + true + true + true + ByContent + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
      + None + false + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ОписаниеОбработчиковОбновления + + + true + + + true + +
      true
      +
      + + Пересечения + + <key>ru</key> + <value>Пересечения</value> + + 2 + + ValueTable + + + true + + + true + + + ПроцедураПисатель + + <key>ru</key> + <value>Обработчик1</value> + + 1 + + String + + 350 + + + + true + + + true + + + + ПроцедураЧитательИлиПисатель2 + + <key>ru</key> + <value>Обработчик2</value> + + 2 + + String + + 350 + + + + true + + + true + + + + ОбъектМетаданных + + <key>ru</key> + <value>Объект метаданных</value> + + 3 + + String + + 300 + + + + true + + + true + + + + ЗаписьЧитаемых + + <key>ru</key> + <value>Запись читаемых</value> + + 4 + + Boolean + + + true + + + true + + + + ПовторнаяЗапись + + <key>ru</key> + <value>Повторная запись</value> + + 5 + + Boolean + + + true + + + true + + + + + АдресДанных + + String + + 100 + + + + + + + + +
      diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ОбъектыПересеченияОбработчика/Module.bsl b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ОбъектыПересеченияОбработчика/Module.bsl new file mode 100644 index 000000000..2138a396f --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ОбъектыПересеченияОбработчика/Module.bsl @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаВыбораИдентификаторовОбъектовМетаданных/Attributes/СписокИдентификаторов/ExtInfo/ListSettings.dcss b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаВыбораИдентификаторовОбъектовМетаданных/Attributes/СписокИдентификаторов/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..f36c6be64 --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаВыбораИдентификаторовОбъектовМетаданных/Attributes/СписокИдентификаторов/ExtInfo/ListSettings.dcss @@ -0,0 +1,21 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + + ПолноеИмя + Asc + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаВыбораИдентификаторовОбъектовМетаданных/Form.form b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаВыбораИдентификаторовОбъектовМетаданных/Form.form new file mode 100644 index 000000000..70ef7f5e6 --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаВыбораИдентификаторовОбъектовМетаданных/Form.form @@ -0,0 +1,283 @@ + + + + <key>ru</key> + <value>Объекты метаданных</value> + + + СписокИдентификаторов + 1 + + <key>ru</key> + <value>Список идентификаторов</value> + + true + true + + true + + + СписокИдентификаторов + + None + + ПолноеИмя + 26 + + <key>ru</key> + <value>Полное имя</value> + + true + true + + true + + + СписокИдентификаторов.ПолноеИмя + + + ПолноеИмяРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ПолноеИмяКонтекстноеМеню + 27 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Ссылка + 41 + + <key>ru</key> + <value>Ссылка</value> + + true + true + + + СписокИдентификаторов.Ссылка + + + СсылкаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 42 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокИдентификаторовКоманднаяПанель + 3 + Left + + + СписокИдентификаторовСтрокаПоиска + 5 + + СписокИдентификаторовСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + СписокИдентификаторовСтрокаПоискаКонтекстноеМеню + 6 + true + + СписокИдентификаторов + + true + + + + СписокИдентификаторовСостояниеПросмотра + 8 + + СписокИдентификаторовСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + СписокИдентификаторовСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + СписокИдентификаторов + + true + + + + СписокИдентификаторовУправлениеПоиском + 11 + + СписокИдентификаторовУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СписокИдентификаторовУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + СписокИдентификаторов + + true + + + + СписокИдентификаторовРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + СписокИдентификаторовКонтекстноеМеню + 2 + true + + true + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + true + + СписокИдентификаторов.DefaultPicture + + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + +
      + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + СписокИдентификаторов + + <key>ru</key> + <value>Список идентификаторов</value> + + 1 + + DynamicList + + + true + + + true + + + СписокИдентификаторов.Ссылка + +
      true
      + + ВЫБРАТЬ + "" КАК ПолноеИмя, + "" КАК Родитель, + "" КАК Ссылка + true + true + true + true + +
      + + + + + +
      diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаВыбораИдентификаторовОбъектовМетаданных/Module.bsl b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаВыбораИдентификаторовОбъектовМетаданных/Module.bsl new file mode 100644 index 000000000..f6a6a294d --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаВыбораИдентификаторовОбъектовМетаданных/Module.bsl @@ -0,0 +1,42 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Form.form b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Form.form new file mode 100644 index 000000000..a72c150f2 --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Form.form @@ -0,0 +1,5256 @@ + + + + СтраницыФормы + 1 + + СтраницаОписание + 3 + + ГруппаШапка + 10 + + ГруппаШапкаЛевоПраво + 93 + + ГруппаШапкаЛево + 12 + + ОсновнойОбъектМетаданных + 772 + true + true + + true + + + ОсновнойОбъектМетаданных + + + ОсновнойОбъектМетаданныхРасширеннаяПодсказка + 774 + Label + true + true + + Left + + + + ОсновнойОбъектМетаданныхКонтекстноеМеню + 773 + true + + InputField + Enter + true + Left + true + + + AutoComplete + ОсновнойОбъектМетаданныхАвтоПодбор + + + StartChoice + ОсновнойОбъектМетаданныхНачалоВыбора + + + TextEditEnd + ОсновнойОбъектМетаданныхОкончаниеВводаТекста + + + ChoiceProcessing + ОсновнойОбъектМетаданныхОбработкаВыбора + + true + true + true + true + Items + true + true + true + Normal + + + + Идентификатор + 24 + true + true + + true + + + Объект.ОбработчикиОбновления[0].Идентификатор + + + ИдентификаторРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ИдентификаторКонтекстноеМеню + 25 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИдентификаторНачалоВыбора + + true + true + true + true + + StdPicture.MoveLeft + + true + true + true + Normal + + + + Процедура + 16 + + <key>ru</key> + <value>Процедура обработки</value> + + true + true + + true + + + Объект.ОбработчикиОбновления[0].Процедура + + + OnChange + ПроцедураПриИзменении + + + ПроцедураРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПроцедураКонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ПроцедураЗаполненияДанныхОбновления + 30 + + <key>ru</key> + <value>Заполнение данных</value> + + true + true + + true + + + Объект.ОбработчикиОбновления[0].ПроцедураЗаполненияДанныхОбновления + + + ПроцедураЗаполненияДанныхОбновленияРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ПроцедураЗаполненияДанныхОбновленияКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ПроцедураПроверки + 33 + + <key>ru</key> + <value>Проверка</value> + + true + true + + true + + + Объект.ОбработчикиОбновления[0].ПроцедураПроверки + + + OnChange + ПроцедураПроверкиПриИзменении + + + ПроцедураПроверкиРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ПроцедураПроверкиКонтекстноеМеню + 34 + true + + InputField + Enter + true + Left + true + + + StartChoice + ПроцедураПроверкиНачалоВыбора + + true + true + true + + StdPicture.MoveLeft + + true + true + true + Normal + + + + РежимВыполнения + 39 + true + true + + true + + + Объект.ОбработчикиОбновления[0].РежимВыполнения + + + OnChange + РежимВыполненияПриИзменении + + + РежимВыполненияРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + РежимВыполненияКонтекстноеМеню + 40 + true + + InputField + true + Auto + true + Left + true + + 6 + true + 10 + true + true + true + true + true + true + true + true + + + Монопольно + + + + + Отложенно + + + + + Оперативно + + + Normal + 10 + + + + КомментарийСлужебный + 36 + true + + true + + + Объект.ОбработчикиОбновления[0].Комментарий + + Left + + КомментарийСлужебныйРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + КомментарийСлужебныйКонтекстноеМеню + 37 + true + + InputField + Enter + true + Left + true + + + StartChoice + КомментарийНачалоВыбора + + 2 + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Шапка лево</value> + + + ГруппаШапкаЛевоРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаШапкаПраво + 14 + + ГруппаПодсистема + 22 + + Подсистема + 7 + true + true + + true + + + Объект.ОбработчикиОбновления[0].Подсистема + + + OnChange + ПодсистемаПриИзменении + + + ПодсистемаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ПодсистемаКонтекстноеМеню + 8 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + + ИмяОсновногоСерверногоМодуля + 491 + true + true + + true + + + Объект.ОбработчикиОбновления[0].ИмяОсновногоСерверногоМодуля + + + ИмяОсновногоСерверногоМодуляРасширеннаяПодсказка + 493 + Label + true + true + + Left + + + + ИмяОсновногоСерверногоМодуляКонтекстноеМеню + 492 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Версия + 19 + true + true + + true + + + Объект.ОбработчикиОбновления[0].Версия + + + ВерсияРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ВерсияКонтекстноеМеню + 20 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + РежимВыполненияОтложенных + 496 + true + true + + true + + + Объект.ОбработчикиОбновления[0].РежимВыполненияОтложенныхОбработчиков + + + OnChange + РежимВыполненияПриИзменении + + + РежимВыполненияОтложенныхРасширеннаяПодсказка + 498 + Label + true + true + + Left + + + + РежимВыполненияОтложенныхКонтекстноеМеню + 497 + true + + InputField + true + Auto + true + Left + true + + 6 + true + 10 + true + true + true + true + true + true + true + true + + + Параллельно + + + + + Последовательно + + + Normal + 10 + + + true + true + + true + + + <key>ru</key> + <value>Подсистема</value> + + 27 + + ГруппаПодсистемаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Шапка право</value> + + + ГруппаШапкаПравоРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Шапка лево право</value> + + + ГруппаШапкаЛевоПравоРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаПрочиеСвойства + 91 + + ГруппаПрочиеСвойстваЗаголовки + 42 + + ГруппаУстанавливаемыеСвойстваЗаголовкиОтступ + 44 + true + true + + true + + + ГруппаУстанавливаемыеСвойстваЗаголовкиОтступРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ГруппаУстанавливаемыеСвойстваЗаголовкиОтступКонтекстноеМеню + 45 + true + + Label + true + true + + Left + + + + ОчередьОтложеннойОбработкиЗаголовок + 47 + + <key>ru</key> + <value>Очередь отложенной обработки:</value> + + true + true + + true + + + ОчередьОтложеннойОбработкиЗаголовокРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ОчередьОтложеннойОбработкиЗаголовокКонтекстноеМеню + 48 + true + + Label + true + true + + Left + + + + ОбязательныйЗаголовок + 254 + + <key>ru</key> + <value>Обязательный:</value> + + true + true + + true + + + ОбязательныйЗаголовокРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + + ОбязательныйЗаголовокКонтекстноеМеню + 255 + true + + Label + true + true + + Left + + + + НачальноеЗаполнениеЗаголовок + 260 + + <key>ru</key> + <value>Начальное заполнение:</value> + + true + true + + true + + + НачальноеЗаполнениеЗаголовокРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + + НачальноеЗаполнениеЗаголовокКонтекстноеМеню + 261 + true + + Label + true + true + + Left + + + + МногопоточныйЗаголовок + 65 + + <key>ru</key> + <value>Многопоточный:</value> + + true + true + + true + + + МногопоточныйЗаголовокРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + МногопоточныйЗаголовокКонтекстноеМеню + 66 + true + + Label + true + true + + Left + + + + ЗапускатьТолькоВГлавномУзлеЗаголовок + 50 + + <key>ru</key> + <value>Запускать только в главном узле:</value> + + true + true + + true + + + ЗапускатьТолькоВГлавномУзлеЗаголовокРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ЗапускатьТолькоВГлавномУзлеЗаголовокКонтекстноеМеню + 51 + true + + Label + true + true + + Left + + + + ЗапускатьИВПодчиненномУзлеРИБСФильтрамиЗаголовок + 53 + + <key>ru</key> + <value>Запускать и в подчиненном узле РИБ с фильтрами:</value> + + true + true + + true + + + ЗапускатьИВПодчиненномУзлеРИБСФильтрамиЗаголовокРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ЗапускатьИВПодчиненномУзлеРИБСФильтрамиЗаголовокКонтекстноеМеню + 54 + true + + Label + true + true + + Left + + + + ОбщиеДанныеЗаголовок + 59 + + <key>ru</key> + <value>Общие данные:</value> + + true + true + + true + + + ОбщиеДанныеЗаголовокРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ОбщиеДанныеЗаголовокКонтекстноеМеню + 60 + true + + Label + true + true + + Left + + + + УправлениеОбработчикамиЗаголовок + 62 + + <key>ru</key> + <value>Управление обработчиками:</value> + + true + true + + true + + + УправлениеОбработчикамиЗаголовокРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + УправлениеОбработчикамиЗаголовокКонтекстноеМеню + 63 + true + + Label + true + true + + Left + + + + КомментарийЗаголовок + 56 + + <key>ru</key> + <value>Описание обработчика:</value> + + true + + true + + + КомментарийЗаголовокРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + КомментарийЗаголовокКонтекстноеМеню + 57 + true + + Label + true + true + true + + Left + Top + + + true + + true + + + <key>ru</key> + <value>Прочие свойства: заголовки</value> + + + ГруппаПрочиеСвойстваЗаголовкиРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПрочиеСвойстваЗначения + 68 + + ОчередьОтложеннойОбработки + 70 + true + + true + + + Объект.ОбработчикиОбновления[0].ОчередьОтложеннойОбработки + + Left + + ОчередьОтложеннойОбработкиРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ОчередьОтложеннойОбработкиКонтекстноеМеню + 71 + true + + InputField + true + Enter + true + Left + true + + 5 + true + true + true + true + true + Normal + + + + Обязательный + 257 + true + + true + + + Объект.ОбработчикиОбновления[0].ВыполнятьВГруппеОбязательных + + Left + + ОбязательныйРасширеннаяПодсказка + 259 + Label + true + true + + Left + + + + ОбязательныйКонтекстноеМеню + 258 + true + + CheckBoxField + Enter + true + Left + true + + + + НачальноеЗаполнение + 263 + true + true + + true + + + Объект.ОбработчикиОбновления[0].НачальноеЗаполнение + + Right + + НачальноеЗаполнениеРасширеннаяПодсказка + 265 + Label + true + true + + Left + + + + НачальноеЗаполнениеКонтекстноеМеню + 264 + true + + CheckBoxField + Enter + true + Left + true + + + + Многопоточный + 88 + true + true + + true + + + Объект.ОбработчикиОбновления[0].Многопоточный + + Right + + МногопоточныйРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + МногопоточныйКонтекстноеМеню + 89 + true + + CheckBoxField + Enter + true + Left + true + + + + ЗапускатьТолькоВГлавномУзле + 73 + true + true + + true + + + Объект.ОбработчикиОбновления[0].ЗапускатьТолькоВГлавномУзле + + Right + + ЗапускатьТолькоВГлавномУзлеРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ЗапускатьТолькоВГлавномУзлеКонтекстноеМеню + 74 + true + + CheckBoxField + Enter + true + Left + true + + + + ЗапускатьИВПодчиненномУзлеРИБСФильтрами + 76 + true + true + + true + + + Объект.ОбработчикиОбновления[0].ЗапускатьИВПодчиненномУзлеРИБСФильтрами + + Right + + ЗапускатьИВПодчиненномУзлеРИБСФильтрамиРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + ЗапускатьИВПодчиненномУзлеРИБСФильтрамиКонтекстноеМеню + 77 + true + + CheckBoxField + Enter + true + Left + true + + + + ОбщиеДанные + 82 + true + true + + true + + + Объект.ОбработчикиОбновления[0].ОбщиеДанные + + Right + + ОбщиеДанныеРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + ОбщиеДанныеКонтекстноеМеню + 83 + true + + CheckBoxField + Enter + true + Left + true + + + + УправлениеОбработчиками + 85 + true + true + + true + + + Объект.ОбработчикиОбновления[0].УправлениеОбработчиками + + Right + + УправлениеОбработчикамиРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + УправлениеОбработчикамиКонтекстноеМеню + 86 + true + + CheckBoxField + Enter + true + Left + true + + + + ТехническийПроект + 781 + true + true + + + Объект.ОбработчикиОбновления[0].ТехническийПроект + + Right + + ru + Обработчик технического проекта + + + ТехническийПроектРасширеннаяПодсказка + 783 + Label + true + true + + Left + + + + ТехническийПроектКонтекстноеМеню + 782 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Прочие свойства</value> + + + ГруппаПрочиеСвойстваЗначенияРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + + Комментарий + 79 + + <key>ru</key> + <value>Описание обработчика</value> + + true + true + + true + + + Объект.ОбработчикиОбновления[0].Комментарий + + Top + + КомментарийРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 80 + true + + InputField + Enter + true + Left + true + + + StartChoice + КомментарийНачалоВыбора + + 2 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Прочие свойства</value> + + + ГруппаПрочиеСвойстваРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Шапка</value> + + + ГруппаШапкаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Описание</value> + + + СтраницаОписаниеРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОбъекты + 5 + + ГруппаИспользуемыеДанные + 95 + + ГруппаИспользуемыеДанныеТаблицы + 100 + + ЧитаемыеОбъекты + 102 + + <key>ru</key> + <value>Читаемые объекты</value> + + true + true + + true + + + Объект.ЧитаемыеОбъекты + + None + + ЧитаемыеОбъектыНомерСтроки + 205 + true + true + + true + + + Объект.ЧитаемыеОбъекты.LineNumber + + + ЧитаемыеОбъектыНомерСтрокиРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + + ЧитаемыеОбъектыНомерСтрокиКонтекстноеМеню + 206 + true + + InputField + Auto + true + Left + true + + 1 + true + true + true + true + true + true + Normal + + + + ЧитаемыеОбъектыГруппаОбъектКартинка + 118 + + ЧитаемыеОбъектыИндексКартинки + 239 + true + true + + true + + + Объект.ЧитаемыеОбъекты.ИндексКартинки + + + ЧитаемыеОбъектыИндексКартинкиРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + + ЧитаемыеОбъектыИндексКартинкиКонтекстноеМеню + 240 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + + + + ЧитаемыеОбъектыОбъектМетаданных + 208 + + <key>ru</key> + <value>Читаемый объект</value> + + true + true + + true + + + Объект.ЧитаемыеОбъекты.ОбъектМетаданных + + + ЧитаемыеОбъектыОбъектМетаданныхРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + + ЧитаемыеОбъектыОбъектМетаданныхКонтекстноеМеню + 209 + true + + InputField + Auto + true + Left + true + + + AutoComplete + ОбъектМетаданныхАвтоПодбор + + + StartChoice + ОбъектМетаданныхНачалоВыбора + + + TextEditEnd + ОбъектМетаданныхОкончаниеВводаТекста + + + ChoiceProcessing + ОбъектМетаданныхОбработкаВыбора + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Читаемые объекты группа объект картинка</value> + + + ЧитаемыеОбъектыГруппаОбъектКартинкаРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ЧитаемыеОбъектыБлокироватьИнтерфейс + 269 + + <key>ru</key> + <value>Блок.</value> + + true + true + + true + + + Объект.ЧитаемыеОбъекты.БлокироватьИнтерфейс + + + ЧитаемыеОбъектыБлокироватьИнтерфейсРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + + ЧитаемыеОбъектыБлокироватьИнтерфейсКонтекстноеМеню + 270 + true + + CheckBoxField + Auto + true + Left + true + + + + ЧитаемыеОбъектыКоманднаяПанель + 104 + Left + true + + + OnStartEdit + ОбъектыПриНачалеРедактирования + + + AfterDeleteRow + ОбъектыПослеУдаления + + + ЧитаемыеОбъектыСтрокаПоиска + 106 + + ЧитаемыеОбъектыСтрокаПоискаРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + + ЧитаемыеОбъектыСтрокаПоискаКонтекстноеМеню + 107 + true + + ЧитаемыеОбъекты + + true + + + + ЧитаемыеОбъектыСостояниеПросмотра + 109 + + ЧитаемыеОбъектыСостояниеПросмотраРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + + ЧитаемыеОбъектыСостояниеПросмотраКонтекстноеМеню + 110 + true + + ViewStatusAddition + ЧитаемыеОбъекты + + true + + + + ЧитаемыеОбъектыУправлениеПоиском + 112 + + ЧитаемыеОбъектыУправлениеПоискомРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + ЧитаемыеОбъектыУправлениеПоискомКонтекстноеМеню + 113 + true + + SearchControlAddition + ЧитаемыеОбъекты + + true + + + + ЧитаемыеОбъектыРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + ЧитаемыеОбъектыКонтекстноеМеню + 103 + + ЧитаемыеОбъектыСтандартныеКоманды + 786 + true + true + + true + + + <key>ru</key> + <value>Читаемые объекты стандартные команды</value> + + + ЧитаемыеОбъектыСтандартныеКомандыРасширеннаяПодсказка + 787 + Label + true + true + + Left + + + + Item.ЧитаемыеОбъекты + + + + ЧитаемыеОбъектыДобавитьЧитаемыйОбъектВИзменяемые + 792 + true + true + + true + + + ЧитаемыеОбъектыДобавитьЧитаемыйОбъектВИзменяемыеРасширеннаяПодсказка + 793 + Label + true + true + + Left + + + Form.Command.ДобавитьЧитаемыйОбъектВИзменяемые + Normal + Auto + true + true + UserCmds + Auto + + + ЧитаемыеОбъектыДобавитьОбъектОбработчика + 777 + true + true + + true + + + ЧитаемыеОбъектыДобавитьОбъектОбработчикаРасширеннаяПодсказка + 778 + Label + true + true + + Left + + + Form.Command.ДобавитьОбъектОбработчикаВЧитаемые + Normal + Auto + true + true + UserCmds + Auto + + + ЧитаемыеОбъектыДобавитьТипыРеквизита + 784 + true + true + + true + + + ЧитаемыеОбъектыДобавитьТипыРеквизитаРасширеннаяПодсказка + 785 + Label + true + true + + Left + + + Form.Command.ДобавитьТипыРеквизитаВЧитаемые + Normal + Auto + true + true + UserCmds + Auto + + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + + Объект.ЧитаемыеОбъекты.ИндексКартинки + + + CommonPicture.КоллекцияОбъектыМетаданных + + true + +
      + + ГруппаИспользуемыеДанныеТаблицыКнопки + 131 + + ГруппаИспользуемыеДанныеТаблицыКнопкиОтступ1 + 133 + true + true + + true + + + ГруппаИспользуемыеДанныеТаблицыКнопкиОтступ1РасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + ГруппаИспользуемыеДанныеТаблицыКнопкиОтступ1КонтекстноеМеню + 134 + true + + Label + true + 2 + true + false + + Left + + + + ДобавитьИзменяемыйОбъектВЧитаемые + 136 + + <key>ru</key> + <value><--</value> + + true + + true + + + ДобавитьИзменяемыйОбъектВЧитаемыеРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + UsualButton + Form.Command.ДобавитьИзменяемыйОбъектВЧитаемые + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаИспользуемыеДанныеТаблицыКнопкиОтступ2 + 138 + true + true + + true + + + ГруппаИспользуемыеДанныеТаблицыКнопкиОтступ2РасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + ГруппаИспользуемыеДанныеТаблицыКнопкиОтступ2КонтекстноеМеню + 139 + true + + Label + true + 1 + true + false + + Left + + + + ДобавитьТипыРеквизитаОбъектаВЧитаемыеДанные + 141 + true + + true + + + ДобавитьТипыРеквизитаОбъектаВЧитаемыеДанныеРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗаписатьОбработчик + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Используемые данные таблицы кнопки</value> + + + ГруппаИспользуемыеДанныеТаблицыКнопкиРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ИзменяемыеОбъекты + 143 + + <key>ru</key> + <value>Изменяемые объекты</value> + + true + true + + true + + + Объект.ИзменяемыеОбъекты + + None + + ИзменяемыеОбъектыНомерСтроки + 211 + true + true + + true + + + Объект.ИзменяемыеОбъекты.LineNumber + + + ИзменяемыеОбъектыНомерСтрокиРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + + ИзменяемыеОбъектыНомерСтрокиКонтекстноеМеню + 212 + true + + LabelField + Auto + true + Left + true + + 1 + true + true + + + + ИзменяемыеОбъектыГруппаКартинка + 159 + + ИзменяемыеОбъектыИндексКартинки + 242 + true + true + + true + + + Объект.ИзменяемыеОбъекты.ИндексКартинки + + + ИзменяемыеОбъектыИндексКартинкиРасширеннаяПодсказка + 244 + Label + true + true + + Left + + + + ИзменяемыеОбъектыИндексКартинкиКонтекстноеМеню + 243 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + + + + ИзменяемыеОбъектыОбъектМетаданных + 217 + + <key>ru</key> + <value>Изменяемый объект</value> + + true + true + + true + + + Объект.ИзменяемыеОбъекты.ОбъектМетаданных + + + ИзменяемыеОбъектыОбъектМетаданныхРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + ИзменяемыеОбъектыОбъектМетаданныхКонтекстноеМеню + 218 + true + + InputField + Auto + true + Left + true + + + AutoComplete + ОсновнойОбъектМетаданныхАвтоПодбор + + + StartChoice + ОбъектМетаданныхНачалоВыбора + + + TextEditEnd + ОбъектМетаданныхОкончаниеВводаТекста + + + ChoiceProcessing + ОбъектМетаданныхОбработкаВыбора + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Изменяемые объекты группа картинка</value> + + + ИзменяемыеОбъектыГруппаКартинкаРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ИзменяемыеОбъектыБлокироватьИнтерфейс + 272 + + <key>ru</key> + <value>Блок.</value> + + true + true + + true + + + Объект.ИзменяемыеОбъекты.БлокироватьИнтерфейс + + + ИзменяемыеОбъектыБлокироватьИнтерфейсРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + + ИзменяемыеОбъектыБлокироватьИнтерфейсКонтекстноеМеню + 273 + true + + CheckBoxField + Auto + true + Left + true + + + + ИзменяемыеОбъектыКоманднаяПанель + 145 + + ИзменяемыеДанныеГруппаСтандартныеКоманды + 179 + true + true + + true + + + <key>ru</key> + <value>Изменяемые данные группа стандартные команды</value> + + + ИзменяемыеДанныеГруппаСтандартныеКомандыРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + + Item.ИзменяемыеОбъекты + + + Left + + + OnStartEdit + ОбъектыПриНачалеРедактирования + + + AfterDeleteRow + ОбъектыПослеУдаления + + + ИзменяемыеОбъектыСтрокаПоиска + 147 + + ИзменяемыеОбъектыСтрокаПоискаРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + + ИзменяемыеОбъектыСтрокаПоискаКонтекстноеМеню + 148 + true + + ИзменяемыеОбъекты + + true + + + + ИзменяемыеОбъектыСостояниеПросмотра + 150 + + ИзменяемыеОбъектыСостояниеПросмотраРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + ИзменяемыеОбъектыСостояниеПросмотраКонтекстноеМеню + 151 + true + + ViewStatusAddition + ИзменяемыеОбъекты + + true + + + + ИзменяемыеОбъектыУправлениеПоиском + 153 + + ИзменяемыеОбъектыУправлениеПоискомРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + ИзменяемыеОбъектыУправлениеПоискомКонтекстноеМеню + 154 + true + + SearchControlAddition + ИзменяемыеОбъекты + + true + + + + ИзменяемыеОбъектыРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + ИзменяемыеОбъектыКонтекстноеМеню + 144 + + ИзменяемыеОбъектыДобавитьОбъектОбработчика + 775 + true + true + + true + + + ИзменяемыеОбъектыДобавитьОбъектОбработчикаРасширеннаяПодсказка + 776 + Label + true + true + + Left + + + Form.Command.ДобавитьОбъектОбработчикаВИзменяемые + Normal + Auto + true + true + UserCmds + Auto + + + ИзменяемыеОбъектыДобавитьИзменяемыйОбъектВЧитаемые + 790 + true + true + + true + + + ИзменяемыеОбъектыДобавитьИзменяемыйОбъектВЧитаемыеРасширеннаяПодсказка + 791 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменяемыйОбъектВЧитаемые + Normal + Auto + true + true + UserCmds + Auto + + + ИзменяемыеОбъектыСтандартныеКоманды + 788 + true + true + + true + + + <key>ru</key> + <value>Изменяемые объекты стандартные команды</value> + + + ИзменяемыеОбъектыСтандартныеКомандыРасширеннаяПодсказка + 789 + Label + true + true + + Left + + + + Item.ИзменяемыеОбъекты + + + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + + Объект.ИзменяемыеОбъекты.ИндексКартинки + + + CommonPicture.КоллекцияОбъектыМетаданных + + true + +
      + true + true + + true + + + <key>ru</key> + <value>Используемые данные таблицы</value> + + + ГруппаИспользуемыеДанныеТаблицыРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + +
      + true + true + + true + + + <key>ru</key> + <value>Данные</value> + + + ГруппаИспользуемыеДанныеРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + +
      + + БлокируемыеОбъекты + 181 + + <key>ru</key> + <value>Блокируемые объекты</value> + + true + true + + true + + + Объект.БлокируемыеОбъекты + + None + + БлокируемыеОбъектыНомерСтроки + 220 + true + true + + true + + + Объект.БлокируемыеОбъекты.LineNumber + + + БлокируемыеОбъектыНомерСтрокиРасширеннаяПодсказка + 222 + Label + true + true + + Left + + + + БлокируемыеОбъектыНомерСтрокиКонтекстноеМеню + 221 + true + + LabelField + Auto + true + Left + true + + 1 + true + true + + + + БлокируемыеОбъектыГруппаОбъектКартинка + 197 + + БлокируемыеОбъектыИндексКартинки + 248 + true + true + + true + + + Объект.БлокируемыеОбъекты.ИндексКартинки + + + БлокируемыеОбъектыИндексКартинкиРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + БлокируемыеОбъектыИндексКартинкиКонтекстноеМеню + 249 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + + + + БлокируемыеОбъектыОбъектМетаданных + 226 + + <key>ru</key> + <value>Дополнительно блокируемый объект</value> + + true + true + + true + + + Объект.БлокируемыеОбъекты.ОбъектМетаданных + + + БлокируемыеОбъектыОбъектМетаданныхРасширеннаяПодсказка + 228 + Label + true + true + + Left + + + + БлокируемыеОбъектыОбъектМетаданныхКонтекстноеМеню + 227 + true + + InputField + Auto + true + Left + true + + + AutoComplete + ОсновнойОбъектМетаданныхАвтоПодбор + + + StartChoice + ОбъектМетаданныхНачалоВыбора + + + TextEditEnd + ОбъектМетаданныхОкончаниеВводаТекста + + + ChoiceProcessing + ОбъектМетаданныхОбработкаВыбора + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Блокируемые объекты группа объект картинка</value> + + + БлокируемыеОбъектыГруппаОбъектКартинкаРасширеннаяПодсказка + 198 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + БлокируемыеОбъектыКоманднаяПанель + 183 + Left + true + + + OnStartEdit + ОбъектыПриНачалеРедактирования + + + AfterDeleteRow + ОбъектыПослеУдаления + + + БлокируемыеОбъектыСтрокаПоиска + 185 + + БлокируемыеОбъектыСтрокаПоискаРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + + БлокируемыеОбъектыСтрокаПоискаКонтекстноеМеню + 186 + true + + БлокируемыеОбъекты + + true + + + + БлокируемыеОбъектыСостояниеПросмотра + 188 + + БлокируемыеОбъектыСостояниеПросмотраРасширеннаяПодсказка + 190 + Label + true + true + + Left + + + + БлокируемыеОбъектыСостояниеПросмотраКонтекстноеМеню + 189 + true + + ViewStatusAddition + БлокируемыеОбъекты + + true + + + + БлокируемыеОбъектыУправлениеПоиском + 191 + + БлокируемыеОбъектыУправлениеПоискомРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + + БлокируемыеОбъектыУправлениеПоискомКонтекстноеМеню + 192 + true + + SearchControlAddition + БлокируемыеОбъекты + + true + + + + БлокируемыеОбъектыРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + БлокируемыеОбъектыКонтекстноеМеню + 182 + true + + HierarchicalList + true + true + true + true + 2 + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + + Объект.БлокируемыеОбъекты.ИндексКартинки + + + CommonPicture.КоллекцияОбъектыМетаданных + + true + +
      + true + true + + true + + + <key>ru</key> + <value>Объекты</value> + + + СтраницаОбъектыРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
      + + СтраницаКонфликты + 275 + + Объявление + 277 + + <key>ru</key> + <value>Сведения о конфликтах обработчика не актуальны. Для актуализации необходимо записать изменения.</value> + + true + + true + + + ОбъявлениеРасширеннаяПодсказка + 279 + Label + true + true + + Left + + + + ОбъявлениеКонтекстноеМеню + 278 + true + + Label + true + + Style.SpecialTextColor + + + Left + + + + СтраницыПриоритетыИПересечения + 758 + + СтраницаПриоритеты + 760 + true + true + + true + + + <key>ru</key> + <value>Приоритеты</value> + + + СтраницаПриоритетыРасширеннаяПодсказка + 761 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаПересечения + 762 + true + true + + true + + + <key>ru</key> + <value>Пересечения</value> + + + СтраницаПересеченияРасширеннаяПодсказка + 763 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Приоритеты и пересечения</value> + + + СтраницыПриоритетыИПересеченияРасширеннаяПодсказка + 759 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + + + + ПриоритетыВыполнения + 669 + + <key>ru</key> + <value>Приоритеты выполнения</value> + + true + true + + true + + + Объект.ПриоритетыВыполнения + + None + + ПриоритетыВыполненияНомерСтроки + 682 + true + true + + true + + + Объект.ПриоритетыВыполнения.LineNumber + + + ПриоритетыВыполненияНомерСтрокиРасширеннаяПодсказка + 684 + Label + true + true + + Left + + + + ПриоритетыВыполненияНомерСтрокиКонтекстноеМеню + 683 + true + + LabelField + Auto + true + Left + true + + 1 + true + true + + + + ПриоритетыВыполненияОбработчик1 + 685 + true + + true + + + Объект.ПриоритетыВыполнения.Ссылка + + + ПриоритетыВыполненияОбработчик1РасширеннаяПодсказка + 687 + Label + true + true + + Left + + + + ПриоритетыВыполненияОбработчик1КонтекстноеМеню + 686 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПриоритетыВыполненияОбработчик2 + 688 + true + + true + + + Объект.ПриоритетыВыполнения.Обработчик2 + + + ПриоритетыВыполненияОбработчик2РасширеннаяПодсказка + 690 + Label + true + true + + Left + + + + ПриоритетыВыполненияОбработчик2КонтекстноеМеню + 689 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПриоритетыВыполненияПроцедура1 + 694 + + <key>ru</key> + <value>Обработчик1</value> + + true + + true + + + Объект.ПриоритетыВыполнения.Процедура1 + + + ПриоритетыВыполненияПроцедура1РасширеннаяПодсказка + 696 + Label + true + true + + Left + + + + ПриоритетыВыполненияПроцедура1КонтекстноеМеню + 695 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПриоритетыВыполненияПроцедура2 + 700 + + <key>ru</key> + <value>Конфликтующий обработчик</value> + + true + true + + true + + + Объект.ПриоритетыВыполнения.Процедура2 + + + ПриоритетыВыполненияПроцедура2РасширеннаяПодсказка + 702 + Label + true + true + + Left + + + + ПриоритетыВыполненияПроцедура2КонтекстноеМеню + 701 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПриоритетыВыполненияКомментарий2 + 724 + + <key>ru</key> + <value>Комментарий</value> + + true + true + + + Объект.ПриоритетыВыполнения.Комментарий2 + + + ПриоритетыВыполненияКомментарий2РасширеннаяПодсказка + 726 + Label + true + true + + Left + + + + ПриоритетыВыполненияКомментарий2КонтекстноеМеню + 725 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПриоритетыВыполненияВыборПорядкаВыполнения + 715 + + <key>ru</key> + <value>Приоритет</value> + + true + true + + true + + + Объект.ПриоритетыВыполнения.ВыборПорядкаВыполнения + + + OnChange + ПриоритетыВыполненияВыборПорядкаВыполненияПриИзменении + + + ПриоритетыВыполненияВыборПорядкаВыполненияРасширеннаяПодсказка + 717 + Label + true + true + + Left + + + + ПриоритетыВыполненияВыборПорядкаВыполненияКонтекстноеМеню + 716 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + OnActivate + true + Normal + + + + ПриоритетыВыполненияПорядок + 721 + + <key>ru</key> + <value>Порядок выполнения</value> + + true + true + + + Объект.ПриоритетыВыполнения.Порядок + + + ПриоритетыВыполненияПорядокРасширеннаяПодсказка + 723 + Label + true + true + + Left + + + + ПриоритетыВыполненияПорядокКонтекстноеМеню + 722 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПриоритетыВыполненияОбъектыПересечения + 796 + true + true + + true + + + Объект.ПриоритетыВыполнения.ОбъектыПересечения + + + ПриоритетыВыполненияОбъектыПересеченияРасширеннаяПодсказка + 798 + Label + true + true + + Left + + + + ПриоритетыВыполненияОбъектыПересеченияКонтекстноеМеню + 797 + true + + LabelField + Auto + true + true + Left + true + Show + Always + + true + true + + + + ПриоритетыВыполненияЗаданПорядокВыполнения + 718 + + <key>ru</key> + <value>Есть порядок</value> + + true + true + + + Объект.ПриоритетыВыполнения.ЗаданПорядокВыполнения + + + ПриоритетыВыполненияЗаданПорядокВыполненияРасширеннаяПодсказка + 720 + Label + true + true + + Left + + + + ПриоритетыВыполненияЗаданПорядокВыполненияКонтекстноеМеню + 719 + true + + CheckBoxField + true + Auto + true + Left + true + + + + ПриоритетыВыполненияЗаписьЧитаемых + 709 + true + true + + + Объект.ПриоритетыВыполнения.ЗаписьЧитаемых + + None + + ru + Запись читаемых + + + ПриоритетыВыполненияЗаписьЧитаемыхРасширеннаяПодсказка + 711 + Label + true + true + + Left + + + + ПриоритетыВыполненияЗаписьЧитаемыхКонтекстноеМеню + 710 + true + + CheckBoxField + true + Auto + true + + CommonPicture.АрхивАнкета + + Left + true + + + + ПриоритетыВыполненияПовторнаяЗапись + 712 + true + true + + + Объект.ПриоритетыВыполнения.ПовторнаяЗапись + + None + + ru + Повторная запись + + + ПриоритетыВыполненияПовторнаяЗаписьРасширеннаяПодсказка + 714 + Label + true + true + + Left + + + + ПриоритетыВыполненияПовторнаяЗаписьКонтекстноеМеню + 713 + true + + CheckBoxField + true + Auto + true + + CommonPicture.Предупреждение + + Left + true + + + + ПриоритетыВыполненияКоманднаяПанель + 671 + + ЗаполнитьОбработчик1 + 764 + true + true + + true + + + ЗаполнитьОбработчик1РасширеннаяПодсказка + 765 + Label + true + true + + Left + + + Form.Command.ЗаполнитьОбработчик1 + Normal + Auto + true + true + UserCmds + Auto + + + ЗаполнитьОбработчик2 + 766 + true + true + + true + + + ЗаполнитьОбработчик2РасширеннаяПодсказка + 767 + Label + true + true + + Left + + + Form.Command.ЗаполнитьОбработчик2 + Normal + Auto + true + true + UserCmds + Auto + + + ЗаполнитьЛюбой + 768 + true + true + + true + + + ЗаполнитьЛюбойРасширеннаяПодсказка + 769 + Label + true + true + + Left + + + Form.Command.ЗаполнитьЛюбой + Normal + Auto + true + true + UserCmds + Auto + + + ПриоритетПоУмолчанию + 794 + true + true + + true + + + ПриоритетПоУмолчаниюРасширеннаяПодсказка + 795 + Label + true + true + + Left + + + Form.Command.ПриоритетПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + Left + + + Selection + ПриоритетыВыполненияВыбор + + + OnActivateRow + ПриоритетыВыполненияПриАктивизацииСтроки + + + ПриоритетыВыполненияСтрокаПоиска + 673 + + ПриоритетыВыполненияСтрокаПоискаРасширеннаяПодсказка + 675 + Label + true + true + + Left + + + + ПриоритетыВыполненияСтрокаПоискаКонтекстноеМеню + 674 + true + + ПриоритетыВыполнения + + true + + + + ПриоритетыВыполненияСостояниеПросмотра + 676 + + ПриоритетыВыполненияСостояниеПросмотраРасширеннаяПодсказка + 678 + Label + true + true + + Left + + + + ПриоритетыВыполненияСостояниеПросмотраКонтекстноеМеню + 677 + true + + ViewStatusAddition + ПриоритетыВыполнения + + true + + + + ПриоритетыВыполненияУправлениеПоиском + 679 + + ПриоритетыВыполненияУправлениеПоискомРасширеннаяПодсказка + 681 + Label + true + true + + Left + + + + ПриоритетыВыполненияУправлениеПоискомКонтекстноеМеню + 680 + true + + SearchControlAddition + ПриоритетыВыполнения + + true + + + + ПриоритетыВыполненияРасширеннаяПодсказка + 672 + Label + true + true + + Left + + + + ПриоритетыВыполненияКонтекстноеМеню + 670 + true + + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
      + + ГруппаОписаниеОбработчиков + 494 + + Комментарий1 + 663 + true + + true + + + Объект.ОбработчикиОбновления[0].Комментарий + + true + None + + Комментарий1РасширеннаяПодсказка + 665 + Label + true + true + + Left + + + + Комментарий1КонтекстноеМеню + 664 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + + Style.FormBackColor + + Normal + ByContent + + + + Комментарий2 + 666 + true + + true + + + Комментарий2 + + true + None + + Комментарий2РасширеннаяПодсказка + 668 + Label + true + true + + Left + + + + Комментарий2КонтекстноеМеню + 667 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + + Style.FormBackColor + + Normal + ByContent + + + + Обработчик1 + 370 + + <key>ru</key> + <value>Текущий обработчик</value> + + true + true + + true + + + Объект.ОбработчикиОбновления[0].Процедура + + true + ShowBottom + + Обработчик1РасширеннаяПодсказка + 372 + Label + true + + Left + + + + Обработчик1КонтекстноеМеню + 371 + true + + LabelField + true + Enter + true + Left + true + + true + + + + Обработчик2 + 373 + + <key>ru</key> + <value>Конфликтующий обработчик</value> + + true + true + + true + + + Обработчик2 + + true + ShowBottom + + Обработчик2РасширеннаяПодсказка + 375 + Label + true + + Left + + + + Обработчик2КонтекстноеМеню + 374 + true + + LabelField + true + Enter + true + Left + true + + true + + + true + true + + true + + + <key>ru</key> + <value>Описание обработчиков</value> + + 6 + Bottom + + ГруппаОписаниеОбработчиковРасширеннаяПодсказка + 495 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Пересечения + 730 + + <key>ru</key> + <value>Пересечения</value> + + true + true + + + Пересечения + + None + + ПересеченияЗаписьЧитаемых + 752 + true + true + + true + + + Пересечения.ЗаписьЧитаемых + + None + + ru + Текущий обработчик изменяет объекты, которые читаются другими обработчиками +или другие обработчики изменяют объекты, которые читает текущий обработчик. + + + ПересеченияЗаписьЧитаемыхРасширеннаяПодсказка + 754 + Label + true + true + + Left + + + + ПересеченияЗаписьЧитаемыхКонтекстноеМеню + 753 + true + + CheckBoxField + true + Auto + true + + CommonPicture.АрхивАнкета + + Left + true + + + + ПересеченияПовторнаяЗапись + 755 + true + true + + true + + + Пересечения.ПовторнаяЗапись + + None + + ru + Повторная запись изменяемых объектов другими обработчиками. + + + ПересеченияПовторнаяЗаписьРасширеннаяПодсказка + 757 + Label + true + true + + Left + + + + ПересеченияПовторнаяЗаписьКонтекстноеМеню + 756 + true + + CheckBoxField + true + Auto + true + + CommonPicture.Предупреждение + + Left + true + + + + ПересеченияОбъектМетаданных + 749 + true + true + + true + + + Пересечения.ОбъектМетаданных + + + ПересеченияОбъектМетаданныхРасширеннаяПодсказка + 751 + Label + true + true + + Left + + + + ПересеченияОбъектМетаданныхКонтекстноеМеню + 750 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПересеченияОбработчикПисатель + 743 + + <key>ru</key> + <value>Обработчик писатель</value> + + true + true + + true + + + Пересечения.ПроцедураПисатель + + + ПересеченияОбработчикПисательРасширеннаяПодсказка + 745 + Label + true + true + + Left + + + + ПересеченияОбработчикПисательКонтекстноеМеню + 744 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПересеченияОбработчикЧитательИлиПисатель2 + 746 + + <key>ru</key> + <value>Обработчик читатель (или писатель 2)</value> + + true + true + + true + + + Пересечения.ПроцедураЧитательИлиПисатель2 + + + ПересеченияОбработчикЧитательИлиПисатель2РасширеннаяПодсказка + 748 + Label + true + true + + Left + + + + ПересеченияОбработчикЧитательИлиПисатель2КонтекстноеМеню + 747 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПересеченияКоманднаяПанель + 732 + Left + + + ПересеченияСтрокаПоиска + 734 + + ПересеченияСтрокаПоискаРасширеннаяПодсказка + 736 + Label + true + true + + Left + + + + ПересеченияСтрокаПоискаКонтекстноеМеню + 735 + true + + Пересечения + + true + + + + ПересеченияСостояниеПросмотра + 737 + + ПересеченияСостояниеПросмотраРасширеннаяПодсказка + 739 + Label + true + true + + Left + + + + ПересеченияСостояниеПросмотраКонтекстноеМеню + 738 + true + + ViewStatusAddition + Пересечения + + true + + + + ПересеченияУправлениеПоиском + 740 + + ПересеченияУправлениеПоискомРасширеннаяПодсказка + 742 + Label + true + true + + Left + + + + ПересеченияУправлениеПоискомКонтекстноеМеню + 741 + true + + SearchControlAddition + Пересечения + + true + + + + ПересеченияРасширеннаяПодсказка + 733 + Label + true + true + + Left + + + + ПересеченияКонтекстноеМеню + 731 + true + + true + true + true + ByContent + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + Bottom + true + +
      + true + true + + true + + + <key>ru</key> + <value>Конфликты</value> + + + СтраницаКонфликтыРасширеннаяПодсказка + 276 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
      + true + true + + true + + + <key>ru</key> + <value>Страницы формы</value> + + + СтраницыФормыРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Pages + + + OnCurrentPageChange + СтраницыФормыПриСменеСтраницы + + TabsOnTop + Auto + +
      + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 231 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 232 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаЗаписать + 229 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 230 + Label + true + true + + Left + + + Form.Command.ЗаписатьОбработчик + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПроверитьЦиклВПорядкеОбработчиков + 779 + true + true + + + ФормаПроверитьЦиклВПорядкеОбработчиковРасширеннаяПодсказка + 780 + Label + true + true + + Left + + + Form.Command.ПроверитьЦиклВПорядкеОбработчиков + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + NotificationProcessing + ОбработкаОповещения + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ОписаниеОбработчиковОбновления + + + true + + + true + +
      true
      + true +
      + + МодулиПодсистем + 2 + + + true + + + true + + + + ОсновнойОбъектМетаданных + + <key>ru</key> + <value>Объект метаданных</value> + + 3 + + String + + + + true + + + true + + ShowError + true + + + ИндексыКартинокТипов + 4 + + + true + + + true + + + + МножественноеЧисло + 7 + + + true + + + true + + + + ЕдинственноеЧисло + 8 + + + true + + + true + + + + Обработчик2 + + <key>ru</key> + <value>Обработчик2</value> + + 9 + + String + + + + true + + + true + + + + ПорядокВыполнения + 11 + + + true + + + true + + + + ВсегоЗаписьЧужихЧитаемых + 12 + + Number + + 10 + + + + true + + + true + + + + ВсегоЗаписьСвоихЧитаемых + 13 + + Number + + 10 + + + + true + + + true + + + + ВсегоПовторнаяЗапись + 14 + + Number + + 10 + + + + true + + + true + + + + ПредставлениеПорядка + 15 + + + true + + + true + + + + Комментарий2 + + <key>ru</key> + <value>Комментарий2</value> + + 16 + + String + + + + true + + + true + + + + СсылкаТекущегоОбработчика + 10 + + String + + 36 + + + + true + + + true + + + + Пересечения + + <key>ru</key> + <value>Пересечения</value> + + 17 + + ValueTable + + + true + + + true + + + ПроцедураПисатель + + <key>ru</key> + <value>Обработчик1</value> + + 1 + + String + + 350 + + + + true + + + true + + + + ПроцедураЧитательИлиПисатель2 + + <key>ru</key> + <value>Обработчик2</value> + + 2 + + String + + 350 + + + + true + + + true + + + + ОбъектМетаданных + + <key>ru</key> + <value>Объект метаданных</value> + + 3 + + String + + 300 + + + + true + + + true + + + + ЗаписьЧитаемых + + <key>ru</key> + <value>Запись читаемых</value> + + 4 + + Boolean + + + true + + + true + + + + ПовторнаяЗапись + + <key>ru</key> + <value>Повторная запись</value> + + 5 + + Boolean + + + true + + + true + + + + + ПриоритетыПоУмолчанию + 5 + + + true + + + true + + + + ЗапускИзКонфигурации + 6 + + Boolean + + + true + + + true + + + + ЕстьИдентификаторыОбъектовМетаданных + 18 + + Boolean + + + true + + + true + + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 1 + + ru + Записать и закрыть + + + true + + + + ЗаписатьИЗакрыть + + + Auto + Auto + + + ЗаписатьОбработчик + + <key>ru</key> + <value>Записать</value> + + 2 + + ru + Записать обработчик + + + true + + + + ЗаписатьОбработчик + + + Auto + Auto + + + ЗаполнитьОбработчик1 + + <key>ru</key> + <value>Сначала Текущий</value> + + 3 + + ru + Заполнить обработчик1 + + + true + + Ctrl+1 + + + ЗаполнитьОбработчик1 + + + Auto + Auto + + + ЗаполнитьОбработчик2 + + <key>ru</key> + <value>Сначала Конфликтующий</value> + + 4 + + ru + Заполнить обработчик1 + + + true + + Ctrl+2 + + + ЗаполнитьОбработчик2 + + + Auto + Auto + + + ЗаполнитьЛюбой + + <key>ru</key> + <value>Любой порядок</value> + + 5 + + ru + Заполнить обработчик1 + + + true + + Ctrl+3 + + + ЗаполнитьЛюбой + + + Auto + Auto + + + ДобавитьОбъектОбработчикаВЧитаемые + + <key>ru</key> + <value>Добавить объект по имени обработчика</value> + + 6 + + true + + Shift+V + + + ДобавитьОбъектОбработчикаВЧитаемые + + + Auto + Auto + + + ДобавитьОбъектОбработчикаВИзменяемые + + <key>ru</key> + <value>Добавить объект по имени обработчика</value> + + 7 + + true + + Shift+V + + + ДобавитьОбъектОбработчикаВИзменяемые + + + Auto + Auto + + + ПроверитьЦиклВПорядкеОбработчиков + + <key>ru</key> + <value>Есть цикл в порядке обработчиков</value> + + 8 + + ru + Проверить цикл в порядке обработчиков + + + true + + + + ПроверитьЦиклВПорядкеОбработчиков + + + Auto + Auto + + + ДобавитьИзменяемыйОбъектВЧитаемые + + <key>ru</key> + <value>Добавить в читаемые</value> + + 9 + + ru + Добавить изменяемый объект в читаемые + + + true + + Shift+W + + + ДобавитьИзменяемыйОбъектВЧитаемые + + + Auto + Auto + + + ДобавитьТипыРеквизитаВЧитаемые + + <key>ru</key> + <value>Добавить типы реквизита</value> + + 10 + + ru + Добавить типы реквизита в читаемые + + + true + + Shift+R + + + ДобавитьТипыРеквизитаВЧитаемые + + + Auto + Auto + + + ДобавитьЧитаемыйОбъектВИзменяемые + + <key>ru</key> + <value>Добавить в изменяемые</value> + + 11 + + ru + Добавить читаемый объект в изменяемые + + + true + + Shift+W + + + ДобавитьЧитаемыйОбъектВИзменяемые + + + Auto + Auto + + + ПриоритетПоУмолчанию + + <key>ru</key> + <value>Порядок по умолчанию</value> + + 12 + + ru + Порядок по умолчанию может не совпадать с текущими требованиями. +Необходимо исправить его если требуется. + + + true + + + + ПриоритетПоУмолчанию + + + Auto + Auto + + + НоваяСтрока + + Boolean + + + + АдресОбработчика + + String + + + + + ЗапускИзКонфигурации + + Boolean + + + + + + + +
      diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Help/ru.html b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Help/ru.html new file mode 100644 index 000000000..1735fcc11 --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Help/ru.html @@ -0,0 +1,13 @@ + +

      Форма обработчика

      +

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

      +

      Описание

      +

      Объекты

      +

      Конфликты

      +

      Описание

      +

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

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

      Объекты

      +

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

      +

      Конфликты

      +

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

      +

       

      \ 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..95a06eebf --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Module.bsl @@ -0,0 +1,1209 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + + ЗапускИзКонфигурации = Параметры.ЗапускИзКонфигурации; + ЕстьИдентификаторыОбъектовМетаданных = Метаданные.Справочники.Найти("ИдентификаторыОбъектовМетаданных") <> Неопределено; + + МассивПорядка = Новый Массив; + МассивПорядка.Добавить(НСтр("ru = 'Текущий'")); + МассивПорядка.Добавить(НСтр("ru = 'Конфликтующий'")); + МассивПорядка.Добавить(НСтр("ru = 'Любой'")); + + Элементы.ПриоритетыВыполненияВыборПорядкаВыполнения.СписокВыбора.ЗагрузитьЗначения(МассивПорядка); + + Представление = Новый Соответствие; + Представление.Вставить("До", МассивПорядка[0]); + Представление.Вставить("После", МассивПорядка[1]); + Представление.Вставить("Любой", МассивПорядка[2]); + ПредставлениеПорядка = Новый ФиксированноеСоответствие(Представление); + + ЗаполнитьСоответствияМодуля(МассивПорядка); + Модифицированность = Параметры.НоваяСтрока; + + Если НЕ ПустаяСтрока(Параметры.АдресОбработчика) Тогда + + Данные = ПолучитьИзВременногоХранилища(Параметры.АдресОбработчика); + Объект["ОбработчикиОбновления"].Загрузить(Данные.ТабличныеЧасти.ОбработчикиОбновления); + Если Данные.ТабличныеЧасти.Свойство("КонфликтыОбработчиков") Тогда + Объект["КонфликтыОбработчиков"].Загрузить(Данные.ТабличныеЧасти.КонфликтыОбработчиков); + КонецЕсли; + + СсылкаТекущегоОбработчика = Объект.ОбработчикиОбновления[0].Ссылка; + ПроцедураОбработки = Объект.ОбработчикиОбновления[0].Процедура; + Если НЕ ПустаяСтрока(ПроцедураОбработки) Тогда + Заголовок = ПроцедураОбработки; + АвтоЗаголовок = Ложь; + КонецЕсли; + ОсновнойОбъектМетаданных = ИмяОсновногоОбъектаМетаданных(Объект.ОбработчикиОбновления[0].Процедура, ЕдинственноеЧисло); + Элементы.Обработчик1.РасширеннаяПодсказка.Заголовок = Объект.ОбработчикиОбновления[0].Комментарий; + + СодержитОбъектМетаданных = Новый Структура("ЧитаемыеОбъекты,ИзменяемыеОбъекты,БлокируемыеОбъекты"); + Для Каждого ТабличнаяЧасть Из Данные.ТабличныеЧасти Цикл + Если СодержитОбъектМетаданных.Свойство(ТабличнаяЧасть.Ключ) Тогда + Для Каждого СтрокаТЧ Из ТабличнаяЧасть.Значение Цикл + НоваяСтрока = Объект[ТабличнаяЧасть.Ключ].Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ); + НоваяСтрока.ИндексКартинки = ИндексКартинки(СтрокаТЧ.ОбъектМетаданных); + КонецЦикла; + + ИначеЕсли СтрНайти(ТабличнаяЧасть.Ключ, "ПриоритетыВыполнения") > 0 Тогда + ЗагрузитьПриоритетыОбработчика(ТабличнаяЧасть.Значение); + + ИначеЕсли СтрНайти(ТабличнаяЧасть.Ключ, "КонфликтыОбработчиков") = 0 Тогда + Объект[ТабличнаяЧасть.Ключ].Загрузить(ТабличнаяЧасть.Значение); + + КонецЕсли; + КонецЦикла; + + МодулиПодсистем = Данные.МодулиПодсистем; + ПереданСписокМодулейОбновления = МодулиПодсистем <> Неопределено; + Элементы.ИмяОсновногоСерверногоМодуля.Видимость = НЕ ПереданСписокМодулейОбновления; + Если ПереданСписокМодулейОбновления Тогда + Список = Элементы.Подсистема.СписокВыбора; + Для Каждого Подсистема Из МодулиПодсистем Цикл + Список.Добавить(Подсистема.Ключ); + КонецЦикла; + Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв); + КонецЕсли; + + Если ЗначениеЗаполнено(Объект.ОбработчикиОбновления[0].Подсистема) Тогда + Объект.ОбработчикиОбновления[0].ИмяОсновногоСерверногоМодуля = МодулиПодсистем[Объект.ОбработчикиОбновления[0].Подсистема]; + КонецЕсли; + Элементы.ИмяОсновногоСерверногоМодуля.Видимость = НЕ ЗначениеЗаполнено(Объект.ОбработчикиОбновления[0].ИмяОсновногоСерверногоМодуля); + + Иначе + Объект["ОбработчикиОбновления"].Добавить(); + КонецЕсли; + + УстановитьОтметкуНезаполненногоМонопольногоОбработчика(); + УстановитьОтметкуНезаполненногоПроцедураПроверки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если Модифицированность Тогда + Отказ = Истина; + ОбработчикОтвета = Новый ОписаниеОповещения("ЗавершениеЗакрытияФормы", ЭтотОбъект); + ПоказатьВопрос(ОбработчикОтвета, НСтр("ru = 'Данные были изменены. Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеЗакрытияФормы(Результат, ДополнительныеПараметры) Экспорт + + Адрес = Неопределено; + Если Результат = КодВозвратаДиалога.Да Тогда + + Если НЕ ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + + Если ЕстьЦиклПорядкаВыполненияОбработчиков() Тогда + Возврат; + КонецЕсли; + + Адрес = ПоместитьДанныеОбработчикаВХранилище(ВладелецФормы.УникальныйИдентификатор); + Модифицированность = Ложь; + Закрыть(Адрес); + + ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда + // Ничего не делаем + Иначе + Модифицированность = Ложь; + Закрыть(Адрес); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "ОбновленыДанныеОКонфликтахОбработчикаОбновления" Тогда + ОбновитьДанныеОКонфликтахОбработчика(Параметр); + Модифицированность = Ложь; + КонецЕсли; + +КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ОсновнойОбъектМетаданныхНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ВыборОбъектаМетаданных(Элемент, ОсновнойОбъектМетаданных); + +КонецПроцедуры + +&НаКлиенте +Процедура ОсновнойОбъектМетаданныхОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = ТипЗнч(ВыбранноеЗначение) = Тип("Строка"); + ПараметрыОбработчикаВыбора = ПараметрыОбработчикаВыбора(, ОсновнойОбъектМетаданных); + ОбработкаВыбораОбъектаМетаданных(ВыбранноеЗначение, ПараметрыОбработчикаВыбора); + +КонецПроцедуры + +&НаКлиенте +Процедура ОсновнойОбъектМетаданныхАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + + ВключатьОбщиеМодули = Истина; + ПодобратьОбъектыМетаданных(Текст, ДанныеВыбора, СтандартнаяОбработка, ВключатьОбщиеМодули); + +КонецПроцедуры + +&НаКлиенте +Процедура ОсновнойОбъектМетаданныхОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) + + ВключатьОбщиеМодули = Истина; + ПодобратьОбъектыМетаданных(Текст, ДанныеВыбора, СтандартнаяОбработка, ВключатьОбщиеМодули); + +КонецПроцедуры + +&НаКлиенте +Процедура ИдентификаторНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + Модифицированность = Истина; + Объект.ОбработчикиОбновления[0].Идентификатор = Строка(Новый УникальныйИдентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроцедураПриИзменении(Элемент) + + ПроцедураОбработки = Объект.ОбработчикиОбновления[0].Процедура; + Если НЕ ПустаяСтрока(ПроцедураОбработки) Тогда + Заголовок = ПроцедураОбработки; + АвтоЗаголовок = Ложь; + ОсновнойОбъектМетаданных = ИмяОсновногоОбъектаМетаданных(ПроцедураОбработки, ЕдинственноеЧисло); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроцедураПроверкиПриИзменении(Элемент) + + Элементы.ПроцедураПроверки.ОтметкаНезаполненного = Не ЗначениеЗаполнено(Объект.ОбработчикиОбновления[0].ПроцедураПроверки); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроцедураПроверкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если Объект.ЧитаемыеОбъекты.НайтиСтроки(Новый Структура("БлокироватьИнтерфейс", Истина)).Количество() > 0 + ИЛИ Объект.БлокируемыеОбъекты.Количество() > 0 Тогда + ТекстСообщения = НСтр("ru = 'Процедура ""ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"" не предназначена для проверки блокировки в обработчиках, которые контролируют блокировку читаемых данных или прочих объектов.'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,,"ПроцедураПроверки","Объект"); + Возврат; + КонецЕсли; + + Объект.ОбработчикиОбновления[0].ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Элементы.ПроцедураПроверки.ОтметкаНезаполненного = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура РежимВыполненияПриИзменении(Элемент) + УстановитьОтметкуНезаполненногоМонопольногоОбработчика(); +КонецПроцедуры + +&НаКлиенте +Процедура ПодсистемаПриИзменении(Элемент) + + ТекущаяПодсистема = Объект.ОбработчикиОбновления[0].Подсистема; + Если МодулиПодсистем <> Неопределено И НЕ ПустаяСтрока(ТекущаяПодсистема) Тогда + Объект.ОбработчикиОбновления[0].ИмяОсновногоСерверногоМодуля = МодулиПодсистем[ТекущаяПодсистема]; + КонецЕсли; + Элементы.ИмяОсновногоСерверногоМодуля.Видимость = НЕ ЗначениеЗаполнено(Объект.ОбработчикиОбновления[0].ИмяОсновногоСерверногоМодуля); + +КонецПроцедуры + +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Оповещение = Новый ОписаниеОповещения("КомментарийНачалоВыбораЗавершение", ЭтотОбъект); + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияМногострочногоТекста( + Оповещение, Элементы.Комментарий.ТекстРедактирования, НСтр("ru='Служебный комментарий'")); + +КонецПроцедуры + +&НаКлиенте +Процедура СтраницыФормыПриСменеСтраницы(Элемент, ТекущаяСтраница) + + Если ТекущаяСтраница.Имя = "СтраницаКонфликты" Тогда + Элементы.Объявление.Видимость = Модифицированность; + Элементы.Обработчик1.РасширеннаяПодсказка.Заголовок = Объект.ОбработчикиОбновления[0].Комментарий; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормы + +&НаКлиенте +Процедура ОбъектыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) + + Если НоваяСтрока Тогда + ТекущиеДанные = Элемент.ТекущиеДанные; + ТекущиеДанные.ИндексКартинки = 1000; + ТекущиеДанные.Ссылка = Объект.ОбработчикиОбновления[0].Ссылка; + Если Элемент.Имя = "ИзменяемыеОбъекты" Тогда + ТекущиеДанные.БлокироватьИнтерфейс = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбъектМетаданныхНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ИмяТаблицы = Элемент.Родитель.Родитель.Имя; + ВыборОбъектаМетаданных(Элемент,,ИмяТаблицы); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбъектМетаданныхОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = ТипЗнч(ВыбранноеЗначение) = Тип("Строка"); + ИмяТаблицы = Элемент.Родитель.Родитель.Имя; + ПараметрыОбработчикаВыбора = ПараметрыОбработчикаВыбора(ИмяТаблицы); + ОбработкаВыбораОбъектаМетаданных(ВыбранноеЗначение, ПараметрыОбработчикаВыбора); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбъектМетаданныхАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + + ПодобратьОбъектыМетаданных(Текст, ДанныеВыбора, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбъектМетаданныхОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) + + ПодобратьОбъектыМетаданных(Текст, ДанныеВыбора, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбъектыПослеУдаления(Элемент) + УстановитьОтметкуНезаполненногоПроцедураПроверки(); +КонецПроцедуры + +&НаКлиенте +Процедура ПриоритетыВыполненияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Приоритет = Элемент.ТекущиеДанные; + ЗаполнитьПересеченияОбработчика(Приоритет.Ссылка, Приоритет.Обработчик2); + + АдресДанных = ПоместитьПересеченияОбработчикаВХранилище(Приоритет.Ссылка, Приоритет.Обработчик2); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("АдресДанных", АдресДанных); + + ИмяФормыОбработчика = "Обработка.ОписаниеОбработчиковОбновления.Форма.ОбъектыПересеченияОбработчика"; + Если НЕ ЗапускИзКонфигурации Тогда + ИмяФормыОбработчика = "ВнешняяОбработка.ОписаниеОбработчиковОбновления.Форма.ОбъектыПересеченияОбработчика"; + КонецЕсли; + + ОткрытьФорму(ИмяФормыОбработчика, + ПараметрыФормы, + ЭтотОбъект, + ЭтотОбъект.УникальныйИдентификатор, + , + , + , + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриоритетыВыполненияПриАктивизацииСтроки(Элемент) + + Если Элемент.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ПодключитьОбработчикОжидания("ОбновитьСведенияОбработчика2", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриоритетыВыполненияВыборПорядкаВыполненияПриИзменении(Элемент) + + ТекущиеДанные = Элементы.ПриоритетыВыполнения.ТекущиеДанные; + ТекущиеДанные.Порядок = ПорядокВыполнения[ТекущиеДанные.ВыборПорядкаВыполнения]; + ТекущиеДанные.ЗаданПорядокВыполнения = ЗначениеЗаполнено(ТекущиеДанные.Порядок); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + Если НЕ ЗаполненоПравильно() Тогда + Возврат; + КонецЕсли; + + Адрес = ПоместитьДанныеОбработчикаВХранилище(ВладелецФормы.УникальныйИдентификатор); + Модифицированность = Ложь; + Закрыть(Адрес); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьОбработчик(Команда) + + Если НЕ ЗаполненоПравильно() Тогда + Возврат; + КонецЕсли; + + Адрес = ПоместитьДанныеОбработчикаВХранилище(ВладелецФормы.УникальныйИдентификатор); + Оповестить("ИзменилосьОписаниеОбработчикаОбновления", Адрес); + Элементы.Объявление.Видимость = Модифицированность; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьОбработчик1(Команда) + ЗаполнитьПорядокВыполнения("До"); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьОбработчик2(Команда) + ЗаполнитьПорядокВыполнения("После"); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьЛюбой(Команда) + ЗаполнитьПорядокВыполнения("Любой"); +КонецПроцедуры + +&НаКлиенте +Процедура ПриоритетПоУмолчанию(Команда) + + УстановитьПорядокПоУмолчанию(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьОбъектОбработчикаВЧитаемые(Команда) + + ДобавитьОсновнойОбъектМетаданных("ЧитаемыеОбъекты"); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьОбъектОбработчикаВИзменяемые(Команда) + + ДобавитьОсновнойОбъектМетаданных("ИзменяемыеОбъекты"); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьИзменяемыйОбъектВЧитаемые(Команда) + + СтрокиОбъектов = Новый Массив; + Для Каждого ИдСтроки Из Элементы.ИзменяемыеОбъекты.ВыделенныеСтроки Цикл + Строка = Объект.ИзменяемыеОбъекты.НайтиПоИдентификатору(ИдСтроки); + СтрокиОбъектов.Добавить(Строка); + КонецЦикла; + ДобавитьОбъектыВТаблицу("ЧитаемыеОбъекты", СтрокиОбъектов); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьЧитаемыйОбъектВИзменяемые(Команда) + + СтрокиОбъектов = Новый Массив; + Для Каждого ИдСтроки Из Элементы.ЧитаемыеОбъекты.ВыделенныеСтроки Цикл + Строка = Объект.ЧитаемыеОбъекты.НайтиПоИдентификатору(ИдСтроки); + СтрокиОбъектов.Добавить(Строка); + КонецЦикла; + ДобавитьОбъектыВТаблицу("ИзменяемыеОбъекты", СтрокиОбъектов); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьТипыРеквизитаВЧитаемые(Команда) + + ДобавитьТипыРеквизита("ЧитаемыеОбъекты"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьЦиклВПорядкеОбработчиков(Команда) + + ЕстьЦиклПорядкаВыполненияОбработчиков(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + +КонецПроцедуры + +&НаКлиенте +Процедура КомментарийНачалоВыбораЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если РезультатЗакрытия <> Неопределено Тогда + Объект.ОбработчикиОбновления[0].Комментарий = РезультатЗакрытия; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ЗаполненоПравильно() + + Если НЕ ПроверитьЗаполнение() Тогда + Возврат Ложь; + КонецЕсли; + + Если ЕстьЦиклПорядкаВыполненияОбработчиков() Тогда + Возврат Ложь; + КонецЕсли; + + ТекущийОбработчик = Объект.ОбработчикиОбновления[0]; + Если ТекущийОбработчик.РежимВыполнения = "Отложенно" + И Объект.ИзменяемыеОбъекты.Количество() = 0 Тогда + ТекстСообщения = НСтр("ru = 'Отложенный обработчик не может быть записан с пустой табличной частью ""Изменяемые объекты""'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаОбъекты; + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +&НаСервере +Функция ПоместитьДанныеОбработчикаВХранилище(УникальныйИдентификаторВладельцаФормы) + + Данные = Новый Структура("ТабличныеЧасти", Новый Структура); + Объект.ОбработчикиОбновления[0].Изменен = Истина; + Данные.ТабличныеЧасти.Вставить("ОбработчикиОбновления", Объект.ОбработчикиОбновления.Выгрузить()); + Данные.ТабличныеЧасти.Вставить("ЧитаемыеОбъекты", Объект.ЧитаемыеОбъекты.Выгрузить()); + Данные.ТабличныеЧасти.Вставить("ИзменяемыеОбъекты", Объект.ИзменяемыеОбъекты.Выгрузить()); + Данные.ТабличныеЧасти.Вставить("БлокируемыеОбъекты", Объект.БлокируемыеОбъекты.Выгрузить()); + Данные.ТабличныеЧасти.Вставить("ПриоритетыВыполнения", Объект.ПриоритетыВыполнения.Выгрузить()); + + Возврат ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификаторВладельцаФормы); + +КонецФункции + +&НаСервере +Функция ПредставлениеОбъектаМетаданных(СсылкаОбъектаМетаданных) + + ИмяРеквизита = "ПолноеИмя"; + Если ТипЗнч(СсылкаОбъектаМетаданных) = Тип("Строка") Тогда + ПолноеИмя = СсылкаОбъектаМетаданных; + Иначе + ПолноеИмя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаОбъектаМетаданных, ИмяРеквизита); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ОбъектМетаданных", ПолноеИмя); + Результат.Вставить("ИндексКартинки", ИндексКартинки(ПолноеИмя)); + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ИндексКартинки(ПолноеИмяОбъектаМетаданных) + + ТипОбъектаМетаданных = СтрРазделить(ПолноеИмяОбъектаМетаданных, ".")[0]; + Результат = 0; + Если ИндексыКартинокТипов.Свойство(ТипОбъектаМетаданных) Тогда + Результат = ИндексыКартинокТипов[ТипОбъектаМетаданных]; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьСоответствияМодуля(МассивПорядка) + + ИндексыКартинок = Новый Структура; + ИндексыКартинок.Вставить("Константа", 1); + ИндексыКартинок.Вставить("Справочник", 3); + ИндексыКартинок.Вставить("Документ", 7); + ИндексыКартинок.Вставить("ПланВидовХарактеристик", 9); + ИндексыКартинок.Вставить("ПланСчетов", 11); + ИндексыКартинок.Вставить("ПланВидовРасчета", 13); + ИндексыКартинок.Вставить("РегистрСведений", 15); + ИндексыКартинок.Вставить("РегистрНакопления", 17); + ИндексыКартинок.Вставить("РегистрБухгалтерии", 19); + ИндексыКартинок.Вставить("РегистрРасчета", 21); + ИндексыКартинок.Вставить("БизнесПроцесс", 23); + ИндексыКартинок.Вставить("Задача", 25); + + ИндексыКартинокТипов = Новый ФиксированнаяСтруктура(ИндексыКартинок); + + МнЧисло = Новый Соответствие; + МнЧисло.Вставить("Константа", "Константы"); + МнЧисло.Вставить("Справочник", "Справочники"); + МнЧисло.Вставить("Документ", "Документы"); + МнЧисло.Вставить("ПланВидовХарактеристик", "ПланыВидовХарактеристик"); + МнЧисло.Вставить("ПланСчетов", "ПланыСчетов"); + МнЧисло.Вставить("ПланВидовРасчета", "ПланыВидовРасчета"); + МнЧисло.Вставить("РегистрСведений", "РегистрыСведений"); + МнЧисло.Вставить("РегистрНакопления", "РегистрыНакопления"); + МнЧисло.Вставить("РегистрБухгалтерии", "РегистрыБухгалтерии"); + МнЧисло.Вставить("РегистрРасчета", "РегистрыРасчета"); + МнЧисло.Вставить("БизнесПроцесс", "БизнесПроцессы"); + МнЧисло.Вставить("Задача", "Задачи"); + МнЧисло.Вставить("Обработка", "Обработки"); + + ЕдЧисло = Новый Соответствие; + Для Каждого Класс Из МнЧисло Цикл + ЕдЧисло.Вставить(Класс.Значение, Класс.Ключ); + КонецЦикла; + + МножественноеЧисло = Новый ФиксированноеСоответствие(МнЧисло); + ЕдинственноеЧисло = Новый ФиксированноеСоответствие(ЕдЧисло); + + Порядок = Новый Соответствие; + Порядок.Вставить(МассивПорядка[0], "До"); + Порядок.Вставить(МассивПорядка[1], "После"); + Порядок.Вставить(МассивПорядка[2], "Любой"); + ПорядокВыполнения = Новый ФиксированноеСоответствие(Порядок); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ИмяОсновногоОбъектаМетаданных(ИмяПроцедуры, ЕдинственноеЧисло) + + ЧастиИмени = СтрРазделить(ИмяПроцедуры, "."); + ПолноеИмяОбъекта = ""; + Если ЧастиИмени.Количество() = 2 Тогда + ПолноеИмяОбъекта = "ОбщийМодуль." + ЧастиИмени[0]; + ИначеЕсли ЧастиИмени.Количество() = 3 Тогда + ЧастиИмени.Удалить(ЧастиИмени.ВГраница()); + ЧастиИмени[0] = ЕдинственноеЧисло[ЧастиИмени[0]]; + ПолноеИмяОбъекта = СтрСоединить(ЧастиИмени, "."); + КонецЕсли; + Возврат ПолноеИмяОбъекта; + +КонецФункции + +&НаКлиенте +Процедура ВыборОбъектаМетаданных(Элемент, ТекущееЗначение = "", ИмяТаблицы = Неопределено) + + Если НЕ ЕстьИдентификаторыОбъектовМетаданных Тогда + Возврат; + КонецЕсли; + + МассивСсылок = ДоступныеКлассыДляДляВыбораМетаданных(ИмяТаблицы = Неопределено); + СписокРодителей = Новый СписокЗначений; + СписокРодителей.ЗагрузитьЗначения(МассивСсылок); + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("РежимВыбора", Истина); + + СтруктураОтбора = Новый Структура; + СтруктураОтбора.Вставить("Родитель", СписокРодителей); + + ПараметрыФормы.Вставить("Отбор", СтруктураОтбора); + Если ИмяТаблицы <> Неопределено Тогда + ТекущееЗначение = Элементы[ИмяТаблицы].ТекущиеДанные.ОбъектМетаданных; + КонецЕсли; + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущееЗначение); + + ПараметрыОбработчикаВыбора = ПараметрыОбработчикаВыбора(ИмяТаблицы, ТекущееЗначение); + ОбработчикВыбора = Новый ОписаниеОповещения("ОбработкаВыбораОбъектаМетаданных", ЭтотОбъект, ПараметрыОбработчикаВыбора); + + ИмяФормыВыбора = "Обработка.ОписаниеОбработчиковОбновления.Форма.ФормаВыбораИдентификаторовОбъектовМетаданных"; + Если НЕ ЗапускИзКонфигурации Тогда + ИмяФормыВыбора = "ВнешняяОбработка.ОписаниеОбработчиковОбновления.Форма.ФормаВыбораИдентификаторовОбъектовМетаданных"; + КонецЕсли; + + ОткрытьФорму(ИмяФормыВыбора, + ПараметрыФормы, + Элемент, + ЭтотОбъект.УникальныйИдентификатор, + , + , + ОбработчикВыбора, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Функция ПараметрыОбработчикаВыбора(ИмяТаблицы = Неопределено, ТекущееЗначение = "") + + ПараметрыОбработчикаВыбора = Новый Структура("ИмяРеквизита", "ОсновнойОбъектМетаданных"); + Если ЗначениеЗаполнено(ИмяТаблицы) Тогда + ПараметрыОбработчикаВыбора = Новый Структура("ИмяТаблицы", ИмяТаблицы); + КонецЕсли; + ПараметрыОбработчикаВыбора.Вставить("ПредыдущееЗначение", ТекущееЗначение); + + Возврат ПараметрыОбработчикаВыбора; + +КонецФункции + +&НаКлиенте +Процедура ОбработкаВыбораОбъектаМетаданных(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт + + Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда + ПредставлениеОбъекта = ПредставлениеОбъектаМетаданных(ВыбранноеЗначение); + Если ДополнительныеПараметры.Свойство("ИмяТаблицы") Тогда + ТекущиеДанные = Элементы[ДополнительныеПараметры.ИмяТаблицы].ТекущиеДанные; + ТекущиеДанные.ИндексКартинки = ПредставлениеОбъекта.ИндексКартинки; + ТекущиеДанные.ОбъектМетаданных = ПредставлениеОбъекта.ОбъектМетаданных; + + ИначеЕсли ДополнительныеПараметры.Свойство("ИмяРеквизита") Тогда + Модифицированность = Истина; + ЭтотОбъект[ДополнительныеПараметры.ИмяРеквизита] = ПредставлениеОбъекта.ОбъектМетаданных; + Заголовок = ПредставлениеОбъекта.ОбъектМетаданных; + АвтоЗаголовок = Ложь; + Если ЗначениеЗаполнено(ПредставлениеОбъекта.ОбъектМетаданных) Тогда + ЧастиИмени = СтрРазделить(ПредставлениеОбъекта.ОбъектМетаданных, "."); + Если ЧастиИмени.Количество() > 0 Тогда + ЧастиИмени[0] = МножественноеЧисло[ЧастиИмени[0]]; + ИмяОбъекта = СтрСоединить(ЧастиИмени, "."); + ОбновитьИмяПроцедуры("Процедура", ИмяОбъекта, ДополнительныеПараметры.ПредыдущееЗначение, "ОбработатьДанныеДляПереходаНаНовуюВерсию"); + ОбновитьИмяПроцедуры("ПроцедураЗаполненияДанныхОбновления", ИмяОбъекта, ДополнительныеПараметры.ПредыдущееЗначение, "ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьИмяПроцедуры(КонтейнерИмени, ИмяОбъекта, Знач ПредыдущееИмяОбъекта, ИмяНовойПроцедуры) + + ТекущийОбработчик = Объект.ОбработчикиОбновления[0]; + Если ПустаяСтрока(ТекущийОбработчик[КонтейнерИмени]) Тогда + ТекущийОбработчик[КонтейнерИмени] = ИмяОбъекта + "." + ИмяНовойПроцедуры; + + ИначеЕсли НЕ ПустаяСтрока(ПредыдущееИмяОбъекта) Тогда + ЧастиИмени = СтрРазделить(ПредыдущееИмяОбъекта, "."); + Если ЧастиИмени.Количество() > 0 Тогда + ЧастиИмени[0] = МножественноеЧисло[ЧастиИмени[0]]; + ПредыдущееИмяОбъекта = СтрСоединить(ЧастиИмени, "."); + КонецЕсли; + + ТекущийОбработчик[КонтейнерИмени] = СтрЗаменить(ТекущийОбработчик[КонтейнерИмени], ПредыдущееИмяОбъекта, ИмяОбъекта); + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДоступныеКлассыДляДляВыбораМетаданных(ВключитьОбщиеМодули = Ложь) + + МассивКлассов = ДоступныеКлассыОбъектовМетаданных(ВключитьОбщиеМодули); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ИдентификаторыОбъектов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектов + |ГДЕ + | ИдентификаторыОбъектов.Имя В(&МассивКлассов) + | И НЕ ИдентификаторыОбъектов.ПометкаУдаления + | И ИдентификаторыОбъектов.Родитель = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("МассивКлассов", МассивКлассов); + + МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Возврат МассивСсылок; + +КонецФункции + +&НаСервереБезКонтекста +Функция ДоступныеКлассыОбъектовМетаданных(ВключитьОбщиеМодули = Ложь) + + МассивОграничений = Новый Массив; + + Если ВключитьОбщиеМодули Тогда + МассивОграничений.Добавить("ОбщиеМодули"); + КонецЕсли; + + МассивОграничений.Добавить("БизнесПроцессы"); + МассивОграничений.Добавить("Документы"); + МассивОграничений.Добавить("Задачи"); + МассивОграничений.Добавить("Константы"); + МассивОграничений.Добавить("ПараметрыСеанса"); + МассивОграничений.Добавить("ПланыВидовРасчета"); + МассивОграничений.Добавить("ПланыВидовХарактеристик"); + МассивОграничений.Добавить("ПланыОбмена"); + МассивОграничений.Добавить("ПланыСчетов"); + МассивОграничений.Добавить("Последовательности"); + МассивОграничений.Добавить("РегистрыБухгалтерии"); + МассивОграничений.Добавить("РегистрыНакопления"); + МассивОграничений.Добавить("РегистрыРасчета"); + МассивОграничений.Добавить("РегистрыСведений"); + МассивОграничений.Добавить("РегламентныеЗадания"); + МассивОграничений.Добавить("Справочники"); + + Возврат МассивОграничений; + +КонецФункции + +&НаСервере +Процедура ОбновитьДанныеОКонфликтахОбработчика(АдресОбработчика) + + Данные = ПолучитьИзВременногоХранилища(АдресОбработчика); + Объект.КонфликтыОбработчиков.Очистить(); + Объект.КонфликтыОбработчиков.Загрузить(Данные.ТабличныеЧасти.КонфликтыОбработчиков); + Элементы.Обработчик1.РасширеннаяПодсказка.Заголовок = Данные.ТабличныеЧасти.ОбработчикиОбновления[0].Комментарий; + + ЗагрузитьПриоритетыОбработчика(Данные.ТабличныеЧасти.ПриоритетыВыполнения); + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьПриоритетыОбработчика(НовыеПриоритеты) + + ИмяОсновногоОбъекта = ИмяОсновногоОбъектаМетаданных(Объект.ОбработчикиОбновления[0].Процедура, ЕдинственноеЧисло); + Объект.ПриоритетыВыполнения.Очистить(); + Для Каждого Приоритет Из НовыеПриоритеты Цикл + НоваяСтрока = Объект.ПриоритетыВыполнения.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Приоритет); + Если ЗначениеЗаполнено(Приоритет.Порядок) Тогда + НоваяСтрока.ВыборПорядкаВыполнения = ПредставлениеПорядка[Приоритет.Порядок]; + КонецЕсли; + + ЗаполнитьПересеченияОбработчика(Приоритет.Ссылка, Приоритет.Обработчик2); + ОбъектыПересечения = Пересечения.Выгрузить(,"ОбъектМетаданных"); + + ОбъектыПересечения.Свернуть("ОбъектМетаданных"); + ОбъектыПересечения.Сортировать("ОбъектМетаданных"); + Если ОбъектыПересечения.Количество() = 1 Тогда + НоваяСтрока.ОбъектыПересечения = ОбъектыПересечения[0].ОбъектМетаданных; + + ИначеЕсли ОбъектыПересечения.Количество() > 1 Тогда + Для Каждого ОбъектПересечения Из ОбъектыПересечения Цикл + Если ИмяОсновногоОбъекта <> ОбъектПересечения.ОбъектМетаданных Тогда + НоваяСтрока.ОбъектыПересечения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "%1 +%2", ОбъектПересечения.ОбъектМетаданных, ОбъектыПересечения.Количество()-1); + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + КонецЦикла; + Объект.ПриоритетыВыполнения.Сортировать("Процедура2"); + + Если Объект.ПриоритетыВыполнения.Количество() > 1 Тогда + ВысотаТаблицы = Объект.ПриоритетыВыполнения.Количество()+1; + Если ВысотаТаблицы > 8 Тогда + ВысотаТаблицы = 8; + КонецЕсли; + Элементы.ПриоритетыВыполнения.ВысотаВСтрокахТаблицы = ВысотаТаблицы; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПоместитьПересеченияОбработчикаВХранилище(ТекущийОбработчик, КонфликтующийОбработчик) + + ЗаполнитьПересеченияОбработчика(ТекущийОбработчик, КонфликтующийОбработчик); + Адрес = ПоместитьВоВременноеХранилище(Пересечения.Выгрузить(), УникальныйИдентификатор); + Возврат Адрес; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьПересеченияОбработчика(ТекущийОбработчик, КонфликтующийОбработчик) + + Пересечения.Очистить(); + Для Каждого Конфликт Из Объект.КонфликтыОбработчиков Цикл + Отбор = Новый Структура("ОбъектМетаданных,ПроцедураПисатель,ПроцедураЧитательИлиПисатель2", + Конфликт.ОбъектМетаданных, Конфликт.ПроцедураЧитательИлиПисатель2, Конфликт.ПроцедураПисатель); + ОбратныеКонфликты = Пересечения.НайтиСтроки(Отбор); + Если Конфликт.ОбработчикПисатель = ТекущийОбработчик + И Конфликт.ОбработчикЧитательИлиПисатель2 = КонфликтующийОбработчик + ИЛИ Конфликт.ОбработчикПисатель = КонфликтующийОбработчик + И Конфликт.ОбработчикЧитательИлиПисатель2 = ТекущийОбработчик + И ОбратныеКонфликты.Количество() = 0 Тогда + НовоеПересечение = Пересечения.Добавить(); + ЗаполнитьЗначенияСвойств(НовоеПересечение, Конфликт); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСведенияОбработчика2() + + ТекущиеДанные = Элементы.ПриоритетыВыполнения.ТекущиеДанные; + + Обработчик2 = ТекущиеДанные.Процедура2; + Элементы.Обработчик2.РасширеннаяПодсказка.Заголовок = ТекущиеДанные.Комментарий2; + ЗаполнитьПересеченияОбработчика(ТекущиеДанные.Ссылка, ТекущиеДанные.Обработчик2); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьПорядокВыполнения(НовыйПорядок) + + ВыделенныеСтроки = Элементы.ПриоритетыВыполнения.ВыделенныеСтроки; + Если ВыделенныеСтроки.Количество() > 0 Тогда + Для Каждого ИдСтроки Из ВыделенныеСтроки Цикл + Приоритет = Объект.ПриоритетыВыполнения.НайтиПоИдентификатору(ИдСтроки); + Приоритет.Порядок = НовыйПорядок; + Приоритет.ВыборПорядкаВыполнения = ПредставлениеПорядка[НовыйПорядок]; + Приоритет.ЗаданПорядокВыполнения = Истина; + КонецЦикла; + КонецЕсли; + Модифицированность = Истина; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьОтметкуНезаполненногоПроцедураПроверки() + + Отметка = Истина; + + Если ЗначениеЗаполнено(Объект.ОбработчикиОбновления[0].Процедура) + ИЛИ Объект.ОбработчикиОбновления[0].РежимВыполнения = "Монопольно" + ИЛИ Объект.ОбработчикиОбновления[0].РежимВыполнения = "Оперативно" + ИЛИ НЕ (Объект.БлокируемыеОбъекты.Количество() > 0 + ИЛИ Объект.ЧитаемыеОбъекты.НайтиСтроки(Новый Структура("БлокироватьИнтерфейс", Истина)).Количество() > 0 + ИЛИ Объект.ИзменяемыеОбъекты.НайтиСтроки(Новый Структура("БлокироватьИнтерфейс", Истина)).Количество() > 0) Тогда + Отметка = Ложь; + КонецЕсли; + + Элементы.ПроцедураПроверки.ОтметкаНезаполненного = Отметка; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьОтметкуНезаполненногоМонопольногоОбработчика() + + МонопольныйОбработчик = Объект.ОбработчикиОбновления[0].РежимВыполнения = "Монопольно"; + Если МонопольныйОбработчик Тогда + Элементы.ПроцедураЗаполненияДанныхОбновления.АвтоОтметкаНезаполненного = НЕ МонопольныйОбработчик; + Элементы.ПроцедураЗаполненияДанныхОбновления.ОтметкаНезаполненного = НЕ МонопольныйОбработчик; + Элементы.Комментарий.АвтоОтметкаНезаполненного = НЕ МонопольныйОбработчик; + Элементы.Комментарий.ОтметкаНезаполненного = НЕ МонопольныйОбработчик; + Иначе + Элементы.ПроцедураЗаполненияДанныхОбновления.АвтоОтметкаНезаполненного = Неопределено; + Элементы.Комментарий.АвтоОтметкаНезаполненного = Неопределено; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПодобратьОбъектыМетаданных(Текст, ДанныеВыбора, СтандартнаяОбработка, ВключатьОбщиеМодули = Ложь) + + Если ПустаяСтрока(Текст) Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ВключатьОбщиеМодули = Истина; + ОбъектыМетаданных = НайтиОбъектыМетаданных(Текст, ВключатьОбщиеМодули); + + ДанныеВыбора = Новый СписокЗначений; + ДанныеВыбора.ЗагрузитьЗначения(ОбъектыМетаданных); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НайтиОбъектыМетаданных(ЧастьИмени, ВключатьОбщиеМодули) + + ТекстЗапроса = ТекстЗапросаИдентификаторовОбъектовМетаданных(); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ЧастьИмени", "%"+ЧастьИмени+"%"); + Запрос.УстановитьПараметр("МассивКлассов", ДоступныеКлассыОбъектовМетаданных(ВключатьОбщиеМодули)); + ОбъектыМетаданных = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Возврат ОбъектыМетаданных; + +КонецФункции + +&НаСервереБезКонтекста +Функция ТекстЗапросаИдентификаторовОбъектовМетаданных() + + Возврат + "ВЫБРАТЬ ПЕРВЫЕ 50 + | ОбъектыМетаданных.ПолноеИмя КАК Ссылка + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК ОбъектыМетаданных + |ГДЕ + | НЕ ОбъектыМетаданных.ПометкаУдаления + | И ОбъектыМетаданных.ПолноеИмя ПОДОБНО &ЧастьИмени + | + | И ОбъектыМетаданных.Родитель.Имя В (&МассивКлассов) + | И НЕ ОбъектыМетаданных.Родитель.ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | Ссылка"; + +КонецФункции + +&НаСервере +Процедура ДобавитьОсновнойОбъектМетаданных(ИмяТаблицы) + + Если ПустаяСтрока(ОсновнойОбъектМетаданных) Тогда + Возврат; + КонецЕсли; + + Отбор = Новый Структура("ОбъектМетаданных", ОсновнойОбъектМетаданных); + НайденныеСтроки = Объект[ИмяТаблицы].НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Возврат; + КонецЕсли; + + НоваяСтрока = Объект[ИмяТаблицы].Добавить(); + НоваяСтрока.Ссылка = Объект.ОбработчикиОбновления[0].Ссылка; + НоваяСтрока.ОбъектМетаданных = ОсновнойОбъектМетаданных; + НоваяСтрока.ИндексКартинки = ИндексКартинки(ОсновнойОбъектМетаданных); + НоваяСтрока.БлокироватьИнтерфейс = ИмяТаблицы = "ИзменяемыеОбъекты"; + Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьТипыРеквизита(ИмяТаблицы) + + Если Элементы[ИмяТаблицы].ТекущиеДанные = Неопределено Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Не выбран объект метаданных'")); + Возврат; + КонецЕсли; + + ИмяОбъекта = Элементы[ИмяТаблицы].ТекущиеДанные.ОбъектМетаданных; + Если ПустаяСтрока(ИмяОбъекта) Тогда + Возврат; + КонецЕсли; + Имена = СтрРазделить(ИмяОбъекта, "."); + Имена[0] = МножественноеЧисло[Имена[0]]; + ИмяОбъекта = СтрСоединить(Имена, "."); + + Реквизиты = РеквизитыОбъектаМетаданных(ИмяОбъекта); + + ДополнительныеПараметры = Новый Структура("ИмяТаблицы, ИмяОбъекта", ИмяТаблицы, ИмяОбъекта); + ОбработчикВыбора = Новый ОписаниеОповещения("ЗавершениеВыбораОбъектаМетаданных", ЭтотОбъект, ДополнительныеПараметры); + Реквизиты.ПоказатьВыборЭлемента(ОбработчикВыбора, НСтр("ru = 'Выберите реквизит объекта'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеВыбораОбъектаМетаданных(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ПолноеИмяРеквизита = Результат.Значение; + ДобавитьТипыРеквизитаВТаблицу(ДополнительныеПараметры.ИмяТаблицы, ПолноеИмяРеквизита); + +КонецПроцедуры + +&НаСервере +Функция РеквизитыОбъектаМетаданных(ИмяОбъекта) + + Результат = Новый СписокЗначений; + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ИмяОбъекта); + ПолноеИмяОбъекта = МетаданныеОбъекта.ПолноеИмя(); + ЕщеРеквизитыОбъекта = Новый Структура("СтандартныеРеквизиты, Измерения, Ресурсы, Реквизиты"); + ЗаполнитьЗначенияСвойств(ЕщеРеквизитыОбъекта, МетаданныеОбъекта); + Для Каждого Коллекция Из ЕщеРеквизитыОбъекта Цикл + + Если Коллекция.Значение = Неопределено Тогда + Продолжить; + КонецЕсли; + + Для Каждого Реквизит Из Коллекция.Значение Цикл + ПолноеИмяРеквизита = ПолноеИмяОбъекта + "." + Коллекция.Ключ; + // переберем типы реквизита + Для Каждого Тип Из Реквизит.Тип.Типы() Цикл + // если есть хоть один ссылочный + Если ОбщегоНазначения.ЭтоСсылка(Тип) Тогда // добавим его в список + ПолноеИмяРеквизита = ПолноеИмяРеквизита + "." + Реквизит.Имя; + Результат.Добавить(ПолноеИмяРеквизита, Реквизит.Имя); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + КонецЦикла; + Результат.СортироватьПоПредставлению(); + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура ДобавитьТипыРеквизитаВТаблицу(ИмяТаблицы, ПолноеИмяРеквизита) + + ИменаРеквизита = СтрРазделить(ПолноеИмяРеквизита, "."); + ИменаРеквизита[0] = МножественноеЧисло[ИменаРеквизита[0]]; + Реквизит = Метаданные.НайтиПоПолномуИмени(СтрСоединить(ИменаРеквизита, ".")); + Для Каждого Тип Из Реквизит.Тип.Типы() Цикл + ИмяОбъекта = СтрЗаменить(ОбщегоНазначения.СтроковоеПредставлениеТипа(Тип),"Ссылка",""); + ТабличнаяЧасть = Объект[ИмяТаблицы]; // ТабличнаяЧасть - + НоваяСтрока = ТабличнаяЧасть.Добавить(); // СтрокаТаблицыЗначений - + НоваяСтрока.Ссылка = Объект.ОбработчикиОбновления[0].Ссылка; + НоваяСтрока.ОбъектМетаданных = ИмяОбъекта; + НоваяСтрока.ИндексКартинки = ИндексКартинки(ИмяОбъекта); + НоваяСтрока.БлокироватьИнтерфейс = ИмяТаблицы = "ИзменяемыеОбъекты"; + Модифицированность = Истина; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьОбъектыВТаблицу(ИмяТаблицы, СтрокиОбъектов) + + Таблица = Объект[ИмяТаблицы]; + Для Каждого СтрокаОбъекта Из СтрокиОбъектов Цикл + + Отбор = Новый Структура("ОбъектМетаданных", СтрокаОбъекта.ОбъектМетаданных); + НайденныеСтроки = Таблица.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + ТабличнаяЧасть = Объект[ИмяТаблицы]; // ТабличнаяЧасть - + НовыйОбъект = ТабличнаяЧасть.Добавить(); + ЗаполнитьЗначенияСвойств(НовыйОбъект, СтрокаОбъекта); + НовыйОбъект.БлокироватьИнтерфейс = ИмяТаблицы = "ИзменяемыеОбъекты"; + + КонецЦикла; + Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Функция ЕстьЦиклПорядкаВыполненияОбработчиков(Сообщать = Истина) + + ЭтотОбработчик = Объект.ОбработчикиОбновления[0].Ссылка; + ЕстьЦикл = ЭтотОбъект.ВладелецФормы.ЕстьЦиклПорядкаВыполненияОбработчиков(ЭтотОбработчик, Объект.ПриоритетыВыполнения); + Возврат ЕстьЦикл; + +КонецФункции + +&НаСервере +Процедура УстановитьПорядокПоУмолчанию() + + Если Объект.ПриоритетыВыполнения.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ВыборПорядка = Новый Соответствие; + ВыборПорядка.Вставить("До","Обработчик1"); + ВыборПорядка.Вставить("После","Обработчик2"); + ВыборПорядка.Вставить("Любой","Любой"); + + ИнициализироватьПриоритетыПоУмолчанию(); + Для Каждого Пара Из Объект.ПриоритетыВыполнения Цикл + НовыйПорядок = ПорядокПоУмолчанию(Пара.Процедура1, Пара.Процедура2); + Если НЕ Модифицированность И Пара.Порядок <> НовыйПорядок Тогда + Модифицированность = Истина; + КонецЕсли; + Пара.Порядок = НовыйПорядок; + Пара.ВыборПорядкаВыполнения = ВыборПорядка[НовыйПорядок]; + Пара.ЗаданПорядокВыполнения = ЗначениеЗаполнено(НовыйПорядок); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ПорядокПоУмолчанию(ИмяПроцедуры1, ИмяПроцедуры2) + + Результат = ""; + Порядок1 = ПорядокОбъектаПоУмолчанию(ИмяПроцедуры1); + Порядок2 = ПорядокОбъектаПоУмолчанию(ИмяПроцедуры2); + Если Порядок1 = Неопределено ИЛИ Порядок2 = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Результат = "Любой"; + Если Порядок1 < Порядок2 Тогда + Результат = "До"; + ИначеЕсли Порядок1 > Порядок2 Тогда + Результат = "После"; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ПорядокОбъектаПоУмолчанию(ИмяПроцедуры) + + Если СтрЧислоВхождений(ИмяПроцедуры, ".") = 1 Тогда + Возврат Неопределено; + КонецЕсли; + + Имена = СтрРазделить(ИмяПроцедуры,"."); + ТипОбъекта = Имена[0]; + Если ТипОбъекта = "РегистрыСведений" Тогда + Имена.Удалить(Имена.ВГраница()); + ИмяОбъекта = СтрСоединить(Имена, "."); + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ИмяОбъекта); + Если Строка(МетаданныеОбъекта.РежимЗаписи) = "Независимый" Тогда + ТипОбъекта = ТипОбъекта + "Независимые"; + КонецЕсли; + КонецЕсли; + + Возврат ПриоритетыПоУмолчанию[ТипОбъекта]; + +КонецФункции + +&НаСервере +Процедура ИнициализироватьПриоритетыПоУмолчанию() + + Приоритеты = Новый Соответствие; + Приоритеты.Вставить("Константы", 10); + Приоритеты.Вставить("Справочники", 20); + Приоритеты.Вставить("ПланыСчетов", 30); + Приоритеты.Вставить("ПланыВидовХарактеристик", 40); + Приоритеты.Вставить("ПланыВидовРасчета", 50); + Приоритеты.Вставить("Задачи", 60); + Приоритеты.Вставить("БизнесПроцессы", 70); + Приоритеты.Вставить("РегистрыСведенийНезависимые", 80); + Приоритеты.Вставить("Документы", 90); + Приоритеты.Вставить("ЖурналыДокументов", 100); + Приоритеты.Вставить("РегистрыСведений", 110); + Приоритеты.Вставить("РегистрыНакопления", 120); + Приоритеты.Вставить("РегистрыРасчета", 130); + Приоритеты.Вставить("РегистрыБухгалтерии", 140); + + ПриоритетыПоУмолчанию = Новый ФиксированноеСоответствие(Приоритеты); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Form.form b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Form.form new file mode 100644 index 000000000..657f018ff --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Form.form @@ -0,0 +1,3421 @@ + + + + ГруппаНастройкиЗагрузкиВыгрузки + 119 + + ГруппаВыгрузка + 78 + + КаталогSRC + 75 + + <key>ru</key> + <value>Сохранять в репозиторий</value> + + true + true + + true + + + Объект.КаталогSRC + + Left + + КаталогSRCРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + КаталогSRCКонтекстноеМеню + 76 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + КаталогSRCНачалоВыбора + + + TextEditEnd + КаталогSRCОкончаниеВводаТекста + + 41 + true + true + true + true + true + true + true + true + Normal + + ru + Путь к каталогу SRC + + + + + КаталогФайловОшибок + 174 + true + + true + + + КаталогФайловОшибок + + Left + + КаталогФайловОшибокРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + КаталогФайловОшибокКонтекстноеМеню + 175 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + КаталогФайловОшибокНачалоВыбора + + + TextEditEnd + КаталогФайловОшибокОкончаниеВводаТекста + + 41 + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Параметры выгрузки</value> + + + ГруппаВыгрузкаРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройки выгрузки описания обработчиков</value> + + + ru + Настройки параметров загрузки/выгрузки/группировки обработчиков обновления. + + 150 + + ГруппаНастройкиЗагрузкиВыгрузкиРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + + ru + Загружать описание обработчиков из <?>; Сохранять в <?>; + + true + true + true + auto + Auto + Auto + + + + ГруппаОтборы + 123 + + ТекущаяБиблиотека + 125 + + <key>ru</key> + <value>Библиотека</value> + + true + true + + true + + + ТекущаяБиблиотека + + + ТекущаяБиблиотекаРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + + ТекущаяБиблиотекаКонтекстноеМеню + 126 + true + + InputField + Enter + true + Left + true + + + ChoiceProcessing + ПодсистемаОбработкаВыбора + + 15 + true + true + true + true + true + true + true + Normal + + + + ИзменяемыйОбъект + 134 + true + true + + true + + + ИзменяемыйОбъект + + + OnChange + ИзменяемыйОбъектПриИзменении + + + ИзменяемыйОбъектРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + ИзменяемыйОбъектКонтекстноеМеню + 135 + true + + InputField + Enter + true + Left + true + + + Clearing + ИзменяемыйОбъектОчистка + + true + true + true + true + true + true + true + Normal + + + + ЧитаемыйОбъект + 131 + true + true + + true + + + ЧитаемыйОбъект + + + OnChange + ЧитаемыйОбъектПриИзменении + + + ЧитаемыйОбъектРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + ЧитаемыйОбъектКонтекстноеМеню + 132 + true + + InputField + Enter + true + Left + true + + + Clearing + ЧитаемыйОбъектОчистка + + true + true + true + true + true + true + true + Normal + + + + Версия + 248 + + <key>ru</key> + <value>Версия 2.15.3</value> + + true + true + + + ВерсияРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + ВерсияКонтекстноеМеню + 249 + true + + Label + true + true + + Style.ReportLineColor + + + Style.NormalTextFont + 8.0 + + Right + + Left + + + true + true + + true + + + <key>ru</key> + <value>Отборы обработчиков обновления</value> + + + ГруппаОтборыРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаКомандыТаблицы + 156 + + ОбработчикиОбновленияДобавить + 158 + true + true + + true + + + ОбработчикиОбновленияДобавитьРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + UsualButton + Form.Item.ОбработчикиОбновления.StandardCommand.Add + Normal + Auto + 9 + true + true + UserCmds + Auto + + + ОбработчикиОбновленияСкопировать + 154 + true + true + + true + + + ОбработчикиОбновленияСкопироватьРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + UsualButton + Form.Item.ОбработчикиОбновления.StandardCommand.Copy + Normal + Picture + 3 + true + true + UserCmds + + StdPicture.CloneObject + + Auto + InCommandBarAndInAdditionalSubmenu + + + УстановитьНомерСборкиОбработчикам + 216 + + <key>ru</key> + <value>Установить номер сборки</value> + + true + true + + true + + + УстановитьНомерСборкиОбработчикамРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + UsualButton + Form.Command.УстановитьНомерСборкиОбработчикам + Normal + Auto + true + true + UserCmds + Auto + + + Декорация1 + 169 + + <key>ru</key> + <value>Быстрые отборы:</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 171 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 170 + true + + Label + true + true + + Left + + + + БыстрыеОтборы + 160 + true + true + + true + + + БыстрыеОтборыРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + БыстрыеОтборыКонтекстноеМеню + 161 + true + + true + Label + true + + + URLProcessing + БыстрыеОтборыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Команды обработчиков обновления</value> + + + ГруппаКомандыТаблицыРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ОбработчикиОбновления + 1 + + <key>ru</key> + <value>Обработчики обновления</value> + + true + true + + true + + + Объект.ОбработчикиОбновления + + None + + НомерСтроки + 14 + true + true + + + Объект.ОбработчикиОбновления.LineNumber + + + НомерСтрокиРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + НомерСтрокиКонтекстноеМеню + 15 + true + + LabelField + Auto + true + Left + true + + 1 + true + true + + + + ОбработчикиОбновленияСсылка + 100 + true + true + + + Объект.ОбработчикиОбновления.Ссылка + + + ОбработчикиОбновленияСсылкаРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + ОбработчикиОбновленияСсылкаКонтекстноеМеню + 101 + true + + LabelField + true + Auto + true + Left + true + + true + true + + + + ОбработчикиОбновленияПодсистема + 17 + true + true + + true + + + Объект.ОбработчикиОбновления.Подсистема + + + ОбработчикиОбновленияПодсистемаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ОбработчикиОбновленияПодсистемаКонтекстноеМеню + 18 + true + + InputField + true + Auto + true + Left + true + + 30 + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияВерсия + 26 + true + true + + true + + + Объект.ОбработчикиОбновления.Версия + + + ОбработчикиОбновленияВерсияРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ОбработчикиОбновленияВерсияКонтекстноеМеню + 27 + true + + InputField + true + Auto + true + Left + true + + 7 + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияМодульОбновления + 20 + true + true + + + Объект.ОбработчикиОбновления.ИмяОсновногоСерверногоМодуля + + + ОбработчикиОбновленияМодульОбновленияРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ОбработчикиОбновленияМодульОбновленияКонтекстноеМеню + 21 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияРежимВыполненияОтложенныхОбработчиков + 166 + true + true + + + Объект.ОбработчикиОбновления.РежимВыполненияОтложенныхОбработчиков + + + ОбработчикиОбновленияРежимВыполненияОтложенныхОбработчиковРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + + ОбработчикиОбновленияРежимВыполненияОтложенныхОбработчиковКонтекстноеМеню + 167 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияСтатусПроблемы + 140 + true + true + + true + + + Объект.ОбработчикиОбновления.СтатусПроблемы + + + ОбработчикиОбновленияСтатусПроблемыРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + ОбработчикиОбновленияСтатусПроблемыКонтекстноеМеню + 141 + true + + LabelField + Auto + true + true + Left + true + Show + Always + + 17 + true + true + + + + ОбработчикиОбновленияПроцедура + 29 + true + true + + true + + + Объект.ОбработчикиОбновления.Процедура + + + ОбработчикиОбновленияПроцедураРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ОбработчикиОбновленияПроцедураКонтекстноеМеню + 30 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияПроцедураЗаполненияДанныхОбновления + 56 + true + true + + + Объект.ОбработчикиОбновления.ПроцедураЗаполненияДанныхОбновления + + + ОбработчикиОбновленияПроцедураЗаполненияДанныхОбновленияРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + ОбработчикиОбновленияПроцедураЗаполненияДанныхОбновленияКонтекстноеМеню + 57 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияПроцедураПроверки + 53 + true + true + + + Объект.ОбработчикиОбновления.ПроцедураПроверки + + + ОбработчикиОбновленияПроцедураПроверкиРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ОбработчикиОбновленияПроцедураПроверкиКонтекстноеМеню + 54 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияОчередьОтложеннойОбработки + 59 + true + true + + + Объект.ОбработчикиОбновления.ОчередьОтложеннойОбработки + + + ОбработчикиОбновленияОчередьОтложеннойОбработкиРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ОбработчикиОбновленияОчередьОтложеннойОбработкиКонтекстноеМеню + 60 + true + + InputField + true + Auto + true + Left + true + + 1 + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияНоваяОчередь + 163 + true + true + + + Объект.ОбработчикиОбновления.НоваяОчередь + + + ОбработчикиОбновленияНоваяОчередьРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + ОбработчикиОбновленияНоваяОчередьКонтекстноеМеню + 164 + true + + InputField + true + Auto + true + Left + true + + 1 + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияРежимВыполнения + 32 + true + true + + true + + + Объект.ОбработчикиОбновления.РежимВыполнения + + + ОбработчикиОбновленияРежимВыполненияРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ОбработчикиОбновленияРежимВыполненияКонтекстноеМеню + 33 + true + + InputField + true + Auto + true + Left + true + + 13 + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияНачальноеЗаполнение + 23 + true + true + + + Объект.ОбработчикиОбновления.НачальноеЗаполнение + + None + + ru + Начальное заполнение + + + ОбработчикиОбновленияНачальноеЗаполнениеРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ОбработчикиОбновленияНачальноеЗаполнениеКонтекстноеМеню + 24 + true + + CheckBoxField + true + Auto + true + Left + true + + + + ОбработчикиОбновленияВыполнятьВГруппеОбязательных + 35 + true + true + + + Объект.ОбработчикиОбновления.ВыполнятьВГруппеОбязательных + + None + + ru + Обязательный + + + ОбработчикиОбновленияВыполнятьВГруппеОбязательныхРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ОбработчикиОбновленияВыполнятьВГруппеОбязательныхКонтекстноеМеню + 36 + true + + CheckBoxField + true + Auto + true + + StdPicture.AddToFavorites + + Left + true + + + + ОбработчикиОбновленияМногопоточный + 68 + true + true + + + Объект.ОбработчикиОбновления.Многопоточный + + None + + ru + Многопоточный + + + ОбработчикиОбновленияМногопоточныйРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + ОбработчикиОбновленияМногопоточныйКонтекстноеМеню + 69 + true + + CheckBoxField + true + Auto + true + Left + true + + + + ОбработчикиОбновленияЗапускатьТолькоВГлавномУзле + 62 + true + true + + + Объект.ОбработчикиОбновления.ЗапускатьТолькоВГлавномУзле + + + ОбработчикиОбновленияЗапускатьТолькоВГлавномУзлеРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + ОбработчикиОбновленияЗапускатьТолькоВГлавномУзлеКонтекстноеМеню + 63 + true + + CheckBoxField + true + Auto + true + Left + true + + + + ОбработчикиОбновленияЗапускатьИВПодчиненномУзлеРИБСФильтрами + 65 + true + true + + + Объект.ОбработчикиОбновления.ЗапускатьИВПодчиненномУзлеРИБСФильтрами + + + ОбработчикиОбновленияЗапускатьИВПодчиненномУзлеРИБСФильтрамиРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + ОбработчикиОбновленияЗапускатьИВПодчиненномУзлеРИБСФильтрамиКонтекстноеМеню + 66 + true + + CheckBoxField + true + Auto + true + Left + true + + + + ОбработчикиОбновленияОбщиеДанные + 41 + true + true + + + Объект.ОбработчикиОбновления.ОбщиеДанные + + + ОбработчикиОбновленияОбщиеДанныеРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ОбработчикиОбновленияОбщиеДанныеКонтекстноеМеню + 42 + true + + CheckBoxField + true + Auto + true + Left + true + + + + ОбработчикиОбновленияУправлениеОбработчиками + 44 + true + true + + + Объект.ОбработчикиОбновления.УправлениеОбработчиками + + + ОбработчикиОбновленияУправлениеОбработчикамиРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ОбработчикиОбновленияУправлениеОбработчикамиКонтекстноеМеню + 45 + true + + CheckBoxField + true + Auto + true + Left + true + + + + ОбработчикиОбновленияКомментарий + 47 + true + true + + true + + + Объект.ОбработчикиОбновления.Комментарий + + + ОбработчикиОбновленияКомментарийРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ОбработчикиОбновленияКомментарийКонтекстноеМеню + 48 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияИдентификатор + 50 + true + true + + true + + + Объект.ОбработчикиОбновления.Идентификатор + + + ОбработчикиОбновленияИдентификаторРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ОбработчикиОбновленияИдентификаторКонтекстноеМеню + 51 + true + + InputField + true + Auto + true + Left + true + + 15 + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияЗаписьЧитаемых + 143 + true + true + + + Объект.ОбработчикиОбновления.ЗаписьЧитаемых + + None + + ru + Текущий обработчик изменяет объекты, которые читаются другими обработчиками +или другие обработчики изменяют объекты, которые читает текущий обработчик. + + + ОбработчикиОбновленияЗаписьЧитаемыхРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + ОбработчикиОбновленияЗаписьЧитаемыхКонтекстноеМеню + 144 + true + + CheckBoxField + true + Auto + true + + CommonPicture.АрхивАнкета + + Left + true + + + + ОбработчикиОбновленияПовторнаяЗапись + 146 + true + true + + + Объект.ОбработчикиОбновления.ПовторнаяЗапись + + None + + ru + Повторная запись изменяемых объектов другими обработчиками. + + + ОбработчикиОбновленияПовторнаяЗаписьРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + + ОбработчикиОбновленияПовторнаяЗаписьКонтекстноеМеню + 147 + true + + CheckBoxField + true + Auto + true + + CommonPicture.Предупреждение + + Left + true + + + + ОбработчикиОбновленияЗаданПорядокВыполнения + 149 + true + true + + + Объект.ОбработчикиОбновления.ЗаданПорядокВыполнения + + None + + ru + Задан порядок выполнения + + + ОбработчикиОбновленияЗаданПорядокВыполненияРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + + ОбработчикиОбновленияЗаданПорядокВыполненияКонтекстноеМеню + 150 + true + + CheckBoxField + true + Auto + true + + StdPicture.WriteAndClose + + Left + true + + + + ОбработчикиОбновленияИзменен + 198 + true + true + + + Объект.ОбработчикиОбновления.Изменен + + None + + ru + Изменен + + + ОбработчикиОбновленияИзмененРасширеннаяПодсказка + 200 + Label + true + true + + Left + + + + ОбработчикиОбновленияИзмененКонтекстноеМеню + 199 + true + + CheckBoxField + true + Auto + true + + StdPicture.Change + + Left + true + + + + ОбработчикиОбновленияТехПроект + 211 + true + true + + + Объект.ОбработчикиОбновления.ТехническийПроект + + None + + OnChange + ОбработчикиОбновленияТехПроектПриИзменении + + + ОбработчикиОбновленияТехПроектРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + + ОбработчикиОбновленияТехПроектКонтекстноеМеню + 212 + true + + CheckBoxField + Auto + true + + StdPicture.InputFieldChooseType + + Left + true + + + + ОбработчикиОбновленияИмяБиблиотеки + 236 + true + true + + + Объект.ОбработчикиОбновления.ИмяБиблиотеки + + + ОбработчикиОбновленияИмяБиблиотекиРасширеннаяПодсказка + 238 + Label + true + true + + Left + + + + ОбработчикиОбновленияИмяБиблиотекиКонтекстноеМеню + 237 + true + + InputField + true + Auto + true + Left + true + + 3 + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияИмяОбъекта + 239 + true + true + + + Объект.ОбработчикиОбновления.ИмяОбъекта + + + ОбработчикиОбновленияИмяОбъектаРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + + ОбработчикиОбновленияИмяОбъектаКонтекстноеМеню + 240 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОбработчикиОбновленияКоманднаяПанель + 3 + Left + + + Selection + ОбработчикиОбновленияВыбор + + + BeforeAddRow + ОбработчикиОбновленияПередНачаломДобавления + + + BeforeDeleteRow + ОбработчикиОбновленияПередУдалением + + + OnStartEdit + ОбработчикиОбновленияПриНачалеРедактирования + + + ОбработчикиОбновленияСтрокаПоиска + 5 + + ОбработчикиОбновленияСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ОбработчикиОбновленияСтрокаПоискаКонтекстноеМеню + 6 + true + + ОбработчикиОбновления + + true + + + + ОбработчикиОбновленияСостояниеПросмотра + 8 + + ОбработчикиОбновленияСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ОбработчикиОбновленияСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + ОбработчикиОбновления + + true + + + + ОбработчикиОбновленияУправлениеПоиском + 11 + + ОбработчикиОбновленияУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ОбработчикиОбновленияУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + ОбработчикиОбновления + + true + + + + ОбработчикиОбновленияРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + ОбработчикиОбновленияКонтекстноеМеню + 2 + + ОбработчикиОбновленияКодВыделенныхОбработчиков + 244 + true + true + + true + + + ОбработчикиОбновленияКодВыделенныхОбработчиковРасширеннаяПодсказка + 245 + Label + true + true + + Left + + + Form.Command.ПоказатьТекстМодулей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ОбработчикиОбновленияСтандартные + 232 + true + true + + true + + + <key>ru</key> + <value>Обработчики обновления стандартные</value> + + + ОбработчикиОбновленияСтандартныеРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + + Item.ОбработчикиОбновления + + + + ОбработчикиОбновленияНайти + 185 + true + true + + true + + + ОбработчикиОбновленияНайтиРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + Form.Item.ОбработчикиОбновления.StandardCommand.Find + Normal + Picture + 3 + true + true + UserCmds + Auto + + + ОбработчикиОбновленияОтменитьПоиск + 187 + true + true + + true + + + ОбработчикиОбновленияОтменитьПоискРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + Form.Item.ОбработчикиОбновления.StandardCommand.CancelSearch + Normal + Picture + 3 + true + true + UserCmds + Auto + + + ОбработчикиОбновленияПоВозрастанию + 181 + true + true + + true + + + ОбработчикиОбновленияПоВозрастаниюРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + Form.Item.ОбработчикиОбновления.StandardCommand.SortListAsc + Normal + Picture + 3 + true + true + UserCmds + Auto + + + ОбработчикиОбновленияПоУбыванию + 183 + true + true + + true + + + ОбработчикиОбновленияПоУбываниюРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + Form.Item.ОбработчикиОбновления.StandardCommand.SortListDesc + Normal + Picture + 3 + true + true + UserCmds + Auto + + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + true + true + true + true + Top + true + +
      + + ФормаКоманднаяПанель + -1 + + ЗагрузитьОбработчики + 98 + true + true + + true + + + ЗагрузитьОбработчикиРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + Form.Command.ЗагрузитьОбработчики + Normal + PictureAndText + true + true + UserCmds + + StdPicture.RestoreValues + + Auto + InAdditionalSubmenu + + + ПроверитьКонфликты + 86 + true + + true + + + ПроверитьКонфликтыРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Form.Command.ПроверитьКонфликты + Normal + Auto + true + true + UserCmds + Auto + + + ПостроитьОчередь + 88 + true + true + + true + + + ПостроитьОчередьРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + Form.Command.ПостроитьОчередь + Normal + Auto + true + true + UserCmds + Auto + + + СохранитьВРепозиторий + 80 + true + true + + true + + + СохранитьВРепозиторийРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + Form.Command.СохранитьВРепозиторий + Normal + PictureAndText + true + true + UserCmds + Auto + + + ПоказатьНастройкиERP + 177 + true + true + + true + + + ПоказатьНастройкиERPРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + Form.Command.ПоказатьШаблонНастроек + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПереключитьРежимФормы + 246 + true + true + + true + + + ПереключитьРежимФормыРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + CommandBarHyperlink + Form.Command.ПереключитьРежимФормы + Normal + Auto + true + true + Right + UserCmds + + Style.AccentColor + + Auto + + + ЗаписатьСписокОбработчиковТехПроекта + 226 + true + true + + + ЗаписатьСписокОбработчиковТехПроектаРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + Form.Command.ЗаписатьСписокОбработчиковТехПроекта + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СохранитьВРепозиторийВсеОбработчики + 207 + true + true + + true + + + СохранитьВРепозиторийВсеОбработчикиРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + Form.Command.СохранитьВРепозиторийВсеОбработчики + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказатьКодВыделенныхОбработчиков + 230 + true + true + + true + + + ПоказатьКодВыделенныхОбработчиковРасширеннаяПодсказка + 231 + Label + true + true + + Left + + + Form.Command.ПоказатьТекстМодулей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказатьКодОписанияОбработчиковОбновления + 242 + true + true + + true + + + ПоказатьКодОписанияОбработчиковОбновленияРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + Form.Command.ПоказатьКодОписанияОбработчиковОбновления + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаОтладка + 205 + + ПоказатьПриоритетыКонфликтыОбработчика + 218 + true + true + + true + + + ПоказатьПриоритетыКонфликтыОбработчикаРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + Form.Command.ПоказатьПриоритетыКонфликтыОбработчика + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказатьТабличныеЧасти + 192 + true + true + + true + + + ПоказатьТабличныеЧастиРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + Form.Command.ПоказатьТабличныеЧасти + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказатьВсеВызовыОбработчиков + 203 + true + true + + true + + + ПоказатьВсеВызовыОбработчиковРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + Form.Command.ПоказатьВсеВызовыОбработчиков + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказатьВсеОписанияОбработчиков + 90 + true + true + + true + + + ПоказатьВсеОписанияОбработчиковРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + Form.Command.ПоказатьВсеОписанияОбработчиков + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВыполнитьТестПостроенияОчереди + 172 + true + + true + + + ВыполнитьТестПостроенияОчередиРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + Form.Command.ВыполнитьТестПостроенияОчереди + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РассчитатьОчередь + 201 + true + + true + + + РассчитатьОчередьРасширеннаяПодсказка + 202 + Label + true + true + + Left + + + Form.Command.РассчитатьОчередь + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПроверитьЦиклВПорядкеОбработчиков + 194 + true + + true + + + ПроверитьЦиклВПорядкеОбработчиковРасширеннаяПодсказка + 195 + Label + true + true + + Left + + + Form.Command.ПроверитьЦиклВПорядкеОбработчиков + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказатьТекстыВсехМодулей + 209 + true + true + + true + + + ПоказатьТекстыВсехМодулейРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + Form.Command.ПоказатьТекстыВсехМодулей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Отладка</value> + + + ГруппаОтладкаРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + Left + true + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + + BeforeLoadDataFromSettingsAtServer + ПередЗагрузкойДанныхИзНастроекНаСервере + + DontBlock + Use + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ОписаниеОбработчиковОбновления + + + true + + + true + + + Объект.КаталогSRC + +
      true
      + true +
      + + ПараметрыЗапуска + 2 + + + true + + + true + + + + МодулиПодсистем + 3 + + + true + + + true + + + + ПользовательИБ + 5 + + String + + + + true + + + true + + + ПользовательИБ + + + + ТекущаяБиблиотека + + <key>ru</key> + <value>Текущая библиотека</value> + + 4 + + String + + 100 + + + + true + + + true + + + + ЧитаемыйОбъект + + <key>ru</key> + <value>Читаемый объект</value> + + 8 + + String + + 300 + + + + true + + + true + + + + ИзменяемыйОбъект + + <key>ru</key> + <value>Изменяемый объект</value> + + 9 + + String + + 300 + + + + true + + + true + + + + ПорядокВыполнения + 12 + + + true + + + true + + + + ИсходнаяТекущаяСтрока + 13 + + Number + + 10 + + + + true + + + true + + + + СтатусНетПроблем + 14 + + String + + 30 + + + + true + + + true + + + + СтатусНеобходимАнализ + 15 + + String + + 30 + + + + true + + + true + + + + ПрочиеБыстрыеОтборы + 16 + + ValueList + + + true + + + true + + + + + + + МножественноеЧисло + 17 + + + true + + + true + + + + ЕдинственноеЧисло + 18 + + + true + + + true + + + + КаталогФайловОшибок + + <key>ru</key> + <value>Каталог файлов ошибок</value> + + 19 + + String + + + + true + + + true + + + КаталогФайловОшибок + + + + ДополнениеТекстаОшибки + 20 + + String + + + + true + + + true + + + + ДатаОбнаруженияОшибки + 21 + + String + + + + true + + + true + + + + АдресРепозитория + 22 + + String + + + + true + + + true + + + + РежимОтладкиОписанияОбработчиков + 7 + + Boolean + + + true + + + true + + + + АнглийскиеИмена + 6 + + + true + + + true + + + + ВерсияКонфигурации + 11 + + String + + + + true + + + true + + + + НоваяВерсияКонфигурации + 10 + + String + + + + true + + + true + + + + РазрабатываемыеПодсистемы + 23 + + + true + + + true + + + + НовыйНомерСборкиКонфигурации + 24 + + Number + + 10 + true + + + + true + + + true + + + + ЗапускИзКонфигурации + 25 + + Boolean + + + true + + + true + + + + РасширенныйРежимФормы + 26 + + Boolean + + + true + + + true + + + РасширенныйРежимФормы + + + + ЗагрузитьОбработчики + + <key>ru</key> + <value>Загрузить описания</value> + + 1 + + ru + Загрузить описание обработчиков обновления + + + true + + + StdPicture.OpenFile + + + + ЗагрузитьОбработчики + + + Auto + Auto + + + СохранитьВРепозиторий + + <key>ru</key> + <value>Сохранить в репозиторий</value> + + 2 + + ru + Сохранить в репозиторий + + + true + + + StdPicture.SaveFile + + + + СохранитьВРепозиторий + + + Auto + Auto + + + ПроверитьКонфликты + + <key>ru</key> + <value>Проверить конфликты</value> + + 3 + + ru + Находит все пересечения обработчиков - изменение читаемых объектов и повторная запись. + + + true + + + + ПроверитьКонфликты + + + Auto + Auto + + + ПостроитьОчередь + + <key>ru</key> + <value>Контроль построения очереди</value> + + 4 + + ru + Построить очередь + + + true + + + + ПостроитьОчередь + + + Auto + Auto + + + ПоказатьВсеОписанияОбработчиков + + <key>ru</key> + <value>Показать все описания обработчиков</value> + + 5 + + ru + Текст процедуры ПриДобавленииОбработчиковОбновления со списком всех описаний обработчиков + + + true + + + + ПриДобавленииОбработчиковОбновления_Описания + + + Auto + Auto + + + ВыполнитьТестПостроенияОчереди + + <key>ru</key> + <value>Выполнить тест построения очереди</value> + + 6 + + ru + Выполнить тест построения очереди + + + true + + + + ВыполнитьТестПостроенияОчереди + + + Auto + Auto + + + ПоказатьШаблонНастроек + + <key>ru</key> + <value>Показать файл шаблона настройки генератора кода</value> + + 7 + + ru + Показывает шаблон файла настроек тегов ERP для генерации кода описания обработчиков обновления (файл cut_tags.yml) + + + true + + + + ПоказатьНастройки + + + Auto + Auto + + + ПоказатьТабличныеЧасти + + <key>ru</key> + <value>Показать все таблицы описания обработчиков</value> + + 9 + + ru + Показать табличные части + + + true + + + + ПоказатьТабличныеЧасти + + + Auto + Auto + + + ПроверитьЦиклВПорядкеОбработчиков + + <key>ru</key> + <value>Есть цикл в порядке обработчиков</value> + + 10 + + ru + Проверить цикл в порядке обработчиков + + + true + + + + ПроверитьЦиклВПорядкеОбработчиков + + + Auto + Auto + + + РассчитатьОчередь + + <key>ru</key> + <value>Рассчитать очередь</value> + + 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> + + 11 + + true + + + + ЗаписатьСписокОбработчиковТехПроекта + + + Auto + Auto + + + ПоказатьТекстМодулей + + <key>ru</key> + <value>Показать код выделенных обработчиков</value> + + 18 + + true + + Ctrl+1 + + + ПоказатьТекстМодулей + + + Auto + + ОбработчикиОбновления + + Auto + + + СформироватьТексты + + <key>ru</key> + <value>Сформировать тексты</value> + + 8 + + ru + Сформировать тексты + + + true + + Auto + Auto + + + ПоказатьКодОписанияОбработчиковОбновления + + <key>ru</key> + <value>Показать код описания обработчиков обновления</value> + + 19 + + ru + Показать код описания обработчиков обновления + + + true + + + + ПоказатьКодОписанияОбработчиковОбновления + + + Auto + Auto + + + ПереключитьРежимФормы + + <key>ru</key> + <value>Перейти в упрощенный режим</value> + + 20 + + 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..437635c81 --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Help/ru.html @@ -0,0 +1,43 @@ + +

      Форма списка оработчиков

      +

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

      +

      Загрузка описания обработчиков обновления

      +

      Редактирование описания обработчиков обновления

      +

      Описание элементов формы

      +

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

      +

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

      +

      Загрузка описания обработчиков обновления

      +

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

      +

      Редактирование описания обработчиков обновления

      +

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

      +

      Описание элементов формы

      +

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

      +

      +

      +Примечание. Относительно каталога SRC вычисляется расположение каталога .settings в котором должен располагается файл настроек обработки. +
      + +

      Библиотека - фильтр списка обработчиков по встроенной библиотеке.
      Изменямый объект - фильтр списка обработчиков по изменяемым объектам - в списке будут отобраны все обработчики содержащие в своей таблиной части Изменяемые объекты указаное имя (или часть имени) объекта метаданных.
      Читаемый объект - фильтр списка обработчиков по читаемым объектам - в списке будут отобраны все обработчики содержащие в своей таблиной части Читаемые объекты указаное имя (или часть имени) объекта метаданных.

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

      +

      +

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

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

      +

      +

      +Примечание. Чтобы отключить текущий быстрый отбор необходимо установить быстрый отбор Все. +
      + +

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

      +

      При контроле построения очереди выполнения проверяется:

      +
      • полнота заполнения даных и корректность указанных приоритетов выполнения
      • зацикленность очереди выполнения обработчиков

      +

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

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

      +

      Для записи в файлы git-репозитория необходимо:

      +
      • указать каталог SRC проекта конфигурации выгруженного в формате EDT
      • в каталоге .settings проекта конфигурации выгруженного в формате EDT разместить файл настроек cut_tugs.yml. В этом файле в формате yaml перечислены модули обновления конфигурации для которых необходимо формировать процедуры ПриДобавленииОбработчиковОбновления (шаблон файла настроек можно сгенерировать соотвествующей командой расположенной в подменю формы Еще).

      Описани обработчиков обновления генерируются для модулей обновления указанных в файле настройки cut_tag.yml.
      Изменения в файлы записываются в следущем порядке:

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

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

      +

       

      \ 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..91361137f --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Module.bsl @@ -0,0 +1,4416 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ЗапускИзКонфигурации = ТипЗнч(ОбъектОбработки()) = Тип("ОбработкаОбъект.ОписаниеОбработчиковОбновления"); + ИнициализироватьКонстантыОбработки(); + Элементы.КаталогФайловОшибок.Видимость = Элементы.ВыполнитьТестПостроенияОчереди.Видимость; + + УстановитьУсловноеОформление(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + #Если ВебКлиент Тогда + ВызватьИсключение НСтр("ru = 'Работа в web-клиенте не поддерживается.'"); + #КонецЕсли + + Если СтрНайти(ПараметрЗапуска,"=") > 0 Тогда + + СтруктураПараметров = ПолучитьПараметрыИзСтроки(ПараметрЗапуска); + + Если Не ЗначениеЗаполнено(КаталогФайловОшибок) Тогда + КаталогФайловОшибок = ВременныйКаталог(); + КонецЕсли; + + Если СтруктураПараметров.Свойство("ErrorLogFolder") Тогда + КаталогФайловОшибок = СтруктураПараметров.ErrorLogFolder; + КонецЕсли; + + Если СтруктураПараметров.Свойство("ErrorAddInfo") Тогда + ДополнениеТекстаОшибки = СтруктураПараметров.ErrorAddInfo; + КонецЕсли; + + Если СтруктураПараметров.Свойство("ResultFile") Тогда + ФайлРезультата = СтруктураПараметров.ResultFile; + КонецЕсли; + + #Если НЕ ВебКлиент Тогда + Если СтруктураПараметров.Свойство("DetectionTime") И ЗначениеЗаполнено(СтруктураПараметров.DetectionTime) Тогда + ДатаОбнаруженияОшибки = XMLЗначение(Тип("Дата"), СтруктураПараметров.DetectionTime); + КонецЕсли; + #КонецЕсли + + Если СтруктураПараметров.Свойство("RepoPath") Тогда + АдресРепозитория = СтруктураПараметров.RepoPath; + КонецЕсли; + + ЗапуститьПроверку = СтрНайти(ПараметрЗапуска,"Выполнить") <> 0; + ЗавершатьРаботу = ЗапуститьПроверку; + + Попытка + + Если ЗапуститьПроверку Тогда + ВыполнитьТестПостроенияОчереди(Неопределено); + КонецЕсли; + + Исключение + + ЗаписатьИнформациюОбОшибке(ФайлРезультата); + + КонецПопытки; + + Попытка + + Если ЗапуститьПроверку И ЗначениеЗаполнено(ФайлРезультата) Тогда + Результат = Новый ТекстовыйДокумент; + Результат.УстановитьТекст(Объект.Ошибки.Количество()); + Результат.Записать(ФайлРезультата); + КонецЕсли; + + Исключение + + ЗаписатьИнформациюОбОшибке(ФайлРезультата); + + КонецПопытки; + + Если ЗавершатьРаботу Тогда + ПрекратитьРаботуСистемы(); + КонецЕсли; + + КонецЕсли; + + ПодключитьОбработчикОжидания("ВыполнитьЗагрузкуОбработчиков", 0.1, Истина); + + ОформитьГруппуНастроек(); + Если РасширенныйРежимФормы Тогда + УстановитьРасширенныйРежим(); + Иначе + УстановитьУпрощенныйРежим(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если Модифицированность И НЕ ЗавершениеРаботы Тогда + Отказ = Истина; + ОбработчикОтвета = Новый ОписаниеОповещения("ЗавершениеЗакрытияФормы", ЭтотОбъект); + ПоказатьВопрос(ОбработчикОтвета, НСтр("ru = 'Данные были изменены. Сохранить изменения в репозиторий?'"), РежимДиалогаВопрос.ДаНетОтмена); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеЗакрытияФормы(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + Модифицированность = Ложь; + ЗаписатьДанныеНаДиск(); + Закрыть(); + ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда + // ничего не делаем + Иначе + Модифицированность = Ложь; + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) + + Объект.КаталогSRC = Настройки["Объект.КаталогSRC"]; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "ИзменилосьОписаниеОбработчикаОбновления" Тогда + ОбновитьДанныеОКонфликтахОбработчика(Параметр); + Оповестить("ОбновленыДанныеОКонфликтахОбработчикаОбновления", Параметр); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура КаталогSRCНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + #Если НЕ ВебКлиент Тогда + СтандартнаяОбработка = Ложь; + + ОбработчикВыбораФайла = Новый ОписаниеОповещения("ДиалогВыбораКаталогаЗавершение", ЭтотОбъект, "КаталогSRC"); + ФайловаяСистемаКлиент.ВыбратьКаталог(ОбработчикВыбораФайла, НСтр("ru = 'Укажите каталог SRC'"), Объект.КаталогSRC); + + #КонецЕсли +КонецПроцедуры + +&НаКлиенте +Процедура КаталогSRCОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Объект.КаталогSRC = ДобавитьРазделительПутиВКонец(Текст); + +КонецПроцедуры + +&НаКлиенте +Процедура КаталогФайловОшибокНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + #Если НЕ ВебКлиент Тогда + СтандартнаяОбработка = Ложь; + + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + ДиалогВыбораФайла.ПолноеИмяФайла = КаталогФайловОшибок; + ОбработчикВыбораФайла = Новый ОписаниеОповещения("ДиалогВыбораКаталогаЗавершение", ЭтотОбъект, "КаталогФайловОшибок"); + ФайловаяСистемаКлиент.ВыбратьКаталог(ОбработчикВыбораФайла, НСтр("ru = 'Укажите каталог файлов ошибок'"), КаталогФайловОшибок); + #КонецЕсли +КонецПроцедуры + +&НаКлиенте +Процедура КаталогФайловОшибокОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + КаталогФайловОшибок = ДобавитьРазделительПутиВКонец(Текст); + ОформитьГруппуНастроек(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПодсистемаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда + Отбор = Новый Структура("Подсистема", ВыбранноеЗначение); + УстановитьОтборОбработчиков(Отбор); + Иначе + ОтключитьОтборОбработчиков("Подсистема"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменяемыйОбъектПриИзменении(Элемент) + + ПриИзмененииОбъектаПоискаНаСервере("ИзменяемыеОбъекты", ИзменяемыйОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменяемыйОбъектОчистка(Элемент, СтандартнаяОбработка) + + ПриИзмененииОбъектаПоискаНаСервере("ИзменяемыеОбъекты", ИзменяемыйОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ЧитаемыйОбъектПриИзменении(Элемент) + + ПриИзмененииОбъектаПоискаНаСервере("ЧитаемыеОбъекты", ЧитаемыйОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ЧитаемыйОбъектОчистка(Элемент, СтандартнаяОбработка) + + ПриИзмененииОбъектаПоискаНаСервере("ЧитаемыеОбъекты", ЧитаемыйОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура БыстрыеОтборыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если НавигационнаяСсылкаФорматированнойСтроки = "Прочие" Тогда + ВыборБыстрогоОтбора = Новый ОписаниеОповещения("ОбработкаВыбораБыстрогоОтбора", ЭтотОбъект); + ПрочиеБыстрыеОтборы.ПоказатьВыборЭлемента(ВыборБыстрогоОтбора); + Возврат; + Иначе + УстановитьБыстрыйОтбор(НавигационнаяСсылкаФорматированнойСтроки); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбораБыстрогоОтбора(Результат, ДополнительныйПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + УстановитьБыстрыйОтбор(Результат); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормы + +&НаКлиенте +Процедура ОбработчикиОбновленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОткрытьРедакторОписанияОбработчика(Элемент.ТекущиеДанные.Ссылка); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеРедактированияОбработчика(Результат, ДополнительныеПараметры) Экспорт + + Если ЗначениеЗаполнено(Результат) Тогда + ОбновитьДанныеОбработчика(Результат); + ИначеЕсли Элементы.ОбработчикиОбновления.ТекущиеДанные <> Неопределено + И Элементы.ОбработчикиОбновления.ТекущиеДанные.НоваяСтрока Тогда + ТекущаяСтрока = Объект.ОбработчикиОбновления.НайтиПоИдентификатору(Элементы.ОбработчикиОбновления.ТекущаяСтрока); + Объект.ОбработчикиОбновления.Удалить(ТекущаяСтрока); + Элементы.ОбработчикиОбновления.ТекущаяСтрока = ИсходнаяТекущаяСтрока; + КонецЕсли; + ИсходнаяТекущаяСтрока = 0; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикиОбновленияПередУдалением(Элемент, Отказ) + + Отказ = Истина; + ОбработчикОтвета = Новый ОписаниеОповещения("ЗавершениеУдаленияОписанияОбработчика", ЭтотОбъект); + ТекстВопроса = НСтр("ru = 'Удалить описание обработчика?'"); + ПоказатьВопрос(ОбработчикОтвета, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеУдаленияОписанияОбработчика(Результат, ДополнительныеСвойства) Экспорт + + Элемент = Элементы.ОбработчикиОбновления; + Если Результат = КодВозвратаДиалога.Да Тогда + Модифицированность = Истина; + ИсходнаяТекущаяСтрока = Элемент.ТекущаяСтрока; + Если Элемент.ВыделенныеСтроки.Количество() > 0 Тогда + УдаляемыеСтроки = Новый Массив; + Для Каждого ИдентификаторСтроки Из Элемент.ВыделенныеСтроки Цикл + УдаляемыеСтроки.Добавить(ИдентификаторСтроки); + КонецЦикла; + УдалитьОписаниеОбработчиков(УдаляемыеСтроки); + Иначе + УдалитьОписаниеОбработчиков(Элемент.ТекущиеДанные.Ссылка); + КонецЕсли; + Элемент.ТекущаяСтрока = ИсходнаяТекущаяСтрока+1; + ИсходнаяТекущаяСтрока = 0; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикиОбновленияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + ИсходнаяТекущаяСтрока = Элемент.ТекущаяСтрока; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикиОбновленияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) + + Если НоваяСтрока Тогда + ИсходнаяСсылка = Элемент.ТекущиеДанные.Ссылка; + Элемент.ТекущиеДанные.НоваяСтрока = Истина; + Элемент.ТекущиеДанные.Изменен = Истина; + Элемент.ТекущиеДанные.Ссылка = Новый УникальныйИдентификатор; + Если Копирование Тогда + Элемент.ТекущиеДанные.Идентификатор = ""; + Иначе + Элемент.ТекущиеДанные.РежимВыполнения = "Отложенно"; + Элемент.ТекущиеДанные.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; + Если ЗначениеЗаполнено(Элемент.ОтборСтрок) И Элемент.ОтборСтрок.Свойство("Подсистема") Тогда + Элемент.ТекущиеДанные.Подсистема = Элемент.ОтборСтрок.Подсистема; + КонецЕсли; + КонецЕсли; + ОткрытьРедакторОписанияОбработчика(Элемент.ТекущиеДанные.Ссылка, НоваяСтрока, ИсходнаяСсылка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикиОбновленияТехПроектПриИзменении(Элемент) + + ЗаполнитьБыстрыеОтборы(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗагрузитьОбработчики(Команда) + + ОбработчикиТехПроекта = ЗагрузитьСписокОбработчиковТехПроекта(); + ЗагрузитьИзТекущейКонфигурацииНаСервере(ОбработчикиТехПроекта); + Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПостроитьОчередь(Команда) + + ПостроитьОчередьНаСервере(); + Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьВРепозиторий(Команда) + + Если НЕ ЗначениеЗаполнено(Объект.КаталогSRC) Тогда + Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Показать(); + ОбщегоНазначенияКлиент.СообщитьПользователю( + НСтр("ru = 'Не указан путь к каталогу SRC.'"), + , + , + "Объект.КаталогSRC"); + Возврат; + КонецЕсли; + + ЗаписатьДанныеНаДиск(); + Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть(); + Модифицированность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьВРепозиторийВсеОбработчики(Команда) + + Если НЕ ЗначениеЗаполнено(Объект.КаталогSRC) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю( + НСтр("ru = 'Не указан путь к каталогу SRC.'"), + , + , + "Объект.КаталогSRC"); + Возврат; + КонецЕсли; + + ПараметрыСохранения = Новый Структура("ВсеОбработчики", Истина); + ОбработчикОтвета = Новый ОписаниеОповещения("ЗавершениеСохраненияВРепозиторий", ЭтотОбъект, ПараметрыСохранения); + ТекстВопроса = НСтр("ru = 'Внимание! Будут перезаписаны все процедуры описания обработчиков обновления. + |Продолжить?'"); + ПоказатьВопрос(ОбработчикОтвета, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть(); + Модифицированность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьКодОписанияОбработчиковОбновления(Команда) + + ПараметрыГенерацииКода = НовыеПараметрыГенерацииКода(); + Если РасширенныйРежимФормы Тогда + ПараметрыГенерацииКода.ОбновитьОчередь = Ложь; + Иначе + ПараметрыГенерацииКода.ОписаниеВОбщемМодуле = Истина; + ПараметрыГенерацииКода.ОбновитьСписокВызовов = Ложь; + КонецЕсли; + ПоказатьТекстыОписанияОбработчиковОбновления(ПараметрыГенерацииКода); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьНомерСборкиОбработчикам(Команда) + + ДополнительныеПараметры = Новый Структура("НомерСборкиДляОбработчиков", Истина); + ОбработчикОтвета = Новый ОписаниеОповещения("ЗавершениеВводаНомераСборки", ЭтотОбъект, ДополнительныеПараметры); + НомераВерсии = СтрРазделить(ВерсияКонфигурации,"."); + ПоказатьВводЧисла(ОбработчикОтвета, Число(НомераВерсии[3]), НСтр("ru = 'Укажите новый номер сборки'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьСписокОбработчиковТехПроекта(Команда) + + СохранитьСписокОбработчиковТехПроекта(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПереключитьРежимФормы(Команда) + + Если РасширенныйРежимФормы Тогда + УстановитьУпрощенныйРежим(); + Иначе + УстановитьРасширенныйРежим(); + КонецЕсли; + +КонецПроцедуры + +#Область ПодменюОтладки + +&НаКлиенте +Процедура ПроверитьКонфликты(Команда) + + ПроверитьКонфликтыНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриДобавленииОбработчиковОбновления_Вызовы(Команда) + + ПараметрыГенерацииКода = НовыеПараметрыГенерацииКода(); + ПараметрыГенерацииКода.ОбновитьОчередь = Ложь; + ПоказатьТекстыОписанияОбработчиковОбновления(ПараметрыГенерацииКода); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриДобавленииОбработчиковОбновления_Описания(Команда) + + ПараметрыГенерацииКода = НовыеПараметрыГенерацииКода(); + ПараметрыГенерацииКода.ОписаниеВОбщемМодуле = Истина; + ПоказатьТекстыОписанияОбработчиковОбновления(ПараметрыГенерацииКода); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьНастройки(Команда) + + ТекстыНастроек = ПолучитьТекстыНастроек(); + Для Каждого ТекстФайла Из ТекстыНастроек Цикл + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(ТекстФайла.Значение); + ТекстовыйДокумент.Показать(ТекстФайла.Представление); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьТабличныеЧасти(Команда) + + ДанныеТаблиц = ВыгрузитьТаблицыВMXL(); + Для Каждого Таблица Из ДанныеТаблиц Цикл + Таблица.Значение.Показать(Таблица.Ключ); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьПриоритетыКонфликтыОбработчика(Команда) + + Если Элементы.ОбработчикиОбновления.ТекущиеДанные = Неопределено Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Не выбран обработчики обновления'")); + Возврат; + КонецЕсли; + + ДанныеТаблиц = ВыгрузитьТаблицыВMXL(Элементы.ОбработчикиОбновления.ТекущиеДанные.Ссылка); + Для Каждого Таблица Из ДанныеТаблиц Цикл + Таблица.Значение.Показать(Таблица.Ключ); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьЦиклВПорядкеОбработчиков(Команда) + + ЕстьЦиклВыполненияОбработчиковНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьТестПостроенияОчереди(Команда) + + #Область ПроверкаКаталогаФайловОшибок + Если Команда <> Неопределено Тогда + Элементы.КаталогФайловОшибок.Видимость = Истина; + ОформитьГруппуНастроек(); + Если НЕ ЗначениеЗаполнено(КаталогФайловОшибок) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю( + НСтр("ru = 'Не указан каталог файлов ошибок.'"), + , + , + "КаталогФайловОшибок"); + Возврат; + КонецЕсли; + КонецЕсли; + #КонецОбласти + + Объект.Ошибки.Очистить(); + ПостроитьОчередьНаСервере(); + Для Каждого Ошибка Из Объект.Ошибки Цикл + ЗаписатьОшибку(Ошибка.ОбъектМетаданных, Ошибка.Сообщение); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьОчередь(Команда) + РассчитатьОчередьНаСервере(); +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьТекстыВсехМодулей(Команда) + + ПараметрыГенерацииКода = НовыеПараметрыГенерацииКода(); + ПараметрыГенерацииКода.ОбновитьОчередь = Ложь; + ПараметрыГенерацииКода.ТолькоИзмененные = Ложь; + ТекстыМодулей = ПолучитьТекстыМодулей(ПараметрыГенерацииКода); + Для Каждого КодМодуля Из ТекстыМодулей Цикл + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(КодМодуля.ТекстПроцедуры); + ТекстовыйДокумент.Показать(КодМодуля.ИмяМодуля); + КонецЦикла; + Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть(); + Модифицированность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьТекстМодулей(Команда) + + ПараметрыГенерацииКода = НовыеПараметрыГенерацииКода(); + ПараметрыГенерацииКода.ТолькоИзмененные = Ложь; + ПараметрыГенерацииКода.ТолькоВыделенные = Истина; + ТекстыМодулей = ПолучитьТекстыМодулей(ПараметрыГенерацииКода); + Для Каждого КодМодуля Из ТекстыМодулей Цикл + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(КодМодуля.ТекстПроцедуры); + ТекстовыйДокумент.Показать(КодМодуля.ИмяМодуля); + КонецЦикла; + Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть(); + Модифицированность = Ложь; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + #Область СтатусНеобходимАнализ + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОбработчикиОбновленияСтатусПроблемы.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Элементы.ОбработчикиОбновленияСтатусПроблемы.ПутьКДанным); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = СтатусНеобходимАнализ; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста); + #КонецОбласти + + #Область ТехническийПроект + Элемент = УсловноеОформление.Элементы.Добавить(); + + Для Каждого ЭлементФормы Из Элементы.ОбработчикиОбновления.ПодчиненныеЭлементы Цикл + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя); + КонецЦикла; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Элементы.ОбработчикиОбновленияТехПроект.ПутьКДанным); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); + #КонецОбласти + +КонецПроцедуры + +#Область ЗагрузкаОбработчиков + +&НаКлиенте +Процедура ВыполнитьЗагрузкуОбработчиков() + + ПараметрыФормы = Новый Структура("ТекстСообщения", НСтр("ru = 'Выполняется загрузка обработчиков'")); + ФормаДлительнойОперации = ОткрытьФорму("ОбщаяФорма.ДлительнаяОперация", ПараметрыФормы); + ЗагрузитьОбработчики(Неопределено); + ФормаДлительнойОперации.Закрыть(); + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьИзТекущейКонфигурацииНаСервере(ОбработчикиТехПроекта = Неопределено) + + Обработка = ОбъектОбработки(); + Обработка.ЗагрузитьОбработчики(); + ЗначениеВРеквизитФормы(Обработка, "Объект"); + + Если ОбработчикиТехПроекта <> Неопределено Тогда + Для Каждого Обработчик Из ОбработчикиТехПроекта Цикл + Если СтрНайти(Обработчик,":") = 0 Тогда + Продолжить; + КонецЕсли; + Данные = СтрРазделить(Обработчик, ":"); + Отбор = Новый Структура; + Если ЗначениеЗаполнено(Данные[0]) Тогда + Отбор.Вставить("Идентификатор", Данные[0]); + КонецЕсли; + Если ЗначениеЗаполнено(Данные[1]) Тогда + Отбор.Вставить("Процедура", Данные[1]); + КонецЕсли; + НайденныеОбработчики = Объект.ОбработчикиОбновления.НайтиСтроки(Отбор); + Для Каждого Найденный Из НайденныеОбработчики Цикл + Найденный.ТехническийПроект = Истина; + КонецЦикла; + КонецЦикла; + КонецЕсли; + + ОбновитьДанныеФормы(Обработка); + + ТекущаяБиблиотека = ""; + Модифицированность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Функция ЗагрузитьСписокОбработчиковТехПроекта() + + ИмяФайла = КаталогНастроек() + "tech-project.updaters"; + + Файл = Новый Файл(ИмяФайла); + Если НЕ Файл.Существует() Тогда + Возврат Неопределено; + КонецЕсли; + + ФайлНастроек = Новый ТекстовыйДокумент; + #Если НЕ ВебКлиент Тогда + ФайлНастроек.Прочитать(ИмяФайла, КодировкаТекста.UTF8); + #КонецЕсли + ТекстФайла = ФайлНастроек.ПолучитьТекст(); + ОбработчикиТехПроекта = СтрРазделить(ТекстФайла, Символы.ПС); + + Возврат ОбработчикиТехПроекта; + +КонецФункции + +#КонецОбласти + +#Область СохранениеВРепозиторий + +&НаКлиенте +Процедура ЗавершениеСохраненияВРепозиторий(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + ЗаписатьДанныеНаДиск(ДополнительныеПараметры.ВсеОбработчики); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьДанныеНаДиск(ВсеОбработчики = Ложь) + + ОчиститьСообщения(); + ПараметрыГенерацииКода = НовыеПараметрыГенерацииКода(); + ПараметрыГенерацииКода.ТолькоИзмененные = НЕ ВсеОбработчики; + ТекстыМодулей = ПолучитьТекстыМодулей(ПараметрыГенерацииКода); + СохранитьВерсиюВКореньКонфигурации(); + Для Каждого ТекстМодуля Из ТекстыМодулей Цикл + ЗаменитьПроцедуруМодуля(ТекстМодуля); + КонецЦикла; + СохранитьСписокОбработчиковТехПроекта(); + НовыйНомерСборкиКонфигурации = 0; + +КонецПроцедуры + +&НаКлиенте +Функция ДобавитьПроцедуруМодуля(Код) + + ДобавленаПроцедура = Ложь; + ПолноеИмяФайла = Объект.КаталогSRC + Код.ПутьМодуля; + СтрокиМодуля = ТекстФайлаВМассив(ПолноеИмяФайла); + ЭтоМодульМенеджера = СтрНайти(Код.ИмяМодуля, ".") > 0; + ИмяПроцедуры = ИмяПроцедуры(Код.ЗаголовокПроцедуры); + + КомментарийПроцедуры = + "// см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления + |%1"; + ТекстПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(КомментарийПроцедуры, Код.ТекстПроцедуры); + + // Если Модуль пустой заполнить по шаблону пустого модуля - только модули менеджера + Если ЭтоМодульМенеджера И СтрокиМодуля.Количество() = 0 Тогда + ПустойМодульМенеджера = + "#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + | + |#Область СлужебныеПроцедурыИФункции + | + |#Область ОбновлениеИнформационнойБазы + | + |%1 + | + |#КонецОбласти + | + |#КонецОбласти + | + |#КонецЕсли"; + НовыйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПустойМодульМенеджера, ТекстПроцедуры); + ЗаписатьТекстМодуля(НовыйТекст, ПолноеИмяФайла); + + Шаблон = НСтр("ru = 'В модуле ""%1"" добавлена процедура ""%2""'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Код.ИмяМодуля, ИмяПроцедуры)); + Возврат Истина; + КонецЕсли; + + ЕстьПроцедураОписания = Ложь; + Если Код.ЭтоПроцедураОписания Тогда + Для Каждого ИмяБиблиотеки Из Код.ИменаБиблиотек Цикл + ЗаголовокПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Процедура ОписаниеОбработчиковОбновления%1(Обработчики) Экспорт", ИмяБиблиотеки); + Если СтрокиМодуля.Найти(ЗаголовокПроцедуры) <> Неопределено Тогда + ЕстьПроцедураОписания = Истина; + Прервать; + КонецЕсли; + ЗаголовокПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Процедура ПриДобавленииОбработчиковОбновления%1(Обработчики) Экспорт", ИмяБиблиотеки); + Если СтрокиМодуля.Найти(ЗаголовокПроцедуры) <> Неопределено Тогда + ЕстьПроцедураОписания = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Если процедура уже есть - уходим + Если СтрокиМодуля.Найти(Код.ЗаголовокПроцедуры) <> Неопределено + ИЛИ СтрокиМодуля.Найти("Процедура ОписаниеОбработчиковОбновления(Обработчики) Экспорт") <> Неопределено + ИЛИ ЕстьПроцедураОписания Тогда + Возврат ДобавленаПроцедура; + КонецЕсли; + + // Если есть #Область ОбновлениеНовыхВерсийИБ или #Область ОбновлениеИнформационнойБазы, + // то вставить сразу после начала области + Индекс = СтрокиМодуля.Найти("#Область ОбновлениеИнформационнойБазы"); + Если Индекс <> Неопределено Тогда + Индекс = Индекс + 1; + СтрокиМодуля.Вставить(Индекс, ""); + СтрокиПроцедуры = СтрРазделить(ТекстПроцедуры, Символы.ПС); + Для Каждого НоваяСтрока Из СтрокиПроцедуры Цикл + Индекс = Индекс + 1; + СтрокиМодуля.Вставить(Индекс, НоваяСтрока); + КонецЦикла; + ДобавленаПроцедура = Истина; + КонецЕсли; + + // Если есть процедура обработки, то вставить перед ней + Если НЕ ДобавленаПроцедура И НЕ ПустаяСтрока(Код.ПроцедураОбработки) Тогда + Имена = СтрРазделить(Код.ПроцедураОбработки, "."); + ИмяПроцедурыОбновления = Имена[Имена.ВГраница()]; + ИндексВставки = СтрокиМодуля.Найти("Процедура "+ИмяПроцедурыОбновления+"(Параметры) Экспорт"); + Если ИндексВставки <> Неопределено Тогда + СтрокиПроцедуры = СтрРазделить(ТекстПроцедуры, Символы.ПС); + СтрокиМодуля.Вставить(ИндексВставки, ""); + Индекс = СтрокиПроцедуры.ВГраница(); + Для СдвигКНачалу = 0 По СтрокиПроцедуры.ВГраница() Цикл + СтрокаПроцедуры = СтрокиПроцедуры[Индекс - СдвигКНачалу]; + СтрокиМодуля.Вставить(ИндексВставки, СтрокаПроцедуры); + КонецЦикла; + ДобавленаПроцедура = Истина; + КонецЕсли; + КонецЕсли; + + ТекстОбласти = + "#Область ОбновлениеИнформационнойБазы + | + |%1 + | + |#КонецОбласти"; + + // Если нет области обновления и процедуры обработки, то искать СлужебныеПроцедурыИФункции и вставить в нее первой областью + Если НЕ ДобавленаПроцедура И НЕ ПустаяСтрока(Код.ПроцедураОбработки) Тогда + Индекс = СтрокиМодуля.Найти("#Область СлужебныеПроцедурыИФункции"); + Если Индекс <> Неопределено Тогда + ТекстОбласти = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОбласти, ТекстПроцедуры); + Индекс = Индекс + 1; + СтрокиМодуля.Вставить(Индекс, ""); + СтрокиОбласти = СтрРазделить(ТекстОбласти, Символы.ПС); + Для Каждого НоваяСтрока Из СтрокиОбласти Цикл + Индекс = Индекс + 1; + СтрокиМодуля.Вставить(Индекс, НоваяСтрока); + КонецЦикла; + ДобавленаПроцедура = Истина; + КонецЕсли; + КонецЕсли; + + // Если нет области обновления, процедуры обработки и области СлужебныеПроцедурыИФункции, то добавляем в конец модуля + Если НЕ ДобавленаПроцедура И НЕ ПустаяСтрока(Код.ПроцедураОбработки) Тогда + + ТекстОбласти = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОбласти, ТекстПроцедуры); + + ИндексВставки = СтрокиМодуля.ВГраница(); + ПоследняяСтрока = СокрЛП(СтрокиМодуля[ИндексВставки]); + Пока ПустаяСтрока(ПоследняяСтрока) Цикл + ИндексВставки = ИндексВставки - 1; + ПоследняяСтрока = СокрЛП(СтрокиМодуля[ИндексВставки]); + КонецЦикла; + + Если ПоследняяСтрока = "#КонецЕсли" Тогда + ИндексВставки = ИндексВставки - 1; + СтрокиМодуля.Вставить(ИндексВставки, ""); + СтрокиОбласти = СтрРазделить(ТекстОбласти, Символы.ПС); + Индекс = СтрокиОбласти.ВГраница(); + Для СдвигКНачалу = 0 По СтрокиОбласти.ВГраница() Цикл + СтрокаПроцедуры = СтрокиОбласти[Индекс - СдвигКНачалу]; + СтрокиМодуля.Вставить(ИндексВставки, СтрокаПроцедуры); + КонецЦикла; + Иначе + СтрокиМодуля.Добавить(""); + СтрокиОбласти = СтрРазделить(ТекстОбласти, Символы.ПС); + Для Каждого НоваяСтрока Из СтрокиОбласти Цикл + СтрокиМодуля.Добавить(НоваяСтрока); + КонецЦикла; + КонецЕсли; + ДобавленаПроцедура = Истина; + КонецЕсли; + + Если ДобавленаПроцедура Тогда + НовыйТекст = СтрСоединить(СтрокиМодуля, Символы.ПС); + ЗаписатьТекстМодуля(НовыйТекст, ПолноеИмяФайла); + + Шаблон = НСтр("ru = 'В модуле ""%1"" добавлена процедура ""%2""'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Код.ИмяМодуля, ИмяПроцедуры)); + Иначе + Шаблон = НСтр("ru = 'В модуле ""%1"" не удалось добавить процедуру ""%2"" + |Возможно в модуле не задана область ""ОбновлениеИнформационнойБазы"". + |Добавьте процедуру или область вручную и повторите запись обработчиков.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Код.ИмяМодуля, ИмяПроцедуры); + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + Возврат ДобавленаПроцедура; + +КонецФункции + +&НаКлиенте +Процедура ЗаменитьПроцедуруМодуля(Код) + + Если Код.ЭтоПроцедураОписания И ДобавитьПроцедуруМодуля(Код) Тогда + Возврат; + КонецЕсли; + + ПолноеИмяФайла = Объект.КаталогSRC + Код.ПутьМодуля; + НовыйМодуль = Новый ТекстовыйДокумент; + + НовыйТекстПроцедуры = СтрРазделить(Код.ТекстПроцедуры, Символы.ПС); + ЗаголовокПроцедуры = НовыйТекстПроцедуры[0]; + ОкончаниеПроцедуры = НовыйТекстПроцедуры[НовыйТекстПроцедуры.ВГраница()]; + + УстановитьВерсию = ЗначениеЗаполнено(Код.Версия); + + ВыполненаЗамена = Ложь; + УстановленаВерсия = Ложь; + ЭтоТекстЗаменяемойПроцедуры = Ложь; + ЭтоПроцедураВерсии = Ложь; + #Если НЕ ВебКлиент Тогда + Модуль = Новый ЧтениеТекста; + Модуль.Открыть(ПолноеИмяФайла, "UTF-8"); + СтрокаМодуля = ""; + Пока СтрокаМодуля <> Неопределено Цикл + + СтрокаМодуля = Модуль.ПрочитатьСтроку(); + Если СтрокаМодуля = Неопределено Тогда + Прервать; + КонецЕсли; + + #Область ПриДобавленииПодсистемы + Если УстановитьВерсию И СокрЛП(СтрокаМодуля) = Код.ПроцедураВерсии Тогда + НовыйМодуль.ДобавитьСтроку(СтрокаМодуля); + Пока СтрНайти(СтрокаМодуля, "Описание.Версия =") = 0 Цикл + СтрокаМодуля = Модуль.ПрочитатьСтроку(); + Если СтрНайти(СтрокаМодуля, "Описание.Версия =") > 0 И СтрНайти(СтрокаМодуля, Код.Версия) = 0 Тогда + УстановленаВерсия = Истина; + СтрокаМодуля = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(" Описание.Версия = ""%1"";", Код.Версия); + КонецЕсли; + Если СтрНайти(СокрЛП(СтрокаМодуля), "Процедура") = 1 Тогда + НовыйМодуль.ДобавитьСтроку(СтрокаМодуля); + Прервать; + КонецЕсли; + НовыйМодуль.ДобавитьСтроку(СтрокаМодуля); + КонецЦикла; + Продолжить; + КонецЕсли; + #КонецОбласти + + #Область ЗаменитьКомментарий + // АПК:1297-выкл строки для вставки в описание процедур. + Если Код.ЭтоПроцедураОписания + И СтрНайти(СтрокаМодуля, "--// Добавляет в список процедуры-обработчики обновления данных ИБ") > 0 Тогда + СтрокаМодуля = ПропуститьСтрокиДо(Модуль, "Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления"); + Если СтрНайти(СтрокаМодуля, "Процедура") = 0 Тогда + СтрокаМодуля = Модуль.ПрочитатьСтроку(); + СтрокаМодуля = "// см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления"; + КонецЕсли; + КонецЕсли; + // АПК:1297-вкл + #КонецОбласти + + #Область ПриДобавленииОбработчиковОбновления + ЭтоПроцедураОписания = Ложь; + Если НЕ ВыполненаЗамена + И Код.ЭтоПроцедураОписания + И (СтрНайти(СтрокаМодуля, "Процедура ОписаниеОбработчиковОбновления") > 0 + ИЛИ СтрНайти(СтрокаМодуля, "Процедура ПриДобавленииОбработчиковОбновления") > 0) + И СтрНайти(СтрокаМодуля, ЗаголовокПроцедуры) = 0 Тогда + Для Каждого ИмяБиблиотеки Из Код.ИменаБиблиотек Цикл + ЗаголовокПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Процедура ОписаниеОбработчиковОбновления%1(Обработчики) Экспорт", ИмяБиблиотеки); + Если СтрНайти(СтрокаМодуля, ЗаголовокПроцедуры) > 0 Тогда + ЭтоПроцедураОписания = Истина; + Прервать; + КонецЕсли; + ЗаголовокПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Процедура ПриДобавленииОбработчиковОбновления%1(Обработчики) Экспорт", ИмяБиблиотеки); + Если СтрНайти(СтрокаМодуля, ЗаголовокПроцедуры) > 0 Тогда + ЭтоПроцедураОписания = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если СокрЛП(СтрокаМодуля) = ЗаголовокПроцедуры + ИЛИ (Код.ЭтоПроцедураОписания И СокрЛП(СтрокаМодуля) = "Процедура ОписаниеОбработчиковОбновления(Обработчики) Экспорт") + ИЛИ ЭтоПроцедураОписания Тогда + ЭтоТекстЗаменяемойПроцедуры = Истина; + ВыполненаЗамена = Истина; + Для Каждого НоваяСтрока Из НовыйТекстПроцедуры Цикл + НовыйМодуль.ДобавитьСтроку(НоваяСтрока); + КонецЦикла; + СтрокаМодуля = ПропуститьСтрокиДо(Модуль, ОкончаниеПроцедуры); + Продолжить; + КонецЕсли; + #КонецОбласти + + НовыйМодуль.ДобавитьСтроку(СтрокаМодуля); + + КонецЦикла; + Модуль.Закрыть(); + #КонецЕсли + + ИмяПроцедуры = ИмяПроцедуры(ЗаголовокПроцедуры); + Если УстановленаВерсия Тогда + Шаблон = НСтр("ru = 'В модуле ""%1"" установлена новая версия ""%2""'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Код.ИмяМодуля, Код.Версия)); + КонецЕсли; + Если ВыполненаЗамена Тогда + Шаблон = НСтр("ru = 'В модуле ""%1"" заменена процедура ""%2""'"); + НовыйТекст = НовыйМодуль.ПолучитьТекст(); + ЗаписатьТекстМодуля(НовыйТекст, ПолноеИмяФайла); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Код.ИмяМодуля, ИмяПроцедуры)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ПропуститьСтрокиДо(Модуль, ОкончаниеФрагмента) + + СтрокаМодуля = ""; + Пока СтрНайти(СтрокаМодуля, ОкончаниеФрагмента) = 0 Цикл + СтрокаМодуля = Модуль.ПрочитатьСтроку(); + Если СтрНайти(СокрЛП(СтрокаМодуля), "Процедура") = 1 Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Возврат СтрокаМодуля; + +КонецФункции + +&НаКлиенте +Функция ТекстФайлаВМассив(ПолноеИмяФайла) + + Результат = Новый Массив; + + #Если НЕ ВебКлиент Тогда + Модуль = Новый ЧтениеТекста; + Модуль.Открыть(ПолноеИмяФайла, "UTF-8"); + СтрокаМодуля = ""; + Пока СтрокаМодуля <> Неопределено Цикл + СтрокаМодуля = Модуль.ПрочитатьСтроку(); + Если СтрокаМодуля = Неопределено Тогда + Прервать; + КонецЕсли; + Результат.Добавить(СтрокаМодуля); + КонецЦикла; + #КонецЕсли + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Функция ИмяПроцедуры(ЗаголовокПроцедуры) + + ИмяПроцедуры = СтрЗаменить(ЗаголовокПроцедуры, "Процедура", ""); + ИмяПроцедуры = СокрЛП(СтрЗаменить(ИмяПроцедуры, "Экспорт", "")); + Скобка1 = СтрНайти(ИмяПроцедуры, "("); + Возврат Лев(ИмяПроцедуры, Скобка1-1); + +КонецФункции + +&НаКлиенте +Процедура ЗаписатьТекстМодуля(ТекстФайла, ПолноеИмяФайла) + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ПолноеИмяФайла", ПолноеИмяФайла); + ДополнительныеПараметры.Вставить("ТекстФайла", ТекстФайла); + #Если НЕ ВебКлиент Тогда + УдалитьФайлы(ПолноеИмяФайла); + УдалениеФайлаМодуляЗавершение(ДополнительныеПараметры); + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура УдалениеФайлаМодуляЗавершение(ДополнительныеПараметры) + + ПолноеИмяФайла = ДополнительныеПараметры.ПолноеИмяФайла; + ТекстФайла = ДополнительныеПараметры.ТекстФайла; + + #Если НЕ ВебКлиент Тогда + ЗаписатьBOM = Ложь; + Поток = Новый ФайловыйПоток(ПолноеИмяФайла, РежимОткрытияФайла.СоздатьНовый); + РазделительСтрок = Символы.ВК + Символы.ПС; + ЗаписьТекста = Новый ЗаписьТекста(Поток, КодировкаТекста.UTF8, РазделительСтрок,,ЗаписатьBOM); + + ЗаписьТекста.Записать(ТекстФайла); + ЗаписьТекста.Закрыть(); + + Поток.Закрыть(); + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьСписокОбработчиковТехПроекта() + + ИмяФайла = КаталогНастроек() + "tech-project.updaters"; + + ОбработчикиТехПроекта = ОбработчикиТехническогоПроекта(); + Если ОбработчикиТехПроекта.Количество() > 0 Тогда + ТекстФайла = СтрСоединить(ОбработчикиТехПроекта, Символы.ПС); + ЗаписатьФайлНаДиск(ИмяФайла, ТекстФайла); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ОбработчикиТехническогоПроекта() + + Отбор = Новый Структура("ТехническийПроект", Истина); + Обработчики = Объект.ОбработчикиОбновления.Выгрузить(Отбор); + ОбработчикиТехПроекта = Новый Массив; + Для Каждого Обработчик Из Обработчики Цикл + Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1:%2", Обработчик.Идентификатор, Обработчик.Процедура); + ОбработчикиТехПроекта.Добавить(Описание); + КонецЦикла; + + Возврат ОбработчикиТехПроекта; + +КонецФункции + +&НаКлиенте +Процедура СохранитьВерсиюВКореньКонфигурации() + + ПолноеИмяФайла = Объект.КаталогSRC + "Configuration\Configuration.mdo"; + + #Если НЕ ВебКлиент Тогда + УстановленаВерсия = Ложь; + НовыйФайл = Новый ТекстовыйДокумент; + ТекстФайла = Новый ЧтениеТекста; + ТекстФайла.Открыть(ПолноеИмяФайла, "UTF-8"); + СтрокаМодуля = ""; + Пока СтрокаМодуля <> Неопределено Цикл + + СтрокаМодуля = ТекстФайла.ПрочитатьСтроку(); + Если СтрокаМодуля = Неопределено Тогда + Прервать; + КонецЕсли; + + Если СтрНайти(СтрокаМодуля, "") > 0 + И СтрНайти(СтрокаМодуля, НоваяВерсияКонфигурации) = 0 Тогда + УстановленаВерсия = Истина; + СтрокаМодуля = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(" %1", НоваяВерсияКонфигурации); + КонецЕсли; + НовыйФайл.ДобавитьСтроку(СтрокаМодуля); + + КонецЦикла; + + ТекстФайла = НовыйФайл.ПолучитьТекст(); + Если УстановленаВерсия Тогда + Шаблон = НСтр("ru = 'Установлена новая версия ""%1"" в корне конфигурации'"); + НовыйТекст = НовыйФайл.ПолучитьТекст(); + ЗаписатьТекстМодуля(НовыйТекст, ПолноеИмяФайла); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, НоваяВерсияКонфигурации)); + КонецЕсли; + ЗаписатьФайлНаДиск(ПолноеИмяФайла, ТекстФайла); + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Функция ЗаписатьФайлНаДиск(ПолноеИмяФайла, ТекстФайла) + + #Если НЕ ВебКлиент Тогда + ЗаписатьBOM = Ложь; + УдалитьФайлы(ПолноеИмяФайла); + Поток = Новый ФайловыйПоток(ПолноеИмяФайла, РежимОткрытияФайла.СоздатьНовый); + РазделительСтрок = Символы.ВК + Символы.ПС; + ЗаписьТекста = Новый ЗаписьТекста(Поток, КодировкаТекста.UTF8, РазделительСтрок, , ЗаписатьBOM); + + ЗаписьТекста.Записать(ТекстФайла); + ЗаписьТекста.Закрыть(); + + Поток.Закрыть(); + #КонецЕсли + + Возврат ПолноеИмяФайла; + +КонецФункции + +#КонецОбласти + +#Область РедактированиеОбработчика + +&НаКлиенте +Процедура ОткрытьРедакторОписанияОбработчика(СсылкаОбработчика, НоваяСтрока = Ложь, ИсточникКопирования = "") + + АдресДанных = ПоместитьДанныеОбработчикаВХранилище(СсылкаОбработчика,,ИсточникКопирования); + ПараметрыФормы = Новый Структура("АдресОбработчика, НоваяСтрока", АдресДанных, НоваяСтрока); + ПараметрыФормы.Вставить("ЗапускИзКонфигурации", ЗапускИзКонфигурации); + + ДополнительныеПараметры = Новый Структура("Ссылка", СсылкаОбработчика); + ОбработчикЗакрытияФормы = Новый ОписаниеОповещения("ЗавершениеРедактированияОбработчика", ЭтотОбъект, ДополнительныеПараметры); + + ИмяФормыОбработчика = "Обработка.ОписаниеОбработчиковОбновления.Форма.ФормаОбработчика"; + Если НЕ ЗапускИзКонфигурации Тогда + ИмяФормыОбработчика = "ВнешняяОбработка.ОписаниеОбработчиковОбновления.Форма.ФормаОбработчика"; + КонецЕсли; + + ОткрытьФорму(ИмяФормыОбработчика, + ПараметрыФормы, + ЭтотОбъект, + ЭтотОбъект.УникальныйИдентификатор, + , + , + ОбработчикЗакрытияФормы, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаСервере +Функция ПоместитьДанныеОбработчикаВХранилище(СсылкаОбработчика, Адрес = Неопределено, ИсточникКопирования = Неопределено) + + ТабЧасти = Новый Структура; + Данные = Новый Структура("ТабличныеЧасти", ТабЧасти); + + Данные.Вставить("МодулиПодсистем", МодулиПодсистем); + + Отбор = Новый Структура("Ссылка", СсылкаОбработчика); + Данные.ТабличныеЧасти.Вставить("ОбработчикиОбновления", Объект.ОбработчикиОбновления.Выгрузить(Отбор)); + Если ЗначениеЗаполнено(ИсточникКопирования) Тогда + ДобавитьОбъектыИсходногоОбработчика(Данные, ИсточникКопирования); + + Иначе + ТабЧасти.Вставить("ЧитаемыеОбъекты", Объект.ЧитаемыеОбъекты.Выгрузить(Отбор)); + ТабЧасти.Вставить("ИзменяемыеОбъекты", Объект.ИзменяемыеОбъекты.Выгрузить(Отбор)); + ТабЧасти.Вставить("БлокируемыеОбъекты", Объект.БлокируемыеОбъекты.Выгрузить(Отбор)); + ТабЧасти.Вставить("ПриоритетыВыполнения", Объект.ПриоритетыВыполнения.Выгрузить(Отбор)); + + Отбор = Новый Структура("ОбработчикПисатель", СсылкаОбработчика); + ТабЧасти.Вставить("КонфликтыОбработчиков", Объект.КонфликтыОбработчиков.Выгрузить(Отбор)); + + Отбор = Новый Структура("ОбработчикЧитательИлиПисатель2", СсылкаОбработчика); + ЕщеКонфликты = Объект.КонфликтыОбработчиков.Выгрузить(Отбор); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ЕщеКонфликты, ТабЧасти.КонфликтыОбработчиков); + + КонецЕсли; + + Если Адрес = Неопределено Тогда + Адрес = ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор); + Иначе + ПоместитьВоВременноеХранилище(Данные, Адрес); + КонецЕсли; + + Возврат Адрес; + +КонецФункции + +// Параметры: +// Данные - Структура: +// * МодулиПодсистем - Массив из Строка +// * ТабличныеЧасти - КлючИЗначение: +// **ОбработчикиОбновления - ТаблицаЗначений: +// *** Ссылка - Строка +// ИсточникКопирования - Неопределено +// - Строка +// +&НаСервере +Процедура ДобавитьОбъектыИсходногоОбработчика(Данные, ИсточникКопирования) + + ТабличныеЧасти = Новый Массив; + ТабличныеЧасти.Добавить("ЧитаемыеОбъекты"); + ТабличныеЧасти.Добавить("ИзменяемыеОбъекты"); + ТабличныеЧасти.Добавить("БлокируемыеОбъекты"); + + Отбор = Новый Структура("Ссылка", ИсточникКопирования); + Обработчик = Данные.ТабличныеЧасти.ОбработчикиОбновления[0]; + НоваяСсылка = Обработчик.Ссылка; + Для Каждого ИмяТабЧасти Из ТабличныеЧасти Цикл + тз = Объект[ИмяТабЧасти].Выгрузить(Отбор); + тз.ЗаполнитьЗначения(НоваяСсылка, "Ссылка"); + Данные.ТабличныеЧасти.Вставить(ИмяТабЧасти, тз); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ОбновитьДанныеОбработчика(АдресОбработчика) + + Обработка = ОбъектОбработки(); + Данные = ПолучитьИзВременногоХранилища(АдресОбработчика); // см. ДобавитьОбъектыИсходногоОбработчика.Данные + + НовоеОписание = Данные.ТабличныеЧасти.ОбработчикиОбновления[0]; + Модифицированность = НовоеОписание.Изменен; + + НовоеОписание.ВерсияЧислом = Обработка.ВерсияЧислом(НовоеОписание.Версия); + НомераВерсии = СтрРазделить(НовоеОписание.Версия, "."); + НомераВерсии.Удалить(0); + НовоеОписание.РедакцияЧислом = Обработка.ВерсияЧислом(НомераВерсии); + + ОписаниеОбработчика = Обработка.ОбработчикиОбновления.Найти(НовоеОписание.Ссылка, "Ссылка"); + Если ОписаниеОбработчика <> Неопределено Тогда + + ЗаполнитьЗначенияСвойств(ОписаниеОбработчика, НовоеОписание); + Если МодулиПодсистем <> Неопределено И НовоеОписание.Подсистема <> "" Тогда + ОписаниеОбработчика.ИмяОсновногоСерверногоМодуля = МодулиПодсистем[НовоеОписание.Подсистема]; + ОписаниеОбработчика.ИмяБиблиотеки = СтрЗаменить(ОписаниеОбработчика.ИмяОсновногоСерверногоМодуля, "ОбновлениеИнформационнойБазы", ""); + КонецЕсли; + Имена = СтрРазделить(ОписаниеОбработчика.Процедура, "."); + Имена.Удалить(Имена.ВГраница()); + ОписаниеОбработчика.ИмяОбъекта = СтрСоединить(Имена, "."); + + ИнверсныйПорядок = ИнверсныйПорядок(); + Отбор = Новый Структура("Ссылка", ОписаниеОбработчика.Ссылка); + Для Каждого ТабличнаяЧасть Из Данные.ТабличныеЧасти Цикл + + Если ТабличнаяЧасть.Ключ <> "ОбработчикиОбновления" Тогда + НайденныеСтроки = Обработка[ТабличнаяЧасть.Ключ].НайтиСтроки(Отбор); + Для Каждого СтрокаКУдалению Из НайденныеСтроки Цикл + Обработка[ТабличнаяЧасть.Ключ].Удалить(СтрокаКУдалению); + КонецЦикла; + + Для Каждого Запись Из ТабличнаяЧасть.Значение Цикл + НоваяСтрока = Обработка[ТабличнаяЧасть.Ключ].Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Запись,,"НомерСтроки"); + Если ТабличнаяЧасть.Ключ = "ПриоритетыВыполнения" Тогда + ИнвертироватьПорядок(Обработка, Запись, ИнверсныйПорядок) + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + ОбновитьСведенияОКонфликтахОбработчиков(Обработка); + ЗначениеВРеквизитФормы(Обработка, "Объект"); + + Отбор = Новый Структура("Ссылка", НовоеОписание.Ссылка); + НайденныеСтроки = Объект.ОбработчикиОбновления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].НоваяСтрока = Ложь; + Элементы.ОбработчикиОбновления.ТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор(); + ИсходнаяТекущаяСтрока = Элементы.ОбработчикиОбновления.ТекущаяСтрока; + КонецЕсли; + + ОбновитьОтборыОбработчиков(); + + КонецЕсли; + + Возврат НовоеОписание.Ссылка; + +КонецФункции + +&НаСервере +Функция ИнверсныйПорядок() + + ИнверсныйПорядок = Новый Соответствие; + ИнверсныйПорядок.Вставить("До","После"); + ИнверсныйПорядок.Вставить("После","До"); + ИнверсныйПорядок.Вставить("Любой","Любой"); + Возврат ИнверсныйПорядок; + +КонецФункции + +&НаСервере +Процедура ИнвертироватьПорядок(Обработка, Запись, ИнверсныйПорядок) + + Отбор = Новый Структура("Ссылка, Обработчик2"); + Отбор.Ссылка = Запись.Обработчик2; + Отбор.Обработчик2 = Запись.Ссылка; + НайденныеПриоритеты = Обработка["ПриоритетыВыполнения"].НайтиСтроки(Отбор); + Для Каждого Приоритет Из НайденныеПриоритеты Цикл + Если НЕ ПустаяСтрока(Запись.Порядок) Тогда + НовыйПорядок = ИнверсныйПорядок[Запись.Порядок]; + Если НовыйПорядок <> Приоритет.Порядок Тогда + Приоритет.Порядок = НовыйПорядок; + Приоритет.ЗаданПорядокВыполнения = Истина; + Отбор = Новый Структура("Ссылка", Запись.Обработчик2); + НайденныеОбработчики = Обработка["ОбработчикиОбновления"].НайтиСтроки(Отбор); + Если НайденныеОбработчики.Количество() > 0 Тогда + НайденныеОбработчики[0].Изменен = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьДанныеОКонфликтахОбработчика(АдресОбработчика) + + СсылкаОбработчика = ОбновитьДанныеОбработчика(АдресОбработчика); + ПоместитьДанныеОбработчикаВХранилище(СсылкаОбработчика, АдресОбработчика); + +КонецПроцедуры + +&НаСервере +Процедура ПриоритетыКонфликтовЧитаемыхИлиДвойнойЗаписи(ПриоритетыВыполнения, Конфликты) + + ПриоритетыОбработчика1 = ПриоритетыВыполнения.Скопировать(); + ПриоритетыВыполнения.Очистить(); + + Для Каждого ПриоритетОбработчика1 Из ПриоритетыОбработчика1 Цикл + ЧитаемыеДанныеИзменяютсяДругими = Конфликты.Найти(ПриоритетОбработчика1.Процедура2, "ПроцедураПисатель") <> Неопределено; + РазрабатываемаяБиблиотека_ИзменяетЧитаемыеДанные = РазрабатываемыеПодсистемы.Найти(ПриоритетОбработчика1.Подсистема2) <> Неопределено; + Если ЧитаемыеДанныеИзменяютсяДругими ИЛИ НЕ РазрабатываемаяБиблиотека_ИзменяетЧитаемыеДанные Тогда + НоваяСтрока = ПриоритетыВыполнения.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ПриоритетОбработчика1); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ПостроениеОчереди + +&НаСервере +Функция ПостроитьОчередьНаСервере() + + ИтерацииОбновления = ОбновлениеИнформационнойБазыСлужебный.ИтерацииОбновления(); + ОбновлениеИнформационнойБазыПереопределяемый.ПередФормированиеСпискаОтложенныхОбработчиков(ИтерацииОбновления); + + Обработка = ОбъектОбработки(); + ВсеХорошо = Обработка.ПостроитьОчередь(); + ЗначениеВРеквизитФормы(Обработка, "Объект"); + + ОбновитьДанныеФормы(Обработка); + + Возврат ВсеХорошо; + +КонецФункции + +#КонецОбласти + +#Область ОбнаружениеКонфликтов + +&НаСервере +Процедура ОбновитьСведенияОКонфликтахОбработчиков(Обработка) + + НовоеОписание = Обработка.ОбновитьСведенияОКонфликтахОбработчиков(); + ЗаполнитьБыстрыеОтборы(НовоеОписание); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьБыстрыеОтборы(Знач ОписаниеОбработчиков = Неопределено) + + Если ОписаниеОбработчиков = Неопределено Тогда + ОписаниеОбработчиков = Объект.ОбработчикиОбновления.Выгрузить(); + КонецЕсли; + + МассивСтрок = Новый Массив; + ПрочиеБыстрыеОтборы.Очистить(); + + ДобавитьБыстрыйОтбор(ОписаниеОбработчиков, МассивСтрок, "СтатусПроблемы", СтатусНеобходимАнализ, ЦветаСтиля.ЦветОсобогоТекста); + ДобавитьБыстрыйОтбор(ОписаниеОбработчиков, МассивСтрок, "РежимВыполнения", НСтр("ru = 'Отложенно'")); + ДобавитьБыстрыйОтбор(ОписаниеОбработчиков, МассивСтрок, "РежимВыполнения", НСтр("ru = 'Монопольно'")); + ДобавитьБыстрыйОтбор(ОписаниеОбработчиков, МассивСтрок, "РежимВыполнения", НСтр("ru = 'Оперативно'")); + ДобавитьБыстрыйОтбор(ОписаниеОбработчиков, МассивСтрок, "ТехническийПроект", НСтр("ru = 'Тех.проект'")); + + ДобавитьПрочийБыстрыйОтбор(ОписаниеОбработчиков, "РежимВыполненияОтложенныхОбработчиков", НСтр("ru = 'Параллельно'")); + ДобавитьПрочийБыстрыйОтбор(ОписаниеОбработчиков, "РежимВыполненияОтложенныхОбработчиков", НСтр("ru = 'Последовательно'")); + ДобавитьПрочийБыстрыйОтбор(ОписаниеОбработчиков, "НачальноеЗаполнение", НСтр("ru = 'Начальное заполнение'")); + ДобавитьПрочийБыстрыйОтбор(ОписаниеОбработчиков, "ВыполнятьВГруппеОбязательных", НСтр("ru = 'Обязательный'")); + ДобавитьПрочийБыстрыйОтбор(ОписаниеОбработчиков, "Многопоточный", НСтр("ru = 'Многопоточный'")); + ДобавитьПрочийБыстрыйОтбор(ОписаниеОбработчиков, "ЗаписьЧитаемых", НСтр("ru = 'Запись читаемых'")); + ДобавитьПрочийБыстрыйОтбор(ОписаниеОбработчиков, "ПовторнаяЗапись", НСтр("ru = 'Повторная запись'")); + + ТекстСтатуса = НСтр("ru = 'Прочие'"); + СтрокаГиперссылки = Новый ФорматированнаяСтрока( + ТекстСтатуса, + , + ЦветаСтиля.ЦветТекстаКнопки, , + "Прочие"); + МассивСтрок.Добавить(СтрокаГиперссылки); + МассивСтрок.Добавить(" "); + + ТекстСтатуса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)", НСтр("ru = 'Все'"), ОписаниеОбработчиков.Количество()); + СтрокаГиперссылки = Новый ФорматированнаяСтрока( + ТекстСтатуса, + , + ЦветаСтиля.ЦветТекстаКнопки, , + "Все"); + + МассивСтрок.Добавить(СтрокаГиперссылки); + + Элементы.БыстрыеОтборы.Заголовок = Новый ФорматированнаяСтрока(МассивСтрок); + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьБыстрыйОтбор(ОписаниеОбработчиков, МассивСтрок, ИмяПоляОтбора, Знач ЗначениеОтбора, Знач Цвет = Неопределено) + + Если Цвет = Неопределено Тогда + Цвет = ЦветаСтиля.ЦветТекстаКнопки; + КонецЕсли; + + ПредставлениеОтбора = ЗначениеОтбора; + + Для Каждого ТипПоля Из ОписаниеОбработчиков.Колонки[ИмяПоляОтбора].ТипЗначения.Типы() Цикл + Если ТипПоля = Тип("Булево") Тогда + ЗначениеОтбора = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Отбор = Новый Структура(ИмяПоляОтбора, ЗначениеОтбора); + СтрокиОтбора = ОписаниеОбработчиков.Скопировать(Отбор); + Если СтрокиОтбора.Количество() > 0 Тогда + + ТекстСтатуса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)", ПредставлениеОтбора, СтрокиОтбора.Количество()); + СтрокаГиперссылки = Новый ФорматированнаяСтрока( + ТекстСтатуса, + , + Цвет, , + СтрЗаменить(ТРег(ПредставлениеОтбора)," ","")); + + МассивСтрок.Добавить(СтрокаГиперссылки); + МассивСтрок.Добавить(" "); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьПрочийБыстрыйОтбор(ОписаниеОбработчиков, ИмяПоляОтбора, Знач ЗначениеОтбора) + + ПредставлениеОтбора = ЗначениеОтбора; + Для Каждого ТипПоля Из ОписаниеОбработчиков.Колонки[ИмяПоляОтбора].ТипЗначения.Типы() Цикл + Если ТипПоля = Тип("Булево") Тогда + ЗначениеОтбора = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Отбор = Новый Структура(ИмяПоляОтбора, ЗначениеОтбора); + СтрокиОтбора = ОписаниеОбработчиков.Скопировать(Отбор); + Если СтрокиОтбора.Количество() > 0 Тогда + ТекстСтатуса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)", ПредставлениеОтбора, СтрокиОтбора.Количество()); + ПрочиеБыстрыеОтборы.Добавить(ИмяПоляОтбора, ТекстСтатуса); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ГенерацияКода + +&НаКлиенте +Процедура ПоказатьТекстыОписанияОбработчиковОбновления(ПараметрыГенерацииКода) + + ТекстыМодулей = ПолучитьТекстыМодулей(ПараметрыГенерацииКода); + Для Каждого КодМодуля Из ТекстыМодулей Цикл + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(КодМодуля.ТекстПроцедуры); + ТекстовыйДокумент.Показать(КодМодуля.ИмяМодуля); + КонецЦикла; + Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть(); + Модифицированность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьТекстыМодулей(ПараметрыГенерацииКода = Неопределено) + + Если ПараметрыГенерацииКода = Неопределено Тогда + ПараметрыГенерацииКода = НовыеПараметрыГенерацииКода(); + КонецЕсли; + Настройки = Новый Структура("ПараметрыГенерацииКода", ПараметрыГенерацииКода); + + ИмяФайла = КаталогНастроек() + "cut_tags.yml"; + Файл = Новый Файл(ИмяФайла); + Если Файл.Существует() Тогда + ОписаниеТэгов = ПрочитатьФайлYaml(ИмяФайла); + Если ОписаниеТэгов["configurations"] <> Неопределено Тогда + ПолучитьОбъектыПодсистем(ОписаниеТэгов["configurations"]); + ВсеОбъекты = ПолучитьВсеОбъектыИсходнойКонфигурации(); + ОпределитьТэгиДляОбъектовНеВходящихВКонфигурацию(ОписаниеТэгов); + Настройки.Вставить("ОписаниеТэгов", ОписаниеТэгов); + Настройки.Вставить("ВсеОбъекты", ВсеОбъекты); + КонецЕсли; + КонецЕсли; + АдресНастроек = ПоместитьВоВременноеХранилище(Настройки, УникальныйИдентификатор); + + Если ПараметрыГенерацииКода.ОписаниеВОбщемМодуле Тогда + Возврат ОписанияОбработчиковПоМодулямОбновления(АдресНастроек); + Иначе + Возврат ОписанияОбработчиковПоМодулямМенеджеров(АдресНастроек); + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция НовыеПараметрыГенерацииКода() + + Результат = Новый Структура; + Результат.Вставить("ОписаниеВОбщемМодуле", Ложь); + Результат.Вставить("ТолькоИзмененные", Истина); + Результат.Вставить("ТолькоВыделенные", Ложь); + Результат.Вставить("ОбновитьОчередь", Истина); + Результат.Вставить("ОбновитьСписокВызовов", Истина); + Возврат Результат; + +КонецФункции + +#Область ПоМодулямОбновления + +&НаСервере +Функция ОписанияОбработчиковПоМодулямОбновления(АдресНастроек) + + Настройки = ПолучитьИзВременногоХранилища(АдресНастроек); + ПараметрыГенерацииКода = Настройки.ПараметрыГенерацииКода; + ОбновитьОчередь = ПараметрыГенерацииКода.ОбновитьОчередь; + + ТекстыМодулей = Новый Массив; + Если НЕ ПостроитьОчередьНаСервере() Тогда + Возврат ТекстыМодулей; + КонецЕсли; + + ОписаниеКонфигураций = Новый Соответствие; + ИменаКонфигураций = Новый Массив; + РазметкаКода = Новый Структура("УстановитьТэги", Ложь); + РазметкаКода.Вставить("ЭтоМодульМенеджера", Ложь); + РазметкаКода.Вставить("ДобавитьОбластьОписания", Истина); + РазметкаКода.Вставить("ЭтоПроцедураОписания", Ложь); + Если Настройки.Свойство("ОписаниеТэгов") Тогда + ОписаниеКонфигураций = Настройки.ОписаниеТэгов["configurations"]; + Тэги = ПолучитьСведенияОТегахВырезки(Настройки); + ИменаКонфигураций = Тэги.БиблиотекиВПорядкеВложенности; + РазметкаКода.УстановитьТэги = Истина; + РазметкаКода.Вставить("Тэги", Тэги); + Иначе + ЗаполнитьОписание(ОписаниеКонфигураций, ИменаКонфигураций); + КонецЕсли; + + ВерсииМодулей = ОписаниеВерсийМодулей(); + Для Каждого ИмяКонфигурации Из ИменаКонфигураций Цикл + + ОписаниеКонфигурации = ОписаниеКонфигураций[ИмяКонфигурации]; + ИмяОсновногоСерверногоМодуля = ОписаниеКонфигурации["module"]; + Если ИмяОсновногоСерверногоМодуля = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если РазрабатываемыеПодсистемы.Найти(ОписаниеКонфигурации["name"]) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если РазметкаКода.УстановитьТэги Тогда + РазметкаКода.Вставить("ИмяКонфигурации", ИмяКонфигурации); + РазметкаКода.Вставить("ИмяМодуля", ИмяОсновногоСерверногоМодуля); + РазметкаКода.Вставить("ИмяПроцедуры", "ПриДобавленииОбработчиковОбновления"); + РазметкаКода.Вставить("ЭтоПроцедураОписания", Ложь); + РазметкаКода.Вставить("МодульЛокализации", ОписаниеКонфигурации["localization"] <> Неопределено); + Если РазметкаКода.МодульЛокализации Тогда + Если ОписаниеКонфигурации["outTags"].Количество() > 0 Тогда + РазметкаКода.Вставить("ТэгиЛокализации", ОписаниеКонфигурации["outTags"][0]); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Отбор = Новый Структура("РежимВыполненияОтложенныхОбработчиков", "Параллельно"); + Отбор.Вставить("ИмяОсновногоСерверногоМодуля", ИмяОсновногоСерверногоМодуля); + ОбработчикиМодуля = Объект.ОбработчикиОбновления.Выгрузить(Отбор); + + Если ОбработчикиМодуля.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ОбработчикиМодуля.Сортировать("Процедура"); + МодулиОбработчиков = МодулиОбработчиковОбновления(ОбработчикиМодуля, РазметкаКода); + Если РазметкаКода.УстановитьТэги Тогда + РазметкаКода.Тэги.Вставить("ПоОбработчикам", ОбработчикиМодуля); + КонецЕсли; + ТекстОбработчиков = ТекстОбработчиков(ОбработчикиМодуля, РазметкаКода); + + Если РазметкаКода.УстановитьТэги И РазметкаКода.МодульЛокализации Тогда + ТэгБиблиотеки = Тэги.ПоБиблиотекам.Найти(ИмяКонфигурации); + Если ТэгБиблиотеки <> Неопределено Тогда + ТэгЛокализации = Тэги.Описание[ТэгБиблиотеки.Тэг]; // см. ОписаниеТэга + Если ТэгЛокализации <> Неопределено Тогда + Шаблон = "%1 + |%2 + |%3"; + ТекстОбработчиков = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ТэгЛокализации.Начало, ТекстОбработчиков, ТэгЛокализации.Конец); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ТекстПроцедуры = + "Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + | + |"+ ТекстОбработчиков +" + | + |КонецПроцедуры"; + + КодМодуля = ОписаниеКодаМодуля(ИмяОсновногоСерверногоМодуля, ТекстПроцедуры); + КодМодуля.ПутьМодуля = "CommonModules\" + ИмяОсновногоСерверногоМодуля + "\Module.bsl"; + ДобавитьВерсиюМодуля(ВерсииМодулей, ОбработчикиМодуля); + ТекстыМодулей.Добавить(КодМодуля); + + КонецЦикла; + + Если ВерсииМодулей.Количество() > 0 Тогда + УстановитьВерсиюМодуля(ТекстыМодулей, ВерсииМодулей); + КонецЕсли; + + Возврат ТекстыМодулей; + +КонецФункции + +#КонецОбласти + +#Область ПоМодулямОбъектовОбновления + +&НаСервере +Функция ОписанияОбработчиковПоМодулямМенеджеров(АдресНастроек) + + ТекстыМодулей = Новый Массив; + + Настройки = ПолучитьИзВременногоХранилища(АдресНастроек); + ПараметрыГенерацииКода = Настройки.ПараметрыГенерацииКода; + ТолькоИзмененные = ПараметрыГенерацииКода.ТолькоИзмененные; + ТолькоВыделенные = ПараметрыГенерацииКода.ТолькоВыделенные; + ОбновитьСписокВызовов = ПараметрыГенерацииКода.ОбновитьСписокВызовов; + ОбновитьОчередь = ПараметрыГенерацииКода.ОбновитьОчередь; + + ВыделенныеОбработчики = Новый Массив; + Если ТолькоВыделенные Тогда + ВыделенныеОбработчики = ВыделенныеОбработчики(); + КонецЕсли; + + Если НЕ ТолькоВыделенные И ОбновитьОчередь И НЕ ПостроитьОчередьНаСервере() Тогда + Возврат ТекстыМодулей; + КонецЕсли; + + ВсеИменаКонфигураций = Новый Соответствие; + ОписаниеКонфигураций = Новый Соответствие; + ИменаКонфигураций = Новый Массив; + РазметкаКода = Новый Структура("УстановитьТэги, ЭтоМодульМенеджера", Ложь, Ложь); + Если Настройки.Свойство("ОписаниеТэгов") Тогда + ОписаниеКонфигураций = Настройки.ОписаниеТэгов["configurations"]; + Тэги = ПолучитьСведенияОТегахВырезки(Настройки); + ИменаКонфигураций = Тэги.БиблиотекиВПорядкеВложенности; + РазметкаКода.УстановитьТэги = Истина; + РазметкаКода.Вставить("Тэги", Тэги); + Иначе + ЗаполнитьОписание(ОписаниеКонфигураций, ИменаКонфигураций); + КонецЕсли; + + ВерсииМодулей = ОписаниеВерсийМодулей(); + + #Область СформироватьСпискиМодулейМенеджеров + ВсеМодулиОбработчиков = Неопределено; + ОбработчикиКОписанию = Неопределено; + Для Каждого ИмяКонфигурации Из ИменаКонфигураций Цикл + + ОписаниеКонфигурации = ОписаниеКонфигураций[ИмяКонфигурации]; + ИмяОсновногоСерверногоМодуля = ОписаниеКонфигурации["module"]; + Если ИмяОсновногоСерверногоМодуля = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если РазрабатываемыеПодсистемы.Найти(ОписаниеКонфигурации["name"]) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если РазметкаКода.УстановитьТэги Тогда + РазметкаКода.Вставить("ИмяКонфигурации", ИмяКонфигурации); + РазметкаКода.Вставить("ИмяМодуля", ИмяОсновногоСерверногоМодуля); + РазметкаКода.Вставить("МодульЛокализации", ОписаниеКонфигурации["localization"] <> Неопределено); + Если РазметкаКода.МодульЛокализации Тогда + Если ОписаниеКонфигурации["outTags"].Количество() > 0 Тогда + РазметкаКода.Вставить("ТэгиЛокализации", ОписаниеКонфигурации["outTags"][0]); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИмяБиблиотеки = СтрЗаменить(ИмяОсновногоСерверногоМодуля, "ОбновлениеИнформационнойБазы", ""); + + Отбор = Новый Структура("РежимВыполненияОтложенныхОбработчиков", "Параллельно"); + Отбор.Вставить("ИмяОсновногоСерверногоМодуля", ИмяОсновногоСерверногоМодуля); + ОбработчикиМодуля = Объект.ОбработчикиОбновления.Выгрузить(Отбор); + + Если ОбработчикиМодуля.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + ВсеИменаКонфигураций.Вставить(ИмяБиблиотеки, ИмяКонфигурации); + + КодМодуля = ОписаниеКодаМодуля(ИмяОсновногоСерверногоМодуля); + ДобавитьВерсиюМодуля(ВерсииМодулей, ОбработчикиМодуля); + ОбработчикиМодуля.Сортировать("Процедура"); + + МодулиОбработчиков = МодулиОбработчиковОбновления(ОбработчикиМодуля, РазметкаКода, ВыделенныеОбработчики); + Если РазметкаКода.УстановитьТэги Тогда + ЗаполнитьТэгиМодулейПоПодсистемам(МодулиОбработчиков, РазметкаКода); + КонецЕсли; + + Если ВсеМодулиОбработчиков = Неопределено Тогда + ВсеМодулиОбработчиков = МодулиОбработчиков; + Иначе + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(МодулиОбработчиков, ВсеМодулиОбработчиков); + КонецЕсли; + + Если ОбработчикиКОписанию = Неопределено Тогда + ОбработчикиКОписанию = ОбработчикиМодуля; + Иначе + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ОбработчикиМодуля, ОбработчикиКОписанию); + КонецЕсли; + + КонецЦикла; + #КонецОбласти + + #Область ДополнимВыделенныеОбработчикиДругихБиблиотек + Если ВыделенныеОбработчики.Количество() > 0 И (ВсеМодулиОбработчиков = Неопределено ИЛИ ВсеМодулиОбработчиков.Количество() = 0) Тогда + Для Каждого Выделенный Из ВыделенныеОбработчики Цикл + ОбработчикиМодуля = Объект.ОбработчикиОбновления.Выгрузить(Новый Структура("Ссылка", Выделенный)); + Если ОбработчикиМодуля.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + МодулиОбработчиков = МодулиОбработчиковОбновления(ОбработчикиМодуля, РазметкаКода, ВыделенныеОбработчики); + Если РазметкаКода.УстановитьТэги Тогда + ЗаполнитьТэгиМодулейПоПодсистемам(МодулиОбработчиков, РазметкаКода); + КонецЕсли; + Если ВсеМодулиОбработчиков = Неопределено Тогда + ВсеМодулиОбработчиков = МодулиОбработчиков; + Иначе + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(МодулиОбработчиков, ВсеМодулиОбработчиков); + КонецЕсли; + + Если ОбработчикиКОписанию = Неопределено Тогда + ОбработчикиКОписанию = ОбработчикиМодуля; + Иначе + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ОбработчикиМодуля, ОбработчикиКОписанию); + КонецЕсли; + КонецЦикла; + КонецЕсли; + #КонецОбласти + + #Область ДополнимКонфликтующиеОбработчики + Если РазметкаКода.УстановитьТэги И НЕ ТолькоВыделенные Тогда + ИзмененныеОбработчики = Объект.ОбработчикиОбновления.Выгрузить(Новый Структура("Изменен", Истина)).ВыгрузитьКолонку("Ссылка"); + Если ВыделенныеОбработчики.Количество() > 0 Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИзмененныеОбработчики, ВыделенныеОбработчики, Истина); + КонецЕсли; + Для Каждого Измененный Из ИзмененныеОбработчики Цикл + КонфликтыОбработчика = Объект.КонфликтыОбработчиков.Выгрузить(Новый Структура("ОбработчикПисатель", Измененный)); + КонфликтующиеОбработчики = ВсеМодулиОбработчиков.СкопироватьКолонки(); + Для Каждого Конфликт Из КонфликтыОбработчика Цикл + Обработчик = ОбработчикиКОписанию.Найти(Конфликт.ОбработчикЧитательИлиПисатель2, "Ссылка"); + Если Обработчик <> Неопределено Тогда + НовыйМодуль = КонфликтующиеОбработчики.Добавить(); + ЗаполнитьЗначенияСвойств(НовыйМодуль, Обработчик); + НовыйМодуль.Изменен = ТолькоИзмененные; + РазметкаКода.ИмяКонфигурации = ВсеИменаКонфигураций[Обработчик.ИмяБиблиотеки]; + ЗаполнитьТэгиМодулейПоПодсистемам(КонфликтующиеОбработчики, РазметкаКода); + КонецЕсли; + КонецЦикла; + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(КонфликтующиеОбработчики, ВсеМодулиОбработчиков); + КонецЦикла; + КонецЕсли; + #КонецОбласти + + Если ВсеМодулиОбработчиков = Неопределено Тогда + Возврат ТекстыМодулей; + КонецЕсли; + + #Область СформироватьПроцедурыОписаниеОбработчиковОбновления + Если РазметкаКода.УстановитьТэги Тогда + РазметкаКода.Тэги.Вставить("ПоОбработчикам", ОбработчикиКОписанию); + КонецЕсли; + РазметкаКода.Вставить("ДобавитьОбластьОписания", Ложь); + РазметкаКода.Вставить("ИмяПроцедуры", "ПриДобавленииОбработчиковОбновления"); + РазметкаКода.Вставить("ЭтоПроцедураОписания", Истина); + + ВсеМодулиОбработчиков.Свернуть("МодульОбработчика,ИмяОбъекта,ВнешниеТэги", "Изменен"); + ВсеМодулиОбработчиков.Сортировать("МодульОбработчика"); + + ТипСтрока150 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)); + ВсеВызовыОписания = ВсеМодулиОбработчиков.СкопироватьКолонки(); + ВсеВызовыОписания.Колонки.Добавить("ИмяБиблиотеки", ТипСтрока150); + ВсеВызовыОписания.Колонки.Добавить("ИмяПроцедуры", ТипСтрока150); + + ТекстыМодулейМенеджера = Новый Массив; + Для Каждого Модуль Из ВсеМодулиОбработчиков Цикл + + РазметкаКода.ЭтоМодульМенеджера = СтрНайти(Модуль.ИмяОбъекта, "ОбщийМодуль") = 0; + РазметкаКода.ДобавитьОбластьОписания = Ложь; + + Отбор = Новый Структура("МодульОбработчика", Модуль.МодульОбработчика); + ОбработчикиОбъекта = ОбработчикиКОписанию.Скопировать(Отбор); + ОбработчикиОбъекта.Сортировать("Процедура"); + БиблиотекиОбработчиков = ОбработчикиОбъекта.Скопировать(Отбор); + БиблиотекиОбработчиков.Свернуть("ИмяБиблиотеки"); + БиблиотекиОбработчиков.Сортировать("ИмяБиблиотеки"); + ИменаБиблиотек = БиблиотекиОбработчиков.ВыгрузитьКолонку("ИмяБиблиотеки"); + + Для Каждого Библиотека Из ИменаБиблиотек Цикл + ИмяПроцедуры = "ПриДобавленииОбработчиковОбновления"; + Если ИменаБиблиотек.Количество() > 1 ИЛИ СтрНайти(Модуль.МодульОбработчика, "ОбновлениеИнформационнойБазы") > 0 Тогда + ИмяПроцедуры = "ПриДобавленииОбработчиковОбновления" + Библиотека; + КонецЕсли; + Отбор = Новый Структура("ИмяБиблиотеки", Библиотека); + Обработчики = ОбработчикиОбъекта.Скопировать(Отбор); + Если ТолькоВыделенные И НЕ РасширенныйРежимФормы Тогда + ОбработчикиКУдалению = Новый Массив; + Для Каждого Обработчик Из Обработчики Цикл + Если ВыделенныеОбработчики.Найти(Обработчик.Ссылка) = Неопределено Тогда + ОбработчикиКУдалению.Добавить(Обработчик); + КонецЕсли; + КонецЦикла; + Для Каждого КУдалению Из ОбработчикиКУдалению Цикл + Обработчики.Удалить(КУдалению); + КонецЦикла; + КонецЕсли; + + РазметкаКода.ДобавитьОбластьОписания = Обработчики.Количество() > 1 ИЛИ НЕ РасширенныйРежимФормы; + РазметкаКода.ИмяПроцедуры = ИмяПроцедуры; + Если РазметкаКода.УстановитьТэги Тогда + РазметкаКода.ИмяКонфигурации = ВсеИменаКонфигураций[Библиотека]; + КонецЕсли; + + НовыйВызов = ВсеВызовыОписания.Добавить(); + ЗаполнитьЗначенияСвойств(НовыйВызов, Модуль); + НовыйВызов.ИмяБиблиотеки = Библиотека; + НовыйВызов.ИмяПроцедуры = ИмяПроцедуры; + + Если ТолькоИзмененные И Модуль.Изменен ИЛИ НЕ ТолькоИзмененные Тогда + ТекстОбработчиков = ТекстОбработчиков(Обработчики, РазметкаКода, Модуль.ВнешниеТэги); + Если РасширенныйРежимФормы Тогда + ПоместитьВПроцедуру(ИмяПроцедуры, ТекстОбработчиков, РазметкаКода); + КонецЕсли; + + КодМодуля = ОписаниеКодаМодуля(Модуль.МодульОбработчика, ТекстОбработчиков, Обработчики[0].Процедура); + КодМодуля.ЭтоПроцедураОписания = Истина; + КодМодуля.ПутьМодуля = "CommonModules\" + Модуль.МодульОбработчика + "\Module.bsl"; + КодМодуля.ЗаголовокПроцедуры = "Процедура " + ИмяПроцедуры + "(Обработчики) Экспорт"; + КодМодуля.Вставить("ИменаБиблиотек", ИменаБиблиотек); + Если СтрНайти(Модуль.МодульОбработчика, ".") > 0 Тогда + Имена = СтрРазделить(Модуль.МодульОбработчика, "."); + Имена[0] = АнглийскиеИмена[Имена[0]]; + КодМодуля.ПутьМодуля = СтрСоединить(Имена, "\") + "\ManagerModule.bsl"; + Если СтрНайти(КодМодуля.ПутьМодуля, "Constants") > 0 Тогда + КодМодуля.ПутьМодуля = СтрЗаменить(КодМодуля.ПутьМодуля, "\ManagerModule.", "\ValueManagerModule."); + КонецЕсли; + КонецЕсли; + ТекстыМодулейМенеджера.Добавить(КодМодуля); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + #КонецОбласти + + #Область СформироватьПроцедурыПриДобавленииОбработчиковОбновления + Если НЕ ТолькоВыделенные И ОбновитьСписокВызовов Тогда + ВсеВызовыОписания.Сортировать("ИмяБиблиотеки,МодульОбработчика"); + РазметкаКода.Вставить("ИмяПроцедуры", "ПриДобавленииОбработчиковОбновления"); + РазметкаКода.ЭтоПроцедураОписания = Ложь; + РазметкаКода.ЭтоМодульМенеджера = Ложь; + Для Каждого Библиотека Из ВсеИменаКонфигураций Цикл + + ИмяБиблиотеки = Библиотека.Ключ; + ИмяКонфигурации = ВсеИменаКонфигураций[ИмяБиблиотеки]; + ОписаниеКонфигурации = ОписаниеКонфигураций[ИмяКонфигурации]; + ИмяОсновногоСерверногоМодуля = ОписаниеКонфигурации["module"]; + + Если РазметкаКода.УстановитьТэги Тогда + РазметкаКода.Вставить("ИмяКонфигурации", ИмяКонфигурации); + РазметкаКода.Вставить("ИмяМодуля", ИмяОсновногоСерверногоМодуля); + РазметкаКода.Вставить("МодульЛокализации", ОписаниеКонфигурации["localization"] <> Неопределено); + Если РазметкаКода.МодульЛокализации Тогда + Если ОписаниеКонфигурации["outTags"].Количество() > 0 Тогда + РазметкаКода.Вставить("ТэгиЛокализации", ОписаниеКонфигурации["outTags"][0]); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Отбор = Новый Структура("ИмяБиблиотеки", ИмяБиблиотеки); + МодулиОбработчиков = ВсеВызовыОписания.Скопировать(Отбор); + + КодМодуля = ОписаниеКодаМодуля(ИмяОсновногоСерверногоМодуля); + КодМодуля.ТекстПроцедуры = ТекстПриДобавленииОбработчиковОбновления(МодулиОбработчиков, РазметкаКода); + КодМодуля.ПутьМодуля = "CommonModules\" + ИмяОсновногоСерверногоМодуля + "\Module.bsl"; + КодМодуля.ЗаголовокПроцедуры = "Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт"; + ТекстыМодулей.Добавить(КодМодуля); + + КонецЦикла; + КонецЕсли; + Для Каждого ТекстМодуляМенеджера Из ТекстыМодулейМенеджера Цикл + ТекстыМодулей.Добавить(ТекстМодуляМенеджера); + КонецЦикла; + #КонецОбласти + + Если ВерсияКонфигурации <> НоваяВерсияКонфигурации Тогда + УстановитьВерсиюМодуля(ТекстыМодулей, ВерсииМодулей); + КонецЕсли; + + Если НЕ РежимОтладкиОписанияОбработчиков Тогда + СброситьФлагИзменен(); + КонецЕсли; + + Если ТолькоВыделенные И НЕ РасширенныйРежимФормы Тогда + КодОбработчиков = ОписаниеКодаМодуля(НСтр("ru = 'Выделенные обработчики'")); + Для Каждого КодМодуля Из ТекстыМодулей Цикл + КодОбработчиков.ТекстПроцедуры = КодОбработчиков.ТекстПроцедуры + КодМодуля.ТекстПроцедуры + Символы.ПС + Символы.ПС; + КонецЦикла; + ТекстыМодулей = Новый Массив; + ТекстыМодулей.Добавить(КодОбработчиков); + КонецЕсли; + + Возврат ТекстыМодулей; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьОписание(ОписаниеКонфигураций, ИменаКонфигураций) + + ПодсистемыКонфигурации = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + Для Каждого Подсистема Из ПодсистемыКонфигурации.ПоИменам Цикл + Сведения = НовыеСведенияОБиблиотеке(); + ИмяМодуля = Подсистема.Значение.ОсновнойСерверныйМодуль; + КраткоеИмяБиблиотеки = СтрЗаменить(ИмяМодуля, "ОбновлениеИнформационнойБазы", ""); + ИменаКонфигураций.Добавить(КраткоеИмяБиблиотеки); + Описание = Новый Структура("module", Подсистема.Значение.ОсновнойСерверныйМодуль); + Описание.Вставить("name", Подсистема.Значение.Имя); + ОписаниеКонфигураций.Вставить(КраткоеИмяБиблиотеки, Описание); + КонецЦикла; + +КонецПроцедуры + +// Возвращает пустую структуру сведений о библиотеке +// +// Возвращаемое значение: +// Структура: +// * Имя - Строка - имя библиотеки. +// * Версия - Строка - версия в формате из 4-х цифр, например, "2.1.3.1". +// * ИдентификаторИнтернетПоддержки - Строка +// * РежимВыполненияОтложенныхОбработчиков - Строка - "Последовательно" - отложенные обработчики обновления выполняются +// последовательно в интервале от номера версии информационной базы до номера +// версии конфигурации включительно или "Параллельно" - отложенный обработчик после +// обработки первой порции данных передает управление следующему обработчику, а после +// выполнения последнего обработчика цикл повторяется заново. +// * ПараллельноеОтложенноеОбновлениеСВерсии - Строка - номер версии в формате из 4-х цифр с которой применяется +// параллельное отложенное обновление. +// * ТребуемыеПодсистемы - Массив - имена других библиотек (Строка), от которых зависит данная библиотека. +// Обработчики обновления таких библиотек должны быть вызваны ранее +// обработчиков обновления данной библиотеки. +// При циклических зависимостях или, напротив, отсутствии каких-либо зависимостей, +// порядок вызова обработчиков обновления определяется порядком добавления модулей +// в процедуре ПриДобавленииПодсистем общего модуля +// ПодсистемыКонфигурацииПереопределяемый. +// +&НаСервере +Функция НовыеСведенияОБиблиотеке() + + Сведения = Новый Структура; + Сведения.Вставить("Имя", ""); + Сведения.Вставить("Версия", ""); + Сведения.Вставить("ИдентификаторИнтернетПоддержки", ""); + Сведения.Вставить("РежимВыполненияОтложенныхОбработчиков", ""); + Сведения.Вставить("ПараллельноеОтложенноеОбновлениеСВерсии", ""); + Сведения.Вставить("ТребуемыеПодсистемы", Новый Массив); + + Возврат Сведения; + +КонецФункции + +&НаСервере +Процедура ДобавитьВерсиюМодуля(ВерсииМодулей, ОбработчикиМодуля) + + Если ОбработчикиМодуля.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Обработка = ОбъектОбработки(); + ОбработчикиМодуля.Сортировать("РедакцияЧислом УБЫВ"); + + Максимум = ОбработчикиМодуля[0]; + ЭтоРазрабатываемаяБиблиотека = РазрабатываемыеПодсистемы.Найти(Максимум.Подсистема) <> Неопределено; + + Если ЭтоРазрабатываемаяБиблиотека Тогда + Описание = ВерсииМодулей.Добавить(); + Описание.ИмяМодуля = Максимум.ИмяОсновногоСерверногоМодуля; + Описание.Версия = Максимум.Версия; + КонецЕсли; + + // Проверим максимальный номер сборки из обработчиков модуля + НомераМаксимум = СтрРазделить(Максимум.Версия, "."); + ПерваяЦифраМаксимум = НомераМаксимум[0]; + НомераМаксимум.Удалить(0); + Максимум3Последних = Обработка.ВерсияЧислом(НомераМаксимум); + + НомераКонфигурации = СтрРазделить(НоваяВерсияКонфигурации, "."); + ПерваяЦифраКонфигурации = НомераКонфигурации[0]; + НомераКонфигурации.Удалить(0); + Конфигурация3Последних = Обработка.ВерсияЧислом(НомераКонфигурации); + Если ЭтоРазрабатываемаяБиблиотека + И Число(ПерваяЦифраМаксимум) >= Число(ПерваяЦифраКонфигурации) + И Максимум3Последних > Конфигурация3Последних Тогда + НоваяВерсияКонфигурации = ПерваяЦифраКонфигурации + "." + СтрСоединить(НомераМаксимум, "."); + КонецЕсли; + + // Проверим номер сборки заданный пользователем + НомераКонфигурации = СтрРазделить(НоваяВерсияКонфигурации, "."); + Если ЭтоРазрабатываемаяБиблиотека + И НовыйНомерСборкиКонфигурации > Число(НомераКонфигурации[3]) Тогда + НомераКонфигурации[3] = Формат(НовыйНомерСборкиКонфигурации, "ЧН=0; ЧГ=0"); + НоваяВерсияКонфигурации = СтрСоединить(НомераКонфигурации, "."); + НомераМаксимум[3] = НомераКонфигурации[3]; + КонецЕсли; + + НомераМаксимум.Вставить(0,0); + + Если ЭтоРазрабатываемаяБиблиотека Тогда + Описание.ВерсияРедакции = СтрСоединить(НомераМаксимум, "."); + Описание.РедакцияЧислом = Обработка.ВерсияЧислом(Описание.ВерсияРедакции); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВерсиюМодуля(ТекстыМодулей, Модули) + + Если Модули.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Модули.Сортировать("РедакцияЧислом УБЫВ"); + Максимум = Модули[0]; + Для Каждого Описание Из ТекстыМодулей Цикл + + Модуль = Модули.Найти(Описание.ИмяМодуля, "ИмяМодуля"); + Если Модуль = Неопределено Тогда + Продолжить; + КонецЕсли; + + НомераВерсии = СтрРазделить(Модуль.Версия, "."); + НовыеНомера = СтрРазделить(Максимум.ВерсияРедакции, "."); + НовыеНомера[0] = НомераВерсии[0]; + Описание.Версия = СтрСоединить(НовыеНомера, "."); + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ОписаниеКодаМодуля(ИмяМодуля = "", ТекстПроцедуры = "", ПроцедураОбработки = "") + + Описание = Новый Структура; + Описание.Вставить("ИмяМодуля", ИмяМодуля); + Описание.Вставить("ЗаголовокПроцедуры", ""); + Описание.Вставить("ТекстПроцедуры", ТекстПроцедуры); + Описание.Вставить("ПроцедураОбработки", ПроцедураОбработки); + Описание.Вставить("ПутьМодуля", ""); + Описание.Вставить("Версия", ""); + Описание.Вставить("ЭтоПроцедураОписания", Ложь); + Описание.Вставить("ПроцедураВерсии", "Процедура ПриДобавленииПодсистемы(Описание) Экспорт"); + Возврат Описание; + +КонецФункции + +&НаСервере +Функция ОписаниеВерсийМодулей() + + Описание = Новый ТаблицаЗначений; + Описание.Колонки.Добавить("ИмяМодуля", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150))); + Описание.Колонки.Добавить("Версия", , Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(30))); + Описание.Колонки.Добавить("ВерсияРедакции", , Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(30))); + Описание.Колонки.Добавить("РедакцияЧислом", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 0))); + Возврат Описание; + +КонецФункции + +&НаСервере +Функция МодулиОбработчиковОбновления(Обработчики, РазметкаКода, ВыделенныеОбработчики = Неопределено) + + ТипСтрока150 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)); + Обработчики.Колонки.Добавить("МодульОбработчика", ТипСтрока150); + Обработчики.Колонки.Добавить("ТэгиМодуляОбновления", ТипСтрока150); + Обработчики.Колонки.Добавить("ВнешниеТэги", ТипСтрока150); + + ТэгиМодуля = ""; + Если РазметкаКода.УстановитьТэги Тогда + ОписаниеТэгов = РазметкаКода.Тэги.ПоОбъектам.Найти("ОбщийМодуль."+РазметкаКода.ИмяМодуля, "Имя"); + Если ОписаниеТэгов <> Неопределено Тогда + ТэгиМодуля = ОписаниеТэгов.Тэги; + КонецЕсли; + КонецЕсли; + ВыводитьТолькоВыделенные = ВыделенныеОбработчики <> Неопределено И ВыделенныеОбработчики.Количество() > 0; + ВыделенныеОбработчикиМодуля = Новый Массив; + Для Каждого Обработчик Из Обработчики Цикл + + ЧастиИмени = СтрРазделить(Обработчик.Процедура, "."); + ЧастиИмени.Удалить(ЧастиИмени.ВГраница()); + Обработчик.МодульОбработчика = СтрСоединить(ЧастиИмени, "."); + Обработчик.ИмяОбъекта = Обработчик.МодульОбработчика; + Если ЧастиИмени.Количество() = 1 Тогда + ЧастиИмени.Вставить(0, "ОбщийМодуль"); + Иначе + ЧастиИмени[0] = ЕдинственноеЧисло[ЧастиИмени[0]]; + КонецЕсли; + Обработчик.ИмяОбъекта = СтрСоединить(ЧастиИмени, "."); + Обработчик.ТэгиМодуляОбновления = ТэгиМодуля; + Если РазметкаКода.УстановитьТэги И РазметкаКода.МодульЛокализации Тогда + Обработчик.ТэгиМодуляОбновления = РазметкаКода.ТэгиЛокализации; + КонецЕсли; + + Если ВыводитьТолькоВыделенные Тогда + ОбработчикВыделен = ВыделенныеОбработчики.Найти(Обработчик.Ссылка) <> Неопределено; + КонецЕсли; + + Если ВыводитьТолькоВыделенные И ОбработчикВыделен Тогда + ВыделенныеОбработчикиМодуля.Добавить(Обработчик.ИмяОбъекта); + КонецЕсли; + + КонецЦикла; + МодулиОбработчиков = Обработчики.Скопировать(); + МодулиОбработчиков.Свернуть("МодульОбработчика,ИмяОбъекта,ВнешниеТэги", "Изменен"); + МодулиОбработчиков.Сортировать("МодульОбработчика"); + + Если ВыводитьТолькоВыделенные Тогда + Выделенные = МодулиОбработчиков.СкопироватьКолонки(); + Для Каждого Выделенный Из ВыделенныеОбработчикиМодуля Цикл + НайденныеСтроки = МодулиОбработчиков.НайтиСтроки(Новый Структура("ИмяОбъекта", Выделенный)); + Для Каждого Найденный Из НайденныеСтроки Цикл + ЗаполнитьЗначенияСвойств(Выделенные.Добавить(), Найденный); + КонецЦикла; + КонецЦикла; + Возврат Выделенные; + КонецЕсли; + + Возврат МодулиОбработчиков; + +КонецФункции + +&НаСервере +Функция ВыделенныеОбработчики() + + Результат = Новый Массив; + Для Каждого ИдСтроки Из Элементы.ОбработчикиОбновления.ВыделенныеСтроки Цикл + Обработчик = Объект.ОбработчикиОбновления.НайтиПоИдентификатору(ИдСтроки); + Результат.Добавить(Обработчик.Ссылка); + КонецЦикла; + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура СброситьФлагИзменен() + + Отбор = Новый Структура("Изменен", Истина); + Найденные = Объект.ОбработчикиОбновления.НайтиСтроки(Отбор); + Для Каждого Обработчик Из Найденные Цикл + Обработчик.Изменен = Ложь; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ФормированиеКодаПроцедур + +&НаСервере +Функция ТекстОбработчиков(Обработчики, РазметкаКода, ВнешниеТэги = Неопределено) + + ТипСтрока100 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(0)); + Обработчики.Колонки.Добавить("Тэги", ТипСтрока100); + Если РазметкаКода.УстановитьТэги Тогда + Если РазметкаКода.МодульЛокализации И ВнешниеТэги = Неопределено Тогда + ЗаполнитьТэгиОбъектов("ИмяОбъекта", Обработчики, РазметкаКода, РазметкаКода.ТэгиЛокализации, Ложь); + КонецЕсли; + Если ВнешниеТэги <> Неопределено Тогда + Для Каждого Обработчик Из Обработчики Цикл + Если СтрНайти(ВнешниеТэги, Обработчик.ТэгиМодуляОбновления) = 0 Тогда + Обработчик.Тэги = Обработчик.Тэги + ?(ПустаяСтрока(Обработчик.Тэги),"",",") + Обработчик.ТэгиМодуляОбновления; + КонецЕсли; + Обработчик.ТэгиМодуляОбновления = ВнешниеТэги; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + ДеревоТэгов = СвернутьПоТегам(Обработчики, РазметкаКода); + СтрокиГруппОбработчиков = Новый Массив; + Для Каждого Ветка Из ДеревоТэгов.Строки Цикл + ТекстГруппыОбработчиков = ТекстГруппыОбработчиковРекурсивно(Ветка, РазметкаКода, СтрокиГруппОбработчиков.Количество() = 0); + СтрокиГруппОбработчиков.Добавить(ТекстГруппыОбработчиков); + КонецЦикла; + ТекстОбработчиков = СтрСоединить(СтрокиГруппОбработчиков, Символы.ПС); + + Возврат ТекстОбработчиков; + +КонецФункции + +// Параметры: +// Ветка - СтрокаДереваЗначений +// РазметкаКода - Структура: +// * Тэги - см. ПолучитьСведенияОТегахВырезки +// * ДобавитьОбластьОписания - Булево +// * ЭтоМодульМенеджера - Булево +// * ТэгиЛокализации - Строка +// * ИмяПроцедуры - Строка +// ПервыйВГруппе - Булево +// Возвращаемое значение: +// Строка +// +&НаСервере +Функция ТекстГруппыОбработчиковРекурсивно(Ветка, РазметкаКода, ПервыйВГруппе = Истина) + + СтрокиОбработчиков = Новый Массив; + Для Каждого Обработчик Из Ветка.Строки Цикл + Если Обработчик.Строки.Количество() > 0 Тогда + ТекстГруппыОбработчиков = ТекстГруппыОбработчиковРекурсивно(Обработчик, РазметкаКода, СтрокиОбработчиков.Количество() = 0); + СтрокиОбработчиков.Добавить(ТекстГруппыОбработчиков); + Продолжить; + КонецЕсли; + ВнешниеТэги = ""; + Если РазметкаКода.УстановитьТэги Тогда + ВнешниеТэги = Обработчик.Тэги + ?(ПустаяСтрока(Обработчик.Тэги),"",",") + Обработчик.ТэгиМодуляОбновления; + РазметкаКода.ИмяМодуля = Обработчик.ИмяОсновногоСерверногоМодуля; + КонецЕсли; + ТекстОбработчика = ТекстОписанияОбработчика(Обработчик, РазметкаКода, ВнешниеТэги); + Если СтрокиОбработчиков.Количество() > 0 Тогда + ТекстОбработчика = Символы.ПС + ТекстОбработчика; + КонецЕсли; + СтрокиОбработчиков.Добавить(ТекстОбработчика); + КонецЦикла; + + ТекстОбработчиков = СтрСоединить(СтрокиОбработчиков, Символы.ПС); + Если РазметкаКода.УстановитьТэги + И НЕ ПустаяСтрока(Ветка.Тэги) И НЕ РазметкаКода.ЭтоПроцедураОписания Тогда + Шаблон = "%1" + Символы.ПС + "%2" + Символы.ПС + "%3"; + Если НЕ ПервыйВГруппе Тогда + Шаблон = "%1" + Символы.ПС + Символы.ПС + "%2" + Символы.ПС + "%3"; + КонецЕсли; + Для Каждого Тэг Из СтрРазделить(Ветка.Тэги, ",") Цикл + ОписаниеТэга = РазметкаКода.Тэги.Описание[Тэг]; // см. ОписаниеТэга + ТекстОбработчиков = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ОписаниеТэга.Начало, ТекстОбработчиков, ОписаниеТэга.Конец); + КонецЦикла; + + ИначеЕсли НЕ ПервыйВГруппе Тогда + ТекстОбработчиков = Символы.ПС + ТекстОбработчиков; + + КонецЕсли; + + Возврат ТекстОбработчиков; + +КонецФункции + +&НаСервере +Функция ТекстПриДобавленииОбработчиковОбновления(МодулиОбработчиков, РазметкаКода) + + МодулиОбработчиков.Колонки.Добавить("Тэги", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100))); + Если РазметкаКода.УстановитьТэги Тогда + Если РазметкаКода.МодульЛокализации Тогда + ЗаполнитьТэгиОбъектов("ИмяОбъекта", МодулиОбработчиков, РазметкаКода, РазметкаКода.ТэгиЛокализации, Ложь); + ИначеЕсли РазметкаКода.Свойство("ТэгиЛокализации") И НЕ ПустаяСтрока(РазметкаКода.ТэгиЛокализации) Тогда + Для Каждого Модуль Из МодулиОбработчиков Цикл + Если СтрНайти(Модуль.ВнешниеТэги, РазметкаКода.ТэгиЛокализации) > 0 Тогда + Модуль.Тэги = РазметкаКода.ТэгиЛокализации; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + ДеревоТэгов = СвернутьПоТегам(МодулиОбработчиков, РазметкаКода); + СтрокиГруппВызовов = Новый Массив; + Для Каждого Ветка Из ДеревоТэгов.Строки Цикл + ТекстГруппыВызовов = ТекстГруппыВызововРекурсивно(Ветка, РазметкаКода); + СтрокиГруппВызовов.Добавить(ТекстГруппыВызовов); + КонецЦикла; + ТекстПроцедуры = СтрСоединить(СтрокиГруппВызовов, Символы.ПС); + + ПоместитьВПроцедуру("ПриДобавленииОбработчиковОбновления", ТекстПроцедуры, РазметкаКода); + + Возврат ТекстПроцедуры; + +КонецФункции + +// Параметры: +// Ветка - СтрокаДереваЗначений +// РазметкаКода - Структура: +// * Тэги - см. ПолучитьСведенияОТегахВырезки +// * ДобавитьОбластьОписания - Булево +// * ЭтоМодульМенеджера - Булево +// * ТэгиЛокализации - Строка +// * ИмяПроцедуры - Строка +// Возвращаемое значение: +// Строка +// +&НаСервере +Функция ТекстГруппыВызововРекурсивно(Ветка, РазметкаКода) + + СтрокиВызовов = Новый Массив; + Для Каждого МодульОбработчика Из Ветка.Строки Цикл + Если МодульОбработчика.Строки.Количество() > 0 Тогда + ТекстГруппыОбработчиков = ТекстГруппыВызововРекурсивно(МодульОбработчика, РазметкаКода); + СтрокиВызовов.Добавить(ТекстГруппыОбработчиков); + Продолжить; + КонецЕсли; + + ИмяПроцедуры = МодульОбработчика.ИмяПроцедуры + "(Обработчики)"; + ТекстВызова = Символы.Таб + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1.%2;", МодульОбработчика.МодульОбработчика, ИмяПроцедуры); + СтрокиВызовов.Добавить(ТекстВызова); + КонецЦикла; + + ТекстОбработчиков = СтрСоединить(СтрокиВызовов, Символы.ПС); + Если НЕ ПустаяСтрока(Ветка.Тэги) Тогда + Шаблон = "%1" + Символы.ПС + "%2" + Символы.ПС + "%3"; + Для Каждого Тэг Из СтрРазделить(МодульОбработчика.Тэги, ",") Цикл + ОписаниеТэга = РазметкаКода.Тэги.Описание[Тэг]; // см. ОписаниеТэга + ТекстОбработчиков = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ОписаниеТэга.Начало, ТекстОбработчиков, ОписаниеТэга.Конец); + КонецЦикла; + КонецЕсли; + + Возврат ТекстОбработчиков; + +КонецФункции + +// Параметры: +// Обработчик - СтрокаДереваЗначений: +// * Идентификатор - УникальныйИдентификатор +// РазметкаКода - Структура: +// * Тэги - см. ПолучитьСведенияОТегахВырезки +// * ИмяПроцедуры - Строка +// * ДобавитьОбластьОписания - Булево +// * ЭтоМодульМенеджера - Булево +// * ТэгиЛокализации - Строка +// ТэгиОбработчика - Строка +// Возвращаемое значение: +// Строка +// +&НаСервере +Функция ТекстОписанияОбработчика(Обработчик, РазметкаКода, ТэгиОбработчика) + + СтрокиОбработчика = Новый Массив; + СтрокиОбработчика.Добавить(" Обработчик = Обработчики.Добавить();"); + СтрокиОбработчика.Добавить("Обработчик.Процедура = """ + Обработчик.Процедура + """;"); + СтрокиОбработчика.Добавить("Обработчик.Версия = """ + Обработчик.Версия + """;"); + СтрокиОбработчика.Добавить("Обработчик.РежимВыполнения = """ + Строка(Обработчик.РежимВыполнения) + """;"); + + Если Обработчик.НачальноеЗаполнение Тогда + СтрокиОбработчика.Добавить("Обработчик.НачальноеЗаполнение = Истина;"); + КонецЕсли; + + Если НЕ ПустаяСтрока(Обработчик.Идентификатор) Тогда + ИД = Новый УникальныйИдентификатор(Обработчик.Идентификатор); + Если ЗначениеЗаполнено(ИД) Тогда + СтрокиОбработчика.Добавить("Обработчик.Идентификатор = Новый УникальныйИдентификатор(""" + Обработчик.Идентификатор + """);"); + КонецЕсли; + КонецЕсли; + + Если Обработчик.ОбщиеДанные Тогда + СтрокиОбработчика.Добавить("Обработчик.ОбщиеДанные = Истина;"); + КонецЕсли; + + Если Обработчик.УправлениеОбработчиками Тогда + СтрокиОбработчика.Добавить("Обработчик.УправлениеОбработчиками = Истина;"); + КонецЕсли; + + Если Обработчик.Многопоточный Тогда + СтрокиОбработчика.Добавить("Обработчик.Многопоточный = Истина;"); + КонецЕсли; + + ОтложенныйРежимВыполнения = Обработчик.РежимВыполнения = "Отложенно"; + Если ОтложенныйРежимВыполнения Тогда + СтрокиОбработчика.Добавить("Обработчик.ПроцедураЗаполненияДанныхОбновления = """ + Обработчик.ПроцедураЗаполненияДанныхОбновления + """;"); + СтрокиОбработчика.Добавить("Обработчик.ПроцедураПроверки = """ + Обработчик.ПроцедураПроверки + """;"); + КонецЕсли; + + Если Обработчик.ЗапускатьТолькоВГлавномУзле Тогда + СтрокиОбработчика.Добавить("Обработчик.ЗапускатьТолькоВГлавномУзле = Истина;"); + КонецЕсли; + + Если Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами Тогда + СтрокиОбработчика.Добавить("Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина;"); + КонецЕсли; + + Если ПустаяСтрока(Обработчик.Комментарий)Тогда + СтрокиОбработчика.Добавить("Обработчик.Комментарий = """";"); + Иначе + ТекстКомментария = СокрЛП(Обработчик.Комментарий); + ТекстКомментария = СтрЗаменить(ТекстКомментария, Символы.ПС, Символы.ПС + " |"); + ТекстКомментария = СтрЗаменить(ТекстКомментария, """", """"""); + СтрокиОбработчика.Добавить("Обработчик.Комментарий = НСтр(""ru = '" + ТекстКомментария +"'"");"); + КонецЕсли; + + ТекстЧитаемыеОбъекты = ТекстИнформацииОбОбъектах(Обработчик, "ЧитаемыеОбъекты", РазметкаКода, ТэгиОбработчика); + Если НЕ ПустаяСтрока(ТекстЧитаемыеОбъекты) Тогда + СтрокиОбработчика.Добавить(ТекстЧитаемыеОбъекты); + КонецЕсли; + + ТекстИзменяемыеОбъекты = ТекстИнформацииОбОбъектах(Обработчик, "ИзменяемыеОбъекты", РазметкаКода, ТэгиОбработчика); + Если НЕ ПустаяСтрока(ТекстИзменяемыеОбъекты) Тогда + СтрокиОбработчика.Добавить(ТекстИзменяемыеОбъекты); + КонецЕсли; + + Если ОтложенныйРежимВыполнения Тогда + ТекстБлокируемыеОбъекты = ТекстИнформацииОбОбъектах(Обработчик, "БлокируемыеОбъекты", РазметкаКода, ТэгиОбработчика); + Если НЕ ПустаяСтрока(ТекстБлокируемыеОбъекты) Тогда + СтрокиОбработчика.Добавить(ТекстБлокируемыеОбъекты); + КонецЕсли; + КонецЕсли; + + Если ОтложенныйРежимВыполнения Тогда + ТекстПриоритетыВыполнения = ТекстПриоритетовВыполнения(Обработчик, РазметкаКода, ТэгиОбработчика); + Если НЕ ПустаяСтрока(ТекстПриоритетыВыполнения) Тогда + СтрокиОбработчика.Добавить(ТекстПриоритетыВыполнения); + КонецЕсли; + КонецЕсли; + ТекстОбработчика = СтрСоединить(СтрокиОбработчика, Символы.ПС + Символы.Таб); + + ШаблонОбласти = + "#Область %1 + | + |%2 + | + |#КонецОбласти"; + ИмяОбласти = СтрЗаменить(Обработчик.Процедура, ".", "_"); + Если РазметкаКода.ЭтоПроцедураОписания И РасширенныйРежимФормы Тогда + Имена = СтрРазделить(Обработчик.Процедура, "."); + ИмяОбласти = Имена[Имена.ВГраница()]; + КонецЕсли; + Результат = ТекстОбработчика; + Если РазметкаКода.ДобавитьОбластьОписания Тогда + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОбласти, ИмяОбласти, ТекстОбработчика); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Параметры: +// Обработчик - СтрокаДереваЗначений: +// * Ссылка - Строка +// * Идентификатор - УникальныйИдентификатор +// РазметкаКода - Структура: +// * ДобавитьОбластьОписания - Булево +// * ЭтоМодульМенеджера - Булево +// * ТэгиЛокализации - Строка +// * ИмяПроцедуры - Строка +// ТэгиОбработчика - Строка +// Возвращаемое значение: +// Строка +// +&НаСервере +Функция ТекстПриоритетовВыполнения(Обработчик, РазметкаКода, ТэгиОбработчика) + + Отбор = Новый Структура("Ссылка", Обработчик.Ссылка); + ПриоритетыВыполнения = Объект.ПриоритетыВыполнения.Выгрузить(Отбор); + Отбор = Новый Структура("ОбработчикЧитательИлиПисатель2", Обработчик.Ссылка); + Конфликты = Объект.КонфликтыОбработчиков.Выгрузить(Отбор); + ПриоритетыКонфликтовЧитаемыхИлиДвойнойЗаписи(ПриоритетыВыполнения, Конфликты); + + ТекстПриоритетов = ""; + Если ПриоритетыВыполнения.Количество() = 0 Тогда + Возврат ТекстПриоритетов; + КонецЕсли; + + ТекстПриоритетов = ТекстПриоритетов + " + | Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); + | + |"; + + ПриоритетыВыполнения.Колонки.Добавить("Тэги", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100))); + Если РазметкаКода.УстановитьТэги Тогда + ЗаполнитьТэгиОбъектов("Процедура2", ПриоритетыВыполнения, РазметкаКода, ТэгиОбработчика); + КонецЕсли; + тз = ПриоритетыВыполнения.Скопировать(,"Тэги"); + тз.Свернуть("Тэги"); + тз.Сортировать("Тэги"); + ТэгиВсехОбъектов = тз.ВыгрузитьКолонку("Тэги"); + + ОписанияВсехТэгов = Новый Соответствие; + ШаблонПриоритета = + " НоваяСтрока = Обработчик.ПриоритетыВыполнения.Добавить(); + | НоваяСтрока.Процедура = ""%1""; + | НоваяСтрока.Порядок = ""%2"";"; + ТекстыТэгов = Новый Массив; + Для Каждого Тэги Из ТэгиВсехОбъектов Цикл + Отбор = Новый Структура("Тэги", Тэги); + ПриоритетыТэга = ПриоритетыВыполнения.НайтиСтроки(Отбор); + СтрокиТэга = Новый Массив; + Для Каждого Приоритет Из ПриоритетыТэга Цикл + СтрокаПриоритета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПриоритета,Приоритет.Процедура2,Приоритет.Порядок); + СтрокиТэга.Добавить(СтрокаПриоритета); + КонецЦикла; + + ТекстТэга = СтрСоединить(СтрокиТэга, Символы.ПС + Символы.ПС); + Если НЕ ПустаяСтрока(Тэги) Тогда + Для Каждого Тэг Из СтрРазделить(Тэги, ",") Цикл + Шаблон = " %1 + | %2 + | %3"; + ОписаниеТэга = РазметкаКода.Тэги.Описание[Тэг]; // см. ОписаниеТэга + ТекстТэга = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ОписаниеТэга.Начало, ТекстТэга, ОписаниеТэга.Конец); + ОписанияВсехТэгов.Вставить(Тэг, ОписаниеТэга); + КонецЦикла; + ТекстТэга = СтрЗаменить(ТекстТэга, " ", " "); + КонецЕсли; + ТекстыТэгов.Добавить(ТекстТэга); + КонецЦикла; + ТекстТэгов = СтрСоединить(ТекстыТэгов, Символы.ПС); + + Шаблон = " %1 + | %2 + |"; + Для Каждого ОписаниеТэга Из ОписанияВсехТэгов Цикл + КонецНачало = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ОписаниеТэга.Значение.Конец, ОписаниеТэга.Значение.Начало); + ТекстТэгов = СтрЗаменить(ТекстТэгов, КонецНачало, ""); + КонецЦикла; + ТекстПриоритетов = ТекстПриоритетов + ТекстТэгов; + + Возврат ТекстПриоритетов; + +КонецФункции + +// Параметры: +// Обработчик - СтрокаДереваЗначений: +// * Ссылка - Строка +// * Идентификатор - УникальныйИдентификатор +// ИмяНабораОбъектов - Строка +// РазметкаКода - Структура: +// * ДобавитьОбластьОписания - Булево +// * ЭтоМодульМенеджера - Булево +// * ТэгиЛокализации - Строка +// * ИмяПроцедуры - Строка +// ТэгиОбработчика - Строка +// Возвращаемое значение: +// Строка +// +&НаСервере +Функция ТекстИнформацииОбОбъектах(Обработчик, ИмяНабораОбъектов, РазметкаКода, ТэгиОбработчика) + + Отбор = Новый Структура("Ссылка", Обработчик.Ссылка); + ОбъектыОбработчика = Объект[ИмяНабораОбъектов].Выгрузить(Отбор); + Если ИмяНабораОбъектов = "БлокируемыеОбъекты" Тогда + Отбор.Вставить("БлокироватьИнтерфейс", Истина); + ИзменяемыеОбъекты = Объект["ИзменяемыеОбъекты"].Выгрузить(Отбор); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ИзменяемыеОбъекты, ОбъектыОбработчика); + ОбъектыОбработчика.Свернуть("ОбъектМетаданных"); + ОбъектыОбработчика.Сортировать("ОбъектМетаданных"); + КонецЕсли; + Если ОбъектыОбработчика.Количество() = 0 Тогда + Возврат ""; + КонецЕсли; + Если РазметкаКода.УстановитьТэги Тогда + ЗаполнитьТэгиОбъектов("ОбъектМетаданных", ОбъектыОбработчика, РазметкаКода, ТэгиОбработчика); + КонецЕсли; + + ИмяНабора = СтрЗаменить(ИмяНабораОбъектов, "Объекты", ""); + ДеревоТэгов = СвернутьПоТегам(ОбъектыОбработчика, РазметкаКода); + СтрокиГруппОбъектов = Новый Массив; + Для Каждого Ветка Из ДеревоТэгов.Строки Цикл + ТекстГруппыОбъектов = ТекстГруппыОбъектовРекурсивно(Ветка, РазметкаКода, ИмяНабора); + СтрокиГруппОбъектов.Добавить(ТекстГруппыОбъектов); + КонецЦикла; + ТекстОбъектов = СтрСоединить(СтрокиГруппОбъектов, Символы.ПС); + Шаблон = " + | %1 = Новый Массив; + |%2 + | Обработчик.%3 = СтрСоединить(%1, "","");"; + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяНабора, ТекстОбъектов, ИмяНабораОбъектов); + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ТекстГруппыОбъектовРекурсивно(Ветка, РазметкаКода, ИмяНабораОбъектов) + + СтрокиОбъектов = Новый Массив; + Для Каждого ОбъектМетаданных Из Ветка.Строки Цикл + Если ОбъектМетаданных.Строки.Количество() > 0 Тогда + ТекстГруппыОбъектов = ТекстГруппыОбъектовРекурсивно(ОбъектМетаданных, РазметкаКода, ИмяНабораОбъектов); + СтрокиОбъектов.Добавить(ТекстГруппыОбъектов); + Продолжить; + КонецЕсли; + ТекстОбъекта = Символы.Таб + ИмяНабораОбъектов + ".Добавить(" + ПолныйПутьМетаданныхОбъекта(ОбъектМетаданных.ОбъектМетаданных) + ");"; + СтрокиОбъектов.Добавить(ТекстОбъекта); + КонецЦикла; + + ТекстОбъектов = СтрСоединить(СтрокиОбъектов, Символы.ПС); + Если НЕ ПустаяСтрока(Ветка.Тэги) Тогда + Шаблон = " %1" + Символы.ПС + "%2" + Символы.ПС + " %3"; + Для Каждого Тэг Из СтрРазделить(Ветка.Тэги, ",") Цикл + ОписаниеТэга = РазметкаКода.Тэги.Описание[Тэг]; // см. ОписаниеТэга + ТекстОбъектов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ОписаниеТэга.Начало, ТекстОбъектов, ОписаниеТэга.Конец); + КонецЦикла; + КонецЕсли; + + Возврат ТекстОбъектов; + +КонецФункции + +&НаСервере +Функция ПолныйПутьМетаданныхОбъекта(ИмяОбъекта) + + ЧастиИмени = СтрРазделить(ИмяОбъекта, "."); + ЧастиИмени[0] = МножественноеЧисло[ЧастиИмени[0]]; + ЧастиИмени.Вставить(0, "Метаданные"); + ЧастиИмени.Добавить("ПолноеИмя()"); + Возврат СтрСоединить(ЧастиИмени,"."); + +КонецФункции + +&НаСервере +Функция ЗаполнитьТэгиОбъектов(РеквизитИмяОбъекта, ОбъектыОбработчика, РазметкаКода, ВнешниеТэги = Неопределено, СортироватьПоТэгам = Истина) + + ЭтоИмяПроцедуры = РеквизитИмяОбъекта = "Процедура" ИЛИ РеквизитИмяОбъекта = "Процедура2"; + ТэгиМодуля = РазметкаКода.Тэги.ПоМодулям[РазметкаКода.ИмяМодуля]; + Если ОбъектыОбработчика.Колонки.Найти("Тэги") = Неопределено Тогда + ОбъектыОбработчика.Колонки.Добавить("Тэги", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100))); + КонецЕсли; + ЕстьТэгиМодуляОбновления = ОбъектыОбработчика.Колонки.Найти("ТэгиМодуляОбновления") <> Неопределено; + Если ТэгиМодуля = Неопределено Тогда + Возврат ОбъектыОбработчика; + КонецЕсли; + ЛишниеТэги = Новый Массив; + ЛишниеТэги = ЛишниеТэгиВОбласти(ВнешниеТэги, РазметкаКода); + Для Каждого ИспользуемыйОбъект Из ОбъектыОбработчика Цикл + Тэги = Новый Массив; + Если ЭтоИмяПроцедуры Тогда + ИмяПроцедуры = ИспользуемыйОбъект[РеквизитИмяОбъекта]; + ОписаниеТэгов = РазметкаКода.Тэги.ПоОбработчикам.Найти(ИмяПроцедуры, "Процедура"); + Если ОписаниеТэгов <> Неопределено Тогда + Тэги = СтрРазделить(ОписаниеТэгов.ТэгиМодуляОбновления,",", Ложь); + КонецЕсли; + ИмяОбъекта = ИмяОбъектаИзПроцедурыОбработки(ИспользуемыйОбъект[РеквизитИмяОбъекта]); + Иначе + ИмяОбъекта = ИспользуемыйОбъект[РеквизитИмяОбъекта]; + КонецЕсли; + ОписаниеТэгов = РазметкаКода.Тэги.ПоОбъектам.Найти(ИмяОбъекта, "Имя"); + Если ОписаниеТэгов <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Тэги, СтрРазделить(ОписаниеТэгов.Тэги,",", Ложь), Истина); + КонецЕсли; + Если Тэги.Количество() > 0 Тогда + ТэгиОбъекта = Новый Массив; + Для Каждого Тэг Из Тэги Цикл + ЛишнийТэг = ЛишниеТэги.Найти(Тэг) <> Неопределено; + Если НЕ ЛишнийТэг Тогда + ТэгиОбъекта.Добавить(Тэг); + КонецЕсли; + КонецЦикла; + ИспользуемыйОбъект.Тэги = СтрСоединить(ТэгиОбъекта, ","); + Если ЕстьТэгиМодуляОбновления Тогда + ВнешниеТэги = ИспользуемыйОбъект.Тэги + ?(ПустаяСтрока(ИспользуемыйОбъект.Тэги),"",",") + ИспользуемыйОбъект.ТэгиМодуляОбновления; + ИспользуемыйОбъект.ТэгиМодуляОбновления = ВнешниеТэги; + КонецЕсли; + КонецЕсли;// найдены тэги объекта + КонецЦикла; + ПоляСортировки = РеквизитИмяОбъекта; + Если СортироватьПоТэгам Тогда + ПоляСортировки = "Тэги," + РеквизитИмяОбъекта; + КонецЕсли; + ОбъектыОбработчика.Сортировать(ПоляСортировки); + + Возврат ОбъектыОбработчика; + +КонецФункции + +&НаСервере +Функция ЗаполнитьТэгиМодулейПоПодсистемам(МодулиМенеджеров, РазметкаКода) + + РеквизитИмяОбъекта = "ИмяОбъекта"; + Если МодулиМенеджеров.Колонки.Найти("ВнешниеТэги") = Неопределено Тогда + МодулиМенеджеров.Колонки.Добавить("ВнешниеТэги", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100))); + КонецЕсли; + ВнешниеТэги = Новый Массив; + ВнешниеТэги = ЛишниеТэгиВОбласти("", РазметкаКода); + Для Каждого МодульОбъекта Из МодулиМенеджеров Цикл + ИмяОбъекта = МодульОбъекта[РеквизитИмяОбъекта]; + ОписаниеТэгов = РазметкаКода.Тэги.ПоОбъектам.Найти(ИмяОбъекта, "Имя"); + Если ОписаниеТэгов <> Неопределено Тогда + ТэгиМодуля = ОбщегоНазначения.СкопироватьРекурсивно(ВнешниеТэги); // Массив - + Для Каждого Тэг Из СтрРазделить(ОписаниеТэгов.Тэги,",") Цикл + ВнешнийТэг = ВнешниеТэги.Найти(Тэг) <> Неопределено; + Если НЕ ВнешнийТэг Тогда + ТэгиМодуля.Добавить(Тэг); + КонецЕсли; + КонецЦикла; + МодульОбъекта.ВнешниеТэги = СтрСоединить(ТэгиМодуля, ","); + КонецЕсли;// найдены тэги объекта + КонецЦикла; + МодулиМенеджеров.Сортировать(РеквизитИмяОбъекта); + + Возврат МодулиМенеджеров; + +КонецФункции + +&НаСервере +Функция ЛишниеТэгиВОбласти(ВнешниеТэги, РазметкаКода) + + ЛишниеТэги = СтрРазделить(ВнешниеТэги, ",", Ложь); + ВложенныеТэги = Новый Массив; + Для Каждого ЛишнийТэг Из ЛишниеТэги Цикл + БиблиотекиТэга = РазметкаКода.Тэги.ПоБиблиотекам.НайтиСтроки(Новый Структура("Тэг",ЛишнийТэг)); + Если БиблиотекиТэга = Неопределено Тогда + Продолжить; + КонецЕсли; + Для Каждого Имя Из БиблиотекиТэга Цикл + ТэгиВложенныхБиблиотек = РазметкаКода.Тэги.ВложенныхБиблиотек[Имя.Библиотека]; + Если ТэгиВложенныхБиблиотек <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ВложенныеТэги, ТэгиВложенныхБиблиотек, Истина); + КонецЕсли; + КонецЦикла; + КонецЦикла; + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЛишниеТэги, ВложенныеТэги, Истина); + // Тэги вложенной библиотеки не ставим в модуле + ТэгиВложенныхБиблиотек = РазметкаКода.Тэги.ВложенныхБиблиотек[РазметкаКода.ИмяКонфигурации]; + Если ТэгиВложенныхБиблиотек <> Неопределено И НЕ РазметкаКода.ЭтоМодульМенеджера Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЛишниеТэги, ТэгиВложенныхБиблиотек, Истина); + КонецЕсли; + + Возврат ЛишниеТэги; + +КонецФункции + +&НаСервере +Функция ИмяОбъектаИзПроцедурыОбработки(ИмяПроцедурыОбработки) + + ЧастиИмени = СтрРазделить(ИмяПроцедурыОбработки, "."); + Если ЧастиИмени.Количество() = 2 Тогда + ИмяОбъекта = ЧастиИмени[0]; + Иначе + ЧастиИмени[0] = ЕдинственноеЧисло[ЧастиИмени[0]]; + ЧастиИмени.Удалить(ЧастиИмени.ВГраница()); + ИмяОбъекта = СтрСоединить(ЧастиИмени, "."); + КонецЕсли; + + Возврат ИмяОбъекта; + +КонецФункции + +&НаСервере +Функция СвернутьПоТегам(Обработчики, РазметкаКода) + + ДеревоТэгов = Новый ДеревоЗначений; + Для Каждого Колонка Из Обработчики.Колонки Цикл + ДеревоТэгов.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения); + КонецЦикла; + Если ДеревоТэгов.Колонки.Найти("Тэги") = Неопределено Тогда + ДеревоТэгов.Колонки.Добавить("Тэги", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100))); + КонецЕсли; + + Если НЕ РазметкаКода.УстановитьТэги Тогда + ВеткаТэга = ДеревоТэгов.Строки.Добавить(); + Для Каждого Обработчик Из Обработчики Цикл + НоваяСтрока = ВеткаТэга.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Обработчик); + КонецЦикла; + Иначе + Вложенность = РазметкаКода.Тэги.Вложенность; + ВеткаТэга = Неопределено; // СтрокаДереваЗначений - + Индекс = 0; + Пока Индекс < Обработчики.Количество() Цикл + Обработчик = Обработчики[Индекс]; + Если ВеткаТэга = Неопределено ИЛИ ВеткаТэга.Тэги <> Обработчик.Тэги Тогда + ВеткаТэга = ДеревоТэгов.Строки.Добавить(); + ВеткаТэга.Тэги = Обработчик.Тэги; + ДобавитьОбработчикиТэга(Индекс, Обработчики, ВеткаТэга, Вложенность); + Продолжить; + КонецЕсли; + НоваяСтрока = ВеткаТэга.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Обработчик); + Индекс = Индекс + 1; + КонецЦикла; + КонецЕсли; + + Возврат ДеревоТэгов; + +КонецФункции + +&НаСервере +Процедура ДобавитьОбработчикиТэга(Индекс, Обработчики, ВеткаТэга, Вложенность) + + ОбщийТэг = Вложенность.Строки.Найти(ВеткаТэга.Тэги,"Тэг",Истина); + Пока Индекс < Обработчики.Количество() Цикл + Обработчик = Обработчики[Индекс]; + Если ВеткаТэга.Тэги <> Обработчик.Тэги Тогда + Если ОбщийТэг = Неопределено + ИЛИ ОбщийТэг.Строки.Найти(Обработчик.Тэги) = Неопределено Тогда + Прервать; + КонецЕсли; + ВложеннаяВеткаТэга = ВеткаТэга.Строки.Добавить(); + ВложеннаяВеткаТэга.Тэги = Обработчик.Тэги; + ДобавитьОбработчикиТэга(Индекс, Обработчики, ВложеннаяВеткаТэга, Вложенность); + Продолжить; + КонецЕсли; + НоваяСтрока = ВеткаТэга.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Обработчик); + Индекс = Индекс + 1; + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// ИмяПроцедуры - Строка +// ТекстПроцедуры - Строка +// РазметкаКода - Структура: +// * Тэги - см. ПолучитьСведенияОТегахВырезки +// * ИмяПроцедуры - Строка +// * ДобавитьОбластьОписания - Булево +// * ЭтоМодульМенеджера - Булево +// * ТэгиЛокализации - Строка +// +&НаСервере +Процедура ПоместитьВПроцедуру(ИмяПроцедуры, ТекстПроцедуры, РазметкаКода) + + Если РазметкаКода.УстановитьТэги И РазметкаКода.МодульЛокализации И НЕ РазметкаКода.ЭтоПроцедураОписания Тогда + ТэгЛокализации = РазметкаКода.Тэги.Описание[РазметкаКода.ТэгиЛокализации]; // см. ОписаниеТэга + Если ТэгЛокализации <> Неопределено Тогда + Шаблон = "%1 + |%2 + |%3"; + ТекстПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ТэгЛокализации.Начало, ТекстПроцедуры, ТэгЛокализации.Конец); + КонецЕсли; + КонецЕсли; + + ТекстПроцедуры = + "Процедура " + ИмяПроцедуры + "(Обработчики) Экспорт + | + |"+ ТекстПроцедуры +" + | + |КонецПроцедуры"; + +КонецПроцедуры + +#КонецОбласти + +#Область СведенияОТегахВырезки + +// Параметры: +// Настройки - Произвольный +// Возвращаемое значение: +// Структура: +// * ПоОбъектам - ТаблицаЗначений +// * ПоБиблиотекам - ТаблицаЗначений +// * ПоМодулям - Соответствие +// * Описание +// * РасширениеБиблиотеки - Структура +// * БиблиотекиСтрокой - Строка +// * Порядок - Массив +// * ВложенныхБиблиотек - Соответствие +// * Вложенность - ДеревоЗначений: +// ** Тэг - Строка +// * ПоМодулям - Соответствие +// +&НаСервере +Функция ПолучитьСведенияОТегахВырезки(Настройки) + + СведенияОБиблиотеках = ПолучитьСведенияОБиблиотеках(Настройки); + + ОбъектыБиблиотек = СведенияОБиблиотеках.ОбъектыБиблиотек; + ТэгиБиблиотек = СведенияОБиблиотеках.ТэгиБиблиотек; + БиблиотекиСтрокой = СведенияОБиблиотеках.БиблиотекиСтрокой; + РасширениеБиблиотеки = СведенияОБиблиотеках.РасширениеБиблиотеки; + + ТэгиОбъектов = ОбъектыБиблиотек.СкопироватьКолонки(); // ТаблицаЗначений - + ТипСтрока100 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)); + ТэгиОбъектов.Колонки.Добавить("Тэги", ТипСтрока100); + ОписаниеТэгов = ПолучитьОписаниеИПорядокТэгов(Настройки); + ПорядокТэгов = Настройки.ОписаниеТэгов["OrderTags"]; + + ВсеБиблиотеки = СтрРазделить(БиблиотекиСтрокой, ",",Ложь); + ВсегоКонфигураций = ВсеБиблиотеки.Количество(); + Для Каждого ОбъектБиблиотеки Из ОбъектыБиблиотек Цикл + Если ОбъектБиблиотеки.ВсегоВхождений = ВсегоКонфигураций Тогда + Продолжить; + КонецЕсли; + + ИсключитьИзСтрокой = ""; + Для Каждого ИмяБиблиотеки Из ВсеБиблиотеки Цикл + Расширяемая = РасширениеБиблиотеки[ИмяБиблиотеки]; + Если НЕ ОбъектБиблиотеки[ИмяБиблиотеки] Тогда + ИсключитьИзСтрокой = ИсключитьИзСтрокой + ?(НЕ ПустаяСтрока(ИсключитьИзСтрокой), ",", "") + ИмяБиблиотеки; + Если Расширяемая <> Неопределено Тогда + Если ТипЗнч(Расширяемая) = Тип("Массив") Тогда + Для Каждого стр Из Расширяемая Цикл + ИсключитьИзСтрокой = СтрЗаменить(ИсключитьИзСтрокой, стр, ИмяБиблиотеки); + КонецЦикла; + Иначе + ИсключитьИзСтрокой = СтрЗаменить(ИсключитьИзСтрокой, Расширяемая, ИмяБиблиотеки); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ТэгиОбъекта = Новый Массив; + ИсключитьИзКонфигурации = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СтрРазделить(ИсключитьИзСтрокой, ",",Ложь)); + Для Каждого ИмяБиблиотеки Из ИсключитьИзКонфигурации Цикл + Отбор = Новый Структура("Библиотека", ИмяБиблиотеки); + НайденныеТэги = ТэгиБиблиотек.НайтиСтроки(Отбор); + Для Каждого Строка Из НайденныеТэги Цикл + ТэгиОбъекта.Добавить(Строка.Тэг); + КонецЦикла; + КонецЦикла; + + УстановитьПорядокТэгов(ТэгиОбъекта, ПорядокТэгов); + + НоваяСтрока = ТэгиОбъектов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ОбъектБиблиотеки); + НоваяСтрока.Тэги = СтрСоединить(ТэгиОбъекта, ","); + + КонецЦикла; + + ТэгиМодулей = Новый Соответствие; + Для Каждого Описание Из Настройки.ОписаниеТэгов["configurations"] Цикл + Модуль = Описание.Значение["module"]; + Если Модуль = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТэгиМодуля = Описание.Значение["outTags"]; + Если ТэгиМодуля <> Неопределено Тогда + ТэгиМодулей.Вставить(Модуль, ТэгиМодуля); + КонецЕсли; + КонецЦикла; + + + Тэги = Новый Структура; + Тэги.Вставить("ПоОбъектам", ТэгиОбъектов); + Тэги.Вставить("ПоБиблиотекам", ТэгиБиблиотек); + Тэги.Вставить("ПоМодулям", ТэгиМодулей); + Тэги.Вставить("Описание", ОписаниеТэгов); + Тэги.Вставить("РасширениеБиблиотеки", РасширениеБиблиотеки); + Тэги.Вставить("БиблиотекиВПорядкеВложенности", СведенияОБиблиотеках.БиблиотекиВПорядкеВложенности); + Тэги.Вставить("БиблиотекиСтрокой", БиблиотекиСтрокой); + Тэги.Вставить("Порядок", ПорядокТэгов); + ДеревоТэгов = Новый ДеревоЗначений; + ДеревоТэгов.Колонки.Добавить("Тэг", ТипСтрока100); + Тэги.Вставить("Вложенность", ДеревоТэгов); + + ВложенныхБиблиотек = Новый Соответствие; + Для Каждого Расширение Из РасширениеБиблиотеки Цикл + ТэгиВложеннойБиблиотеки = Новый Массив; + ДобавитьТэгиВложенныхБиблиотек(ТэгиВложеннойБиблиотеки, Расширение.Ключ, Тэги); + ВложенныхБиблиотек.Вставить(Расширение.Ключ, ТэгиВложеннойБиблиотеки); + + Тэг = ТэгБиблиотеки(Расширение.Значение, ТэгиБиблиотек); + Если НЕ ПустаяСтрока(Тэг) Тогда + ВеткаТэга = ДеревоТэгов.Строки.Добавить(); + ВеткаТэга.Тэг = Тэг; + Тэг = ТэгБиблиотеки(Расширение.Ключ, ТэгиБиблиотек); + Если НЕ ПустаяСтрока(Тэг) Тогда + ВложенныйТэг = ВеткаТэга.Строки.Добавить(); + ВложенныйТэг.Тэг = Тэг; + ДобавитьВложенныеТэги(ВложенныйТэг, Расширение.Ключ, Тэги); + КонецЕсли; + Если ВеткаТэга.Строки.Количество() = 0 Тогда + ДеревоТэгов.Строки.Удалить(ВеткаТэга); + КонецЕсли; + КонецЕсли; + КонецЦикла; + Тэги.Вставить("ВложенныхБиблиотек", ВложенныхБиблиотек); + + Возврат Тэги; + +КонецФункции + +&НаСервере +Процедура ДобавитьВложенныеТэги(ВеткаТэга, ИмяБиблиотеки, ОписаниеТэгов) + + БиблиотекаВхождения = Неопределено; + Для Каждого Расширение Из ОписаниеТэгов.РасширениеБиблиотеки Цикл + Если ИмяБиблиотеки = Расширение.Значение Тогда + БиблиотекаВхождения = Расширение.Ключ; + Прервать; + КонецЕсли; + КонецЦикла; + Если БиблиотекаВхождения <> Неопределено Тогда + Тэг = ТэгБиблиотеки(БиблиотекаВхождения, ОписаниеТэгов.ПоБиблиотекам); + Если НЕ ПустаяСтрока(Тэг) Тогда + ВложенныйТэг = ВеткаТэга.Строки.Добавить(); + ВложенныйТэг.Тэг = Тэг; + ДобавитьВложенныеТэги(ВложенныйТэг, БиблиотекаВхождения, ОписаниеТэгов); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ТэгБиблиотеки(Библиотека, ТэгиБиблиотек) + + Результат = ""; + НайденнаяСтрока = ТэгиБиблиотек.Найти(Библиотека, "Библиотека"); + Если НайденнаяСтрока <> Неопределено Тогда + Результат = НайденнаяСтрока.Тэг; + КонецЕсли; + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура УстановитьПорядокТэгов(Тэги, ПорядокТэгов) + + УпорядоченныйРезультат = Новый Массив; + Для Каждого ТэгПоПорядку Из ПорядокТэгов Цикл + + Если Тэги.Найти(ТэгПоПорядку) <> Неопределено Тогда + УпорядоченныйРезультат.Добавить(ТэгПоПорядку); + КонецЕсли; + + КонецЦикла; + + Тэги = УпорядоченныйРезультат; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьТэгиВложенныхБиблиотек(Тэги, ИмяБиблиотеки, ОписаниеТэгов) + + ВложеннаяБиблиотека = ОписаниеТэгов.РасширениеБиблиотеки[ИмяБиблиотеки]; + Если ВложеннаяБиблиотека <> Неопределено Тогда + Отбор = Новый Структура("Библиотека", ВложеннаяБиблиотека); + НайденныеСтроки = ОписаниеТэгов.ПоБиблиотекам.НайтиСтроки(Отбор); + Для Каждого Строка Из НайденныеСтроки Цикл + Тэги.Добавить(Строка.Тэг); + КонецЦикла; + ДобавитьТэгиВложенныхБиблиотек(Тэги, ВложеннаяБиблиотека, ОписаниеТэгов); + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// Настройки - Произвольный +// Возвращаемое значение: +// КлючИЗначение - Описание: +// * Ключ - Строка - наименование тэга +// * Значение - см. ОписаниеТэга +// +&НаСервере +Функция ПолучитьОписаниеИПорядокТэгов(Настройки) + + Тэги = Новый Соответствие; + Если Настройки.ОписаниеТэгов["tags"] <> Неопределено Тогда + ПорядокТэгов = Новый Массив; + Для Каждого Описание Из Настройки.ОписаниеТэгов["tags"] Цикл + + ГраницыТэга = ОписаниеТэга(); + ГраницыТэга.Начало = Описание["begin"]; + ГраницыТэга.Конец = Описание["end"]; + Тэги.Вставить(Описание["id"], ГраницыТэга); + ПорядокТэгов.Добавить(Описание["id"]); + + КонецЦикла; + Настройки.ОписаниеТэгов.Вставить("OrderTags", ПорядокТэгов); + КонецЕсли; + + Возврат Тэги; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * Начало - Строка +// * Конец - Строка +// +&НаСервере +Функция ОписаниеТэга() + + Возврат Новый Структура("Начало, Конец"); + +КонецФункции + +&НаСервере +Функция ПолучитьСведенияОБиблиотеках(Настройки) + + ТипСтрока100 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)); + ТипСтрока300 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(300)); + ТипЧисло10 = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 0)); + + ТэгиБиблиотек = Новый ТаблицаЗначений; + ТэгиБиблиотек.Колонки.Добавить("Библиотека", ТипСтрока100); + ТэгиБиблиотек.Колонки.Добавить("Тэг", ТипСтрока100); + + ТипБулево = Новый ОписаниеТипов("Булево"); + ТипСтрока300 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(300)); + + ОбъектыБиблиотек = Новый ТаблицаЗначений; + ОбъектыБиблиотек.Колонки.Добавить("Имя", ТипСтрока300); + ОбъектыБиблиотек.Колонки.Добавить("ВсегоВхождений", ТипЧисло10); + Для Каждого Имя Из Настройки.ВсеОбъекты Цикл + НоваяСтрока = ОбъектыБиблиотек.Добавить(); + НоваяСтрока.Имя = Имя; + КонецЦикла; + + БиблиотекиСтрокой = ""; + РасширениеБиблиотеки = Новый Соответствие; + Если Настройки.ОписаниеТэгов["configurations"] <> Неопределено Тогда + Для Каждого Библиотека Из Настройки.ОписаниеТэгов["configurations"] Цикл + + ВложеннаяБиблиотека = Библиотека.Значение["extends"]; + Если ВложеннаяБиблиотека <> Неопределено Тогда + РасширениеБиблиотеки.Вставить(Библиотека.Ключ, ВложеннаяБиблиотека); + КонецЕсли; + + Содержимое = Библиотека.Значение["content"]; + Если НЕ ЗначениеЗаполнено(Содержимое) Тогда + Продолжить; + КонецЕсли; + + ТэгиВырезки = Библиотека.Значение["outTags"]; + Если ТэгиВырезки = Неопределено Тогда + Продолжить; + КонецЕсли; + + ИмяМодуля = Библиотека.Значение["module"]; + Если НЕ ЗначениеЗаполнено(ИмяМодуля) Тогда + Продолжить; + КонецЕсли; + + Если ОбъектыБиблиотек.Колонки.Найти(Библиотека.Ключ) = Неопределено Тогда + ОбъектыБиблиотек.Колонки.Добавить(Библиотека.Ключ, ТипБулево); + БиблиотекиСтрокой = БиблиотекиСтрокой + ?(БиблиотекиСтрокой <> "", ",","") + Библиотека.Ключ; + КонецЕсли; + + Для Каждого Тэг Из ТэгиВырезки Цикл + НовыйТэг = ТэгиБиблиотек.Добавить(); + НовыйТэг.Библиотека = Библиотека.Ключ; + НовыйТэг.Тэг = Тэг; + КонецЦикла; + Объекты = Библиотека.Значение["Объекты"]; + Для Каждого ИмяОбъекта Из Объекты Цикл + НоваяСтрока = ОбъектыБиблиотек.Добавить(); + НоваяСтрока.Имя = ИмяОбъекта.Ключ; + НоваяСтрока.ВсегоВхождений = 1; + НоваяСтрока[Библиотека.Ключ] = Истина; + КонецЦикла; + + КонецЦикла; + КонецЕсли; + ВложенностьБиблиотек = ОпределитьВложенностьБиблиотек(РасширениеБиблиотеки); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ВложенностьБиблиотек, СтрРазделить(БиблиотекиСтрокой, ","), Истина); + + ОбъектыБиблиотек.Свернуть("Имя", "ВсегоВхождений," + БиблиотекиСтрокой); + ОбъектыБиблиотек.Сортировать("Имя, ВсегоВхождений УБЫВ"); + ОбъектыБиблиотек.Индексы.Добавить("Имя"); + + ТэгиБиблиотек.Сортировать("Библиотека, Тэг"); + ТэгиБиблиотек.Индексы.Добавить("Библиотека"); + + Результат = Новый Структура; + Результат.Вставить("ОбъектыБиблиотек", ОбъектыБиблиотек); + Результат.Вставить("ТэгиБиблиотек", ТэгиБиблиотек); + Результат.Вставить("БиблиотекиСтрокой", БиблиотекиСтрокой); + Результат.Вставить("РасширениеБиблиотеки", РасширениеБиблиотеки); + Результат.Вставить("БиблиотекиВПорядкеВложенности", ВложенностьБиблиотек); + + Возврат Результат + +КонецФункции + +&НаСервере +Процедура ОпределитьТэгиДляОбъектовНеВходящихВКонфигурацию(ОписаниеТэгов) + + ТэгиРасширители = ТэгиРасширители(ОписаниеТэгов); + Для Каждого Описание Из ОписаниеТэгов["configurations"] Цикл + Описание.Значение.Вставить("outTags", Новый Массив); + ТэгиВырезки = Описание.Значение["outTags"]; // Массив - + + Тэги = Описание.Значение["tags"]; + Если Тэги <> Неопределено Тогда + Расширители = ТэгиРасширители[Описание.Ключ]; + Если Расширители = Неопределено Тогда + Расширители = Новый Массив; + КонецЕсли; + Для Каждого Тэг Из Тэги Цикл + Индекс = Расширители.Найти(Тэг); + Если Индекс = Неопределено Тогда + ТэгиВырезки.Добавить(Тэг); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ОпределитьВложенностьБиблиотек(СвязанныйСписок) + + Вложенность = Новый ТаблицаЗначений; + Вложенность.Колонки.Добавить("Библиотека", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100))); + Вложенность.Колонки.Добавить("ВсегоВхождений", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 0))); + Для Каждого Уровень Из СвязанныйСписок Цикл + + НоваяСтрока = Вложенность.Добавить(); + НоваяСтрока.Библиотека = Уровень.Значение; + НоваяСтрока.ВсегоВхождений = 1; + + ДобавитьВложенную(Уровень.Значение, Вложенность, СвязанныйСписок); + + Если Вложенность.Найти(Уровень.Ключ,"Библиотека")= Неопределено Тогда + НоваяСтрока = Вложенность.Добавить(); + НоваяСтрока.Библиотека = Уровень.Ключ; + НоваяСтрока.ВсегоВхождений = 0; + КонецЕсли; + + КонецЦикла; + Вложенность.Свернуть("Библиотека","ВсегоВхождений"); + Вложенность.Сортировать("ВсегоВхождений УБЫВ"); + + Возврат Вложенность.ВыгрузитьКолонку("Библиотека"); + +КонецФункции + +&НаСервере +Процедура ДобавитьВложенную(Родитель, Вложенность, СвязанныйСписок, НомерУровня = 1) + + Вложенная = СвязанныйСписок[Родитель]; + + Если Вложенная <> Неопределено Тогда + ДобавитьВложенную(Вложенная, Вложенность, СвязанныйСписок, НомерУровня+1); + КонецЕсли; + НоваяСтрока = Вложенность.Добавить(); + НоваяСтрока.Библиотека = Родитель; + НоваяСтрока.ВсегоВхождений = НомерУровня; + +КонецПроцедуры + +&НаСервере +Функция ТэгиРасширители(ОписаниеТэгов) + + ТэгиРасширители = Новый Соответствие; + Для Каждого Описание Из ОписаниеТэгов["configurations"] Цикл + РасширяемаяКонфигурация = Описание.Значение["extends"]; + Если РасширяемаяКонфигурация <> Неопределено Тогда + Тэги = Описание.Значение["tags"]; + Если Тэги <> Неопределено Тогда + Конфигурация = ТэгиРасширители[РасширяемаяКонфигурация]; + Если Конфигурация = Неопределено Тогда + ТэгиРасширители.Вставить(РасширяемаяКонфигурация, Тэги); + Иначе + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Конфигурация, Тэги, Истина); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат ТэгиРасширители; + +КонецФункции + +#КонецОбласти + +#Область СоставКонфигурации + +&НаКлиенте +Функция ПолучитьВсеОбъектыИсходнойКонфигурации() + + ИмяФайла = Объект.КаталогSRC + "Configuration\Configuration.mdo"; + ВсеОбъекты = Новый Массив; + + ФайлПодсистемы = Новый Файл(ИмяФайла); + Если НЕ ФайлПодсистемы.Существует() Тогда + Возврат ВсеОбъекты; + КонецЕсли; + + ИмяКлассаRU = РусскиеИменаКлассов(); + + Тэги = Новый Массив; + Тэги.Добавить("accountingRegisters"); + Тэги.Добавить("accumulationRegisters"); + Тэги.Добавить("businessProcesses"); + Тэги.Добавить("calculationRegisters"); + Тэги.Добавить("catalogs"); + Тэги.Добавить("chartsOfAccounts"); + Тэги.Добавить("chartsOfCalculationTypes"); + Тэги.Добавить("chartsOfCharacteristicTypes"); + Тэги.Добавить("constants"); + Тэги.Добавить("commonModules"); + Тэги.Добавить("documents"); + Тэги.Добавить("informationRegisters"); + Тэги.Добавить("reports"); + Тэги.Добавить("tasks"); + + #Если НЕ ВебКлиент Тогда + Текст = Новый ЧтениеТекста; + Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8); + + СтрокаФайла = Текст.ПрочитатьСтроку(); + Пока СтрокаФайла <> Неопределено Цикл + + СтрокаФайла = Текст.ПрочитатьСтроку(); + Тэг = НайтиТэг(СтрокаФайла, Тэги); + Если Тэг <> Неопределено Тогда + + СтрокаФайла = СтрЗаменить(СтрокаФайла, "<"+Тэг+">", ""); + ИмяОбъекта = СокрЛП(СтрЗаменить(СтрокаФайла, "", "")); + + ЧастиИмени = СтрРазделить(ИмяОбъекта, "."); + ЧастиИмени[0] = ИмяКлассаRU[ЧастиИмени[0]]; + + ВсеОбъекты.Добавить(СтрСоединить(ЧастиИмени, ".")); + + КонецЕсли; + + КонецЦикла; + #КонецЕсли + + Возврат ВсеОбъекты; + +КонецФункции + +&НаКлиенте +Функция НайтиТэг(СтрокаФайла, Тэги) + + Для Каждого Тэг Из Тэги Цикл + Если СтрНайти(СтрокаФайла, Тэг) > 0 Тогда + Возврат Тэг; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; + +КонецФункции + +#КонецОбласти + +#Область СоставПодсистемы +&НаКлиенте +Процедура ПолучитьОбъектыПодсистем(ОписаниеКонфигураций) + + РусскиеИменаКлассов = РусскиеИменаКлассов(); + Для Каждого Описание Из ОписаниеКонфигураций Цикл + ОбъектыПодсистемы = Новый Соответствие; + Подсистемы = Описание.Значение["content"]; + Если ЗначениеЗаполнено(Подсистемы) Тогда + Для Каждого Подсистема Из Подсистемы Цикл + ДобавитьОбъектыПодсистемы(ОбъектыПодсистемы, Подсистема, РусскиеИменаКлассов); + КонецЦикла; + КонецЕсли; + ПодсистемыИсключения = Описание.Значение["except_content"]; + Если ЗначениеЗаполнено(ПодсистемыИсключения) Тогда + ОбъектыИсключения = Новый Соответствие; + Для Каждого Подсистема Из ПодсистемыИсключения Цикл + ДобавитьОбъектыПодсистемы(ОбъектыИсключения, Подсистема, РусскиеИменаКлассов); + КонецЦикла; + Для Каждого ОбъектИсключения Из ОбъектыИсключения Цикл + ОбъектыПодсистемы.Удалить(ОбъектИсключения.Ключ); + КонецЦикла; + КонецЕсли; + + Описание.Значение.Вставить("Объекты", ОбъектыПодсистемы); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьОбъектыПодсистемы(ОбъектыКонфигурации, Подсистема, РусскиеИменаКлассов) + + ЧастиИмени = СтрРазделить(Подсистема, "."); + ЧастьПути = "Subsystems\" + СтрСоединить(ЧастиИмени, "\Subsystems\"); + ИмяФайла = Объект.КаталогSRC + ЧастьПути + "\" + ЧастиИмени[ЧастиИмени.ВГраница()] + ".mdo"; + ФайлПодсистемы = Новый Файл(ИмяФайла); + + Если НЕ ФайлПодсистемы.Существует() Тогда + Возврат; + КонецЕсли; + + #Если НЕ ВебКлиент Тогда + Текст = Новый ЧтениеТекста; + Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8); + + СтрокаФайла = Текст.ПрочитатьСтроку(); + Пока СтрокаФайла <> Неопределено Цикл + + Если СтрНайти(СтрокаФайла, "") > 0 Тогда + СтрокаФайла = СокрЛП(СтрЗаменить(СтрокаФайла, "", "")); + СтрокаФайла = СокрЛП(СтрЗаменить(СтрокаФайла, "", "")); + ЧастиИмени = СтрРазделить(СтрокаФайла, "."); + ЧастиИмени[0] = РусскиеИменаКлассов[ЧастиИмени[0]]; + Если ЧастиИмени[0] <> Неопределено Тогда + ИмяОбъекта = СтрСоединить(ЧастиИмени, "."); + ОбъектыКонфигурации.Вставить(ИмяОбъекта, ИмяОбъекта); + КонецЕсли; + + ИначеЕсли СтрНайти(СтрокаФайла, "") > 0 Тогда + СтрокаФайла = СокрЛП(СтрЗаменить(СтрокаФайла, "", "")); + СтрокаФайла = СокрЛП(СтрЗаменить(СтрокаФайла, "", "")); + ЧастиИмени = Новый Массив; + ЧастиИмени.Добавить(Подсистема); + ЧастиИмени.Добавить(СтрокаФайла); + ИмяВложеннойПодсистемы = СтрСоединить(ЧастиИмени, "."); + ДобавитьОбъектыПодсистемы(ОбъектыКонфигурации, ИмяВложеннойПодсистемы, РусскиеИменаКлассов); + КонецЕсли; + + СтрокаФайла = Текст.ПрочитатьСтроку(); + + КонецЦикла; + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +// Возвращает соответствие английских имен русским для обрабатываемых классов объектов метаданных. +Функция РусскиеИменаКлассов() + + Результат = Новый Соответствие; + + Результат.Вставить("AccountingRegister", "РегистрБухгалтерии"); + Результат.Вставить("AccumulationRegister", "РегистрНакопления"); + Результат.Вставить("BusinessProcess", "БизнесПроцесс"); + Результат.Вставить("CalculationRegister", "РегистрРасчета"); + Результат.Вставить("Catalog", "Справочник"); + Результат.Вставить("ChartOfAccounts", "ПланСчетов"); + Результат.Вставить("ChartOfCalculationTypes", "ПланВидовРасчета"); + Результат.Вставить("ChartOfCharacteristicTypes", "ПланВидовХарактеристик"); + Результат.Вставить("Constant", "Константа"); + Результат.Вставить("CommonModule", "ОбщийМодуль");// указываются в приоритетах других обработчиков + Результат.Вставить("Document", "Документ"); + Результат.Вставить("ExchangePlan", "ПланОбмена"); + Результат.Вставить("InformationRegister", "РегистрСведений"); + Результат.Вставить("Task", "Задача"); + Результат.Вставить("Sequence", "Последовательность"); + Результат.Вставить("Report", "Отчет");// указываются в блокируемых объектах + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ЧтениеYAML +&НаКлиенте +Функция ПрочитатьФайлYaml(ИмяФайла) + + Результат = Новый Соответствие; + + Файл = Новый Файл(ИмяФайла); + Если НЕ Файл.Существует() Тогда + Шаблон = НСтр("ru = 'Не обнаружен файл настроек ""%1""'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяФайла); + КонецЕсли; + + #Если НЕ ВебКлиент Тогда + ТекстФайла = Новый ТекстовыйДокумент; + ТекстФайла.Прочитать(ИмяФайла, КодировкаТекста.UTF8); + Попытка + + ПрочитатьСтрокиYAML(Результат, ТекстФайла); + + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось прочитать файл %1.'"), ИмяФайла); + ТекстСообщения = ТекстСообщения + Символы.ПС + НСтр("ru = 'По причине'")+":" + Символы.ПС; + ТекстСообщения = ТекстСообщения + ТекстОшибки; + ВызватьИсключение ТекстСообщения; + КонецПопытки; + #КонецЕсли + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ПрочитатьСтрокиYAML(Результат, ТекстФайла, НомерСтроки = 0, Уровень = 0, ЧтениеМногострочнойСтроки = Ложь) + + Попытка + ВсегоСтрок = ТекстФайла.КоличествоСтрок(); + Пока НомерСтроки <= ВсегоСтрок Цикл + + НомерСтроки = НомерСтроки + 1; + СтрокаФайла = ТекстФайла.ПолучитьСтроку(НомерСтроки); + Если СокрЛП(СтрокаФайла) = "" И НЕ ЧтениеМногострочнойСтроки ИЛИ Лев(СокрЛП(СтрокаФайла), 1) = "#" Тогда + Продолжить; + КонецЕсли; + + Параметр = ЗначениеИзСтрокиYaml(СтрокаФайла); + Если Параметр.Уровень < Уровень Тогда + НомерСтроки = НомерСтроки - 1; + Прервать; + КонецЕсли; + + Если Параметр.ЭлементМассива Тогда + Если ТипЗнч(Результат) <> Тип("Массив") Тогда + Результат = Новый Массив; + КонецЕсли; + Если ПустаяСтрока(Параметр.Ключ) Тогда + ДобавитьВРезультатYAML(Результат, Параметр); + Иначе + Результат.Добавить(Новый Соответствие); + ДобавитьВРезультатYAML(Результат[Результат.ВГраница()], Параметр); + ПрочитатьСтрокиYAML(Результат[Результат.ВГраница()], ТекстФайла, НомерСтроки, Параметр.Уровень+1); + КонецЕсли; + + ИначеЕсли Параметр.Значение = "|" Тогда + Параметр.Значение = ""; + ПрочитатьСтрокиYAML(Параметр.Значение, ТекстФайла, НомерСтроки, Параметр.Уровень+1, Истина); + ДобавитьВРезультатYAML(Результат, Параметр); + + ИначеЕсли НЕ ЗначениеЗаполнено(Параметр.Значение) Тогда + + ПрочитатьСтрокиYAML(Параметр.Значение, ТекстФайла, НомерСтроки, Параметр.Уровень+1); + ДобавитьВРезультатYAML(Результат, Параметр); + + Иначе + ДобавитьВРезультатYAML(Результат, Параметр); + + КонецЕсли; + + КонецЦикла; + + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось разобрать строку: %1'"), СтрокаФайла); + ТекстСообщения = ТекстСообщения + Символы.ПС + НСтр("ru = 'По причине'")+":" + Символы.ПС; + ТекстСообщения = ТекстСообщения + ТекстОшибки; + ВызватьИсключение ТекстСообщения; + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьВРезультатYAML(Результат, Параметр) + + Если ЗначениеЗаполнено(Параметр.Ключ) И ТипЗнч(Результат) <> Тип("Соответствие") Тогда + Результат = Новый Соответствие; + КонецЕсли; + + Если ТипЗнч(Результат) = Тип("Соответствие") Тогда + Результат.Вставить(Параметр.Ключ, Параметр.Значение); + + ИначеЕсли ТипЗнч(Результат) = Тип("Массив") Тогда + Результат.Добавить(Параметр.Значение); + + ИначеЕсли ТипЗнч(Результат) = Тип("Строка") Тогда + Результат = Результат + Параметр.Значение + Символы.ПС; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ЗначениеИзСтрокиYaml(Знач СтрокаYaml) + + Ключ = ""; + Значение = Неопределено; + + СтрокаБезОтступа = СокрЛ(СтрокаYaml); + Отступ = СтрНайти(СтрокаYaml,СтрокаБезОтступа)-1; + Уровень = Отступ; + ЭлементМассива = Ложь; + + СтрокаYaml = СокрЛП(СтрокаYaml); + Если Лев(СтрокаYaml,1) = "-" Тогда + ЭлементМассива = Истина; + Уровень = Уровень + 1; + СтрокаYaml = СокрЛП(Прав(СтрокаYaml, СтрДлина(СтрокаYaml)-1)); + КонецЕсли; + + Двоеточие = СтрНайти(СтрокаYaml,":"); + Если Двоеточие <> 0 И Сред(СтрокаYaml, Двоеточие, 2) <> ":\" И Сред(СтрокаYaml, Двоеточие, 2) <> ":/" Тогда + Ключ = СокрЛП(Лев(СтрокаYaml, Двоеточие - 1)); + Значение = СокрЛП(Сред(СтрокаYaml, Двоеточие + 1)); + + Иначе + Значение = СтрокаYaml; + + КонецЕсли; + + Решетка = СтрНайти(Значение, "#"); + Если Решетка <> 0 Тогда + Значение = СокрЛП(Лев(Значение, Решетка - 1)); + КонецЕсли; + + Результат = Новый Структура("Ключ,Значение,Уровень", Ключ,Значение,Уровень); + Результат.Вставить("ЭлементМассива", ЭлементМассива); + Возврат Результат; + +КонецФункции +#КонецОбласти + +#КонецОбласти + +#Область ТестПостроенияОчереди + +&НаКлиенте +Процедура ЗаписатьОшибку(ИмяОбъекта, ОписаниеОшибки = "", + ИнформацияОбОшибке = Неопределено, Ключ = Неопределено) + + Ошибка = СоздатьОписаниеОшибки(); + Ошибка.ТипОшибки = НСтр("ru = 'Ошибка построения очереди отложенных обработчиков обновления'"); + Ошибка.ПорядокВоспроизведения = ОписаниеОшибки; + Ошибка.ОбъектМетаданных = ИмяОбъекта; + + Если ИнформацияОбОшибке <> Неопределено Тогда + Ошибка.ИсходнаяИнформация = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецЕсли; + + Если ЗначениеЗаполнено(ДополнениеТекстаОшибки) Тогда + Ошибка.ПорядокВоспроизведения = Ошибка.ПорядокВоспроизведения + Символы.ПС + ДополнениеТекстаОшибки; + КонецЕсли; + Если ЗначениеЗаполнено(ДатаОбнаруженияОшибки) Тогда + Ошибка.ДатаОбнаружения = ДатаОбнаруженияОшибки; + КонецЕсли; + Если ЗначениеЗаполнено(АдресРепозитория) Тогда + Ошибка.АдресРепозитория = АдресРепозитория; + КонецЕсли; + + Если ЗначениеЗаполнено(КаталогФайловОшибок) Тогда + + Файл = Новый Файл(КаталогФайловОшибок); + Если НЕ Файл.Существует() Тогда + СоздатьКаталог(КаталогФайловОшибок); + ИначеЕсли НЕ Файл.ЭтоКаталог() Тогда + УдалитьФайлы(КаталогФайловОшибок); + СоздатьКаталог(КаталогФайловОшибок); + КонецЕсли; + + ИмяФайлаОшибки = ДобавитьРазделительПутиВКонец(КаталогФайловОшибок); + ИмяФайлаОшибки = ИмяФайлаОшибки + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=yyyyMMddHHmmss") + + "_" + Строка(Новый УникальныйИдентификатор())+".xml"; + + Результат = Новый ТекстовыйДокумент; + #Если НЕ ВебКлиент Тогда + Результат.УстановитьТекст(ТекстОшибкиXML(Ошибка)); + #КонецЕсли + Результат.Записать(ИмяФайлаОшибки); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция СоздатьОписаниеОшибки() + + Ошибка = Новый Структура; + + Ошибка.Вставить("ВерсияФормата", "1.4"); + Ошибка.Вставить("УИ", Строка(Новый УникальныйИдентификатор)); + Ошибка.Вставить("ТипОшибки", ""); + Ошибка.Вставить("ИсходнаяИнформация", ""); + Ошибка.Вставить("ПорядокВоспроизведения", ""); + Ошибка.Вставить("ОжидаемоеПоведение", ""); + Ошибка.Вставить("Ответственный", ""); + Ошибка.Вставить("ДостоверностьОбнаружения", "Низкая"); // "Высокая" либо "Низкая" + Ошибка.Вставить("АдресРепозитория", ""); + + #Если Клиент Или ТолстыйКлиентУправляемоеПриложение Или ТонкийКлиент Или ВебКлиент Тогда + + СисИнфо = Новый СистемнаяИнформация; + Ошибка.Вставить("ВерсияПлатформы", СисИнфо.ВерсияПриложения); + Ошибка.Вставить("КлиентОперативнаяПамять", СисИнфо.ОперативнаяПамять); + Ошибка.Вставить("КлиентВерсияОС", СисИнфо.ВерсияОС); + Ошибка.Вставить("КлиентПроцессор", СисИнфо.Процессор); + Ошибка.Вставить("КлиентТипПлатформы", Строка(СисИнфо.ТипПлатформы)); + Ошибка.Вставить("КлиентИнформацияПрограммыПросмотра", СисИнфо.ИнформацияПрограммыПросмотра); + Ошибка.Вставить("КлиентТекущаяДата", ОбщегоНазначенияКлиент.ДатаСеанса()); + + #КонецЕсли + + Ошибка.Вставить("ДатаОбнаружения", Дата(1,1,1)); + Ошибка.Вставить("ОбъектыМетаданных", Новый Массив); // Возможность добавить массив объектов метаданных + // Регистрация по одному объекту метаданных + Ошибка.Вставить("ОбъектМетаданных", ""); + Ошибка.Вставить("УточнениеРасположения", ""); + Ошибка.Вставить("КодСценария", ""); + Ошибка.Вставить("ИмяСценария", ""); + + Ошибка.Вставить("ИменаФайлов", Новый Массив); + + Возврат Ошибка; + +КонецФункции + +#Если НЕ ВебКлиент Тогда +&НаКлиенте +Функция ТекстОшибкиXML(Ошибка) + + Если ЗначениеЗаполнено(Ошибка.ОбъектМетаданных) ИЛИ ЗначениеЗаполнено(Ошибка.УточнениеРасположения) Тогда + Ошибка.ОбъектыМетаданных.Добавить(Новый Структура("ОбъектМетаданных, УточнениеРасположения", Ошибка.ОбъектМетаданных, Ошибка.УточнениеРасположения)); + КонецЕсли; + + Ошибка.Удалить("ОбъектМетаданных"); + Ошибка.Удалить("УточнениеРасположения"); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Ошибка); + + Возврат ЗаписьXML.Закрыть(); + +КонецФункции +#КонецЕсли + +#КонецОбласти + +#Область ЗаписьНастроекERP + +&НаСервере +Функция ПолучитьТекстыНастроек() + + Обработка = ОбъектОбработки(); + ТэгиВырезки = Обработка.ПолучитьМакет("cut_tags"); + + ТекстыНастроек = Новый СписокЗначений; + ТекстыНастроек.Добавить( + ТэгиВырезки.ПолучитьТекст(), + НСтр("ru = 'Файл cut_tags.yml сохранить в каталог .settings локальной папки проекта в кодировке UTF-8'")); + + Возврат ТекстыНастроек; + +КонецФункции + +#КонецОбласти + +#Область ЕстьЦиклПорядкаВыполнения + +&НаСервере +Функция ЕстьЦиклВыполненияОбработчиковНаСервере() + + Обработка = ОбъектОбработки(); + ЕстьЦикл = Обработка.ЕстьЦиклВыполненияОбработчиков(); + Возврат ЕстьЦикл; + +КонецФункции + +&НаСервере +Функция ЕстьЦиклПорядкаВыполненияОбработчиков(Знач ЭтотОбработчик, Знач ПриоритетыВыполнения = Неопределено, СообщатьОбОшибках = Истина) Экспорт + + Обработка = ОбъектОбработки(); + ЕстьЦикл = Обработка.ЕстьЦиклПорядкаВыполненияОбработчика(ЭтотОбработчик, ПриоритетыВыполнения, СообщатьОбОшибках); + Возврат ЕстьЦикл; + +КонецФункции + +#КонецОбласти + +#Область УстановитьНомерСборки + +&НаКлиенте +Процедура ЗавершениеВводаНомераСборки(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат > 0 Тогда + Если ДополнительныеПараметры.НомерСборкиДляОбработчиков Тогда + УстановитьНомерСборкиОбработчикамНаСервере(Результат); + Иначе + НовыйНомерСборкиКонфигурации = Результат; + КонецЕсли; + Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьНомерСборкиОбработчикамНаСервере(НомерСборки) + + Обработка = ОбъектОбработки(); + МаксНомерРедакции = 0; + МаксНомерПодРедакции = 0; + ОбработчикиОднойБиблиотеки = Истина; + УстановленаВерсия = Новый Массив; + ПодсистемаПредыдущего = Неопределено; + Для Каждого ИдСтроки Из Элементы.ОбработчикиОбновления.ВыделенныеСтроки Цикл + Обработчик = Объект.ОбработчикиОбновления.НайтиПоИдентификатору(ИдСтроки); + Если ПодсистемаПредыдущего = Неопределено Тогда + ПодсистемаПредыдущего = Обработчик.Подсистема; + КонецЕсли; + Если СтрЧислоВхождений(Обработчик.Версия, ".") = 3 Тогда + + НомераВерсии = СтрРазделить(Обработчик.Версия, "."); + НомераВерсии[3] = Формат(НомерСборки, "ЧН=0; ЧГ=0"); + Обработчик.Версия = СтрСоединить(НомераВерсии, "."); + Обработчик.ВерсияЧислом = Обработка.ВерсияЧислом(Обработчик.Версия); + Обработчик.Изменен = Истина; + + УстановленаВерсия.Добавить(Обработчик); + + МаксНомерРедакции = Макс(Число(НомераВерсии[1]), МаксНомерРедакции); + МаксНомерПодРедакции = Макс(Число(НомераВерсии[2]), МаксНомерПодРедакции); + + Если ПодсистемаПредыдущего <> Обработчик.Подсистема Тогда + ОбработчикиОднойБиблиотеки = Ложь; + КонецЕсли; + ПодсистемаПредыдущего = Обработчик.Подсистема; + КонецЕсли; + КонецЦикла; + + Если ОбработчикиОднойБиблиотеки Тогда + Для Каждого Обработчик Из УстановленаВерсия Цикл + НомераВерсии = СтрРазделить(Обработчик.Версия, "."); + НомераВерсии[1] = Формат(МаксНомерРедакции, "ЧН=0; ЧГ=0"); + НомераВерсии[2] = Формат(МаксНомерПодРедакции, "ЧН=0; ЧГ=0"); + Обработчик.Версия = СтрСоединить(НомераВерсии, "."); + Обработчик.ВерсияЧислом = Обработка.ВерсияЧислом(Обработчик.Версия); + НомераВерсии.Удалить(0); + Обработчик.РедакцияЧислом = Обработка.ВерсияЧислом(СтрСоединить(НомераВерсии, ".")); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПереключательФормы + +&НаКлиенте +Процедура УстановитьУпрощенныйРежим() + + РасширенныйРежимФормы = Ложь; + Элементы.ПереключитьРежимФормы.Заголовок = НСтр("ru = 'Перейти в расширенный режим'"); + УстановитьВидимостьЭлементовРежимаФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьРасширенныйРежим() + + РасширенныйРежимФормы = Истина; + Элементы.ПереключитьРежимФормы.Заголовок = НСтр("ru = 'Перейти в упрощенный режим'"); + УстановитьВидимостьЭлементовРежимаФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВидимостьЭлементовРежимаФормы() + + Элементы.СохранитьВРепозиторий.Видимость = РасширенныйРежимФормы; + Элементы.СохранитьВРепозиторийВсеОбработчики.Видимость = РасширенныйРежимФормы; + Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Видимость = РасширенныйРежимФормы; + Элементы.ПоказатьНастройкиERP.Видимость = РасширенныйРежимФормы; + Элементы.ГруппаОтладка.Видимость = РасширенныйРежимФормы; + +КонецПроцедуры + +#КонецОбласти + +&НаСервере +Функция ОбъектОбработки() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции + +&НаКлиенте +Функция КаталогНастроек() + Возврат СтрЗаменить(Объект.КаталогSRC, "\src\","\.settings\"); +КонецФункции + +&НаКлиенте +Функция ВременныйКаталог() +#Если Не ВебКлиент Тогда + ПутьККаталогу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла()); + СоздатьКаталог(ПутьККаталогу); + Возврат ПутьККаталогу; +#КонецЕсли + + Возврат ""; +КонецФункции + +&НаКлиенте +Процедура ЗаписатьИнформациюОбОшибке(ФайлРезультата) + + Если ЗначениеЗаполнено(ФайлРезультата) Тогда + ТекстСообщения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат = Новый ТекстовыйДокумент; + Результат.УстановитьТекст(ТекстСообщения); + Результат.Записать(ФайлРезультата); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьКонстантыОбработки() + + ВерсияКонфигурации = Метаданные.Версия; + НоваяВерсияКонфигурации = Метаданные.Версия; + + Обработка = ОбъектОбработки(); + + СтатусНетПроблем = Обработка.СтатусНетПроблем; + СтатусНеобходимАнализ = Обработка.СтатусНеобходимАнализ; + РазрабатываемыеПодсистемы = Новый ФиксированныйМассив(Обработка.РазрабатываемыеПодсистемы()); + + МножественноеЧисло = Новый ФиксированноеСоответствие(Обработка.МножественноеЧисло); + ЕдинственноеЧисло = Новый ФиксированноеСоответствие(Обработка.ЕдинственноеЧисло); + + АнглийскиеКлассы = Новый Соответствие; + АнглийскиеКлассы.Вставить("Константы", "Constants"); + АнглийскиеКлассы.Вставить("Справочники", "Catalogs"); + АнглийскиеКлассы.Вставить("Документы", "Documents"); + АнглийскиеКлассы.Вставить("ЖурналыДокументов", "DocumentJournals"); + АнглийскиеКлассы.Вставить("Обработки", "DataProcessors"); + АнглийскиеКлассы.Вставить("Перечисления", "Enums"); + АнглийскиеКлассы.Вставить("ПланыВидовХарактеристик", "ChartsOfCharacteristicTypes"); + АнглийскиеКлассы.Вставить("ПланыОбменов", "ExchangePlans"); + АнглийскиеКлассы.Вставить("ПланыСчетов", "ChartsOfAccounts"); + АнглийскиеКлассы.Вставить("ПланыВидовРасчета", "ChartsOfCalculationTypes"); + АнглийскиеКлассы.Вставить("РегистрыСведений", "InformationRegisters"); + АнглийскиеКлассы.Вставить("РегистрыНакопления", "AccumulationRegisters"); + АнглийскиеКлассы.Вставить("РегистрыБухгалтерии", "AccountingRegisters"); + АнглийскиеКлассы.Вставить("РегистрыРасчета", "CalculationRegisters"); + АнглийскиеКлассы.Вставить("БизнесПроцессы", "BusinessProcesses"); + АнглийскиеКлассы.Вставить("Задачи", "Tasks"); + + АнглийскиеИмена = Новый ФиксированноеСоответствие(АнглийскиеКлассы); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПолучитьПараметрыИзСтроки(Знач СтрокаПараметров) + + Результат = Новый Структура; + + СимволДвойныеКавычки = Символ(34); // (") + + МассивПодстрок = СтрРазделить(СтрокаПараметров, ";"); + + Для Каждого СтрокаПараметра Из МассивПодстрок Цикл + + ПозицияПервогоЗнакаРавенства = СтрНайти(СтрокаПараметра, "="); + + // Получаем имя параметра + ИмяПараметра = СокрЛП(Лев(СтрокаПараметра, ПозицияПервогоЗнакаРавенства - 1)); + + // Получаем значение параметра. + ЗначениеПараметра = СокрЛП(Сред(СтрокаПараметра, ПозицияПервогоЗнакаРавенства + 1)); + + Если Лев(ЗначениеПараметра, 1) = СимволДвойныеКавычки + И Прав(ЗначениеПараметра, 1) = СимволДвойныеКавычки Тогда + + ЗначениеПараметра = Сред(ЗначениеПараметра, 2, СтрДлина(ЗначениеПараметра) - 2); + + КонецЕсли; + + Если Не ПустаяСтрока(ИмяПараметра) Тогда + + Результат.Вставить(ИмяПараметра, ЗначениеПараметра); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция ДобавитьРазделительПутиВКонец(Знач Путь) + + Если ПустаяСтрока(Путь) Тогда + Возврат Путь; + КонецЕсли; + + РазделительПути = ПолучитьРазделительПути(); + Если Прав(Путь, 1) <> РазделительПути Тогда + Путь = Путь + РазделительПути; + КонецЕсли; + + Возврат Путь; + +КонецФункции + +&НаКлиенте +Процедура ОформитьГруппуНастроек() + + ШаблонПредставления = НСтр("ru = 'Сохранять в %1'"); + Приемник = Объект.КаталогSRC; + Если НЕ ЗначениеЗаполнено(Объект.КаталогSRC) Тогда + Приемник = НСтр("ru = '<Укажите каталог src репозитория>'"); + КонецЕсли; + + ПредставлениеГруппы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления, Приемник); + + Если Элементы.КаталогФайловОшибок.Видимость Тогда + ШаблонПредставления = ШаблонПредставления + " " + НСтр("ru = 'Ошибки: %2'"); + КаталогОшибок = КаталогФайловОшибок; + Если НЕ ЗначениеЗаполнено(КаталогФайловОшибок) Тогда + КаталогОшибок = НСтр("ru = '<Укажите каталог ошибок>'"); + КонецЕсли; + ПредставлениеГруппы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления, Приемник, КаталогОшибок); + КонецЕсли; + + Элементы.ГруппаНастройкиЗагрузкиВыгрузки.ЗаголовокСвернутогоОтображения = ПредставлениеГруппы; + +КонецПроцедуры + +&НаКлиенте +Процедура ДиалогВыбораКаталогаЗавершение(ВыбранныйКаталог, ИмяРеквизита) Экспорт + + Если ВыбранныйКаталог <> "" Тогда + Если ИмяРеквизита = "КаталогФайловОшибок" Тогда + ЭтотОбъект[ИмяРеквизита] = ВыбранныйКаталог + ?(ЗначениеЗаполнено(ВыбранныйКаталог),ПолучитьРазделительПути(),""); + Иначе + Объект[ИмяРеквизита] = ВыбранныйКаталог + ?(ЗначениеЗаполнено(ВыбранныйКаталог),ПолучитьРазделительПути(),""); + КонецЕсли; + ОформитьГруппуНастроек(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриИзмененииОбъектаПоискаНаСервере(ИмяТабличнойЧасти, ТекстОтбора) + + Если ЗначениеЗаполнено(ТекстОтбора) Тогда + Отбор = ЗаполнитьПолеОтбораПоОбъектуНаСервере(ИмяТабличнойЧасти, ТекстОтбора); + УстановитьОтборОбработчиков(Отбор); + Иначе + ОтключитьОтборОбработчиков("Отбор" + ИмяТабличнойЧасти); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьОтборыОбработчиков() + + Если Элементы.ОбработчикиОбновления.ОтборСтрок <> Неопределено Тогда + Если Элементы.ОбработчикиОбновления.ОтборСтрок.Свойство("ОтборЧитаемыеОбъекты") <> Неопределено Тогда + ПриИзмененииОбъектаПоискаНаСервере("ЧитаемыеОбъекты", ЧитаемыйОбъект); + КонецЕсли; + Если Элементы.ОбработчикиОбновления.ОтборСтрок.Свойство("ОтборИзменяемыеОбъекты") <> Неопределено Тогда + ПриИзмененииОбъектаПоискаНаСервере("ИзменяемыеОбъекты", ИзменяемыйОбъект); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьДанныеФормы(Обработка) + + ЗаполнитьБыстрыеОтборы(); + ОбновитьОтборыОбработчиков(); + Если Обработка.МодулиПодсистем <> Неопределено Тогда + МодулиПодсистем = Новый ФиксированнаяСтруктура(Обработка.МодулиПодсистем); + ОбновитьСписокБиблиотек(Обработка); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокБиблиотек(Обработка) + + СписокПодсистем = Элементы.ТекущаяБиблиотека.СписокВыбора; + СписокПодсистем.Очистить(); + Для Каждого Библиотека Из Обработка.МодулиПодсистем Цикл + СписокПодсистем.Добавить(Библиотека.Ключ); + КонецЦикла; + СписокПодсистем.СортироватьПоЗначению(НаправлениеСортировки.Убыв); + СписокПодсистем.Вставить(0,""); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьОтборОбработчиков(Отбор) + + Если ЗначениеЗаполнено(Элементы.ОбработчикиОбновления.ОтборСтрок) Тогда + ТекущийОтбор = Новый Структура(Элементы.ОбработчикиОбновления.ОтборСтрок); + Для Каждого НовыйОтбор Из Отбор Цикл + ТекущийОтбор.Вставить(НовыйОтбор.Ключ, НовыйОтбор.Значение); + КонецЦикла; + Элементы.ОбработчикиОбновления.ОтборСтрок = Новый ФиксированнаяСтруктура(ТекущийОтбор); + Иначе + Элементы.ОбработчикиОбновления.ОтборСтрок = Новый ФиксированнаяСтруктура(Отбор); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОтключитьОтборОбработчиков(ИмяПоля) + + Если Элементы.ОбработчикиОбновления.ОтборСтрок = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ Элементы.ОбработчикиОбновления.ОтборСтрок.Свойство(ИмяПоля) Тогда + Возврат; + КонецЕсли; + + Если СтрНайти(ИмяПоля, "Отбор") > 0 Тогда + Отбор = Новый Структура(ИмяПоля, Элементы.ОбработчикиОбновления.ОтборСтрок[ИмяПоля]); + НайденныеСтроки = Объект.ОбработчикиОбновления.НайтиСтроки(Отбор); + Для Каждого Строка Из НайденныеСтроки Цикл + Строка[ИмяПоля] = ""; + КонецЦикла; + КонецЕсли; + + Если ЗначениеЗаполнено(Элементы.ОбработчикиОбновления.ОтборСтрок) + И Элементы.ОбработчикиОбновления.ОтборСтрок.Свойство(ИмяПоля) Тогда + + ТекущийОтбор = Новый Структура(Элементы.ОбработчикиОбновления.ОтборСтрок); + ТекущийОтбор.Удалить(ИмяПоля); + Если ЗначениеЗаполнено(ТекущийОтбор) Тогда + Элементы.ОбработчикиОбновления.ОтборСтрок = Новый ФиксированнаяСтруктура(ТекущийОтбор); + Иначе + Элементы.ОбработчикиОбновления.ОтборСтрок = Неопределено; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьБыстрыйОтбор(ИмяБыстрогоОтбора) + + Если ИмяБыстрогоОтбора = "НеобходимАнализ" Тогда + Отбор = Новый Структура("СтатусПроблемы", СтатусНеобходимАнализ); + + ИначеЕсли ИмяБыстрогоОтбора = НСтр("ru = 'Отложенно'") Тогда + Отбор = Новый Структура("РежимВыполнения", НСтр("ru = 'Отложенно'")); + + ИначеЕсли ИмяБыстрогоОтбора = НСтр("ru = 'Монопольно'") Тогда + Отбор = Новый Структура("РежимВыполнения", НСтр("ru = 'Монопольно'")); + + ИначеЕсли ИмяБыстрогоОтбора = НСтр("ru = 'Оперативно'") Тогда + Отбор = Новый Структура("РежимВыполнения", НСтр("ru = 'Оперативно'")); + + ИначеЕсли ИмяБыстрогоОтбора = НСтр("ru = 'Последовательно'") Тогда + Отбор = Новый Структура("РежимВыполненияОтложенныхОбработчиков", НСтр("ru = 'Последовательно'")); + + ИначеЕсли ИмяБыстрогоОтбора = НСтр("ru = 'Параллельно'") Тогда + Отбор = Новый Структура("РежимВыполненияОтложенныхОбработчиков", НСтр("ru = 'Параллельно'")); + + ИначеЕсли СтрНайти(ИмяБыстрогоОтбора, НСтр("ru = 'Начальное заполнение'")) > 0 Тогда + Отбор = Новый Структура("НачальноеЗаполнение", Истина); + + ИначеЕсли СтрНайти(ИмяБыстрогоОтбора, НСтр("ru = 'Обязательный'")) > 0 Тогда + Отбор = Новый Структура("ВыполнятьВГруппеОбязательных", Истина); + + ИначеЕсли СтрНайти(ИмяБыстрогоОтбора, НСтр("ru = 'Многопоточный'")) > 0 Тогда + Отбор = Новый Структура("Многопоточный", Истина); + + ИначеЕсли СтрНайти(ИмяБыстрогоОтбора, НСтр("ru = 'Запись читаемых'")) > 0 Тогда + Отбор = Новый Структура("ЗаписьЧитаемых", Истина); + + ИначеЕсли СтрНайти(ИмяБыстрогоОтбора, НСтр("ru = 'Повторная запись'")) > 0 Тогда + Отбор = Новый Структура("ПовторнаяЗапись", Истина); + + ИначеЕсли СтрНайти(ИмяБыстрогоОтбора, НСтр("ru = 'Тех.проект'")) > 0 Тогда + Отбор = Новый Структура("ТехническийПроект", Истина); + + Иначе + ОтключитьОтборОбработчиков("СтатусПроблемы"); + ОтключитьОтборОбработчиков("РежимВыполнения"); + ОтключитьОтборОбработчиков("РежимВыполненияОтложенныхОбработчиков"); + ОтключитьОтборОбработчиков("НачальноеЗаполнение"); + ОтключитьОтборОбработчиков("ВыполнятьВГруппеОбязательных"); + ОтключитьОтборОбработчиков("Многопоточный"); + ОтключитьОтборОбработчиков("ЗаписьЧитаемых"); + ОтключитьОтборОбработчиков("ПовторнаяЗапись"); + ОтключитьОтборОбработчиков("ТехническийПроект"); + Возврат; + КонецЕсли; + + УстановитьОтборОбработчиков(Отбор); + +КонецПроцедуры + +&НаСервере +Функция ЗаполнитьПолеОтбораПоОбъектуНаСервере(ИмяТабличнойЧасти, Текст) + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | Т.Ссылка КАК Ссылка + |ПОМЕСТИТЬ вт + |ИЗ + | &тз КАК Т + |ГДЕ + | Т.ОбъектМетаданных ПОДОБНО &СтрокаПоиска"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("тз", Объект[ИмяТабличнойЧасти].Выгрузить()); + Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Текст + "%"); + Запрос.Выполнить(); + УникальныеСсылки = Запрос.МенеджерВременныхТаблиц.Таблицы["вт"].ПолучитьДанные().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + ИмяПоляОтбора = "Отбор" + ИмяТабличнойЧасти; + Отбор = Новый Структура("Ссылка"); + Для Каждого Ссылка Из УникальныеСсылки Цикл + Отбор.Ссылка = Ссылка; + Обработчики = Объект.ОбработчикиОбновления.НайтиСтроки(Отбор); + Для Каждого Обработчик Из Обработчики Цикл + Обработчик[ИмяПоляОтбора] = Текст; + КонецЦикла; + КонецЦикла; + + Отбор = Новый Структура(ИмяПоляОтбора, Текст); + + Возврат Отбор; + +КонецФункции + +&НаСервере +Процедура УдалитьОписаниеОбработчиков(Обработчики) + + Если ТипЗнч(Обработчики) = Тип("Массив") Тогда + Для Каждого ИдентификаторСтроки Из Обработчики Цикл + ОчиститьСвязанныеДанныеОбработчика(ИдентификаторСтроки); + КонецЦикла; + Иначе + ОчиститьСвязанныеДанныеОбработчика(Обработчики); + КонецЕсли; + + ПроверитьКонфликтыНаСервере(); + +КонецПроцедуры + +&НаСервере +Процедура ОчиститьСвязанныеДанныеОбработчика(ИдСтроки) + + Обработчик = Объект.ОбработчикиОбновления.НайтиПоИдентификатору(ИдСтроки); + СсылкаОбработчика = Обработчик.Ссылка; + УдалитьДанныеОбработчика("ОбработчикиОбновления", СсылкаОбработчика); + УдалитьДанныеОбработчика("ЧитаемыеОбъекты", СсылкаОбработчика); + УдалитьДанныеОбработчика("ИзменяемыеОбъекты", СсылкаОбработчика); + УдалитьДанныеОбработчика("БлокируемыеОбъекты", СсылкаОбработчика); + УдалитьДанныеОбработчика("ПриоритетыВыполнения", СсылкаОбработчика); + + Отбор = Новый Структура("ИмяОбъекта", Обработчик.ИмяОбъекта); + ЕщеОбработчикиОбъекта = Объект.ОбработчикиОбновления.НайтиСтроки(Отбор); + Для Каждого ЕщеОбработчик Из ЕщеОбработчикиОбъекта Цикл + ЕщеОбработчик.Изменен = Истина; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УдалитьДанныеОбработчика(ИмяТЧ, СсылкаОбработчика) + + ТабличнаяЧасть = Объект[ИмяТЧ]; + УдалитьСтрокиТаблицы(ТабличнаяЧасть, Новый Структура("Ссылка", СсылкаОбработчика)); + Если ИмяТЧ = "ПриоритетыВыполнения" Тогда + УдалитьСтрокиТаблицы(ТабличнаяЧасть, Новый Структура("Обработчик2", СсылкаОбработчика)); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УдалитьСтрокиТаблицы(Таблица, Отбор) + + НайденныеСтроки = Таблица.НайтиСтроки(Отбор); + Для Каждого СтрокаТЧ Из НайденныеСтроки Цикл + Таблица.Удалить(СтрокаТЧ); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьКонфликтыНаСервере() + + Обработка = ОбъектОбработки(); + ОбновитьСведенияОКонфликтахОбработчиков(Обработка); + ЗначениеВРеквизитФормы(Обработка, "Объект"); + +КонецПроцедуры + +&НаСервере +Функция ВыгрузитьТаблицыВMXL(Ссылка = Неопределено, КаталогВыгрузкиТЧ = "") + + Обработка = ОбъектОбработки().Метаданные(); + Результат = Новый Структура; + + Построитель = Новый ПостроительОтчета; + Для Каждого ТЧ Из Обработка.ТабличныеЧасти Цикл + + Если Ссылка <> Неопределено + И (ТЧ.Имя = "ОбработчикиОбновления" + ИЛИ ТЧ.Имя = "ЧитаемыеОбъекты" + ИЛИ ТЧ.Имя = "ИзменяемыеОбъекты" + ИЛИ ТЧ.Имя = "БлокируемыеОбъекты" + ИЛИ ТЧ.Имя = "Ошибки") Тогда + Продолжить; + КонецЕсли; + + ДанныеТЧ = Объект[ТЧ.Имя].Выгрузить(); + Если Ссылка <> Неопределено Тогда + ДанныеТЧ = ДанныеОбработчика(ТЧ.Имя, Ссылка); + КонецЕсли; + ТабДок = Новый ТабличныйДокумент; + Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДанныеТЧ); + + + Построитель.Вывести(ТабДок); + + Область = ТабДок.Область("R1:R3"); + ТабДок.УдалитьОбласть(Область, ТипСмещенияТабличногоДокумента.ПоВертикали); + ПервыеДвеКолонки = "R1C1:R" + Формат(ТабДок.ВысотаТаблицы, "ЧГ=0") + "C2"; + Область = ТабДок.Область(ПервыеДвеКолонки); + ТабДок.УдалитьОбласть(Область, ТипСмещенияТабличногоДокумента.ПоГоризонтали); + + Область = ТабДок.Область(); + Область.ШиринаКолонки = 20; + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать; + + Результат.Вставить(ТЧ.Имя, ТабДок); + + Если НЕ ПустаяСтрока(КаталогВыгрузкиТЧ) Тогда + ИмяФайла = КаталогВыгрузкиТЧ + "\" + ТЧ.Имя + ".mxl"; + ТабДок.Записать(ИмяФайла); + Результат.Вставить(ТЧ.Имя, ИмяФайла); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ДанныеОбработчика(ИмяТЧ, Ссылка) + + Если ИмяТЧ = "ОбработчикиОбновления" Тогда + ДанныеТЧ = Объект[ИмяТЧ].Выгрузить(); + + ИначеЕсли ИмяТЧ = "ПриоритетыВыполнения" Тогда + Отбор = Новый Структура("Ссылка", Ссылка); + ДанныеТЧ = Объект[ИмяТЧ].Выгрузить(Отбор); + + ИначеЕсли ИмяТЧ = "КонфликтыОбработчиков" Тогда + Отбор = Новый Структура("ОбработчикПисатель", Ссылка); + ДанныеТЧ = Объект[ИмяТЧ].Выгрузить(Отбор); + Отбор = Новый Структура("ОбработчикЧитательИлиПисатель2", Ссылка); + ДанныеТЧ2 = Объект[ИмяТЧ].Выгрузить(Отбор); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеТЧ2, ДанныеТЧ); + + КонецЕсли; + + Возврат ДанныеТЧ; + +КонецФункции + +&НаСервере +Процедура РассчитатьОчередьНаСервере() + + ИтерацииОбновления = Неопределено; // ОбновлениеИнформационнойБазыСлужебный.ИтерацииОбновления(); + Если ИтерацииОбновления <> Неопределено Тогда + Обработка = ОбъектОбработки(); + Обработка.ЗаполнитьНомерОчереди(ИтерацииОбновления); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Help/ru.html b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Help/ru.html new file mode 100644 index 000000000..120eadcc5 --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Help/ru.html @@ -0,0 +1,6 @@ + +

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

      +

      Обработка предназначена для формирования и редактирования описания обработчиков обновления.
      Правила формирования описания обработчиков описаны в документации по БСП, раздел Обновление версии ИБ.

      +

      Порядок работы с описанием обработчиков

      +

      1. Загрузить описания обработчиков из кода конфигурации.
      2. Отредактировать описание существующих обработчиков или добавить описание новых обработчиков обновления.
      3. Проконтролировать построение очереди выполнения обработчиков обновления.
      4. Сохранить изменения в файлы git-репозитория конфигурации.

      +

       

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ManagerModule.bsl b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ManagerModule.bsl new file mode 100644 index 000000000..b850e54b5 --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ManagerModule.bsl @@ -0,0 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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/DataProcessors/ОписаниеОбработчиковОбновления/ObjectModule.bsl b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ObjectModule.bsl new file mode 100644 index 000000000..d2466099a --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ObjectModule.bsl @@ -0,0 +1,1773 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем СтатусНетПроблем Экспорт; +Перем СтатусНеобходимАнализ Экспорт; +Перем МножественноеЧисло Экспорт; +Перем ЕдинственноеЧисло Экспорт; +Перем МодулиПодсистем Экспорт; + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + МассивНепроверяемыхРеквизитов = Новый Массив; + + Если ОбработчикиОбновления.Количество() = 1 Тогда + Если СтрНайти(ОбработчикиОбновления[0].Процедура, "ПервыйЗапуск") > 0 Тогда + МассивНепроверяемыхРеквизитов.Добавить("ОбработчикиОбновления.Версия"); + КонецЕсли; + РежимВыполнения = ОбработчикиОбновления[0].РежимВыполнения; + Если РежимВыполнения = "Монопольно" ИЛИ РежимВыполнения = "Оперативно" Тогда + МассивНепроверяемыхРеквизитов.Добавить("ОбработчикиОбновления.ПроцедураЗаполненияДанныхОбновления"); + МассивНепроверяемыхРеквизитов.Добавить("ОбработчикиОбновления.Комментарий"); + КонецЕсли; + КонецЕсли; + + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ЗаполнениеНомеровОчереди + +// Заполняет номер очереди +// +// Параметры: +// ИтерацииОбновления - Массив из см. ОбновлениеИнформационнойБазыСлужебный.ИтерацияОбновления +// +Процедура ЗаполнитьНомерОчереди(ИтерацииОбновления) Экспорт + + ЗагрузитьОбработчикиПодсистем(ИтерацииОбновления); + ПостроитьОчередь(Истина); + УстановитьНомерОчереди(ИтерацииОбновления); + +КонецПроцедуры + +// Загружает описания обработчиков конфигурации в табличные части обработки +// +Процедура ЗагрузитьОбработчики() Экспорт + + НачалоВсего = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Замеры = Новый Структура; + + ОбработчикиПодсистем = НовыйОбработчикиПодсистем(); + ОписаниеПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + Для Каждого ИмяПодсистемы Из ОписаниеПодсистем.Порядок Цикл + + ОписаниеПодсистемы = ОписаниеПодсистем.ПоИменам.Получить(ИмяПодсистемы); + Модуль = ОбщегоНазначения.ОбщийМодуль(ОписаниеПодсистемы.ОсновнойСерверныйМодуль); + + Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); + Модуль.ПриДобавленииОбработчиковОбновления(Обработчики); + + СтрокаОбработчика = ОбработчикиПодсистем.Добавить(); + + СтрокаОбработчика.Подсистема = ИмяПодсистемы; + СтрокаОбработчика.Версия = СокрЛП(ОписаниеПодсистемы.Версия); + СтрокаОбработчика.ИмяОсновногоСерверногоМодуля = ОписаниеПодсистемы.ОсновнойСерверныйМодуль; + СтрокаОбработчика.РежимВыполненияОтложенныхОбработчиков = ОписаниеПодсистемы.РежимВыполненияОтложенныхОбработчиков; + СтрокаОбработчика.Обработчики = Обработчики; + + КонецЦикла; + + ЗагрузитьОбработчикиПодсистем(ОбработчикиПодсистем); + + Замеры.Вставить("ВсегоЗагрузкаОбработчиков", РазностьВремени((ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоВсего)/1000)); + +КонецПроцедуры + +// Загружает описания обработчиков подсистем в табличные части обработки +// +// Параметры: +// ОбработчикиПодсистем - см. НовыйОбработчикиПодсистем +// +Процедура ЗагрузитьОбработчикиПодсистем(ОбработчикиПодсистем) + + РежимыОтложенныхОбработчиков = Неопределено; + Если ТипЗнч(ОбработчикиПодсистем) = Тип("Массив") Тогда + РежимыОтложенныхОбработчиков = Новый Соответствие; + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + Для Каждого Библиотека Из ОбработчикиПодсистем Цикл + Сведения = ОписанияПодсистем.ПоИменам[Библиотека.Подсистема]; + РежимыОтложенныхОбработчиков.Вставить(Библиотека.Подсистема, Сведения.РежимВыполненияОтложенныхОбработчиков); + КонецЦикла; + КонецЕсли; + + ОбработчикиОбновления.Очистить(); + ЧитаемыеОбъекты.Очистить(); + ИзменяемыеОбъекты.Очистить(); + БлокируемыеОбъекты.Очистить(); + ПриоритетыВыполнения.Очистить(); + + МодулиПодсистем = Новый Структура; + Для Каждого Библиотека Из ОбработчикиПодсистем Цикл + + Если РежимыОтложенныхОбработчиков = Неопределено Тогда + РежимВыполненияОтложенныхОбработчиков = Библиотека.РежимВыполненияОтложенныхОбработчиков; + Иначе + РежимВыполненияОтложенныхОбработчиков = РежимыОтложенныхОбработчиков[Библиотека.Подсистема]; + КонецЕсли; + ЗагрузитьТаблицуОбработчиков(Библиотека, РежимВыполненияОтложенныхОбработчиков); + + МодулиПодсистем.Вставить(Библиотека.Подсистема, Библиотека.ИмяОсновногоСерверногоМодуля); + + КонецЦикла; + + ОбновитьСведенияОКонфликтахОбработчиков(); + +КонецПроцедуры + +// Определяет пересечения обработчиков по данным читаемых/изменяемых объектов +// и обновляет данные о заполненности приоритетов выполнения обработчиков +// +// Возвращаемое значение: +// ТаблицаЗначений - новые данные табличной части ОбработчикиОбновления +// +Функция ОбновитьСведенияОКонфликтахОбработчиков() Экспорт + + Запрос = ЗапросВременныхТаблиц(); + ТекстыЗапросов = Новый Массив; + ТекстыЗапросов.Добавить(ТекстЗапросаВременныхТаблиц()); + ТекстыЗапросов.Добавить(ТекстЗапросаОбновленияДанныхОКонфликтах()); + Запрос.Текст = СтрСоединить(ТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов()); + Запрос.УстановитьПараметр("Параллельно", "Параллельно"); + Запрос.УстановитьПараметр("Отложенно", "Отложенно"); + + РезультатЗапросов = Запрос.ВыполнитьПакет(); + ИндексПоследнегоЗапроса = РезультатЗапросов.ВГраница(); + + НовоеОписание = РезультатЗапросов[ИндексПоследнегоЗапроса].Выгрузить(); + НовоеОписание.Сортировать("Подсистема УБЫВ, Процедура"); + ОбработчикиОбновления.Загрузить(НовоеОписание); + + Приоритеты = РезультатЗапросов[ИндексПоследнегоЗапроса-1].Выгрузить(); + ПриоритетыВыполнения.Загрузить(Приоритеты); + + Конфликты = РезультатЗапросов[ИндексПоследнегоЗапроса-2].Выгрузить(); + КонфликтыОбработчиков.Загрузить(Конфликты); + + Возврат НовоеОписание; + +КонецФункции + +// По данным пересечений и указанных приоритетов выполнения обработчиков строит очередь выполнения обработчиков. +// +// Параметры: +// БросатьИсключение - Булево - выбрасывать исключение если есть ошибки +// +// Возвращаемое значение: +// Булево - Истина если очередь построена без ошибок +// +Функция ПостроитьОчередь(БросатьИсключение = Ложь) Экспорт + + НачалоВсего = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Замеры = Новый Структура; + + Ошибки.Очистить(); + Если ОбработчикиОбновления.Количество() = 0 Тогда + ЗагрузитьОбработчики(); + Иначе + ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + ОбновитьСведенияОКонфликтахОбработчиков(); + Замеры.Вставить("ОбновитьСведенияОКонфликтахОбработчиков", РазностьВремени((ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала)/1000)); + КонецЕсли; + + ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + МожноСтроитьОчередь = МожноСтроитьОчередь(); + Замеры.Вставить("МожноСтроитьОчередь", РазностьВремени((ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала)/1000)); + Если НЕ МожноСтроитьОчередь Тогда + ВывестиСообщениеОбОшибках(БросатьИсключение); + Возврат Ложь; + КонецЕсли; + + ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + ЕстьЦиклВыполнения = ЕстьЦиклВыполненияОбработчиков(); + Замеры.Вставить("ЕстьЦиклВыполненияОбработчиков", РазностьВремени((ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала)/1000)); + Если ЕстьЦиклВыполнения Тогда + ВывестиСообщениеОбОшибках(БросатьИсключение); + Возврат Ложь; + КонецЕсли; + + ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Запрос = ЗапросВременныхТаблиц(); + Запрос.УстановитьПараметр("Параллельно", "Параллельно"); + Запрос.УстановитьПараметр("Отложенно", "Отложенно"); + + ТекстыЗапросов = Новый Массив; + ТекстыЗапросов.Добавить(Запрос.Текст); + ТекстыЗапросов.Добавить(ТекстВременныхТаблицПостроенияОчереди()); + + Запрос.Текст = СтрСоединить(ТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов()); + + ОчередьОбработчиков = Новый Соответствие; + НаличиеОбработчиковВОчереди = Новый Соответствие; + МаксимальнаяОчередь = 1; + + ВыборкаПоДобавляемымОбработчикам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Пока ВыборкаПоДобавляемымОбработчикам.Следующий() Цикл + + ДобавляемыйОбработчик = ВыборкаПоДобавляемымОбработчикам.Обработчик; + + ОписаниеОбработчика = Новый Структура; + ОписаниеОбработчика.Вставить("Очередь",1); + ОписаниеОбработчика.Вставить("СвязанныеОбработчики", Новый Соответствие); + + ОчередьОбработчиков.Вставить(ДобавляемыйОбработчик, ОписаниеОбработчика); + + ДобавитьОбработчикВНаличияВОчереди(НаличиеОбработчиковВОчереди, 1, ДобавляемыйОбработчик, МаксимальнаяОчередь); + + Если Не ВыборкаПоДобавляемымОбработчикам.ЕстьПересечения Тогда + Продолжить; + КонецЕсли; + + ВыборкаПоСвязаннымОбработчикам = ВыборкаПоДобавляемымОбработчикам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + Пока ВыборкаПоСвязаннымОбработчикам.Следующий() Цикл + + СвязанныйОбработчик = ВыборкаПоСвязаннымОбработчикам.СвязанныйОбработчик; + + ОписаниеСвязи = Новый Структура; + ОписаниеСвязи.Вставить("ПорядокПомещенияВОчередь", ВыборкаПоСвязаннымОбработчикам.ПорядокПомещенияВОчередь); + ОписаниеСвязи.Вставить("ПовторнаяЗаписьОбъекта", ВыборкаПоСвязаннымОбработчикам.ЕстьПовторнаяЗапись); + + ОчередьОбработчиков[ДобавляемыйОбработчик].СвязанныеОбработчики.Вставить(СвязанныйОбработчик, ОписаниеСвязи); + + КонецЦикла; + + ДанныеРекурсии = Новый Структура("Обработчик", ДобавляемыйОбработчик); + ДанныеРекурсии.Вставить("Связанные", Новый Массив); + ДанныеРекурсии.Вставить("Обработанные", Новый Соответствие); + СдвинутьРекурсивноСвязанныеОбработчики(ОчередьОбработчиков, НаличиеОбработчиковВОчереди, ДобавляемыйОбработчик, МаксимальнаяОчередь, ДанныеРекурсии); + + КонецЦикла; + + // Очистим новую очередь + Если ОбработчикиОбновления.Итог("НоваяОчередь") > 0 Тогда + Для Каждого Описание Из ОбработчикиОбновления Цикл + Описание.НоваяОчередь = 0; + КонецЦикла; + КонецЕсли; + + // Уберем пропуски в номерах очередей, которые могли появится из-за рекурсивных переносов + ИзменениеНомера = 0; + Для НомерОчереди = 1 По МаксимальнаяОчередь Цикл + + Если НаличиеОбработчиковВОчереди.Получить(НомерОчереди) = Неопределено + Или НаличиеОбработчиковВОчереди[НомерОчереди].Количество() = 0 Тогда + ИзменениеНомера = ИзменениеНомера + 1; + Иначе + Для Каждого Обработчик Из НаличиеОбработчиковВОчереди[НомерОчереди] Цикл + + НовыйНомерОчереди = ОчередьОбработчиков[Обработчик.Ключ].Очередь - ИзменениеНомера; + ОписаниеОбработчика = ОбработчикиОбновления.Найти(Обработчик.Ключ ,"Ссылка"); + Если ОписаниеОбработчика.НоваяОчередь <> НовыйНомерОчереди Тогда + ОписаниеОбработчика.НоваяОчередь = НовыйНомерОчереди; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + МенеджерВТ = Запрос.МенеджерВременныхТаблиц; + ОбновитьВременнуюТаблицу(МенеджерВТ, "Обработчики", ОбработчикиОбновления.Выгрузить()); + Замеры.Вставить("ПостроениеОчереди", РазностьВремени((ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала)/1000)); + + ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + ВсеХорошо = НЕ ЕстьОшибкиВПостроенииОчереди(Запрос); + Замеры.Вставить("ЕстьОшибкиВПостроенииОчереди", РазностьВремени((ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала)/1000)); + + Если НЕ ВсеХорошо Тогда + ВывестиСообщениеОбОшибках(БросатьИсключение); + КонецЕсли; + + Замеры.Вставить("ВсегоВПостроенииОчереди", РазностьВремени((ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоВсего)/1000)); + + Возврат ВсеХорошо; + +КонецФункции + +// Проверяет наличие зацикленности выполнения по данным приоритетов для всех обработчиков. +// +// Возвращаемое значение: +// Булево - Истина если есть зацикленность выполнения +// +Функция ЕстьЦиклВыполненияОбработчиков() Экспорт + + ЕстьЦикл = Ложь; + Для Каждого Обработчик Из ОбработчикиОбновления Цикл + ЕстьЦикл = ЕстьЦиклПорядкаВыполненияОбработчика(Обработчик.Ссылка) ИЛИ ЕстьЦикл; + КонецЦикла; + Возврат ЕстьЦикл; + +КонецФункции + +// Проверяет наличие зацикленности выполнения по данным приоритетов для конкретного обработчика. +// +// Параметры: +// ЭтотОбработчик - СтрокаТабличнойЧасти.ОбработчикиОбновления - описание обработчика +// ПриоритетыОбработчика - ТаблицаЗначений - выгрузки табличной части ПриоритетыВыполнения +// СообщатьОбОшибках - Булево +// +// Возвращаемое значение: +// Булево - Истина если есть зацикленность выполнения +// +Функция ЕстьЦиклПорядкаВыполненияОбработчика(Знач ЭтотОбработчик, Знач ПриоритетыОбработчика = Неопределено, СообщатьОбОшибках = Ложь) Экспорт + + СвязанныеОбработчикиДо = Новый Массив; + СвязанныеОбработчикиПосле = Новый Массив; + Если ЭтотОбработчик <> Неопределено И ПриоритетыОбработчика = Неопределено Тогда + Отбор = Новый Структура("Ссылка", ЭтотОбработчик); + ПриоритетыОбработчика = ПриоритетыВыполнения.НайтиСтроки(Отбор); + КонецЕсли; + + Для Каждого Приоритет Из ПриоритетыОбработчика Цикл + Связанный = НовыйОбработчик(Приоритет.Обработчик2, Приоритет.Процедура2); + Если Приоритет.Порядок = "До" Тогда + СвязанныеОбработчикиДо.Добавить(Связанный); + + ИначеЕсли Приоритет.Порядок = "После" Тогда + СвязанныеОбработчикиПосле.Добавить(Связанный); + + КонецЕсли; + КонецЦикла; + + Если СвязанныеОбработчикиДо.Количество() = 0 И СвязанныеОбработчикиПосле.Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; + + ЕстьЦикл = Ложь; + Путь = Новый Массив; + Если СвязанныеОбработчикиДо.Количество() > 0 Тогда + ЕстьЦикл = ЕстьЦиклВПорядкеОбработчиков(ЭтотОбработчик, СвязанныеОбработчикиДо, "До", Путь); + КонецЕсли; + + Если НЕ ЕстьЦикл И СвязанныеОбработчикиПосле.Количество() > 0 Тогда + ЕстьЦикл = ЕстьЦиклВПорядкеОбработчиков(ЭтотОбработчик, СвязанныеОбработчикиПосле, "После", Путь); + КонецЕсли; + + Если ЕстьЦикл Тогда + ОписаниеОбработчика = ОбработчикиОбновления.НайтиСтроки(Новый Структура("Ссылка", ЭтотОбработчик)); + Путь.Добавить(ОписаниеОбработчика[0].Процедура); + ТекстПути = СтрСоединить(Путь, Символы.ПС); + + ТекстСообщения = НСтр("ru = 'Обнаружен цикл порядка выполнения:'") + Символы.ПС + "%Путь%"; + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Путь%", ТекстПути); + ДобавитьОшибку(ОписаниеОбработчика[0].Процедура, ТекстСообщения); + Если СообщатьОбОшибках Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + КонецЕсли; + + Возврат ЕстьЦикл; + +КонецФункции + +#КонецОбласти + +#Область ИнициализацияИЗаполнение + +Процедура ИнициализацияКонстант() + + СтатусНетПроблем = НСтр("ru = 'Нет проблем'"); + СтатусНеобходимАнализ = НСтр("ru = 'Необходим анализ'"); + + МножественноеЧисло = Новый Соответствие; + МножественноеЧисло.Вставить("Константа", "Константы"); + МножественноеЧисло.Вставить("Справочник", "Справочники"); + МножественноеЧисло.Вставить("Документ", "Документы"); + МножественноеЧисло.Вставить("ПланВидовХарактеристик", "ПланыВидовХарактеристик"); + МножественноеЧисло.Вставить("ПланОбмена", "ПланыОбмена"); + МножественноеЧисло.Вставить("ПланСчетов", "ПланыСчетов"); + МножественноеЧисло.Вставить("ПланВидовРасчета", "ПланыВидовРасчета"); + МножественноеЧисло.Вставить("РегистрСведений", "РегистрыСведений"); + МножественноеЧисло.Вставить("РегистрНакопления", "РегистрыНакопления"); + МножественноеЧисло.Вставить("РегистрБухгалтерии", "РегистрыБухгалтерии"); + МножественноеЧисло.Вставить("РегистрРасчета", "РегистрыРасчета"); + МножественноеЧисло.Вставить("БизнесПроцесс", "БизнесПроцессы"); + МножественноеЧисло.Вставить("Задача", "Задачи"); + МножественноеЧисло.Вставить("Отчет", "Отчеты"); + МножественноеЧисло.Вставить("Обработка", "Обработки"); + МножественноеЧисло.Вставить("ОбщийМодуль", "ОбщийМодуль"); + + ЕдинственноеЧисло = Новый Соответствие; + Для Каждого Класс Из МножественноеЧисло Цикл + ЕдинственноеЧисло.Вставить(Класс.Значение, Класс.Ключ); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ЗагрузкаОбработчиков + +Процедура ЗагрузитьТаблицуОбработчиков(Библиотека, РежимВыполненияОтложенныхОбработчиков) + + Для Каждого ОписаниеОбработчика Из Библиотека.Обработчики Цикл + + Имена = СтрРазделить(ОписаниеОбработчика.Процедура, "."); + Имена.Удалить(Имена.ВГраница()); + + НовоеОписание = ОбработчикиОбновления.Добавить(); + НовоеОписание.Ссылка = Новый УникальныйИдентификатор; + ЗаполнитьЗначенияСвойств(НовоеОписание, ОписаниеОбработчика); + НовоеОписание.Подсистема = Библиотека.Подсистема; + НовоеОписание.ИмяОсновногоСерверногоМодуля = Библиотека.ИмяОсновногоСерверногоМодуля; + НовоеОписание.ИмяБиблиотеки = СтрЗаменить(Библиотека.ИмяОсновногоСерверногоМодуля, "ОбновлениеИнформационнойБазы", ""); + НовоеОписание.ИмяОбъекта = СтрСоединить(Имена,"."); + НовоеОписание.РежимВыполненияОтложенныхОбработчиков = РежимВыполненияОтложенныхОбработчиков; + НовоеОписание.ВерсияЧислом = ВерсияЧислом(ОписаниеОбработчика.Версия); + ЗаполнитьВерсиюРедакции(НовоеОписание); + + ЗагрузитьОбъектыОбработчика("ЧитаемыеОбъекты", НовоеОписание.Ссылка, ОписаниеОбработчика.ЧитаемыеОбъекты); + ЗагрузитьОбъектыОбработчика("ИзменяемыеОбъекты", НовоеОписание.Ссылка, ОписаниеОбработчика.ИзменяемыеОбъекты); + ЗагрузитьОбъектыОбработчика("БлокируемыеОбъекты",НовоеОписание.Ссылка, ОписаниеОбработчика.БлокируемыеОбъекты); + ЗагрузитьПриоритетыОбработчика(НовоеОписание.Ссылка, ОписаниеОбработчика.ПриоритетыВыполнения); + КонецЦикла; + +КонецПроцедуры + +Процедура ЗагрузитьОбъектыОбработчика(ИмяТабличнойЧасти, СсылкаОбработчика, ОбъектыСтрокой) + + Если ПустаяСтрока(ОбъектыСтрокой) Тогда + Возврат; + КонецЕсли; + + ИменаОбъектов = СтрРазделить(ОбъектыСтрокой, ",", Ложь); + Для Каждого ИмяОбъекта Из ИменаОбъектов Цикл + + Если ИмяТабличнойЧасти = "БлокируемыеОбъекты" Тогда + ВзведенФлагБлокировки = ВзвестиФлагБлокировки("ИзменяемыеОбъекты", ИмяОбъекта); + Если НЕ ВзведенФлагБлокировки Тогда + ВзведенФлагБлокировки = ВзвестиФлагБлокировки("ЧитаемыеОбъекты", ИмяОбъекта); + КонецЕсли; + КонецЕсли; + + Если ИмяТабличнойЧасти <> "БлокируемыеОбъекты" ИЛИ НЕ ВзведенФлагБлокировки Тогда + ТабличнаяЧасть = ЭтотОбъект[ИмяТабличнойЧасти]; // ТабличнаяЧасть - + НовоеОписание = ТабличнаяЧасть.Добавить(); + НовоеОписание.Ссылка = СсылкаОбработчика; + НовоеОписание.ОбъектМетаданных = СокрЛП(ИмяОбъекта); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ВзвестиФлагБлокировки(ИмяТЧ, ИмяОбъекта) + + Отбор = Новый Структура("ОбъектМетаданных", ИмяОбъекта); + НайденныеОбъекты = ЭтотОбъект[ИмяТЧ].НайтиСтроки(Отбор); + Для Каждого НайденныйОбъект Из НайденныеОбъекты Цикл + НайденныйОбъект.БлокироватьИнтерфейс = Истина; + КонецЦикла; + Возврат НайденныеОбъекты.Количество() > 0; + +КонецФункции + +Процедура ЗагрузитьПриоритетыОбработчика(СсылкаОбработчика, ПриоритетыОбработчика) + + Если ПриоритетыОбработчика = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого Приоритет Из ПриоритетыОбработчика Цикл + НовыйПриоритет = ПриоритетыВыполнения.Добавить(); + НовыйПриоритет.Ссылка = СсылкаОбработчика; + НовыйПриоритет.Порядок = Приоритет.Порядок; + НовыйПриоритет.Процедура2 = Приоритет.Процедура; + КонецЦикла; + +КонецПроцедуры + +Функция НовыйОбработчикиПодсистем() + + ОбработчикиПодсистем = Новый ТаблицаЗначений; + + ОбработчикиПодсистем.Колонки.Добавить("Подсистема"); + ОбработчикиПодсистем.Колонки.Добавить("Версия"); + ОбработчикиПодсистем.Колонки.Добавить("ИмяОсновногоСерверногоМодуля"); + ОбработчикиПодсистем.Колонки.Добавить("РежимВыполненияОтложенныхОбработчиков"); + ОбработчикиПодсистем.Колонки.Добавить("Обработчики"); + + Возврат ОбработчикиПодсистем; + +КонецФункции + +Процедура ЗаполнитьВерсиюРедакции(Описание) + + Если СтрЧислоВхождений(Описание.Версия, ".") <> 3 Тогда + Возврат; + КонецЕсли; + + НомераВерсии = СтрРазделить(Описание.Версия, "."); + НомераВерсии.Удалить(0); + Описание.РедакцияЧислом = ВерсияЧислом(СтрСоединить(НомераВерсии, ".")); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбнаружениеКонфликтов + +Функция ТекстЗапросаОбновленияДанныхОКонфликтах() + + Возврат + "УНИЧТОЖИТЬ КонфликтыОбработчиков + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Т.ОбъектМетаданных КАК ОбъектМетаданных, + | Т.ОбработчикПисатель КАК ОбработчикПисатель, + | Т.ОбработчикЧитательИлиПисатель2 КАК ОбработчикЧитательИлиПисатель2, + | МАКСИМУМ(Т.ЗаписьЧитаемых) КАК ЗаписьЧитаемых, + | МАКСИМУМ(Т.ПовторнаяЗапись) КАК ПовторнаяЗапись + |ПОМЕСТИТЬ ПересеченияОбработчиков + |ИЗ + |( + | // Изменяемые объекты читаются другими обработчиками + | ВЫБРАТЬ + | ИзменяемыеОбъекты.Ссылка КАК ОбработчикПисатель, + | ЧитаемыеОбъектыДругимиОбработчиками.Ссылка КАК ОбработчикЧитательИлиПисатель2, + | ИзменяемыеОбъекты.ОбъектМетаданных КАК ОбъектМетаданных, + | ИСТИНА КАК ЗаписьЧитаемых, + | ЛОЖЬ КАК ПовторнаяЗапись + | ИЗ + | ИзменяемыеОбъекты КАК ИзменяемыеОбъекты + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЧитаемыеОбъекты КАК ЧитаемыеОбъектыДругимиОбработчиками + | ПО ИзменяемыеОбъекты.ОбъектМетаданных = ЧитаемыеОбъектыДругимиОбработчиками.ОбъектМетаданных + | И ИзменяемыеОбъекты.РежимВыполнения = ЧитаемыеОбъектыДругимиОбработчиками.РежимВыполнения + | И ИзменяемыеОбъекты.Ссылка <> ЧитаемыеОбъектыДругимиОбработчиками.Ссылка + | ГДЕ + | ИзменяемыеОбъекты.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И ИзменяемыеОбъекты.РежимВыполнения = &Отложенно + | И ЧитаемыеОбъектыДругимиОбработчиками.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И ЧитаемыеОбъектыДругимиОбработчиками.РежимВыполнения = &Отложенно + | + | ОБЪЕДИНИТЬ ВСЕ + | + | // Читаемые объекты изменяются другими обработчиками + | ВЫБРАТЬ + | ИзменяемыеОбъектыДругимиОбработчиками.Ссылка КАК ОбработчикПисатель, + | ЧитаемыеОбъекты.Ссылка КАК ОбработчикЧитательИлиПисатель2, + | ЧитаемыеОбъекты.ОбъектМетаданных КАК ОбъектМетаданных, + | ИСТИНА КАК ЗаписьЧитаемых, + | ЛОЖЬ КАК ПовторнаяЗапись + | ИЗ + | ЧитаемыеОбъекты КАК ЧитаемыеОбъекты + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИзменяемыеОбъекты КАК ИзменяемыеОбъектыДругимиОбработчиками + | ПО ЧитаемыеОбъекты.ОбъектМетаданных = ИзменяемыеОбъектыДругимиОбработчиками.ОбъектМетаданных + | И ЧитаемыеОбъекты.РежимВыполнения = ИзменяемыеОбъектыДругимиОбработчиками.РежимВыполнения + | И ЧитаемыеОбъекты.Ссылка <> ИзменяемыеОбъектыДругимиОбработчиками.Ссылка + | ГДЕ + | ЧитаемыеОбъекты.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И ЧитаемыеОбъекты.РежимВыполнения = &Отложенно + | И ИзменяемыеОбъектыДругимиОбработчиками.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И ИзменяемыеОбъектыДругимиОбработчиками.РежимВыполнения = &Отложенно + | + | ОБЪЕДИНИТЬ ВСЕ + | + | // Изменяемые объекты изменяются другими обработчиками + | ВЫБРАТЬ + | ИзменяемыеОбъекты.Ссылка КАК ОбработчикПисатель, + | ИзменяемыеОбъектыДругимиОбработчиками.Ссылка КАК ОбработчикЧитательИлиПисатель2, + | ИзменяемыеОбъекты.ОбъектМетаданных КАК ОбъектМетаданных, + | ЛОЖЬ КАК ЗаписьЧитаемых, + | ИСТИНА КАК ПовторнаяЗапись + | ИЗ + | ИзменяемыеОбъекты КАК ИзменяемыеОбъекты + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИзменяемыеОбъекты КАК ИзменяемыеОбъектыДругимиОбработчиками + | ПО ИзменяемыеОбъекты.ОбъектМетаданных = ИзменяемыеОбъектыДругимиОбработчиками.ОбъектМетаданных + | И ИзменяемыеОбъекты.РежимВыполнения = ИзменяемыеОбъектыДругимиОбработчиками.РежимВыполнения + | И ИзменяемыеОбъекты.Ссылка <> ИзменяемыеОбъектыДругимиОбработчиками.Ссылка + | ГДЕ + | ИзменяемыеОбъекты.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И ИзменяемыеОбъекты.РежимВыполнения = &Отложенно + | И ИзменяемыеОбъектыДругимиОбработчиками.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И ИзменяемыеОбъектыДругимиОбработчиками.РежимВыполнения = &Отложенно + | + |) КАК Т + | + |СГРУППИРОВАТЬ ПО + | Т.ОбъектМетаданных, + | Т.ОбработчикПисатель, + | Т.ОбработчикЧитательИлиПисатель2 + | + |ИНДЕКСИРОВАТЬ ПО + | ОбработчикПисатель, + | ОбработчикЧитательИлиПисатель2 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Т.ОбработчикПисатель КАК ОбработчикПисатель, + | Т.ОбработчикЧитательИлиПисатель2 КАК ОбработчикЧитательИлиПисатель2, + | МАКСИМУМ(Т.ЗаписьЧитаемых) КАК ЗаписьЧитаемых, + | МАКСИМУМ(Т.ПовторнаяЗапись) КАК ПовторнаяЗапись + |ПОМЕСТИТЬ втКонфликты + |ИЗ + | (ВЫБРАТЬ + | Конфликты.ОбработчикПисатель КАК ОбработчикПисатель, + | Конфликты.ОбработчикЧитательИлиПисатель2 КАК ОбработчикЧитательИлиПисатель2, + | Конфликты.ЗаписьЧитаемых КАК ЗаписьЧитаемых, + | Конфликты.ПовторнаяЗапись КАК ПовторнаяЗапись + | ИЗ + | ПересеченияОбработчиков КАК Конфликты + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | Конфликты.ОбработчикЧитательИлиПисатель2 КАК ОбработчикПисатель, + | Конфликты.ОбработчикПисатель КАК ОбработчикЧитательИлиПисатель2, + | Конфликты.ЗаписьЧитаемых КАК ЗаписьЧитаемых, + | Конфликты.ПовторнаяЗапись КАК ПовторнаяЗапись + | ИЗ + | ПересеченияОбработчиков КАК Конфликты + | ) КАК Т + | + |СГРУППИРОВАТЬ ПО + | Т.ОбработчикПисатель, + | Т.ОбработчикЧитательИлиПисатель2 + | + |ИНДЕКСИРОВАТЬ ПО + | ОбработчикПисатель, + | ОбработчикЧитательИлиПисатель2 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Конфликты.ОбработчикПисатель КАК ОбработчикПисатель, + | Конфликты.ОбработчикЧитательИлиПисатель2 КАК ОбработчикЧитательИлиПисатель2, + | Конфликты.ЗаписьЧитаемых КАК ЗаписьЧитаемых, + | Конфликты.ПовторнаяЗапись КАК ПовторнаяЗапись, + | ВЫБОР КОГДА ЕСТЬNULL(Приоритеты.Порядок, &ПустаяСтрока) = ЕСТЬNULL(ПриоритетыНаоборот.Порядок, &ПустаяСтрока) + | И ЕСТЬNULL(Приоритеты.Порядок, &ПустаяСтрока) <> &Любой + | ТОГДА &ПустаяСтрока + | ИНАЧЕ + | ЕСТЬNULL(Приоритеты.Порядок, + | ЕСТЬNULL(ПриоритетыНаоборот.Порядок, &ПустаяСтрока)) + | КОНЕЦ <> &ПустаяСтрока КАК ЗаданПорядокВыполнения, + | ВЫБОР КОГДА ЕСТЬNULL(Приоритеты.Порядок, &ПустаяСтрока) = ЕСТЬNULL(ПриоритетыНаоборот.Порядок, &ПустаяСтрока) + | И ЕСТЬNULL(Приоритеты.Порядок, &ПустаяСтрока) <> &Любой + | ТОГДА &ПустаяСтрока + | ИНАЧЕ + | ЕСТЬNULL(Приоритеты.Порядок, + | ЕСТЬNULL(ВЫБОР ПриоритетыНаоборот.Порядок + | КОГДА &До ТОГДА &После + | КОГДА &После ТОГДА &До + | КОГДА &Любой ТОГДА &Любой + | КОНЕЦ, + | &ПустаяСтрока)) + | КОНЕЦ КАК Порядок + |ПОМЕСТИТЬ втПриоритеты + |ИЗ + | втКонфликты КАК Конфликты + | ЛЕВОЕ СОЕДИНЕНИЕ ПриоритетыВыполнения КАК Приоритеты + | ПО Конфликты.ОбработчикПисатель = Приоритеты.Ссылка + | И Конфликты.ОбработчикЧитательИлиПисатель2 = Приоритеты.Обработчик2 + | + | ЛЕВОЕ СОЕДИНЕНИЕ ПриоритетыВыполнения КАК ПриоритетыНаоборот + | ПО Конфликты.ОбработчикПисатель = ПриоритетыНаоборот.Обработчик2 + | И Конфликты.ОбработчикЧитательИлиПисатель2 = ПриоритетыНаоборот.Ссылка + | + |ИНДЕКСИРОВАТЬ ПО + | ОбработчикПисатель, + | ОбработчикЧитательИлиПисатель2 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Приоритеты.ОбработчикПисатель КАК ОбработчикПисатель, + | Приоритеты.ОбработчикЧитательИлиПисатель2 КАК ОбработчикЧитательИлиПисатель2, + | ЕСТЬNULL(Обработчики1.ОчередьОтложеннойОбработки, """") КАК Очередь1, + | ЕСТЬNULL(Обработчики2.ОчередьОтложеннойОбработки, """") КАК Очередь2, + | Приоритеты.ЗаписьЧитаемых КАК ЗаписьЧитаемых, + | Приоритеты.ПовторнаяЗапись КАК ПовторнаяЗапись, + | ВЫБОР + | КОГДА Приоритеты.ЗаданПорядокВыполнения + | ТОГДА Приоритеты.ЗаданПорядокВыполнения + | ИНАЧЕ + | ВЫБОР + | КОГДА Обработчики1.ОчередьОтложеннойОбработки > 0 И Обработчики2.ОчередьОтложеннойОбработки > 0 + | И Обработчики1.ОчередьОтложеннойОбработки < Обработчики2.ОчередьОтложеннойОбработки + | ТОГДА &До + | КОГДА Обработчики1.ОчередьОтложеннойОбработки > 0 И Обработчики2.ОчередьОтложеннойОбработки > 0 + | И Обработчики1.ОчередьОтложеннойОбработки > Обработчики2.ОчередьОтложеннойОбработки + | ТОГДА &После + | ИНАЧЕ + | &ПустаяСтрока + | КОНЕЦ <> &ПустаяСтрока + | КОНЕЦ КАК ЗаданПорядокВыполнения, + | ВЫБОР + | КОГДА Приоритеты.ЗаданПорядокВыполнения + | ТОГДА Приоритеты.Порядок + | ИНАЧЕ + | ВЫБОР + | КОГДА Обработчики1.ОчередьОтложеннойОбработки > 0 И Обработчики2.ОчередьОтложеннойОбработки > 0 + | И Обработчики1.ОчередьОтложеннойОбработки < Обработчики2.ОчередьОтложеннойОбработки + | ТОГДА &До + | КОГДА Обработчики1.ОчередьОтложеннойОбработки > 0 И Обработчики2.ОчередьОтложеннойОбработки > 0 + | И Обработчики1.ОчередьОтложеннойОбработки > Обработчики2.ОчередьОтложеннойОбработки + | ТОГДА &После + | ИНАЧЕ + | &ПустаяСтрока + | КОНЕЦ + | КОНЕЦ КАК Порядок + |ПОМЕСТИТЬ НовыеПриоритеты + |ИЗ + | втПриоритеты КАК Приоритеты + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики1 + | ПО Приоритеты.ОбработчикПисатель = Обработчики1.Ссылка + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики2 + | ПО Приоритеты.ОбработчикЧитательИлиПисатель2 = Обработчики2.Ссылка + | + |ИНДЕКСИРОВАТЬ ПО + | ОбработчикПисатель, + | ОбработчикЧитательИлиПисатель2 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Проблемы.ОбработчикПисатель КАК Обработчик, + | МАКСИМУМ(Проблемы.ЗаписьЧитаемых) КАК ЗаписьЧитаемых, + | МАКСИМУМ(Проблемы.ПовторнаяЗапись) КАК ПовторнаяЗапись, + | МИНИМУМ(Проблемы.ЗаданПорядокВыполнения) КАК ЗаданПорядокВыполнения + | + |ПОМЕСТИТЬ Проблемы + |ИЗ + | НовыеПриоритеты КАК Проблемы + | + |СГРУППИРОВАТЬ ПО + | Проблемы.ОбработчикПисатель + | + |ИНДЕКСИРОВАТЬ ПО + | Обработчик + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Конфликты.ОбъектМетаданных КАК ОбъектМетаданных, + | Конфликты.ОбработчикПисатель КАК ОбработчикПисатель, + | Конфликты.ОбработчикЧитательИлиПисатель2 КАК ОбработчикЧитательИлиПисатель2, + | Конфликты.ЗаписьЧитаемых КАК ЗаписьЧитаемых, + | Конфликты.ПовторнаяЗапись КАК ПовторнаяЗапись, + | ЕСТЬNULL(ОбработчикиПисатели.Процедура, """") КАК ПроцедураПисатель, + | ЕСТЬNULL(ОбработчикиЧитателиИлиПисатели2.Процедура, """") КАК ПроцедураЧитательИлиПисатель2 + |ИЗ + | ПересеченияОбработчиков КАК Конфликты + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК ОбработчикиПисатели + | ПО Конфликты.ОбработчикПисатель = ОбработчикиПисатели.Ссылка + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК ОбработчикиЧитателиИлиПисатели2 + | ПО Конфликты.ОбработчикЧитательИлиПисатель2 = ОбработчикиЧитателиИлиПисатели2.Ссылка + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных, + | ОбработчикПисатель, + | ОбработчикЧитательИлиПисатель2 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Приоритеты.ОбработчикПисатель КАК Ссылка, + | Приоритеты.ОбработчикЧитательИлиПисатель2 КАК Обработчик2, + | Приоритеты.Порядок КАК Порядок, + | Приоритеты.ЗаданПорядокВыполнения КАК ЗаданПорядокВыполнения, + | Приоритеты.ЗаписьЧитаемых КАК ЗаписьЧитаемых, + | Приоритеты.ПовторнаяЗапись КАК ПовторнаяЗапись, + | ЕСТЬNULL(ОбработчикиПисатели.Процедура, """") КАК Процедура1, + | ЕСТЬNULL(ОбработчикиПисатели.Подсистема, """") КАК Подсистема1, + | ЕСТЬNULL(ОбработчикиПисатели.Комментарий, """") КАК Комментарий1, + | ЕСТЬNULL(ОбработчикиЧитателиПисатели2.Процедура, """") КАК Процедура2, + | ЕСТЬNULL(ОбработчикиЧитателиПисатели2.Подсистема, """") КАК Подсистема2, + | ЕСТЬNULL(ОбработчикиЧитателиПисатели2.Комментарий, """") КАК Комментарий2 + |ИЗ + | НовыеПриоритеты КАК Приоритеты + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК ОбработчикиПисатели + | ПО Приоритеты.ОбработчикПисатель = ОбработчикиПисатели.Ссылка + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК ОбработчикиЧитателиПисатели2 + | ПО Приоритеты.ОбработчикЧитательИлиПисатель2 = ОбработчикиЧитателиПисатели2.Ссылка + | + |УПОРЯДОЧИТЬ ПО + | Процедура1, + | Процедура2 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Обработчики.Ссылка КАК Ссылка, + | Обработчики.Подсистема КАК Подсистема, + | Обработчики.ИмяОсновногоСерверногоМодуля КАК ИмяОсновногоСерверногоМодуля, + | Обработчики.НачальноеЗаполнение КАК НачальноеЗаполнение, + | Обработчики.Версия КАК Версия, + | Обработчики.ВерсияЧислом КАК ВерсияЧислом, + | Обработчики.РедакцияЧислом КАК РедакцияЧислом, + | Обработчики.Процедура КАК Процедура, + | Обработчики.РежимВыполнения КАК РежимВыполнения, + | Обработчики.РежимВыполненияОтложенныхОбработчиков КАК РежимВыполненияОтложенныхОбработчиков, + | Обработчики.ВыполнятьВГруппеОбязательных КАК ВыполнятьВГруппеОбязательных, + | Обработчики.Приоритет КАК Приоритет, + | Обработчики.ОбщиеДанные КАК ОбщиеДанные, + | Обработчики.УправлениеОбработчиками КАК УправлениеОбработчиками, + | Обработчики.Комментарий КАК Комментарий, + | Обработчики.Идентификатор КАК Идентификатор, + | Обработчики.ПроцедураПроверки КАК ПроцедураПроверки, + | Обработчики.ПроцедураЗаполненияДанныхОбновления КАК ПроцедураЗаполненияДанныхОбновления, + | Обработчики.ОчередьОтложеннойОбработки КАК ОчередьОтложеннойОбработки, + | Обработчики.ЗапускатьТолькоВГлавномУзле КАК ЗапускатьТолькоВГлавномУзле, + | Обработчики.ЗапускатьИВПодчиненномУзлеРИБСФильтрами КАК ЗапускатьИВПодчиненномУзлеРИБСФильтрами, + | Обработчики.Многопоточный КАК Многопоточный, + | Обработчики.Изменен КАК Изменен, + | Обработчики.ТехническийПроект КАК ТехническийПроект, + | Обработчики.ИмяБиблиотеки КАК ИмяБиблиотеки, + | Обработчики.ИмяОбъекта КАК ИмяОбъекта, + | ЕСТЬNULL(Проблемы.ЗаписьЧитаемых, ЛОЖЬ) КАК ЗаписьЧитаемых, + | ЕСТЬNULL(Проблемы.ПовторнаяЗапись, ЛОЖЬ) КАК ПовторнаяЗапись, + | ЕСТЬNULL(Проблемы.ЗаданПорядокВыполнения, ЛОЖЬ) КАК ЗаданПорядокВыполнения, + | ВЫБОР + | КОГДА НЕ ЕСТЬNULL(Проблемы.ЗаданПорядокВыполнения, ЛОЖЬ) + | И (ЕСТЬNULL(Проблемы.ЗаписьЧитаемых, ЛОЖЬ) ИЛИ ЕСТЬNULL(Проблемы.ПовторнаяЗапись, ЛОЖЬ)) + | ТОГДА &НеобходимАнализ + | ИНАЧЕ &НетПроблем + | КОНЕЦ КАК СтатусПроблемы + |ИЗ + | Обработчики КАК Обработчики + | ЛЕВОЕ СОЕДИНЕНИЕ Проблемы КАК Проблемы + | ПО Обработчики.Ссылка = Проблемы.Обработчик"; + +КонецФункции + +Функция ЗапросВременныхТаблиц() + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.Текст = ТекстЗапросаВременныхТаблиц(); + Запрос.УстановитьПараметр("НеобходимАнализ", СтатусНеобходимАнализ); + Запрос.УстановитьПараметр("НетПроблем", СтатусНетПроблем); + Запрос.УстановитьПараметр("До", "До"); + Запрос.УстановитьПараметр("После", "После"); + Запрос.УстановитьПараметр("Любой", "Любой"); + Запрос.УстановитьПараметр("ПустаяСтрока", ""); + + Запрос.УстановитьПараметр("Обработчики", ОбработчикиОбновления.Выгрузить()); + Запрос.УстановитьПараметр("ЧитаемыеОбъекты", ЧитаемыеОбъекты.Выгрузить()); + Запрос.УстановитьПараметр("ИзменяемыеОбъекты", ИзменяемыеОбъекты.Выгрузить()); + Запрос.УстановитьПараметр("БлокируемыеОбъекты", БлокируемыеОбъекты.Выгрузить()); + Запрос.УстановитьПараметр("ПриоритетыВыполнения", ПриоритетыВыполнения.Выгрузить()); + Запрос.УстановитьПараметр("КонфликтыОбработчиков", КонфликтыОбработчиков.Выгрузить()); + + Возврат Запрос; + +КонецФункции + +Функция ТекстЗапросаВременныхТаблиц() + + ТекстыЗапросов = Новый Массив; + + #Область ОписаниеОбработчиков + ТекстыЗапросов.Добавить(ТекстВременнойТаблицыОбработчиков()); + #КонецОбласти + + #Область ЧитаемыеОбъекты + ТекстЗапросаЧитаемыеОбъекты = + "ВЫБРАТЬ + | ЧитаемыеОбъекты.Ссылка КАК Ссылка, + | ЧитаемыеОбъекты.ОбъектМетаданных КАК ОбъектМетаданных, + | ЧитаемыеОбъекты.БлокироватьИнтерфейс КАК БлокироватьИнтерфейс + |ПОМЕСТИТЬ втЧитаемыеОбъекты + |ИЗ + | &ЧитаемыеОбъекты КАК ЧитаемыеОбъекты + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЧитаемыеОбъекты.Ссылка КАК Ссылка, + | ЧитаемыеОбъекты.ОбъектМетаданных КАК ОбъектМетаданных, + | Обработчики.РежимВыполнения КАК РежимВыполнения, + | Обработчики.НачальноеЗаполнение КАК НачальноеЗаполнение, + | Обработчики.РежимВыполненияОтложенныхОбработчиков КАК РежимВыполненияОтложенныхОбработчиков, + | ЧитаемыеОбъекты.БлокироватьИнтерфейс КАК БлокироватьИнтерфейс + |ПОМЕСТИТЬ ЧитаемыеОбъекты + |ИЗ + | втЧитаемыеОбъекты КАК ЧитаемыеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики + | ПО ЧитаемыеОбъекты.Ссылка = Обработчики.Ссылка + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка, + | ОбъектМетаданных + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ втЧитаемыеОбъекты"; + ТекстыЗапросов.Добавить(ТекстЗапросаЧитаемыеОбъекты); + #КонецОбласти + + #Область ИзменяемыеОбъекты + ТекстыЗапросов.Добавить(СтрЗаменить(ТекстЗапросаЧитаемыеОбъекты, "ЧитаемыеОбъекты", "ИзменяемыеОбъекты")); + #КонецОбласти + + #Область БлокируемыеОбъекты + ТекстыЗапросов.Добавить( + "ВЫБРАТЬ + | БлокируемыеОбъекты.Ссылка КАК Ссылка, + | БлокируемыеОбъекты.ОбъектМетаданных КАК ОбъектМетаданных + |ПОМЕСТИТЬ БлокируемыеОбъекты + |ИЗ + | &БлокируемыеОбъекты КАК БлокируемыеОбъекты"); + #КонецОбласти + + #Область ПриоритетыВыполнения + ТекстыЗапросов.Добавить( + "ВЫБРАТЬ + | ПриоритетыВыполнения.Ссылка КАК Ссылка, + | ПриоритетыВыполнения.Порядок КАК Порядок, + | ПриоритетыВыполнения.Процедура2 КАК Процедура2, + | ПриоритетыВыполнения.ЗаданПорядокВыполнения КАК ЗаданПорядокВыполнения, + | ПриоритетыВыполнения.ПовторнаяЗапись КАК ПовторнаяЗапись, + | ПриоритетыВыполнения.ЗаписьЧитаемых КАК ЗаписьЧитаемых + |ПОМЕСТИТЬ втПриоритеты + |ИЗ + | &ПриоритетыВыполнения КАК ПриоритетыВыполнения + | + |ИНДЕКСИРОВАТЬ ПО + | Процедура2 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПриоритетыВыполнения.Ссылка КАК Ссылка, + | Обработчики2.Ссылка КАК Обработчик2, + | ПриоритетыВыполнения.Порядок КАК Порядок, + | Обработчики1.Процедура КАК Процедура, + | ПриоритетыВыполнения.Процедура2 КАК Процедура2, + | ПриоритетыВыполнения.ЗаданПорядокВыполнения КАК ЗаданПорядокВыполнения, + | ПриоритетыВыполнения.ПовторнаяЗапись КАК ПовторнаяЗапись, + | ПриоритетыВыполнения.ЗаписьЧитаемых КАК ЗаписьЧитаемых + |ПОМЕСТИТЬ ПриоритетыВыполнения + |ИЗ + | втПриоритеты КАК ПриоритетыВыполнения + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики1 + | ПО ПриоритетыВыполнения.Ссылка = Обработчики1.Ссылка + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики2 + | ПО ПриоритетыВыполнения.Процедура2 = Обработчики2.Процедура + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка, + | Обработчик2 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ втПриоритеты"); + #КонецОбласти + + #Область КонфликтыОбработчиков + ТекстыЗапросов.Добавить( + "ВЫБРАТЬ + | КонфликтыОбработчиков.ОбработчикПисатель КАК ОбработчикПисатель, + | КонфликтыОбработчиков.ОбработчикЧитательИлиПисатель2 КАК ОбработчикЧитательИлиПисатель2, + | КонфликтыОбработчиков.ОбъектМетаданных КАК ОбъектМетаданных, + | КонфликтыОбработчиков.ЗаписьЧитаемых КАК ЗаписьЧитаемых, + | КонфликтыОбработчиков.ПовторнаяЗапись КАК ПовторнаяЗапись + |ПОМЕСТИТЬ КонфликтыОбработчиков + |ИЗ + | &КонфликтыОбработчиков КАК КонфликтыОбработчиков + | + |ИНДЕКСИРОВАТЬ ПО + | ОбработчикПисатель, + | ОбработчикЧитательИлиПисатель2, + | ОбъектМетаданных"); + #КонецОбласти + + Возврат СтрСоединить(ТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов()); + +КонецФункции + +Функция ТекстВременнойТаблицыОбработчиков() + + Возврат + "ВЫБРАТЬ + | Обработчики.Ссылка КАК Ссылка, + | Обработчики.Подсистема КАК Подсистема, + | Обработчики.ИмяОсновногоСерверногоМодуля КАК ИмяОсновногоСерверногоМодуля, + | Обработчики.НачальноеЗаполнение КАК НачальноеЗаполнение, + | Обработчики.Версия КАК Версия, + | Обработчики.ВерсияЧислом КАК ВерсияЧислом, + | Обработчики.РедакцияЧислом КАК РедакцияЧислом, + | Обработчики.Процедура КАК Процедура, + | Обработчики.РежимВыполнения КАК РежимВыполнения, + | Обработчики.РежимВыполненияОтложенныхОбработчиков КАК РежимВыполненияОтложенныхОбработчиков, + | Обработчики.ВыполнятьВГруппеОбязательных КАК ВыполнятьВГруппеОбязательных, + | Обработчики.Приоритет КАК Приоритет, + | Обработчики.ОбщиеДанные КАК ОбщиеДанные, + | Обработчики.УправлениеОбработчиками КАК УправлениеОбработчиками, + | Обработчики.Комментарий КАК Комментарий, + | Обработчики.Идентификатор КАК Идентификатор, + | Обработчики.ПроцедураПроверки КАК ПроцедураПроверки, + | Обработчики.ПроцедураЗаполненияДанныхОбновления КАК ПроцедураЗаполненияДанныхОбновления, + | Обработчики.ОчередьОтложеннойОбработки КАК ОчередьОтложеннойОбработки, + | Обработчики.НоваяОчередь КАК НоваяОчередь, + | Обработчики.ЗапускатьТолькоВГлавномУзле КАК ЗапускатьТолькоВГлавномУзле, + | Обработчики.ЗапускатьИВПодчиненномУзлеРИБСФильтрами КАК ЗапускатьИВПодчиненномУзлеРИБСФильтрами, + | Обработчики.Многопоточный КАК Многопоточный, + | Обработчики.СтатусПроблемы КАК СтатусПроблемы, + | Обработчики.ЗаписьЧитаемых КАК ЗаписьЧитаемых, + | Обработчики.ПовторнаяЗапись КАК ПовторнаяЗапись, + | Обработчики.Изменен КАК Изменен, + | Обработчики.ТехническийПроект КАК ТехническийПроект, + | Обработчики.ИмяБиблиотеки КАК ИмяБиблиотеки, + | Обработчики.ИмяОбъекта КАК ИмяОбъекта + |ПОМЕСТИТЬ Обработчики + |ИЗ + | &Обработчики КАК Обработчики + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка, + | Процедура"; + +КонецФункции + +#КонецОбласти + +#Область ПостроениеОчереди + +Функция ТекстВременныхТаблицПостроенияОчереди() + + Возврат + "ВЫБРАТЬ + | Конфликты.ОбработчикПисатель КАК ОбработчикПисатель, + | Конфликты.ОбработчикЧитательИлиПисатель2 КАК ОбработчикЧитательИлиПисатель2, + | + | ОбработчикиПисатели.РежимВыполнения КАК РежимВыполнения1, + | ОбработчикиЧитателиПисатели2.РежимВыполнения КАК РежимВыполнения2, + | + | Конфликты.ПовторнаяЗапись КАК ПовторнаяЗапись, + | ОбработчикиПисатели.Процедура КАК Процедура1, + | ОбработчикиЧитателиПисатели2.Процедура КАК Процедура2 + | + |ПОМЕСТИТЬ ПроблемыОбработчиков + |ИЗ + | КонфликтыОбработчиков КАК Конфликты + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК ОбработчикиПисатели + | ПО Конфликты.ОбработчикПисатель = ОбработчикиПисатели.Ссылка + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК ОбработчикиЧитателиПисатели2 + | ПО Конфликты.ОбработчикЧитательИлиПисатель2 = ОбработчикиЧитателиПисатели2.Ссылка + | + |ГДЕ + | ОбработчикиПисатели.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И ОбработчикиПисатели.РежимВыполнения = &Отложенно + | + | И ОбработчикиЧитателиПисатели2.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И ОбработчикиЧитателиПисатели2.РежимВыполнения = &Отложенно + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Приоритеты.Ссылка КАК Обработчик1, + | Приоритеты.Обработчик2 КАК Обработчик2, + | Приоритеты.Порядок КАК Порядок, + | + | Обработчики1.ВерсияЧислом КАК ВерсияЧислом1, + | Обработчики1.Процедура КАК Процедура1, + | + | Обработчики2.ВерсияЧислом КАК ВерсияЧислом2, + | Обработчики2.Процедура КАК Процедура2, + | + | Обработчики1.РежимВыполнения КАК РежимВыполнения1, + | Обработчики2.РежимВыполнения КАК РежимВыполнения2 + | + |ПОМЕСТИТЬ ПриоритетыОбработчиков + |ИЗ + | ПриоритетыВыполнения КАК Приоритеты + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики1 + | ПО Приоритеты.Ссылка = Обработчики1.Ссылка + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики2 + | ПО Приоритеты.Обработчик2 = Обработчики2.Ссылка + | + |ГДЕ + | Обработчики1.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И Обработчики1.РежимВыполнения = &Отложенно + | + | И Обработчики2.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И Обработчики2.РежимВыполнения = &Отложенно + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Т.Обработчик КАК Обработчик, + | Т.ВерсияЧислом КАК ВерсияЧислом, + | Т.Процедура КАК Процедура, + | СУММА(Т.КоличествоПересечений) КАК КоличествоПересечений, + | СУММА(Т.КоличествоСначалаОбработчик1) КАК КоличествоСначалаОбработчик1, + | СУММА(Т.КоличествоЛюбойПорядок) КАК КоличествоЛюбойПорядок + |ПОМЕСТИТЬ ПересеченияОбработчиков + |ИЗ + | (ВЫБРАТЬ + | ОбработчикиОбновления.Ссылка КАК Обработчик, + | ОбработчикиОбновления.ВерсияЧислом КАК ВерсияЧислом, + | ОбработчикиОбновления.Процедура КАК Процедура, + | 0 КАК КоличествоПересечений, + | 0 КАК КоличествоСначалаОбработчик1, + | 0 КАК КоличествоЛюбойПорядок + | ИЗ + | Обработчики КАК ОбработчикиОбновления + | ГДЕ + | ОбработчикиОбновления.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И ОбработчикиОбновления.РежимВыполнения = &Отложенно + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | Приоритеты.Обработчик1 КАК Обработчик, + | Приоритеты.ВерсияЧислом1 КАК ВерсияЧислом, + | Приоритеты.Процедура1 КАК Процедура, + | 1 КАК КоличествоПересечений, + | ВЫБОР + | КОГДА Приоритеты.Порядок = &До + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК КоличествоСначалаОбработчик1, + | ВЫБОР + | КОГДА Приоритеты.Порядок = &Любой + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК КоличествоЛюбойПорядок + | ИЗ + | ПриоритетыОбработчиков КАК Приоритеты + | ) КАК Т + | + |СГРУППИРОВАТЬ ПО + | Т.Обработчик, + | Т.Процедура, + | Т.ВерсияЧислом + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПроблемыОбработчиков.ОбработчикПисатель КАК Обработчик1, + | ПроблемыОбработчиков.ОбработчикЧитательИлиПисатель2 КАК Обработчик2, + | МАКСИМУМ(ПроблемыОбработчиков.ПовторнаяЗапись) КАК ЕстьПовторнаяЗапись + |ПОМЕСТИТЬ ПовторнаяЗапись + |ИЗ + | ПроблемыОбработчиков КАК ПроблемыОбработчиков + | + |СГРУППИРОВАТЬ ПО + | ПроблемыОбработчиков.ОбработчикПисатель, + | ПроблемыОбработчиков.ОбработчикЧитательИлиПисатель2 + | + |ИМЕЮЩИЕ + | МАКСИМУМ(ПроблемыОбработчиков.ПовторнаяЗапись) = ИСТИНА + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Пересечения.Обработчик КАК Обработчик, + | Пересечения.ВерсияЧислом КАК ВерсияЧислом, + | Пересечения.Процедура КАК Процедура, + | Пересечения.КоличествоПересечений <> 0 КАК ЕстьПересечения, + | Пересечения.КоличествоСначалаОбработчик1 КАК СначалаОбработчик1, + | Пересечения.КоличествоЛюбойПорядок КАК ЛюбойПорядок, + | ЕСТЬNULL(Приоритеты.Обработчик2, """") КАК СвязанныйОбработчик, + | ЕСТЬNULL(Приоритеты.ВерсияЧислом2, 0) КАК СвязаннаяВерсияЧислом, + | ЕСТЬNULL(Приоритеты.Процедура2, """") КАК СвязаннаяПроцедура, + | ЕСТЬNULL(Приоритеты.Порядок, """") КАК ПорядокПомещенияВОчередь, + | ЕСТЬNULL(ПовторнаяЗапись.ЕстьПовторнаяЗапись, ЛОЖЬ) КАК ЕстьПовторнаяЗапись + |ИЗ + | ПересеченияОбработчиков КАК Пересечения + | ЛЕВОЕ СОЕДИНЕНИЕ ПриоритетыОбработчиков КАК Приоритеты + | ПО Пересечения.Обработчик = Приоритеты.Обработчик1 + | + | ЛЕВОЕ СОЕДИНЕНИЕ ПовторнаяЗапись КАК ПовторнаяЗапись + | ПО Приоритеты.Обработчик1 = ПовторнаяЗапись.Обработчик1 + | И Приоритеты.Обработчик2 = ПовторнаяЗапись.Обработчик2 + | + |УПОРЯДОЧИТЬ ПО + | ЕстьПересечения, + | СначалаОбработчик1 УБЫВ, + | ЛюбойПорядок УБЫВ, + | ВерсияЧислом, + | Процедура, + | СвязаннаяВерсияЧислом, + | СвязаннаяПроцедура + |ИТОГИ + | МАКСИМУМ(ЕстьПересечения) + |ПО + | Обработчик"; + +КонецФункции + +Процедура ДобавитьОбработчикВНаличияВОчереди(НаличиеОбработчиковВОчереди, Очередь, Обработчик, МаксимальнаяОчередь) + Если НаличиеОбработчиковВОчереди.Получить(Очередь) = Неопределено Тогда + НаличиеОбработчиковВОчереди.Вставить(Очередь, Новый Соответствие); + КонецЕсли; + НаличиеОбработчиковВОчереди[Очередь].Вставить(Обработчик); + + Если МаксимальнаяОчередь < Очередь Тогда + МаксимальнаяОчередь = Очередь; + КонецЕсли; +КонецПроцедуры + +Процедура СдвинутьРекурсивноСвязанныеОбработчики(ОчередьОбработчиков, НаличиеОбработчиковВОчереди, Обработчик, МаксимальнаяОчередь, ДанныеРекурсии) + + СвязанныеОбработчики = ОчередьОбработчиков[Обработчик].СвязанныеОбработчики; + + Для каждого СвязанныйОбработчик Из СвязанныеОбработчики Цикл + + Если Обработчик = СвязанныйОбработчик.Ключ Тогда + Продолжить; + КонецЕсли; + + Если ОчередьОбработчиков[СвязанныйОбработчик.Ключ] = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если СвязанныйОбработчик.Значение.ПорядокПомещенияВОчередь = "Любой" Тогда + + Если СвязанныйОбработчик.Значение.ПовторнаяЗаписьОбъекта + И ОчередьОбработчиков[Обработчик].Очередь = ОчередьОбработчиков[СвязанныйОбработчик.Ключ].Очередь Тогда + + УдалитьОбработчикИзНаличияВОчереди(НаличиеОбработчиковВОчереди, ОчередьОбработчиков[Обработчик].Очередь, Обработчик); + ОчередьОбработчиков[Обработчик].Очередь = ОчередьОбработчиков[Обработчик].Очередь + 1; + ДобавитьОбработчикВНаличияВОчереди(НаличиеОбработчиковВОчереди, ОчередьОбработчиков[Обработчик].Очередь, Обработчик, МаксимальнаяОчередь); + + // Сдвинуть уже отработанные связанные обработчики + СдвинутьРекурсивноСвязанныеОбработчики(ОчередьОбработчиков, НаличиеОбработчиковВОчереди, Обработчик, МаксимальнаяОчередь, ДанныеРекурсии); + КонецЕсли; + + ИначеЕсли СвязанныйОбработчик.Значение.ПорядокПомещенияВОчередь = "До" Тогда + + Если ОчередьОбработчиков[Обработчик].Очередь >= ОчередьОбработчиков[СвязанныйОбработчик.Ключ].Очередь Тогда + + УдалитьОбработчикИзНаличияВОчереди(НаличиеОбработчиковВОчереди, ОчередьОбработчиков[СвязанныйОбработчик.Ключ].Очередь, СвязанныйОбработчик.Ключ); + ОчередьОбработчиков[СвязанныйОбработчик.Ключ].Очередь = ОчередьОбработчиков[Обработчик].Очередь + 1; + ДобавитьОбработчикВНаличияВОчереди(НаличиеОбработчиковВОчереди, ОчередьОбработчиков[СвязанныйОбработчик.Ключ].Очередь, СвязанныйОбработчик.Ключ, МаксимальнаяОчередь); + + // Сдвинуть связанные обработчики связанного обработчика + СдвинутьРекурсивноСвязанныеОбработчики(ОчередьОбработчиков, НаличиеОбработчиковВОчереди, СвязанныйОбработчик.Ключ, МаксимальнаяОчередь, ДанныеРекурсии); + КонецЕсли; + + ИначеЕсли СвязанныйОбработчик.Значение.ПорядокПомещенияВОчередь = "После" Тогда + + Если ОчередьОбработчиков[СвязанныйОбработчик.Ключ].Очередь >= ОчередьОбработчиков[Обработчик].Очередь Тогда + + УдалитьОбработчикИзНаличияВОчереди(НаличиеОбработчиковВОчереди, ОчередьОбработчиков[Обработчик].Очередь, Обработчик); + ОчередьОбработчиков[Обработчик].Очередь = ОчередьОбработчиков[СвязанныйОбработчик.Ключ].Очередь + 1; + ДобавитьОбработчикВНаличияВОчереди(НаличиеОбработчиковВОчереди, ОчередьОбработчиков[Обработчик].Очередь, Обработчик, МаксимальнаяОчередь); + + // Сдвинуть уже отработанные связанные обработчики + СдвинутьРекурсивноСвязанныеОбработчики(ОчередьОбработчиков, НаличиеОбработчиковВОчереди, Обработчик, МаксимальнаяОчередь, ДанныеРекурсии); + КонецЕсли; + + Иначе + ТекстИсключения = НСтр("ru = 'Ошибка при формировании очереди.'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура УдалитьОбработчикИзНаличияВОчереди(НаличиеОбработчиковВОчереди, Очередь, Обработчик) + НаличиеОбработчиковВОчереди[Очередь].Удалить(Обработчик); +КонецПроцедуры + +Функция ЕстьОшибкиВПостроенииОчереди(Запрос, СообщатьОбОшибках = Истина) + + ТекстЗапроса = + "ВЫБРАТЬ + | ПриоритетыОбработчиков.Процедура1 КАК Обработчик1, + | ПриоритетыОбработчиков.Процедура2 КАК Обработчик2, + | ""ПроблемаВПорядкеСледованияОбработчиков"" КАК Проблема + |ИЗ + | ПриоритетыОбработчиков КАК ПриоритетыОбработчиков + | ЛЕВОЕ СОЕДИНЕНИЕ ПовторнаяЗапись КАК ДвойнаяЗапись + | ПО ПриоритетыОбработчиков.Обработчик1 = ДвойнаяЗапись.Обработчик1 + | И ПриоритетыОбработчиков.Обработчик2 = ДвойнаяЗапись.Обработчик2 + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики1 + | ПО ПриоритетыОбработчиков.Обработчик1 = Обработчики1.Ссылка + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики2 + | ПО ПриоритетыОбработчиков.Обработчик2 = Обработчики2.Ссылка + | + |ГДЕ + | (ПриоритетыОбработчиков.Порядок = &До + | И Обработчики1.НоваяОчередь >= Обработчики2.НоваяОчередь + | ИЛИ ПриоритетыОбработчиков.Порядок = &Любой + | И НЕ ДвойнаяЗапись.Обработчик1 ЕСТЬ NULL + | И Обработчики1.НоваяОчередь = Обработчики2.НоваяОчередь) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | Обработчики.Процедура КАК Обработчик1, + | """" КАК Обработчик2, + | ""ПроблемаНеПерваяОчередь"" КАК Проблема + |ИЗ + | Обработчики КАК Обработчики + | ЛЕВОЕ СОЕДИНЕНИЕ ПриоритетыОбработчиков КАК ПриоритетыОбработчиков + | ПО Обработчики.Ссылка = ПриоритетыОбработчиков.Обработчик1 + |ГДЕ + | НЕ Обработчики.НачальноеЗаполнение + | И Обработчики.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И Обработчики.РежимВыполнения = &Отложенно + | И Обработчики.НоваяОчередь <> 1 + | И ПриоритетыОбработчиков.Обработчик1 ЕСТЬ NULL "; + + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + ЕстьПроблема = НЕ РезультатЗапроса.Пустой(); + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + ТекстСообщения = НСтр("ru = 'Ошибка в алгоритме построения очереди: обработчик %Обработчик1% должен быть отнесен к очереди 1.'"); + Если Выборка.Проблема = "ПроблемаВПорядкеСледованияОбработчиков" Тогда + ТекстСообщения = НСтр("ru = 'Ошибка в алгоритме построения очереди: обработчики %Обработчик1% и %Обработчик2% размещены в неправильном порядке.'"); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Обработчик2%", Выборка.Обработчик2); + КонецЕсли; + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Обработчик1%", Выборка.Обработчик1); + Если СообщатьОбОшибках Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + ДобавитьОшибку(Выборка.Обработчик1, ТекстСообщения); + КонецЦикла; + + Возврат ЕстьПроблема; + +КонецФункции + +Функция МожноСтроитьОчередь() + + Запрос = ЗапросВременныхТаблиц(); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЕСТЬNULL(Обработчики1.Процедура, """") КАК Обработчик1, + | ЕСТЬNULL(Обработчики2.Процедура, """") КАК Обработчик2 + |ИЗ + | ПриоритетыВыполнения КАК Приоритеты + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики1 + | ПО Приоритеты.Ссылка = Обработчики1.Ссылка + | + | ЛЕВОЕ СОЕДИНЕНИЕ Обработчики КАК Обработчики2 + | ПО Приоритеты.Обработчик2 = Обработчики2.Ссылка + | + |ГДЕ + | НЕ Обработчики1.НачальноеЗаполнение + | И НЕ Обработчики2.НачальноеЗаполнение + | И НЕ Приоритеты.ЗаданПорядокВыполнения + | + |УПОРЯДОЧИТЬ ПО + | Обработчик1, + | Обработчик2"; + + ТекстыЗапросов = Новый Массив; + ТекстыЗапросов.Добавить(Запрос.Текст); + ТекстыЗапросов.Добавить(ТекстЗапроса); + Запрос.Текст = СтрСоединить(ТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов()); + + Выборка = Запрос.Выполнить().Выбрать(); + ВсеХорошо = Выборка.Количество() = 0; + Пока Выборка.Следующий() Цикл + ТекстСообщения = НСтр("ru = 'Не завершены работы по паре обработчиков %Обработчик% - %СвязанныйОбработчик%.'"); + ТекстСообщения = ТекстСообщения + Символы.ПС + НСтр("ru = 'Статус проблемы: %ПорядокПомещенияВОчередь%'"); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Обработчик%", Выборка.Обработчик1); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СвязанныйОбработчик%", Выборка.Обработчик2); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ПорядокПомещенияВОчередь%", НСтр("ru = 'Не задан приоритет выполнения.'")); + ДобавитьОшибку(Выборка.Обработчик1, ТекстСообщения); + КонецЦикла; + + Возврат ВсеХорошо; + +КонецФункции + +Процедура ДобавитьОшибку(ПроцедураОбработчик, ТекстСообщения) + + НоваяОшибка = Ошибки.Добавить(); + НоваяОшибка.ОбъектМетаданных = ИмяОбъектаИзПроцедурыОбработки(ПроцедураОбработчик); + НоваяОшибка.Обработчик = ПроцедураОбработчик; + НоваяОшибка.Сообщение = ТекстСообщения; + +КонецПроцедуры + +Процедура ОбновитьВременнуюТаблицу(МенеджерВТ, ИмяТаблицы, НоваяТаблица, ПоляИндексирования = "Ссылка") + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МенеджерВТ; + + ТекстЗапросаУничтожитьВТ = ""; + Если Запрос.МенеджерВременныхТаблиц.Таблицы.Найти(ИмяТаблицы) <> Неопределено Тогда + ТекстЗапросаУничтожитьВТ = "УНИЧТОЖИТЬ " + ИмяТаблицы + "; + |"; + КонецЕсли; + + ТекстЗапросаВТ = + "ВЫБРАТЬ + |%Поля + |ПОМЕСТИТЬ %ИмяПриемника + |ИЗ + | &Таблица КАК Т + |%Индексы"; + + МассивПолей = Новый Массив; + Для Каждого Колонка Из НоваяТаблица.Колонки Цикл + МассивПолей.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(" Т.%1 КАК %1", Колонка.Имя)); + КонецЦикла; + + ТекстПоляТаблицы = СтрСоединить(МассивПолей, "," + Символы.ПС); + ТекстПоляИндексирования = ?(ПоляИндексирования = "", "", "ИНДЕКСИРОВАТЬ ПО " + ПоляИндексирования); + + ТекстЗапросаВТ = СтрЗаменить(ТекстЗапросаВТ, "%Поля", ТекстПоляТаблицы); + ТекстЗапросаВТ = СтрЗаменить(ТекстЗапросаВТ, "%ИмяПриемника", ИмяТаблицы); + ТекстЗапросаВТ = СтрЗаменить(ТекстЗапросаВТ, "%Индексы", ТекстПоляИндексирования); + + Запрос.Текст = ТекстЗапросаУничтожитьВТ + ТекстЗапросаВТ; + Запрос.УстановитьПараметр("Таблица", НоваяТаблица); + + Запрос.Выполнить(); + +КонецПроцедуры + +Функция ИмяОбъектаИзПроцедурыОбработки(ИмяПроцедурыОбработки) + + ЧастиИмени = СтрРазделить(ИмяПроцедурыОбработки, "."); + Если ЧастиИмени.Количество() = 2 Тогда + ИмяОбъекта = "ОбщийМодуль." + ЧастиИмени[0]; + Иначе + ЧастиИмени[0] = ЕдинственноеЧисло[ЧастиИмени[0]]; + ЧастиИмени.Удалить(ЧастиИмени.ВГраница()); + ИмяОбъекта = СтрСоединить(ЧастиИмени, "."); + КонецЕсли; + + Возврат ИмяОбъекта; + +КонецФункции + +Процедура ВывестиСообщениеОбОшибках(БросатьИсключение = Истина) + + Если БросатьИсключение Тогда + ИмяСобытия = НСтр("ru='Построение очереди обработчиков обновления'", ОбщегоНазначения.КодОсновногоЯзыка()); + Для Каждого Ошибка Из Ошибки Цикл + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Ошибка.ОбъектМетаданных); + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + ОбъектМетаданных, + Ошибка.Обработчик, + Ошибка.Сообщение); + КонецЦикла; + ВызватьИсключение НСтр("ru = 'При построении очереди отложенных обработчиков обнаружены ошибки. + |Необходимо их исправить с помощью встроенной обработки ""Описание обработчиков обновления"". + |Для этого требуется сохранить и запустить обработку как внешнюю. + |Ошибки перечислены в журнале регистрации.'"); + Иначе + Для Каждого Ошибка Из Ошибки Цикл + ОбщегоНазначения.СообщитьПользователю(Ошибка.Сообщение); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ЕстьЦиклПорядкаВыполнения + +// Параметры: +// Обработчик - СтрокаТабличнойЧасти.ОбработчикиОбновления - описание обработчика +// СвязанныеОбработчики - Массив из ДокументСсылка +// НаправлениеОбхода - Строка +// Путь - Массив +// Возвращаемое значение: +// Булево - истина если есть цикл в порядке выполнения обработчиков +// +Функция ЕстьЦиклВПорядкеОбработчиков(Обработчик, СвязанныеОбработчики, НаправлениеОбхода, Путь) + + Для каждого СвязанныйОбработчик Из СвязанныеОбработчики Цикл + + Если СвязанныйОбработчик.Ссылка = Обработчик Тогда + Путь.Добавить(СвязанныйОбработчик.Процедура); + Возврат Истина; + КонецЕсли; + + СвязанныеОбработчикиТекущего = СвязанныеОбработчики(СвязанныйОбработчик.Ссылка, НаправлениеОбхода); + + Если СвязанныеОбработчикиТекущего.Количество() > 0 Тогда + Если ЕстьЦиклВПорядкеОбработчиков(Обработчик, СвязанныеОбработчикиТекущего, НаправлениеОбхода, Путь) Тогда + Путь.Добавить(СвязанныйОбработчик.Процедура); + Возврат Истина; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +Функция СвязанныеОбработчики(Обработчик, НаправлениеОбхода) + + Отбор = Новый Структура("Ссылка, Порядок", Обработчик, НаправлениеОбхода); + ПриоритетыОбработчика = ПриоритетыВыполнения.НайтиСтроки(Отбор); + Результат = Новый Массив; + Для Каждого Приоритет Из ПриоритетыОбработчика Цикл + Связанный = НовыйОбработчик(Приоритет.Обработчик2, Приоритет.Процедура2); + Результат.Добавить(Связанный); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция НовыйОбработчик(Ссылка = "", ИмяПроцедуры = "") + + Возврат Новый Структура("Ссылка, Процедура", Ссылка, ИмяПроцедуры); + +КонецФункции + +#КонецОбласти + +#Область Прочее + +Процедура УстановитьНомерОчереди(ИтерацииОбновления) + + ИменаКолонок = "Подсистема,ИмяОсновногоСерверногоМодуля"; + Подсистемы = ОбработчикиОбновления.Выгрузить(,ИменаКолонок); + Подсистемы.Свернуть(ИменаКолонок); + + ПереопределенияОчереди = ОбработчикиСПереопределеннойОчередью(); + РазрабатываемыеПодсистемы = РазрабатываемыеПодсистемы(); + Для Каждого Библиотека Из ИтерацииОбновления Цикл + + Если ПереопределенаОчередьБиблиотеки(Библиотека, ПереопределенияОчереди) Тогда + Продолжить; + КонецЕсли; + + ЗаполнятьОчередь = РазрабатываемыеПодсистемы.Найти(Библиотека.Подсистема) <> Неопределено; + Если НЕ ЗаполнятьОчередь Тогда + Продолжить; + КонецЕсли; + + Отбор = Новый Структура("РежимВыполнения", "Отложенно"); + Отбор.Вставить("ОчередьОтложеннойОбработки", 0); + ОтложенныеОбработчики = Библиотека.Обработчики.НайтиСтроки(Отбор); // см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления() + Для Каждого Обработчик Из ОтложенныеОбработчики Цикл + Отбор = Новый Структура; + Отбор.Вставить("Версия", Обработчик.Версия); + Отбор.Вставить("Процедура", Обработчик.Процедура); + Отбор.Вставить("Идентификатор", Строка(Обработчик.Идентификатор)); + НайденныеОписания = ОбработчикиОбновления.НайтиСтроки(Отбор); + Для Каждого Описание Из НайденныеОписания Цикл + Обработчик.ОчередьОтложеннойОбработки = Описание.НоваяОчередь; + КонецЦикла; + КонецЦикла;// по отложенным обработчикам + + КонецЦикла;// по библиотекам + +КонецПроцедуры + +// Параметры: +// Библиотека - Строка +// ПереопределенияОчереди - см. ОбработчикиСПереопределеннойОчередью +// Возвращаемое значение: +// Булево +// +Функция ПереопределенаОчередьБиблиотеки(Библиотека, ПереопределенияОчереди) + + ОтборПоПодсистеме = Новый Структура("Подсистема", Библиотека.Подсистема); + НайденныеПереопределения = ПереопределенияОчереди.НайтиСтроки(ОтборПоПодсистеме); + Для каждого Переопределение Из НайденныеПереопределения Цикл + Отбор = Новый Структура; + Отбор.Вставить("Версия", Переопределение.Версия); + Отбор.Вставить("Процедура", Переопределение.Процедура); + Если ЗначениеЗаполнено(Переопределение.Идентификатор) Тогда + Отбор.Вставить("Идентификатор", Новый УникальныйИдентификатор(Переопределение.Идентификатор)); + КонецЕсли; + НайденныеОбработчики = Библиотека.Обработчики.НайтиСтроки(Отбор); + Для Каждого Обработчик Из НайденныеОбработчики Цикл + Обработчик.ОчередьОтложеннойОбработки = Переопределение.ОчередьУстановленная; + КонецЦикла; + КонецЦикла; + + Возврат НайденныеПереопределения.Количество() > 0; + +КонецФункции + +// Параметры: +// ИменаБиблиотек - Неопределено +// Возвращаемое значение: +// ТаблицаЗначений: +// * Подсистема - Строка +// * Процедура - Строка +// * Идентификатор - Строка +// * РежимВыполнения - Строка +// * Версия - Строка +// * ВерсияЧислом - Число +// * НоваяОчередь - Строка +// * ОчередьОтложеннойОбработки - Строка +// * Ссылка - Строка +// +Функция ОбработчикиСПереопределеннойОчередью(ИменаБиблиотек = Неопределено) + + Если ИменаБиблиотек = Неопределено Тогда + ИменаБиблиотек = РазрабатываемыеПодсистемы(); + КонецЕсли; + + ТекстыЗапросов = Новый Массив; + ТекстыЗапросов.Добавить(ТекстВременнойТаблицыОбработчиков()); + ТекстыЗапросов.Добавить(ТекстЗапросаПереопределенныхОчередейОтложенныхОбработчиков()); + + Запрос = Новый Запрос; + Запрос.Текст = СтрСоединить(ТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов()); + Запрос.УстановитьПараметр("Обработчики", ОбработчикиОбновления.Выгрузить()); + Запрос.УстановитьПараметр("Параллельно", "Параллельно"); + Запрос.УстановитьПараметр("Отложенно", "Отложенно"); + Запрос.УстановитьПараметр("РазрабатываемыеПодсистемы", ИменаБиблиотек); + + Обработчики = Запрос.Выполнить().Выгрузить(); + + Возврат Обработчики; + +КонецФункции + +Функция ТекстЗапросаПереопределенныхОчередейОтложенныхОбработчиков() + + Возврат + "ВЫБРАТЬ + | Обработчики.Подсистема КАК Подсистема, + | Обработчики.Процедура КАК Процедура, + | Обработчики.Идентификатор КАК Идентификатор, + | Обработчики.РежимВыполнения КАК РежимВыполнения, + | Обработчики.Версия КАК Версия, + | Обработчики.ВерсияЧислом КАК ВерсияЧислом, + | Обработчики.НоваяОчередь КАК ОчередьУстановленная, + | Обработчики.ОчередьОтложеннойОбработки КАК ОчередьЗагруженная, + | Обработчики.Ссылка КАК Ссылка + |ИЗ + | Обработчики КАК Обработчики + |ГДЕ + | НЕ Обработчики.Подсистема В (&РазрабатываемыеПодсистемы) + | И Обработчики.РежимВыполненияОтложенныхОбработчиков = &Параллельно + | И Обработчики.РежимВыполнения = &Отложенно + | И Обработчики.ОчередьОтложеннойОбработки <> 0 + | И Обработчики.НоваяОчередь <> Обработчики.ОчередьОтложеннойОбработки + | И НЕ Обработчики.НачальноеЗаполнение + | + |УПОРЯДОЧИТЬ ПО + | Обработчики.ВерсияЧислом"; + +КонецФункции + +// Возвращает время прошедшее между указанными датами в формате "00:00:00". +// Если задан параметр СтруктураВремени, то в нем возвращаются отдельные значения Часы, Минуты, Секунды. +// если ВремяНач = 0 преобразовывает дату в формат времени возвращает СтруктуруВремени если попросить +// +// Параметры: +// ВремяКон - ДатаВремя - время окончания. +// ВремяНач - ДатаВремя - время начала. +// СтруктураВремени - Структура - составляющие части в отдельности: +// * Часы - Число +// * Минуты - Число +// * Секунды - Число +// * РазностьВремениСек - Число +// +// Возвращаемое значение: +// Строка +// +Функция РазностьВремени(ВремяКон, ВремяНач = 0, СтруктураВремени = Неопределено) + Разность = ВремяКон - ВремяНач; + РазностьВремениСек = Макс(-Разность,Разность); + Часы = Цел(РазностьВремениСек/3600); + Минуты = Цел(РазностьВремениСек/60) - 60*Часы; + Секунды = РазностьВремениСек - 60*Минуты - 60*60*Часы; + СтруктураВремени = Новый Структура; + СтруктураВремени.Вставить("Часы",Часы); + СтруктураВремени.Вставить("Минуты",Минуты); + СтруктураВремени.Вставить("Секунды",Секунды); + СтруктураВремени.Вставить("РазностьВремениСек",РазностьВремениСек); + Возврат ?(СтрДлина(Строка(Часы)) = 1,"0" + Строка(Часы), Строка(Часы)) +":" + +?(СтрДлина(Строка(Минуты)) = 1,"0" + Строка(Минуты), Строка(Минуты))+":" + +?(СтрДлина(Строка(Окр(Секунды))) = 1,"0" + Строка(Секунды), Строка(Секунды)); +КонецФункции + +// Возвращает числовое представление номера версии. +// +// Параметры: +// Версия - Строка - номер версии в формате Х.Х.ХХ.ХХХ +// +// Возвращаемое значение: +// Число - номер версии преобразованный в целое число +// +Функция ВерсияЧислом(Версия) Экспорт + + Результат = 0; + + МассивВерсий = Версия; + Если ТипЗнч(Версия) = Тип("Строка") Тогда + МассивВерсий = СтрРазделить(Версия, "."); + КонецЕсли; + Если МассивВерсий.Количество() = 4 Тогда + Результат = Число(МассивВерсий[0]) * 10000000 + Число(МассивВерсий[1]) * 1000000 + + Число(МассивВерсий[2]) * 10000 + Число(МассивВерсий[3]); + + ИначеЕсли МассивВерсий.Количество() = 3 Тогда + Результат = Число(МассивВерсий[0]) * 1000000 + Число(МассивВерсий[1]) * 10000 + + Число(МассивВерсий[2]); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает список разрабатываемых подсистем в конфигурации +// +// Возвращаемое значение: +// Массив из Строк - имена подсистем в том виде, в котором они заданы в общих модулях ОбновлениеИнформационнойБазыХХХ +// +Функция РазрабатываемыеПодсистемы() Экспорт + + Результат = Новый Массив; + ОбновлениеИнформационнойБазыПереопределяемый.ПриФормированиеСпискаРазрабатываемыхПодсистем(Результат); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область Инициализация + +ИнициализацияКонстант(); + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Templates/cut_tags/Template.txt b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Templates/cut_tags/Template.txt new file mode 100644 index 000000000..d19926d4c --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Templates/cut_tags/Template.txt @@ -0,0 +1,29 @@ +# Общее описание тэгов в комментариях +# Перечисляются все возможные тэги в исходной конфигурации +tags: + - id: ИмяТэга + description: Все что не входит в конфигурацию + begin: //++ ИмяТэга #как выглядит начало тэга в коде + end: //-- ИмяТэга #как выглядит конец тэга в коде + +# Описание конфигураций для которых нужно вырезать, контролировать правильность расстановки и расставлять в коде +# Перечисляются все конфигурации: +# - которые необходимо вырезать +# - для которых необходимо генерировать модули обновления + +configurations: + <КраткоеИмя>: + description: Вырезка конфигурации <КраткоеИмя> # произвольное имя конфигурации + name: ИмяКонфигурации # имя конфигурации как в процедуре ОбновлениеИнформационнойБазы<КраткоеИмя>.ПриДобавленииПодсистемы + module: ОбновлениеИнформационнойБазы<КраткоеИмя> # модуль обновления в котором размещена процедура ПриДобавленииОбработчиков + + tags: + - ИмяТэга + + content: + # объекты - перечисляются имена подсистем первого уровня, которые включают в себя объекты конфигурации + - СлужебныеПодсистемы.ОбъектыУТКАУП + - СтандартныеПодсистемы + + except_content:# перечисляются полные имена подсистем второго уровня которые исключаются из конфигурации + - СтандартныеПодсистемы.ЗащитаПерсональныхДанных diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ОписаниеОбработчиковОбновления.mdo b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ОписаниеОбработчиковОбновления.mdo new file mode 100644 index 000000000..88732c0bf --- /dev/null +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ОписаниеОбработчиковОбновления.mdo @@ -0,0 +1,1322 @@ + + + + + + + ОписаниеОбработчиковОбновления + + ru + Описание обработчиков обновления + + АПК:566 АПК:574 работа в мобильном и веб-клиенте не предусмотрена + true + DataProcessor.ОписаниеОбработчиковОбновления.Form.ФормаСпискаОбработчиков + + + ru + + + + КаталогSRC + + ru + Каталог SRC в репозитория + + + String + + + + + + + + + + + ОбработчикиОбновления + + ru + Обработчики обновления + + + Use + LineNumber + + Use + + + + + Ссылка + + ru + Ссылка + + + String + + 36 + + + + + + + + Подсистема + + ru + Подсистема + + + String + + 100 + + + + + ShowError + + + + ИмяОсновногоСерверногоМодуля + + ru + Имя основного серверного модуля + + + String + + 150 + + + + + ShowError + + + + НачальноеЗаполнение + + ru + Начальное заполнение + + + Boolean + + + + + + + Версия + + ru + Версия + + + String + + 30 + + + + + ShowError + + + + Процедура + + ru + Процедура + + + String + + 300 + + + + + ShowError + + + + РежимВыполнения + + ru + Режим выполнения + + + String + + 30 + + + + + ShowError + + + + РежимВыполненияОтложенныхОбработчиков + + ru + Режим выполнения отложенных обработчиков + + + String + + 20 + + + + + ShowError + + + + ВыполнятьВГруппеОбязательных + + ru + Выполнять в группе обязательных + + + Boolean + + + + + + + Приоритет + + ru + Приоритет + + + Number + + 2 + + + + + + + + ОбщиеДанные + + ru + Общие данные + + + Boolean + + + + + + + УправлениеОбработчиками + + ru + Управление обработчиками + + + Boolean + + + + + + + Комментарий + + ru + Комментарий + + + String + + + + + ShowError + + + + Идентификатор + + ru + Идентификатор + + + String + + 36 + + + + + ShowError + + + + ПроцедураПроверки + + ru + Процедура проверки + + + String + + 300 + + + + + + + + ПроцедураЗаполненияДанныхОбновления + + ru + Процедура заполнения данных обновления + + + String + + 300 + + + + + ShowError + + + + ОчередьОтложеннойОбработки + + ru + Очередь + + + Number + + 4 + + + + ru + Очередь отложенной обработки + + + + + + + НоваяОчередь + + ru + Новая очередь + + + Number + + 4 + + + + + + + + ЗапускатьТолькоВГлавномУзле + + ru + Запускать только в главном узле + + + Boolean + + + + + + + ЗапускатьИВПодчиненномУзлеРИБСФильтрами + + ru + Запускать и в подчиненном узле РИБ с фильтрами + + + Boolean + + + + + + + Многопоточный + + ru + Многопоточный + + + Boolean + + + + + + + СтатусПроблемы + + ru + Статус проблемы + + + String + + 50 + + + + + + + + ЗаписьЧитаемых + + ru + Запись читаемых + + + Boolean + + + ru + Текущий обработчик изменяет объекты, которые читаются другими обработчиками +или другие обработчики изменяют объекты, которые читает текущий обработчик. + + + + + + + ПовторнаяЗапись + + ru + Повторная запись + + + Boolean + + + ru + Повторная запись изменяемых объектов другими обработчиками. + + + + + + + ЗаданПорядокВыполнения + + ru + Задан порядок выполнения + + + Boolean + + + + + + + ВерсияЧислом + + ru + Версия числом + + + Number + + 10 + + + + + + + + РедакцияЧислом + + ru + Редакция числом + + + Number + + 10 + + + + + + + + ОтборИзменяемыеОбъекты + + ru + Отбор изменяемые объекты + + + String + + 300 + + + + + + + + ОтборЧитаемыеОбъекты + + ru + Отбор читаемые объекты + + + String + + 300 + + + + + + + + НоваяСтрока + + ru + Новая строка + + + Boolean + + + + + + + Изменен + + ru + Изменен + + + Boolean + + + + + + + ТехническийПроект + + ru + Технический проект + + + Boolean + + + ru + Обработчик технического проекта + + + + + + + ИмяБиблиотеки + + ru + Имя библиотеки + + + String + + 100 + + + + + + + + ИмяОбъекта + + ru + Имя объекта + + + String + + 300 + + + + + + + + + + + + + ЧитаемыеОбъекты + + ru + Читаемые объекты + + + Use + LineNumber + + Use + + + + + Ссылка + + ru + Ссылка + + + String + + 36 + + + + + + + + ОбъектМетаданных + + ru + Объект метаданных + + + String + + 300 + + + + + ShowError + + + + БлокироватьИнтерфейс + + ru + Блокировать интерфейс + + + Boolean + + + + + + + ИндексКартинки + + ru + Индекс картинки + + + Number + + 2 + + + + + + + + + + + + + ИзменяемыеОбъекты + + ru + Изменяемые объекты + + + Use + LineNumber + + Use + + + + + Ссылка + + ru + Ссылка + + + String + + 36 + + + + + + + + ОбъектМетаданных + + ru + Объект метаданных + + + String + + 300 + + + + + ShowError + + + + БлокироватьИнтерфейс + + ru + Блокировать интерфейс + + + Boolean + + + + + + + ИндексКартинки + + ru + Индекс картинки + + + Number + + 2 + + + + + + + + + + + + + БлокируемыеОбъекты + + ru + Блокируемые объекты + + + Use + LineNumber + + Use + + + + + Ссылка + + ru + Ссылка + + + String + + 36 + + + + + + + + ОбъектМетаданных + + ru + Объект метаданных + + + String + + 300 + + + + + ShowError + + + + ИндексКартинки + + ru + Индекс картинки + + + Number + + 2 + + + + + + + + + + + + + ПриоритетыВыполнения + + ru + Приоритеты выполнения + + + Use + LineNumber + + Use + + + + + Ссылка + + ru + Ссылка + + + String + + 36 + + + + + + + + Обработчик2 + + ru + Обработчик2 + + Обработчик с которым есть пересечение по объектам метаданных + + String + + 36 + + + + + + + + Порядок + + ru + Порядок + + + String + + 10 + + + + + + + + Процедура1 + + ru + Процедура1 + + + String + + 350 + + + + + + + + Подсистема1 + + ru + Подсистема1 + + + String + + 100 + + + + + ShowError + + + + Комментарий1 + + ru + Комментарий1 + + + String + + + + + + + + Процедура2 + + ru + Процедура2 + + + String + + 350 + + + + + + + + Подсистема2 + + ru + Подсистема2 + + + String + + 100 + + + + + ShowError + + + + Комментарий2 + + ru + Комментарий2 + + + String + + + + + + + + ПовторнаяЗапись + + ru + Повторная запись + + Обработчик записывает изменяемые другими + + Boolean + + + ru + Повторная запись изменяемых объектов другими обработчиками. + + + + + + + ЗаписьЧитаемых + + ru + Запись читаемых + + Обработчик изменяет читаемые объекты другими + + Boolean + + + ru + Текущий обработчик изменяет объекты, которые читаются другими обработчиками +или другие обработчики изменяют объекты, которые читает текущий обработчик. + + + + + + + ЗаданПорядокВыполнения + + ru + Задан порядок выполнения + + Для обработчика указан порядок выполнения + + Boolean + + + + + + + ВыборПорядкаВыполнения + + ru + Выбор порядка выполнения + + + String + + 20 + + + + + + + + ОбъектыПересечения + + ru + Объекты пересечения + + + String + + 200 + + + + + + + + + + + + + КонфликтыОбработчиков + + ru + Конфликты обработчиков + + + Use + LineNumber + + Use + + + + + ОбработчикПисатель + + ru + Обработчик писатель + + + String + + 36 + + + + + + + + ОбработчикЧитательИлиПисатель2 + + ru + Обработчик читатель (или писатель 2) + + Обработчик который читает объекты, изменяемые "писателем" или повторно записывает тот же объект + + String + + 36 + + + + + + + + ОбъектМетаданных + + ru + Объект метаданных + + Конфликтный объект + + String + + 300 + + + + + + + + ЗаписьЧитаемых + + ru + Запись читаемых + + Обработчик изменяет читаемые объекты другими + + Boolean + + + ru + Текущий обработчик изменяет объекты, которые читаются другими обработчиками +или другие обработчики изменяют объекты, которые читает текущий обработчик. + + + + + + + ПовторнаяЗапись + + ru + Повторная запись + + Обработчик записывает изменяемые другими + + Boolean + + + ru + Повторная запись изменяемых объектов другими обработчиками. + + + + + + + ПроцедураПисатель + + ru + Процедура писатель + + + String + + 350 + + + + + + + + ПроцедураЧитательИлиПисатель2 + + ru + Процедура читатель или писатель2 + + + String + + 350 + + + + + + + + + + + + + Ошибки + + ru + Ошибки + + + Use + LineNumber + + Use + + + + + ОбъектМетаданных + + ru + Объект метаданных + + + String + + 300 + + + + + + + + Обработчик + + ru + Обработчик + + + String + + 300 + + + + + + + + Сообщение + + ru + Сообщение + + + String + + + + + + + + + ФормаСпискаОбработчиков + + ru + Форма списка обработчиков + + + + ru + + + PersonalComputer + MobileDevice + + + ФормаОбработчика + + ru + Форма обработчика + + + + ru + + + PersonalComputer + MobileDevice + + + ФормаВыбораИдентификаторовОбъектовМетаданных + + ru + Форма выбора идентификаторов объектов метаданных + + PersonalComputer + MobileDevice + + + ОбъектыПересеченияОбработчика + + ru + Объекты пересечения обработчика + + PersonalComputer + MobileDevice + + + cut_tags + + ru + Cut tags + + TextDocument + + + ОписаниеОбработчиковОбновления + + ru + Описание обработчиков обновления + + NavigationPanelOrdinary + Auto + + diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl index e48ac40f0..094f6f862 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl @@ -189,7 +189,7 @@ // Изменяет каталог экспорта данных. // // Параметры: -// КаталогЭкспорта - Строка, новый каталог экспорта. +// КаталогЭкспорта - Строка - новый каталог экспорта. // &НаСервереБезКонтекста Процедура УстановитьКаталогЭкспорта(ВыполнятьЛокальныйКаталогЭкспорта, ВыполнятьFTPКаталогЭкспорта) @@ -210,7 +210,7 @@ // Изменяет признак использования регламентного задания. // // Параметры: -// НовоеЗначение - Булево, новое значение использования. +// НовоеЗначение - Булево - новое значение использования. // // Возвращаемое значение: // Булево - состояние до изменения (предыдущее состояние). diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl index 42c170ac4..61adf2a1b 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl @@ -354,8 +354,8 @@ // // Параметры: // КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция, для которой следует рассчитать целевое время. -// ЗначениеAPDEX - Число, APDEX, для которого необходимо подобрать целевое время. -// ИндексПериода - Число, индекс периода, для которого будет вычислено целевое время. +// ЗначениеAPDEX - Число - APDEX, для которого необходимо подобрать целевое время. +// ИндексПериода - Число - индекс периода, для которого будет вычислено целевое время. // // Возвращаемое значение: // Число - целевое время, при котором APDEX будет равен указанному значению. @@ -478,7 +478,7 @@ // Параметры: // КолонкиТаблицаКлючевыхОпераций - КоллекцияКолонокТаблицыЗначений, из них вычисляется какие реквизиты удалить, а // какие оставить. -// УдаляемыеРеквизиты - Массив, список полных имен удаляемых реквизитов +// УдаляемыеРеквизиты - Массив - список полных имен удаляемых реквизитов // имена в формате Объект.Производительность.ПроизводительностьN, где N номер. // &НаСервере @@ -524,7 +524,7 @@ // КолонкиТаблицаКлючевыхОпераций - КоллекцияКолонокТаблицыЗначений, список колонок, которые необходимо создать. // // Возвращаемое значение: -// Массив - Массив реквизитов формы. +// Массив - массив реквизитов формы. // &НаСервереБезКонтекста Функция ДобавляемыеРеквизиты(КолонкиТаблицаКлючевыхОпераций) @@ -551,7 +551,7 @@ // и удаляет элементы формы связанные с реквизитами. // // Возвращаемое значение: -// Массив - Массив реквизитов формы. +// Массив - массив реквизитов формы. // &НаСервереБезКонтекста Функция УдаляемыеРеквизиты(РеквизитыОбъекта) @@ -693,7 +693,7 @@ // Выполняет обновление диаграммы. // // Параметры: -// ТаблицаКлючевыхОпераций - ТаблицаЗначений, данные, по которым будет обновлена диаграмма. +// ТаблицаКлючевыхОпераций - ТаблицаЗначений - данные, по которым будет обновлена диаграмма. // &НаСервере Процедура ОбновитьДиаграмму(ТаблицаКлючевыхОпераций) @@ -762,7 +762,7 @@ // НаправлениеСдвига - Число, // -1, сдвиг вверх // 1, сдвиг вниз -// ТекущийИндекс - Число, индекс сдвигаемой строки. +// ТекущийИндекс - Число - индекс сдвигаемой строки. // &НаКлиенте Процедура ВыполнитьСдвигСтроки(НаправлениеСдвига, ТекущийИндекс) @@ -821,7 +821,7 @@ // // Параметры: // Объект - ЛюбойОбъект, объект, изменения которого следует зафиксировать. -// Записывать - Булево, необходимость записи объекта перед фиксацией транзакции. +// Записывать - Булево - необходимость записи объекта перед фиксацией транзакции. // &НаСервереБезКонтекста Процедура ЗафиксироватьИзменениеОбъекта(Объект, Записывать = Истина) @@ -836,9 +836,9 @@ // // Параметры: // КлючеваяОперация1 - СправочникСсылка.КлючевыеОперации -// Приоритет1 - Число, будет присвоен КлючеваяОперация2. +// Приоритет1 - Число - будет присвоен КлючеваяОперация2. // КлючеваяОперация2 - СправочникСсылка.КлючевыеОперации -// Приоритет2 - Число, будет присвоен КлючеваяОперация1. +// Приоритет2 - Число - будет присвоен КлючеваяОперация1. // &НаСервере Процедура ОбменятьПриоритеты(КлючеваяОперация1, Приоритет1, КлючеваяОперация2, Приоритет2) @@ -919,9 +919,9 @@ // Вычисляет точные дату начала и окончания на выбранном отрезке. // // Параметры: -// ДатаНачала [OUT] - Дата, дата начала выбранного периода. -// ДатаОкончания [OUT] - Дата, дата окончания выбранного периода. -// ИндексПериода [IN] - Число, индекс выбранного периода. +// ДатаНачала [OUT] - Дата - дата начала выбранного периода. +// ДатаОкончания [OUT] - Дата - дата окончания выбранного периода. +// ИндексПериода [IN] - Число - индекс выбранного периода. // // Возвращаемое значение: // Булево - @@ -1045,7 +1045,7 @@ // Значение - Структура, параметры оценки. // // Возвращаемое значение: -// Соответствие - +// Соответствие // &НаСервереБезКонтекста Функция СоответствиеЦветовУровнюАпдекса() @@ -1090,7 +1090,7 @@ // // Возвращаемое значение: // Булево - Истина - настройки верны -// Ложь - Настройки не верны +// Ложь - настройки не верны // &НаСервере Функция НастройкаВыполнена() @@ -1161,7 +1161,7 @@ // // Параметры: // КлючеваяОперация - СправочникСсылка.КлючевыеОперации, операция, у которой необходимо изменить целевое время. -// ЦелевоеВремя - Число, новое целевое время. +// ЦелевоеВремя - Число - новое целевое время. // &НаСервере Процедура ИзменитьЦелевоеВремя(КлючеваяОперация, ЦелевоеВремя) @@ -1185,8 +1185,8 @@ // Удаляет из таблицы значений строки не подходящие под отбор. // // Параметры: -// ТаблицаКлючевыхОпераций - ТаблицаЗначений, таблица, которую нужно отфильтровать. -// ЗначенияОтбора - Массив, массив строк со значениями отбора. +// ТаблицаКлючевыхОпераций - ТаблицаЗначений - таблица, которую нужно отфильтровать. +// ЗначенияОтбора - Массив - массив строк со значениями отбора. // &НаСервереБезКонтекста Процедура УстановитьОтборТаблицаКлючевыхОпераций(ТаблицаКлючевыхОпераций, ЗначенияОтбора) diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl index 70cb29d2a..11b420683 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl @@ -49,12 +49,12 @@ // Функция динамически формирует запрос и получает APDEX. // // Параметры: -// ПараметрыВычисления - Структура - структура со свойствами: +// ПараметрыВычисления - Структура: // * ШагЧисло - Число - размер шага в секундах. // * КоличествоШагов - Число - количество шагов в периоде. // * ДатаНачала - Дата - дата начала замеров. // * ДатаОкончания - Дата - дата окончания замеров. -// * ТаблицаКлючевыхОпераций - ТаблицаЗначений - Содержит данные для выбора. Колонки: +// * ТаблицаКлючевыхОпераций - ТаблицаЗначений - содержит данные для выбора. Колонки: // ** КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция. // ** НомерСтроки - Число - приоритет ключевой операции. // ** Целевое время - Число - целевое время ключевой операции. @@ -86,7 +86,8 @@ "ВЫБРАТЬ | КлючевыеОперации.КлючеваяОперация КАК КлючеваяОперация, | КлючевыеОперации.Приоритет КАК Приоритет, - | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя%Колонки% + | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя + | //%Колонки% |ИЗ | КлючевыеОперации КАК КлючевыеОперации |ЛЕВОЕ СОЕДИНЕНИЕ @@ -94,7 +95,7 @@ |ПО | КлючевыеОперации.КлючеваяОперация = ЗамерыВремени.КлючеваяОперация | И ЗамерыВремени.ДатаНачалаЗамера МЕЖДУ &НачалоПериода И &КонецПериода - | %УсловиеКомментарий% + | //%УсловиеКомментарий% |ГДЕ | НЕ КлючевыеОперации.КлючеваяОперация = &КлючеваяОперацияИтого | @@ -102,7 +103,7 @@ | КлючевыеОперации.КлючеваяОперация, | КлючевыеОперации.Приоритет, | КлючевыеОперации.ЦелевоеВремя - |%Итоги%"; + |//%Итоги%"; Выражение = " @@ -216,20 +217,20 @@ КонецЦикла; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Колонки%", Колонки); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Итоги%", ?(ПараметрыВычисления.ВыводитьИтоги, "ИТОГИ" + Итоги, "")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//%Колонки%", Колонки); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//%Итоги%", ?(ПараметрыВычисления.ВыводитьИтоги, "ИТОГИ" + Итоги, "")); ТекстЗапроса = ТекстЗапроса + ?(ПараметрыВычисления.ВыводитьИтоги, ПоОбщие, ""); Если ПараметрыВычисления.ВариантФильтраКомментарий = "НеФильтровать" Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарий%", ""); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарийВнутр%", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//%УсловиеКомментарий%", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//%УсловиеКомментарийВнутр%", ""); ИначеЕсли ПараметрыВычисления.ВариантФильтраКомментарий = "Равен" Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарий%", "И ЗамерыВремени.Комментарий = &Комментарий"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарийВнутр%", "И ЗамерыВремениВнутр.Комментарий = &Комментарий"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//%УсловиеКомментарий%", "И ЗамерыВремени.Комментарий = &Комментарий"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//%УсловиеКомментарийВнутр%", "И ЗамерыВремениВнутр.Комментарий = &Комментарий"); Запрос.УстановитьПараметр("Комментарий", ПараметрыВычисления.Комментарий); ИначеЕсли ПараметрыВычисления.ВариантФильтраКомментарий = "Содержит" Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарий%", "И ЗамерыВремени.Комментарий ПОДОБНО &Комментарий"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарийВнутр%", "И ЗамерыВремениВнутр.Комментарий ПОДОБНО &Комментарий"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//%УсловиеКомментарий%", "И ЗамерыВремени.Комментарий ПОДОБНО &Комментарий"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//%УсловиеКомментарийВнутр%", "И ЗамерыВремениВнутр.Комментарий ПОДОБНО &Комментарий"); Запрос.УстановитьПараметр("Комментарий", "%" + ПараметрыВычисления.Комментарий + "%"); КонецЕсли; @@ -276,15 +277,15 @@ // Создает структуру параметров необходимую для расчета APDEX. // // Возвращаемое значение: -// Структура - -// ШагЧисло - Число, указывается размер шага в секундах. -// КоличествоШагов - Число, количество шагов в периоде. -// ДатаНачала - Дата, дата начала замеров. -// ДатаОкончания - Дата, дата окончания замеров. -// ТаблицаКлючевыхОпераций - ТаблицаЗначений, +// Структура: +// ШагЧисло - Число - указывается размер шага в секундах. +// КоличествоШагов - Число - количество шагов в периоде. +// ДатаНачала - Дата - дата начала замеров. +// ДатаОкончания - Дата - дата окончания замеров. +// ТаблицаКлючевыхОпераций - ТаблицаЗначений: // КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция. -// НомерСтроки - Число, приоритет ключевой операции. -// ЦелевоеВремя - Число, целевое время ключевой операции. +// НомерСтроки - Число - приоритет ключевой операции. +// ЦелевоеВремя - Число - целевое время ключевой операции. // ВыводитьИтоги - Булево, // Истина, вычислять итоговую производительность // Ложь, не вычислять итоговую производительность. @@ -359,7 +360,7 @@ // Процедура рассчитывает итоговое значение APDEX. // // Параметры: -// ТаблицаКлючевыхОпераций - ТаблицаЗначений, результат запроса рассчитавшего APDEX. +// ТаблицаКлючевыхОпераций - ТаблицаЗначений - результат запроса рассчитавшего APDEX. // Процедура ВычислитьИтоговыйAPDEX(ТаблицаКлючевыхОпераций) @@ -426,11 +427,10 @@ Функция ЗаголовокКолонки(НачалоПериода) Если Шаг = "Час" Тогда - ЗаголовокКолонки = Строка(Формат(НачалоПериода, "ДЛФ=T")); + ЗаголовокКолонки = Формат(НачалоПериода, "ДЛФ=T"); Иначе - ЗаголовокКолонки = Строка(Формат(НачалоПериода, "ДЛФ=D")); + ЗаголовокКолонки = Формат(НачалоПериода, "ДЛФ=D"); КонецЕсли; - Возврат ЗаголовокКолонки; КонецФункции diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form index 5f1ca2df6..bdbc8cb80 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form @@ -2106,7 +2106,7 @@ 1810 <key>ru</key> - <value><color #807a59>Включение автоматической проверки может замедлить открытие документов на медленных компьютерах. Для таких компьютеров рекомендуется использовать </><color #807a59>ручную</><color #807a59> проверку</><color #807a59> по кнопке в подменю "Еще".</> + <value><color #807A59>Включение автоматической проверки может замедлить открытие документов на медленных компьютерах. Для таких компьютеров рекомендуется использовать </><color #807A59>ручную</><color #807A59> проверку</><color #807A59> по кнопке в подменю "Еще".</> <link e1cib/app/Обработка.ИнструкцияПоИспользованиюПроверкиКонтрагента>Подробнее о сервисе</></value> true @@ -2390,7 +2390,6 @@ ru <Состояние подключения обсуждений> - true true true @@ -2516,6 +2515,39 @@ Auto + + ОбсужденияНастроитьИнтеграциюСВнешнимиСистемами + 1939 + true + true + + true + + + ОбсужденияНастроитьИнтеграциюСВнешнимиСистемамиРасширеннаяПодсказка + 1940 + + <key>ru</key> + <value>Получать и отправлять сообщения в мессенджеры. Например в Telegram, VK.</value> + + Label + true + true + + Left + + + Hyperlink + Form.Command.ОбсужденияНастроитьИнтеграциюСВнешнимиСистемами + Normal + Auto + true + 2 + true + UserCmds + ShowBottom + Auto + true true @@ -2537,7 +2569,7 @@
      UsualGroup - HorizontalIfPossible + AlwaysHorizontal Collapsible true Button @@ -3968,7 +4000,7 @@ <key>ru</key> - <value>БИП Группа настройка коннект</value> + <value>БИП группа настройка коннект</value> БИПГруппаНастройкаКоннектРасширеннаяПодсказка @@ -4349,6 +4381,19 @@ true + + ОбсужденияПодключены + 29 + + Boolean + + + true + + + true + + БИПВойтиИлиВыйти @@ -4589,6 +4634,29 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ОбсужденияНастроитьИнтеграциюСВнешнимиСистемами</name> + <title> + <key>ru</key> + <value>Сообщения из других программ</value> + + 13 + + ru + Настроить получение и отправку сообщений в другие мессенджеры. Например в Telegram, VK + + + true + + + + ОбсужденияНастроитьИнтеграциюСВнешнимиСистемами + + + Text + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl index 9cb5ae808..677d6527a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl @@ -28,11 +28,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Если МодульАдресныйКлассификаторСлужебный.ЕстьПравоДобавлениеИзменениеАдресныхСведений() Тогда - СведенияОДоступностиАдресныхСведений = МодульАдресныйКлассификаторСлужебный.СведенияОДоступностиАдресныхСведений(); - АдресныйКлассификаторСодержитЗагруженныеСведения = СведенияОДоступностиАдресныхСведений.Получить("ЕстьЗагруженныеСведения") = Истина; - Элементы.РегистрСведенийАдресныеОбъектыОчиститьАдресныйКлассификатор.Доступность = АдресныйКлассификаторСодержитЗагруженныеСведения; - Иначе + Если Не МодульАдресныйКлассификаторСлужебный.ЕстьПравоДобавлениеИзменениеАдресныхСведений() Тогда Элементы.АдресныйКлассификаторНастройки.Видимость = Ложь; КонецЕсли; Иначе @@ -149,6 +145,16 @@ Элементы.ГруппаОбсуждения.Видимость = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения"); + СистемнаяИнформация = Новый СистемнаяИнформация(); + ВерсияПлатформы = СистемнаяИнформация.ВерсияПриложения; + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии("8.3.17.0", ВерсияПлатформы) > 0 Тогда + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ОбсужденияНастроитьИнтеграциюСВнешнимиСистемами", + "Видимость", + Ложь); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -161,14 +167,14 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "ОчищенАдресныйКлассификатор" Или ИмяСобытия = "ЗагруженАдресныйКлассификатор" Тогда - Элементы.РегистрСведенийАдресныеОбъектыОчиститьАдресныйКлассификатор.Доступность = (Параметр = Истина); - КонецЕсли; - Если ИмяСобытия = "ИнтернетПоддержкаОтключена" Или ИмяСобытия = "ИнтернетПоддержкаПодключена" Тогда ОбновитьПовторноИспользуемыеЗначения(); КонецЕсли; + Если ИмяСобытия = "СкрытиеКонфиденциальнойИнформации" И ОбрабатыватьНастройкиБИП Тогда + ОбновитьСостояниеИнтернетПоддержки(); + КонецЕсли; + Если ОбрабатыватьНастройкиБИП Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.БазоваяФункциональностьБИП") Тогда МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); @@ -639,9 +645,17 @@ Если ОбсужденияПодключены Тогда Элементы.ПодключитьОтключитьОбсуждения.Заголовок = НСтр("ru = 'Отключить'"); Элементы.СостояниеПодключенияОбсуждений.Заголовок = НСтр("ru = 'Обсуждения подключены.'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ОбсужденияНастроитьИнтеграциюСВнешнимиСистемами", + "Доступность", + Истина); Иначе Элементы.ПодключитьОтключитьОбсуждения.Заголовок = НСтр("ru = 'Подключить'"); Элементы.СостояниеПодключенияОбсуждений.Заголовок = НСтр("ru = 'Подключение обсуждений не выполнено.'"); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ОбсужденияНастроитьИнтеграциюСВнешнимиСистемами", + "Доступность", + Ложь); КонецЕсли; КонецЕсли; @@ -743,6 +757,12 @@ //////////////////////////////////////////////////////////////////////////////// // Сервер +&НаСервере +Процедура ОбновитьСостояниеИнтернетПоддержки() + МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); + МодульИнтеграцияПодсистемБИП.ИнтернетПоддержкаИСервисы_ПриСозданииНаСервере(ЭтотОбъект); +КонецПроцедуры + &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "") @@ -855,4 +875,14 @@ МодульЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(ПараметрыЦентраМониторинга); КонецПроцедуры +&НаКлиенте +Процедура ОбсужденияНастроитьИнтеграциюСВнешнимиСистемами(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + МодульОбсужденияСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбсужденияСлужебныйКлиент"); + МодульОбсужденияСлужебныйКлиент.ПоказатьНастройкуИнтеграцииСВнешнимиСистемами(); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form index d0ada4c7b..92102167d 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form @@ -237,26 +237,92 @@ - ГруппаНастройкиВходаПользователей - 2142 - - НастройкиВхода - 2196 + НастройкиВходаИОтчетПоПравам + 2241 + + ГруппаНастройкиВходаПользователей + 2142 + + НастройкиВхода + 2196 + + <key>ru</key> + <value>Настройки входа</value> + + true + true + + true + + + НастройкиВходаРасширеннаяПодсказка + 2197 + + <key>ru</key> + <value>Сложность и смена паролей, ограничение работы неактивных пользователей.</value> + + Label + true + true + + Left + + + Hyperlink + CommonForm.НастройкиВходаПользователей.StandardCommand.Open + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + <key>ru</key> - <value>Настройки входа</value> + <value>Настройки входа пользователей</value> + 43 + false + + ГруппаНастройкиВходаПользователейРасширеннаяПодсказка + 2143 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ОтчетАнализПравДоступаОткрыть + 2239 true true true - НастройкиВходаРасширеннаяПодсказка - 2197 + ОтчетАнализПравДоступаОткрытьРасширеннаяПодсказка + 2240 <key>ru</key> - <value>Сложность и смена паролей, ограничение работы неактивных пользователей.</value> + <value>Показывает текущие настройки прав доступа пользователей к таблицам информационной базы.</value> Label true @@ -266,7 +332,7 @@ Hyperlink - CommonForm.НастройкиВходаПользователей.StandardCommand.Open + Report.АнализПравДоступа.StandardCommand.Open Normal Auto true @@ -282,13 +348,11 @@ <key>ru</key> - <value>Настройки входа пользователей</value> + <value>Настройки входа и отчет по правам</value> - 43 - false - ГруппаНастройкиВходаПользователейРасширеннаяПодсказка - 2143 + НастройкиВходаИОтчетПоПравамРасширеннаяПодсказка + 2242 Label true true diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form index 721031264..331e63714 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form @@ -634,7 +634,7 @@ <key>ru</key> - <value>Расширения файлов в ИБ</value> + <value>Оставлять в информационной базе следующие файлы</value> ShowBottom @@ -656,6 +656,7 @@ Auto true true + auto Auto @@ -733,7 +734,7 @@ 2187 <key>ru</key> - <value>Максимальный размер файла в информационной базе</value> + <value>Размер файла не превышает</value> true true @@ -743,7 +744,7 @@ МаксимальныйРазмерФайлаВИБ - 2 + 1 OnChange МаксимальныйРазмерФайлаВИБПриИзменении @@ -828,7 +829,8 @@ 2186 <key>ru</key> - <value>Ограничение размера файлов, хранящихся в информационной базе. Файлы больше указанного размера помещаются в тома.</value> + <value>Файлы, размер которых не превышает указанного значения, хранятся в информационной базе, а не в томах. +Эта настройка имеет приоритет над списком расширений.</value> Label true @@ -878,6 +880,36 @@ ГруппаУправлениеЗагрузкойФайлов 1409 + + ДекорацияОтступ + 2193 + true + true + + true + + + ДекорацияОтступРасширеннаяПодсказка + 2195 + Label + true + true + + Left + + + + ДекорацияОтступКонтекстноеМеню + 2194 + true + + Label + true + true + + Left + + ГруппаРасширение 722 @@ -1144,7 +1176,7 @@ 2062 <key>ru</key> - <value>Ограничение загрузки файлов, превышающих указанный размер.</value> + <value>Запрещать загружать файлы, превышающие указанный размер.</value> Label true @@ -1213,7 +1245,7 @@ 2134 <key>ru</key> - <value>Настройка правил очистки файлов.</value> + <value>Очистка ненужных файлов по дате редактирования, видам владельцев файлов и другим произвольным условиям.</value> Label true @@ -1285,6 +1317,7 @@ HorizontalIfPossible Auto + NormalSeparation true true Auto @@ -1352,7 +1385,7 @@ 1417 <key>ru</key> - <value>Расширения файлов открытого формата документов для офисных приложений. + <value>Расширения файлов открытого формата документов (ODF) офисных приложений для возможности поиска текста в них. Указываются через "пробел".</value> true @@ -1470,7 +1503,7 @@ 1976 <key>ru</key> - <value>Расширения файлов, содержащих текстовые данные. + <value>Расширения файлов, содержащих текстовые данные, для автоопределения их кодировки. Указываются через "пробел".</value> true @@ -1658,7 +1691,7 @@ 2120 <key>ru</key> - <value>Настройка правил синхронизации файлов.</value> + <value>Синхронизация файлов с облачными сервисами в разрезе видов владельцев файлов и по различным критериям.</value> Label true @@ -1730,6 +1763,7 @@ HorizontalIfPossible Auto + NormalSeparation true true Auto diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl index cd66fcef8..bc582d3ac 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl @@ -305,9 +305,11 @@ КонецПроцедуры // Параметры: -// Результат - Неопределено, Строка - -// ДополнительныеПараметры - Структура - где: -// * Элемент - ПолеФормы, РасширениеПоляФормыДляПоляФлажка - +// Результат - Неопределено +// - Строка +// ДополнительныеПараметры - Структура: +// * Элемент - ПолеФормы +// - РасширениеПоляФормыДляПоляФлажка // &НаКлиенте Процедура ЗапрещатьЗагрузкуФайловПоРасширениюПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl index a7e4efdd6..559409fb0 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl @@ -90,7 +90,7 @@ И Не МодульОбновлениеКонфигурации.ДоступнаУстановкаПатчейВБазовойВерсии() Тогда Элементы.УстановкаОбновлений.Заголовок = НСтр("ru = 'Установка обновлений'"); Элементы.УстановкаОбновлений.РасширеннаяПодсказка.Заголовок = - НСтр("ru = 'Обновление программы из файла на локальном диске или в сетевом каталоге.'"); + НСтр("ru = 'Обновление программы из файла на локальном диске или в сетевой папке.'"); КонецЕсли; Иначе Элементы.ГруппаУстановкаОбновлений.Видимость = Ложь; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form index 0e0833b80..ac80ef3e2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form @@ -756,7 +756,7 @@ 1866 <key>ru</key> - <value>Классификация контактной информации различных объектов системы, например, партнеров, контрагентов, сотрудников и т.д.</value> + <value>Классификация адресов, телефонов и другой контактной информации у введенных в программе объектов, например, партнеров, контрагентов, сотрудников и т.д.</value> Label true @@ -1630,6 +1630,245 @@ Auto + + ГруппаУдалениеПомеченных + 2096 + + Группа2 + 2111 + + ГруппаРегламентноеУдалениеПомеченных + 2101 + + УдалениеПомеченныхИспользование + 2098 + + <key>ru</key> + <value>Автоматически удалять помеченные</value> + + true + true + + true + + + УдалениеПомеченныхИспользование + + Right + + OnChange + УдалениеПомеченныхИспользованиеПриИзменении + + + РасширеннаяПодсказка + 2100 + Label + true + true + + Left + + + + КонтекстноеМеню + 2099 + true + + CheckBoxField + Enter + true + Left + true + + + + НастроитьРасписание + 2103 + true + true + + true + + + НастроитьРасписаниеРасширеннаяПодсказка + 2104 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастроитьРасписание + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Регламентное удаление помеченных</value> + + ShowBottom + + Группа2РасширеннаяПодсказка1 + 2102 + + <key>ru</key> + <value>Выполнять удаление помеченных объектов по расписанию</value> + + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + 43 + + Группа2РасширеннаяПодсказка3 + 2112 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПросмотрПомеченныхНаУдаление + 2109 + + ПосмотретьПомеченныеНаУдаление + 2105 + + <key>ru</key> + <value>Посмотреть помеченные на удаление</value> + + true + true + + true + + + ПосмотретьРасширеннаяПодсказка + 2106 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПосмотретьПомеченныеНаУдаление + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Просмотр помеченных на удаление</value> + + + ru + Открыть рабочее место для удаления помеченных + + ShowBottom + + Группа2РасширеннаяПодсказка2 + 2110 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Удаление помеченных объектов</value> + + + Группа2РасширеннаяПодсказка + 2097 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Collapsible + true + Button + WeakSeparation + true + true + auto + Auto + Auto + + ФормаКоманднаяПанель -1 @@ -1727,6 +1966,23 @@ true + + УдалениеПомеченныхИспользование + + <key>ru</key> + <value>Удаление помеченных использование</value> + + 8 + + Boolean + + + true + + + true + + ИспользованиеПрофилейБезопасности @@ -1855,6 +2111,42 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>НастроитьРасписание</name> + <title> + <key>ru</key> + <value>Настроить расписание</value> + + 7 + + true + + + + НастроитьРасписание + + + Auto + Auto + + + ПосмотретьПомеченныеНаУдаление + + <key>ru</key> + <value>Посмотреть помеченные на удаление</value> + + 8 + + true + + + + ПосмотретьПомеченныеНаУдаление + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html index 1f3a102a8..5d1fbca4c 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html @@ -49,5 +49,15 @@ TD {
    • Шифрование - включите флажок, для того чтобы разрешить шифрование файлов.
    • -
    • Настройки электронной подписи и шифрования - переход к настройке параметров подключения средств криптографии: электронной подписи и шифрования. 

    См. также:

    +
  • Настройки электронной подписи и шифрования - переход к настройке параметров подключения средств криптографии: электронной подписи и шифрования. 
  • + + +

    Удаление помеченных объектов

    + +

    +

    См. также:

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl index 8bf7e94d5..cd8ac3b30 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl @@ -67,6 +67,17 @@ Элементы.ГруппаУправлениеПолнотекстовымПоиском.Видимость = Ложь; КонецЕсли; + Если (ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") ) + И Пользователи.ЭтоПолноправныйПользователь(,Истина) Тогда + + МодульУдалениеПомеченныхОбъектов = ОбщегоНазначения.ОбщийМодуль("УдалениеПомеченныхОбъектов"); + РежимРегламентногоЗадания = МодульУдалениеПомеченныхОбъектов.РежимУдалятьПоРасписанию(); + УдалениеПомеченныхИспользование = РежимРегламентногоЗадания.Использование; + Элементы.НастроитьРасписание.Доступность = УдалениеПомеченныхИспользование; + Иначе + Элементы.ГруппаУдалениеПомеченных.Видимость = Ложь; + КонецЕсли; + УстановитьДоступность(); НастройкиПрограммыПереопределяемый.ОбщиеНастройкиПриСозданииНаСервере(ЭтотОбъект); @@ -162,6 +173,25 @@ КонецПроцедуры +&НаКлиенте +Процедура УдалениеПомеченныхИспользованиеПриИзменении(Элемент) + ОповещениеОбИзменении = Новый ОписаниеОповещения("УдалениеПомеченныхИспользованиеПриИзмененииЗавершение", ЭтотОбъект); + + Если (ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов")) Тогда + МодульУдалениеПомеченныхОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УдалениеПомеченныхОбъектовКлиент"); + МодульУдалениеПомеченныхОбъектовКлиент.ПриИзмененииФлажкаУдалятьПоРасписанию(УдалениеПомеченныхИспользование, ОповещениеОбИзменении); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалениеПомеченныхИспользованиеПриИзмененииЗавершение(Изменение, ДополнительныеПараметры) Экспорт + Если (Изменение = Неопределено) Тогда + Возврат; + КонецЕсли; + + УдалениеПомеченныхИспользование = Изменение.Использование; + Элементы.НастроитьРасписание.Доступность = УдалениеПомеченныхИспользование; +КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы @@ -222,6 +252,22 @@ ОткрытьФорму("ОбщаяФорма.РегиональныеНастройки", ПараметрыФормы); КонецПроцедуры +&НаКлиенте +Процедура ПосмотретьПомеченныеНаУдаление(Команда) + Если (ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов")) Тогда + МодульУдалениеПомеченныхОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УдалениеПомеченныхОбъектовКлиент"); + МодульУдалениеПомеченныхОбъектовКлиент.ПерейтиКПомеченнымНаУдаление(ЭтотОбъект); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРасписание(Команда) + Если (ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов")) Тогда + МодульУдалениеПомеченныхОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УдалениеПомеченныхОбъектовКлиент"); + МодульУдалениеПомеченныхОбъектовКлиент.НачатьИзменениеРасписанияРегламентногоЗадания(); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -306,6 +352,9 @@ КонецФункции + + + //////////////////////////////////////////////////////////////////////////////// // Сервер diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl index 88eb59861..b55ac8505 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl @@ -227,8 +227,27 @@ &НаКлиенте Процедура МониторингЗадачИспользованиеПриИзменении(Элемент) - ЗаписатьРегламентноеЗадание("МониторингЗадач", МониторингЗадачИспользование, - МониторингЗадачРасписание, "МониторингЗадачРасписание"); + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") И МониторингЗадачИспользование Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("МониторингЗадачИспользованиеПроверкаДоступностиПочтыВыполнена", ЭтотОбъект); + МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); + МодульРаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОписаниеОповещения); + Иначе + МониторингЗадачИспользованиеПроверкаДоступностиПочтыВыполнена(Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура МониторингЗадачИспользованиеПроверкаДоступностиПочтыВыполнена(ПроверкаВыполнена, ДополнительныеПараметры = Неопределено) Экспорт + + Если ПроверкаВыполнена = Истина Тогда + ЗаписатьРегламентноеЗадание("МониторингЗадач", МониторингЗадачИспользование, + МониторингЗадачРасписание, "МониторингЗадачРасписание"); + Иначе + МониторингЗадачИспользование = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -245,8 +264,28 @@ &НаКлиенте Процедура УведомлениеИсполнителейОНовыхЗадачахИспользованиеПриИзменении(Элемент) - ЗаписатьРегламентноеЗадание("УведомлениеИсполнителейОНовыхЗадачах", УведомлениеИсполнителейОНовыхЗадачахИспользование, - УведомлениеИсполнителейОНовыхЗадачахРасписание, "УведомлениеИсполнителейОНовыхЗадачахРасписание"); + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") И УведомлениеИсполнителейОНовыхЗадачахИспользование Тогда + ОписаниеОповещения = Новый ОписаниеОповещения( + "УведомлениеИсполнителейОНовыхЗадачахИспользованиеПроверкаДоступностиПочтыВыполнена", ЭтотОбъект); + МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); + МодульРаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОписаниеОповещения); + Иначе + УведомлениеИсполнителейОНовыхЗадачахИспользованиеПроверкаДоступностиПочтыВыполнена(Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УведомлениеИсполнителейОНовыхЗадачахИспользованиеПроверкаДоступностиПочтыВыполнена(ПроверкаВыполнена, ДополнительныеПараметры = Неопределено) Экспорт + + Если ПроверкаВыполнена = Истина Тогда + ЗаписатьРегламентноеЗадание("УведомлениеИсполнителейОНовыхЗадачах", УведомлениеИсполнителейОНовыхЗадачахИспользование, + УведомлениеИсполнителейОНовыхЗадачахРасписание, "УведомлениеИсполнителейОНовыхЗадачахРасписание"); + Иначе + УведомлениеИсполнителейОНовыхЗадачахИспользование = Ложь; + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form index 69230a930..ce674768a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form @@ -999,6 +999,188 @@ Auto
    + + ГруппаСостояниеОригиналовПервичныхДокументов + 1696 + + ГруппаСостояниеОригиналовПервичныхДокументовИспользование + 1698 + + ОтслеживаниеСостоянийНапечатанныхДокументов + 1700 + + <key>ru</key> + <value>Отслеживание состояний напечатанных документов</value> + + true + true + + true + + + НаборКонстант.ИспользоватьУчетОригиналовПервичныхДокументов + + Right + ShowBottom + + OnChange + ИспользоватьУчетОригиналовПервичныхДокументовПриИзменении + + + ОтслеживаниеСостоянийНапечатанныхДокументовРасширеннаяПодсказка + 1702 + + <key>ru</key> + <value>Фиксирование наличия подписанных оригиналов первичных документов.</value> + + Label + true + true + + Left + + + + ОтслеживаниеСостоянийНапечатанныхДокументовКонтекстноеМеню + 1701 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Состояние оригиналов первичных документов использование</value> + + 43 + + ГруппаСостояниеОригиналовПервичныхДокументовИспользованиеРасширеннаяПодсказка + 1699 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаСостояниеОригиналовПервичныхДокументовНастройка + 1703 + + ОткрытьСостоянияОригиналовПервичныхДокументов + 1705 + + <key>ru</key> + <value>Состояния оригиналов первичных документов</value> + + true + true + + true + + + ОткрытьСостоянияОригиналовПервичныхДокументовРасширеннаяПодсказка + 1706 + + <key>ru</key> + <value>Настройка состояний, которые будут использоваться при отслеживании оригиналов первичных документов.</value> + + Label + true + true + + Left + + + Hyperlink + Form.Command.ОткрытьСостоянияОригиналовПервичныхДокументов + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Состояние оригиналов первичных документов настройка</value> + + 43 + + ГруппаСостояниеОригиналовПервичныхДокументовНастройкаРасширеннаяПодсказка + 1704 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа состояние оригиналов первичных документов.</value> + + false + + ГруппаСостояниеОригиналовПервичныхДокументовРасширеннаяПодсказка + 1697 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + ФормаКоманднаяПанель -1 @@ -1078,6 +1260,28 @@ 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 e0b6e3b46..4c956f9d1 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl @@ -62,6 +62,13 @@ Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +&НаКлиенте +Процедура ИспользоватьУчетОригиналовПервичныхДокументовПриИзменении(Элемент) + + Подключаемый_ПриИзмененииРеквизита(Элемент) + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -76,6 +83,17 @@ КонецПроцедуры +&НаКлиенте +Процедура ОткрытьСостоянияОригиналовПервичныхДокументов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда + МодульУчетОригиналовПервичныхДокументовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УчетОригиналовПервичныхДокументовКлиент"); + МодульУчетОригиналовПервичныхДокументовКлиент.ОткрытьФормуНастройкиСостояний(); + КонецЕсли; + +КонецПроцедуры + + #КонецОбласти @@ -156,6 +174,11 @@ Элементы.ОткрытьДополнительныеОтчетыИОбработки.Доступность = НаборКонстант.ИспользоватьДополнительныеОтчетыИОбработки; КонецЕсли; + Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьУчетОригиналовПервичныхДокументов" ИЛИ РеквизитПутьКДанным = "" + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда + Элементы.ОткрытьСостоянияОригиналовПервичныхДокументов.Доступность = НаборКонстант.ИспользоватьУчетОригиналовПервичныхДокументов; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl index 3ed59efae..b8819c14e 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl @@ -31,7 +31,7 @@ // общего модуля ВариантыОтчетов. // // Параметры: -// Разделы - СписокЗначений - +// Разделы - СписокЗначений // Процедура ПриОпределенииРазделовСВариантамиОтчетов(Разделы) Экспорт diff --git a/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl index f9a9e4417..dd9434896 100644 --- a/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl @@ -263,10 +263,11 @@ КонецПроцедуры // Параметры: -// Файл - СправочникОбъект - . -// СвойстваТома - Структура - . -// ОшибкиПереноса - Массив -. -// ПеренесеноФайлов - Число - . +// Файл - СправочникОбъект +// СвойстваТома - Структура +// ОшибкиПереноса - Массив +// ПеренесеноФайлов - Число +// &НаСервере Процедура ПеренестиФайл(Файл, СвойстваТома, ОшибкиПереноса, ПеренесеноФайлов) @@ -281,7 +282,7 @@ Блокировка.Заблокировать(); ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); - ИмяДляЖурнала = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; + ИмяДляЖурнала = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ФайлОбъект.Наименование, ФайлОбъект.Расширение); Если ПереноситьВТом И СвойстваТома.МаксимальныйОбъемТома > 0 И СвойстваТома.ТекущийОбъемТома + ФайлОбъект.Размер > СвойстваТома.МаксимальныйОбъемТома Тогда diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/НастройкиСообщенийИзДругихПрограмм/CommandModule.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/НастройкиСообщенийИзДругихПрограмм/CommandModule.bsl new file mode 100644 index 000000000..979ed127c --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/НастройкиСообщенийИзДругихПрограмм/CommandModule.bsl @@ -0,0 +1,16 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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..96c42696f --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПрограмм/Form.form @@ -0,0 +1,516 @@ + + + + <key>ru</key> + <value>Настройка сообщений из других программ</value> + + + СписокПодключений + 1 + + <key>ru</key> + <value>Список подключений</value> + + true + true + + true + + + СписокПодключений + + None + + СписокПодключенийАктивно + 20 + true + true + + true + + + СписокПодключений.Активно + + None + + ru + Бот активирован + + + СписокПодключенийАктивноРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + СписокПодключенийАктивноКонтекстноеМеню + 21 + true + + PictureField + Enter + true + + CommonPicture.СостоянияРасширенийПодключено + + true + + 1 + true + true + true + true + Proportionally + + CommonPicture.СостоянияРасширенийКонфигурации + + + + 1 + + AsFileRef + + + + СписокПодключенийНаименование + 14 + true + true + + true + + + СписокПодключений.Наименование + + + СписокПодключенийНаименованиеРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокПодключенийНаименованиеКонтекстноеМеню + 15 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокПодключенийКоманднаяПанель + 2 + Left + + + Selection + СписокПодключенийВыбор + + + СписокПодключенийСтрокаПоиска + 5 + + СписокПодключенийСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + СписокПодключенийСтрокаПоискаКонтекстноеМеню + 6 + true + + СписокПодключений + + true + + + + СписокПодключенийСостояниеПросмотра + 11 + + СписокПодключенийСостояниеПросмотраРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СписокПодключенийСостояниеПросмотраКонтекстноеМеню + 12 + true + + ViewStatusAddition + СписокПодключений + + true + + + + СписокПодключенийУправлениеПоиском + 8 + + СписокПодключенийУправлениеПоискомРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + СписокПодключенийУправлениеПоискомКонтекстноеМеню + 9 + true + + SearchControlAddition + СписокПодключений + + true + + + + СписокПодключенийРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + СписокПодключенийКонтекстноеМеню + 3 + true + + Tree + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + ExpandAllLevels + true + true + AsFileRef + true +
    + + ФормаКоманднаяПанель + -1 + + ПодменюСоздать + 29 + + ФормаСоздатьБотаТелеграмм + 31 + true + true + + true + + + ФормаСоздатьБотаТелеграммРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + Form.Command.СоздатьБотаТелеграмм + Normal + Auto + true + true + UserCmds + + CommonPicture.Телеграм16х16 + + Auto + + + ФормаСоздатьБотаВКонтакте + 33 + true + true + + true + + + ФормаСоздатьБотаВКонтактеРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Form.Command.СоздатьБотаВКонтакте + Normal + Auto + true + true + UserCmds + + CommonPicture.ВКонтакте16х16 + + Auto + + true + true + + true + + + <key>ru</key> + <value>Создать</value> + + + ПодменюСоздатьРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + + + ФормаОбновить + 41 + true + true + + true + + + ФормаОбновитьРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + auto + true + + СписокПодключений + + <key>ru</key> + <value>Список подключений</value> + + 1 + + ValueTree + + + true + + + true + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 2 + + String + + + + true + + + true + + + + Тип + 3 + + String + + + + true + + + true + + + + Активно + + <key>ru</key> + <value>Активно</value> + + 4 + + Number + + 1 + + + + true + + + true + + + + Идентификатор + 1 + + + true + + + true + + + + + СоздатьБотаТелеграмм + + <key>ru</key> + <value>Чат Telegram</value> + + 1 + + true + + + + СоздатьБотаТелеграмм + + + Auto + Auto + + + СоздатьБотаВКонтакте + + <key>ru</key> + <value>Чат ВКонтакте</value> + + 2 + + true + + + + СоздатьБотаВКонтакте + + + Auto + Auto + + + Обновить + + <key>ru</key> + <value>Обновить</value> + + 3 + + ru + Обновить + + + true + + F5 + + StdPicture.Refresh + + + + Обновить + + + Picture + Auto + Auto + + + + + +
    diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПрограмм/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПрограмм/Module.bsl new file mode 100644 index 000000000..a8e215720 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПрограмм/Module.bsl @@ -0,0 +1,129 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ОписаниеСистемы = Новый СистемнаяИнформация; + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии("8.3.17.0", ОписаниеСистемы.ВерсияПриложения) > 0 Тогда + ВызватьИсключение НСтр("ru='Форма не предназначена для использования с платформой версии ниже 8.3.17'"); + КонецЕсли; + + ТипыВнешнихСистем = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем(); + + Телеграмм = СписокПодключений.ПолучитьЭлементы().Добавить(); + Телеграмм.Наименование = "Чаты Telegram"; + Телеграмм.Активно = -1; + Телеграмм.Тип = ТипыВнешнихСистем.Телеграм; + + ВКонтакте = СписокПодключений.ПолучитьЭлементы().Добавить(); + ВКонтакте.Наименование = "Чаты ВКонтакте"; + ВКонтакте.Активно = -1; + ВКонтакте.Тип = ТипыВнешнихСистем.ВКонтакте; + + ОбновитьСписокИнтеграций(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СоздатьБотаТелеграмм(Команда) + Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); + ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, + Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Телеграм), + Оповещение); +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьБотаВКонтакте(Команда) + Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); + ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, + Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВКонтакте), + Оповещение); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПослеИзмененияИнтеграции(Результат, ДополнительныеПараметры) Экспорт + ОбновитьСписокИнтеграций(); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокИнтеграций() + + ТипыИнтеграции = Новый Соответствие; + + Для каждого ТипИнтеграции Из СписокПодключений.ПолучитьЭлементы() Цикл + ТипИнтеграции.ПолучитьЭлементы().Очистить(); + ТипыИнтеграции.Вставить(ТипИнтеграции.Тип, ТипИнтеграции); + КонецЦикла; + + Для каждого Интеграция Из СистемаВзаимодействия.ПолучитьИнтеграции() Цикл + + Категория = ТипыИнтеграции[Интеграция.ТипВнешнейСистемы]; + Если Категория <> Неопределено Тогда + НоваяИнтеграция = Категория.ПолучитьЭлементы().Добавить(); + ИнтеграцияВДанныеФормы(Интеграция, НоваяИнтеграция); + Иначе + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + НСтр("ru='Не поддерживаемый тип внешней интеграции'")); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ИнтеграцияВДанныеФормы(Знач Интеграция, Знач ДанныеФормы) + + ДанныеФормы.Активно = ?(Интеграция.Использование, 0, 2); + ДанныеФормы.Наименование = Интеграция.Представление; + ДанныеФормы.Идентификатор = Интеграция.Идентификатор; + ДанныеФормы.Тип = Интеграция.ТипВнешнейСистемы; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПодключенийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + Интеграция = СписокПодключений.НайтиПоИдентификатору(ВыбраннаяСтрока); + Если Интеграция.Идентификатор = Неопределено Тогда + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Тип", Интеграция.Тип); + ПараметрыФормы.Вставить("Идентификатор", Интеграция.Идентификатор); + ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции( + ЭтотОбъект, + ПараметрыФормы, + Оповещение); +КонецПроцедуры + +&НаКлиенте +Процедура Обновить(Команда) + ОбновитьНаСервере(); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьНаСервере() + ОбновитьСписокИнтеграций(); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Form.form new file mode 100644 index 000000000..4c02f9dc4 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Form.form @@ -0,0 +1,719 @@ + + + + <key>ru</key> + <value>Подключение бота ВКонтакте</value> + + + ГруппаОписание + 68 + + Логотип + 70 + + <key>ru</key> + <value>Логотип</value> + + true + true + + true + + + ЛоготипРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ЛоготипКонтекстноеМеню + 71 + true + + true + true + + + CommonPicture.BotFatherВконтакте + + AsFileRef + + + + Инструкция + 42 + + <key>ru</key> + <value>1. Перейдите в настройки сообщества +2. На вкладке Работа с API создайте ключ и введите его в поле Ключ +3. На вкладке Callback API найдите строчку похожую на +{"type":"Confirmation", "group_id": 346875149} +4. Введите цифры group_id в поле ключ группы +5. Добавьте пользователей, которые будут получать сообщения от бота</value> + + true + true + + true + + + ИнструкцияРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ИнструкцияКонтекстноеМеню + 43 + true + + true + Label + true + true + true + Center + + Left + + + true + true + + true + + + <key>ru</key> + <value>Описание</value> + + + ГруппаОписаниеРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаПараметры + 97 + + Наименование + 30 + true + true + + true + + + Наименование + + + НаименованиеРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Наименование бота в 1С + + + + + Токен + 33 + true + true + + true + + + Токен + + + ТокенРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ТокенКонтекстноеМеню + 34 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Ключ, созданный на вкладке Работа с API + + + + + ИдГруппы + 36 + + <key>ru</key> + <value>Ключ группы</value> + + true + true + + true + + + ИдГруппы + + + ИдГруппыРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ИдГруппыКонтекстноеМеню + 37 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Ключ, отображаемый на вкладке Callback API + + + + true + true + + true + + + <key>ru</key> + <value>Параметры</value> + + + ГруппаПараметрыРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + Auto + Auto + + + + Участники + 50 + + <key>ru</key> + <value>Участники обсуждения</value> + + true + true + + true + + + Участники + + + УчастникиПользователь + 63 + true + true + + true + + + Участники.Пользователь + + + УчастникиПользовательРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + УчастникиПользовательКонтекстноеМеню + 64 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + УчастникиКоманднаяПанель + 51 + + ПользователиПодобрать + 66 + true + true + + true + + + ПользователиПодобратьРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Form.Command.Подобрать + Normal + Auto + true + true + UserCmds + Auto + + Left + + + ChoiceProcessing + УчастникиОбработкаВыбора + + + УчастникиСтрокаПоиска + 54 + + УчастникиСтрокаПоискаРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + УчастникиСтрокаПоискаКонтекстноеМеню + 55 + true + + Участники + + true + + + + УчастникиСостояниеПросмотра + 60 + + УчастникиСостояниеПросмотраРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + УчастникиСостояниеПросмотраКонтекстноеМеню + 61 + true + + ViewStatusAddition + Участники + + true + + + + УчастникиУправлениеПоиском + 57 + + УчастникиУправлениеПоискомРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + УчастникиУправлениеПоискомКонтекстноеМеню + 58 + true + + SearchControlAddition + Участники + + true + + + + УчастникиРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + УчастникиКонтекстноеМеню + 52 + true + + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + AsFileRef + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + Отключить + 99 + true + true + + true + + + ОтключитьРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + Form.Command.Отключить + Normal + Auto + true + true + UserCmds + Auto + + + Закрыть + 28 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.Активизировать + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + ShowError + + + Токен + + <key>ru</key> + <value>Ключ</value> + + 2 + + String + + + + true + + + true + + ShowError + + + ИдГруппы + + <key>ru</key> + <value>Ид группы</value> + + 3 + + String + + + + true + + + true + + ShowError + + + Участники + + <key>ru</key> + <value>Участники</value> + + 4 + + ValueTable + + + true + + + true + + ShowError + + Пользователь + + <key>ru</key> + <value>Участники обсуждения</value> + + 5 + + CatalogRef.Пользователи + + + true + + + true + + + + + Активизировать + + <key>ru</key> + <value>Активизировать</value> + + 1 + + ru + Активизировать + + + true + + + + Активировать + + + Auto + Auto + + + Подобрать + + <key>ru</key> + <value>Подобрать</value> + + 2 + + true + + + + Подобрать + + + Auto + Auto + + + Отключить + + <key>ru</key> + <value>Отключить</value> + + 3 + + ru + Отключить + + + true + + + + Отключить + + + Auto + Auto + + + Идентификатор + + true + + + + + + diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Module.bsl new file mode 100644 index 000000000..e514c79fd --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Module.bsl @@ -0,0 +1,113 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Идентификатор <> Неопределено Тогда + ОписаниеИнтеграции = СистемаВзаимодействия.ПолучитьИнтеграцию(Параметры.Идентификатор); + Если ОписаниеИнтеграции <> Неопределено Тогда + Наименование = ОписаниеИнтеграции.Представление; + Токен = ОписаниеИнтеграции.ПараметрыВнешнейСистемы.Получить("token"); + ИдГруппы = ОписаниеИнтеграции.ПараметрыВнешнейСистемы.Получить("groupId"); + + Участники.Очистить(); + Для каждого ПользовательИБ Из Обсуждения.ПользователиИнформационнойБазы(ОписаниеИнтеграции.Участники) Цикл + Участники.Добавить().Пользователь = ПользовательИБ.Значение; + КонецЦикла; + КонецЕсли; + + Если ОписаниеИнтеграции.Использование Тогда + Элементы.Закрыть.Заголовок = "Изменить"; + Элементы.Отключить.Видимость = Истина; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Подобрать(Команда) + ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники); +КонецПроцедуры + +&НаКлиенте +Процедура Активировать(Команда) + Если НЕ ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + + Попытка + АктивироватьСервер(); + Закрыть(Истина); + Исключение + ПоказатьПредупреждение(, НСтр("ru='Во время активизации чат-бота произошла ошибка'") + + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; +КонецПроцедуры + +&НаСервере +Процедура АктивироватьСервер() + + ПараметрыИнтеграции = Новый Структура; + ПараметрыИнтеграции.Вставить("Идентификатор", Параметры.Идентификатор); + ПараметрыИнтеграции.Вставить("Ключ", Наименование); + ПараметрыИнтеграции.Вставить("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВКонтакте); + ПараметрыИнтеграции.Вставить("Участники", Участники.Выгрузить(,"Пользователь").ВыгрузитьКолонку("Пользователь")); + ПараметрыИнтеграции.Вставить("token", Токен); + ПараметрыИнтеграции.Вставить("groupId", ИдГруппы); + + Попытка + ОбсужденияСлужебный.СоздатьИзменитьИнтеграцию(ПараметрыИнтеграции); + Исключение + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура УчастникиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Если ВыбранноеЗначение = Неопределено Тогда + Возврат; + КонецЕсли; + + Для каждого ПодобранныйПользователь Из ВыбранноеЗначение Цикл + Если Участники.НайтиСтроки(Новый Структура("Пользователь", ПодобранныйПользователь)).Количество() = 0 Тогда + Участники.Добавить().Пользователь = ПодобранныйПользователь; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура Отключить(Команда) + Попытка + ОтключитьСервер(); + Закрыть(Истина); + Исключение + ПоказатьПредупреждение(, НСтр("ru='Во время отключение чат-бота произошла ошибка'") + + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; +КонецПроцедуры + +&НаСервере +Процедура ОтключитьСервер() + ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор); +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Form.form new file mode 100644 index 000000000..9328d68f2 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Form.form @@ -0,0 +1,654 @@ + + + + <key>ru</key> + <value>Подключение бота Telegram</value> + + + ГруппаОписание + 1 + + Логотип + 5 + + <key>ru</key> + <value>Логотип</value> + + true + true + + true + + + ЛоготипРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ЛоготипКонтекстноеМеню + 6 + true + + 13 + true + 5 + true + false + Center + Center + + + CommonPicture.BotFather + + Proportionally + AsFileRef + + + + Инструкция + 8 + + <key>ru</key> + <value>Бот в Telegram создается при помощи другого бота под названием <link https://telegram.me/BotFather>BotFather</>. +1. Откройте Telegram в телефоне или на компьютере, найдите поиском BotFather. +2. Отправьте ему команду /newbot, выберите имя, которое будет отображаться в списке контактов. +3. Если адрес не занят, а имя введено правильно, BotFather пришлет в ответ сообщение с токеном — «ключом» для доступа к созданному боту, который понадобится далее при настройке. + +Не забудьте задать описание бота и картинку, как описано <link https://tlgrm.ru/docs/bots#edit-settings>здесь</>.</value> + + true + true + + true + + + ИнструкцияРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ИнструкцияКонтекстноеМеню + 9 + true + + true + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Описание</value> + + Center + + ГруппаОписаниеРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Center + Auto + true + true + Auto + Auto + + + + ГруппаПараметры + 3 + + ИмяБота + 11 + true + true + + true + + + Наименование + + + ИмяБотаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ИмяБотаКонтекстноеМеню + 12 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Наименование бота в Telegram + + + + + Токен + 14 + true + true + + true + + + Токен + + Button + + ТокенРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ТокенКонтекстноеМеню + 15 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Токен, выданный BotFather при регистрации + + + + + Участники + 17 + + <key>ru</key> + <value>Участники обсуждения</value> + + true + true + + true + + + Участники + + + УчастникиПользователь + 30 + true + true + + true + + + Участники.Пользователь + + + УчастникиПользовательРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + УчастникиПользовательКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + УчастникиКоманднаяПанель + 18 + + ОтветственныеПодобрать + 33 + true + true + + true + + + ОтветственныеПодобратьРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Form.Command.Подобрать + Normal + Auto + true + true + UserCmds + Auto + + Left + + + ChoiceProcessing + УчастникиОбработкаВыбора + + + УчастникиСтрокаПоиска + 21 + + УчастникиСтрокаПоискаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + УчастникиСтрокаПоискаКонтекстноеМеню + 22 + true + + Участники + + true + + + + УчастникиСостояниеПросмотра + 27 + + УчастникиСостояниеПросмотраРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + УчастникиСостояниеПросмотраКонтекстноеМеню + 28 + true + + ViewStatusAddition + Участники + + true + + + + УчастникиУправлениеПоиском + 24 + + УчастникиУправлениеПоискомРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + УчастникиУправлениеПоискомКонтекстноеМеню + 25 + true + + SearchControlAddition + Участники + + true + + + + УчастникиРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + УчастникиКонтекстноеМеню + 19 + true + + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + AsFileRef + true + + + true + true + + true + + + <key>ru</key> + <value>Параметры</value> + + + ГруппаПараметрыРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + Отключить + 37 + true + + true + + + ОтключитьРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.Command.Отключить + Normal + Auto + true + true + UserCmds + Auto + + + Закрыть + 35 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Form.Command.Активировать + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + ShowError + + + Токен + + <key>ru</key> + <value>Токен</value> + + 2 + + String + + + + true + + + true + + ShowError + + + Участники + + <key>ru</key> + <value>Участники</value> + + 3 + + ValueTable + + + true + + + true + + ShowError + + Пользователь + + <key>ru</key> + <value>Участники обсуждения</value> + + 4 + + CatalogRef.Пользователи + + + true + + + true + + + + + Подобрать + + <key>ru</key> + <value>Подобрать</value> + + 1 + + true + + + + Подобрать + + + Auto + Auto + + + Активировать + + <key>ru</key> + <value>Активировать</value> + + 2 + + true + + + + Активировать + + + Auto + Auto + + + Отключить + + <key>ru</key> + <value>Отключить</value> + + 3 + + ru + Отключить + + + true + + + + Отключить + + + Auto + Auto + + + Идентификатор + + true + + + + + + diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Module.bsl new file mode 100644 index 000000000..144ab8ee6 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Module.bsl @@ -0,0 +1,113 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Идентификатор <> Неопределено Тогда + ОписаниеИнтеграции = СистемаВзаимодействия.ПолучитьИнтеграцию(Параметры.Идентификатор); + + Если ОписаниеИнтеграции <> Неопределено Тогда + Наименование = ОписаниеИнтеграции.Представление; + Токен = ОписаниеИнтеграции.ПараметрыВнешнейСистемы.Получить("token"); + + Участники.Очистить(); + Для каждого ПользовательИБ Из Обсуждения.ПользователиИнформационнойБазы(ОписаниеИнтеграции.Участники) Цикл + Участники.Добавить().Пользователь = ПользовательИБ.Значение; + КонецЦикла; + КонецЕсли; + + Если ОписаниеИнтеграции.Использование Тогда + Элементы.Закрыть.Заголовок = "Изменить"; + Элементы.Отключить.Видимость = Истина; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Подобрать(Команда) + ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники); +КонецПроцедуры + +&НаКлиенте +Процедура Активировать(Команда) + Если НЕ ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + + Попытка + АктивироватьСервер(); + Закрыть(Истина); + Исключение + ПоказатьПредупреждение(, НСтр("ru='Во время активизации чат-бота произошла ошибка'") + + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; +КонецПроцедуры + +&НаСервере +Процедура АктивироватьСервер() + + ПараметрыИнтеграции = Новый Структура; + ПараметрыИнтеграции.Вставить("Идентификатор", Параметры.Идентификатор); + ПараметрыИнтеграции.Вставить("Ключ", Наименование); + ПараметрыИнтеграции.Вставить("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Телеграм); + ПараметрыИнтеграции.Вставить("Участники", Участники.Выгрузить(,"Пользователь").ВыгрузитьКолонку("Пользователь")); + ПараметрыИнтеграции.Вставить("token", Токен); + + Попытка + ОбсужденияСлужебный.СоздатьИзменитьИнтеграцию(ПараметрыИнтеграции); + Исключение + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура УчастникиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Если ВыбранноеЗначение = Неопределено Тогда + Возврат; + КонецЕсли; + + Для каждого ПодобранныйПользователь Из ВыбранноеЗначение Цикл + Если Участники.НайтиСтроки(Новый Структура("Пользователь", ПодобранныйПользователь)).Количество() = 0 Тогда + Участники.Добавить().Пользователь = ПодобранныйПользователь; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура Отключить(Команда) + Попытка + ОтключитьСервер(); + Закрыть(Истина); + Исключение + ПоказатьПредупреждение(, НСтр("ru='Во время отключение чат-бота произошла ошибка'") + + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; +КонецПроцедуры + +&НаСервере +Процедура ОтключитьСервер() + ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор); +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form index b5a6f90d1..44aa4bd88 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form @@ -250,8 +250,7 @@ <key>ru</key> <value>Подключите обсуждения, и пользователи этой программы смогут общаться друг с другом в режиме реального времени, создавать тематические обсуждения и вести переписку по конкретным документам, например: заказам, реализациям или контрагентам. - -Подробнее см. <link https://its.1c.ru/db/v83doc#bookmark:utx:TI000000335>документацию</>.</value> +</value> true true @@ -295,12 +294,18 @@ None ru - Информационная база будет связана с этим адресом. + На этот адрес электронной почты будут приходить коды активации. ShowBottom АдресЭлектроннойПочтыРасширеннаяПодсказка 9 + + <key>ru</key> + <value>На этот адрес электронной почты будут приходить коды активации. +</value> + + true Label true true @@ -331,6 +336,253 @@
    + + ГруппаВыборСервераВзаимодействия + 125 + + ВыборСервераВзаимодействияДиалог + 111 + true + true + + true + + + ВыборСервераВзаимодействия + + None + + OnChange + ВыборСервераВзаимодействияДиалогПриИзменении + + + ВыборСервераВзаимодействияДиалогРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + ВыборСервераВзаимодействияДиалогКонтекстноеМеню + 112 + true + + RadioButtonField + Enter + true + Left + true + + RadioButtons + + + ru + 1С:Диалог (рекомендуемый вариант) + + + 0 + + + Vertical + + + + ВыборСервераВзаимодействияЛокально + 114 + true + true + + true + + + ВыборСервераВзаимодействия + + None + + OnChange + ВыборСервераВзаимодействияЛокальноПриИзменении + + + ВыборСервераВзаимодействияЛокальноРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ВыборСервераВзаимодействияЛокальноКонтекстноеМеню + 115 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Локальный сервер системы Взаимодействия + + + 1 + + + Vertical + + + + ГруппаЛокальныйСерверВзаимодействия + 120 + + ДекорацияПропуск + 122 + true + true + + true + + + ДекорацияПропускРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + + ДекорацияПропускКонтекстноеМеню + 123 + true + + Label + 1 + true + true + + Left + + + + АдресЛокальногоСервераВзаимодействия + 117 + true + true + + true + + + АдресСервераВзаимодействия + + None + + OnChange + АдресСервераВзаимодействияПриИзменении + + + АдресЛокальногоСервераВзаимодействияРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + АдресЛокальногоСервераВзаимодействияКонтекстноеМеню + 118 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + ws://localhost + + + + true + true + + true + + + <key>ru</key> + <value>Локальный сервер взаимодействия</value> + + + ГруппаЛокальныйСерверВзаимодействияРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Подключаться к 1С:Диалог</value> + + + ГруппаВыборСервераВзаимодействияРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + true + Button + true + true + auto + Auto + Auto + + true true @@ -1039,6 +1291,56 @@ true + + ВыборСервераВзаимодействия + + <key>ru</key> + <value>Выбор сервера взаимодействия</value> + + 9 + + Number + + + + true + + + true + + + + АдресСервераВзаимодействия + + <key>ru</key> + <value>Адрес сервера взаимодействия</value> + + 10 + + String + + + + true + + + true + + + + ИмяБазы + 11 + + String + + + + true + + + true + + Зарегистрироваться diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl index 60ba9897e..0567821c3 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl @@ -16,8 +16,9 @@ Возврат; КонецЕсли; - СерверВзаимодействия = "wss://1cdialog.com:443"; - ИмяИнформационнойБазы = Метаданные.КраткаяИнформация; + УстановитьСерверВзаимодействияПоУмолчанию(ЭтотОбъект); + + ИмяИнформационнойБазы = Константы.ЗаголовокСистемы.Получить(); СостояниеРегистрации = ТекущееСостояниеРегистрации(); ПриИзмененииСостоянияФормы(ЭтотОбъект); @@ -36,6 +37,23 @@ КонецПроцедуры +&НаКлиенте +Процедура ВыборСервераВзаимодействияДиалогПриИзменении(Элемент) + УстановитьСерверВзаимодействияПоУмолчанию(ЭтотОбъект); + ОбновитьЭлементыВыбораСервера(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ВыборСервераВзаимодействияЛокальноПриИзменении(Элемент) + ОбновитьЭлементыВыбораСервера(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура АдресСервераВзаимодействияПриИзменении(Элемент) + СерверВзаимодействия = АдресСервераВзаимодействия; + ОбновитьЭлементыВыбораСервера(ЭтотОбъект); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -93,6 +111,11 @@ Возврат; КонецЕсли; + Если ВыборСервераВзаимодействия = 1 И ПустаяСтрока(АдресСервераВзаимодействия) Тогда + ПоказатьПредупреждение(, НСтр("ru='Не указан адрес локального сервера взаимодействия'")); + Возврат; + КонецЕсли; + ПараметрыРегистрации = Новый ПараметрыРегистрацииИнформационнойБазыСистемыВзаимодействия; ПараметрыРегистрации.АдресСервера = СерверВзаимодействия; ПараметрыРегистрации.АдресЭлектроннойПочты = АдресЭлектроннойПочты; @@ -209,6 +232,7 @@ УстановитьСтраницу(Форма); ОбновитьВидимостьКнопокКоманднойПанели(Форма); + ОбновитьЭлементыВыбораСервера(Форма); КонецПроцедуры @@ -241,6 +265,11 @@ КонецФункции +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьСерверВзаимодействияПоУмолчанию(Форма) + Форма.СерверВзаимодействия = "wss://1cdialog.com:443"; +КонецПроцедуры + #КонецОбласти #Область Представления @@ -297,6 +326,27 @@ КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьЭлементыВыбораСервера(Форма) + ПредставлениеСервераВзаимодействия = ?(Форма.ВыборСервераВзаимодействия = 0, + НСтр("ru='1С:Диалог'"), + Форма.СерверВзаимодействия); + ПредставлениеЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Подключаться к %1'"), + ПредставлениеСервераВзаимодействия); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Форма.Элементы, + "ГруппаЛокальныйСерверВзаимодействия", + "Заголовок", + ПредставлениеЗаголовка); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Форма.Элементы, + "ГруппаЛокальныйСерверВзаимодействия", + "Доступность", + Форма.ВыборСервераВзаимодействия <> 0); +КонецПроцедуры + #КонецОбласти #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo b/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo index 8e85e2e81..bcdc92b86 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo @@ -25,6 +25,33 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <forms uuid="8640eacd-e6f9-4b0b-8511-c6ad2336ec6c"> + <name>НастройкиСообщенийИзДругихПрограмм</name> + <synonym> + <key>ru</key> + <value>Настройки сообщений из других программ</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> + <forms uuid="b374e22f-17f3-4186-af1f-fa35d1a7e559"> + <name>СозданиеБотаТелеграм</name> + <synonym> + <key>ru</key> + <value>Создание бота телеграм</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> + <forms uuid="53555ee4-f99d-4935-a884-89313aa3ca6a"> + <name>СозданиеБотаВКонтакте</name> + <synonym> + <key>ru</key> + <value>Создание бота в контакте</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> <commands uuid="f38bb317-8a59-4786-be76-e1d4e534628d"> <name>ОтключениеОбсуждений</name> <synonym> @@ -34,4 +61,13 @@ <group>ActionsPanelTools</group> <representation>Auto</representation> </commands> + <commands uuid="25741b39-1c6b-4851-8584-9711d25ef05a"> + <name>НастройкиСообщенийИзДругихПрограмм</name> + <synonym> + <key>ru</key> + <value>Настройки сообщений из других программ</value> + </synonym> + <group>ActionsPanelTools</group> + <representation>Auto</representation> + </commands> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form index 741ae33f6..8711ccfd7 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form @@ -637,7 +637,7 @@ <excludedCommands>Change</excludedCommands> <items xsi:type="form:FormField"> <name>НайденныеДублиПометкаУдаления</name> - <id>471</id> + <id>516</id> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -653,7 +653,7 @@ </toolTip> <extendedTooltip> <name>НайденныеДублиПометкаУдаленияРасширеннаяПодсказка</name> - <id>473</id> + <id>518</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -663,7 +663,7 @@ </extendedTooltip> <contextMenu> <name>НайденныеДублиПометкаУдаленияКонтекстноеМеню</name> - <id>472</id> + <id>517</id> <autoFill>true</autoFill> </contextMenu> <type>PictureField</type> @@ -689,6 +689,46 @@ <items xsi:type="form:FormGroup"> <name>ИспользоватьНаименование</name> <id>109</id> + <items xsi:type="form:FormField"> + <name>НайденныеДублиПометка</name> + <id>103</id> + <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>105</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>НайденныеДублиПометкаКонтекстноеМеню</name> + <id>104</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"> + <threeState>true</threeState> + </extInfo> + </items> <items xsi:type="form:FormField"> <name>НайденныеДублиОсновной</name> <id>114</id> @@ -740,46 +780,6 @@ </border> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>НайденныеДублиПометка</name> - <id>103</id> - <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>105</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>НайденныеДублиПометкаКонтекстноеМеню</name> - <id>104</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"> - <threeState>true</threeState> - </extInfo> - </items> <items xsi:type="form:FormField"> <name>НайденныеДублиНаименование</name> <id>100</id> @@ -1207,6 +1207,32 @@ </extendedTooltip> <extInfo xsi:type="form:ButtonGroupExtInfo"/> </items> + <items xsi:type="form:Button"> + <name>НайденныеДублиКонтекстноеМенюСортироватьСписокПоУбыванию</name> + <id>519</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>НайденныеДублиКонтекстноеМенюСортироватьСписокПоУбываниюРасширеннаяПодсказка</name> + <id>520</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Item.НайденныеДубли.StandardCommand.SortListDesc</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <autoFill>true</autoFill> </contextMenu> <representation>Tree</representation> @@ -1832,17 +1858,90 @@ <items xsi:type="form:FormGroup"> <name>ШагУспешноеУдаление</name> <id>212</id> - <items xsi:type="form:Decoration"> - <name>Декорация5</name> - <id>352</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаИнформацияОбУспешномУдалении</name> + <id>471</id> + <items xsi:type="form:Decoration"> + <name>Декорация5</name> + <id>352</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>Декорация5РасширеннаяПодсказка</name> + <id>354</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>Декорация5КонтекстноеМеню</name> + <id>353</id> + <autoFill>true</autoFill> + </contextMenu> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <groupVerticalAlign>Center</groupVerticalAlign> + <extInfo xsi:type="form:PictureDecorationExtInfo"> + <picture xsi:type="core:PictureRef"> + <picture>CommonPicture.Успешно32</picture> + </picture> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ОписаниеСостоянияНайденныхДублей1</name> + <id>344</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>ОписаниеСостоянияНайденныхДублей1РасширеннаяПодсказка</name> + <id>346</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ОписаниеСостоянияНайденныхДублей1КонтекстноеМеню</name> + <id>345</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <horizontalAlign>Left</horizontalAlign> + <verticalAlign>Center</verticalAlign> + <groupVerticalAlign>Center</groupVerticalAlign> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <height>5</height> + <autoMaxHeight>true</autoMaxHeight> + <verticalStretch>false</verticalStretch> + </extInfo> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> <extendedTooltip> - <name>Декорация5РасширеннаяПодсказка</name> - <id>354</id> + <name>ГруппаИнформацияОбУспешномУдаленииРасширеннаяПодсказка</name> + <id>472</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1850,35 +1949,440 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <contextMenu> - <name>Декорация5КонтекстноеМеню</name> - <id>353</id> - <autoFill>true</autoFill> - </contextMenu> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <groupVerticalAlign>Center</groupVerticalAlign> - <extInfo xsi:type="form:PictureDecorationExtInfo"> - <picture xsi:type="core:PictureRef"> - <picture>CommonPicture.Успешно32</picture> - </picture> + <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:FormField"> - <name>ОписаниеСостоянияНайденныхДублей1</name> - <id>344</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаВозможныеДубли</name> + <id>495</id> + <displayImportance>Low</displayImportance> + <items xsi:type="form:FormGroup"> + <name>ГруппаДействияВозможныеДубли</name> + <id>502</id> + <items xsi:type="form:Decoration"> + <name>ДекорацияПодсказкаВозможныеДубли</name> + <id>504</id> + <title> + <key>ru</key> + <value>Для продолжения поиска выберете список и нажмите кнопку "Новый поиск"</value> + + true + true + + true + + + ДекорацияПодсказкаВозможныеДублиРасширеннаяПодсказка + 506 + Label + true + true + + Left + + + + ДекорацияПодсказкаВозможныеДублиКонтекстноеМеню + 505 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + +
    + + ОтображаемаяСтепеньРодства + 507 + + <key>ru</key> + <value>Показать</value> + + true + true + + true + + + ОтображаемаяСтепеньРодства + + + ru + Важные - места использования замененных элементов с наиболее вероятным возникновением дублей + + + OnChange + ОтображаемаяСтепеньРодстваПриИзменении + + + ОтображаемаяСтепеньРодстваРасширеннаяПодсказка + 509 + Label + true + true + + Left + + + + ОтображаемаяСтепеньРодстваКонтекстноеМеню + 508 + true + + RadioButtonField + Right + Enter + true + Left + true + + Tumbler + + + ru + Важные + + + 2 + + + + + ru + Все + + + 1 + + + Vertical + + + true + true + + true + + + ГруппаДействияВозможныеДублиРасширеннаяПодсказка + 503 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + +
    + + ВозможныеДубли + 473 + true + true + + true + + + ВозможныеДубли + + None + ShowTop + + ВозможныеДублиГруппа + 510 + + ВозможныеДублиВыбран + 497 + true + true + + true + + + ВозможныеДубли.Выбран + + None + + OnChange + ВозможныеДублиВыбранПриИзменении + + + ВозможныеДублиВыбранРасширеннаяПодсказка + 499 + Label + true + true + + Left + + + + ВозможныеДублиВыбранКонтекстноеМеню + 498 + true + + CheckBoxField + Auto + true + Left + true + + + + ВозможныеДублиИмяОбъектаМетаданных + 486 + true + true + + true + + + ВозможныеДубли.ИмяОбъектаМетаданных + + + ВозможныеДублиИмяОбъектаМетаданныхРасширеннаяПодсказка + 488 + Label + true + true + + Left + + + + ВозможныеДублиИмяОбъектаМетаданныхКонтекстноеМеню + 487 + true + + InputField + true + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + ВозможныеДублиГруппаРасширеннаяПодсказка + 511 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ВозможныеДублиИсточники + 492 + true + true + + true + + + ВозможныеДубли.ИсточникиПредставление + + + ВозможныеДублиИсточникиРасширеннаяПодсказка + 494 + Label + true + true + + Left + + + + ВозможныеДублиИсточникиКонтекстноеМеню + 493 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ВозможныеДублиКоманднаяПанель + 475 + Left + + + ВозможныеДублиСтрокаПоиска + 477 + + ВозможныеДублиСтрокаПоискаРасширеннаяПодсказка + 479 + Label + true + true + + Left + + + + ВозможныеДублиСтрокаПоискаКонтекстноеМеню + 478 + true + + ВозможныеДубли + + true + + + + ВозможныеДублиСостояниеПросмотра + 480 + + ВозможныеДублиСостояниеПросмотраРасширеннаяПодсказка + 482 + Label + true + true + + Left + + + + ВозможныеДублиСостояниеПросмотраКонтекстноеМеню + 481 + true + + ViewStatusAddition + ВозможныеДубли + + true + + + + ВозможныеДублиУправлениеПоиском + 483 + + ВозможныеДублиУправлениеПоискомРасширеннаяПодсказка + 485 + Label + true + true + + Left + + + + ВозможныеДублиУправлениеПоискомКонтекстноеМеню + 484 + true + + SearchControlAddition + ВозможныеДубли + + true + + + + ВозможныеДублиРасширеннаяПодсказка + 476 + Label + true + true + + Left + + + + ВозможныеДублиКонтекстноеМеню + 474 + true + + true + true + true +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + AsFileRef + true + +
    true true true - - ОписаниеСостоянияНайденныхДублей - - None + + <key>ru</key> + <value>В процессе работы могли возникнуть дубли в других списках</value> + + + ru + Например, при замене дублей контрагентов могут возникнуть дубли договоров или банковский счетов. + + Balloon - ОписаниеСостоянияНайденныхДублей1РасширеннаяПодсказка - 346 + ГруппаВозможныеДублиРасширеннаяПодсказка + 496 Label true true @@ -1886,23 +2390,18 @@ Left - - ОписаниеСостоянияНайденныхДублей1КонтекстноеМеню - 345 - true - - LabelField - Left - Center - Center - Enter - true - Left - true - - 5 - true - false + UsualGroup + + Vertical + ItemsLeftTitlesLeft + Collapsible + true + Button + true + true + auto + Auto + Auto
    true @@ -1926,7 +2425,7 @@
    Page - HorizontalIfPossible + Vertical auto false @@ -3333,8 +3832,8 @@ ПанельДействийМастера 167 - ГруппаНазад - 169 + ПанельДействияМастераЛево + 512 ШагМастераНазад 171 @@ -3359,7 +3858,7 @@ true true UserCmds - Auto + AdditionalInContextMenu true true @@ -3367,8 +3866,8 @@ true - ГруппаНазадРасширеннаяПодсказка - 170 + ПанельДействияМастераЛевоРасширеннаяПодсказка + 513 Label true true @@ -3382,8 +3881,8 @@ - ГруппаВперед - 173 + ПанельДействияМастераПраво + 514 ШагМастераДалее 175 @@ -3439,44 +3938,19 @@ true UserCmds Auto + InCommandBarAndInAdditionalSubmenu - - ГруппаСправкаФормы - 184 - - Справка - 179 - true - true - - true - - - СправкаРасширеннаяПодсказка - 180 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - + + Справка + 179 true true true - ГруппаСправкаФормыРасширеннаяПодсказка - 185 + СправкаРасширеннаяПодсказка + 180 Label true true @@ -3484,7 +3958,13 @@ Left - + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto true true @@ -3492,8 +3972,8 @@ true - ГруппаВпередРасширеннаяПодсказка - 174 + ПанельДействияМастераПравоРасширеннаяПодсказка + 515 Label true true @@ -3757,6 +4237,16 @@ UseIfNecessary auto true + + + ПанельДействияМастераПраво + + + + + КоманднаяПанель + + Объект 1 @@ -4591,6 +5081,271 @@ true + + ВозможныеДубли + + <key>ru</key> + <value>Возможные дубли</value> + + 4 + + ValueTable + + + true + + + true + + + ИмяОбъектаМетаданных + + <key>ru</key> + <value>Возможно, возникли дубли в</value> + + 1 + + String + + + + true + + + true + + + + ТипОбъектаМетаданных + 2 + + String + + + + true + + + true + + + + ИсточникиПредставление + + <key>ru</key> + <value>при замене в</value> + + 3 + + String + + + + true + + + true + + + + Порядок + 4 + + Number + + 10 + + + + true + + + true + + + + Обработано + 5 + + Boolean + + + true + + + true + + + + Источники + 6 + + + true + + + true + + + + Выбран + + <key>ru</key> + <value>Выбран</value> + + 7 + + Boolean + + + true + + + true + + + + СтепеньРодства + 8 + + Boolean + + + true + + + true + + + + АдресОтбора + 9 + + String + + + + true + + + true + + + + + ВозможныйДубльВыбран + 26 + + Boolean + + + true + + + true + + + + ВозможныйДубльВыбранныйТип + 31 + + String + + + + true + + + true + + + + СкрыватьНезначимыеДубли + 36 + + Boolean + + + true + + + true + + + + ОтображаемаяСтепеньРодства + + <key>ru</key> + <value>Отображаемая степень родства</value> + + 37 + + Number + + 10 + + + + true + + + true + + + + АдресВыбранныхМестИспользования + 38 + + String + + + + true + + + true + + + + АдресНайденныхДублей + 39 + + String + + + + true + + + true + + + + ТипыОбработанныхОбъектов + 40 + + TypeDescription + + + true + + + true + + + + ИдентификаторОбластиПоискаДублей + 41 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + ВыбратьОсновнойЭлемент @@ -4881,6 +5636,23 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>пап</name> + <title> + <key>ru</key> + <value>Пап</value> + + 9 + + ru + Пап + + + true + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl index 499919e5c..70a92f3e7 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl @@ -32,8 +32,7 @@ ОтображениеСостояния = Элементы.ПоискНеВыполнялся.ОтображениеСостояния; ОтображениеСостояния.Видимость = Истина; ОтображениеСостояния.Текст = НСтр("ru = 'Поиск дублей не выполнялся. - |Задайте условия отбора и сравнения и нажмите ""Найти дубли"".'"); - ОтображениеСостояния.Картинка = Элементы.Предупреждение32.Картинка; + |Задайте условия отбора и сравнения и нажмите ""Найти дубли"".'"); ОтображениеСостояния = Элементы.ВыполнениеПоиска.ОтображениеСостояния; ОтображениеСостояния.Видимость = Истина; @@ -47,7 +46,6 @@ ОтображениеСостояния.Видимость = Истина; ОтображениеСостояния.Текст = НСтр("ru = 'Не обнаружено дублей по указанным параметрам. |Измените условия отбора и сравнения, нажмите ""Найти дубли""'"); - ОтображениеСостояния.Картинка = Элементы.Предупреждение32.Картинка; // Автосохранение настроек СохраняемыеВНастройкахДанныеМодифицированы = Истина; @@ -87,7 +85,7 @@ // 5. Успешное удаление. Шаг = ДобавитьШагМастера(Элементы.ШагУспешноеУдаление); - Шаг.КнопкаНазад.Заголовок = НСтр("ru = '< Новый поиск'"); + Шаг.КнопкаНазад.Заголовок = НСтр("ru = 'Повторить поиск'"); Шаг.КнопкаНазад.Подсказка = НСтр("ru = 'Начать новый поиск с другими параметрами'"); Шаг.КнопкаДалее.Видимость = Ложь; Шаг.КнопкаОтмена.КнопкаПоУмолчанию = Истина; @@ -118,6 +116,13 @@ УстановитьВидимостьДоступность(ЭтотОбъект); Элементы.ГруппаПодробно.Видимость = Ложь; + ОтображаемаяСтепеньРодства = 2; + УстановитьОтборВозможныхДублей(ЭтотОбъект); + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Шапка.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.КоманднаяПанель.Видимость = Ложь; + КонецЕсли; КонецПроцедуры @@ -193,7 +198,7 @@ &НаКлиенте Процедура ОбластьПоискаДублейПриИзменении(Элемент) - ИнициализироватьКомпоновщикОтбораИПравила(Неопределено); + ИнициализироватьКомпоновщикОтбораИПравила(Неопределено); ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся); КонецПроцедуры @@ -520,6 +525,61 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыВозможныеДубли + +&НаКлиенте +Процедура ОтображаемаяСтепеньРодстваПриИзменении(Элемент) + + УстановитьОтборВозможныхДублей(ЭтотОбъект); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьОтборВозможныхДублей(Форма) + + Если Форма.ОтображаемаяСтепеньРодства = 1 Тогда + Форма.Элементы.ВозможныеДубли.ОтборСтрок = Неопределено; + Иначе + Форма.Элементы.ВозможныеДубли.ОтборСтрок = Новый ФиксированнаяСтруктура("СтепеньРодства", 2); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВозможныеДублиВыбранПриИзменении(Элемент) + + ТекущиеДанные = Элементы.ВозможныеДубли.ТекущиеДанные; + + ВыбранныеСтроки = ВозможныеДубли.НайтиСтроки(Новый Структура("Выбран", Истина)); + Для каждого СтрокаДубля Из ВыбранныеСтроки Цикл + + Если СтрокаДубля.ПолучитьИдентификатор() = ТекущиеДанные.ПолучитьИдентификатор() Тогда + Продолжить; + КонецЕсли; + + СтрокаДубля.Выбран = Ложь; + + КонецЦикла; + + ВозможныйДубльВыбран = ТекущиеДанные.Выбран; + ВозможныйДубльВыбранныйТип = ТекущиеДанные.ТипОбъектаМетаданных; + + ПриАктивацииШагаМастера(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСостояниеВозможныхДублей() + + ЗаголовокГруппы = НСтр("ru='В процессе работы могли возникнуть дубли в других списках (%1)'"); + КоличествоНеобработанных = ВозможныеДубли.НайтиСтроки(Новый Структура("Обработано", Ложь)).Количество(); + Элементы.ГруппаВозможныеДубли.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокГруппы, КоличествоНеобработанных); + Элементы.ГруппаВозможныеДубли.Видимость = КоличествоНеобработанных > 0; + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -655,19 +715,24 @@ КонецПроцедуры // Параметры: -// Страница - ГруппаФормы - +// Страница - ГруппаФормы // // Возвращаемое значение: -// Структура - где: -// * Индекс - Число - -// * ИмяСтраницы - Строка - +// Структура: +// * Индекс - Число +// * ИмяСтраницы - Строка // * КнопкаНазад - см. КнопкаМастера // * КнопкаДалее - см. КнопкаМастера // * КнопкаОтмена - см. КнопкаМастера // &НаСервере Функция ДобавитьШагМастера(Знач Страница) - ОписаниеШага = Новый Структура("Индекс, ИмяСтраницы, КнопкаНазад, КнопкаДалее, КнопкаОтмена"); + ОписаниеШага = Новый Структура; + ОписаниеШага.Вставить("Индекс", 0); + ОписаниеШага.Вставить("ИмяСтраницы", ""); + ОписаниеШага.Вставить("КнопкаНазад", КнопкаМастера()); + ОписаниеШага.Вставить("КнопкаДалее", КнопкаМастера()); + ОписаниеШага.Вставить("КнопкаОтмена", КнопкаМастера()); ОписаниеШага.ИмяСтраницы = Страница.Имя; ОписаниеШага.КнопкаНазад = КнопкаМастера(); @@ -785,6 +850,12 @@ Если ПустаяСтрока(ТекстПравил) Тогда ТекстПравил = НСтр("ru = 'Правила не заданы'"); КонецЕсли; + + Если СкрыватьНезначимыеДубли Тогда + СтрокаПравил = НСтр("ru = 'не показывать помеченные на удаление без мест использования'"); + ТекстПравил = ?(ТекстПравил = "", "", ТекстПравил + Союз) + СтрокаПравил; + КонецЕсли; + ПредставлениеПравилПоиска = ТекстПравил; // Доступность. @@ -816,6 +887,14 @@ Элементы.Шапка.Доступность = Ложь; + Если ВозможныйДубльВыбран Тогда + Элементы.ШагМастераНазад.Заголовок = НСтр("ru='Новый поиск'"); + Элементы.ШагМастераНазад.КнопкаПоУмолчанию = Истина; + Иначе + Элементы.ШагМастераНазад.Заголовок = НСтр("ru='Повторить поиск'"); + Элементы.ШагМастераНазад.КнопкаПоУмолчанию = Ложь; + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Элементы.ШагНеудачныеЗамены Тогда Элементы.Шапка.Доступность = Ложь; @@ -846,6 +925,7 @@ ОчиститьСообщения(); ТекущаяСтраница = Элементы.ШагиМастера.ТекущаяСтраница; + Шаг = НастройкиМастера.ТекущийШаг;// см. ДобавитьШагМастера Если ТекущаяСтраница = Элементы.ШагПоискНеВыполнялся Тогда Если ПустаяСтрока(ОбластьПоискаДублей) Тогда @@ -853,12 +933,12 @@ Возврат; КонецЕсли; - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); + ПерейтиНаШагМастера(Шаг.Индекс + 1); ИначеЕсли ТекущаяСтраница = Элементы.ШагВыборОсновногоЭлемента Тогда Элементы.ПовторитьПоиск.Видимость = Ложь; - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); + ПерейтиНаШагМастера(Шаг.Индекс + 1); ИначеЕсли ТекущаяСтраница = Элементы.ШагНеудачныеЗамены Тогда @@ -870,7 +950,7 @@ Иначе - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); + ПерейтиНаШагМастера(Шаг.Индекс + 1); КонецЕсли; @@ -883,11 +963,17 @@ Если ТекущаяСтраница = Элементы.ШагУспешноеУдаление Тогда - ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся); + Если ВозможныйДубльВыбран Тогда + ОтобратьВыбранныеМестаИспользования(ВозможныйДубльВыбранныйТип); + ОбластьПоискаДублейЗавершениеВыбора(ВозможныйДубльВыбранныйТип, Неопределено); + Иначе + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся); + КонецЕсли; Иначе - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс - 1); + Шаг = НастройкиМастера.ТекущийШаг;// см. ДобавитьШагМастера + ПерейтиНаШагМастера(Шаг.Индекс - 1); КонецЕсли; @@ -920,7 +1006,8 @@ Результат.Вставить("ОбластьПоискаДублей", ""); Результат.Вставить("НастройкиКД", Неопределено); Результат.Вставить("ПравилаПоиска", Неопределено); - Результат.Вставить("СпособУдаления", "Пометка"); + Результат.Вставить("СпособУдаления", "Пометка"); + Результат.Вставить("СкрыватьНезначимыеДубли", Истина); Возврат Результат; КонецФункции @@ -1075,6 +1162,9 @@ &НаКлиенте Процедура ОбновитьОписаниеСостоянияНайденныхДублей() + ЕстьПодсистемаУдаленияПомеченных = ОбщегоНазначенияКлиент.ПодсистемаСуществует( + "СтандартныеПодсистемы.УдалениеПомеченныхОбъектов"); + Если ПустаяСтрока(ОписаниеОшибкиПоискаДублей) Тогда Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выбрано дублей: %1 из %2.'"), @@ -1083,10 +1173,18 @@ Описание = ОписаниеОшибкиПоискаДублей; КонецЕсли; - Если СпособУдаления = "Пометка" Тогда - ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут помечены на удаление и заменены на оригиналы (отмечены стрелкой).'"); + Если ЕстьПодсистемаУдаленияПомеченных Тогда + + Если СпособУдаления = "Пометка" Тогда + ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут помечены на удаление и заменены на оригиналы (отмечены стрелкой).'"); + Иначе + ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут безвозвратно удалены и заменены на оригиналы (отмечены стрелкой).'"); + КонецЕсли; + Иначе - ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут безвозвратно удалены и заменены на оригиналы (отмечены стрелкой).'"); + + ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут помечены на удаление и заменены на оригиналы (отмечены стрелкой).'"); + КонецЕсли; ОписаниеСостоянияНайденныхДублей = СтроковыеФункцииКлиент.ФорматированнаяСтрока(Описание + Символы.ПС + ТекстПодсказки); @@ -1103,6 +1201,8 @@ Настройки.Вставить("УчитыватьПрикладныеПравила", УчитыватьПрикладныеПравила); Настройки.Вставить("ВсеВариантыСравнения", ВсеВариантыСравнения); Настройки.Вставить("ПравилаПоиска", РеквизитФормыВЗначение("ПравилаПоиска")); + Настройки.Вставить("СкрыватьНезначимыеДубли", СкрыватьНезначимыеДубли); + Возврат ПоместитьВоВременноеХранилище(Настройки); КонецФункции @@ -1120,6 +1220,7 @@ Результат = ПолучитьИзВременногоХранилища(АдресРезультата); УдалитьИзВременногоХранилища(АдресРезультата); УчитыватьПрикладныеПравила = Результат.УчитыватьПрикладныеПравила; + СкрыватьНезначимыеДубли = Результат.СкрыватьНезначимыеДубли; ЗначениеВРеквизитФормы(Результат.ПравилаПоиска, "ПравилаПоиска"); СохранитьПользовательскиеНастройки(); КонецПроцедуры @@ -1164,6 +1265,18 @@ ОтборыЗагружены = Ложь; НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "НастройкиКД"); Если ТипЗнч(НастройкиКД) = Тип("НастройкиКомпоновкиДанных") Тогда + + Для Сч = -(НастройкиКД.Отбор.Элементы.Количество()-1) По 0 Цикл + + Отбор = НастройкиКД.Отбор.Элементы[-Сч]; + Если СтрНайти(Отбор.Представление, НСтр("ru='среди которых возможны дубли'")) > 0 Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(НастройкиКД.Отбор,,Отбор.Представление); + + КонецЕсли; + + КонецЦикла; + КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки(НастройкиКД); ОтборыЗагружены = Истина; КонецЕсли; @@ -1192,6 +1305,39 @@ , Ложь); КонецЕсли; + + // Отбор по обработанным местам использования (переход по механизму "Возможные дубли") + Если ЭтоАдресВременногоХранилища(АдресВыбранныхМестИспользования) Тогда + + ВыбранныеМестаИспользования = ПолучитьИзВременногоХранилища(АдресВыбранныхМестИспользования); + ГруппаОтбора = Неопределено; + Если ВыбранныеМестаИспользования.ЗначениеОтбора.Количество() > 0 Тогда + + ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( + КомпоновщикПредварительногоОтбора.Настройки.Отбор.Элементы + ,ВыбранныеМестаИспользования.ПредставлениеОтбора + ,ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли); + + КонецЕсли; + + Для каждого РеквизитЗначениеОтбора Из ВыбранныеМестаИспользования.ЗначениеОтбора Цикл + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + ГруппаОтбора, + РеквизитЗначениеОтбора.Ключ, + РеквизитЗначениеОтбора.Значение, + ВидСравненияКомпоновкиДанных.ВСписке, + "", + Истина); + + КонецЦикла; + + + УдалитьИзВременногоХранилища(АдресВыбранныхМестИспользования); + АдресВыбранныхМестИспользования = ""; + + КонецЕсли; + // Сравнение по наименованию. Если Не ПравилаЗагружены Тогда Правило = ТаблицаПравил.Найти("Наименование", "Реквизит"); @@ -1223,6 +1369,12 @@ ТаблицаПравил.Сортировать("ПредставлениеРеквизита"); ЗначениеВРеквизитФормы(ТаблицаПравил, "ПравилаПоиска"); + ИдентификаторОбластиПоискаДублей = Справочники.ИдентификаторыОбъектовМетаданных + .НайтиПоРеквизиту("ПолноеИмя", ОбластьПоискаДублей); + ТипОбластиПоискаДублей = ТипЗнч(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ИдентификаторОбластиПоискаДублей, "ЗначениеПустойСсылки")); + ТипыОбработанныхОбъектов = Новый ОписаниеТипов( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипОбластиПоискаДублей)); + Если НастройкиФормы = Неопределено Тогда СохранитьПользовательскиеНастройки(); КонецЕсли; @@ -1233,6 +1385,7 @@ УчитыватьПрикладныеПравила = НастройкиФормы.УчитыватьПрикладныеПравила; ОбластьПоискаДублей = НастройкиФормы.ОбластьПоискаДублей; СпособУдаления = НастройкиФормы.СпособУдаления; + СкрыватьНезначимыеДубли = НастройкиФормы.СкрыватьНезначимыеДубли; ТаблицаНастроек = ПоискИУдалениеДублей.НастройкиОбъектовМетаданных(); АдресНастроек = ПоместитьВоВременноеХранилище(ТаблицаНастроек, УникальныйИдентификатор); @@ -1253,6 +1406,7 @@ НастройкиФормы.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); НастройкиФормы.Вставить("НастройкиКД", КомпоновщикПредварительногоОтбора.Настройки); НастройкиФормы.Вставить("ПравилаПоиска", ПравилаПоиска.Выгрузить()); + НастройкиФормы.Вставить("СкрыватьНезначимыеДубли", СкрыватьНезначимыеДубли); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ИмяФормы, "", НастройкиФормы); КонецПроцедуры @@ -1325,6 +1479,22 @@ ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДубли"); + // Возможные дубли + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВозможныеДубли.Обработано"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Истина; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ВозможныеДублиИмяОбъектаМетаданных"); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ВозможныеДублиИсточники"); + КонецПроцедуры &НаСервере @@ -1456,6 +1626,7 @@ ПараметрыПроцедуры.Вставить("ПравилаПоиска", МассивПравилПоиска); ПараметрыПроцедуры.Вставить("СхемаКомпоновки", ПолучитьИзВременногоХранилища(АдресСхемыКомпоновки)); ПараметрыПроцедуры.Вставить("НастройкиКомпоновщикаПредварительногоОтбора", КомпоновщикПредварительногоОтбора.Настройки); + ПараметрыПроцедуры.Вставить("СкрыватьНезначимыеДубли", СкрыватьНезначимыеДубли); ИначеЕсли ТекущаяСтраница = Элементы.ШагВыполнениеУдаления Тогда @@ -1465,7 +1636,7 @@ Возврат Неопределено; КонецЕсли; - Элементы.ВыполнениеУдаления.ОтображениеСостояния.Текст = НСтр("ru = 'Удаление дублей...'"); + Элементы.ВыполнениеУдаления.ОтображениеСостояния.Текст = НСтр("ru = 'Обработка дублей...'"); ИмяПроцедуры = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя() + ".МодульОбъекта.ФоновоеУдалениеДублей"; НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Удаление дублей'"); @@ -1504,12 +1675,12 @@ ИначеЕсли ТекущаяСтраница = Элементы.ШагВыполнениеУдаления Тогда - Сообщение = НСтр("ru = 'Удаление дублей...'"); - Если Прогресс.Прогресс.Процент > 0 Тогда - Сообщение = Сообщение + " " - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '(удалено %1 из %2)'"), Прогресс.Прогресс.Процент, ВсегоНайденоДублей); + Если НЕ ПустаяСтрока(Прогресс.Прогресс.Текст) Тогда + Сообщение = Прогресс.Прогресс.Текст; + Иначе + Сообщение = НСтр("ru = 'Обработка дублей...'"); КонецЕсли; + Элементы.ВыполнениеУдаления.ОтображениеСостояния.Текст = Сообщение; КонецЕсли; @@ -1542,20 +1713,23 @@ Возврат; КонецЕсли; + Шаг = НастройкиМастера.ТекущийШаг;// см. ДобавитьШагМастера Если ТекущаяСтраница = Элементы.ШагВыполнениеПоиска Тогда ВсегоНайденоДублей = ЗаполнитьРезультатыПоискаДублей(Задание.АдресРезультата); ВсегоЭлементов = ВсегоНайденоДублей; Если ВсегоНайденоДублей > 0 Тогда ОбновитьОписаниеСостоянияНайденныхДублей(); - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); + ПерейтиНаШагМастера(Шаг.Индекс + 1); Иначе ПерейтиНаШагМастера(Элементы.ШагДублейНеНайдено); КонецЕсли; ИначеЕсли ТекущаяСтраница = Элементы.ШагВыполнениеУдаления Тогда Успех = ЗаполнитьРезультатыУдаленияДублей(Задание.АдресРезультата); + ОбщегоНазначенияКлиент.ОповеститьОбИзмененииОбъектов(ТипыОбработанныхОбъектов); Если Успех = Истина Тогда // Заменены все группы дублей. - ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); + ОбновитьСостояниеВозможныхДублей(); + ПерейтиНаШагМастера(Шаг.Индекс + 1); Иначе // Не все места использования удалось заменить. ПерейтиНаШагМастера(Элементы.ШагНеудачныеЗамены); @@ -1631,6 +1805,7 @@ ГруппаДерева.Пометка = ПометкаГруппы; ГруппаДерева.Наименование = ОригинальныйЭлемент.Наименование + " (" + ГруппаДерева.Количество + ")"; + ГруппаДерева.Строки.Сортировать("Наименование"); КонецЦикла; ЗначениеВРеквизитФормы(ДеревоНайденныхДублей, "НайденныеДубли"); @@ -1706,7 +1881,11 @@ МестаИспользованияКандидата.Очистить(); Если ЗавершеноБезОшибок Тогда + ЗаполнитьВозможныеДубли(); НайденныеДубли.ПолучитьЭлементы().Очистить(); + ЕстьВажныеВозможныеДубли = ВозможныеДубли.НайтиСтроки(Новый Структура("СтепеньРодства",2)).Количество() > 0; + ОтображаемаяСтепеньРодства = ?(ЕстьВажныеВозможныеДубли, 2, 1); + УстановитьОтборВозможныхДублей(ЭтотОбъект); Возврат Истина; КонецЕсли; @@ -1762,6 +1941,197 @@ Возврат Ложь; КонецФункции +&НаСервере +Процедура ЗаполнитьВозможныеДубли() + + ИдентификаторОбрабатываемогоОбъекта = ИдентификаторОбластиПоискаДублей; + ОбрабатываемыйОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИдентификаторОбрабатываемогоОбъекта); + + ОбработанныйВозможныйДубль = ВозможныеДубли.НайтиСтроки( + Новый Структура("ТипОбъектаМетаданных", ОбрабатываемыйОбъектМетаданных.ПолноеИмя())); + Если ОбработанныйВозможныйДубль.Количество() > 0 Тогда + ОбработанныйВозможныйДубль[0].Обработано = Истина; + КонецЕсли; + + МестаИспользования = ПолучитьИзВременногоХранилища(АдресМестИспользования); + ПредполагаемыеВозможныеДубли = СформироватьВозможныеДубли(МестаИспользования); + + ОтборПоискаВозможныхДублей = СформироватьОтборВозможныхДублей(РеквизитФормыВЗначение("НайденныеДубли")); + + Для каждого МестоИспользования Из ПредполагаемыеВозможныеДубли Цикл + + Если ОбрабатываемыйОбъектМетаданных = МестоИспользования + ИЛИ МестоИспользования = Неопределено Тогда + + Продолжить; + КонецЕсли; + + КлючиСвязи = КлючиСвязиМетаданных(ИдентификаторОбрабатываемогоОбъекта, МестоИспользования); + Если КлючиСвязи.Количество() > 0 Тогда + ДобавитьВозможныйДубль(ОбрабатываемыйОбъектМетаданных, МестоИспользования, КлючиСвязи, ОтборПоискаВозможныхДублей); + КонецЕсли; + + КонецЦикла; + + ВыбранныеОбработанныеСтроки = ВозможныеДубли.НайтиСтроки(Новый Структура("Обработано, Выбран", Истина, Истина)); + Для каждого СтрокаВозможныеДубли Из ВыбранныеОбработанныеСтроки Цикл + СтрокаВозможныеДубли.Выбран = Ложь; + КонецЦикла; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СформироватьОтборВозможныхДублей(ДеревоДублей) + + Отбор = Новый Массив; + Для каждого ГруппаДублей Из ДеревоДублей.Строки Цикл + + Для каждого СтрокаДубля Из ГруппаДублей.Строки Цикл + + Если СтрокаДубля.Основной Тогда + Отбор.Добавить(СтрокаДубля.Ссылка); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + Возврат Отбор; + +КонецФункции + + +&НаСервереБезКонтекста +Функция СформироватьВозможныеДубли(МестаИспользования) + + ИсключаемыеТипы = ПоискИУдалениеДублей.ТипыИсключаемыеИзВозможныхДублей(); + + ПредполагаемыеМестаИспользования = Новый Массив; + Для каждого МестоИспользования Из МестаИспользования Цикл + + ТипМестаИспользования = ТипЗнч(МестоИспользования.Данные); + Если МестоИспользования.ВспомогательныеДанные + ИЛИ МестоИспользования.ЭтоСлужебныеДанные + ИЛИ НЕ ОбщегоНазначения.ЭтоСсылка(ТипМестаИспользования) + ИЛИ ИсключаемыеТипы.Найти(ТипМестаИспользования) <> Неопределено Тогда + + Продолжить; + КонецЕсли; + + ОписаниеМетаданных = ?(МестоИспользования.Метаданные <> Неопределено, МестоИспользования.Метаданные, МестоИспользования.Данные.Метаданные()); + + МетаданныеПодходят = ОбщегоНазначения.ЭтоСправочник(ОписаниеМетаданных) + ИЛИ ОбщегоНазначения.ЭтоПланВидовХарактеристик(ОписаниеМетаданных); + + Если НЕ МетаданныеПодходят Тогда + Продолжить; + КонецЕсли; + + Если ПредполагаемыеМестаИспользования.Найти(ОписаниеМетаданных) = Неопределено Тогда + ПредполагаемыеМестаИспользования.Добавить(ОписаниеМетаданных); + КонецЕсли; + + КонецЦикла; + + Возврат ПредполагаемыеМестаИспользования; + +КонецФункции + +&НаСервере +Процедура ДобавитьВозможныйДубль(ОбрабатываемыйОбъектМетаданных, МестоИспользования, КлючиСвязи, Отбор = Неопределено) + + ПредставлениеМестаИспользования = МестоИспользования.Представление(); + ПолноеИмяМестаИспользования = МестоИспользования.ПолноеИмя(); + + ТекущийПорядковыйНомер = ?(ВозможныеДубли.Количество(),ВозможныеДубли[ВозможныеДубли.Количество() - 1].Порядок + 1, 0); + ОтборДублей = Новый Структура("ТипОбъектаМетаданных", ПолноеИмяМестаИспользования); + ДобавленныеДубли = ВозможныеДубли.НайтиСтроки(ОтборДублей); + + Если ДобавленныеДубли.Количество() > 0 Тогда + + ВозможныйДубль = ДобавленныеДубли[0]; + Если ВозможныйДубль.Источники.НайтиПоЗначению(ПолноеИмяМестаИспользования) <> Неопределено Тогда + ВозможныйДубль.Источники.Добавить(ОбрабатываемыйОбъектМетаданных.Представление()); + КонецЕсли; + + ИнформацияОбОтбореВозможныхДублей = ПолучитьИзВременногоХранилища(ВозможныйДубль.АдресОтбора); + + Иначе + + ВозможныйДубль = ВозможныеДубли.Добавить(); + ВозможныйДубль.ИмяОбъектаМетаданных = ПредставлениеМестаИспользования; + ВозможныйДубль.ТипОбъектаМетаданных = ПолноеИмяМестаИспользования; + ВозможныйДубль.Порядок = ТекущийПорядковыйНомер; + ВозможныйДубль.Обработано = Ложь; + + Источники = Новый СписокЗначений; + Источники.Добавить(ОбрабатываемыйОбъектМетаданных.Представление()); + ВозможныйДубль.Источники = Источники; + + ИнформацияОбОтбореВозможныхДублей = Новый Соответствие; + + КонецЕсли; + + ВозможныйДубль.СтепеньРодства = ?(КлючиСвязи.Найти(2, "СтепеньРодства") <> Неопределено, 2, 1); + ВозможныйДубль.ИсточникиПредставление = СтрСоединить(ВозможныйДубль.Источники.ВыгрузитьЗначения(), ", "); + + // Будем сохранять информацию о выполненных заменах для отбора возможных дублей + // Соответствие: Ключ - левое значение отбора, Значение - правое значение + Для каждого КлючиСвязи Из КлючиСвязи Цикл + + ОтборВозможныхДублей = ИнформацияОбОтбореВозможныхДублей[КлючиСвязи.Имя]; + Если ОтборВозможныхДублей = Неопределено Тогда + ИнформацияОбОтбореВозможныхДублей.Вставить(КлючиСвязи.Имя, Отбор); + Иначе + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОтборВозможныхДублей, Отбор); + ИнформацияОбОтбореВозможныхДублей.Вставить(КлючиСвязи.Имя, ОтборВозможныхДублей); + КонецЕсли; + + КонецЦикла; + + ВозможныйДубль.АдресОтбора = ПоместитьВоВременноеХранилище(ИнформацияОбОтбореВозможныхДублей, УникальныйИдентификатор); + +КонецПроцедуры + +// Функция - Степень родства метаданных +// +// +// Возвращаемое значение: +// - Число - как связаны объекты метаданных между собой +// 0 - не связаны +// 1 - связь по реквизиту +// 2 - связь по Родителю/Владельцу +// +&НаСервереБезКонтекста +Функция КлючиСвязиМетаданных(Знач ИдентификаторОбрабатываемогоОбъекта, Знач МестоИспользования) + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Имя"); + Результат.Колонки.Добавить("СтепеньРодства"); + + Для каждого РеквизитМестаИспользования Из МестоИспользования.Реквизиты Цикл + + Если РеквизитМестаИспользования.Тип.Типы().Найти(ТипЗнч(ИдентификаторОбрабатываемогоОбъекта.ЗначениеПустойСсылки)) <> Неопределено Тогда + СвязьМетаданных = Результат.Добавить(); + СвязьМетаданных.Имя = РеквизитМестаИспользования.Имя; + СвязьМетаданных.СтепеньРодства = 1; + КонецЕсли; + + КонецЦикла; + + Для каждого РеквизитМестаИспользования Из МестоИспользования.СтандартныеРеквизиты Цикл + + Если РеквизитМестаИспользования.Тип.Типы().Найти(ТипЗнч(ИдентификаторОбрабатываемогоОбъекта.ЗначениеПустойСсылки)) <> Неопределено Тогда + СвязьМетаданных = Результат.Добавить(); + СвязьМетаданных.Имя = РеквизитМестаИспользования.Имя; + СвязьМетаданных.СтепеньРодства = 2; + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + &НаКлиенте Процедура ПослеПодтвержденияОтменыЗадания(Ответ, ПараметрыВыполнения) Экспорт Если Ответ = КодВозвратаДиалога.Прервать Тогда @@ -1776,12 +2146,14 @@ // Описание настроек кнопки мастера. // // Возвращаемое значение: -// Структура - Настройки кнопки формы, где: -// * Заголовок - Строка - Заголовок кнопки. -// * Подсказка - Строка - Подсказка для кнопки. -// * Видимость - Булево - Когда Истина то кнопка видна. Значение по умолчанию - Истина. -// * Доступность - Булево - Когда Истина то кнопку можно нажимать. Значение по умолчанию - Истина. -// * КнопкаПоУмолчанию - Булево - Когда Истина то кнопка будет основной кнопкой формы. Значение по умолчанию - Ложь. +// Структура - настройки кнопки формы, где: +// * Заголовок - Строка - заголовок кнопки. +// * Подсказка - Строка - подсказка для кнопки. +// * Видимость - Булево - когда Истина то кнопка видна. Значение по умолчанию - Истина. +// * Доступность - Булево - когда Истина то кнопку можно нажимать. Значение по умолчанию - Истина. +// * КнопкаПоУмолчанию - Булево - когда Истина то кнопка будет основной кнопкой формы. Значение по умолчанию - Ложь. +// * РасширеннаяПодсказка - Структура: +// ** Заголовок - Строка // &НаКлиентеНаСервереБезКонтекста Функция КнопкаМастера() @@ -1798,7 +2170,7 @@ // Параметры: // КнопкаМастера - см. КнопкаМастера -// Описание - Строка - +// Описание - Строка // &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьСвойстваКнопкиМастера(КнопкаМастера, Описание) @@ -1808,4 +2180,41 @@ КонецПроцедуры +&НаСервере +Процедура ОтобратьВыбранныеМестаИспользования(ВыбранныйТип) + + Перем АдресОтбора; + ВыбранныеМестаИспользования = Новый Структура("ПредставлениеОтбора, ЗначениеОтбора","", Новый Структура); + ВыбранныйДубль = ВозможныеДубли.НайтиСтроки(Новый Структура("ТипОбъектаМетаданных", ВыбранныйТип)); + + ИдентификаторМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ВыбранныйТип); + ВыбранныеМетаданные = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИдентификаторМетаданных); + ВыбранныеМестаИспользования.ПредставлениеОтбора = НСтр("ru='Элементы, среди которых возможны дубли'"); + + ЗначенияОтбора = Новый СписокЗначений; + + Если ВыбранныйДубль.Количество() > 0 Тогда + + ВыбранныйДубль = ВыбранныйДубль[0]; + АдресОтбора = ВыбранныйДубль.АдресОтбора; + + КонецЕсли; + + Если ЭтоАдресВременногоХранилища(АдресОтбора) Тогда + + Отбор = ПолучитьИзВременногоХранилища(АдресОтбора); + Для каждого РеквизитЗначениеОтбора Из Отбор Цикл + + ЗначениеОтбора = Новый СписокЗначений; + ЗначениеОтбора.ЗагрузитьЗначения(РеквизитЗначениеОтбора.Значение); + ВыбранныеМестаИспользования.ЗначениеОтбора.Вставить(РеквизитЗначениеОтбора.Ключ, ЗначениеОтбора); + + КонецЦикла; + + КонецЕсли; + + АдресВыбранныхМестИспользования = ПоместитьВоВременноеХранилище(ВыбранныеМестаИспользования, УникальныйИдентификатор); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form index e7c4e4111..b4a1624fa 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form @@ -1,5 +1,5 @@ - + <key>ru</key> <value>Правила отбора</value> @@ -144,17 +144,73 @@ <autoCommandBar> <name>ФормаКоманднаяПанель</name> <id>-1</id> - <items xsi:type="form:Button"> - <name>ФормаВыбрать</name> - <id>5</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаСкрытоНаМобильномКлиенте</name> + <id>22</id> + <items xsi:type="form:Button"> + <name>ФормаВыбрать</name> + <id>5</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаВыбратьРасширеннаяПодсказка</name> + <id>6</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.Выбрать</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>9</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаОтменаРасширеннаяПодсказка</name> + <id>10</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.Cancel</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> + - ФормаВыбратьРасширеннаяПодсказка - 6 + ГруппаСкрытоНаМобильномКлиентеРасширеннаяПодсказка + 23 Label true true @@ -162,39 +218,7 @@ Left - Form.Command.Выбрать - Auto - true - true - true - UserCmds - Auto - - - ФормаОтмена - 9 - true - true - - true - - - ФормаОтменаРасширеннаяПодсказка - 10 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto + ФормаГруппаСправки @@ -248,6 +272,10 @@ Right + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере @@ -261,6 +289,11 @@ true auto true + + + КомпоновщикПредварительногоОтбораНастройкиОтборКоманднаяПанель + + Объект 1 @@ -302,6 +335,19 @@ true + + ЭтоМобильныйКлиент + 4 + + Boolean + + + true + + + true + + Выбрать diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl index 3036b5a68..a1d0533e4 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl @@ -37,6 +37,22 @@ УдалитьИзВременногоХранилища(АдресНастроекКомпоновщикаОтбора); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Правила отбора ""%1""'"), Параметры.ПредставлениеОбластиОтбора); + + ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент(); + Если ЭтоМобильныйКлиент Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + Элементы.ГруппаСкрытоНаМобильномКлиенте.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если Модифицированность И ЭтоМобильныйКлиент Тогда + ОповеститьОВыборе(АдресНастроекКомпоновщикаОтбора()); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -63,5 +79,6 @@ Возврат ПоместитьВоВременноеХранилище(КомпоновщикПредварительногоОтбора.Настройки, ИдентификаторОсновнойФормы) КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form index d377cb936..3749a104c 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form @@ -301,6 +301,40 @@ <autoMaxCardHeight>true</autoMaxCardHeight> <rowFilter xsi:type="core:UndefinedValue"/> </items> + <items xsi:type="form:FormField"> + <name>СкрыватьНезначимыеДубли</name> + <id>48</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>СкрыватьНезначимыеДубли</segments> + </dataPath> + <titleLocation>Right</titleLocation> + <extendedTooltip> + <name>СкрыватьНезначимыеДублиРасширеннаяПодсказка</name> + <id>50</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СкрыватьНезначимыеДублиКонтекстноеМеню</name> + <id>49</id> + <autoFill>true</autoFill> + </contextMenu> + <type>CheckBoxField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> + </items> <items xsi:type="form:FormGroup"> <name>ГруппаПрикладныхОграничений</name> <id>35</id> @@ -423,17 +457,73 @@ <autoCommandBar> <name>ФормаКоманднаяПанель</name> <id>-1</id> - <items xsi:type="form:Button"> - <name>ЗавершитьРедактирование</name> - <id>12</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаСкрытоНаМобильномКлиенте</name> + <id>51</id> + <items xsi:type="form:Button"> + <name>ЗавершитьРедактирование</name> + <id>12</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ЗавершитьРедактированиеРасширеннаяПодсказка</name> + <id>13</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ЗавершитьРедактирование</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>16</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаОтменаРасширеннаяПодсказка</name> + <id>17</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.Cancel</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> + - ЗавершитьРедактированиеРасширеннаяПодсказка - 13 + ГруппаСкрытоНаМобильномКлиентеРасширеннаяПодсказка + 52 Label true true @@ -441,39 +531,9 @@ Left - Form.Command.ЗавершитьРедактирование - Auto - true - true - true - UserCmds - Auto - - - ФормаОтмена - 16 - true - true - - true - - - ФормаОтменаРасширеннаяПодсказка - 17 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto + + Usual + ФормаГруппаСправка @@ -528,8 +588,8 @@ Right - OnOpen - ПриОткрытии + BeforeClose + ПередЗакрытием OnCreateAtServer @@ -730,6 +790,36 @@ + + СкрыватьНезначимыеДубли + + <key>ru</key> + <value>Скрывать дубли, помеченные на удаление и без мест использования</value> + + 8 + + Boolean + + + true + + + true + + + + ЭтоМобильныйКлиент + 9 + + Boolean + + + true + + + true + + ЗавершитьРедактирование diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Help/ru.html b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Help/ru.html new file mode 100644 index 000000000..45ec1ca2f --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Help/ru.html @@ -0,0 +1,15 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body> +<p> +</p> +<div>Предназначена для изменения правил поиска дублей в выбранном списке. </div> +<div>С помощью этих правил программа определяет, что элементы являются дублями. Можно ужесточить правила, т.е. ввести сравнение еще по нескольким <b>Реквизитам</b> в дополнение к установленным по умолчанию, тогда дублей будет меньше, например, дублями будут признаны только те товары, у которых совпадает не только <b>Наименование</b>, но и <b>Страна происхождения</b> и т.д.</div> +<div>Открывается из окна <b>Поиск и удаление дублей</b> в поле <strong>Сравнивать</strong> с помощью ссылки, которая отражает выбранные правила поиска дублей в указанном списке.</div> +<p> +</p> +<ul><li>Для добавления элементов в правила поиска дублей флажками укажите реквизиты - элементы правила, нажмите <strong>Выбрать</strong>.</li> +<li>Для некоторых списков при поиске и замене дублей существуют ограничения. Необходимо их учитывать, т.к. отмена ограничений может нарушить целостность информационной базы.</li> +<li>В нижней части таблицы предусмотрен флажок <b>Скрывать дубли, помеченные на удаление без мест использования</b>. Если он включен, то при поиске дублей не будут выводиться элементы списков, которые помечены на удаление и нигде не используются.</li> +<ul><li>Например, менеджер <b>Анастасия</b> вводит партнера <b>Магазин "Природа"</b>, и менеджер <b>Дарья</b> тоже вводит этого же партнера. Они находят ошибку и договариваются использовать только одного партнера, а второго помечают на удаление. При поиске дублей с включенным флажком <b>Скрывать дубли, помеченные на удаление без мест использования</b> программа не найдет дублей партнера Магазин "Природа". Если флажок снят, то дубли будут найдены.</li></ul><li>Для подтверждения выбранных правил поиска нажмите кнопку <b>ОК</b>. После выбора ссылка в окне <a href="DataProcessor.ПоискИУдалениеДублей/Help">Поиск и удаление дублей</a> поменяет значение.</li></ul><div><br></div> + + +</body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl index 67a040d0a..6360deffb 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl @@ -62,13 +62,36 @@ КонецЕсли; КонецЦикла; + СкрыватьНезначимыеДубли = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ИсходныеНастройки, "СкрыватьНезначимыеДубли", Истина); + УстановитьЦветаИУсловноеОформление(); + + ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент(); + Если ЭтоМобильныйКлиент Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + Элементы.ГруппаСкрытоНаМобильномКлиенте.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте -Процедура ПриОткрытии(Отказ) +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) - ЭтотОбъект.ОбновитьОтображениеДанных(); + Если ЗавершениеРаботы Тогда + Возврат; + КонецЕсли; + + Если ЭтоМобильныйКлиент Тогда + + ТекстОшибокВыбора = ОшибкиВыбора(); + Если ТекстОшибокВыбора <> Неопределено Тогда + Отказ = Истина; + ПоказатьПредупреждение(, ТекстОшибокВыбора); + Иначе + ОповеститьОВыборе(РезультатВыбора()); + КонецЕсли; + + КонецЕсли; КонецПроцедуры @@ -129,13 +152,14 @@ &НаКлиенте Процедура ЗавершитьРедактирование(Команда) + ТекстОшибокВыбора = ОшибкиВыбора(); Если ТекстОшибокВыбора <> Неопределено Тогда ПоказатьПредупреждение(, ТекстОшибокВыбора); - Возврат; + Иначе + ОповеститьОВыборе(РезультатВыбора()); КонецЕсли; - ОповеститьОВыборе(РезультатВыбора()); КонецПроцедуры #КонецОбласти @@ -230,6 +254,7 @@ ВыбранныеПравила.Колонки.Удалить("Использовать"); Результат.Вставить("ПравилаПоиска", ВыбранныеПравила ); + Результат.Вставить("СкрыватьНезначимыеДубли", СкрыватьНезначимыеДубли); Возврат ПоместитьВоВременноеХранилище(Результат); КонецФункции diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl index a5b2f31be..79854fd13 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl @@ -13,11 +13,11 @@ // Определение менеджера объекта для вызова прикладных правил. // // Параметры: -// ИмяОбластиПоискаДанных - Строка - Имя области (полное имя метаданных). +// ИмяОбластиПоискаДанных - Строка - имя области (полное имя метаданных). // // Возвращаемое значение: // СправочникиМенеджер - , ПланыВидовХарактеристикМенеджер, -// ПланыСчетовМенеджер, ПланыВидовРасчетаМенеджер - Менеджер объекта. +// ПланыСчетовМенеджер, ПланыВидовРасчетаМенеджер - менеджер объекта. // Функция МенеджерОбластиПоискаДублей(Знач ИмяОбластиПоискаДанных) Экспорт ОбластьПоискаДанных = Метаданные.НайтиПоПолномуИмени(ИмяОбластиПоискаДанных); @@ -43,26 +43,29 @@ // Поиск дублей во всех данных информационной базы. // // Параметры: -// ПараметрыПоиска - Структура - описывает параметры поиска. +// ПараметрыПоиска - см. ПоискИУдалениеДублей.ПараметрыПоискаДублей // ЭталонныйОбъект - Произвольный - объект, для которого производится поиск дублей. // // Возвращаемое значение: // Структура - результаты поиска дублей: // * ТаблицаДублей - ТаблицаЗначений - найденные дубли (в интерфейс выводятся в 2 уровня: Родители и Элементы), где: // ** Ссылка - ЛюбаяСсылка - ссылка элемента. -// ** Код - Строка, Число - код элемента. +// ** Код - Строка +// - Число - код элемента. // ** Наименование - Строка - наименование элемента. // ** Родитель - Произвольный - родитель группы дублей. Если Родитель пустой, то элемент является // родителем группы дублей. -// ** <Другие поля> - Произвольный - значение соответствующего полей отборов и критериев сравнения дублей. +// ** ДругиеПоля - Произвольный - значение соответствующего полей отборов и критериев сравнения дублей. // * ОписаниеОшибки - Неопределено - ошибки не возникло. // - Строка - описание ошибки, возникшей в процессе поиска дублей. -// * МестаИспользования - Неопределено, ТаблицаЗначений - заполняется, если +// * МестаИспользования - Неопределено +// - ТаблицаЗначений - заполняется, если // ПараметрыПоиска.РассчитыватьМестаИспользования = Истина. // Описание колонок таблицы см. в ОбщегоНазначения.МестаИспользования. // Функция ГруппыДублей(Знач ПараметрыПоиска, Знач ЭталонныйОбъект = Неопределено) Экспорт + Перем МестаИспользования; ПолноеИмяОбъектаМетаданных = ПараметрыПоиска.ОбластьПоискаДублей; ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); @@ -77,6 +80,11 @@ РассчитыватьМестаИспользования = Ложь; КонецЕсли; + СкрыватьНезначимыеДубли = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "РассчитыватьМестаИспользования"); + Если Не ЗначениеЗаполнено(СкрыватьНезначимыеДубли) Тогда + СкрыватьНезначимыеДубли = Истина; + КонецЕсли; + // Вызываем обработчик ПараметрыПоискаДублей. ЕстьПравилаПоиска = Ложь; ИменаПолейДляСравненияНаРавенство = ""; // Имена реквизитов, по которым сравниваем по равенству. @@ -145,14 +153,7 @@ ЕстьНомер = Характеристики.ДлинаНомера > 0; // Задаем псевдонимы дополнительных полей, чтобы не пересекались с остальными полями. - ТаблицаКандидатов = Новый ТаблицаЗначений; - КолонкиКандидатов = ТаблицаКандидатов.Колонки; - КолонкиКандидатов.Добавить("Ссылка1"); - КолонкиКандидатов.Добавить("Поля1"); - КолонкиКандидатов.Добавить("Ссылка2"); - КолонкиКандидатов.Добавить("Поля2"); - КолонкиКандидатов.Добавить("ЭтоДубли", Новый ОписаниеТипов("Булево")); - ТаблицаКандидатов.Индексы.Добавить("ЭтоДубли"); + ТаблицаКандидатов = ТаблицаКандидатов(); ИменаПолейВЗапросе = ДоступныеРеквизитыОтбора(ОбъектМетаданных); Если Не ЕстьКод Тогда @@ -279,29 +280,10 @@ ОтборыКандидатов.Вставить("Ссылка", ЭлементОтбораКД); // Результат и цикл поиска - ТаблицаДублей = Новый ТаблицаЗначений; - ТаблицаДублей.Колонки.Добавить("Ссылка"); - Для Каждого ПолеТаблицы Из ПоляДляСравненияНаРавенство Цикл - Если ТаблицаДублей.Колонки.Найти(ПолеТаблицы.Ключ) = Неопределено Тогда - ТаблицаДублей.Колонки.Добавить(ПолеТаблицы.Ключ); - КонецЕсли; - КонецЦикла; - Для Каждого ПолеТаблицы Из ПоляДляСравненияНаПодобие Цикл - Если ТаблицаДублей.Колонки.Найти(ПолеТаблицы.Ключ) = Неопределено Тогда - ТаблицаДублей.Колонки.Добавить(ПолеТаблицы.Ключ); - КонецЕсли; - КонецЦикла; - Для Каждого ИмяПоляТаблицы Из СтрРазделить("Код,Наименование,Родитель,ПометкаУдаления", ",") Цикл - Если ТаблицаДублей.Колонки.Найти(ИмяПоляТаблицы) = Неопределено Тогда - ТаблицаДублей.Колонки.Добавить(ИмяПоляТаблицы); - КонецЕсли; - КонецЦикла; + КоллекцияДублей = КоллекцияДублей(ПараметрыПоиска, ПоляДляСравненияНаПодобие, ПоляДляСравненияНаРавенство); - ТаблицаДублей.Индексы.Добавить("Ссылка"); - ТаблицаДублей.Индексы.Добавить("Родитель"); - ТаблицаДублей.Индексы.Добавить("Ссылка, Родитель"); - - Результат = Новый Структура("ТаблицаДублей, ОписаниеОшибки, МестаИспользования", ТаблицаДублей); + ТаблицаДублей = КоллекцияДублей.ТаблицаДублей; + Результат = Результат(ТаблицаДублей); СтруктураПолей = Новый Структура; СтруктураПолей.Вставить("РасшифровкаДополнительныхПолей", РасшифровкаДополнительныхПолей); @@ -325,42 +307,50 @@ Если ПоляДляСравненияНаПодобие.Количество() > 0 Тогда СравнениеСтрокНаПодобие = ПрикладныеПараметрыПоиска.СравнениеСтрокНаПодобие; - СловаИсключения = СтрСоединить(СравнениеСтрокНаПодобие.СловаИсключения, "~"); + СловаИсключения = НРег(СтрСоединить(СравнениеСтрокНаПодобие.СловаИсключения, "~")); НечеткийПоиск = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("FuzzyStringMatchExtension", "ОбщийМакет.КомпонентаПоискаСтрок"); + Если НечеткийПоиск = Неопределено Тогда Результат.ОписаниеОшибки = НСтр("ru = 'Не удалось подключить компоненту нечеткого поиска. Подробнее см. в журнале регистрации.'"); Возврат Результат; КонецЕсли; + Для Каждого ПолеТаблицы Из ПоляДляСравненияНаПодобие Цикл + ИмяПоля = ПолеТаблицы.Ключ; ИскомыеСтроки = СтрСоединить(КандидатыДублей.ВыгрузитьКолонку(ИмяПоля), "~"); СтрокаДляПоиска = ЭталонныйЭлемент[ИмяПоля]; ИндексыСтрок = НечеткийПоиск.StringSearch(НРег(СтрокаДляПоиска), НРег(ИскомыеСтроки), "~", СравнениеСтрокНаПодобие.ДлинаНебольшихСтрок, СравнениеСтрокНаПодобие.ПроцентСовпаденияНебольшихСтрок, - СравнениеСтрокНаПодобие.ПроцентСовпаденияСтрок); + СравнениеСтрокНаПодобие.ПроцентСовпаденияСтрок, СловаИсключения); Если ПустаяСтрока(ИндексыСтрок) Тогда Продолжить; КонецЕсли; + Для Каждого ИндексСтроки Из СтрРазделить(ИндексыСтрок, ",") Цикл Если ПустаяСтрока(ИндексСтроки) Тогда Продолжить; КонецЕсли; ЭлементДубль = КандидатыДублей.Получить(ИндексСтроки); + Если ЕстьПравилаПоиска Тогда ДобавитьСтрокуКандидатов(ТаблицаКандидатов, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); Если ТаблицаКандидатов.Количество() = КоличествоЭлементовДляСравнения Тогда - ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, ПолноеИмяОбъектаМетаданных, МенеджерОбластиПоиска, + ЗарегистрироватьДублиПоПрикладнымПравилам(КоллекцияДублей, ПолноеИмяОбъектаМетаданных, МенеджерОбластиПоиска, ЭталонныйЭлемент, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; Иначе - ЗарегистрироватьДубль(ТаблицаДублей, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); + ЗарегистрироватьДубль(КоллекцияДублей, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); КонецЕсли; + КонецЦикла; + КонецЦикла; Иначе Для Каждого ЭлементДубль Из КандидатыДублей Цикл + Если ЕстьПравилаПоиска Тогда ДобавитьСтрокуКандидатов(ТаблицаКандидатов, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); Если ТаблицаКандидатов.Количество() = КоличествоЭлементовДляСравнения Тогда @@ -369,26 +359,31 @@ ТаблицаКандидатов.Очистить(); КонецЕсли; Иначе - ЗарегистрироватьДубль(ТаблицаДублей, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); + ЗарегистрироватьДубль(КоллекцияДублей, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); КонецЕсли; + КонецЦикла; КонецЕсли; // Обрабатываем остаток таблицы для прикладных правил. Если ЕстьПравилаПоиска Тогда - ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, ПолноеИмяОбъектаМетаданных, МенеджерОбластиПоиска, + ЗарегистрироватьДублиПоПрикладнымПравилам(КоллекцияДублей, ПолноеИмяОбъектаМетаданных, МенеджерОбластиПоиска, ЭталонныйЭлемент, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; + // Обрабатываем непроверенные дубли + УдалитьНезначимыеДубли(КоллекцияДублей); + УдалитьНезначимыеГруппы(КоллекцияДублей); + // Учитываем ограничение. Если РазмерВозвращаемойПорции > 0 И (ТаблицаДублей.Количество() > РазмерВозвращаемойПорции) Тогда Найдено = ТаблицаДублей.Количество(); // Откатываем последнюю группу. - Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Родитель", ЭталонныйЭлемент.Ссылка) ) Цикл + Для Каждого Строка Из КоллекцияДублей.ТаблицаДублей.НайтиСтроки(Новый Структура("Родитель", ЭталонныйЭлемент.Ссылка)) Цикл ТаблицаДублей.Удалить(Строка); КонецЦикла; - Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Ссылка", ЭталонныйЭлемент.Ссылка) ) Цикл + Для Каждого Строка Из КоллекцияДублей.ТаблицаДублей.НайтиСтроки(Новый Структура("Ссылка", ЭталонныйЭлемент.Ссылка)) Цикл ТаблицаДублей.Удалить(Строка); КонецЦикла; Если Найдено > 0 И ТаблицаДублей.Количество() = 0 Тогда @@ -399,6 +394,7 @@ КонецЕсли; Прервать; КонецЕсли; + КонецЦикла; // Расчет мест использования @@ -419,6 +415,7 @@ МестаИспользования.Индексы.Добавить("Ссылка"); Результат.Вставить("МестаИспользования", МестаИспользования); + КонецЕсли; Возврат Результат; @@ -427,7 +424,7 @@ // Определение наличия прикладных правил у объекта. // // Параметры: -// МенеджерОбласти - СправочникМенеджер - Менеджер проверяемого объекта. +// МенеджерОбласти - СправочникМенеджер - менеджер проверяемого объекта. // // Возвращаемое значение: // Булево - Истина, если прикладные правила определены. @@ -442,8 +439,8 @@ // Обработчик фонового поиска дублей. // // Параметры: -// Параметры - Структура - Данные для анализа. -// АдресРезультата - Строка - Адрес во временном хранилище для сохранения результата. +// Параметры - Структура - данные для анализа. +// АдресРезультата - Строка - адрес во временном хранилище для сохранения результата. // Процедура ФоновыйПоискДублей(Знач Параметры, Знач АдресРезультата) Экспорт @@ -474,8 +471,8 @@ // Обработчик фонового удаления дублей. // // Параметры: -// Параметры - Структура - Данные для анализа. -// АдресРезультата - Строка - Адрес во временном хранилище для сохранения результата. +// Параметры - Структура - данные для анализа. +// АдресРезультата - Строка - адрес во временном хранилище для сохранения результата. // Процедура ФоновоеУдалениеДублей(Знач Параметры, Знач АдресРезультата) Экспорт @@ -539,7 +536,8 @@ Для Каждого ПараКандидатов Из Найденные Цикл Данные1.Вставить("Ссылка", ПараКандидатов.Ссылка1); Данные1.Вставить("Код", ПараКандидатов.Поля1.Код); - Данные1.Вставить("Наименование", ПараКандидатов.Поля1.Наименование); + Наименование1 = ПараКандидатов.Поля1.Наименование;// Строка + Данные1.Вставить("Наименование", Наименование1); Данные1.Вставить("ПометкаУдаления", ПараКандидатов.Поля1.ПометкаУдаления); Данные2.Вставить("Ссылка", ПараКандидатов.Ссылка2); @@ -564,7 +562,27 @@ // Добавить строку в таблицу кандидатов для прикладного метода. // -Функция ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Знач ДанныеОсновногоЭлемента, Знач ДанныеКандидата, Знач СтруктураПолей) + + +// Описание +// +// Параметры: +// ТаблицаКандидатов - см. ТаблицаКандидатов +// ДанныеОсновногоЭлемента - Структура: +// * Ссылка - ЛюбаяСсылка +// * Наименование - Строка +// * Код - Строка +// * ПометкаУдаления - Булево +// ДанныеКандидата - Структура: +// * Ссылка - ЛюбаяСсылка +// * Наименование - Строка +// * Код - Строка +// * ПометкаУдаления - Булево +// СтруктураПолей - Структура +// Возвращаемое значение: +// СтрокаТаблицыЗначений +// +Функция ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Знач ДанныеОсновногоЭлемента, Знач ДанныеКандидата, Знач СтруктураПолей) Строка = ТаблицаКандидатов.Добавить(); Строка.ЭтоДубли = Ложь; @@ -601,15 +619,26 @@ // Добавить в дерево результатов найденный дубль. // -Процедура ЗарегистрироватьДубль(ТаблицаДублей, Знач Элемент1, Знач Элемент2, Знач СтруктураПолей) +Процедура ЗарегистрироватьДубль(КоллекцияДублей, Знач Элемент1, Знач Элемент2, Знач СтруктураПолей) + + ТаблицаДублей = КоллекцияДублей.ТаблицаДублей; + НезначимыеДубли = КоллекцияДублей.НезначимыеДубли; // Определить какой элемент уже добавлен в дубли. СтрокаДублей1 = ТаблицаДублей.Найти(Элемент1.Ссылка, "Ссылка"); СтрокаДублей2 = ТаблицаДублей.Найти(Элемент2.Ссылка, "Ссылка"); - Дубль1Зарегистрирован = (СтрокаДублей1 <> Неопределено); - Дубль2Зарегистрирован = (СтрокаДублей2 <> Неопределено); + + СтрокаНезначимыхДублей1 = НезначимыеДубли.Найти(Элемент1.Ссылка); + СтрокаНезначимыхДублей2 = НезначимыеДубли.Найти(Элемент2.Ссылка); + + Дубль1Зарегистрирован = (СтрокаДублей1 <> Неопределено) ИЛИ (СтрокаНезначимыхДублей1 <> Неопределено); + Дубль2Зарегистрирован = (СтрокаДублей2 <> Неопределено) ИЛИ (СтрокаНезначимыхДублей2 <> Неопределено); // Если оба элемента добавлены в дубли, то ничего делать не надо. - Если Дубль1Зарегистрирован И Дубль2Зарегистрирован Тогда + // Или если хотя бы один из элементов незначимый, то пара не является дублем + Если Дубль1Зарегистрирован И Дубль2Зарегистрирован + ИЛИ СтрокаНезначимыхДублей1 <> Неопределено + ИЛИ СтрокаНезначимыхДублей2 <> Неопределено Тогда + Возврат; КонецЕсли; @@ -627,18 +656,32 @@ СписокСвойств = "Ссылка,Код,Наименование,ПометкаУдаления," + СтруктураПолей.СписокПолейИдентичности + "," + СтруктураПолей.СписокПолейПодобия; Если Не Дубль1Зарегистрирован Тогда + СведенияОДубле = ТаблицаДублей.Добавить(); ЗаполнитьЗначенияСвойств(СведенияОДубле, Элемент1, СписокСвойств); СведенияОДубле.Родитель = СсылкаГруппыДублей; + + Если СведенияОДубле.ПометкаУдаления Тогда + КоллекцияДублей.ДублиКПроверке.Добавить(СведенияОДубле.Ссылка); + КонецЕсли; + КонецЕсли; Если Не Дубль2Зарегистрирован Тогда + СведенияОДубле = ТаблицаДублей.Добавить(); ЗаполнитьЗначенияСвойств(СведенияОДубле, Элемент2, СписокСвойств); СведенияОДубле.Родитель = СсылкаГруппыДублей; + + Если СведенияОДубле.ПометкаУдаления Тогда + КоллекцияДублей.ДублиКПроверке.Добавить(СведенияОДубле.Ссылка); + КонецЕсли; + КонецЕсли; - ДлительныеОперации.СообщитьПрогресс(ТаблицаДублей.Количество(), "ЗарегистрироватьДубль"); + Если КоллекцияДублей.ДублиКПроверке.Количество() >= КоллекцияДублей.КоличествоЭлементовДляСравнения Тогда + УдалитьНезначимыеДубли(КоллекцияДублей); + КонецЕсли; КонецПроцедуры @@ -684,20 +727,20 @@ КонецФункции // Параметры: -// СхемаКД - СхемаКомпоновкиДанных - -// НастройкиКД - НастройкиКомпоновкиДанных - +// СхемаКД - СхемаКомпоновкиДанных +// НастройкиКД - НастройкиКомпоновкиДанных // // Возвращаемое значение: -// Структура - где: -// * Таблица - ТаблицаЗначений - где: -// ** Индекс - Число - -// ** ВГраница - Число - -// * ТекущийЭлемент - СтрокаТаблицыЗначений - где: -// ** Ссылка - ЛюбаяСсылка - -// * Индекс - Число - -// * ВГраница - Число - -// * ПроцессорКД - ПроцессорКомпоновкиДанных - -// * ПроцессорВыводаКД - ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений - +// Структура: +// * Таблица - ТаблицаЗначений: +// ** Индекс - Число +// ** ВГраница - Число +// * ТекущийЭлемент - СтрокаТаблицыЗначений: +// ** Ссылка - ЛюбаяСсылка +// * Индекс - Число +// * ВГраница - Число +// * ПроцессорКД - ПроцессорКомпоновкиДанных +// * ПроцессорВыводаКД - ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений // Функция ИнициализироватьВыборкуКД(СхемаКД, НастройкиКД) Выборка = Новый Структура("Таблица, ТекущийЭлемент, Индекс, ВГраница, ПроцессорКД, ПроцессорВыводаКД"); @@ -751,6 +794,187 @@ Возврат Истина; КонецФункции +// Удаляет дубли из коллекции, если дубль помечен на удаление +// и не имеет мест использования +// +Процедура УдалитьНезначимыеДубли(КоллекцияДублей) + + // Не удаляем незначимые дубли, т.к. нет ограничения + Если НЕ КоллекцияДублей.СкрыватьНезначимыеДубли Тогда + Возврат; + КонецЕсли; + + ТаблицаДублей = КоллекцияДублей.ТаблицаДублей; + ДублиКПроверке = КоллекцияДублей.ДублиКПроверке; + + // Не будем проверять дубли, т.к. набрали нужное количество для вывода результата + Если ТаблицаДублей.Количество() - ДублиКПроверке.Количество() <= КоллекцияДублей.КоличествоЭлементовДляСравнения Тогда + + МестаИспользования = МестаИспользованияСсылок(ДублиКПроверке); + МестаИспользования.Индексы.Добавить("Ссылка, ВспомогательныеДанные"); + + Для Сч = 0 По ДублиКПроверке.ВГраница() Цикл + + ПроверяемыеДубли = ТаблицаДублей.НайтиСтроки(Новый Структура("Ссылка", ДублиКПроверке[Сч])); + Для каждого Дубль Из ПроверяемыеДубли Цикл + + Если Дубль.Родитель = Неопределено Тогда + Продолжить; + КонецЕсли; + + МестаИспользованияВнутренний = МестаИспользования.НайтиСтроки(Новый Структура("Ссылка, ВспомогательныеДанные", Дубль.Ссылка, Ложь)); + Если МестаИспользованияВнутренний.Количество() = 0 И Дубль.ПометкаУдаления Тогда + + ЗаполнитьЗначенияСвойств(КоллекцияДублей.НезначимыеДубли.Добавить(), Дубль); + КоллекцияДублей.ОбработанныеГруппы.Вставить(Дубль.Родитель); + ТаблицаДублей.Удалить(Дубль); + + КонецЕсли; + + КонецЦикла; + КонецЦикла; + + КонецЕсли; + + ДублиКПроверке.Очистить(); + ДлительныеОперации.СообщитьПрогресс(ТаблицаДублей.Количество(), "ЗарегистрироватьДубль"); + +КонецПроцедуры + +// Удаляет группы и ее элементы, если в группе только один элемент +Процедура УдалитьНезначимыеГруппы(КоллекцияДублей) + + ТаблицаДублей = КоллекцияДублей.ТаблицаДублей; + Для каждого ГруппаДублей Из КоллекцияДублей.ОбработанныеГруппы Цикл + + Дубли = ТаблицаДублей.НайтиСтроки(Новый Структура("Родитель", ГруппаДублей.Ключ)); + Если Дубли.Количество() = 1 Тогда + ТаблицаДублей.Удалить(Дубли[0]); + КонецЕсли; + + Группа = ТаблицаДублей.Найти(ГруппаДублей.Ключ, "Ссылка"); + Если Группа <> Неопределено Тогда + ТаблицаДублей.Удалить(Группа); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - ЛюбаяСсылка +// +Функция ТаблицаДублей(ПоляДляСравненияНаПодобие, ПоляДляСравненияНаРавенство) + + ТаблицаДублей = Новый ТаблицаЗначений; + ТаблицаДублей.Колонки.Добавить("Ссылка"); + Для Каждого ПолеТаблицы Из ПоляДляСравненияНаРавенство Цикл + Если ТаблицаДублей.Колонки.Найти(ПолеТаблицы.Ключ) = Неопределено Тогда + ТаблицаДублей.Колонки.Добавить(ПолеТаблицы.Ключ); + КонецЕсли; + КонецЦикла; + + Для Каждого ПолеТаблицы Из ПоляДляСравненияНаПодобие Цикл + Если ТаблицаДублей.Колонки.Найти(ПолеТаблицы.Ключ) = Неопределено Тогда + ТаблицаДублей.Колонки.Добавить(ПолеТаблицы.Ключ); + КонецЕсли; + КонецЦикла; + + ОбязательныеКолонки = СтрРазделить("Код,Наименование,Родитель,ПометкаУдаления", ","); + Для Каждого ИмяПоляТаблицы Из ОбязательныеКолонки Цикл + Если ТаблицаДублей.Колонки.Найти(ИмяПоляТаблицы) = Неопределено Тогда + ТаблицаДублей.Колонки.Добавить(ИмяПоляТаблицы); + КонецЕсли; + КонецЦикла; + + ТаблицаДублей.Индексы.Добавить("Ссылка"); + ТаблицаДублей.Индексы.Добавить("Родитель"); + ТаблицаДублей.Индексы.Добавить("Ссылка, Родитель"); + + Возврат ТаблицаДублей; +КонецФункции + +// Возвращаемое значение: +// Структура: +// * НезначимыеДубли - ТаблицаЗначений: +// ** Ссылка - ЛюбаяСсылка +// ** Родитель - ЛюбаяСсылка +// ** Ссылка - ЛюбаяСсылка +// ** Родитель - ЛюбаяСсылка +// * ОбработанныеГруппы - Соответствие +// * СкрыватьНезначимыеДубли - Булево +// * ДублиКПроверке - Массив +// * КоличествоЭлементовДляСравнения - Произвольный +// - Неопределено +// * ТаблицаДублей - см. ТаблицаДублей +// +Функция КоллекцияДублей(Знач ПараметрыПоиска, ПоляДляСравненияНаПодобие, ПоляДляСравненияНаРавенство) + + КоллекцияДублей = Новый Структура; + КоллекцияДублей.Вставить("ТаблицаДублей", ТаблицаДублей(ПоляДляСравненияНаПодобие, ПоляДляСравненияНаРавенство)); + КоллекцияДублей.Вставить("КоличествоЭлементовДляСравнения", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "МаксимальноеЧислоДублей", 0)); + КоллекцияДублей.Вставить("ДублиКПроверке", Новый Массив); + + КоллекцияДублей.Вставить("СкрыватьНезначимыеДубли", Ложь); + Если ПараметрыПоиска.Свойство("СкрыватьНезначимыеДубли") + И ПараметрыПоиска.СкрыватьНезначимыеДубли = Истина + ИЛИ КоллекцияДублей.КоличествоЭлементовДляСравнения = 0 Тогда + + КоллекцияДублей.СкрыватьНезначимыеДубли = Истина; + КонецЕсли; + + КоллекцияДублей.Вставить("ОбработанныеГруппы", Новый Соответствие); + + НезначимыеДубли = Неопределено; + + НезначимыеДубли = Новый ТаблицаЗначений; + НезначимыеДубли.Колонки.Добавить("Ссылка"); + НезначимыеДубли.Колонки.Добавить("Родитель"); + + НезначимыеДубли.Индексы.Добавить("Ссылка"); + + КоллекцияДублей.Вставить("НезначимыеДубли", НезначимыеДубли); + Возврат КоллекцияДублей; + +КонецФункции + +Функция Результат(ТаблицаДублей) + Перем Результат; + + Результат = Новый Структура; + Результат.Вставить("ТаблицаДублей", ТаблицаДублей); + Результат.Вставить("ОписаниеОшибки"); + Результат.Вставить("МестаИспользования"); + + Возврат Результат; +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка1 - ЛюбаяСсылка +// * Поля1 - Структура: +// ** Наименование - Строка +// ** Код - Строка +// * Ссылка2 - ЛюбаяСсылка +// * Поля2 - Структура: +// ** Наименование - Строка +// ** Код - Строка +// * ЭтоДубли - Булево +// +Функция ТаблицаКандидатов() + ТаблицаКандидатов = Новый ТаблицаЗначений; + КолонкиКандидатов = ТаблицаКандидатов.Колонки; + КолонкиКандидатов.Добавить("Ссылка1"); + КолонкиКандидатов.Добавить("Поля1"); + КолонкиКандидатов.Добавить("Ссылка2"); + КолонкиКандидатов.Добавить("Поля2"); + КолонкиКандидатов.Добавить("ЭтоДубли", Новый ОписаниеТипов("Булево")); + ТаблицаКандидатов.Индексы.Добавить("ЭтоДубли"); + Возврат ТаблицаКандидатов; +КонецФункции + #КонецОбласти #Иначе diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo index b847f075e..19f8f9f57 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo @@ -58,6 +58,11 @@ <key>ru</key> <value>Правила поиска</value> </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form index e84e4b0ab..7f4311736 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Form.form @@ -44,6 +44,7 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:RadioButtonsFieldExtInfo"> + <columnsCount>1</columnsCount> <choiceList> <presentation> <key>ru</key> @@ -56,7 +57,7 @@ <choiceList> <presentation> <key>ru</key> - <value>В разделах</value> + <value>В разделах:</value> </presentation> <value xsi:type="core:NumberValue"> <value>1</value> @@ -235,6 +236,7 @@ <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> <group>HorizontalIfPossible</group> + <verticalAlign>Bottom</verticalAlign> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -514,7 +516,6 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> - <header>true</header> <headerHeight>1</headerHeight> <footerHeight>1</footerHeight> <horizontalScrollBar>AutoUse</horizontalScrollBar> diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl index a9f869a21..9ae21ea70 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl @@ -176,9 +176,9 @@ КонецПроцедуры // Параметры: -// ЭлементДерева - ДанныеФормыЭлементДерева. -// * Пометка - Число - Обязательный реквизит дерева. -// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. // &НаКлиентеНаСервереБезКонтекста Процедура ПриПометкеЭлементаДерева(ЭлементДерева) @@ -458,9 +458,9 @@ КонецПроцедуры // Параметры: -// ЭлементДерева - ДанныеФормыЭлементДерева. -// * Пометка - Число - Обязательный реквизит дерева. -// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. // &НаКлиентеНаСервереБезКонтекста Функция СледующееЗначениеПометкиЭлемента(ЭлементДерева) @@ -526,9 +526,9 @@ КонецФункции // Параметры: -// ЭлементДерева - ДанныеФормыЭлементДерева. -// * Пометка - Число - Обязательный реквизит дерева. -// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. // &НаКлиентеНаСервереБезКонтекста Процедура ПометитьЭлементыРодителейРекурсивно(ЭлементДерева) @@ -553,9 +553,9 @@ КонецПроцедуры // Параметры: -// ЭлементДерева - ДанныеФормыЭлементДерева. -// * Пометка - Число - Обязательный реквизит дерева. -// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. // &НаКлиентеНаСервереБезКонтекста Функция ЗначениеПометкиОтносительноВложенныхЭлементов(ЭлементДерева) @@ -608,9 +608,9 @@ КонецФункции // Параметры: -// ЭлементДерева - ДанныеФормыЭлементДерева. -// * Пометка - Число - Обязательный реквизит дерева. -// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. // &НаКлиентеНаСервереБезКонтекста Функция СостояниеВложенныхЭлементов(ЭлементДерева) @@ -661,9 +661,9 @@ КонецФункции // Параметры: -// ЭлементДерева - ДанныеФормыЭлементДерева. -// * Пометка - Число - Обязательный реквизит дерева. -// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. // &НаКлиентеНаСервереБезКонтекста Функция ТребуетсяПометитьВложенныеЭлементы(ЭлементДерева) @@ -688,9 +688,9 @@ КонецФункции // Параметры: -// ЭлементДерева - ДанныеФормыЭлементДерева. -// * Пометка - Число - Обязательный реквизит дерева. -// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. // &НаКлиентеНаСервереБезКонтекста Процедура ПометитьВложенныеЭлементыРекурсивно(ЭлементДерева) @@ -707,10 +707,11 @@ КонецПроцедуры // Параметры: -// КоллекцияЭлементовДерева - ДанныеФормыДерева, ДанныеФормыЭлементДерева. -// * Пометка - Число - Обязательный реквизит дерева. -// * ЭтоОбъектМетаданных - Булево - Обязательный реквизит дерева. -// ЗначениеПометки - Число - Устанавливаемое значение. +// КоллекцияЭлементовДерева - ДанныеФормыДерева +// - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// ЗначениеПометки - Число - устанавливаемое значение. // &НаКлиентеНаСервереБезКонтекста Процедура ПометитьВсеЭлементыДереваРекурсивно(ЭлементДеревоРазделовПоиска, ЗначениеПометки) diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo index a00d7fe11..fe4e50ff5 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo @@ -61,6 +61,6 @@ </synonym> <group>ActionsPanelTools</group> <representation>Auto</representation> - <shortcut>Ctrl+Shift+F</shortcut> + <shortcut>Ctrl+Alt+F</shortcut> </commands> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form index 5de174863..6c7bafdc5 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form @@ -5690,7 +5690,7 @@ </userVisible> <title> <key>ru</key> - <value>Группа ошибка загрузки сообщения для сопоставления</value> + <value>Ошибка загрузки сообщения для сопоставления</value> ГруппаОшибкаЗагрузкиСообщенияДляСопоставленияРасширеннаяПодсказка diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 9927c4c12..f7989d3eb 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -996,7 +996,7 @@ ИмяКаталога = ПолучитьИмяКаталогаНаСервере(Объект.ВидТранспортаСообщенийОбмена, Объект.УзелИнформационнойБазы); Если ПустаяСтрока(ИмяКаталога) Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Не задан каталог обмена информацией.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Не задан каталог синхронизации данных.'")); Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl index 1baf0cdeb..696f9a5ef 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl @@ -155,6 +155,7 @@ // Для внутреннего использования. // Выполняет выгрузку данных, вызывается фоновым заданием. // Параметры - структура с параметрами для передачи. +// Процедура ВыполнитьВыгрузкуДанных(Параметры, АдресВременногоХранилища) Экспорт Отказ = Ложь; @@ -696,9 +697,9 @@ КонецПроцедуры // Параметры: -// Таблица - ТаблицаЗначений - -// ЗначениеИтератора - Число - -// ИмяПоляИтератора - Строка - +// Таблица - ТаблицаЗначений +// ЗначениеИтератора - Число +// ИмяПоляИтератора - Строка // Процедура ДобавитьКолонкуСоЗначениемВТаблицу(Таблица, ЗначениеИтератора, ИмяПоляИтератора) diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl index d9701d3b4..6f13bd856 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl @@ -301,7 +301,7 @@ // Данные табличной части ИнформацияСтатистики. // // Возвращаемое значение: -// ТаблицаЗначений - Данные табличной части ИнформацияСтатистики. +// ТаблицаЗначений - данные табличной части ИнформацияСтатистики. // Функция ТаблицаИнформацииСтатистики() Экспорт diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl index 673345a1f..17dcc3b01 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl @@ -620,7 +620,8 @@ // Регистрирует дополнительные данные по настройкам // // Параметры: -// ОбработкаВыгрузки - Структура, ОбработкаОбъект.ИнтерактивноеИзменениеВыгрузки - инициализированный объект. +// ОбработкаВыгрузки - Структура +// - ОбработкаОбъект.ИнтерактивноеИзменениеВыгрузки - инициализированный объект. // Процедура ЗарегистрироватьДанныеДополненияВыгрузки(Знач ОбработкаВыгрузки) diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl index 0ed15c1fc..38dac7c9d 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl @@ -23,9 +23,7 @@ ИмяПланаОбмена = АвтономнаяРаботаСлужебный.ПланОбменаАвтономнойРаботы(); - // получаем значения по умолчанию для плана обмена - МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; - + // получаем значения по умолчанию для плана обмена НастройкаОтборовНаУзле = ОбменДаннымиСервер.НастройкаОтборовНаУзле(ИмяПланаОбмена, ""); Элементы.ОписаниеОграниченийПередачиДанных.Заголовок = ОписаниеОграниченийПередачиДанных(ИмяПланаОбмена, НастройкаОтборовНаУзле); @@ -819,6 +817,8 @@ , "Объект.НаименованиеАвтономногоРабочегоМеста", , Отказ); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -840,6 +840,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -853,6 +855,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -868,6 +872,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -879,6 +885,8 @@ Формат(Окр(РазмерФайлаПакетаУстановки / (1024 * 1024), 1), "ЧДЦ=1; ЧГ=3,0")); Элементы.ЗагрузитьНачальныйОбразНаКомпьютерПользователя.Заголовок = ЗаголовокЭлемента; + Возврат Неопределено; + КонецФункции //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl index 258327d37..a203603ea 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl @@ -14,7 +14,8 @@ // с переданными настройками и помещает во временное хранилище. // // Параметры: -// Настройки - Структура - Настройки отборов на узле +// Настройки - Структура - настройки отборов на узле. +// ВыбранныеПользователиСинхронизации - Массив из СправочникСсылка.Пользователи // АдресВременногоХранилищаНачальногоОбраза - Строка // АдресВременногоХранилищаИнформацииОПакетеУстановки - Строка // @@ -96,7 +97,7 @@ #Область СлужебныеПроцедурыИФункции -Функция ЗаписатьПакетУстановкиВоВременноеХранилище( +Процедура ЗаписатьПакетУстановкиВоВременноеХранилище( АдресВременногоХранилищаНачальногоОбраза, АдресВременногоХранилищаИнформацииОПакетеУстановки) @@ -235,7 +236,7 @@ ПоместитьВоВременноеХранилище(ДанныеФайла, АдресВременногоХранилищаНачальногоОбраза); ПоместитьВоВременноеХранилище(ИнформацияОПакетеУстановки, АдресВременногоХранилищаИнформацииОПакетеУстановки); -КонецФункции +КонецПроцедуры Процедура ВыгрузитьПараметрыВНачальныйОбраз(ПрефиксАвтономногоРабочегоМеста, ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто) diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl index 50c239297..6f2d9e28c 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl @@ -2214,7 +2214,7 @@ ЗаголовокСообщенияXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("http://www.1c.ru/SSL/Exchange/Message", ЧтениеXML.ЛокальноеИмя)); - СтруктураНастроек = Новый Структура; + СтруктураНастроек = ОбменДаннымиXDTOСервер.СтруктураНастроекXDTO(); ОбменДаннымиXDTOСервер.ЗаполнитьСтруктуруНастроекXDTOКорреспондента(СтруктураНастроек, ЗаголовокСообщенияXDTO, , УзелОбмена); // Проверка UID отправителя на соответствие формату. diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index 836e86beb..3ff63a009 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -418,7 +418,7 @@ // Сообщение об ошибке при обмене данными. // // Возвращаемое значение: -// Строка - Сообщение об ошибке при обмене данными. +// Строка - сообщение об ошибке при обмене данными. // Функция СтрокаСообщенияОбОшибке() Экспорт diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl index 24552c800..d62164ba0 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl @@ -40,7 +40,7 @@ Если РасширениеФайлаВСписке Тогда Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) Тогда - КодировкаЗначение = РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ЭтотОбъект.Объект.Ссылка); + КодировкаЗначение = РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ЭтотОбъект.Объект.Ссылка); СписокКодировок = РаботаСФайламиСлужебный.Кодировки(); ЭлементСписка = СписокКодировок.НайтиПоЗначению(КодировкаЗначение); @@ -305,7 +305,7 @@ КонецФункции // Возвращаемое значение: -// СправочникОбъект - . +// СправочникОбъект // &НаКлиенте Функция ТекущийОбъектФормы() @@ -315,7 +315,7 @@ КонецФункции // Возвращаемое значение: -// СправочникОбъект - . +// СправочникОбъект // &НаСервере Функция ТекущийОбъектФормыСервер() diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl index 8944a57d1..6c424c27a 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl @@ -107,7 +107,7 @@ // Возвращает таблицу имен кодировок. // // Возвращаемое значение: -// ТаблицаЗначений - +// ТаблицаЗначений // &НаСервереБезКонтекста Функция ПолучитьПолныйСписокКодировок() diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl index 32d59eff4..39515078b 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl @@ -195,15 +195,8 @@ КонецЕсли; КонецЦикла; - ЧастиСтроки = Новый Массив; - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока( - Строка(ЭтотОбъект["Объект"].Автор), - , - , - , - ПолучитьНавигационнуюСсылку(ЭтотОбъект["Объект"].Автор))); - - СтатусСоздана = Новый ФорматированнаяСтрока(ЧастиСтроки); + СтатусСоздана = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = '%2'"), + ПолучитьНавигационнуюСсылку(ЭтотОбъект["Объект"].Автор), Строка(ЭтотОбъект["Объект"].Автор)); ОбновитьИнформациюОбИзменении(); @@ -331,15 +324,8 @@ &НаСервере Процедура ОбновитьИнформациюОбИзменении() - ЧастиСтроки = Новый Массив; - ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока( - Строка(ЭтотОбъект["Объект"].Изменил), - , - , - , - ПолучитьНавигационнуюСсылку(ЭтотОбъект["Объект"].Изменил))); - - СтатусИзменена = Новый ФорматированнаяСтрока(ЧастиСтроки); + СтатусИзменена = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = '%2'"), + ПолучитьНавигационнуюСсылку(ЭтотОбъект["Объект"].Изменил), Строка(ЭтотОбъект["Объект"].Изменил)); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl index a22af51d4..774c9d20c 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl @@ -1320,7 +1320,7 @@ КонецПроцедуры // Параметры: -// ПараметрыВыполнения - Структура - со свойствами: +// ПараметрыВыполнения - Структура: // * ДанныеФайла - см. РаботаСФайлами.ДанныеФайла // &НаКлиенте @@ -1940,8 +1940,8 @@ КонецПроцедуры // Возвращаемое значение: -// ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции - где: -// * Ссылка - СправочникСсылка -. +// ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции: +// * Ссылка - СправочникСсылка // &НаКлиенте Функция ДанныеСтрокиСписка(ЭлементСписка) diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form index 33ea54336..71514241e 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form @@ -4348,6 +4348,19 @@ true + + ИзменениеФайлов + 5 + + Boolean + + + true + + + true + + СтандартнаяЗаписатьИЗакрыть diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl index fa76a2df7..2c9e8a471 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl @@ -21,6 +21,7 @@ ДоступнаЭлектроннаяПодпись = РаботаСФайламиСлужебный.ДоступнаЭлектроннаяПодпись(ТипЗнч(ПрисоединенныйФайл)); ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + ИзменениеФайлов = Пользователи.ЭтоПолноправныйПользователь(); ПараметрыОтправки = ?(ЗначениеЗаполнено(Параметры.ПараметрыОтправки), Параметры.ПараметрыОтправки, РаботаСФайламиСлужебный.ПодготовитьСтруктуруПараметровОтправки()); @@ -720,7 +721,7 @@ Если ЭтоНовый() Или Не ЗначениеЗаполнено(ЭтотОбъект.Объект.Редактирует) - Или ЭтотОбъект.Объект.Редактирует <> ТекущийПользователь Тогда + Или ЭтотОбъект.Объект.Редактирует <> ТекущийПользователь И НЕ ИзменениеФайлов Тогда Возврат; КонецЕсли; @@ -1063,8 +1064,10 @@ СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); Иначе СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); - СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); СделатьКомандуНедоступной(ИменаКоманд, "Редактировать"); + Если Не Форма.ИзменениеФайлов Тогда + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + КонецЕсли; КонецЕсли; СделатьКомандуНедоступной(ИменаКоманд, "Занять"); @@ -1077,13 +1080,17 @@ СделатьКомандуНедоступной(ИменаКоманд, "Расшифровать"); Иначе СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); - СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); СделатьКомандуНедоступной(ИменаКоманд, "СохранитьИзменения"); + Если Не Форма.ИзменениеФайлов Тогда + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + КонецЕсли; КонецЕсли; Если ФайлПодписан Тогда СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); - СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + Если Не Форма.ИзменениеФайлов Тогда + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + КонецЕсли; СделатьКомандуНедоступной(ИменаКоманд, "Редактировать"); СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); Иначе @@ -1099,7 +1106,9 @@ Если ФайлЗашифрован Тогда СделатьКомандыЭПНедоступными(ИменаКоманд); СделатьКомандуНедоступной(ИменаКоманд, "ЗакончитьРедактирование"); - СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + Если Не Форма.ИзменениеФайлов Тогда + СделатьКомандуНедоступной(ИменаКоманд, "Освободить"); + КонецЕсли; СделатьКомандуНедоступной(ИменаКоманд, "Редактировать"); СделатьКомандуНедоступной(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); @@ -1513,8 +1522,8 @@ // Продолжение процедуры ПрочитатьСертификатыПодписей. // // Параметры: -// Контекст - Структура - контекст операции: -// * Сертификат - СертификатКриптографии -. +// Контекст - Структура: +// * Сертификат - СертификатКриптографии // &НаКлиенте Процедура ПрочитатьСертификатыПодписейЦиклПослеПолученияСертификатовИзПодписи(Сертификаты, Контекст) Экспорт diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Form.form deleted file mode 100644 index 215cb73ca..000000000 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Form.form +++ /dev/null @@ -1,1277 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <items xsi:type="form:FormGroup"> - <name>КоманднаяПанель</name> - <id>1</id> - <items xsi:type="form:Button"> - <name>ФормаОткрытьКарточку</name> - <id>26</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаОткрытьКарточкуExtendedTooltip</name> - <id>34</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>Picture</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>12</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>ФормаУдалитьИзЛокальногоКэшаФайловРасширеннаяПодсказка</name> - <id>30</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.УдалитьИзЛокальногоКэшаФайлов</commandName> - <buttonImportance>Normal</buttonImportance> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <textColor xsi:type="core:ColorRef"> - <color>Style.ButtonTextColor</color> - </textColor> - <backColor xsi:type="core:ColorRef"> - <color>Style.ButtonBackColor</color> - </backColor> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>ФормаЗакончитьРедактирование</name> - <id>25</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>ФормаЗакончитьРедактированиеРасширеннаяПодсказка</name> - <id>31</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> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>ФормаОтменитьПоиск</name> - <id>56</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаОтменитьПоискРасширеннаяПодсказка</name> - <id>57</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Item.Список.StandardCommand.CancelSearch</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>ФормаНайти</name> - <id>54</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаНайтиРасширеннаяПодсказка</name> - <id>55</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Item.Список.StandardCommand.Find</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>13</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>ФормаОсвободитьРасширеннаяПодсказка</name> - <id>32</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> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <textColor xsi:type="core:ColorRef"> - <color>Style.ButtonTextColor</color> - </textColor> - <backColor xsi:type="core:ColorRef"> - <color>Style.ButtonBackColor</color> - </backColor> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>ФормаОткрытьКаталогФайла</name> - <id>20</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>ФормаОткрытьКаталогФайлаРасширеннаяПодсказка</name> - <id>33</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>58</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаВывестиСписокРасширеннаяПодсказка</name> - <id>59</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Item.Список.StandardCommand.OutputList</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> - - - КоманднаяПанельРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - CommandBar - - Left - Form - - - - Список - 2 - - <key>ru</key> - <value>Список</value> - - true - true - - true - - - Список - - false - None - Add - Copy - EndEdit - MoveDown - MoveUp - SortListAsc - SortListDesc - - СписокНаРедактирование - 17 - VeryLow - true - true - - true - - - Список.НаРедактирование - - None - - ru - Файл занят для редактирования - - - СписокНаРедактированиеРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - - СписокНаРедактированиеКонтекстноеМеню - 18 - true - - CheckBoxField - true - Enter - true - - CommonPicture.РедактироватьФайл - - Left - true - - - - СписокИмяФайла - 6 - VeryHigh - - <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 - true - - Style.BorderColor - - Normal - - - - СписокРазмер - 8 - Usual - - <key>ru</key> - <value>Размер (КБ)</value> - - true - true - - true - - - Список.Размер - - - СписокРазмерРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - - СписокРазмерКонтекстноеМеню - 9 - true - - InputField - Right - Enter - true - Left - true - Left - - 12 - true - true - true - true - true - - Style.BorderColor - - Normal - - - - СписокДатаИзменения - 10 - Usual - - <key>ru</key> - <value>Дата изменения</value> - - true - true - - true - - - Список.ДатаИзменения - - - ru - Дата изменения данных файла (местное время) - - - СписокДатаИзмененияРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - - СписокДатаИзмененияКонтекстноеМеню - 11 - true - - InputField - Enter - true - Left - true - Left - - 15 - true - true - false - true - true - true - - Style.BorderColor - - Normal - - - - СписокФайл - 48 - Usual - - <key>ru</key> - <value>Ссылка (Файл)</value> - - true - true - - - Список.Файл - - - СписокФайлРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - - СписокФайлКонтекстноеМеню - 49 - true - - InputField - Auto - true - Left - true - - 1 - true - true - true - true - true - true - Normal - - - - СписокВерсия - 51 - Usual - - <key>ru</key> - <value>Ссылка (Версия)</value> - - true - true - - - Список.Версия - - - СписокВерсияРасширеннаяПодсказка - 53 - Label - true - true - - Left - - - - СписокВерсияКонтекстноеМеню - 52 - true - - InputField - Auto - true - Left - true - - 1 - true - true - true - true - true - true - Normal - - - None - - СписокКоманднаяПанель - 16 - Left - true - - - BeforeDeleteRow - СписокПередУдалением - - - OnActivateRow - СписокПриАктивизацииСтроки - - - BeforeRowChange - СписокПередНачаломИзменения - - - СписокСтрокаПоиска - 62 - - СписокСтрокаПоискаРасширеннаяПодсказка - 64 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 63 - true - - Список - - true - - - - СписокСостояниеПросмотра - 65 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 67 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 66 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 68 - - СписокУправлениеПоискомРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 69 - true - - SearchControlAddition - Список - - true - - - - СписокРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - - СписокКонтекстноеМеню - 3 - - СписокКонтекстноеМенюОткрытьКарточку - 27 - true - true - - true - - - СписокКонтекстноеМенюОткрытьКарточкуРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - Form.Command.ОткрытьКарточку - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюУдалитьИзЛокальногоКэшаФайлов - 21 - true - true - - true - - false - - СписокКонтекстноеМенюУдалитьИзЛокальногоКэшаФайловРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - Form.Command.УдалитьИзЛокальногоКэшаФайлов - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюЗакончитьРедактирование - 24 - true - true - - true - - false - - СписокКонтекстноеМенюЗакончитьРедактированиеРасширеннаяПодсказка - 36 - Label - true - true - - Left - - - Form.Command.ЗакончитьРедактирование - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюНайти - 71 - true - true - - true - - - СписокКонтекстноеМенюНайтиРасширеннаяПодсказка - 72 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОтменитьПоиск - 73 - true - true - - true - - - СписокКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОсвободить - 22 - true - true - - true - - false - - СписокКонтекстноеМенюОсвободитьРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - Form.Command.Освободить - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОткрытьКаталогФайла - 23 - true - true - - true - - false - - СписокКонтекстноеМенюОткрытьКаталогФайлаРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - Form.Command.ОткрытьКаталогФайла - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюВыделитьВсе - 28 - true - true - - true - - - СписокКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.SelectAll - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюКопироватьВБуферОбмена - 60 - true - true - - true - - - СписокКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 61 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - - - true - true - true - true - true - MultiRow - Row -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto - true - true - - Список.ИндексКартинки - - - CommonPicture.КоллекцияПиктограммФайлов - - - Style.BorderColor - - None - None - None - SelectionPresentationAndChoice - true - -
    - None - false - - ФормаКоманднаяПанель - -1 - Left - true - - - OnOpen - ПриОткрытии - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - true - true - true - Vertical - true - true - true - auto - true - - - КоманднаяПанель - - - - Список - - <key>ru</key> - <value>Список</value> - - 1 - - ValueTable - - - true - - - true - - - ИмяФайла - - <key>ru</key> - <value>Имя файла</value> - - 1 - - String - - - - true - - - true - - - - Размер - - <key>ru</key> - <value>Размер файла</value> - - 2 - - Number - - - - true - - - true - - - - ДатаИзменения - - <key>ru</key> - <value>Дата изменения</value> - - 3 - - Date - - - - true - - - true - - - - ИндексКартинки - 4 - - Number - - 10 - - - - true - - - true - - - - Версия - - <key>ru</key> - <value>Версия</value> - - 5 - - DefinedType.ПрисоединенныйФайл - - - true - - - true - - - - Редактирует - 6 - - CatalogRef.Пользователи - - - true - - - true - - - - НаРедактирование - - <key>ru</key> - <value>На редактирование</value> - - 7 - - Boolean - - - true - - - true - - - - Файл - - <key>ru</key> - <value>Файл</value> - - 8 - - DefinedType.ПрисоединенныйФайл - - - true - - - true - - - - - СписокЗначенийФайловВРегистре - 2 - - ValueList - - - true - - - true - - - - - - - УдалитьИзЛокальногоКэшаФайлов - - <key>ru</key> - <value>Удалить</value> - - 1 - - ru - Удалить из основного рабочего каталога - - - true - - - StdPicture.Delete - - - - УдалитьИзЛокальногоКэшаФайлов - - - TextPicture - DontUse - Auto - - - Освободить - - <key>ru</key> - <value>Отменить редактирование</value> - - 2 - - ru - Освободить - - - true - - - CommonPicture.ОсвободитьФайл - - - - ОсвободитьВыполнить - - - TextPicture - DontUse - Auto - - - ОткрытьКаталогФайла - - <key>ru</key> - <value>Открыть каталог файла</value> - - 3 - - ru - Открыть каталог файла - - - true - - - - ОткрытьКаталогФайлаВыполнить - - - DontUse - Auto - - - ЗакончитьРедактирование - - <key>ru</key> - <value>Закончить редактирование</value> - - 4 - - ru - Закончить редактирование - - - true - - - CommonPicture.ЗакончитьРедактированиеФайла - - - - ЗакончитьРедактирование - - - TextPicture - DontUse - Auto - - - ОткрытьКарточку - - <key>ru</key> - <value>Открыть карточку</value> - - 5 - - ru - Открыть карточку файла - - - true - - - StdPicture.Change - - - - ОткрытьКарточку - - - DontUse - Auto - - - - - - diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Help/ru.html deleted file mode 100644 index 8a11d613a..000000000 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Help/ru.html +++ /dev/null @@ -1,16 +0,0 @@ - -

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

    -

    Вызывается из персональных настроек программы (закладка Работа с файлами) по команде Настройка основного рабочего каталога - Открыть список файлов.

    -

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

    -
    •  Файл занят для редактирования - флажок включен, если файл редактируется. -
    • Файл - формат (выводится в виде значка) и наименование файла; -
    • Размер (Кб); -
    • Дата изменения.

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

    -

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

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

    См. также:

    - \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl deleted file mode 100644 index 7031344b6..000000000 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl +++ /dev/null @@ -1,455 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2020, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ЗаполнитьСписок(); - - Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда - Элементы.СписокНаРедактирование.Видимость = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - ЗаполнитьСписокВФорме(); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок - -&НаКлиенте -Процедура СписокПриАктивизацииСтроки(Элемент) - - Если Элементы.Список.ТекущиеДанные = Неопределено Тогда - ДоступностьКоманд = Ложь; - Иначе - ДоступностьКоманд = Истина; - КонецЕсли; - - Элементы.ФормаУдалитьИзЛокальногоКэшаФайлов.Доступность = ДоступностьКоманд; - Элементы.СписокКонтекстноеМенюУдалитьИзЛокальногоКэшаФайлов.Доступность = ДоступностьКоманд; - - Элементы.ФормаЗакончитьРедактирование.Доступность = ДоступностьКоманд; - Элементы.СписокКонтекстноеМенюЗакончитьРедактирование.Доступность = ДоступностьКоманд; - - Элементы.ФормаОсвободить.Доступность = ДоступностьКоманд; - Элементы.СписокКонтекстноеМенюОсвободить.Доступность = ДоступностьКоманд; - - Элементы.ФормаОткрытьКаталогФайла.Доступность = ДоступностьКоманд; - Элементы.СписокКонтекстноеМенюОткрытьКаталогФайла.Доступность = ДоступностьКоманд; - - Элементы.ФормаОткрытьКарточку.Доступность = ДоступностьКоманд; - Элементы.СписокКонтекстноеМенюОткрытьКарточку.Доступность = ДоступностьКоманд; - -КонецПроцедуры - -&НаКлиенте -Процедура СписокПередНачаломИзменения(Элемент, Отказ) - Отказ = Истина; - ОткрытьКарточкуВыполнить(); -КонецПроцедуры - -&НаКлиенте -Процедура СписокПередУдалением(Элемент, Отказ) - Отказ = Истина; - УдалитьИзЛокальногоКэшаФайловВыполнить(); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура УдалитьИзЛокальногоКэшаФайлов(Команда) - УдалитьИзЛокальногоКэшаФайловВыполнить(); -КонецПроцедуры - -&НаКлиенте -Процедура ЗакончитьРедактирование(Команда) - - СтрокаТаблицы = Элементы.Список.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла(СтрокаТаблицы.Файл); - Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеЗавершение", ЭтотОбъект); - ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, ДанныеФайла.Ссылка, УникальныйИдентификатор); - РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьКарточку(Команда) - ОткрытьКарточкуВыполнить(); -КонецПроцедуры - -&НаКлиенте -Процедура ОсвободитьВыполнить() - - Обработчик = Новый ОписаниеОповещения("ОсвободитьПослеУстановкиРасширения", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьКаталогФайлаВыполнить() - - СтрокаТаблицы = Элементы.Список.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла(СтрокаТаблицы.Файл); - РаботаСФайламиСлужебныйКлиент.КаталогФайла(Неопределено, ДанныеФайла); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура ЗакончитьРедактированиеЗавершение(Результат, ПараметрыВыполнения) Экспорт - - ЗаполнитьСписок(); - ЗаполнитьСписокВФорме(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОсвободитьПослеУстановкиРасширения(Результат, ПараметрыВыполнения) Экспорт - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("МассивСсылок", Новый Массив); - - Для Каждого Элемент Из Элементы.Список.ВыделенныеСтроки Цикл - ДанныеСтроки = Элементы.Список.ДанныеСтроки(Элемент); - Ссылка = ДанныеСтроки.Файл; - ПараметрыВыполнения.МассивСсылок.Добавить(Ссылка); - КонецЦикла; - - ПараметрыВыполнения.Вставить("Индекс", 0); - ПараметрыВыполнения.Вставить("ВГраница", ПараметрыВыполнения.МассивСсылок.ВГраница()); - - ОсвободитьВЦикле(ПараметрыВыполнения); - -КонецПроцедуры - -&НаКлиенте -Процедура ОсвободитьВЦикле(ПараметрыВыполнения) - - ОбработчикЗавершения = Новый ОписаниеОповещения("ОсвободитьВЦиклеПродолжить", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ЗарегистрироватьОбработчикЗавершения(ПараметрыВыполнения, ОбработчикЗавершения); - - ПараметрыВызова = Новый Структура; - ПараметрыВызова.Вставить("ОбработчикРезультата", ПараметрыВыполнения); - ПараметрыВызова.Вставить("ОбъектСсылка", Неопределено); - ПараметрыВызова.Вставить("Версия", Неопределено); - ПараметрыВызова.Вставить("ХранитьВерсии", Неопределено); - ПараметрыВызова.Вставить("ФайлРедактируетТекущийПользователь", Неопределено); - ПараметрыВызова.Вставить("Редактирует", Неопределено); - ПараметрыВызова.Вставить("УникальныйИдентификатор", Неопределено); - ПараметрыВызова.Вставить("НеЗадаватьВопрос", Ложь); - - Для Индекс = ПараметрыВыполнения.Индекс По ПараметрыВыполнения.ВГраница Цикл - ПараметрыВыполнения.Индекс = Индекс; - ПараметрыВызова.Версия = ПараметрыВыполнения.МассивСсылок[Индекс]; - - РаботаСФайламиСлужебныйКлиент.ОсвободитьФайлПослеУстановкиРасширения( - Неопределено, ПараметрыВызова); - - Если ПараметрыВыполнения.АсинхронныйДиалог.Открыт = Истина Тогда - Возврат; - КонецЕсли; - КонецЦикла; - - ЗаполнитьСписок(); - ЗаполнитьСписокВФорме(); - -КонецПроцедуры - -// Параметры: -// ПараметрыВыполнения - Структура - . -&НаКлиенте -Процедура ОсвободитьВЦиклеПродолжить(Результат, ПараметрыВыполнения) Экспорт - - ПараметрыВыполнения.АсинхронныйДиалог.Открыт = Ложь; - ПараметрыВыполнения.Индекс = ПараметрыВыполнения.Индекс + 1; - ОсвободитьВЦикле(ПараметрыВыполнения); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьСписокВФорме() - - РабочийКаталогПользователя = РаботаСФайламиСлужебныйКлиент.РабочийКаталогПользователя(); - - Список.Очистить(); - - Для Каждого Строка Из СписокЗначенийФайловВРегистре Цикл - - ПолныйПуть = РабочийКаталогПользователя + Строка.Значение.ЧастичныйПуть; - Файл = Новый Файл(ПолныйПуть); - Если Файл.Существует() Тогда - НоваяСтрока = Список.Добавить(); - НоваяСтрока.ДатаИзменения = МестноеВремя(Строка.Значение.ДатаМодификацииУниверсальная); - НоваяСтрока.ИмяФайла = Строка.Значение.ПолноеНаименование; - НоваяСтрока.ИндексКартинки = Строка.Значение.ИндексКартинки; - НоваяСтрока.Размер = Формат(Строка.Значение.Размер / 1024, "ЧЦ=10; ЧН=0"); // в КБ - НоваяСтрока.Версия = Строка.Значение.Ссылка; - НоваяСтрока.Редактирует = Строка.Значение.Редактирует; - НоваяСтрока.НаРедактирование = ЗначениеЗаполнено(Строка.Значение.Редактирует); - НоваяСтрока.Файл = Строка.Значение.Файл; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура УдалитьПоСсылке(СсылкаДляУдаления) - - КоличествоЭлементов = Список.Количество(); - - Для Номер = 0 По КоличествоЭлементов - 1 Цикл - Строка = Список[Номер]; - Ссылка = Строка.Версия; - Если Ссылка = СсылкаДляУдаления Тогда - Список.Удалить(Номер); - Возврат; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьСписок() - - СписокВРегистре = СписокВРегистре(); - СписокЗначенийФайловВРегистре.Очистить(); - - Для Каждого Строка Из СписокВРегистре Цикл - СписокЗначенийФайловВРегистре.Добавить(Строка); - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура УдалитьИзЛокальногоКэшаФайловВыполнить() - - ТекстВопроса = НСтр("ru = 'Удалить выбранные файлы из рабочего каталога?'"); - Обработчик = Новый ОписаниеОповещения("УдалитьИзЛокальногоКэшаПослеОтветаНаВопрос", ЭтотОбъект); - ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет); - -КонецПроцедуры - -&НаКлиенте -Процедура УдалитьИзЛокальногоКэшаПослеОтветаНаВопрос(Ответ, ПараметрыВыполнения) Экспорт - - Если Ответ = КодВозвратаДиалога.Нет Тогда - Возврат; - КонецЕсли; - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("МассивСсылок", Новый Массив); - Для Каждого НомерЦикла Из Элементы.Список.ВыделенныеСтроки Цикл - ДанныеСтроки = Элементы.Список.ДанныеСтроки(НомерЦикла); - ПараметрыВыполнения.МассивСсылок.Добавить(ДанныеСтроки.Версия); - КонецЦикла; - - ПараметрыВыполнения.Вставить("Индекс", 0); - ПараметрыВыполнения.Вставить("ВГраница", ПараметрыВыполнения.МассивСсылок.ВГраница()); - ПараметрыВыполнения.Вставить("Ссылка", Неопределено); - ПараметрыВыполнения.Вставить("ЕстьЗанятыеФайлы", Ложь); - ПараметрыВыполнения.Вставить("ИмяКаталога", РаботаСФайламиСлужебныйКлиент.РабочийКаталогПользователя()); - - УдалитьИзЛокальногоКэшаФайловВЦикле(ПараметрыВыполнения); - -КонецПроцедуры - -&НаКлиенте -Процедура УдалитьИзЛокальногоКэшаФайловВЦикле(ПараметрыВыполнения) - - ОбработчикЗавершения = Новый ОписаниеОповещения("УдалитьИзЛокальногоКэшаФайловВЦиклеПродолжить", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ЗарегистрироватьОбработчикЗавершения(ПараметрыВыполнения, ОбработчикЗавершения); - - Для Индекс = ПараметрыВыполнения.Индекс По ПараметрыВыполнения.ВГраница Цикл - ПараметрыВыполнения.Индекс = Индекс; - ПараметрыВыполнения.Ссылка = ПараметрыВыполнения.МассивСсылок[Индекс]; - - Если ФайлЗанят(ПараметрыВыполнения.Ссылка) Тогда - Строки = Список.НайтиСтроки(Новый Структура("Версия", ПараметрыВыполнения.Ссылка)); - Строки[0].НаРедактирование = Истина; - ПараметрыВыполнения.ЕстьЗанятыеФайлы = Истина; - ПараметрыВыполнения.АсинхронныйДиалог.Открыт = Ложь; - ПараметрыВыполнения.Индекс = ПараметрыВыполнения.Индекс + 1; - Продолжить; - КонецЕсли; - - ПараметрыВыполнения.Вставить("ИмяФайлаСПутем", - РаботаСФайламиСлужебныйВызовСервера.ПолучитьПолноеИмяФайлаИзРегистра( - ПараметрыВыполнения.Ссылка, ПараметрыВыполнения.ИмяКаталога, Ложь, Ложь)); - - РаботаСФайламиСлужебныйКлиент.УдалитьФайлИзРабочегоКаталога( - ПараметрыВыполнения, ПараметрыВыполнения.Ссылка); - - Если ПараметрыВыполнения.АсинхронныйДиалог.Открыт = Истина Тогда - Возврат; - КонецЕсли; - - Если ПараметрыВыполнения.ИмяФайлаСПутем <> "" Тогда - ФайлНаДиске = Новый Файл(ПараметрыВыполнения.ИмяФайлаСПутем); - Если НЕ ФайлНаДиске.Существует() Тогда - УдалитьПоСсылке(ПараметрыВыполнения.Ссылка); - КонецЕсли; - Иначе - УдалитьПоСсылке(ПараметрыВыполнения.Ссылка); - КонецЕсли; - КонецЦикла; - - Если ПараметрыВыполнения.ЕстьЗанятыеФайлы Тогда - ПоказатьПредупреждение(, - НСтр("ru = 'Нельзя удалять из рабочего каталога файлы, - |занятые для редактирования.'")); - КонецЕсли; - - Элементы.Список.Обновить(); - -КонецПроцедуры - -// Параметры: -// ПараметрыВыполнения - Структура - . -// -&НаКлиенте -Процедура УдалитьИзЛокальногоКэшаФайловВЦиклеПродолжить(Результат, ПараметрыВыполнения) Экспорт - - // Завершение операций с файлом. - Если ПараметрыВыполнения.ИмяФайлаСПутем <> "" Тогда - ФайлНаДиске = Новый Файл(ПараметрыВыполнения.ИмяФайлаСПутем); - Если НЕ ФайлНаДиске.Существует() Тогда - УдалитьПоСсылке(ПараметрыВыполнения.Ссылка); - КонецЕсли; - Иначе - УдалитьПоСсылке(ПараметрыВыполнения.Ссылка); - КонецЕсли; - - // Продолжение цикла. - ПараметрыВыполнения.АсинхронныйДиалог.Открыт = Ложь; - ПараметрыВыполнения.Индекс = ПараметрыВыполнения.Индекс + 1; - УдалитьИзЛокальногоКэшаФайловВЦикле(ПараметрыВыполнения); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьКарточкуВыполнить() - - СтрокаТаблицы = Элементы.Список.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - ПоказатьЗначение(, СтрокаТаблицы.Файл); - -КонецПроцедуры - -&НаСервере -Функция СписокВРегистре() - - УстановитьПривилегированныйРежим(Истина); - - СписокЗначений = Новый Массив; - ТекущийПользователь = Пользователи.АвторизованныйПользователь(); - - // Для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует. - ЗапросВРегистр = Новый Запрос; - ЗапросВРегистр.УстановитьПараметр("Пользователь", ТекущийПользователь); - ЗапросВРегистр.Текст = - "ВЫБРАТЬ - | ФайлыВРабочемКаталоге.Файл КАК Ссылка, - | ФайлыВРабочемКаталоге.НаЧтение КАК НаЧтение, - | ФайлыВРабочемКаталоге.Размер КАК Размер, - | ФайлыВРабочемКаталоге.Путь КАК Путь, - | ФайлыВРабочемКаталоге.Файл.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, - | ФайлыВРабочемКаталоге.Файл.Наименование КАК ПолноеНаименование, - | ФайлыВРабочемКаталоге.Файл.ИндексКартинки КАК ИндексКартинки, - | ФайлыВРабочемКаталоге.Файл.Редактирует КАК Редактирует, - | ФайлыВРабочемКаталоге.Файл КАК Файл - |ИЗ - | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге - |ГДЕ - | ФайлыВРабочемКаталоге.Пользователь = &Пользователь - | И ФайлыВРабочемКаталоге.ВРабочемКаталогеВладельца = ЛОЖЬ"; - - РезультатЗапроса = ЗапросВРегистр.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - Выборка = РезультатЗапроса.Выбрать(); - - Пока Выборка.Следующий() Цикл - Запись = Новый Структура; - Запись.Вставить("ДатаМодификацииУниверсальная", Выборка.ДатаМодификацииУниверсальная); - Запись.Вставить("ПолноеНаименование", Выборка.ПолноеНаименование); - Запись.Вставить("ИндексКартинки", Выборка.ИндексКартинки); - Запись.Вставить("Размер", Выборка.Размер); - Запись.Вставить("Ссылка", Выборка.Ссылка); - Запись.Вставить("Редактирует", Выборка.Редактирует); - Запись.Вставить("НаЧтение", Выборка.НаЧтение); - Запись.Вставить("ЧастичныйПуть", Выборка.Путь); - // Это справочник версий файлов. - Если ОбщегоНазначения.ЕстьРеквизитОбъекта("РодительскаяВерсия", Метаданные.НайтиПоТипу(ТипЗнч(Выборка.Ссылка))) Тогда - Запись.Вставить("Файл", Выборка.Ссылка.Владелец); - Иначе - Запись.Вставить("Файл", Выборка.Ссылка); - КонецЕсли; - СписокЗначений.Добавить(Запись); - КонецЦикла; - КонецЕсли; - - Возврат СписокЗначений; - -КонецФункции - -&НаСервереБезКонтекста -Функция ФайлЗанят(Ссылка) - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Ссылка", Ссылка); - - ИмяСправочникаХранения = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).Имя; - - Если ИмяСправочникаХранения = "ВерсииФайлов" Или СтрЗаканчиваетсяНа(ИмяСправочникаХранения, "ВерсииПрисоединенныхФайлов") Тогда - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник." + ИмяСправочникаХранения + " КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.Ссылка = &Ссылка - | И ВерсииФайлов.Владелец.Редактирует <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; - Иначе - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник." + ИмяСправочникаХранения + " КАК Файлы - |ГДЕ - | Файлы.Ссылка = &Ссылка - | И Файлы.Редактирует <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; - КонецЕсли; - - Возврат НЕ Запрос.Выполнить().Пустой(); - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Help/ru.html index 06b01529b..b60272aef 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Help/ru.html @@ -1,15 +1,19 @@

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

    -

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

    +

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

    Сохранение версии

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

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

    См. также:

    \ No newline at end of file + +
  • Работа с формами.
  • \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form index 24b76cdf3..1b63bc4d7 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form @@ -331,6 +331,22 @@ true + + КакОткрыватьСохраненныйВариант + 3 + + Number + + 10 + + + + true + + + true + + ОткрытьФайл diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl index 3ab72300b..4f3efa8e4 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl @@ -16,6 +16,12 @@ ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; КонецЕсли; + ВариантОткрытияФайла = РаботаСФайлами.НастройкиРаботыСФайлами().ВариантОткрытияФайла; + Если ВариантОткрытияФайла = "Редактировать" Тогда + КакОткрывать = 1; + КонецЕсли; + КакОткрыватьСохраненныйВариант = КакОткрывать; + КонецПроцедуры #КонецОбласти @@ -25,9 +31,16 @@ &НаКлиенте Процедура ОткрытьФайл(Команда) + Если КакОткрыватьСохраненныйВариант <> КакОткрывать Тогда + РежимОткрытия = ?(КакОткрывать = 1, "Редактировать", "Открыть"); + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + "НастройкиОткрытияФайлов", "ВариантОткрытияФайла", РежимОткрытия,,, Истина); + КонецЕсли; + Если БольшеНеСпрашивать = Истина Тогда ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( "НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла", Ложь,,, Истина); + ОбновитьПовторноИспользуемыеЗначения(); КонецЕсли; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form index 5b32cecb3..631e93623 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form @@ -385,45 +385,6 @@ <footerHorizontalAlign>Left</footerHorizontalAlign> <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> </items> - <items xsi:type="form:FormField"> - <name>УдалитьФайлыИзОсновногоКаталога</name> - <id>65</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>УдалитьФайлыИзОсновногоКаталога</segments> - </dataPath> - <titleLocation>Right</titleLocation> - <toolTipRepresentation>Button</toolTipRepresentation> - <extendedTooltip> - <name>УдалитьФайлыИзОсновногоКаталогаРасширеннаяПодсказка</name> - <id>67</id> - <title> - <key>ru</key> - <value>Если установлен флажок, то после помещения файла в программу его копия удаляется на компьютере. Используйте эту настройку для экономии места на жестком диске или в целях повышения безопасности.</value> - - Label - true - true - - Left - -
    - - УдалитьФайлыИзОсновногоКаталогаКонтекстноеМеню - 66 - true - - CheckBoxField - Enter - true - Left - true - - ОсновнаяКоманднаяПанель 1 @@ -737,23 +698,6 @@ true - - УдалитьФайлыИзОсновногоКаталога - - <key>ru</key> - <value>Удалить копии файлов на компьютере</value> - - 15 - - Boolean - - - true - - - true - - ЗакончитьРедактирование diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl index 072d714d2..6474af4ed 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl @@ -22,10 +22,6 @@ Элементы.ХранитьВерсии.Видимость = ВозможностьСоздаватьВерсииФайлов; - ПерсональныеНастройкиРаботыСФайлами = РаботаСФайлами.НастройкиРаботыСФайлами(); - Элементы.УдалитьФайлыИзОсновногоКаталога.Видимость = ПерсональныеНастройкиРаботыСФайлами.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов; - УдалитьФайлыИзОсновногоКаталога = ПерсональныеНастройкиРаботыСФайлами.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования; - КонецПроцедуры &НаКлиенте @@ -67,8 +63,6 @@ ПараметрыОбновленияФайлов.Вставить("Редактирует", Редактирует); ПараметрыОбновленияФайлов.Вставить("КомментарийКВерсии", Комментарий); ПараметрыОбновленияФайлов.Вставить("ПоказыватьОповещение", Ложь); - ПараметрыОбновленияФайлов.Вставить("УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования2", УдалитьФайлыИзОсновногоКаталога); - РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеПоСсылкамСОповещением(ПараметрыОбновленияФайлов); Закрыть(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form index 99da8d0a1..f78554589 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form @@ -9,7 +9,7 @@ <id>23</id> <title> <key>ru</key> - <value>Каталог на диске</value> + <value>Папка с файлами</value> true true @@ -672,7 +672,7 @@ 1 ru - Загрузить папку + Загрузить папку с файлами в программу true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl index 918dcf5f4..b598c23a9 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl @@ -77,7 +77,7 @@ Если ПустаяСтрока(Каталог) Тогда ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Не выбран каталог для импорта.'"), , "Каталог"); + НСтр("ru = 'Не выбрана папка для импорта.'"), , "Каталог"); Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form index f586f244e..11b804a8e 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form @@ -466,7 +466,7 @@ 1 ru - Сохранить папку + Сохранить папку с файлами на компьютер true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl index 26fb1ab45..4a93766cf 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl @@ -163,9 +163,9 @@ | Файлы.Расширение КАК Расширение, | Файлы.Размер КАК Размер, | Файлы.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, - | Файлы.Ссылка, - | Файлы.ПометкаУдаления, - | Файлы.Зашифрован + | Файлы.Ссылка КАК Ссылка, + | Файлы.ПометкаУдаления КАК ПометкаУдаления, + | Файлы.Зашифрован КАК Зашифрован |ИЗ | Справочник.Файлы КАК Файлы |ГДЕ @@ -212,14 +212,17 @@ // Рекурсивная функция, которая собственно и выгружает файлы на локальный диск. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Структура, Неопределено - Описание процедуры, принимающей результат +// ОбработчикРезультата - ОписаниеОповещения +// - Структура +// - Неопределено - описание процедуры, принимающей результат // работы метода. -// ТаблицаФайлов - ДанныеФормыДерево, ДанныеФормыЭлементДерева - дерево значений с выгружаемыми файлами. +// ТаблицаФайлов - ДанныеФормыДерево +// - ДанныеФормыЭлементДерева - дерево значений с выгружаемыми файлами. // БазовыйКаталогСохранения - Строка - строка с именем папки, в которую сохраняются файлы. // В ней воссоздается структура папок (как в дереве файлов) // при необходимости. // РодительскаяПапка - СправочникСсылка.ПапкиФайлов - что сохраняем. -// ОбщиеПараметры - Структура - +// ОбщиеПараметры - Структура: // * ДляВсехФайлов - Булево - // Истина: пользователь выбрал действие при перезаписи файла и // установил флажок "Для всех". Больше вопросов не задаем. @@ -234,7 +237,7 @@ // .Прервать - прервать выгрузку. // // Возвращаемое значение: -// Структура - Результат. +// Структура: // * Успех - Булево - Истина - можно продолжать выгрузку / выгрузка завершена успешно. // Ложь - действие завершено с ошибками / выгрузка завершена с ошибками. // @@ -248,6 +251,26 @@ ОбщиеПараметры.Вставить("ЕщеНеВстретилиВыгружаемуюПапку", Истина); КонецЕсли; + ПараметрыВыполнения = ПараметрыВыполнения( + ОбработчикРезультата, + ТаблицаФайлов, + БазовыйКаталогСохранения, + РодительскаяПапка, + ОбщиеПараметры); + + ОбработчикЗавершения = Новый ОписаниеОповещения("ОбойтиДеревоФайлов2", ЭтотОбъект); + РаботаСФайламиСлужебныйКлиент.ЗарегистрироватьОбработчикЗавершения(ПараметрыВыполнения, ОбработчикЗавершения); + + // Переменные. + ПараметрыВыполнения.Вставить("ЗаписьФайла", Неопределено); + + // Запуск цикла. + ОбойтиДеревоФайловЗапускЦикла(ПараметрыВыполнения); +КонецПроцедуры + + +&НаКлиенте +Функция ПараметрыВыполнения(Знач ОбработчикРезультата, Знач ТаблицаФайлов, Знач БазовыйКаталогСохранения, Знач РодительскаяПапка, Знач ОбщиеПараметры) ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); ПараметрыВыполнения.Вставить("ТаблицаФайлов", ТаблицаФайлов); @@ -263,16 +286,9 @@ ПараметрыВыполнения.Вставить("ВГраница", ПараметрыВыполнения.Элементы.Количество()-1); ПараметрыВыполнения.Вставить("Индекс", -1); ПараметрыВыполнения.Вставить("ТребуетсяЗапускЦикла", Истина); - - ОбработчикЗавершения = Новый ОписаниеОповещения("ОбойтиДеревоФайлов2", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ЗарегистрироватьОбработчикЗавершения(ПараметрыВыполнения, ОбработчикЗавершения); - - // Переменные. - ПараметрыВыполнения.Вставить("ЗаписьФайла", Неопределено); - - // Запуск цикла. - ОбойтиДеревоФайловЗапускЦикла(ПараметрыВыполнения); -КонецПроцедуры + Возврат ПараметрыВыполнения +КонецФункции + &НаКлиенте Процедура ОбойтиДеревоФайловЗапускЦикла(ПараметрыВыполнения) @@ -649,7 +665,7 @@ Попытка ПолучаемыеФайлы = Новый Массив; ПередаваемыйФайл = Новый ОписаниеПередаваемогоФайла(); - ПолученныеФайлы = Новый Массив; + ПолученныеФайлы = Новый Массив;// Массив Из Файл ПередаваемыйФайл.Хранение = АдресФайлаДляОткрытия; ПередаваемыйФайл.Имя = ПараметрыВыполнения.ПолноеИмяФайла; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo b/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo index 609117449..adb18d0e1 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo +++ b/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo @@ -199,21 +199,6 @@ PersonalComputer MobileDevice - - ФайлыВОсновномРабочемКаталоге - - ru - Файлы в основном рабочем каталоге - - true - - - ru - - - PersonalComputer - MobileDevice - ФормаВыбораРежимаОткрытия diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index c5cbc7547..300e2ee99 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -4816,6 +4816,12 @@ + + ТолькоПросмотр + + Boolean + + diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index 3ea00398f..96c2dd814 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -127,7 +127,6 @@ КонецЕсли; Страна = ОсновнаяСтрана; - НаселенныйПунктДетально.Country = Строка(Страна); ИначеЕсли МеждународныйФорматАдреса Тогда @@ -142,6 +141,7 @@ Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаДругойАдрес; КонецЕсли; + НаселенныйПунктДетально.Country = НаименованиеСтраны(Страна, МеждународныйФорматАдреса); Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Элементы.ГруппаИнформационныеСообщения.Видимость = Ложь; @@ -152,7 +152,7 @@ элементы.ФормаОтмена.Видимость = Ложь; КонецЕсли; - ОпределитьОтображениеЭлементовНаФорме(); + ОпределитьОтображениеЭлементовНаФорме(Параметры.ТолькоПросмотр); Если Не ЕстьПравоЗагружатьКлассификатор Тогда Элементы.ИнформацияОЗагрузкеАдресныеСведений.Заголовок = НСтр("ru = 'Для автоподбора и проверки адресов обратитесь к администратору для загрузки адресных сведений.'"); @@ -317,9 +317,9 @@ КонецПроцедуры // Параметры: -// Результат - Структура - где: -// * Индекс - Строка - -// ДополнительныеПараметры - Произвольный - +// Результат - Структура: +// * Индекс - Строка +// ДополнительныеПараметры - Произвольный // &НаКлиенте Процедура ПослеВыбораАдресаПоИндексу(Результат, ДополнительныеПараметры) Экспорт @@ -1045,7 +1045,9 @@ НаселенныйПунктДетально.Value = ПредставлениеАдреса; НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); НаселенныйПунктДетально.Comment = Комментарий; - НаселенныйПунктДетально.Country = Строка(Страна); + + НаселенныйПунктДетально.Country = НаименованиеСтраны(Страна, + ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).МеждународныйФорматАдреса); Если Элементы.СтранаВСвободнойФорме.Доступность Тогда Элементы.СтранаВСвободнойФорме.Видимость = Не ВидКонтактнойИнформации.ТолькоНациональныйАдрес; @@ -1148,7 +1150,7 @@ КонецПроцедуры // Параметры: -// Команда - КомандаФормы - +// Команда - КомандаФормы // &НаКлиенте Процедура Подключаемый_ДобавитьСтроениеИлиПомещение(Команда) @@ -1173,11 +1175,11 @@ Если НайденныеСтроки[0].Тип = "Помещение" Тогда Значение = ?(НайденныеСтроки[0].Значение <> НСтр("ru = 'Другое'"), НайденныеСтроки[0].Значение, ""); - Apartments = НаселенныйПунктДетально.Apartments; // Массив - Apartments.Добавить(ЗначениеСтроенияИлиПомещения(Значение, ЭтотОбъект[ИмяТекущего])); + ПомещенияАдреса = НаселенныйПунктДетально.Apartments; // Массив + ПомещенияАдреса.Добавить(ЗначениеСтроенияИлиПомещения(Значение, ЭтотОбъект[ИмяТекущего])); Иначе - Buildings = НаселенныйПунктДетально.Buildings; // Массив - Buildings.Добавить(ЗначениеСтроенияИлиПомещения(НайденныеСтроки[0].Значение, ЭтотОбъект[ИмяТекущего])); + ЗданияАдреса = НаселенныйПунктДетально.Buildings; // Массив + ЗданияАдреса.Добавить(ЗначениеСтроенияИлиПомещения(НайденныеСтроки[0].Значение, ЭтотОбъект[ИмяТекущего])); КонецЕсли; ОбновитьМенюДобавленияСтроенийИПомещений(); @@ -1409,10 +1411,10 @@ КонецПроцедуры // Возвращаемое значение: -// Структура - Описание: -// * Наименование - Строка - -// * Сокращение - Строка - -// * Представление - Строка - +// Структура: +// * Наименование - Строка +// * Сокращение - Строка +// * Представление - Строка // &НаКлиенте Функция ОписаниеСведенийАдреса() @@ -1474,9 +1476,12 @@ &НаКлиенте Процедура УдалитьСтрануИзПредставления() + НаименованиеСтраны = ВРег(НаименованиеСтраны(Страна, + ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).МеждународныйФорматАдреса)); + ПредставлениеАдреса = СокрЛП(ПредставлениеАдреса); - Если СтрНачинаетсяС(ВРег(ПредставлениеАдреса), ВРег(Страна)) Тогда - Позиция = СтрДлина(Страна) + 1; + Если СтрНачинаетсяС(ВРег(ПредставлениеАдреса), НаименованиеСтраны) Тогда + Позиция = СтрДлина(НаименованиеСтраны) + 1; Позиция = ?(Сред(ПредставлениеАдреса, Позиция, 1) = ",", Позиция + 1, Позиция); ПредставлениеАдреса = СокрЛП(Сред(ПредставлениеАдреса, Позиция)); КонецЕсли; @@ -1819,7 +1824,7 @@ Значение, ВидКИ); КонецЕсли; - Результат.ДанныеВыбора.Вставить("АдресВВидеГиперссылки", Контекст.ВидКонтактнойИнформации.ВидРедактирования = "Диалог"); + Результат.ДанныеВыбора.Вставить("ВВидеГиперссылки", Контекст.ВидКонтактнойИнформации.ВидРедактирования = "Диалог"); // Подавляем перенос строк в возвращаемом отдельно представлении. Результат.ДанныеВыбора.Представление = СокрЛП(СтрЗаменить(Результат.ДанныеВыбора.Представление, Символы.ПС, " ")); @@ -1932,9 +1937,9 @@ Если МеждународныйФорматАдреса Тогда НаселенныйПунктДетально.Country = ?(ЗначениеЗаполнено(СведенияОСтране.МеждународноеНаименование), - СведенияОСтране.МеждународноеНаименование, СведенияОСтране.Наименование); + СведенияОСтране.МеждународноеНаименование, ДанныеСтраныМира(СведенияОСтране).Наименование); Иначе - НаселенныйПунктДетально.Country = СведенияОСтране.Наименование; + НаселенныйПунктДетально.Country = ДанныеСтраныМира(СведенияОСтране).Наименование; КонецЕсли; Если ЭтоНациональныйАдрес Тогда @@ -2018,7 +2023,7 @@ КонецПроцедуры &НаСервере -Процедура ОпределитьОтображениеЭлементовНаФорме() +Процедура ОпределитьОтображениеЭлементовНаФорме(ТолькоПросмотр) // Разовые настройки отображения формы. Если Не ЕстьЗагруженныйКлассификатор Тогда @@ -2045,6 +2050,12 @@ КонецЕсли; + Если ТолькоПросмотр Тогда + Элементы.ГруппаКомандаДобавить.Видимость = Ложь; + Элементы.ДобавитьКомментарий.Доступность = Ложь; + Элементы.ФормаОчиститьАдрес.Доступность = Ложь; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -2510,7 +2521,7 @@ КонецФункции // Параметры: -// Элемент - ПолеФормы - +// Элемент - ПолеФормы // &НаКлиенте Процедура Подключаемый_ТипСтроенияПриИзменении(Элемент) @@ -2549,7 +2560,7 @@ КонецПроцедуры // Параметры: -// Элемент - ПолеФормы - +// Элемент - ПолеФормы // &НаКлиенте Процедура Подключаемый_СтроениеПриИзменении(Элемент) @@ -2588,7 +2599,7 @@ КонецПроцедуры // Параметры: -// Элемент - ПолеФормы - +// Элемент - ПолеФормы // &НаКлиенте Процедура Подключаемый_ТипПомещенияПриИзменении(Элемент) @@ -2648,7 +2659,7 @@ КонецПроцедуры // Параметры: -// Элемент - ПолеФормы - +// Элемент - ПолеФормы // &НаКлиенте Процедура Подключаемый_ПомещениеПриИзменении(Элемент) @@ -2769,6 +2780,18 @@ Элементы.ГруппаОписаниеНедоступностиСервера.ТекущаяСтраница = Элементы.СообщениеОбОшибке; Элементы.ГруппаОписаниеНедоступностиСервера.Видимость = Истина; Элементы.СообщениеОбОшибке.Видимость = Истина; + + Для Каждого Элемент Из СписокОшибок Цикл + Если Элемент.ВариантАдреса.Количество() > 0 Тогда + ДополнительныеПараметры = Новый Структура("НовыйАдрес", Элемент.ВариантАдреса[0]); + Оповещение = Новый ОписаниеОповещения("ПослеВопросаПроЗаменуИсторическогоАдреса", ЭтотОбъект, ДополнительныеПараметры); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 + |Обновить адрес?'"), Элемент.ТекстОшибки); + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Возврат; + КонецЕсли; + КонецЦикла; + // Сообщаем список с привязкой к полям. Для Каждого Элемент Из СписокОшибок Цикл ОбщегоНазначенияКлиент.СообщитьПользователю( @@ -2777,6 +2800,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеВопросаПроЗаменуИсторическогоАдреса(Результат, ДополнительныеПараметры) Экспорт + Если Результат = КодВозвратаДиалога.Да Тогда + ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, ДополнительныеПараметры.НовыйАдрес); + УстановитьЗначениеРеквизитовПоКонтактнойИнформации(НаселенныйПунктДетально); + ОбновитьПредставлениеАдреса(); + Модифицированность = Истина; + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ПослеВопросОбОбновление(Результат, ДополнительныеПараметры) Экспорт @@ -2792,19 +2825,7 @@ &НаКлиенте Процедура ОчиститьАдресКлиент() - Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл - - Если СтрСравнить(ЭлементАдреса.Ключ, "type") = 0 Тогда - Продолжить; - ИначеЕсли СтрСравнить(ЭлементАдреса.Ключ, "buildings") = 0 ИЛИ СтрСравнить(ЭлементАдреса.Ключ, "apartments") = 0 Тогда - НаселенныйПунктДетально[ЭлементАдреса.Ключ] = Новый Массив; - Иначе - НаселенныйПунктДетально[ЭлементАдреса.Ключ] = ""; - КонецЕсли; - - КонецЦикла; - - НаселенныйПунктДетально.addressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); + РаботаСАдресамиКлиент.ОчиститьАдрес(НаселенныйПунктДетально); ОтобразитьДополнительныеЗдания(); КонецПроцедуры @@ -3125,7 +3146,9 @@ // Возвращает первый элемент из списка. // // Параметры: -// СписокДанных - СписокЗначений, Массив, ПолеФормы. +// СписокДанных - СписокЗначений +// - Массив +// - ПолеФормы. // // Возвращаемое значение: // Произвольный - первый элемент. @@ -3268,8 +3291,9 @@ // Предлагает загрузить адресный классификатор. // // Параметры: -// Текст - Строка - Дополнительный текст предложения. -// Регион - Число, Строка - Код или название региона для загрузки. +// Текст - Строка - дополнительный текст предложения. +// Регион - Число +// - Строка - код или название региона для загрузки. // &НаКлиенте Процедура ПредложениеЗагрузкиКлассификатора(Знач Текст = "", Знач ДанныеОбАдресе = Неопределено) @@ -3429,7 +3453,7 @@ XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(ЗначенияПолей, Параметры.Представление, ); Если Параметры.Свойство("Страна") И ЗначениеЗаполнено(Параметры.Страна) Тогда Если ТипЗнч(Параметры.Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда - XDTOКонтактная.Состав.Страна = Параметры.Страна.Наименование; + XDTOКонтактная.Состав.Страна = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.Страна, "Наименование"); Иначе XDTOКонтактная.Состав.Страна = Строка(Параметры.Страна); КонецЕсли; @@ -3896,4 +3920,30 @@ Функция ОписаниеВидаКонтактнойИнформации(Форма) Возврат Форма.ВидКонтактнойИнформации; КонецФункции + +// Параметры: +// Страна - Структура +// Возвращаемое значение: +// см. УправлениеКонтактнойИнформацией.ДанныеСтраныМира +// +&НаКлиентеНаСервереБезКонтекста +Функция ДанныеСтраныМира(Страна) + Возврат Страна; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НаименованиеСтраны(Страна, МеждународныйФорматАдреса) + + СведенияОСтране = СведенияОСтране(Страна); + + НаименованиеСтраны = СведенияОСтране.Наименование; + Если МеждународныйФорматАдреса Тогда + Если ЗначениеЗаполнено(СведенияОСтране.МеждународноеНаименование) Тогда + НаименованиеСтраны = СведенияОСтране.МеждународноеНаименование; + КонецЕсли; + КонецЕсли; + Возврат НаименованиеСтраны; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl index 4b6efee91..22faaed3e 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl @@ -166,6 +166,7 @@ КонецЕсли; Результат.Муниципальный = РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(ТипАдреса); + Результат.ЗагруженныеДанные = Уровень = 1; ОповеститьОВыборе(Результат); @@ -184,6 +185,7 @@ Результат.Вставить("Муниципальный", Неопределено); Результат.Вставить("ПредлагатьЗагрузкуКлассификатора", Ложь); Результат.Вставить("Родитель", Родитель); + Результат.Вставить("ЗагруженныеДанные", Ложь); Возврат Результат; КонецФункции diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl index b6ae1f269..978f2c60f 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl @@ -189,7 +189,9 @@ &НаКлиенте Процедура СубъектРФОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); + КонецПроцедуры &НаКлиенте @@ -489,18 +491,22 @@ КонецЕсли; СведенияОбАдресе = Новый Структура(); - СведенияОбАдресе.Вставить("Муниципальный", РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(ТипАдреса)); + СведенияОбАдресе.Вставить("ЗагруженныеДанные", Неопределено); + СведенияОбАдресе.Вставить("Идентификатор", Неопределено); + СведенияОбАдресе.Вставить("Муниципальный", РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(ТипАдреса)); + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + Если ВыбранноеЗначение.Отказ Или ПустаяСтрока(ВыбранноеЗначение.Идентификатор) Тогда Возврат; КонецЕсли; - Идентификатор = ВыбранноеЗначение.Идентификатор; - + Идентификатор = ВыбранноеЗначение.Идентификатор; + СведенияОбАдресе.ЗагруженныеДанные = ВыбранноеЗначение.ЗагруженныеДанные; Иначе Идентификатор = ВыбранноеЗначение; КонецЕсли; - СведенияОбАдресе.Вставить("Идентификатор", Идентификатор); + СведенияОбАдресе.Идентификатор = Идентификатор; СтандартнаяОбработка = Ложь; НаселенныйПунктДетально = НаселенныйПунктДетальноПоИдентификатору(СведенияОбАдресе); @@ -518,8 +524,9 @@ // Предлагает загрузить адресный классификатор. // // Параметры: -// Текст - Строка - Дополнительный текст предложения. -// Регион - Число, Строка - Код или название региона для загрузки. +// Текст - Строка - дополнительный текст предложения. +// Регион - Число +// - Строка - код или название региона для загрузки. // &НаКлиенте Процедура ПредложениеЗагрузкиКлассификатора(Знач Текст = "", Знач Регион = Неопределено) diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Form.form index a5e369e80..ffb13792b 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Form.form @@ -268,6 +268,78 @@ Auto + + ГруппаИсправлениеАдресов + 41 + + АвтоматическиИсправлятьУстаревшиеАдреса + 38 + true + true + + true + + + ИсправлятьУстаревшиеАдреса + + Right + + ru + Выполняет по расписанию проверку и исправление устаревших адресов + + Button + + АвтоматическиИсправлятьУстаревшиеАдресаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + АвтоматическиИсправлятьУстаревшиеАдресаКонтекстноеМеню + 39 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Исправление адресов</value> + + + ГруппаИсправлениеАдресовРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto + + ГруппаКоманднаяПанель 30 @@ -479,6 +551,23 @@ true + + ИсправлятьУстаревшиеАдреса + + <key>ru</key> + <value>Автоматически исправлять устаревшие адреса</value> + + 4 + + Boolean + + + true + + + true + + ОК diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl index 833273fe1..08c581a59 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl @@ -67,6 +67,7 @@ Результат.Вставить("ПроверятьКорректность"); Результат.Вставить("СкрыватьНеактуальныеАдреса"); Результат.Вставить("УказыватьОКТМО"); + Результат.Вставить("ИсправлятьУстаревшиеАдреса"); Возврат Результат; КонецФункции diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl index a1de58810..4956f5b79 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl @@ -36,7 +36,8 @@ // Возвращает имя формы для редактирования типа контактной информации. // // Параметры: -// ВидИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации, СправочникСсылка.ВидыКонтактнойИнформации - +// ВидИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации +// - СправочникСсылка.ВидыКонтактнойИнформации - // запрашиваемый тип. // // Возвращаемое значение: @@ -83,13 +84,13 @@ // Проверка доступности поставщика - локальной базы или сервиса. Запрос версии. // // Возвращаемое значение: -// Структура - описание состояния. -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// Структура: +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Данные - Строка - Описание версии поставщика. +// * Данные - Строка - описание версии поставщика. // Функция ВерсияПоставщикаДанныхКлассификатора() @@ -115,7 +116,8 @@ // Возвращает наименование региона по его коду. // // Параметры: -// Код - Строка, Число - код региона. +// Код - Строка +// - Число - код региона. // // Возвращаемое значение: // Строка - полное наименование региона с сокращением. @@ -137,9 +139,9 @@ // классификатора. // // Параметры: -// Идентификатор - УникальныйИдентификатор - Идентификатор объекта. Если указан, то структура +// Идентификатор - УникальныйИдентификатор - идентификатор объекта. Если указан, то структура // заполняется данными для этого объекта. -// ВариантКлассификатора - Строка - Требуемый вид классификатора. +// ВариантКлассификатора - Строка - требуемый вид классификатора. // // Возвращаемое значение: // Структура - описание населенного пункта. @@ -156,7 +158,6 @@ Возврат Неопределено; КонецЕсли; - // Заполняем данные по идентификатору. МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); АдресныеСведения = МодульАдресныйКлассификаторСлужебный.АктуальныеАдресныеСведения(СведенияОбАдресномОбъекте); Если НЕ ЗначениеЗаполнено(АдресныеСведения.Данные) ИЛИ АдресныеСведения.Отказ = Истина Тогда @@ -244,25 +245,26 @@ // Возвращает данные классификатора по почтовому индексу. // // Параметры: -// Индекс - Строка, Число - почтовый индекс, для которого необходимо получать данные. +// Индекс - Строка +// - Число - почтовый индекс, для которого необходимо получать данные. // -// ДополнительныеПараметры - Структура - Описывает настройки поиска. Состоит из необязательных полей: -// * СкрыватьНеактуальные - Булево - Флаг исключения из выборки неактуальных адресов. По умолчанию Ложь. +// ДополнительныеПараметры - Структура - описывает настройки поиска. Состоит из необязательных полей: +// * СкрыватьНеактуальные - Булево - флаг исключения из выборки неактуальных адресов. По умолчанию Ложь. // * ФорматАдреса - Строка - тип используемого классификатора. // // Возвращаемое значение: // Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * ОбщаяЧастьПредставления - Строка - Общая часть представлений адреса. -// * Данные - ТаблицаЗначений - Содержит данные для выбора. Колонки: -// ** Неактуален - Булево - Флаг неактуальности строки данных. -// ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска +// * ОбщаяЧастьПредставления - Строка - общая часть представлений адреса. +// * Данные - ТаблицаЗначений - содержит данные для выбора. Колонки: +// ** Неактуален - Булево - флаг неактуальности строки данных. +// ** Идентификатор - УникальныйИдентификатор - код классификатора для поиска // вариантов по индексу. -// ** Представление - Строка - Представление варианта. +// ** Представление - Строка - представление варианта. // Функция АдресаКлассификатораПоПочтовомуИндексу(Знач Индекс, Знач ДополнительныеПараметры) Экспорт @@ -285,32 +287,32 @@ // Возвращает данные классификатора поля выбора по уровню. // // Параметры: -// Родитель - УникальныйИдентификатор - Родительский объект. -// Уровень - Число - Требуемый уровень данных. 1-7, 90, 91 - адресные объекты, -1 +// Родитель - УникальныйИдентификатор - родительский объект. +// Уровень - Число - требуемый уровень данных. 1-7, 90, 91 - адресные объекты, -1 // - ориентиры. -// ДополнительныеПараметры - Структура - Описание настройке поиска. Поля: -// * СкрыватьНеактуальные - Булево - Флаг исключения из выборки неактуальных адресов. По умолчанию +// ДополнительныеПараметры - Структура - описание настройке поиска. Поля: +// * СкрыватьНеактуальные - Булево - флаг исключения из выборки неактуальных адресов. По умолчанию // Ложь. // * ФорматАдреса - Строка - тип используемого классификатора. // -// * РазмерПорции - Число - Необязательный размер порции возвращаемых данных. Если не указано +// * РазмерПорции - Число - необязательный размер порции возвращаемых данных. Если не указано // или 0, то возвращает все элементы. -// * ПерваяЗапись - УникальныйИдентификатор - Элемент, с которого начинается порция данных. Сам элемент не +// * ПерваяЗапись - УникальныйИдентификатор - элемент, с которого начинается порция данных. Сам элемент не // входит в выборку. -// * Сортировка - Строка - Направление сортировки для порции. +// * Сортировка - Строка - направление сортировки для порции. // // Возвращаемое значение: // Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Заголовок - Строка - Строка с предложением выбора. -// * Данные - ТаблицаЗначений - Содержит данные для выбора. Колонки: -// ** Неактуален - Булево - Флаг неактуальности строки данных. -// ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска вариантов по индексу. -// ** Представление - Строка - Представление варианта. +// * Заголовок - Строка - строка с предложением выбора. +// * Данные - ТаблицаЗначений - содержит данные для выбора. Колонки: +// ** Неактуален - Булево - флаг неактуальности строки данных. +// ** Идентификатор - УникальныйИдентификатор - код классификатора для поиска вариантов по индексу. +// ** Представление - Строка - представление варианта. // Функция АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ТипАдреса, ДополнительныеПараметры) Экспорт @@ -331,18 +333,18 @@ // // Параметры: // Текст - Строка - текст автоподбора. -// ДополнительныеПараметры - Структура - Описывает настройки поиска. Состоит из необязательных полей: -// * СкрыватьНеактуальные - Булево - Флаг исключения из выборки неактуальных адресов. По умолчанию +// ДополнительныеПараметры - Структура - описывает настройки поиска. Состоит из необязательных полей: +// * СкрыватьНеактуальные - Булево - флаг исключения из выборки неактуальных адресов. По умолчанию // Ложь. // * ФорматАдреса - Строка - тип используемого классификатора. // // Возвращаемое значение: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * ОбщаяЧастьПредставления - Строка - Общая часть представлений адреса. +// * ОбщаяЧастьПредставления - Строка - общая часть представлений адреса. // * Данные - СписокЗначений - результат для автоподбора. // Функция СписокАвтоподбораНаселенногоПункта(Текст, ДополнительныеПараметры) Экспорт @@ -364,16 +366,16 @@ // по иерархическому представлению младший-старший. // // Параметры: -// Текст - Строка - Текст автоподбора. -// ПараметрыАвтоподбора - Структура - Описывает настройки поиска. Состоит из необязательных полей: -// * Идентификатор - УникальныйИдентификатор - Родительский адресный объект. -// * ТипАдреса - Строка - Тип используемого адреса. +// Текст - Строка - текст автоподбора. +// ПараметрыАвтоподбора - Структура - описывает настройки поиска. Состоит из необязательных полей: +// * Идентификатор - УникальныйИдентификатор - родительский адресный объект. +// * ТипАдреса - Строка - тип используемого адреса. // // Возвращаемое значение: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * Отказ - Булево - поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. // * Данные - СписокЗначений - результат для автоподбора. // @@ -396,8 +398,8 @@ // Возвращает список значение содержащий номера домов для автоподбора. // // Параметры: -// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Населенный пункт или улица. -// СтрокаПоиска - Строка - Текст автоподбора. +// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - населенный пункт или улица. +// СтрокаПоиска - Строка - текст автоподбора. // Возвращаемое значение: // СписокЗначений - результат для автоподбора. // @@ -419,11 +421,11 @@ // Возвращает список домов по идентификатору адресного объекта, поиск по подобию. // // Параметры: -// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Родительский объект. -// СтрокаПоиска - Строка - Текст, отбора в списке домов. +// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - родительский объект. +// СтрокаПоиска - Строка - текст, отбора в списке домов. // // Возвращаемое значение: -// ТаблицаЗначений - найденные варианты. +// см. АдресныйКлассификаторСлужебный.КонструкторСпискаДомов // Функция СписокДомов(ИдентификаторАдресногоОбъекта, СтрокаПоиска = "", ПорцияПриПоиске = 20) Экспорт @@ -593,8 +595,10 @@ // Представление с приоритетами. Если Не ПустаяСтрока(Представление) Тогда Результат.Представление = Представление; - Иначе + ИначеЕсли ЗначениеЗаполнено(ПолеПредставления) Тогда Результат.Представление = ПолеПредставления; + Иначе + Результат.Представление = РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(Результат, Истина, ) КонецЕсли; Адрес.Состав = ?(АдресРоссийский, НациональныйАдрес, Результат.Представление); @@ -645,8 +649,8 @@ Функция СформироватьАдресПоПредставлению(Представление) Адрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(Представление, Перечисления.ТипыКонтактнойИнформации.Адрес); - XML = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(Адрес, Представление, Перечисления.ТипыКонтактнойИнформации.Адрес); - Возврат УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(XML, Представление, Перечисления.ТипыКонтактнойИнформации.Адрес); + АдресВXML = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(Адрес, Представление, Перечисления.ТипыКонтактнойИнформации.Адрес); + Возврат УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(АдресВXML, Представление, Перечисления.ТипыКонтактнойИнформации.Адрес); КонецФункции @@ -702,7 +706,7 @@ // Возвращает извлеченный XDTO российского адреса или Неопределено для адреса иностранного. // // Параметры: -// ОбъектИнформации - ОбъектXDTO - Контактная информация или XDTO адреса. +// ОбъектИнформации - ОбъектXDTO - контактная информация или XDTO адреса. // // Возвращаемое значение: // ОбъектXDTO - российский адрес. @@ -736,7 +740,7 @@ // Читает и устанавливает почтовый индекс адреса. // // Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// XDTOАдрес - ОбъектXDTO - контактная информация или XDTO адреса. // НовоеЗначение - Строка - устанавливаемое значение. // // Возвращаемое значение: @@ -763,7 +767,8 @@ ЗаписьИндекса = АдресРФ.Получить(РаботаСАдресами.XPathПочтовогоИндекса()); Если ЗаписьИндекса = Неопределено Тогда - ЗаписьИндекса = АдресРФ.ДопАдрЭл.Добавить(ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); + ДопАдрЭл = АдресРФ.ДопАдрЭл; // СписокXDTO + ЗаписьИндекса = ДопАдрЭл.Добавить(ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); ЗаписьИндекса.ТипАдрЭл = КодИндекса; КонецЕсли; @@ -774,7 +779,7 @@ // Читает и устанавливает район адреса. // // Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// XDTOАдрес - ОбъектXDTO - контактная информация или XDTO адреса. // НовоеЗначение - Строка - устанавливаемое значение. // // Возвращаемое значение: @@ -838,11 +843,12 @@ // Читает дополнительные элемент адреса по его пути. // // Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. -// XPathЭлемента - Строка - Путь к элементу. +// XDTOАдрес - ОбъектXDTO - контактная информация или XDTO адреса. +// XPathЭлемента - Строка - путь к элементу. // // Возвращаемое значение: // Строка - значение элемента. +// Функция ДополнительныйЭлементАдреса(XDTOАдрес, XPathЭлемента) АдресРФ = НациональныйАдрес(XDTOАдрес); @@ -864,17 +870,17 @@ ВариантыДополнительногоЭлементаАдреса = ВариантыДополнительногоЭлементаАдреса(); - XPath = ""; + ПутьXPath = ""; ДополнительныйЭлементАдреса = Неопределено; Для каждого ВариантДополнительныйЭлементАдреса Из ВариантыДополнительногоЭлементаАдреса Цикл - XPath = РаботаСАдресами.XPathДополнительногоОбъектаАдресации(90, ВариантДополнительныйЭлементАдреса); - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, XPath); + ПутьXPath = РаботаСАдресами.XPathДополнительногоОбъектаАдресации(90, ВариантДополнительныйЭлементАдреса); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, ПутьXPath); Если ДополнительныйЭлементАдреса <> Неопределено Тогда Прервать; КонецЕсли; КонецЦикла; - Возврат Новый Структура("Значение, XPath", ДополнительныйЭлементАдреса, XPath); + Возврат Новый Структура("Значение, XPath", ДополнительныйЭлементАдреса, ПутьXPath); КонецФункции @@ -905,23 +911,23 @@ // Читает и устанавливает здания и помещения адреса. // // Параметры: -// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// XDTOАдрес - ОбъектXDTO - контактная информация или XDTO адреса. // НовоеЗначение - Структура - устанавливаемое значение. Ожидаются поля: -// * Здания - ТаблицаЗначений с колонками: +// * Здания - ТаблицаЗначений: // ** Тип - Строка - тип внутреннего классификатора дополнительных адресных // объектов. Например "Корпус". // ** Значение - Строка - значение номера дома, квартиры и т.п. -// * Помещения - ТаблицаЗначений с колонками, аналогично полю Здание. +// * Помещения - ТаблицаЗначений - с колонками, аналогично полю Здание. // // Возвращаемое значение: // Структура - текущие данные. Содержит поля: -// * Здания - ТаблицаЗначений с колонками: +// * Здания - ТаблицаЗначений: // ** Тип - Строка - тип внутреннего классификатора дополнительных адресных объектов. // Например "Корпус". // ** Сокращение - Строка - сокращение названия для использования в представлении. // ** Значение - Строка - значение номера дома, квартиры и т.п. // ** ПутьXPath - Строка - путь к значению объекта. -// * Помещения - ТаблицаЗначений с колонками, аналогично полю Здание. +// * Помещения - ТаблицаЗначений - с колонками, аналогично полю Здание. // Функция ЗданияИПомещенияАдреса(XDTOАдрес, НовоеЗначение = Неопределено) Экспорт @@ -1132,8 +1138,11 @@ // Возвращает перечень ошибок для адреса. // // Параметры: -// Адрес - ОбъектXDTO, СписокЗначений, Строка - описание адреса. -// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - ссылка на соответствующий вид +// Адрес - ОбъектXDTO +// - СписокЗначений +// - Строка - описание адреса. +// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации +// - Структура - ссылка на соответствующий вид // контактной информации. // РезультатГруппами - Булево - если указана Истина, то будет возвращен массив групп ошибок, иначе - список // значений. @@ -1141,19 +1150,19 @@ // Возвращаемое значение: // СписокЗначений - если параметр РезультатГруппами равен Ложь. Внутри представление - текст ошибки, значение - // XPath ошибочного поля. -// Массив - если параметр РезультатГруппами равен Истина. Содержит структуры с полями: -// ** ТипОшибки - Строка - наименование группы (типа) ошибки. Возможные значения: +// Массив из Структура - если параметр РезультатГруппами равен Истина. Содержит структуры с полями: +// * ТипОшибки - Строка - наименование группы (типа) ошибки. Возможные значения. // "ПредставлениеНеСоответствуетНаборуПолей" // "НеЗаполненыОбязательныеПоля" // "НеУказаныСокращенияПолей" // "НедопустимыеСимволыПолей" // "НеСоответствуетДлинаПолей" // "ОшибкиПоКлассификатору". -// ** Сообщение - Строка - подробный текст ошибки. -// ** Поля - Массив - содержит структуры описания ошибочных полей. Каждая структура имеет +// * Сообщение - Строка - подробный текст ошибки. +// * Поля - Массив - содержит структуры описания ошибочных полей. Каждая структура имеет // реквизиты: -// *** ИмяПоля - Строка - внутренний идентификатор ошибочного элемента адреса. -// *** Сообщение - Строка - подробный текст ошибки для этого поля. +// ** ИмяПоля - Строка - внутренний идентификатор ошибочного элемента адреса. +// ** Сообщение - Строка - подробный текст ошибки для этого поля. // Функция ОшибкиЗаполненияАдресаXDTO(Знач Адрес, ВидИнформации) Экспорт @@ -1243,7 +1252,7 @@ ОшибкиКлассификатора = Новый СписокЗначений; ЗаполнитьОшибкиАдресаПоКлассификатору(Адрес, ФлагиПроверки, ОшибкиКлассификатора); Для Каждого ЭлементСписка Из ОшибкиКлассификатора Цикл - ДанныеОшибки = ЭлементСписка.Значение; + ДанныеОшибки = ЭлементСписка.Значение; // см. ОписаниеОшибкиПроверки СписокОшибок.Добавить(ПоляОшибки(ЭлементСписка.Представление, ДанныеОшибки.АдресПроверен, ДанныеОшибки.ПутьXPath, ДанныеОшибки.Варианты)); КонецЦикла; @@ -1254,6 +1263,10 @@ Функция ПоляОшибки(ТекстОшибки, АдресПроверен, ИмяПоля = "Представление", ВариантАдреса = Неопределено) + Если ВариантАдреса = Неопределено Тогда + ВариантАдреса = Новый Массив; + КонецЕсли; + Результат = Новый Структура; Результат.Вставить("ТекстОшибки", ТекстОшибки); Результат.Вставить("АдресПроверен", АдресПроверен); @@ -1276,7 +1289,8 @@ // Общие проверки на корректность адреса. // // Параметры: -// ДанныеАдреса - Строка, СписокЗначений - XML, XDTO с данными адреса РФ. +// ДанныеАдреса - Строка +// - СписокЗначений - XML, XDTO с данными адреса РФ. // ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на соответствующий вид контактной информации. // // Возвращаемое значение: @@ -1287,8 +1301,8 @@ // "НеУказаныСокращенияПолей" // "НедопустимыеСимволыПолей" // "НеСоответствуетДлинаПолей". -// * Сообщение - Строка - Подробный текст ошибки. -// * Поля - Массив структур с полями: +// * Сообщение - Строка - подробный текст ошибки. +// * Поля - массив структур с полями: // ** ИмяПоля - внутренний идентификатор ошибочного поля. // ** Сообщение - подробный текст ошибки для поля. // @@ -1465,7 +1479,9 @@ МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); РезультатыАнализа = МодульАдресныйКлассификаторСлужебный.РезультатПроверкиАдресовПоКлассификатору(Адрес); Если РезультатыАнализа.Отказ Тогда - Результат.Добавить(Новый Структура("ПутьXPath, СущностьПоля, АдресПроверен", "/",, Ложь), РезультатыАнализа.КраткоеПредставлениеОшибки); + ОписаниеОшибкиПроверки = ОписаниеОшибкиПроверки(); + ОписаниеОшибкиПроверки.ПутьXPath = "/"; + Результат.Добавить(ОписаниеОшибкиПроверки, РезультатыАнализа.КраткоеПредставлениеОшибки); Возврат; КонецЕсли; @@ -1476,13 +1492,13 @@ Ключ = ОшибкаАдреса.Ключ; Если Обработанные[Ключ] = Неопределено Тогда - ОписаниеОшибки = Новый Структура; - ОписаниеОшибки.Вставить("ПутьXPath", Ключ); - ОписаниеОшибки.Вставить("СущностьПоля", Неопределено); - ОписаниеОшибки.Вставить("АдресПроверен", РезультатПроверки.АдресПроверен); - ОписаниеОшибки.Вставить("Варианты", РезультатПроверки.Варианты); + ОписаниеОшибкиПроверки = ОписаниеОшибкиПроверки(); + ОписаниеОшибкиПроверки.ПутьXPath = Ключ; + ОписаниеОшибкиПроверки.СущностьПоля = Неопределено; + ОписаниеОшибкиПроверки.АдресПроверен = РезультатПроверки.АдресПроверен; + ОписаниеОшибкиПроверки.Варианты = РезультатПроверки.Варианты; - Результат.Добавить(ОписаниеОшибки, СокрЛП(ОшибкаАдреса.Текст + Символы.ПС + ОшибкаАдреса.Подсказка)); + Результат.Добавить(ОписаниеОшибкиПроверки, СокрЛП(ОшибкаАдреса.Текст + Символы.ПС + ОшибкаАдреса.Подсказка)); Обработанные[Ключ] = Истина; КонецЕсли; КонецЦикла; @@ -1490,6 +1506,24 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Варианты - Массив +// * АдресПроверен - Булево +// * СущностьПоля - Неопределено +// * ПутьXPath - Строка +// +Функция ОписаниеОшибкиПроверки() + + ОписаниеОшибки = Новый Структура; + ОписаниеОшибки.Вставить("ПутьXPath", ""); + ОписаниеОшибки.Вставить("СущностьПоля", Неопределено); + ОписаниеОшибки.Вставить("АдресПроверен", Ложь); + ОписаниеОшибки.Вставить("Варианты", Новый Массив); + Возврат ОписаниеОшибки; + +КонецФункции + Функция СтруктураОшибкиПоставщикаАдресногоКлассификатора(ИсходнаяСтруктура = Неопределено) Если ИсходнаяСтруктура = Неопределено Тогда @@ -1516,8 +1550,8 @@ // Возвращает список значение содержащий номера земельных участков для автоподбора. // // Параметры: -// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Населенный пункт или улица. -// СтрокаПоиска - Строка - Текст автоподбора. +// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - населенный пункт или улица. +// СтрокаПоиска - Строка - текст автоподбора. // Возвращаемое значение: // СписокЗначений - результат для автоподбора. // @@ -1543,8 +1577,8 @@ // Возвращает список земельных участков по идентификатору адресного объекта, поиск по подобию. // // Параметры: -// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Родительский объект. -// СтрокаПоиска - Строка - Текст, отбора в списке домов. +// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - родительский объект. +// СтрокаПоиска - Строка - текст, отбора в списке домов. // // Возвращаемое значение: // ТаблицаЗначений - найденные варианты. @@ -1568,12 +1602,13 @@ // Возвращает поля контактной информации. // // Параметры: -// XDTOКонтактнаяИнформация - ОбъектXDTO, Строка - контактная информация или строка XML. +// XDTOКонтактнаяИнформация - ОбъектXDTO +// - Строка - контактная информация или строка XML. // СтарыйСоставПолей - Булево - необязательный флаг того, что из состава полей будут исключены // поля, отсутствующие в версиях БСП младше 2.1.3. // // Возвращаемое значение: -// Структура - данные. Содержит поля: +// Структура: // * Представление - Строка - представление адреса. // * ЗначенияПолей - СписокЗначений - значения. Состав значений для адреса: // ** Страна - Строка - текстовое представление страны. @@ -1633,12 +1668,13 @@ // Преобразует адрес формата XDTO в старый список полей типа СписокЗначений. // // Параметры: -// XDTOАдрес - ОбъектXDTO, Строка - контактная информация или строка XML. +// XDTOАдрес - ОбъектXDTO +// - Строка - контактная информация или строка XML. // РасширенныйСоставПолей - Булево - необязательный флаг того, что состав полей будет сокращен для совместимости // с обменом БСП 2.1.2. // // Возвращаемое значение: -// СписокЗначений - +// СписокЗначений // Функция АдресВСтарыйСписокПолей(XDTOАдрес, РасширенныйСоставПолей = Истина) Список = Новый СписокЗначений; @@ -1802,7 +1838,7 @@ // Возвращает отдельно сокращение от значения. // // Параметры: -// Текст - Строка - Полное наименования. +// Текст - Строка - полное наименования. // // Возвращаемое значение: // Строка - выделенное сокращение. @@ -1840,4 +1876,4 @@ #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl index cca540a87..449f0fb80 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl @@ -38,14 +38,16 @@ // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки +// АПК:78-выкл дополнительная обработка + // Экспортный обработчик команд для подсистемы дополнительных отчетов и обработок. // // Параметры: -// ИдентификаторКоманды - Строка - Идентификатор команды для выполнения. -// ОбъектыНазначения - Массив - Ссылки для обработки. Здесь не используется, ожидается, что аналогичный параметр -// был передан и обработан при создании формы. -// СозданныеОбъекты - Массив - Возвращаемый массив ссылок на созданные объекты. -// В данной обработке не используется. +// ИдентификаторКоманды - Строка - идентификатор команды для выполнения. +// ОбъектыНазначения - Массив из ЛюбаяСсылка - ссылки для обработки. Здесь не используется, +// ожидается, что аналогичный параметр был передан и обработан при создании формы. +// СозданныеОбъекты - Массив из ЛюбаяСсылка - возвращаемый массив ссылок на созданные объекты. +// В данной обработке не используется. // &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты) Экспорт @@ -65,6 +67,7 @@ КонецЕсли; КонецПроцедуры +// АПК:78-вкл // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки @@ -370,7 +373,7 @@ &НаКлиенте Процедура СписокСсылокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ТекущаяСсылка = Элемент.ТекущиеДанные.Ссылка; + ТекущаяСсылка = ТекущиеДанныеСпискаСсылок().Ссылка; Если Не ЗначениеЗаполнено(ТекущаяСсылка) Или Не ЗначениеЗаполнено(СписокСсылокИмяТаблицы) Тогда Возврат; @@ -508,17 +511,17 @@ &НаКлиенте Процедура ПоказатьРезультатВыгрузки(Команда) - ТекСтраница = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; - Сериализация = Новый Массив; + ТекущаяСтраница = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Результат = Новый Массив; - Если ТекСтраница = Элементы.СтраницаКонстанты Тогда + Если ТекущаяСтраница = Элементы.СтраницаКонстанты Тогда ЭлементФормы = Элементы.СписокКонстант; Для Каждого Строка Из ЭлементФормы.ВыделенныеСтроки Цикл ТекДанные = ЭлементФормы.ДанныеСтроки(Строка); - Сериализация.Добавить(Новый Структура("ФлагТипа, Данные", 1, ТекДанные.МетаПолноеИмя)); + Результат.Добавить(Новый Структура("ФлагТипа, Данные", 1, ТекДанные.МетаПолноеИмя)); КонецЦикла; - ИначеЕсли ТекСтраница = Элементы.СтраницаНаборЗаписей Тогда + ИначеЕсли ТекущаяСтраница = Элементы.СтраницаНаборЗаписей Тогда СписокИзмерений = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); ЭлементФормы = Элементы.СписокНаборовЗаписей; Префикс = "СписокНаборовЗаписей"; @@ -528,14 +531,14 @@ Для Каждого Имя Из СписокИзмерений Цикл ТекДанные.Вставить(Имя, Данные[Префикс + Имя]); КонецЦикла; - Сериализация.Добавить(Новый Структура("ФлагТипа, Данные", 2, ТекДанные)); + Результат.Добавить(Новый Структура("ФлагТипа, Данные", 2, ТекДанные)); КонецЦикла; - ИначеЕсли ТекСтраница = Элементы.СтраницаСписокСсылок Тогда + ИначеЕсли ТекущаяСтраница = Элементы.СтраницаСписокСсылок Тогда ЭлементФормы = Элементы.СписокСсылок; Для Каждого Элемент Из ЭлементФормы.ВыделенныеСтроки Цикл - ТекДанные = ЭлементФормы.ДанныеСтроки(Элемент); - Сериализация.Добавить(Новый Структура("ФлагТипа, Данные", 3, ТекДанные.Ссылка)); + ТекДанные = ЭлементФормы.ДанныеСтроки(Элемент); // см. ТекущиеДанныеСпискаСсылок + Результат.Добавить(Новый Структура("ФлагТипа, Данные", 3, ТекДанные.Ссылка)); КонецЦикла; Иначе @@ -543,8 +546,8 @@ КонецЕсли; - Если Сериализация.Количество() > 0 Тогда - Текст = ТекстСериализации(Сериализация); + Если Результат.Количество() > 0 Тогда + Текст = ТекстСериализации(Результат); ЗаголовокТекста = НСтр("ru = 'Результат стандартной выгрузки (РИБ)'"); Текст.Показать(ЗаголовокТекста); КонецЕсли; @@ -872,11 +875,11 @@ КонецПроцедуры // Параметры: -// Ссылка - ПланОбменаСсылка - +// Ссылка - ПланОбменаСсылка // // Возвращаемое значение: // Структура - дополнительные параметры: -// * Ссылка - ПланОбменаСсылка - +// * Ссылка - ПланОбменаСсылка // &НаКлиенте Функция ДополнительныеПараметрыРедактированияНомераСообщения(Ссылка) @@ -885,7 +888,7 @@ &НаКлиенте Процедура РедактироватьНомерСообщенияСсылки() - ТекДанные = Элементы.СписокСсылок.ТекущиеДанные; + ТекДанные = ТекущиеДанныеСпискаСсылок(); Если ТекДанные = Неопределено Тогда Возврат; КонецЕсли; @@ -904,7 +907,7 @@ // Обработчик оповещения продолжения диалога. // // Параметры: -// НомерСообщения - Число - +// НомерСообщения - Число // ДополнительныеПараметры - см. ДополнительныеПараметрыРедактированияНомераСообщения // &НаКлиенте @@ -1040,7 +1043,6 @@ Предупреждением = Результаты.Всего <> Результаты.Успешно; Если Предупреждением Тогда - ОбновитьОтображениеДанных(); ПоказатьПредупреждение(, ТекстПредупреждения, , ЗаголовокПредупреждения); Иначе ПоказатьОповещениеПользователя(ЗаголовокПредупреждения, @@ -1188,7 +1190,7 @@ СписокУдаления = Новый Массив; Для Каждого Строка Из Элемент.ВыделенныеСтроки Цикл - Данные = Элемент.ДанныеСтроки(Строка); + Данные = Элемент.ДанныеСтроки(Строка); // см. ТекущиеДанныеСпискаСсылок СписокУдаления.Добавить(Данные.Ссылка); КонецЦикла; @@ -1544,11 +1546,11 @@ // Возвращаемое значение: // Структура - дополнительные параметры: -// * Действие - Булево - -// * ТаблицаФормы - ТаблицаФормы - -// * Данные - Произвольный - -// * ИмяТаблицы - Строка - -// * Ссылка - ЛюбаяСсылка - +// * Действие - Булево +// * ТаблицаФормы - ТаблицаФормы +// * Данные - Произвольный +// * ИмяТаблицы - Строка +// * Ссылка - ЛюбаяСсылка // &НаКлиенте Функция ДополнительныеПараметрыОбработкиВыбораДанных() @@ -1634,7 +1636,7 @@ // Обработчик оповещения продолжения диалога. // // Параметры: -// РезультатВопроса -КодВозвратаДиалога - +// РезультатВопроса -КодВозвратаДиалога // ДополнительныеПараметры - см. ДополнительныеПараметрыОбработкиВыбораДанных // &НаКлиенте @@ -1687,7 +1689,7 @@ ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; Если ТекСтр = Элементы.СтраницаСписокСсылок Тогда - Данные = Элементы.СписокСсылок.ТекущиеДанные; + Данные = ТекущиеДанныеСпискаСсылок(); Если Данные <> Неопределено Тогда Возврат Данные.Ссылка; КонецЕсли; @@ -1715,6 +1717,19 @@ КонецФункции +// Возвращаемое значение: +// ДанныеФормыСтруктура - поля: +// * Ссылка - ЛюбаяСсылка +// * НомерСообщения - Число +// * НеВыгружалось - Булево +// +&НаКлиенте +Функция ТекущиеДанныеСпискаСсылок() + + Возврат Элементы.СписокСсылок.ТекущиеДанные; + +КонецФункции + &НаКлиенте Процедура ОткрытьФормуНастроекОбработки() ТекИмяФормы = ИмяЭтойФормы + "Форма.Настройки"; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl index a41bbe084..2ac28abfd 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -20,28 +20,32 @@ // план обмена -> узлы обмена. Служебные узлы выброшены. // // Параметры: -// ОбъектДанных - ЛюбаяСсылка, Структура - Ссылка или структура со значениями измерений набор записей. Для этих +// ОбъектДанных - ЛюбаяСсылка +// - Структура - ссылка или структура со значениями измерений набор записей. Для этих // данных которых анализируются узлы обмена. Если не указано, то для всех. -// ИмяТаблицы - Строка - Если ОбъектДанных - структура, то имя таблицы для набора записей. +// ИмяТаблицы - Строка - если ОбъектДанных - структура, то имя таблицы для набора записей. // // Возвращаемое значение: -// ДеревоЗначений - данные с колонками: -// * Наименование - Строка - Представление плана обмена или узла обмена. +// ДеревоЗначений: +// * Наименование - Строка - представление плана обмена или узла обмена. // * ИндексКартинки - Число - 1 = план обмена, 2 = узел , 3 = помеченный для удаления узел. -// * ИндексКартинкиАвторегистрация - Число - Если не указан параметр ОбъектДанных, то Неопределено. +// * ИндексКартинкиАвторегистрация - Число - если не указан параметр ОбъектДанных, то Неопределено. // Иначе: 0 = нет, 1 = запрещена, 2 = разрешена, Неопределено для // плана обмена. -// * ПланОбменаИмя - Строка - Имя плана обмена узла. -// * Ссылка - ПланОбменаСсылка - Ссылка узла, Неопределено для плана обмена. -// * Код - Число, Строка - Код узла, Неопределено для плана обмена. -// * НомерОтправленного - Число - Данные узла. -// * НомерПринятого - Число - Данные узла. -// * НомерСообщения - Число, NULL - Если указан объект, то номер сообщения для него, иначе NULL. -// * НеВыгружалось - Булево, NULL - Если указан объект, то флаг выгрузки, иначе NULL. -// * Пометка - Булево - Если указан объект, то 0 = нет регистрации, 1 - есть, иначе +// * ПланОбменаИмя - Строка - имя плана обмена узла. +// * Ссылка - ПланОбменаСсылка - ссылка узла, Неопределено для плана обмена. +// * Код - Число +// - Строка - код узла, Неопределено для плана обмена. +// * НомерОтправленного - Число - данные узла. +// * НомерПринятого - Число - данные узла. +// * НомерСообщения - Число +// - NULL - если указан объект, то номер сообщения для него, иначе NULL. +// * НеВыгружалось - Булево +// - NULL - если указан объект, то флаг выгрузки, иначе NULL. +// * Пометка - Булево - если указан объект, то 0 = нет регистрации, 1 - есть, иначе // всегда 0. // * ИсходнаяПометка - Булево - аналогично колонке "Пометка". -// * ИдентификаторСтроки - Число - Индекс добавленной строки (обход дерева сверху вниз слева +// * ИдентификаторСтроки - Число - индекс добавленной строки (обход дерева сверху вниз слева // направо). // Функция СформироватьДеревоУзлов(ОбъектДанных = Неопределено, ИмяТаблицы = Неопределено) Экспорт @@ -301,13 +305,16 @@ // Вычисляет количества изменений для объектов метаданных для узлов обмена. // // Параметры: -// СписокТаблиц - Массив - имена. Может быть коллекцией"ключ/значение" где "значение" - массивы имен. -// СписокУзлов - ПланОбменаСсылка, Массив - узлы. +// СписокТаблиц - Структура +// - Массив из Структура - имена. Может быть коллекцией "ключ/значение", +// где "значение" - массивы имен. +// СписокУзлов - ПланОбменаСсылка +// - Массив из ПланОбменаСсылка - узлы. // // Возвращаемое значение: -// ТаблицаЗначений - колонки: -// * МетаПолноеИмя - Строка - Полное имя метаданных, для которых рассчитываем количество. -// * УзелОбмена - ПланОбменаСсылка - Ссылка на узел обмена, для которого рассчитываем количество. +// ТаблицаЗначений: +// * МетаПолноеИмя - Строка - полное имя метаданных, для которых рассчитываем количество. +// * УзелОбмена - ПланОбменаСсылка - ссылка на узел обмена, для которого рассчитываем количество. // * КоличествоИзменений - Число - содержит общее количество изменений. // * КоличествоВыгруженных - Число - содержит количество выгруженных изменений. // * КоличествоНеВыгруженных - Число - содержит количество не выгруженных изменений. @@ -398,7 +405,7 @@ // Возвращает объект метаданных по его полному имени. Пустая строка обозначает конфигурацию. // // Параметры: -// ИмяМетаданных - Строка - Имя объекта метаданных, например "Справочник.Валюты" или "Константы". +// ИмяМетаданных - Строка - имя объекта метаданных, например "Справочник.Валюты" или "Константы". // // Возвращаемое значение: // ОбъектМетаданных - результат поиска. @@ -421,10 +428,12 @@ // Возвращает флаг регистрации объекта на узле. // // Параметры: -// Узел - ПланОбменаСсылка - Узел плана обмена для которого получаем информацию, -// ОбъектРегистрации - Строка, ЛюбаяСсылка, Структура - объект, для которого получаем информацию. +// Узел - ПланОбменаСсылка - узел плана обмена для которого получаем информацию, +// ОбъектРегистрации - Строка +// - ЛюбаяСсылка +// - Структура - объект, для которого получаем информацию. // Структура хранит значения изменений набора записей. -// ИмяТаблицы - Строка - Если ОбъектРегистрации - структура, то содержит имя таблицы для набора измерений. +// ИмяТаблицы - Строка - если ОбъектРегистрации - структура, то содержит имя таблицы для набора измерений. // // Возвращаемое значение: // Булево - результат регистрации. @@ -516,19 +525,21 @@ // Запускает изменение регистрации в соответствии с переданными параметрами. // Параметры: -// ПараметрыЗадания - Структура - Параметры для изменения регистрации +// ПараметрыЗадания - Структура - параметры для изменения регистрации: // * Команда - Булево - Истина, если надо добавлять, Ложь, если удалять. // * БезУчетаАвторегистрации - Булево - Истина, если не надо анализировать флаг авторегистрации. -// * Узел - ПланОбменаСсылка - Ссылка на узел плана обмена. -// * Данные - ЛюбаяСсылка, Строка, Структура - данные или массив таких данных. -// * ИмяТаблицы - Строка - Если Данные является структурой, то содержит имя таблицы. -// АдресХранилища - Произвольный - Адрес временного хранилища для сохранения результата при запуске в фоновом задании. +// * Узел - ПланОбменаСсылка - ссылка на узел плана обмена. +// * Данные - ЛюбаяСсылка +// - Строка +// - Структура - данные или массив таких данных. +// * ИмяТаблицы - Строка - если Данные является структурой, то содержит имя таблицы. +// АдресХранилища - Произвольный - адрес временного хранилища для сохранения результата при запуске в фоновом задании. // // Возвращаемое значение: -// Структура - результат операции: +// Структура: // * Всего - Число - общее число объектов. // * Успешно - Число - числом успешно обработанных объектов. -// * Команда - Значение входящего параметра Команда для упрощения обработки результатов. +// * Команда - значение входящего параметра Команда для упрощения обработки результатов. // Функция ВыполнитьИзменениеРегистрации(ПараметрыЗадания, АдресХранилища = Неопределено) Экспорт ИмяТаблицы = Неопределено; @@ -552,7 +563,7 @@ // Возвращает начало полного имени формы для открытия по переданному объекту. // // Параметры: -// ТекущийОбъект - Строка или ДинамическийСписок, для которого необходимо получить имя формы. +// ТекущийОбъект - Строка или ДинамическийСписок - для которого необходимо получить имя формы. // Возвращаемое значение: // Строка - полное имя формы. // @@ -572,7 +583,7 @@ // Рекурсивное обслуживание иерархических пометок с тремя состояниями в дереве. // // Параметры: -// ДанныеСтроки - ДанныеФормыЭлементДерева - Пометка хранится в числовой колонке "Пометка". +// ДанныеСтроки - ДанныеФормыЭлементДерева - пометка хранится в числовой колонке "Пометка". // Процедура ИзменениеПометки(ДанныеСтроки) Экспорт ДанныеСтроки.Пометка = ДанныеСтроки.Пометка % 2; @@ -583,7 +594,7 @@ // Рекурсивное обслуживание иерархических пометок с тремя состояниями в дереве. // // Параметры: -// ДанныеСтроки - ДанныеФормыЭлементДерева - Пометка хранится в числовой колонке "Пометка". +// ДанныеСтроки - ДанныеФормыЭлементДерева - пометка хранится в числовой колонке "Пометка". // Процедура ПроставитьПометкиВниз(ДанныеСтроки) Экспорт Значение = ДанныеСтроки.Пометка; @@ -596,7 +607,7 @@ // Рекурсивное обслуживание иерархических пометок с тремя состояниями в дереве. // // Параметры: -// ДанныеСтроки - ДанныеФормыЭлементДерева - Пометка хранится в числовой колонке "Пометка". +// ДанныеСтроки - ДанныеФормыЭлементДерева - пометка хранится в числовой колонке "Пометка". // Процедура ПроставитьПометкиВверх(ДанныеСтроки) Экспорт РодительСтроки = ДанныеСтроки.ПолучитьРодителя(); @@ -621,8 +632,8 @@ // Чтение реквизитов узла обмена. // // Параметры: -// Ссылка - ПланОбменаСсылка - Ссылка на узел обмена. -// Данные - Строка - Список имен реквизитов для чтения через запятую. +// Ссылка - ПланОбменаСсылка - ссылка на узел обмена. +// Данные - Строка - список имен реквизитов для чтения через запятую. // // Возвращаемое значение: // Структура - считанные данные. @@ -701,7 +712,7 @@ // Возвращает описание данных по имени таблицы/полному имени метаданных или метаданным. // // Параметры: -// ИмяТаблицыМетаданных - Строка - Имя таблицы, например "Справочник.Валюты". +// ИмяТаблицыМетаданных - Строка - имя таблицы, например "Справочник.Валюты". // // Возвращаемое значение: // Структура - описание данных в виде набора значений. Содержит следующие данные: @@ -887,15 +898,15 @@ // Возвращает таблицу, описывающую измерения для регистрации изменений набора данных. // // Параметры: -// ИмяТаблицы - Строка - Имя таблицы, например "РегистрСведений.КурсыВалют". -// ВсеИзмерения - Булево - Флаг того, что для регистра сведений получаем все измерения, а не +// ИмяТаблицы - Строка - имя таблицы, например "РегистрСведений.КурсыВалют". +// ВсеИзмерения - Булево - флаг того, что для регистра сведений получаем все измерения, а не // только основные и ведущие. // // Возвращаемое значение: -// ТаблицаЗначений - колонки: +// ТаблицаЗначений: // * Имя - Строка - имя измерения. // * ТипЗначения - ОписаниеТипов - типы. -// * Заголовок - Строка - Представление для измерения. +// * Заголовок - Строка - представление для измерения. // Функция ИзмеренияНабораЗаписей(ИмяТаблицы, ВсеИзмерения = Ложь) Экспорт @@ -984,10 +995,10 @@ // Модифицирует таблицу формы, добавляя туда колонки. // // Параметры: -// ТаблицаФормы - ЭлементФормы - Элемент, связанный с данными, в который будут добавлены колонки данных. -// СохранятьИмена - Строка - Список имен колонок, которые будут сохранены, через запятую. -// Добавлять - Массив - Структуры с описанием добавляемых колонок с атрибутами Имя, ТипЗначения, Заголовок. -// ГруппаКолонок - ЭлементФормы - Группа колонок, в которую происходит добавление. +// ТаблицаФормы - ЭлементФормы - элемент, связанный с данными, в который будут добавлены колонки данных. +// СохранятьИмена - Строка - список имен колонок, которые будут сохранены, через запятую. +// Добавлять - Массив - структуры с описанием добавляемых колонок с атрибутами Имя, ТипЗначения, Заголовок. +// ГруппаКолонок - ЭлементФормы - группа колонок, в которую происходит добавление. // Процедура ДобавитьКолонкиВТаблицуФормы(ТаблицаФормы, СохранятьИмена, Добавлять, ГруппаКолонок = Неопределено) Экспорт @@ -1110,6 +1121,7 @@ // Возвращает флаг того, что работа происходит в файловой базе. // Возвращаемое значение: // Булево - флаг того, что работа происходит в файловой базе. +// Функция ЭтоФайловаяБаза() Экспорт Возврат СтрНайти(СтрокаСоединенияИнформационнойБазы(), "File=") > 0; КонецФункции @@ -1238,7 +1250,7 @@ // Проверяем настройки на корректность, сбрасываем в случае нарушения. // // Параметры: -// КлючНастройки - Строка - Ключ проверяемой настройки. +// КлючНастройки - Строка - ключ проверяемой настройки. // Возвращаемое значение: // Структура - ключ - имя настройки. // Значение - описание ошибки или Неопределено. @@ -1279,15 +1291,17 @@ // Параметры: // Команда - Булево - Истина, если надо добавлять, Ложь, если удалять. // БезУчетаАвторегистрации - Булево - Истина, если не надо анализировать флаг авторегистрации. -// Узел - ПланОбменаСсылка - Ссылка на узел плана обмена. -// Данные - ЛюбаяСсылка, Строка, Структура - данные или массив таких данных. -// ИмяТаблицы - Строка - Если Данные является структурой, то содержит имя таблицы. +// Узел - ПланОбменаСсылка - ссылка на узел плана обмена. +// Данные - ЛюбаяСсылка +// - Строка +// - Структура - данные или массив таких данных. +// ИмяТаблицы - Строка - если Данные является структурой, то содержит имя таблицы. // // Возвращаемое значение: -// Структура - результат операции: +// Структура: // * Всего - Число - общее число объектов. // * Успешно - Число - числом успешно обработанных объектов. -// * Команда - Значение входящего параметра Команда для упрощения обработки результатов. +// * Команда - значение входящего параметра Команда для упрощения обработки результатов. // Функция ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, Данные, ИмяТаблицы = Неопределено) Экспорт @@ -1513,7 +1527,7 @@ ИначеЕсли Характеристики.ЭтоНабор Тогда Для Каждого ИзмерениеРегистра Из ОбъектРегистрации.Измерения Цикл - Если НРег(ИзмерениеРегистра.Имя) = "узел" Тогда + Если НедопустимоеИмяИзмеренияРегистра(ИзмерениеРегистра) Тогда Возврат; КонецЕсли; КонецЦикла; @@ -1552,6 +1566,20 @@ МодульОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Узел, ОбъектРегистрации, НастройкаКонтрольВыгрузкиОбъектов); КонецПроцедуры +// Параметры: +// Измерение - ОбъектМетаданных +// +// Возвращаемое значение: +// Булево - Истина, если имя измерения регистра является недопустимым +// с точки зрения механизмов регистрации. +// +Функция НедопустимоеИмяИзмеренияРегистра(Измерение) + + Возврат ВРег(Измерение.Имя) = "УЗЕЛ" + Или ВРег(Измерение.Имя) = "NODE"; + +КонецФункции + // Возвращает управляемую форму, которой принадлежит элемент. // Функция ФормаЭлементаФормы(ЭлементФормы) @@ -2268,13 +2296,13 @@ КонецПроцедуры // Возвращаемое значение: -// ДеревоЗначений - содержит колонки: -// * Наименование - Строка - Представление вида объекта метаданных. -// * МетаПолноеИмя - Строка - Полное имя объекта метаданных. -// * ИндексКартинки - Число - Зависит от метаданных. +// ДеревоЗначений: +// * Наименование - Строка - представление вида объекта метаданных. +// * МетаПолноеИмя - Строка - полное имя объекта метаданных. +// * ИндексКартинки - Число - зависит от метаданных. // * Пометка - Неопределено - далее используется для хранения пометок -// * ИдентификаторСтроки - Число - Индекс добавленной строки (обход дерева сверху вниз слева направо). -// * Авторегистрация - Булево - Если указан ИмяПланаОбмена, то для листьев: 1-разрешена, +// * ИдентификаторСтроки - Число - индекс добавленной строки (обход дерева сверху вниз слева направо). +// * Авторегистрация - Булево - если указан ИмяПланаОбмена, то для листьев: 1-разрешена, // 2-запрещена. Иначе Неопределено. // * КоличествоИзменений - Число - количество измененных записей. // * КоличествоВыгруженных - Число - количество выгруженных записей. diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html index 9f669aa01..7afe75d97 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html @@ -4,13 +4,20 @@ <p>В некоторых случаях бывает необходимо задать два разных расписания для одного регламентного задания. Тогда в список можно добавить новое регламентное задание по одному из предопределенных шаблонов, предусмотренных в программе.</p> <h3>Свойства регламентного задания</h3> <ul><li><strong>Включено</strong> - флажок позволяет включить или отключить выполнение регламентного задания.<br>Полезно, когда нужно ненадолго отключить регламентное задание, не меняя расписание. -</li><li>С помощью ссылки <strong>Расписание</strong> можно настроить <a href="v8help://mngbase/jobschedule.lf">расписание регламентного задания</a>.</li></ul><ul><li><strong>Наименование</strong> - наименование регламентного задания. Обычно пустое, и в качестве него применяется синоним, указанный в шаблоне регламентного задания, заданного в конфигураторе. Если синоним шаблона не задан, используется его имя. -</li><li><strong>При ошибках повторять, раз</strong> - число попыток выполнения регламентного задания, при возникновении ошибки. +</li> +<li>С помощью ссылки <strong>Расписание</strong> можно настроить <a href="v8help://mngbase/jobschedule.lf">расписание регламентного задания</a>.</li></ul><ul><li><strong>Наименование</strong> - наименование регламентного задания. Обычно пустое, и в качестве него применяется синоним, указанный в шаблоне регламентного задания, заданного в конфигураторе. Если синоним шаблона не задан, используется его имя. +</li> +<li><strong>При ошибках повторять, раз</strong> - число попыток выполнения регламентного задания, при возникновении ошибки. <ul><li><strong>через, сек</strong> - пауза (в секундах) между попытками выполнения регламентного задания, при возникновении ошибки.</li></ul></li></ul><p></p> <ul><li><strong>Предопределенно</strong>е - принимает значения <strong>Да</strong> и <strong>Нет</strong>. Непредопределенные (введенные вручную) регламентные задания используются в редких случаях. -</li><li><strong>Идентификатор</strong> - нужен только для продвинутого администратора, знающего встроенный язык. Требуется для исследования нестандартных проблем в работе регламентных заданий, если таковые есть. -</li><li><strong>Ключ</strong> - нужен только для продвинутого администратора. Требуется для тонкой настройки выполнения регламентных заданий и для исследования нестандартных проблем в работе регламентных заданий, если таковые есть. Если ключ указан, то перед запуском <a href="DataProcessor.РегламентныеИФоновыеЗадания.Form.ФоновоеЗадание/Help">фонового задания</a> проверяется, что нет других активных фоновых заданий по тому же шаблону регламентного задания, который применен в экземпляре регламентного задания. -</li><li><strong>Имя пользователя</strong> - имя <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> информационной базы, который будет использован для выполнения регламентного задания. Выбирается из списка <a href="Catalog.Пользователи/Help">Пользователи</a>.</li></ul><ul><li><strong>Имя</strong> - имя шаблона регламентного задания, определенного в конфигураторе. -</li><li><strong>Синоним</strong> - синоним шаблона регламентного задания, определенного в конфигураторе. -</li><li><strong>Имя метода</strong> - имя процедуры в конфигурации, которая будет выполняться в фоновом задании, созданным по расписанию регламентного задания.</li></ul><ul><li><strong>Сообщение</strong> - поле содержит текст сообщений и текст сведений об ошибке, если сообщения и/или ошибки произошли при выполнении последнего фонового задания созданного по этому регламентному заданию. То же содержание доступно, если открыть последнее фоновое задание этого регламентного задания.</li></ul><h3>См. также:</h3> +</li> +<li><strong>Идентификатор</strong> - нужен только для продвинутого администратора, знающего встроенный язык. Требуется для исследования нестандартных проблем в работе регламентных заданий, если таковые есть. +</li> +<li><strong>Ключ</strong> - нужен только для продвинутого администратора. Требуется для тонкой настройки выполнения регламентных заданий и для исследования нестандартных проблем в работе регламентных заданий, если таковые есть. Если ключ указан, то перед запуском <a href="DataProcessor.РегламентныеИФоновыеЗадания.Form.ФоновоеЗадание/Help">фонового задания</a> проверяется, что нет других активных фоновых заданий по тому же шаблону регламентного задания, который применен в экземпляре регламентного задания. +</li> +<li><strong>Имя пользователя</strong> - имя <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> информационной базы, который будет использован для выполнения регламентного задания. Выбирается из списка <a href="Catalog.Пользователи/Help">Пользователи</a>.</li></ul><ul><li><strong>Имя</strong> - имя шаблона регламентного задания, определенного в конфигураторе. +</li> +<li><strong>Синоним</strong> - синоним шаблона регламентного задания, определенного в конфигураторе. +</li> +<li><strong>Имя метода</strong> - имя процедуры в конфигурации, которая будет выполняться по расписанию регламентного задания.</li></ul><ul><li><strong>Сообщение</strong> - поле содержит текст сообщений и текст сведений об ошибке, если сообщения и/или ошибки произошли при выполнении последнего фонового задания созданного по этому регламентному заданию. То же содержание доступно, если открыть последнее фоновое задание этого регламентного задания.</li></ul><h3>См. также:</h3> <ul><li><a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">Регламентные и фоновые задания</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form index 6e2615875..45f5c63b5 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form @@ -1317,7 +1317,6 @@ <verticalScrollBar>AutoUse</verticalScrollBar> <horizontalLines>true</horizontalLines> <verticalLines>true</verticalLines> - <useAlternationRowColorBWA>false</useAlternationRowColorBWA> <autoInsertNewRow>true</autoInsertNewRow> <searchOnInput>Auto</searchOnInput> <initialListView>Auto</initialListView> diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index 93af6e5e3..1c4a28076 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -581,9 +581,9 @@ КонецПроцедуры // Параметры: -// НовоеРасписание - РасписаниеРегламентногоЗадания - -// ТекущиеДанные - ДанныеФормыЭлементКоллекции - со свойствами: -// * Идентификатор - Строка - +// НовоеРасписание - РасписаниеРегламентногоЗадания +// ТекущиеДанные - ДанныеФормыЭлементКоллекции: +// * Идентификатор - Строка // &НаКлиенте Процедура ОткрытьРасписаниеЗавершение(НовоеРасписание, ТекущиеДанные) Экспорт diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl index d567b3ae3..c87141e87 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl @@ -335,6 +335,8 @@ #Если Не ВебКлиент И Не МобильныйКлиент Тогда + РезервноеКопированиеИБКлиент.НеОстанавливатьВыполнениеСценариев(); + ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкрипта(); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), @@ -343,7 +345,7 @@ ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); - ПутьКПрограммеЗапуска = СтандартныеПодсистемыКлиент.ПапкаСистемныхПриложений() + "mshta.exe"; + ПутьКПрограммеЗапуска = СтандартныеПодсистемыКлиент.КаталогСистемныхПриложений() + "mshta.exe"; СтрокаЗапуска = """%1"" ""%2"" [p1]%3[/p1]"; СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl index 440a347d5..8ccc33f02 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl @@ -318,16 +318,18 @@ Элементы.Далее.Видимость = Ложь; Элементы.Отмена.Заголовок = НСтр("ru = 'Закрыть'"); Элементы.Отмена.КнопкаПоУмолчанию = Истина; + Настройки = НастройкиРезервногоКопирования(); РезервноеКопированиеИБКлиент.ЗаполнитьЗначенияГлобальныхПеременных(Настройки); - УстановитьРезультатРезервногоКопирования(); + + СброситьПризнакРезервногоКопирования(); КонецПроцедуры &НаСервереБезКонтекста -Процедура УстановитьРезультатРезервногоКопирования() +Процедура СброситьПризнакРезервногоКопирования() - РезервноеКопированиеИБСервер.УстановитьРезультатРезервногоКопирования(); + РезервноеКопированиеИБСервер.СброситьПризнакРезервногоКопирования(); КонецПроцедуры @@ -511,6 +513,8 @@ #Если Не ВебКлиент И Не МобильныйКлиент Тогда + РезервноеКопированиеИБКлиент.НеОстанавливатьВыполнениеСценариев(); + ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкрипта(); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( @@ -527,7 +531,7 @@ ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); - ПутьКПрограммеЗапуска = СтандартныеПодсистемыКлиент.ПапкаСистемныхПриложений() + "mshta.exe"; + ПутьКПрограммеЗапуска = СтандартныеПодсистемыКлиент.КаталогСистемныхПриложений() + "mshta.exe"; СтрокаЗапуска = """%1"" ""%2"" [p1]%3[/p1]"; СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl index 9bcf5917f..872dc221e 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl @@ -294,9 +294,6 @@ Возврат; КонецЕсли; - ПрогрессВыполнения = ?(ТолькоОбновлениеПараметровРаботыПрограммы, 95, 10); - ОбновитьОтображениеДанных(Элементы.ПрогрессВыполнения); - ПараметрыПродолжения.ПолученныеПараметрыКлиента.Вставить("НеобходимоОбновлениеПараметровРаботыПрограммы"); ПараметрыПродолжения.Вставить("КоличествоПолученныхПараметровКлиента", ПараметрыПродолжения.ПолученныеПараметрыКлиента.Количество()); @@ -627,49 +624,47 @@ КонецЦикла; КонецЕсли; - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - СведенияОбОбновлении.ОбрабатываемыеДанные = Новый Соответствие; - ОбрабатываемыеДанные = СведенияОбОбновлении.ОбрабатываемыеДанные; ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; + ОбработанныеБиблиотеки = Новый Массив; - Для Каждого ОписаниеБиблиотеки Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Если ОписанияБиблиотек[ОписаниеБиблиотеки.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков <> "Параллельно" Тогда - ОбновлениеИнформационнойБазыСлужебный.ОтметитьРегистрациюОтложенныхОбработчиковОбновления(ОписаниеБиблиотеки.ИмяБиблиотеки, Истина); + ВсегоПроцедур = 0; + Обработчики = ОбновлениеИнформационнойБазыСлужебный.ОбработчикиДляОтложеннойРегистрацииДанных(Истина); + Для Каждого Обработчик Из Обработчики Цикл + Если ОбработанныеБиблиотеки.Найти(Обработчик.ИмяБиблиотеки) <> Неопределено Тогда Продолжить; КонецЕсли; - ПараллельноСВерсии = ОписанияБиблиотек[ОписаниеБиблиотеки.ИмяБиблиотеки].ПараллельноеОтложенноеОбновлениеСВерсии; - Для Каждого ОписаниеВерсии Из ОписаниеБиблиотеки.Строки Цикл - Если ОписаниеВерсии.НомерВерсии = "*" Тогда - Продолжить; - КонецЕсли; - - Если ЗначениеЗаполнено(ПараллельноСВерсии) - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ОписаниеВерсии.НомерВерсии, ПараллельноСВерсии) < 0 Тогда - Продолжить; - КонецЕсли; - - Для Каждого ОписаниеОбработчика Из ОписаниеВерсии.Строки Цикл - ОписаниеОбрабатываемыхДанных = ОбновлениеИнформационнойБазыСлужебный.НовоеОписаниеОбрабатываемыхДанных( - ОписаниеОбработчика.Многопоточный, - Истина); - - Если ОписаниеОбработчика.Многопоточный Тогда - ОписаниеОбрабатываемыхДанных.ПараметрыВыборки = - ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(); - КонецЕсли; - - ОписаниеОбрабатываемыхДанных.ИмяОбработчика = ОписаниеОбработчика.ИмяОбработчика; - ОписаниеОбрабатываемыхДанных.Очередь = ОписаниеОбработчика.ОчередьОтложеннойОбработки; - ОписаниеОбрабатываемыхДанных.ПроцедураЗаполнения = ОписаниеОбработчика.ПроцедураЗаполненияДанныхОбновления; - ОбрабатываемыеДанные[ОписаниеОбработчика.ИмяОбработчика] = ОписаниеОбрабатываемыхДанных; - КонецЦикла; - КонецЦикла; + Если ОписанияБиблиотек[Обработчик.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков <> "Параллельно" Тогда + ОбновлениеИнформационнойБазыСлужебный.ОтметитьРегистрациюОтложенныхОбработчиковОбновления(Обработчик.ИмяБиблиотеки, Истина); + ОбработанныеБиблиотеки.Добавить(Обработчик.ИмяБиблиотеки); + Продолжить; + КонецЕсли; + ПараллельноСВерсии = ОписанияБиблиотек[Обработчик.ИмяБиблиотеки].ПараллельноеОтложенноеОбновлениеСВерсии; + + Если ЗначениеЗаполнено(ПараллельноСВерсии) + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Обработчик.Версия, ПараллельноСВерсии) < 0 Тогда + Продолжить; + КонецЕсли; + + ОписаниеОбрабатываемыхДанных = ОбновлениеИнформационнойБазыСлужебный.НовоеОписаниеОбрабатываемыхДанных( + Обработчик.Многопоточный, + Истина); + Если Обработчик.Многопоточный Тогда + ОписаниеОбрабатываемыхДанных.ПараметрыВыборки = + ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(); + КонецЕсли; + + ОписаниеОбрабатываемыхДанных.ИмяОбработчика = Обработчик.ИмяОбработчика; + ОписаниеОбрабатываемыхДанных.Очередь = Обработчик.ОчередьОтложеннойОбработки; + ОписаниеОбрабатываемыхДанных.ПроцедураЗаполнения = Обработчик.ПроцедураЗаполненияДанныхОбновления; + + ОписаниеОбрабатываемыхДанных = Новый ХранилищеЗначения(ОписаниеОбрабатываемыхДанных, Новый СжатиеДанных(9)); + ОбновлениеИнформационнойБазыСлужебный.УстановитьСвойствоОбработчика(Обработчик.ИмяОбработчика, "ОбрабатываемыеДанные", ОписаниеОбрабатываемыхДанных); + + ВсегоПроцедур = ВсегоПроцедур + 1; КонецЦикла; - ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - Если Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); @@ -678,7 +673,7 @@ ХодРегистрации = Новый Структура; ХодРегистрации.Вставить("НачальныйПрогресс", ПрогрессВыполнения); - ХодРегистрации.Вставить("ВсегоПроцедур", ОбрабатываемыеДанные.Количество()); + ХодРегистрации.Вставить("ВсегоПроцедур", ВсегоПроцедур); ХодРегистрации.Вставить("ВыполненоПроцедур", 0); // Снятие блокировки информационной базы и выполнение регистрации на плане обмена. @@ -721,24 +716,26 @@ РезультатВыполненияУправляющегоФЗ = ДлительныеОперации.ОперацияВыполнена(ИдентификаторЗадания); КонецЕсли; - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); Статус = РезультатВыполненияУправляющегоФЗ.Статус; Если Статус = "Выполнено" Тогда ОбновлениеИнформационнойБазыСлужебный.ОтметитьРегистрациюОтложенныхОбработчиковОбновления(); ИначеЕсли Статус = "Ошибка" Или Статус = "Отменено" Тогда - ОбновлениеИнформационнойБазыСлужебный.ОтменитьВыполнениеВсехПотоков(СведенияОбОбновлении.ОписаниеПотоков); - ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + Группы = ОбновлениеИнформационнойБазыСлужебный.НовоеОписаниеГруппПотоковРегистрацииДанныхОтложенногоОбновления(); + ОбновлениеИнформационнойБазыСлужебный.ОтменитьВыполнениеВсехПотоков(Группы); Возврат РезультатВыполненияУправляющегоФЗ; КонецЕсли; // Обновление прогресса. ВыполненоПроцедур = 0; - Для Каждого ОписаниеОбрабатываемыхДанных Из СведенияОбОбновлении.ОбрабатываемыеДанные Цикл - Если ОписаниеОбрабатываемыхДанных.Значение.Статус = "Выполнено" Тогда + Обработчики = ОбновлениеИнформационнойБазыСлужебный.ОбработчикиДляОтложеннойРегистрацииДанных(); + Для Каждого Обработчик Из Обработчики Цикл + ОписаниеОбрабатываемыхДанных = Обработчик.ОбрабатываемыеДанные.Получить(); + Если ОписаниеОбрабатываемыхДанных.Статус = "Выполнено" Тогда ВыполненоПроцедур = ВыполненоПроцедур + 1; КонецЕсли; КонецЦикла; + ХодРегистрации.ВыполненоПроцедур = ВыполненоПроцедур; Если ХодРегистрации.ВсегоПроцедур <> 0 Тогда ПрибавкаПрогресса = ХодРегистрации.ВыполненоПроцедур / ХодРегистрации.ВсегоПроцедур * (100 - ХодРегистрации.НачальныйПрогресс); diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form index 74b06c7f2..d5d1afc8e 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form @@ -1796,37 +1796,8 @@ </extInfo> </items> <items xsi:type="form:FormGroup"> - <name>ГруппаИнформацияОбОбновлении1</name> + <name>ГруппаПереходКСпискуОтложенныхОбработчиков</name> <id>45</id> - <items xsi:type="form:FormGroup"> - <name>ГруппаПереходКСпискуОтложенныхОбработчиков</name> - <id>56</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <height>3</height> - <extendedTooltip> - <name>ГруппаПереходКСпискуОтложенныхОбработчиковExtendedTooltip</name> - <id>168</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>Vertical</group> - <behavior>Auto</behavior> - <showLeftMargin>true</showLeftMargin> - <united>true</united> - <throughAlign>Auto</throughAlign> - <currentRowUse>Auto</currentRowUse> - </extInfo> - </items> <items xsi:type="form:Button"> <name>ОткрытьСписокОтложенныхОбработчиков</name> <id>57</id> @@ -1907,7 +1878,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ГруппаИнформацияОбОбновлении1ExtendedTooltip</name> + <name>ГруппаПереходКСпискуОтложенныхОбработчиковРасширеннаяПодсказка</name> <id>166</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl index 235bf044f..ab687b277 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl @@ -65,10 +65,9 @@ КонецЕсли; Иначе - ТекстСообщения = СообщениеОРезультатахОбновления(СведенияОбОбновлении); + ТекстСообщения = СообщениеОРезультатахОбновления(); Элементы.СтатусОбновления.ТекущаяСтраница = Элементы.ОбновлениеЗавершено; - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); ШаблонЗаголовка = НСтр("ru = 'Дополнительные процедуры обработки данных завершены %1 в %2'"); Элементы.ИнформацияОтложенноеОбновлениеЗавершено.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, @@ -81,7 +80,7 @@ Если Не ИБФайловая Тогда ОбновлениеЗавершено = Ложь; - ОбновитьИнформациюОХодеОбновления(СведенияОбОбновлении, ОбновлениеЗавершено); + ОбновитьИнформациюОХодеОбновления(ОбновлениеЗавершено); УстановитьДоступностьКоличестваПотоковОбновленияИнформационнойБазы(ЭтотОбъект); Если ОбновлениеЗавершено Тогда @@ -374,7 +373,7 @@ Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда ОбновлениеЗавершено = Истина; Иначе - ОбновитьИнформациюОХодеОбновления(СведенияОбОбновлении, ОбновлениеЗавершено); + ОбновитьИнформациюОХодеОбновления(ОбновлениеЗавершено); КонецЕсли; Если ОбновлениеЗавершено = Истина Тогда @@ -390,33 +389,9 @@ СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено; СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = Неопределено; - Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл - Обработчик.ЧислоПопыток = 0; - Если Обработчик.Статус = "Ошибка" Тогда - Обработчик.СтатистикаВыполнения.Очистить(); - Обработчик.Статус = "НеВыполнено"; - ИначеЕсли Обработчик.Статус = "Выполняется" Тогда - Обработчик.СтатистикаВыполнения.Вставить("КоличествоЗапусков", 0); - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - ПланОбновленияПуст = Истина; - Для Каждого ЦиклОбновления Из СведенияОбОбновлении.ПланОтложенногоОбновления Цикл - Если ЦиклОбновления.Свойство("ЗавершеноСОшибками") Тогда - ЦиклОбновления.Удалить("ЗавершеноСОшибками"); - КонецЕсли; - Если ЦиклОбновления.Обработчики.Количество() > 0 Тогда - ПланОбновленияПуст = Ложь; - КонецЕсли; - КонецЦикла; - - Если ПланОбновленияПуст Тогда - ОбновлениеИнформационнойБазыСлужебный.СоставитьПланОтложенногоОбновления(СведенияОбОбновлении, Истина); - КонецЕсли; + СброситьСтатусОбработчиков(Перечисления.СтатусыОбработчиковОбновления.Ошибка); + СброситьСтатусОбработчиков(Перечисления.СтатусыОбработчиковОбновления.Выполняется); ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); @@ -432,11 +407,44 @@ КонецПроцедуры +&НаСервере +Процедура СброситьСтатусОбработчиков(Статус) + + // АПК:1327-выкл нет конкурентной работы с регистром + // АПК:1328-выкл нет конкурентной работы с регистром + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Статус", Статус); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.Статус = &Статус"; + Обработчики = Запрос.Выполнить().Выгрузить(); + Для Каждого Обработчик Из Обработчики Цикл + НаборЗаписей = РегистрыСведений.ОбработчикиОбновления.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяОбработчика.Установить(Обработчик.ИмяОбработчика); + НаборЗаписей.Прочитать(); + + Запись = НаборЗаписей[0]; + Запись.Статус = Перечисления.СтатусыОбработчиковОбновления.НеВыполнялся; + СтатистикаВыполнения = Запись.СтатистикаВыполнения.Получить(); + СтатистикаВыполнения.Вставить("КоличествоЗапусков", 0); + Запись.СтатистикаВыполнения = Новый ХранилищеЗначения(СтатистикаВыполнения); + + НаборЗаписей.Записать(); + КонецЦикла; + // АПК:1327-вкл + // АПК:1328-вкл + +КонецПроцедуры + &НаСервере Процедура ОбновитьСтраницуОбновлениеЗавершено(СведенияОбОбновлении) ШаблонЗаголовка = НСтр("ru = 'Дополнительные процедуры обработки данных завершены %1 в %2'"); - ТекстСообщения = СообщениеОРезультатахОбновления(СведенияОбОбновлении); + ТекстСообщения = СообщениеОРезультатахОбновления(); Элементы.ИнформацияОтложенноеОбновлениеЗавершено.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, @@ -450,36 +458,24 @@ КонецПроцедуры &НаСервере -Функция СообщениеОРезультатахОбновления(СведенияОбОбновлении) +Функция СообщениеОРезультатахОбновления() - УспешноВыполненоОбработчиков = 0; - ВсегоОбработчиков = 0; - Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - ВсегоОбработчиков = ВсегоОбработчиков + СтрокаДереваВерсия.Строки.Количество(); - Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл - - Если Обработчик.Статус = "Выполнено" Тогда - УспешноВыполненоОбработчиков = УспешноВыполненоОбработчиков + 1; - КонецЕсли; - - КонецЦикла; - КонецЦикла; - КонецЦикла; + Прогресс = ПрогрессВыполненияОбработчиков(); - Если ВсегоОбработчиков = УспешноВыполненоОбработчиков Тогда + Если Прогресс.ВсегоОбработчиков = Прогресс.ВыполненоОбработчиков Тогда - Если ВсегоОбработчиков = 0 Тогда + Если Прогресс.ВсегоОбработчиков = 0 Тогда Элементы.ИнформацияОтложенныеОбработчикиОтсутствуют.Видимость = Истина; + Элементы.ИнформацияОтложенноеОбновлениеЗавершено.Видимость = Ложь; Элементы.ГруппаПереходКСпискуОтложенныхОбработчиков.Видимость = Ложь; ТекстСообщения = ""; Иначе - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все процедуры обновления выполнены успешно (%1)'"), УспешноВыполненоОбработчиков); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все процедуры обновления выполнены успешно (%1)'"), Прогресс.ВыполненоОбработчиков); КонецЕсли; Элементы.КартинкаЗавершено.Картинка = БиблиотекаКартинок.Успешно32; Иначе ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не все процедуры удалось выполнить (выполнено %1 из %2)'"), - УспешноВыполненоОбработчиков, ВсегоОбработчиков); + Прогресс.ВыполненоОбработчиков, Прогресс.ВсегоОбработчиков); Элементы.КартинкаЗавершено.Картинка = БиблиотекаКартинок.Ошибка32; КонецЕсли; Возврат ТекстСообщения; @@ -487,34 +483,56 @@ КонецФункции &НаСервере -Процедура ОбновитьИнформациюОХодеОбновления(СведенияОбОбновлении, ОбновлениеЗавершено = Ложь) +Процедура ОбновитьИнформациюОХодеОбновления(ОбновлениеЗавершено = Ложь) - ВыполненоОбработчиков = 0; - ВсегоОбработчиков = 0; - Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - ВсегоОбработчиков = ВсегоОбработчиков + СтрокаДереваВерсия.Строки.Количество(); - Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл - - Если Обработчик.Статус = "Выполнено" Тогда - ВыполненоОбработчиков = ВыполненоОбработчиков + 1; - КонецЕсли; - - КонецЦикла; - КонецЦикла; - КонецЦикла; + Прогресс = ПрогрессВыполненияОбработчиков(); - Если ВсегоОбработчиков = ВыполненоОбработчиков Тогда + Если Прогресс.ВсегоОбработчиков = Прогресс.ВыполненоОбработчиков Тогда ОбновлениеЗавершено = Истина; КонецЕсли; Элементы.ИнформацияСтатусОбновления.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выполнено: %1 из %2'"), - ВыполненоОбработчиков, - ВсегоОбработчиков); + Прогресс.ВыполненоОбработчиков, + Прогресс.ВсегоОбработчиков); КонецПроцедуры +&НаСервере +Функция ПрогрессВыполненияОбработчиков() + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен); + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(ОбработчикиОбновления.ИмяОбработчика) КАК Количество + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения + | И ОбработчикиОбновления.Статус = &Статус + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | КОЛИЧЕСТВО(ОбработчикиОбновления.ИмяОбработчика) КАК Количество + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения"; + Результат = Запрос.Выполнить().Выгрузить(); + ВыполненоОбработчиков = Результат[0].Количество; + ВсегоОбработчиков = Результат[1].Количество; + + Результат = Новый Структура; + Результат.Вставить("ВсегоОбработчиков", ВсегоОбработчиков); + Результат.Вставить("ВыполненоОбработчиков", ВыполненоОбработчиков); + + Возврат Результат; + +КонецФункции + &НаСервере Процедура УстановитьРасписаниеОтложенногоОбновления(НовоеРасписание) diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl index 02af96ac7..f925c6c64 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl @@ -47,7 +47,6 @@ Статус = "ВсеПроцедуры"; - ЗаполнитьТаблицуОбрабатываемыхДанных(СведенияОбОбновлении); СформироватьТаблицуОтложенныхОбработчиков(, Истина); Элементы.ГиперссылкаПрогрессОбновления.Видимость = ПараллельныйРежимИспользуется; @@ -267,36 +266,22 @@ Процедура ЗапуститьВыделеннуюПроцедуруДляОтладки(ИмяОбработчика) СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено; СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = Неопределено; - Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл - Если Обработчик.ИмяОбработчика <> ИмяОбработчика Тогда - Продолжить; - КонецЕсли; - - Обработчик.ЧислоПопыток = 0; - Если Обработчик.Статус = "Ошибка" Тогда - Обработчик.СтатистикаВыполнения.Очистить(); - Обработчик.Статус = "НеВыполнено"; - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - - Для Каждого ЦиклОбновления Из СведенияОбОбновлении.ПланОтложенногоОбновления Цикл - Если ЦиклОбновления.Свойство("ЗавершеноСОшибками") Тогда - ЦиклОбновления.Удалить("ЗавершеноСОшибками"); - КонецЕсли; - КонецЦикла; - ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас(Неопределено); + НаборЗаписей = РегистрыСведений.ОбработчикиОбновления.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяОбработчика.Установить(ИмяОбработчика); + НаборЗаписей.Прочитать(); - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + Обработчик = НаборЗаписей[0]; + Обработчик.Статус = Перечисления.СтатусыОбработчиковОбновления.НеВыполнялся; + Обработчик.СтатистикаВыполнения = Новый ХранилищеЗначения(Новый Соответствие); + + // АПК:1327-выкл нет конкурентной работы с регистром + НаборЗаписей.Записать(); + // АПК:1327-вкл + ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас(Неопределено); КонецПроцедуры @@ -438,26 +423,80 @@ Или СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ПриоритетВПлановомПорядке"); ОбновлениеВыполняется = (СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено); - Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - Если Не ПараллельныйРежимИспользуется - И ОписанияПодсистем[СтрокаДереваБиблиотека.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков = "Параллельно" - И СтрокаДереваВерсия.Строки.Количество() > 0 Тогда - ПараллельныйРежимИспользуется = Истина; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РежимВыполнения", Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Запрос.Текст = + "ВЫБРАТЬ + | ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика, + | ОбработчикиОбновления.Статус КАК Статус, + | ОбработчикиОбновления.Версия КАК Версия, + | ОбработчикиОбновления.ИмяБиблиотеки КАК ИмяБиблиотеки, + | ОбработчикиОбновления.ДлительностьОбработки КАК ДлительностьОбработки, + | ОбработчикиОбновления.РежимВыполнения КАК РежимВыполнения, + | ОбработчикиОбновления.ВерсияРегистрации КАК ВерсияРегистрации, + | ОбработчикиОбновления.ВерсияПорядок КАК ВерсияПорядок, + | ОбработчикиОбновления.Идентификатор КАК Идентификатор, + | ОбработчикиОбновления.ЧислоПопыток КАК ЧислоПопыток, + | ОбработчикиОбновления.ИнформацияОбОшибке КАК ИнформацияОбОшибке, + | ОбработчикиОбновления.Комментарий КАК Комментарий, + | ОбработчикиОбновления.Приоритет КАК Приоритет, + | ОбработчикиОбновления.ПроцедураПроверки КАК ПроцедураПроверки, + | ОбработчикиОбновления.ПроцедураЗаполненияДанныхОбновления КАК ПроцедураЗаполненияДанныхОбновления, + | ОбработчикиОбновления.ОчередьОтложеннойОбработки КАК ОчередьОтложеннойОбработки, + | ОбработчикиОбновления.ЗапускатьТолькоВГлавномУзле КАК ЗапускатьТолькоВГлавномУзле, + | ОбработчикиОбновления.ЗапускатьИВПодчиненномУзлеРИБСФильтрами КАК ЗапускатьИВПодчиненномУзлеРИБСФильтрами, + | ОбработчикиОбновления.Многопоточный КАК Многопоточный, + | ОбработчикиОбновления.ОбработкаПорцииЗавершена КАК ОбработкаПорцииЗавершена, + | ОбработчикиОбновления.ГруппаОбновления КАК ГруппаОбновления, + | ОбработчикиОбновления.ИтерацияЗапуска КАК ИтерацияЗапуска, + | ОбработчикиОбновления.РежимВыполненияОтложенногоОбработчика КАК РежимВыполненияОтложенногоОбработчика, + | ОбработчикиОбновления.ОбрабатываемыеДанные КАК ОбрабатываемыеДанные, + | ОбработчикиОбновления.СтатистикаВыполнения КАК СтатистикаВыполнения + |ИЗ + | РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + |ГДЕ + | ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения"; + Обработчики = Запрос.Выполнить().Выгрузить(); + Для Каждого Обработчик Из Обработчики Цикл + Если Не ПараллельныйРежимИспользуется Тогда + ПараллельныйРежимИспользуется = (Обработчик.РежимВыполненияОтложенногоОбработчика = Перечисления.РежимыВыполненияОтложенныхОбработчиков.Параллельно); + КонецЕсли; + + Если Не ПустаяСтрока(СтрокаПоиска) Тогда + Если СтрНайти(ВРег(Обработчик.Комментарий), ВРег(СтрокаПоиска)) = 0 + И СтрНайти(ВРег(Обработчик.ИмяОбработчика), ВРег(СтрокаПоиска)) = 0 Тогда + Продолжить; КонецЕсли; + КонецЕсли; + ДобавитьОтложенныйОбработчик(Обработчик, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение, ВыполняетсяИзменениеПриоритета); + + Если Обработчик.РежимВыполненияОтложенногоОбработчика <> Перечисления.РежимыВыполненияОтложенныхОбработчиков.Параллельно Тогда + Продолжить; + КонецЕсли; + + ИнформацияПоОбработчику = Обработчик.ОбрабатываемыеДанные.Получить(); + Если ИнформацияПоОбработчику = Неопределено Тогда + Продолжить; + КонецЕсли; + + ОбъектыОбработчика = Новый Соответствие; + ТаблицаОбрабатываемыеДанные = РеквизитФормыВЗначение("ОбрабатываемыеДанные"); + СписокОбъектов = Новый СписокЗначений; + ОбрабатываемыеОбъектыПООчередям = ИнформацияПоОбработчику.ДанныеОбработчика; + Для Каждого ОбрабатываемыйОбъект Из ОбрабатываемыеОбъектыПООчередям Цикл + ИмяОбъекта = ОбрабатываемыйОбъект.Ключ; + Очередь = ОбрабатываемыйОбъект.Значение.Очередь; + СтрокаТаблицы = ТаблицаОбрабатываемыеДанные.Добавить(); + СтрокаТаблицы.Обработчик = Обработчик.ИмяОбработчика; + СтрокаТаблицы.ИмяОбъекта = ИмяОбъекта; + СтрокаТаблицы.Очередь = Очередь; - Для Каждого СтрокаОбработчика Из СтрокаДереваВерсия.Строки Цикл - - Если Не ПустаяСтрока(СтрокаПоиска) Тогда - Если СтрНайти(ВРег(СтрокаОбработчика.Комментарий), ВРег(СтрокаПоиска)) = 0 - И СтрНайти(ВРег(СтрокаОбработчика.ИмяОбработчика), ВРег(СтрокаПоиска)) = 0 Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение, ВыполняетсяИзменениеПриоритета); - - КонецЦикла; + СписокОбъектов.Добавить(ИмяОбъекта); КонецЦикла; + ОбъектыОбработчика.Вставить(Обработчик.ИмяОбработчика, СписокОбъектов); + + ОбъектыОбработчикаАдрес = ПоместитьВоВременноеХранилище(ОбъектыОбработчика, УникальныйИдентификатор); + ЗначениеВРеквизитФормы(ТаблицаОбрабатываемыеДанные, "ОбрабатываемыеДанные"); КонецЦикла; Если Статус = "ЖелательноБыстрее" Тогда @@ -501,7 +540,7 @@ СтрокаСписка = ОтложенныеОбработчики.НайтиСтроки(ПараметрыОтбора)[0]; КонецЕсли; - СтатистикаВыполнения = СтрокаОбработчика.СтатистикаВыполнения; + СтатистикаВыполнения = СтрокаОбработчика.СтатистикаВыполнения.Получить(); НачалоОбработкиДанных = СтатистикаВыполнения["НачалоОбработкиДанных"]; ЗавершениеОбработкиДанных = СтатистикаВыполнения["ЗавершениеОбработкиДанных"]; @@ -530,14 +569,14 @@ ШаблонИнформацияОПроцедуреОбновления = НСтр("ru = 'Процедура ""%1"" обработки данных %2.'"); СтрокаСписка.Статус = ?(СтрокаОбработчика.Статус = "НеВыполнено", "НеЗапускалась", СтрокаОбработчика.Статус); - Если СтрокаОбработчика.Статус = "Выполнено" Тогда + Если СтрокаОбработчика.Статус = Перечисления.СтатусыОбработчиковОбновления.Выполнен Тогда ОбработчикиНеВыполнялись = Ложь; ПредставлениеСтатусаВыполнения = НСтр("ru = 'завершилась успешно'"); СтрокаСписка.СтатусПредставление = НСтр("ru = 'Выполнено'"); СтрокаСписка.СтатусКартинка = БиблиотекаКартинок.Успешно; СтрокаСписка.ДлительностьВыполнения = ДлительностьВыполненияПроцедурыОбновления(ДлительностьВыполнения); - ИначеЕсли СтрокаОбработчика.Статус = "Выполняется" Тогда + ИначеЕсли СтрокаОбработчика.Статус = Перечисления.СтатусыОбработчиковОбновления.Выполняется Тогда ОбработчикиНеВыполнялись = Ложь; ВыполненыВсеОбработчики = Ложь; @@ -549,7 +588,7 @@ Иначе СтрокаСписка.СтатусПредставление = НСтр("ru = 'Выполняется'"); КонецЕсли; - ИначеЕсли СтрокаОбработчика.Статус = "Ошибка" Тогда + ИначеЕсли СтрокаОбработчика.Статус = Перечисления.СтатусыОбработчиковОбновления.Ошибка Тогда ОбработчикиНеВыполнялись = Ложь; ВыполненыВсеОбработчики = Ложь; @@ -559,7 +598,7 @@ СтрокаСписка.СтатусПредставление = НСтр("ru = 'Ошибка'"); СтрокаСписка.СтатусКартинка = БиблиотекаКартинок.Остановить; СтрокаСписка.ДлительностьВыполнения = ДлительностьВыполненияПроцедурыОбновления(ДлительностьВыполнения); - ИначеЕсли СтрокаОбработчика.Статус = "Приостановлен" Тогда + ИначеЕсли СтрокаОбработчика.Статус = Перечисления.СтатусыОбработчиковОбновления.Приостановлен Тогда ОбработчикиНеВыполнялись = Ложь; ВыполненыВсеОбработчики = Ложь; @@ -589,7 +628,7 @@ СтрокаСписка.Приоритет = "ВПлановомПорядке"; КонецЕсли; - Если СтрокаОбработчика.Статус <> "Ошибка" Тогда + Если СтрокаОбработчика.Статус <> Перечисления.СтатусыОбработчиковОбновления.Ошибка Тогда СтрокаСписка.ИнформацияОПроцедуреОбновления = СтрокаОбработчика.Комментарий + Отступ + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -641,35 +680,6 @@ КонецФункции -&НаСервере -Процедура ЗаполнитьТаблицуОбрабатываемыхДанных(СведенияОбОбновлении) - - ОбъектыОбработчика = Новый Соответствие; - - ИсходныеДанные = СведенияОбОбновлении.ОбрабатываемыеДанные; - ТаблицаОбрабатываемыеДанные = РеквизитФормыВЗначение("ОбрабатываемыеДанные"); - Для Каждого ИнформацияПоОбработчику Из ИсходныеДанные Цикл - СписокОбъектов = Новый СписокЗначений; - Обработчик = ИнформацияПоОбработчику.Ключ; - ОбрабатываемыеОбъектыПООчередям = ИнформацияПоОбработчику.Значение.ДанныеОбработчика; - Для Каждого ОбрабатываемыйОбъект Из ОбрабатываемыеОбъектыПООчередям Цикл - ИмяОбъекта = ОбрабатываемыйОбъект.Ключ; - Очередь = ОбрабатываемыйОбъект.Значение.Очередь; - СтрокаТаблицы = ТаблицаОбрабатываемыеДанные.Добавить(); - СтрокаТаблицы.Обработчик = Обработчик; - СтрокаТаблицы.ИмяОбъекта = ИмяОбъекта; - СтрокаТаблицы.Очередь = Очередь; - - СписокОбъектов.Добавить(ИмяОбъекта); - КонецЦикла; - ОбъектыОбработчика.Вставить(Обработчик, СписокОбъектов); - КонецЦикла; - - ОбъектыОбработчикаАдрес = ПоместитьВоВременноеХранилище(ОбъектыОбработчика, УникальныйИдентификатор); - ЗначениеВРеквизитФормы(ТаблицаОбрабатываемыеДанные, "ОбрабатываемыеДанные"); - -КонецПроцедуры - &НаСервере Функция ИзменяемыеОбработчики(Обработчик, ОбрабатываемыеДанныеТаблица, Очередь, ПриоритетЖелательноБыстрее, СписокОбъектов = Неопределено) diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo index 389ca8765..dd4788351 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo @@ -9,6 +9,7 @@ <key>ru</key> <value>Результаты обновления программы</value> </synonym> + <comment>АПК:78-выкл для вызова различных этапов обновления</comment> <defaultForm>DataProcessor.РезультатыОбновленияПрограммы.Form.ИндикацияХодаОтложенногоОбновленияИБ</defaultForm> <includeHelpInContents>true</includeHelpInContents> <help> diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl index 8b962ffdb..fd07ece11 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl @@ -225,6 +225,7 @@ // Кнопка "Пересканировать" замещает выделенную (или единственную, если она одна) картинку // (или добавляет в конец новые картинки, если ничего не выделено) новым изображением (изображениями). +// &НаКлиенте Процедура Пересканировать(Команда) diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl index 157b285fc..95fd3d7a8 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl @@ -254,6 +254,8 @@ ОповещениеОЗакрытии = Новый ОписаниеОповещения("СкрытиеКонфиденциальнойИнформацииЗавершение", ЭтотОбъект); МодульДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатДлительнойОперации, ОповещениеОЗакрытии); Иначе + ОповеститьСпискиОбИзменении(); + Оповестить("СкрытиеКонфиденциальнойИнформации"); СообщитьПользователю(НСтр("ru = 'Скрытие конфиденциальной информации завершено.'")); КонецЕсли; @@ -339,10 +341,44 @@ ВызватьИсключение Результат.ПодробноеПредставлениеОшибки; КонецЕсли; + ОповеститьСпискиОбИзменении(); + Оповестить("СкрытиеКонфиденциальнойИнформации"); + СообщитьПользователю(НСтр("ru = 'Скрытие конфиденциальной информации завершено.'")); КонецПроцедуры +&НаКлиенте +Процедура ОповеститьСпискиОбИзменении() + + Для Каждого ВидОбъектов Из ОбрабатываемыеОбъекты.ПолучитьЭлементы() Цикл + Если ВидОбъектов.Имя <> "Справочники" + И ВидОбъектов.Имя <> "Документы" + И ВидОбъектов.Имя <> "ПланыВидовХарактеристик" + И ВидОбъектов.Имя <> "ПланыСчетов" + И ВидОбъектов.Имя <> "ПланыВидовРасчета" + И ВидОбъектов.Имя <> "БизнесПроцессы" + И ВидОбъектов.Имя <> "Задачи" Тогда + Продолжить; + КонецЕсли; + + Если ВидОбъектов.Пометка = 0 Тогда + Продолжить; + КонецЕсли; + + Для Каждого ОбъектВида Из ВидОбъектов.ПолучитьЭлементы() Цикл + Если ОбъектВида.Пометка = 0 Тогда + Продолжить; + КонецЕсли; + + Для Каждого Тип Из ОбъектВида.ТипЗначения.Типы() Цикл + ОповеститьОбИзменении(Тип); + КонецЦикла; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + &НаСервере Функция ЗаданиеВыполнено(ИдентификаторФоновогоЗадания = Неопределено) МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl index 2854b587e..c36c6487a 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl @@ -76,6 +76,16 @@ КонецПроцедуры +// Параметры: +// ОбъектМетаданных - ОбъектМетаданныхРегистрБухгалтерии +// - ОбъектМетаданныхРегистрНакопления +// - ОбъектМетаданныхРегистрРасчета +// - ОбъектМетаданныхРегистрСведений +// ПараметрыОтбора - Неопределено +// - Структура: +// * ОсновноеПолеОтбора - Строка +// * Субъекты - Массив +// Процедура ОбработатьРегистры(ОбъектМетаданных, ПараметрыОтбора) Если ОбъектМетаданных.Тип = "РегистрыСведений" Тогда @@ -235,7 +245,8 @@ Для Каждого Регистратор Из Регистраторы Цикл - НаборЗаписейРегистра.Отбор.Регистратор.Установить(Регистратор); + ПолеОтбора = НаборЗаписейРегистра.Отбор.Регистратор; // ЭлементОтбора + ПолеОтбора.Установить(Регистратор); ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора, Истина); КонецЦикла; @@ -261,7 +272,8 @@ Пока Выборка.Следующий() Цикл - НаборЗаписейРегистра.Отбор[ИмяПоляОтбора].Установить(Выборка[ИмяПоляОтбора]); + ЭлементОтбора = НаборЗаписейРегистра.Отбор[ИмяПоляОтбора]; // ЭлементОтбора + ЭлементОтбора.Установить(Выборка[ИмяПоляОтбора]); Если ЗначениеЗаполнено(Субъекты) Тогда ОбработатьНаборЗаписейСОтборомСубъекта(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора); @@ -281,7 +293,8 @@ Для Каждого ИмяИзмерения Из ИменаИзмеренийСТипомСубъекта Цикл Для Каждого Субъект Из Субъекты Цикл - НаборЗаписейРегистра.Отбор[ИмяИзмерения].Установить(Субъект); + ЭлементОтбора = НаборЗаписейРегистра.Отбор[ИмяИзмерения]; // ЭлементОтбора + ЭлементОтбора.Установить(Субъект); ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных, , Истина); КонецЦикла; @@ -289,6 +302,20 @@ КонецПроцедуры + +// Параметры: +// НаборЗаписейРегистра - РегистрРасчетаНаборЗаписейИмяРегистраРасчета +// - РегистрБухгалтерииНаборЗаписейИмяРегистраБухгалтерии +// - РегистрНакопленияНаборЗаписейИмяРегистраНакопления +// - РегистрСведенийНаборЗаписейИмяРегистраСведений +// ОбъектМетаданных - ДеревоЗначений: +// * Имя - Строка +// ПараметрыОтбора - Структура +// - Неопределено: +// * ОсновноеПолеОтбора - Строка +// * Субъекты - Массив +// РегистрироватьНаУзлах - Булево +// Процедура ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора = Неопределено, РегистрироватьНаУзлах = Ложь) НаборЗаписейРегистра.Прочитать(); @@ -374,6 +401,15 @@ КонецПроцедуры + +// Параметры: +// ОбъектМетаданных - ДеревоЗначений: +// * Имя - Строка +// ПараметрыОтбора - Структура +// - Неопределено: +// * ОсновноеПолеОтбора - Строка +// * Субъекты - Массив +// Процедура ОбработатьОбъектМетаданных(ОбъектМетаданных, ПараметрыОтбора) ОбработкаПорциями = Ложь; @@ -387,7 +423,8 @@ Результат = НайтиПоСсылкам(Субъекты, Новый Массив, МассивОбъектов, Новый Массив); Результат.Свернуть("Данные"); - Результат.Колонки.Данные.Имя = "Ссылка"; + Колонка = Результат.Колонки.Данные; // КолонкаТаблицыЗначений + Колонка.Имя = "Ссылка"; Если Результат.Количество() = 0 И Объект = Субъекты[0].Метаданные() Тогда @@ -573,7 +610,8 @@ ИмяРегистраВерсииОбъектов = "ВерсииОбъектов"; НаборЗаписей = РегистрыСведений[ИмяРегистраВерсииОбъектов].СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Объект.Установить(СтрокаРезультата.Ссылка); + ЭлементОтбора = НаборЗаписей.Отбор.Объект; // ЭлементОтбора + ЭлементОтбора.Установить(СтрокаРезультата.Ссылка); ЗаписатьДанные(НаборЗаписей, Истина); @@ -613,10 +651,16 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции формирования дерева метаданных. +// Параметры: +// Параметры - Структура: +// * ДеревоОбрабатываемыхОбъектов - ДеревоЗначений: +// ** Имя - Строка +// АдресХранилища - Строка +// Процедура ЗаполнитьДеревоОбрабатываемыхОбъектов(Параметры, АдресХранилища) Экспорт - ОбрабатываемыеМетаданные = Параметры.ОбрабатываемыеМетаданные; - ДеревоОбрабатываемыхОбъектов = Параметры.ДеревоОбрабатываемыхОбъектов; + ОбрабатываемыеМетаданные = Параметры.ОбрабатываемыеМетаданные; // ДеревоЗначений + ДеревоОбрабатываемыхОбъектов = Параметры.ДеревоОбрабатываемыхОбъектов; // ДеревоЗначений СохраненныеНастройки = Параметры.СохраненныеНастройки; РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); @@ -634,7 +678,8 @@ СтрокаДерева.ПолноеИмя = ЭлементИмениПоТипуМетаданных(СтрокаДерева.Имя); СкрываемыеОбъекты = СкрываемыеОбъектыПоТипам[ТипМетаданных.Ключ]; - Для Каждого ОбъектМетаданных Из Метаданные[ТипМетаданных.Ключ] Цикл + ОбъектыМетаданных = Метаданные[ТипМетаданных.Ключ]; // Массив из ОбъектМетаданных + Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл Если РазделениеВключено Тогда ПолноеИмя = СтрокаДерева.ПолноеИмя + "." + ОбъектМетаданных.Имя; @@ -690,6 +735,12 @@ Возврат СкрываемыеОбъектыПоТипам; КонецФункции +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных +// СтрокаДерева - СтрокаДереваЗначений: +// * Имя - Строка +// ТипМетаданных - Строка +// Процедура ДобавитьОбъекты(ОбъектМетаданных, СтрокаДерева, ТипМетаданных) Если ТипМетаданных.Ключ = "Константы" Тогда @@ -715,6 +766,7 @@ СтрокаОбъект.Картинка = КартинкиОбъектов[ТипМетаданных.Ключ]; СтрокаОбъект.Тип = ТипМетаданных.Ключ; СтрокаОбъект.ПолноеИмя = СтрокаДерева.ПолноеИмя + "." + СтрокаОбъект.Имя; + СтрокаОбъект.ТипЗначения = ОписаниеТипаОбъекта(СтрокаДерева.ПолноеИмя, СтрокаОбъект.Имя); ЭтоРегистр = (СтрНайти(ТипМетаданных.Ключ, "Регистры") > 0); // Добавление стандартных реквизитов. @@ -742,6 +794,52 @@ КонецПроцедуры +Функция ОписаниеТипаОбъекта(КлассОМ, ИмяОбъекта) + + Если ВРег(КлассОМ) = "ПЛАНОБМЕНА" Тогда + Менеджер = ПланыОбмена; + + ИначеЕсли ВРег(КлассОМ) = "СПРАВОЧНИК" Тогда + Менеджер = Справочники; + + ИначеЕсли ВРег(КлассОМ) = "ДОКУМЕНТ" Тогда + Менеджер = Документы; + + ИначеЕсли ВРег(КлассОМ) = "ЖУРНАЛДОКУМЕНТОВ" Тогда + Менеджер = ЖурналыДокументов; + + ИначеЕсли ВРег(КлассОМ) = "ПЕРЕЧИСЛЕНИЕ" Тогда + Менеджер = Перечисления; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + Менеджер = ПланыВидовХарактеристик; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНСЧЕТОВ" Тогда + Менеджер = ПланыСчетов; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВРАСЧЕТА" Тогда + Менеджер = ПланыВидовРасчета; + + ИначеЕсли ВРег(КлассОМ) = "БИЗНЕСПРОЦЕСС" Тогда + Менеджер = БизнесПроцессы; + + ИначеЕсли ВРег(КлассОМ) = "ЗАДАЧА" Тогда + Менеджер = Задачи; + + Иначе + Менеджер = Неопределено; + КонецЕсли; + + Если Менеджер <> Неопределено Тогда + Массив = Новый Массив; + Массив.Добавить(ТипЗнч(Менеджер[ИмяОбъекта].ПустаяСсылка())); + Возврат Новый ОписаниеТипов(Массив); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + Процедура ДобавитьСвойства(ОбъектМетаданных, СтрокаДерева, Тип, ЕстьОбрабатываемыеСвойства) Если Тип = "СтандартныеРеквизиты" Тогда @@ -818,7 +916,6 @@ КонецЦикла; Представление = " (" + Представление + ")"; - Возврат Представление; КонецФункции @@ -1020,6 +1117,9 @@ //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции. +// Параметры: +// ОбъектМетаданных - ОбъектМетаданныхКонстанта +// Процедура ОбработатьКонстанты(ОбъектМетаданных) ЗначениеКонстанты = Константы[ОбъектМетаданных.Имя].Получить(); @@ -1058,9 +1158,7 @@ Процедура ОбработатьСтроку(Свойство, ПараметрыСвойства, Обработано) - Индекс = ГенераторСлучайныхЧисел.СлучайноеЧисло(100000, 999999); - Индекс = Строка(Индекс); - Индекс = СтрЗаменить(Индекс, Символы.НПП, ""); + Индекс = XMLСтрока(ГенераторСлучайныхЧисел.СлучайноеЧисло(100000, 999999)); ПравилоОбработки = ПравилоСтрока; Если ПараметрыСвойства.ПравилоОбработки.Количество() > 0 Тогда diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl index 5fc4144c2..c9a412e78 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -278,7 +278,7 @@ // Таблица сопоставления объектов. // // Возвращаемое значение: -// ТаблицаЗначений - Таблица сопоставления объектов. +// ТаблицаЗначений - таблица сопоставления объектов. // Функция ТаблицаСопоставления() Экспорт @@ -309,7 +309,7 @@ // Количество объектов текущего типа данных в этой информационной базе. // // Возвращаемое значение: -// Число - Количество объектов текущего типа данных в этой информационной базе. +// Число - количество объектов текущего типа данных в этой информационной базе. // Функция КоличествоОбъектовВПриемнике() Экспорт @@ -320,7 +320,7 @@ // Количество объектов, которые сопоставлены для текущего типа данных. // // Возвращаемое значение: -// Число - Количество объектов, которые сопоставлены для текущего типа данных. +// Число - количество объектов, которые сопоставлены для текущего типа данных. // Функция КоличествоОбъектовСопоставленных() Экспорт @@ -331,7 +331,7 @@ // Количество объектов, которые не сопоставлены для текущего типа данных. // // Возвращаемое значение: -// Число - Количество объектов, которые не сопоставлены для текущего типа данных. +// Число - количество объектов, которые не сопоставлены для текущего типа данных. // Функция КоличествоОбъектовНесопоставленных() Экспорт diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl index eff1cf546..d2e9d5817 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl @@ -71,7 +71,7 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы // Параметры: -// Элемент - ПолеФормы - +// Элемент - ПолеФормы // &НаКлиенте Процедура Подключаемый_ОбработатьНажатиеНаГиперссылку(Элемент, СтандартнаяОбработка) @@ -104,7 +104,7 @@ КонецПроцедуры // Параметры: -// Элемент - ПолеФормы - +// Элемент - ПолеФормы // &НаКлиенте Процедура Подключаемый_ОбработатьНажатиеНаКартинку(Элемент) diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl index 1bf0370bf..f0d1606bf 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -78,7 +78,7 @@ // Получает сообщение обмена с заданного ресурса во временный каталог сообщения обмена. // // Параметры: -// Нет. +// ПроверкаНаличия - Булево // // Возвращаемое значение: // Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Commands/УдалениеПомеченныхОбъектов/CommandModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Commands/УдалениеПомеченныхОбъектов/CommandModule.bsl index 98e99f74d..f47a189e9 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Commands/УдалениеПомеченныхОбъектов/CommandModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Commands/УдалениеПомеченныхОбъектов/CommandModule.bsl @@ -10,7 +10,9 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("Обработка.УдалениеПомеченныхОбъектов.Форма", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); + ОткрытьФорму("Обработка.УдалениеПомеченныхОбъектов.Форма", , ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, + ПараметрыВыполненияКоманды.НавигационнаяСсылка, , РежимОткрытияОкнаФормы.Независимый); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Form.form new file mode 100644 index 000000000..9babfc9d7 --- /dev/null +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Form.form @@ -0,0 +1,928 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <title> + <key>ru</key> + <value>Область поиска</value> + + + ГруппаОбластьПоиска + 29 + + КомандаОК + 39 + true + true + + true + + + КомандаОКРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + UsualButton + Form.Command.КомандаОК + Auto + true + true + true + UserCmds + Auto + + + ПереключательВездеВРазделах + 1 + true + true + + true + + + ПереключательВездеВРазделах + + None + + OnChange + ОбластьПоискаПриИзменении + + + ПереключательВездеВРазделахРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПереключательВездеВРазделахКонтекстноеМеню + 2 + true + + RadioButtonField + Enter + true + Left + true + + RadioButtons + + + ru + Везде + + + 0 + + + + + ru + В разделах + + + 1 + + + Vertical + + + + КоманднаяПанель + 31 + + Команды + 33 + + УстановитьФлажки + 37 + true + true + + true + + + УстановитьФлажкиРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СнятьФлажки + 35 + true + true + + true + + + СнятьФлажкиРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + КомандыРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + Compact + + + + РазвернутьВсе + 41 + true + true + + true + + + РазвернутьВсеРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Command.РазвернутьВсе + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СвернутьВсе + 43 + true + true + + true + + + СвернутьВсеРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Command.СвернутьВсе + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + КоманднаяПанельРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + CommandBar + + Right + Form + + + true + true + + true + + + ГруппаОбластьПоискаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ДеревоРазделовПоиска + 4 + true + true + + true + + + ДеревоРазделовПоиска + + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + ShowRowRearrangement + SortListAsc + SortListDesc + Tree + + Группа + 23 + + Пометка + 20 + true + true + + true + + + ДеревоРазделовПоиска.Пометка + + None + + OnChange + ДеревоРазделовПоискаПометкаПриИзменении + + + ПометкаРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ПометкаКонтекстноеМеню + 21 + true + + CheckBoxField + Auto + true + Left + true + + true + + + + Картинка + 45 + true + true + + true + + + ДеревоРазделовПоиска.Картинка + + None + + КартинкаРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + КартинкаКонтекстноеМеню + 46 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + + 1 + + + + + Раздел + 17 + true + true + + true + + + ДеревоРазделовПоиска.Раздел + + + РазделРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + РазделКонтекстноеМеню + 18 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ГруппаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + None + + ДеревоРазделовПоискаКоманднаяПанель + 6 + Left + true + + + ДеревоРазделовПоискаСтрокаПоиска + 8 + + ДеревоРазделовПоискаСтрокаПоискаРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ДеревоРазделовПоискаСтрокаПоискаКонтекстноеМеню + 9 + true + + ДеревоРазделовПоиска + + true + + + + ДеревоРазделовПоискаСостояниеПросмотра + 11 + + ДеревоРазделовПоискаСостояниеПросмотраРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ДеревоРазделовПоискаСостояниеПросмотраКонтекстноеМеню + 12 + true + + ViewStatusAddition + ДеревоРазделовПоиска + + true + + + + ДеревоРазделовПоискаУправлениеПоиском + 14 + + ДеревоРазделовПоискаУправлениеПоискомРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ДеревоРазделовПоискаУправлениеПоискомКонтекстноеМеню + 15 + true + + SearchControlAddition + ДеревоРазделовПоиска + + true + + + + ДеревоРазделовПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ДеревоРазделовПоискаКонтекстноеМеню + 5 + true + + Tree + true + true + true +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + true +
    + Top + true + + ФормаКоманднаяПанель + -1 + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Close + CustomizeForm + Ignore + No + RestoreValues + Retry + SaveValues + Yes + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ПолнотекстовыйПоискВДанных + + + true + + + true + +
    true
    +
    + + ПереключательВездеВРазделах + + <key>ru</key> + <value>Переключатель везде в разделах</value> + + 2 + + Number + + 1 + true + + + + true + + + true + + + + ДеревоРазделовПоиска + + <key>ru</key> + <value>Дерево разделов поиска</value> + + 3 + + ValueTree + + + true + + + true + + + Раздел + + <key>ru</key> + <value>Раздел</value> + + 1 + + String + + + + true + + + true + + + + Пометка + + <key>ru</key> + <value>Пометка</value> + + 2 + + Number + + 1 + true + + + + true + + + true + + + + ЭтоОбъектМетаданных + 3 + + Boolean + + + true + + + true + + + + ПутьКДанным + 4 + + String + + + + true + + + true + + + + ОбъектМД + 5 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 6 + + Picture + + + true + + + true + + + + ЭтоПодраздел + 7 + + Boolean + + + true + + + true + + + + + ОбластиПоиска + 4 + + ValueList + + + true + + + true + + + + + + + ТекущийРаздел + 5 + + String + + + + true + + + true + + + + ИдентификаторСтроки + 6 + + Number + + 10 + + + + true + + + true + + + + УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 1 + + ru + Установить флажки + + + true + + + StdPicture.CheckAll + + + + УстановитьФлажки + + + DontUse + Auto + + + СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 2 + + ru + Снять флажки + + + true + + + StdPicture.UncheckAll + + + + СнятьФлажки + + + 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 + + + ОбластиПоиска + + ValueList + + + + + + + + diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Help/ru.html new file mode 100644 index 000000000..5ad24c67a --- /dev/null +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Help/ru.html @@ -0,0 +1,8 @@ + +

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

    +

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

    +

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

    +

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

    +
    • С помощью переключателя укажите В разделах. +
    • Выберите разделы и списки, в которых будет производиться поиск, с помощью флажков. +
    • Нажмите ОК.
    \ 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..b9e492983 --- /dev/null +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Module.bsl @@ -0,0 +1,814 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + + ОбластиПоиска = Параметры.ОбластиПоиска; + ПереключательВездеВРазделах = ОбластиПоиска.Количество(); + + ВыбранныеИдентификаторы = Новый Соответствие(); + ИмяИдентификаторы = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(Параметры.ОбластиПоиска.ВыгрузитьЗначения()); + Для Каждого Элемент Из ИмяИдентификаторы Цикл + ВыбранныеИдентификаторы.Вставить(Элемент.Значение, Истина); + КонецЦикла; + ПриЗаполненииДереваРазделовПоиска(ВыбранныеИдентификаторы); + + ИскатьВРазделах = ИскатьВРазделах(ПереключательВездеВРазделах); + ОбновитьДоступностьПриПереключенииВездеВРазделах(Элементы.ДеревоРазделовПоиска, ИскатьВРазделах); + ОбновитьДоступностьПриПереключенииВездеВРазделах(Элементы.Команды, ИскатьВРазделах); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + РазвернутьТекущийРазделДереваРазделов(Элементы.ДеревоРазделовПоиска) + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ОбластьПоискаПриИзменении(Элемент) + + ИскатьВРазделах = ИскатьВРазделах(ПереключательВездеВРазделах); + ОбновитьДоступностьПриПереключенииВездеВРазделах(Элементы.ДеревоРазделовПоиска, ИскатьВРазделах); + ОбновитьДоступностьПриПереключенииВездеВРазделах(Элементы.Команды, ИскатьВРазделах); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоРазделовПоиска + +&НаКлиенте +Процедура ДеревоРазделовПоискаПометкаПриИзменении(Элемент) + + ЭлементДерева = ТекущийЭлемент.ТекущиеДанные; + + ПриПометкеЭлементаДерева(ЭлементДерева); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаОК(Команда) + + ТекущиеДанные = Элементы.ДеревоРазделовПоиска.ТекущиеДанные; + + ТекущийРаздел = ""; + Если ТекущиеДанные <> Неопределено Тогда + ТекущийРаздел = ТекущиеДанные.Раздел; + КонецЕсли; + ИдентификаторСтроки = Элементы.ДеревоРазделовПоиска.ТекущаяСтрока; + + НастройкиПоиска = Новый СписокЗначений(); + Если ИскатьВРазделах(ПереключательВездеВРазделах) Тогда + НастройкиПоиска = СписокОбластейДереваРазделов(); + КонецЕсли; + + Закрыть(НастройкиПоиска); + +КонецПроцедуры + +&НаКлиенте +Процедура СнятьФлажки(Команда) + + ПометитьВсеЭлементыДереваРекурсивно(ДеревоРазделовПоиска, ПометкаФлажокНеУстановлен()); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлажки(Команда) + + ПометитьВсеЭлементыДереваРекурсивно(ДеревоРазделовПоиска, ПометкаФлажокУстановлен()); + +КонецПроцедуры + +&НаКлиенте +Процедура СвернутьВсе(Команда) + + КоллекцияЭлементовДерева = ДеревоРазделовПоиска.ПолучитьЭлементы(); + ЭлементДеревоРазделов = Элементы.ДеревоРазделовПоиска; + + Для каждого ЭлементДерева Из КоллекцияЭлементовДерева Цикл + ЭлементДеревоРазделов.Свернуть(ЭлементДерева.ПолучитьИдентификатор()); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьВсе(Команда) + + КоллекцияЭлементовДерева = ДеревоРазделовПоиска.ПолучитьЭлементы(); + ЭлементДеревоРазделов = Элементы.ДеревоРазделовПоиска; + + Для каждого ЭлементДерева Из КоллекцияЭлементовДерева Цикл + ЭлементДеревоРазделов.Развернуть(ЭлементДерева.ПолучитьИдентификатор(), Истина); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область СлужебныеОбработчикиСобытий + +&НаСервере +Процедура ПриЗаполненииДереваРазделовПоиска(ВыбранныеИдентификаторы) + + Дерево = РеквизитФормыВЗначение("ДеревоРазделовПоиска"); + ЗаполнитьДеревоРазделовПоиска(Дерево, ВыбранныеИдентификаторы); + ЗначениеВРеквизитФормы(Дерево, "ДеревоРазделовПоиска"); + + ПриУстановкеОбластиПоиска(ДеревоРазделовПоиска); + +КонецПроцедуры + +&НаСервере +Процедура ПриУстановкеОбластиПоиска(ДеревоРазделовПоиска) + + Для каждого ОбластьПоиска Из ОбластиПоиска Цикл + + ЭлементДерева = Неопределено; + ТекущийРаздел = Неопределено; + ВложенныеЭлементы = ДеревоРазделовПоиска.ПолучитьЭлементы(); + + // Поиск элемента дерева по пути к данным. + + ПутьКДанным = ОбластьПоиска.Представление; + Разделы = СтрРазделить(ПутьКДанным, ",", Ложь); + Для каждого ТекущийРаздел Из Разделы Цикл + Для каждого ЭлементДерева Из ВложенныеЭлементы Цикл + + Если ЭлементДерева.Раздел = ТекущийРаздел Тогда + ВложенныеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + Прервать; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + + // Если элемент дерева найден, установка пометки. + + Если ЭлементДерева <> Неопределено + И ЭлементДерева.Раздел = ТекущийРаздел Тогда + + ЭлементДерева.Пометка = ПометкаФлажокУстановлен(); + ПометитьЭлементыРодителейРекурсивно(ЭлементДерева); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПриПометкеЭлементаДерева(ЭлементДерева) + + ЭлементДерева.Пометка = СледующееЗначениеПометкиЭлемента(ЭлементДерева); + + Если ТребуетсяПометитьВложенныеЭлементы(ЭлементДерева) Тогда + ПометитьВложенныеЭлементыРекурсивно(ЭлементДерева); + КонецЕсли; + + Если ЭлементДерева.Пометка = ПометкаФлажокНеУстановлен() Тогда + ЭлементДерева.Пометка = ЗначениеПометкиОтносительноВложенныхЭлементов(ЭлементДерева); + КонецЕсли; + + ПометитьЭлементыРодителейРекурсивно(ЭлементДерева); + +КонецПроцедуры + +#КонецОбласти + +#Область МодельПредставления + +&НаКлиентеНаСервереБезКонтекста +Функция ПометкаФлажокНеУстановлен() + + Возврат 0; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПометкаФлажокУстановлен() + + Возврат 1; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПометкаКвадрат() + + Возврат 2; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗаполнитьДеревоРазделовПоиска(ДеревоРазделовПоиска, ВыбранныеИдентификаторы) + + ДобавитьСтрокиДереваРазделовПоискаПоПодсистемамРекурсивно(ДеревоРазделовПоиска, Метаданные.Подсистемы, ВыбранныеИдентификаторы); + ЗаполнениеСлужебныхСвойствПослеПолученияРазделовРекурсивно(ДеревоРазделовПоиска); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ДобавитьСтрокиДереваРазделовПоискаПоПодсистемамРекурсивно(ТекущаяСтрокаДерева, Подсистемы, ВыбранныеИдентификаторы) + + Для каждого Подсистема Из Подсистемы Цикл + + Если ОбъектМетаданныхДоступен(Подсистема) Тогда + + НоваяСтрокаПодсистема = НовыйЭлементДереваРаздел(ТекущаяСтрокаДерева, Подсистема); + + ДобавитьСтрокиДереваРазделовПоискаПоСоставуРекурсивно(НоваяСтрокаПодсистема, Подсистема.Состав, ВыбранныеИдентификаторы); + + Если Подсистема.Подсистемы.Количество() > 0 Тогда + ДобавитьСтрокиДереваРазделовПоискаПоПодсистемамРекурсивно(НоваяСтрокаПодсистема, Подсистема.Подсистемы, ВыбранныеИдентификаторы); + КонецЕсли; + + Если НоваяСтрокаПодсистема.Строки.Количество() = 0 Тогда + ТекущаяСтрокаДерева.Строки.Удалить(НоваяСтрокаПодсистема); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ДобавитьСтрокиДереваРазделовПоискаПоСоставуРекурсивно(ТекущаяСтрокаДерева, СоставПодсистемы, ВыбранныеИдентификаторы) + + Для каждого ОбъектПодсистемы Из СоставПодсистемы Цикл + + Если ОбщегоНазначения.ЭтоСправочник(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоДокумент(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоПланВидовРасчета(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоПланВидовХарактеристик(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоПланОбмена(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоПланСчетов(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоБизнесПроцесс(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоЗадача(ОбъектПодсистемы) Тогда + + Если ОбъектМетаданныхДоступен(ОбъектПодсистемы) Тогда + + НоваяСтрокаОбъект = НовыйЭлементДереваОбъектМетаданных(ТекущаяСтрокаДерева, ОбъектПодсистемы); + НоваяСтрокаОбъект.Пометка = ВыбранныеИдентификаторы[НоваяСтрокаОбъект.ОбъектМД]; + Если ОбщегоНазначения.ЭтоСправочник(ОбъектПодсистемы) Тогда + ПодчиненныеСправочники = ПодчиненныеСправочники(ОбъектПодсистемы); + ДобавитьСтрокиДереваРазделовПоискаПоСоставуРекурсивно(НоваяСтрокаОбъект, ПодчиненныеСправочники, ВыбранныеИдентификаторы); + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ОбщегоНазначения.ЭтоЖурналДокументов(ОбъектПодсистемы) Тогда + + Если ОбъектМетаданныхДоступен(ОбъектПодсистемы) Тогда + + НоваяСтрокаЖурнал = НовыйЭлементДереваРаздел(ТекущаяСтрокаДерева, ОбъектПодсистемы); + + ДобавитьСтрокиДереваРазделовПоискаПоСоставуРекурсивно(НоваяСтрокаЖурнал, ОбъектПодсистемы.РегистрируемыеДокументы, ВыбранныеИдентификаторы); + + Если НоваяСтрокаЖурнал.Строки.Количество() = 0 Тогда + ТекущаяСтрокаДерева.Строки.Удалить(НоваяСтрокаЖурнал); + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НовыйЭлементДереваРаздел(ТекущаяСтрокаДерева, Раздел) + + ПредставлениеРаздела = Раздел; + Если ОбщегоНазначения.ЭтоЖурналДокументов(Раздел) Тогда + ПредставлениеРаздела = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (Журнал)'"), ПредставлениеРаздела); + КонецЕсли; + + НоваяСтрока = ТекущаяСтрокаДерева.Строки.Добавить(); + НоваяСтрока.Раздел = ПредставлениеРаздела; + + Если ЭтоКорневаяПодсистема(Раздел) Тогда + НоваяСтрока.Картинка = Раздел.Картинка; + КонецЕсли; + + Возврат НоваяСтрока; + +КонецФункции + +&НаСервереБезКонтекста +Функция НовыйЭлементДереваОбъектМетаданных(ТекущаяСтрокаДерева, ОбъектМетаданных) + + ПредставлениеОбъекта = ОбщегоНазначения.ПредставлениеСписка(ОбъектМетаданных); + + НоваяСтрока = ТекущаяСтрокаДерева.Строки.Добавить(); + НоваяСтрока.Раздел = ПредставлениеОбъекта; + НоваяСтрока.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); + + Возврат НоваяСтрока; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗаполнениеСлужебныхСвойствПослеПолученияРазделовРекурсивно(ТекущаяСтрокаДерева) + + Если ТипЗнч(ТекущаяСтрокаДерева) = Тип("СтрокаДереваЗначений") Тогда + + // Заполнение ПутьКДанным и ЭтоПодраздел и ЭтоОбъектМетаданных выполняется после формирования дерева + // для того, чтобы корректно расставить эти признаки для добавленных в событии + // ПолнотекстовыйПоискСерверПереопределяемый.ПриПолученииРазделовПолнотекстовогоПоиска + // разделов и освободить разработчиков конфигурации от необходимости думать над этими полями. + + ЭтоОбъектМетаданных = ЗначениеЗаполнено(ТекущаяСтрокаДерева.ОбъектМД); + + ТекущаяСтрокаДерева.ЭтоОбъектМетаданных = ЭтоОбъектМетаданных; + + Если ТекущаяСтрокаДерева.Уровень() = 0 Тогда + ТекущаяСтрокаДерева.ПутьКДанным = ТекущаяСтрокаДерева.Раздел; + Иначе + ТекущаяСтрокаДерева.ЭтоПодраздел = Не ЭтоОбъектМетаданных; + ТекущаяСтрокаДерева.ПутьКДанным = ТекущаяСтрокаДерева.Родитель.ПутьКДанным + "," + ТекущаяСтрокаДерева.Раздел; + КонецЕсли; + + КонецЕсли; + + Для каждого ПодчиненнаяСтрока Из ТекущаяСтрокаДерева.Строки Цикл + ЗаполнениеСлужебныхСвойствПослеПолученияРазделовРекурсивно(ПодчиненнаяСтрока); + ПодчиненнаяСтрока.Строки.Сортировать("ЭтоПодраздел, Раздел"); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция СписокОбластейДереваРазделов() + + Дерево = РеквизитФормыВЗначение("ДеревоРазделовПоиска"); + + СписокОбластейИдентификаторы = Новый СписокЗначений; + ЗаполнитьСписокОбластейРекурсивно(СписокОбластейИдентификаторы, Дерево.Строки); + СписокОбластей = ИдентификаторыВСписокОбластей(СписокОбластейИдентификаторы); + + Возврат СписокОбластей; + +КонецФункции + +&НаСервере +Функция ИдентификаторыВСписокОбластей(СписокОбластейИдентификаторы) + Результат = Новый СписокЗначений(); + + Запрос = Новый Запрос("ВЫБРАТЬ + | ИдентификаторыОбъектовМетаданных.ПолноеИмя КАК ПолноеИмя, + | ИдентификаторыОбъектовМетаданных.Представление КАК Представление + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + |ГДЕ + | ИдентификаторыОбъектовМетаданных.Ссылка В (&Идентификаторы) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ИдентификаторыОбъектовРасширений.ПолноеИмя, + | ИдентификаторыОбъектовРасширений.Представление + |ИЗ + | Справочник.ИдентификаторыОбъектовРасширений КАК ИдентификаторыОбъектовРасширений + |ГДЕ + | ИдентификаторыОбъектовРасширений.Ссылка В (&Идентификаторы)"); + Запрос.УстановитьПараметр("Идентификаторы", СписокОбластейИдентификаторы); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока (Выборка.Следующий()) Цикл + Результат.Добавить(Выборка.ПолноеИмя, Выборка.Представление); + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗаполнитьСписокОбластейРекурсивно(СписокОбластей, СтрокиДереваРазделов) + + Для каждого СтрокаРаздел Из СтрокиДереваРазделов Цикл + + Если СтрокаРаздел.Пометка = ПометкаФлажокУстановлен() Тогда + + Если СтрокаРаздел.ЭтоОбъектМетаданных Тогда + СписокОбластей.Добавить(СтрокаРаздел.ОбъектМД, СтрокаРаздел.ПутьКДанным); + КонецЕсли; + + КонецЕсли; + + ЗаполнитьСписокОбластейРекурсивно(СписокОбластей, СтрокаРаздел.Строки); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ИскатьВРазделах(ПереключательВездеВРазделах) + + Возврат (ПереключательВездеВРазделах = 1); + +КонецФункции + +#КонецОбласти + +#Область Представления + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Раздел.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоРазделовПоиска.ЭтоПодраздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветРазделаПанелиФункций); + +КонецПроцедуры + +#КонецОбласти + +#Область ИнтерактивнаяЛогикаПредставления + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьДоступностьПриПереключенииВездеВРазделах(Элемент, ИскатьВРазделах) + + Элемент.Доступность = ИскатьВРазделах; + +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьТекущийРазделДереваРазделов(Элемент) + + // Перейдем к разделу, с которым работали при предыдущих настройках. + Если Не ПустаяСтрока(ТекущийРаздел) И ИдентификаторСтроки <> 0 Тогда + + РазделПоиска = ДеревоРазделовПоиска.НайтиПоИдентификатору(ИдентификаторСтроки); + Если РазделПоиска = Неопределено + Или РазделПоиска.Раздел <> ТекущийРаздел Тогда + Возврат; + КонецЕсли; + + РодительРаздела = РазделПоиска.ПолучитьРодителя(); + Пока РодительРаздела <> Неопределено Цикл + Элементы.ДеревоРазделовПоиска.Развернуть(РодительРаздела.ПолучитьИдентификатор()); + РодительРаздела = РодительРаздела.ПолучитьРодителя(); + КонецЦикла; + + Элементы.ДеревоРазделовПоиска.ТекущаяСтрока = ИдентификаторСтроки; + + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция СледующееЗначениеПометкиЭлемента(ЭлементДерева) + + // 0 - Флажок не установлен. + // 1 - Флажок установлен. + // 2 - Установлен квадрат. + // + // Переопределение графа конечного автомата (или машины состояний, как ее еще можно назвать). + // + // Платформа делает постоянный цикл при изменении пометки, + // т.е. имеет компоненту сильной связности орграфа: + // 0-1-2-0-1-2-0-1... + // + // 0 + // / \ + // 2 - 1 + // + // т.е. совершает цикл: не помеченный - помеченный - квадрат - не помеченный. + // + // Нам требуется поведение недетерминированного конечного автомата с компонентой сильной связности: + // 0-1-0-1-0... + // + // т.е. помеченный должен переходить в не помеченный, а тот - опять в помеченный. + // + // При этом: + // + // Для разделов циклы: + // 1) 1-0-1-0-1... + // 2) 2-0-1-0-1-0-... + // + // /\ + // 2 - 0 -1 + // + // т.е. с квадрата должен быть переход к неустановленному флажку. + // + // Для метаданных циклы: + // 1) 1-0-1-0-1-0... + // 2) 2-1-0-1-0-1-0... + // + // /\ + // 2 - 1 -0 + // + // т.е. с квадрата должен быть переход к установленному флажку. + + // На момент проверки платформа уже изменила значение пометки. + + Если ЭлементДерева.ЭтоОбъектМетаданных Тогда + // Предыдущее значение пометки = 2 : Установлен квадрат. + Если ЭлементДерева.Пометка = 0 Тогда + Возврат ПометкаФлажокУстановлен(); + КонецЕсли; + КонецЕсли; + + // Предыдущее значение пометки = 1 : Флажок установлен. + Если ЭлементДерева.Пометка = 2 Тогда + Возврат ПометкаФлажокНеУстановлен(); + КонецЕсли; + + // Во всех остальных случаях - значение установленное платформой. + Возврат ЭлементДерева.Пометка; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПометитьЭлементыРодителейРекурсивно(ЭлементДерева) + + Родитель = ЭлементДерева.ПолучитьРодителя(); + + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ЭлементыРодителя = Родитель.ПолучитьЭлементы(); + Если ЭлементыРодителя.Количество() = 0 Тогда + Родитель.Пометка = ПометкаФлажокУстановлен(); + ИначеЕсли ЭлементДерева.Пометка = ПометкаКвадрат() Тогда + Родитель.Пометка = ПометкаКвадрат(); + Иначе + Родитель.Пометка = ЗначениеПометкиОтносительноВложенныхЭлементов(Родитель); + КонецЕсли; + + ПометитьЭлементыРодителейРекурсивно(Родитель); + +КонецПроцедуры + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция ЗначениеПометкиОтносительноВложенныхЭлементов(ЭлементДерева) + + СостояниеВложенныхЭлементов = СостояниеВложенныхЭлементов(ЭлементДерева); + + ЕстьПомеченные = СостояниеВложенныхЭлементов.ЕстьПомеченные; + ЕстьНепомеченные = СостояниеВложенныхЭлементов.ЕстьНепомеченные; + + Если ЭлементДерева.ЭтоОбъектМетаданных Тогда + + // Для объекта метаданных важно какое у него состояние сейчас, + // ведь этот объект метаданных надо возвращать. + // Нельзя сбрасывать установленный флажок. + + Если ЭлементДерева.Пометка = ПометкаФлажокУстановлен() Тогда + // Оставляем флажок взведенным независимо от вложенных. + Возврат ПометкаФлажокУстановлен(); + КонецЕсли; + + Если ЭлементДерева.Пометка = ПометкаФлажокНеУстановлен() + Или ЭлементДерева.Пометка = ПометкаКвадрат() Тогда + + Если ЕстьПомеченные Тогда + Возврат ПометкаКвадрат(); + Иначе + Возврат ПометкаФлажокНеУстановлен(); + КонецЕсли; + КонецЕсли; + + Иначе + + // Для разделов не важно какое состояние сейчас, + // они всегда зависят только от вложенных. + + Если ЕстьПомеченные Тогда + + Если ЕстьНепомеченные Тогда + Возврат ПометкаКвадрат(); + Иначе + Возврат ПометкаФлажокУстановлен(); + КонецЕсли; + + КонецЕсли; + + Возврат ПометкаФлажокНеУстановлен(); + + КонецЕсли; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция СостояниеВложенныхЭлементов(ЭлементДерева) + + ВложенныеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + + ЕстьПомеченные = Ложь; + ЕстьНепомеченные = Ложь; + + Для каждого ВложенныйЭлемент Из ВложенныеЭлементы Цикл + + Если ВложенныйЭлемент.Пометка = ПометкаФлажокНеУстановлен() Тогда + ЕстьНепомеченные = Истина; + Продолжить; + КонецЕсли; + + Если ВложенныйЭлемент.Пометка = ПометкаФлажокУстановлен() Тогда + ЕстьПомеченные = Истина; + + Если ВложенныйЭлемент.ЭтоОбъектМетаданных Тогда + + // Для объекта метаданных допустимо иметь непомеченные в своем составе вложенных, + // при этом самостоятельно быть помеченным. Чтобы обыграть эту ситуацию надо поднять + // вложенные элементы на один уровень с самим объектом, к которому они относятся. + + Состояние = СостояниеВложенныхЭлементов(ВложенныйЭлемент); + ЕстьПомеченные = ЕстьПомеченные Или Состояние.ЕстьПомеченные; + ЕстьНепомеченные = ЕстьНепомеченные Или Состояние.ЕстьНепомеченные; + КонецЕсли; + + Продолжить; + КонецЕсли; + + Если ВложенныйЭлемент.Пометка = ПометкаКвадрат() Тогда + ЕстьПомеченные = Истина; + ЕстьНепомеченные = Истина; + Продолжить; + КонецЕсли; + + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("ЕстьПомеченные", ЕстьПомеченные); + Результат.Вставить("ЕстьНепомеченные", ЕстьНепомеченные); + + Возврат Результат; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Функция ТребуетсяПометитьВложенныеЭлементы(ЭлементДерева) + + Если ЭлементДерева.ЭтоОбъектМетаданных Тогда + + // Если для объекта метаданных есть не полностью выбранные вложенные элементы, + // значит эти элементы были выбраны пользователем и не следует портить его выбор. + + СостояниеВложенныхЭлементов = СостояниеВложенныхЭлементов(ЭлементДерева); + + ЕстьПомеченные = СостояниеВложенныхЭлементов.ЕстьПомеченные; + ЕстьНепомеченные = СостояниеВложенныхЭлементов.ЕстьНепомеченные; + + Если ЕстьПомеченные И ЕстьНепомеченные Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Параметры: +// ЭлементДерева - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПометитьВложенныеЭлементыРекурсивно(ЭлементДерева) + + ВложенныеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + + Для каждого ВложенныйЭлемент Из ВложенныеЭлементы Цикл + + ВложенныйЭлемент.Пометка = ЭлементДерева.Пометка; + ПометитьВложенныеЭлементыРекурсивно(ВложенныйЭлемент); + + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// КоллекцияЭлементовДерева - ДанныеФормыДерева +// - ДанныеФормыЭлементДерева: +// * Пометка - Число - обязательный реквизит дерева. +// * ЭтоОбъектМетаданных - Булево - обязательный реквизит дерева. +// ЗначениеПометки - Число - устанавливаемое значение. +// +&НаКлиентеНаСервереБезКонтекста +Процедура ПометитьВсеЭлементыДереваРекурсивно(ЭлементДеревоРазделовПоиска, ЗначениеПометки) + + КоллекцияЭлементовДерева = ЭлементДеревоРазделовПоиска.ПолучитьЭлементы(); + + Для каждого ЭлементДерева Из КоллекцияЭлементовДерева Цикл + ЭлементДерева.Пометка = ЗначениеПометки; + ПометитьВсеЭлементыДереваРекурсивно(ЭлементДерева, ЗначениеПометки); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область БизнесЛогика + +&НаСервереБезКонтекста +Функция ЭтоКорневаяПодсистема(ОбъектМетаданных) + + Возврат Метаданные.Подсистемы.Содержит(ОбъектМетаданных); + +КонецФункции + +&НаСервереБезКонтекста +Функция ОбъектМетаданныхДоступен(ОбъектМетаданных) + + ДоступенПоПравам = ПравоДоступа("Просмотр", ОбъектМетаданных); + ДоступенПоФункциональнымОпциям = ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных); + + СвойстваМетаданного = Новый Структура("ВключатьВКомандныйИнтерфейс"); + ЗаполнитьЗначенияСвойств(СвойстваМетаданного, ОбъектМетаданных); + + Если СвойстваМетаданного.ВключатьВКомандныйИнтерфейс = Неопределено Тогда + ВключатьВКомандныйИнтерфейс = Истина; // Если свойства нет - игнорируем. + Иначе + ВключатьВКомандныйИнтерфейс = СвойстваМетаданного.ВключатьВКомандныйИнтерфейс; + КонецЕсли; + + Возврат ДоступенПоПравам И ДоступенПоФункциональнымОпциям + И ВключатьВКомандныйИнтерфейс; + +КонецФункции + +&НаСервереБезКонтекста +Функция ПодчиненныеСправочники(ОбъектМетаданных) + + Результат = Новый Массив; + + Для Каждого Справочник Из Метаданные.Справочники Цикл + Если Справочник.Владельцы.Содержит(ОбъектМетаданных) + И ОбъектМетаданныхДоступен(Справочник) Тогда + + Результат.Добавить(Справочник); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/НастройкиУдаленияОбъектов/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/НастройкиУдаленияОбъектов/Form.form new file mode 100644 index 000000000..af1dcd6aa --- /dev/null +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/НастройкиУдаленияОбъектов/Form.form @@ -0,0 +1,1066 @@ + + + + НастройкиОтображенияОбъектов + 19 + Usual + + <key>ru</key> + <value>Настройки отображения объектов</value> + + true + true + + true + + + НастройкиОтображенияОбъектов + + None + + НастройкиОтображенияОбъектовГруппа + 40 + + НастройкиОтображенияОбъектовОтображаемыйРеквизит + 32 + + <key>ru</key> + <value>Место поиска / Выводимые реквизиты</value> + + true + true + + true + + + НастройкиОтображенияОбъектов.МестоПоискаРеквизитПредставление + + + ПолеРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ПолеКонтекстноеМеню + 33 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НастройкиОтображенияОбъектовКартинка + 37 + true + true + + true + + + НастройкиОтображенияОбъектов.Картинка + + None + + ПолеРасширеннаяПодсказка1 + 39 + Label + true + true + + Left + + + + ПолеКонтекстноеМеню1 + 38 + true + + PictureField + Enter + true + Left + true + + true + true + true + true + + + 1 + + AsFileRef + + + true + true + + true + + + <key>ru</key> + <value>Настройки отображения объектов группа</value> + + + НастройкиОтображенияОбъектовГруппа1РасширеннаяПодсказка + 41 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + КоманднаяПанель + 20 + Left + + + Addition + 23 + + ExtendedTooltip + 25 + Label + true + true + + Left + + + + ContextMenu + 24 + true + + НастройкиОтображенияОбъектов + + true + + + + Addition + 29 + + ExtendedTooltip + 31 + Label + true + true + + Left + + + + ContextMenu + 30 + true + + ViewStatusAddition + НастройкиОтображенияОбъектов + + true + + + + Addition + 26 + + ExtendedTooltip + 28 + Label + true + true + + Left + + + + ContextMenu + 27 + true + + SearchControlAddition + НастройкиОтображенияОбъектов + + true + + + + РасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + КонтекстноеМеню + 21 + + КонтекстноеМенюДобавитьНастройку + 75 + true + true + + true + + + КонтекстноеМенюДобавитьНастройкуРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + Form.Command.ДобавитьНастройку + Normal + Auto + true + true + UserCmds + Auto + + + КонтекстноеМенюДобавитьПолеНастройки + 77 + true + true + + true + + + КонтекстноеМенюДобавитьПолеНастройкиРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + Form.Command.ДобавитьПолеНастройки + Normal + Auto + true + true + UserCmds + Auto + + + КонтекстноеМенюУдалить + 73 + true + true + + true + + + КонтекстноеМенюУдалитьРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + Form.Item.НастройкиОтображенияОбъектов.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + Tree + true + true + true + true + MultiRow + Row +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + true + true + AsFileRef + true +
    + + ГруппаНастройкаРежимаУдаления + 58 + Usual + + ОбычноеУдаление + 63 + true + true + + true + + + ОбычноеУдаление + + None + ShowRight + + OnChange + ОбычноеУдалениеПриИзменении + + + ПолеРасширеннаяПодсказка5 + 65 + + <key>ru</key> + <value>Выполнять полную проверку возможности удаления и не удаляет объекты при наличии мест использования. +Подходит для удаления одиночных объектов.</value> + + Label + true + 4 + true + + Left + + + + ПолеКонтекстноеМеню5 + 64 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Стандартный + + + 1 + + + Vertical + + + + БезопасноеУдаление + 60 + true + true + + true + + + БезопасноеУдаление + + None + ShowRight + + OnChange + БезопасноеУдалениеПриИзменении + + + ПолеРасширеннаяПодсказка4 + 62 + + <key>ru</key> + <value>Разрешить очистку полей в помеченных на удаление объектах. +Подходит для очистки связанных объектов. +</value> + + Label + true + 3 + true + + Left + + + + ПолеКонтекстноеМеню4 + 61 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Упрощенный + + + 1 + + + Vertical + + + + МонопольноеУдаление + 42 + true + true + + true + + + МонопольноеУдаление + + None + ShowRight + + OnChange + МонопольноеУдалениеПриИзменении + + + ПолеРасширеннаяПодсказка2 + 44 + + <key>ru</key> + <value>Блокировать вход в программу. +Подходит для срочного удаления больших объемов данных.</value> + + Label + true + true + + Left + + + + ПолеКонтекстноеМеню2 + 43 + true + + RadioButtonField + Enter + true + Left + true + + RadioButtons + + + ru + Ускоренный + + + 1 + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Способ удаления</value> + + + ru + Стандартный - удалить с контролем ссылочной целостности. + +Упрощенный - не проверять помеченные на удаление места использования и удалить с контролем ссылочной целостности. +В помеченных на удалениях местах использования ссылки на удаляемые объекты будут очищены. + +Ускоренный - удалить в монопольном режиме. + + Button + + Группа1РасширеннаяПодсказка1 + 59 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + Button + true + true + auto + Auto + Auto + + + + НастройкаРегламентногоУдаления + 47 + Usual + + ГруппаНастройкаРегламентногоЗадания + 68 + + ИспользоватьРегламентноеУдаление + 51 + true + true + + true + + + АвтоматическиУдалятьПомеченныеОбъекты + + Right + + OnChange + ИспользоватьРегламентноеУдалениеПриИзменении + + + ПолеРасширеннаяПодсказка3 + 53 + Label + true + true + + Left + + + + ПолеКонтекстноеМеню3 + 52 + true + + CheckBoxField + Enter + true + Left + true + + + + УдалениеПомеченныхНастроитьРасписание + 54 + + <key>ru</key> + <value>Настроить расписание</value> + + true + false + + true + + + НастройкиРегламентноеУдалениеПомеченныхРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастройкиРегламентногоЗадания + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Настройки регламентного задания</value> + + + Группа1РасширеннаяПодсказка2 + 69 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + УдалениеПомеченныхПредставлениеРасписания + 70 + + <key>ru</key> + <value>Удаление помеченных представление расписания</value> + + true + true + + true + + + УдалениеПомеченныхПредставлениеРасписанияРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + УдалениеПомеченныхПредставлениеРасписанияКонтекстноеМеню + 71 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Автоматически удалять помеченные объекты по расписанию</value> + + + Группа1РасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаВыбрать + 49 + true + true + + true + + + ФормаВыбратьРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + ФормаДобавитьНастройку + 56 + true + true + + true + + + ФормаДобавитьНастройкуРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.Command.ДобавитьНастройку + Normal + Auto + true + true + UserCmds + Auto + + + ФормаДобавитьПолеНастройки + 66 + true + true + + true + + + ФормаДобавитьПолеНастройкиРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Form.Command.ДобавитьПолеНастройки + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + DontShow + + НастройкиОтображенияОбъектов + + <key>ru</key> + <value>Настройки отображения объектов</value> + + 1 + + ValueTree + + + true + + + true + + + МестоПоискаРеквизитПредставление + + <key>ru</key> + <value>Место поиска реквизит представление</value> + + 3 + + String + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 4 + + Picture + + + true + + + true + + + + МестоПоискаРеквизит + 9 + + String + + + + true + + + true + + + + + МонопольноеУдаление + + <key>ru</key> + <value>Монопольное удаление</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + АвтоматическиУдалятьПомеченныеОбъекты + + <key>ru</key> + <value>Автоматически удалять помеченные объекты по расписанию</value> + + 6 + + Boolean + + + true + + + true + + + + БезопасноеУдаление + + <key>ru</key> + <value>Безопасное удаление</value> + + 7 + + Number + + 10 + + + + true + + + true + + + + ОбычноеУдаление + + <key>ru</key> + <value>Обычное удаление</value> + + 8 + + Number + + 10 + + + + true + + + true + + + + УдалениеПомеченныхИдентификатор + 10 + + String + + + + true + + + true + + + + УдалениеПомеченныхРасписание + 11 + + + true + + + true + + + + Выбрать + + <key>ru</key> + <value>Применить</value> + + 1 + + true + + + + Выбрать + + + Auto + Auto + + + НастройкиРегламентногоЗадания + + <key>ru</key> + <value>Настройки регламентного задания</value> + + 2 + + true + + + + НастройкиРегламентногоЗадания + + + Auto + Auto + + + ДобавитьНастройку + + <key>ru</key> + <value>Добавить настройку</value> + + 3 + + true + + + StdPicture.CreateFolder + + + + ДобавитьНастройку + + + Auto + Auto + + + ДобавитьПолеНастройки + + <key>ru</key> + <value>Добавить поле настройки</value> + + 4 + + true + + + StdPicture.CreateListItem + + + + ДобавитьПолеНастройки + + + Auto + Auto + + + + + +
    diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/НастройкиУдаленияОбъектов/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/НастройкиУдаленияОбъектов/Module.bsl new file mode 100644 index 000000000..20c94a123 --- /dev/null +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/НастройкиУдаленияОбъектов/Module.bsl @@ -0,0 +1,349 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АдресНастроек") Тогда + ЗагрузитьНастройки(ПолучитьИзВременногоХранилища(Параметры.АдресНастроек)); + КонецЕсли; + + РегламентноеЗадание = УдалениеПомеченныхОбъектовСлужебныйВызовСервера.РежимУдалятьПоРасписанию(); + АвтоматическиУдалятьПомеченныеОбъекты = РегламентноеЗадание.Использование; + УдалениеПомеченныхРасписание = РегламентноеЗадание.Расписание; + + УстановитьСостояниеФормыПоНастройкамРегламентногоЗадания(ЭтотОбъект); + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Элементы.УдалениеПомеченныхНастроитьРасписание.Видимость = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "НастройкиОтображенияОбъектов"); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ИспользоватьРегламентноеУдалениеПриИзменении(Элемент) + ОповещениеОбИзменении = Новый ОписаниеОповещения("РегламентныеЗаданияПослеИзмененияРасписания", ЭтотОбъект); + УдалениеПомеченныхОбъектовКлиент.ПриИзмененииФлажкаУдалятьПоРасписанию(АвтоматическиУдалятьПомеченныеОбъекты, ОповещениеОбИзменении); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиРегламентногоЗадания(Команда) + ОповещениеОбИзменении = Новый ОписаниеОповещения("РегламентныеЗаданияПослеИзмененияРасписания", ЭтотОбъект); + УдалениеПомеченныхОбъектовКлиент.НачатьИзменениеРасписанияРегламентногоЗадания(ОповещениеОбИзменении); +КонецПроцедуры + +&НаКлиенте +Процедура РегламентныеЗаданияПослеИзмененияРасписания(Изменения, ПараметрыВыполнения) Экспорт + Если Изменения = Неопределено Тогда + АвтоматическиУдалятьПомеченныеОбъекты = Ложь; + Иначе + УдалениеПомеченныхРасписание = Изменения.Расписание; + АвтоматическиУдалятьПомеченныеОбъекты = Изменения.Использование; + КонецЕсли; + + УстановитьСостояниеФормыПоНастройкамРегламентногоЗадания(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОбычноеУдалениеПриИзменении(Элемент) + УстановитьРежим("ОбычноеУдаление"); +КонецПроцедуры + +&НаКлиенте +Процедура БезопасноеУдалениеПриИзменении(Элемент) + УстановитьРежим("БезопасноеУдаление"); +КонецПроцедуры + +&НаКлиенте +Процедура МонопольноеУдалениеПриИзменении(Элемент) + УстановитьРежим("МонопольноеУдаление"); +КонецПроцедуры + +#КонецОбласти + + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ДобавитьНастройку(Команда) + КоллекцияВыбираемыхОбъектов = Новый СписокЗначений; + + КоллекцияВыбираемыхОбъектов.Добавить("Справочники"); + КоллекцияВыбираемыхОбъектов.Добавить("Документы"); + КоллекцияВыбираемыхОбъектов.Добавить("ПланыВидовХарактеристик"); + КоллекцияВыбираемыхОбъектов.Добавить("ПланыСчетов"); + КоллекцияВыбираемыхОбъектов.Добавить("ПланыСчетов"); + КоллекцияВыбираемыхОбъектов.Добавить("ПланыВидовРасчета"); + КоллекцияВыбираемыхОбъектов.Добавить("БизнесПроцессы"); + КоллекцияВыбираемыхОбъектов.Добавить("Задачи"); + + ВыбранныеОбъекты = Новый СписокЗначений; + Для Каждого МестоПоиска Из НастройкиОтображенияОбъектов.ПолучитьЭлементы() Цикл + ВыбранныеОбъекты.Добавить(МестоПоиска.МестоПоискаРеквизит); + КонецЦикла; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("КоллекцииВыбираемыхОбъектовМетаданных", КоллекцияВыбираемыхОбъектов); + ПараметрыФормы.Вставить("ТолькоПодсистемыСКИ", Истина); + ПараметрыФормы.Вставить("ВыбранныеОбъектыМетаданных", ВыбранныеОбъекты); + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ДобавитьНастройкуПродолжение", ЭтотОбъект); + ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы, ЭтотОбъект, , , , ОповещениеОЗакрытии, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьПолеНастройки(Команда) + Если НастройкиОтображенияОбъектов.ПолучитьЭлементы().Количество() = 0 Тогда + ДобавитьНастройку(Команда); + КонецЕсли; + + ТекущиеДанные = Элементы.НастройкиОтображенияОбъектов.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + МестоПоиска = ТекущиеДанные.МестоПоискаРеквизит; + РодительЭлемента = ТекущиеДанные.ПолучитьРодителя(); + Если РодительЭлемента <> Неопределено И ЗначениеЗаполнено(РодительЭлемента.МестоПоискаРеквизит) Тогда + МестоПоиска = РодительЭлемента.МестоПоискаРеквизит; + КонецЕсли; + + РеквизитыДляВыбора = РеквизитыДляВыбора(РеквизитыМетаданных(МестоПоиска), ТекущиеДанные); + + ОповещениеОВыборе = Новый ОписаниеОповещения("ДобавитьПолеНастройкиЗавершение", + ЭтотОбъект, + Новый Структура("МестоПоиска", МестоПоиска)); + РеквизитыДляВыбора.ПоказатьОтметкуЭлементов(ОповещениеОВыборе); +КонецПроцедуры + +&НаКлиенте +Процедура Выбрать(Команда) + АдресХранилища = ПодготовитьНастройки(ВладелецФормы.УникальныйИдентификатор); + Закрыть(АдресХранилища); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Функция РеквизитыДляВыбора(РеквизитыМетаданных,Знач ТекущиеДанные) + Результат = РеквизитыМетаданных.Скопировать(); + + РодительЭлемента = ТекущиеДанные.ПолучитьРодителя(); + Если РодительЭлемента = Неопределено Тогда + РодительЭлемента = ТекущиеДанные; + КонецЕсли; + + Для Каждого ВыбранныйРеквизит Из РодительЭлемента.ПолучитьЭлементы() Цикл + РеквизитСписка = Результат.НайтиПоЗначению(ВыбранныйРеквизит.МестоПоискаРеквизит); + + Если РеквизитСписка <> Неопределено Тогда + РеквизитСписка.Пометка = Истина; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Параметры: +// Настройки - см. НастройкиИзДанныхФормы +// +&НаСервере +Процедура ЗагрузитьНастройки(Настройки) + ОбычноеУдаление = 0; + Если Настройки.РежимУдаления = "Монопольный" Тогда + МонопольноеУдаление = 1; + ИначеЕсли Настройки.РежимУдаления = "Упрощенный" Тогда + БезопасноеУдаление = 1; + Иначе + ОбычноеУдаление = 1; + КонецЕсли; + + ВыбранныеРеквизиты = Настройки.ВыбранныеРеквизиты; + ВыбранныеРеквизиты.Сортировать("Метаданные"); + + ДеревоНастроек = РеквизитФормыВЗначение("НастройкиОтображенияОбъектов"); + + ТекущиеМетаданные = ""; + МестоПоиска = Неопределено; + Для Каждого МестоПоискаРеквизит Из ВыбранныеРеквизиты Цикл + Если ТекущиеМетаданные <> МестоПоискаРеквизит.Метаданные Тогда + МестоПоиска = ДеревоНастроек.Строки.Добавить(); + МестоПоиска.МестоПоискаРеквизитПредставление = Метаданные.НайтиПоПолномуИмени( + МестоПоискаРеквизит.Метаданные).Представление(); + МестоПоиска.Картинка = БиблиотекаКартинок.Папка; + МестоПоиска.МестоПоискаРеквизит = МестоПоискаРеквизит.Метаданные; + ТекущиеМетаданные = МестоПоискаРеквизит.Метаданные; + КонецЕсли; + + Реквизит = МестоПоиска.Строки.Добавить(); + Реквизит.МестоПоискаРеквизитПредставление = МестоПоискаРеквизит.Представление; + Реквизит.МестоПоискаРеквизит = МестоПоискаРеквизит.Реквизит; + Реквизит.Картинка = БиблиотекаКартинок.Реквизит; + КонецЦикла; + + ЗначениеВРеквизитФормы(ДеревоНастроек, "НастройкиОтображенияОбъектов"); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция РеквизитыМетаданных(Знач ОбъектМетаданных) + Результат = Новый СписокЗначений; + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ОбъектМетаданных); + Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + Результат.Добавить(Реквизит.Имя, Реквизит.Синоним); + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура ДобавитьПолеНастройкиЗавершениеСервер(Результат, ДополнительныеПараметры) + + ДеревоМестПоиска = РеквизитФормыВЗначение("НастройкиОтображенияОбъектов"); + + ИдентификаторМестаПоиска = ДополнительныеПараметры.МестоПоиска; + Фильтр = Новый Структура("МестоПоискаРеквизит", ИдентификаторМестаПоиска); + ПодгруппаМестаПоиска = ДеревоМестПоиска.Строки.НайтиСтроки(Фильтр)[0]; + ПодгруппаМестаПоиска.Строки.Очистить(); + Для Каждого Элемент Из Результат Цикл + + Если Элемент.Пометка Тогда + МестоПоиска = ПодгруппаМестаПоиска.Строки.Добавить(); + МестоПоиска.МестоПоискаРеквизит = Элемент.Значение; + МестоПоиска.МестоПоискаРеквизитПредставление = Элемент.Представление; + МестоПоиска.Картинка = БиблиотекаКартинок.Реквизит; + КонецЕсли; + + КонецЦикла; + + ЗначениеВРеквизитФормы(ДеревоМестПоиска, "НастройкиОтображенияОбъектов"); +КонецПроцедуры + +// Возвращаемое значение: +// Структура: +// * РежимУдаления - Строка +// * ВыбранныеРеквизиты - ТаблицаЗначений: +// ** Метаданные - Строка +// ** Реквизит - Строка +// ** Представление - Строка +// +&НаСервере +Функция НастройкиИзДанныхФормы() + Настройки = Новый Структура; + Настройки.Вставить("ВыбранныеРеквизиты"); + Настройки.Вставить("РежимУдаления"); + + Если БезопасноеУдаление > 0 Тогда + Настройки.РежимУдаления = "Упрощенный"; + ИначеЕсли МонопольноеУдаление > 0 Тогда + Настройки.РежимУдаления = "Монопольный"; + Иначе + Настройки.РежимУдаления = "Стандартный"; + КонецЕсли; + + ВыбранныеРеквизиты = Новый ТаблицаЗначений; + ВыбранныеРеквизиты.Колонки.Добавить("Метаданные"); + ВыбранныеРеквизиты.Колонки.Добавить("Реквизит"); + ВыбранныеРеквизиты.Колонки.Добавить("Представление"); + + ДеревоРеквизитов = РеквизитФормыВЗначение("НастройкиОтображенияОбъектов"); + Для Каждого СтрокаМетаданных Из ДеревоРеквизитов.Строки Цикл + ОбъектМетаданных = СтрокаМетаданных.МестоПоискаРеквизит; + Для Каждого Элемент Из СтрокаМетаданных.Строки Цикл + Реквизит = ВыбранныеРеквизиты.Добавить(); + Реквизит.Метаданные = ОбъектМетаданных; + Реквизит.Представление = Элемент.МестоПоискаРеквизитПредставление; + Реквизит.Реквизит = Элемент.МестоПоискаРеквизит; + КонецЦикла; + КонецЦикла; + + Настройки.ВыбранныеРеквизиты = ВыбранныеРеквизиты; + + Возврат Настройки; +КонецФункции + +&НаСервере +Функция ПодготовитьНастройки(УникальныйИдентификатор) + Возврат ПоместитьВоВременноеХранилище(НастройкиИзДанныхФормы(), + УникальныйИдентификатор); +КонецФункции + +&НаКлиенте +Процедура ДобавитьНастройкуПродолжение(Результат, ДополнительныеПараметры) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ДобавитьНастройкуПродолжениеСервер(Результат); +КонецПроцедуры + +&НаСервере +Процедура ДобавитьНастройкуПродолжениеСервер(Результат) + ДеревоМестПоиска = РеквизитФормыВЗначение("НастройкиОтображенияОбъектов"); + + Для Каждого Элемент Из Результат Цикл + Фильтр = Новый Структура("МестоПоискаРеквизит", Элемент.Значение); + + Если ДеревоМестПоиска.Строки.НайтиСтроки(Фильтр).Количество() = 0 Тогда + МестоПоиска = ДеревоМестПоиска.Строки.Добавить(); + МестоПоиска.МестоПоискаРеквизит = Элемент.Значение; + МестоПоиска.МестоПоискаРеквизитПредставление = Элемент.Представление; + МестоПоиска.Картинка = БиблиотекаКартинок.Папка; + КонецЕсли; + КонецЦикла; + + ЗначениеВРеквизитФормы(ДеревоМестПоиска, "НастройкиОтображенияОбъектов"); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьПолеНастройкиЗавершение(Результат, ДополнительныеПараметры) Экспорт + Если Результат <> Неопределено Тогда + ДобавитьПолеНастройкиЗавершениеСервер(Результат, ДополнительныеПараметры); + КонецЕсли; + + СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "НастройкиОтображенияОбъектов"); +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьСостояниеФормыПоНастройкамРегламентногоЗадания(Форма) + Форма.Элементы.УдалениеПомеченныхНастроитьРасписание.Доступность = Форма.АвтоматическиУдалятьПомеченныеОбъекты; + Форма.Элементы.УдалениеПомеченныхПредставлениеРасписания.Видимость = Форма.АвтоматическиУдалятьПомеченныеОбъекты; + + Если Форма.АвтоматическиУдалятьПомеченныеОбъекты Тогда + Расписание = Новый РасписаниеРегламентногоЗадания; + ЗаполнитьЗначенияСвойств(Расписание, Форма.УдалениеПомеченныхРасписание); + РасписаниеПредставление = Строка(Расписание); + Представление = ВРег(Лев(РасписаниеПредставление, 1)) + Сред(РасписаниеПредставление, 2); + Иначе + Представление = НСтр("ru = '<Отключено>'"); + КонецЕсли; + + Форма.Элементы.УдалениеПомеченныхПредставлениеРасписания.Заголовок = Представление; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьРежим(Режим) + ОбычноеУдаление = 0; + БезопасноеУдаление = 0; + МонопольноеУдаление = 0; + ЭтотОбъект[Режим] = 1; +КонецПроцедуры +#КонецОбласти + diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form index f32a3150e..5a1593cc8 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form @@ -5,242 +5,121 @@ Удаление помеченных объектов - Страницы - 1 - - СтраницаВыборРежимаУдаления - 6 - - РежимУдаления - 15 - - <key>ru</key> - <value>Выберите режим удаления</value> - - true - true - - true - - - РежимУдаления - - Top - - OnChange - РежимУдаленияПриИзменении - - - РежимУдаленияExtendedTooltip - 83 - Label - true - true - - Left - - - - РежимУдаленияКонтекстноеМеню - 16 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Удалить все помеченные объекты - - - Полный - - - - - ru - Выбрать объекты для удаления - - - Выборочный - - - Vertical - - - - Декорация1 - 130 - true - true - - true - - - Декорация1РасширеннаяПодсказка - 132 - Label - true - true - - Left - - - - Декорация1КонтекстноеМеню - 131 - true - + ГруппаНастройкиОтбораПоиска + 523 + + ДекорацияЗаголовокНастройкиОтбораПоиска + 525 + + <key>ru</key> + <value>Показывать:</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 527 Label true true - true Left - - - ГруппаАктивныеПользователи - 169 - - Декорация18 - 171 - true - true - - true - - - Декорация18ExtendedTooltip - 173 - Label - true - true - - Left - - - - Декорация18КонтекстноеМеню - 172 - true - - true - true - - - CommonPicture.Информация - - - - - ПояснениеКОбработке - 298 - - <key>ru</key> - <value>Удаление помеченных объектов может занять длительное время -(от нескольких секунд до нескольких часов в зависимости от объема удаляемых данных).<1/> -Во время удаления может наблюдаться существенное замедление работы <a href="1">пользователей</a>. -Рекомендуется выполнять удаление в период наименьшей активности пользователей. -</value> - - true - true - - true - - - ПояснениеКОбработкеРасширеннаяПодсказка - 300 - Label - true - true - - Left - - - - ПояснениеКОбработкеКонтекстноеМеню - 299 - true - - Label - true - - - URLProcessing - ПояснениеКОбработкеОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Активные пользователи</value> - - - ГруппаАктивныеПользователиРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto + + + Декорация2КонтекстноеМеню + 526 + true + + Label + true + true + + Left + + + + НастроитьОтбор + 521 + + <key>ru</key> + <value>Все помеченные на удаление</value> + + true + true + + true + + 1 + + НастроитьОтборРасширеннаяПодсказка + 522 + Label + true + true + + Left - - - УскоритьУдалениеПомеченных - 439 - - <key>ru</key> - <value>Заблокировать всю работу в программе и ускорить удаление</value> - + + Hyperlink + Form.Command.НастроитьОтбор + Normal + Auto + 60 + 1 + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Настройки отбора поиска</value> + + + Группа1РасширеннаяПодсказка + 524 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + КоманднаяПанельФормы + 534 + + КоманднаяПанельПоискПомеченных + 681 + + ДеревоПомеченныхНаУдалениеУдалитьВсе + 517 true true true - - Монопольно - - Right - Button - - OnChange - УскоритьУдалениеПомеченныхПриИзменении - - УскоритьУдалениеПомеченныхРасширеннаяПодсказка - 441 - - <key>ru</key> - <value>Если флажок установлен, то на время удаления вход в программу будет закрыт и установлен монопольный режим. -Это существенно ускорит процесс удаления. - -Рекомендации по использованию флажка: -- рекомендуется включать для срочного удаления больших объемов данных, например, после выполнения свертки базы; -- во всех остальных случаях его не рекомендуется включать, чтобы не блокировать работу пользователей с программой.</value> - + ДеревоПомеченныхНаУдалениеУдалитьВсеРасширеннаяПодсказка + 518 Label true true @@ -248,145 +127,28 @@ Left
    - - УскоритьУдалениеПомеченныхКонтекстноеМеню - 440 - true - - CheckBoxField - Enter - true - Left - true - + Form.Command.УдалитьВсе + Auto + true + true + true + UserCmds + Auto
    - ГруппаУдалениеПомеченныхОбъектовПоРасписанию - 478 - - ГруппаУдалениеПомеченныхИспользование - 482 - - УдалениеПомеченныхИспользование - 484 - - <key>ru</key> - <value>Автоматически удалять помеченные объекты по расписанию</value> - - true - true - - true - - - УдалениеПомеченныхИспользование - - Right - - OnChange - УдалениеПомеченныхИспользованиеПриИзменении - - - УдалениеПомеченныхИспользованиеРасширеннаяПодсказка - 486 - Label - true - true - - Left - - - - УдалениеПомеченныхИспользованиеКонтекстноеМеню - 485 - true - - CheckBoxField - Enter - true - Left - true - - - - УдалениеПомеченныхПредставлениеРасписания - 487 - - <key>ru</key> - <value>Удаление помеченных представление расписания</value> - - true - true - - true - - - УдалениеПомеченныхПредставлениеРасписанияРасширеннаяПодсказка - 489 - Label - true - true - - Left - - - - УдалениеПомеченныхПредставлениеРасписанияКонтекстноеМеню - 488 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Удаление помеченных использование</value> - - 43 - false - - ГруппаУдалениеПомеченныхИспользованиеРасширеннаяПодсказка - 483 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - + ГруппаАктивныПослеПоискаПомеченные + 562 - УдалениеПомеченныхНастроитьРасписание - 490 + ДеревоПомеченныхНаУдалениеУдалитьВыбранные + 519 true true true - УдалениеПомеченныхНастроитьРасписаниеРасширеннаяПодсказка - 491 + ДеревоПомеченныхНаУдалениеУдалитьВыбранныеРасширеннаяПодсказка + 520 Label true true @@ -394,8 +156,7 @@ Left - Hyperlink - Form.Command.УдалениеПомеченныхНастроитьРасписание + Form.Command.УдалитьВыбранные Normal Auto true @@ -403,6 +164,338 @@ UserCmds Auto + + КомандыВыбора + 57 + + КомандаСписокПомеченныхУстановитьВсе + 37 + true + true + + true + + false + + КомандаСписокПомеченныхУстановитьВсеExtendedTooltip + 92 + Label + true + true + + Left + + + Form.Command.ДеревоПомеченныхНаУдалениеУстановитьВсе + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + ДеревоПомеченныхНаУдалениеСнятьВсе + 38 + true + true + + true + + false + + ДеревоПомеченныхНаУдалениеСнятьВсеРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + Form.Command.ДеревоПомеченныхНаУдалениеСнятьВсе + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды выбора</value> + + + КомандыВыбораExtendedTooltip + 91 + Label + true + true + + Left + + + + Compact + + + + КомандыСвернутьРазвернуть + 713 + + СвернутьСтрокиДереваВыбораПомеченных + 717 + true + true + + true + + + СвернутьСтрокиДереваВыбораПомеченныхРасширеннаяПодсказка + 718 + Label + true + true + + Left + + + Form.Command.СвернутьСтрокиДереваВыбораПомеченных + Normal + Auto + true + true + UserCmds + Auto + + + РазвернутьСтрокиДереваПомеченных + 715 + true + true + + true + + + РазвернутьСтрокиДереваПомеченныхРасширеннаяПодсказка + 716 + Label + true + true + + Left + + + Form.Command.РазвернутьСтрокиДереваПомеченных + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды свернуть развернуть</value> + + + Группа1РасширеннаяПодсказка8 + 714 + Label + true + true + + Left + + + + Compact + + + + ДеревоПомеченныхНаУдалениеИзменить + 339 + true + true + + true + + + ДеревоПомеченныхНаУдалениеИзменитьРасширеннаяПодсказка + 340 + Label + true + true + + Left + + + Form.Command.ДеревоПомеченныхНаУдалениеИзменить + Normal + Auto + true + true + UserCmds + Auto + + + Обновить + 573 + true + true + + true + + + ОбновитьРасширеннаяПодсказка + 574 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Активны после поиска помеченные</value> + + + Группа1РасширеннаяПодсказка7 + 563 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Командная панель поиск помеченных</value> + + + Группа1РасширеннаяПодсказка1 + 682 + Label + true + true + + Left + + + + + + КоманднаяПанельОбработкаОшибок + 685 + + ГруппаОсновная + 617 + + ВыполнитьДействияИУдалить + 611 + true + true + + true + + + ВыполнитьДействияИУдалитьРасширеннаяПодсказка + 612 + Label + true + true + + Left + + + Form.Command.ВыполнитьДействияИУдалить + Normal + Auto + true + true + UserCmds + Auto + + + Назад + 609 + true + true + + true + + + Назад1РасширеннаяПодсказка + 610 + Label + true + true + + Left + + + Form.Command.Назад + Normal + Auto + true + true + UserCmds + + StdPicture.Back + + Auto + true true @@ -410,11 +503,376 @@ <key>ru</key> - <value>Удаление помеченных объектов по расписанию</value> + <value>Основная</value> - ГруппаУдалениеПомеченныхОбъектовПоРасписаниюРасширеннаяПодсказка - 479 + Группа1РасширеннаяПодсказка14 + 618 + Label + true + true + + Left + + + + + + ГруппаДействияНадЭлементамиСписка + 619 + + НеУдаленныеИзменить + 621 + true + true + + true + + + НеУдаленныеИзменить1РасширеннаяПодсказка + 622 + Label + true + true + + Left + + + Form.Command.НеУдаленныеИзменить + Normal + Auto + true + true + UserCmds + Auto + + + Действия + 639 + + УстановитьУдалить + 641 + true + true + + true + + + УстановитьУдалитьРасширеннаяПодсказка + 642 + Label + true + true + + Left + + + Form.Command.УстановитьУдалить + Normal + Auto + true + true + UserCmds + Auto + + + УстановитьЗаменитьНа + 643 + true + true + + true + + + УстановитьЗаменитьНаРасширеннаяПодсказка + 644 + Label + true + true + + Left + + + Form.Command.УстановитьЗаменитьНа + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Действия</value> + + + Группа1РасширеннаяПодсказка18 + 640 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + true + true + + true + + + <key>ru</key> + <value>Действия над элементами списка</value> + + + Группа1РасширеннаяПодсказка15 + 620 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Командная панель обработка ошибок</value> + + + Группа1РасширеннаяПодсказка23 + 686 + Label + true + true + + Left + + + + + + ДеревоПомеченныхНаУдалениеНастроить + 528 + true + true + + true + + + ДеревоПомеченныхНаУдалениеНастроитьРасширеннаяПодсказка + 529 + Label + true + true + + Left + + + Form.Command.Настроить + Normal + Auto + true + true + Right + UserCmds + Auto + + + Справка + 687 + true + true + + true + + + СправкаРасширеннаяПодсказка + 688 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель формы</value> + + + Группа1РасширеннаяПодсказка3 + 535 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + СтраницыОтображениеСостояния + 645 + + СостояниеВыполняется + 647 + + ДекорацияЗначокДлительнойОперации + 579 + + <key>ru</key> + <value>Декорация значок длительной операции</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка2 + 581 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню2 + 580 + true + + true + true + Center + + + CommonPicture.ДлительнаяОперация48 + + AsFileRef + + + + ГруппаПояснениеКДлительнойОперации + 711 + + ДекорацияПредставлениеДлительнойОперации + 582 + + <key>ru</key> + <value>Выполняется удаление всех помеченных на удаление. +Поиск помеченных</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка + 584 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 583 + true + + Label + true + true + Center + + Left + + + + ПредставлениеПрогресса + 708 + + <key>ru</key> + <value>Представление прогресса</value> + + true + + true + + + Декорация1РасширеннаяПодсказка + 710 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 709 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Пояснение к длительной операции</value> + + + Группа1РасширеннаяПодсказка5 + 712 Label true true @@ -424,16 +882,42 @@ UsualGroup - HorizontalIfPossible + Vertical Auto - true - Button true true Auto Auto + + ОтменитьОперацию + 587 + true + true + + true + + + ОтменитьОперациюРасширеннаяПодсказка + 588 + Label + true + true + + Left + + + UsualButton + Form.Command.ОтменитьОперацию + Normal + Auto + true + true + Center + UserCmds + Auto + true true @@ -441,11 +925,11 @@ <key>ru</key> - <value>Страница выбор режима удаления</value> + <value>Состояние выполняется</value> - СтраницаВыборРежимаУдаленияРасширеннаяПодсказка - 82 + Группа1РасширеннаяПодсказка20 + 648 Label true true @@ -455,20 +939,479 @@ Page - Vertical + AlwaysHorizontal + Center + false + + + + СостояниеВыполнено + 649 + + КартинкаУспешно + 699 + + <key>ru</key> + <value>Картинка успешно завершено с ошибками</value> + + true + true + + true + + + КартинкаУспешноЗавершеноРасширеннаяПодсказка1 + 701 + Label + true + true + + Left + + + + КартинкаУспешноЗавершеноКонтекстноеМеню1 + 700 + true + + true + true + Center + + + CommonPicture.Успешно32 + + + + + ДекорацияПредставлениеЗавершенияУспешно + 702 + + <key>ru</key> + <value>Удаление успешно завершено.</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка1 + 704 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню1 + 703 + true + + Label + true + true + Center + + Left + + + true + true + + true + + + <key>ru</key> + <value>Состояние выполнено</value> + + + Группа1РасширеннаяПодсказка21 + 650 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + false + + + + СостояниеВыполненоСОшибками + 671 + + КартинкаУспешноЗавершеноСОшибками + 673 + + <key>ru</key> + <value>Картинка успешно завершено с ошибками</value> + + true + true + + true + + + КартинкаУспешноЗавершеноРасширеннаяПодсказка2 + 675 + Label + true + true + + Left + + + + КартинкаУспешноЗавершеноКонтекстноеМеню2 + 674 + true + + true + true + Center + + + CommonPicture.Ошибка32 + + + + + ДекорацияПредставлениеЗавершенияНеУспешно + 676 + + <key>ru</key> + <value>Произошла ошибка.</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка2 + 678 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню2 + 677 + true + + Label + true + true + Center + + Left + + + + ПодробнееОшибкаФоновогоЗадания + 466 + + <key>ru</key> + <value>Подробнее</value> + + true + true + + true + + + СсылкаПодробнее1РасширеннаяПодсказка + 468 + Label + true + true + + Left + + + + СсылкаПодробнее1КонтекстноеМеню + 467 + true + + Label + true + Center + + + Click + СсылкаПодробнееНажатие + + true + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Состояние выполнено с ошибками</value> + + + Группа1РасширеннаяПодсказка16 + 672 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + false + + + + СостояниеУдалениеНеТребуется + 693 + + КартинкаУдалениеНеТребуется + 178 + true + true + + true + + + КартинкаУдалениеНеТребуетсяРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + + КартинкаУдалениеНеТребуетсяКонтекстноеМеню + 179 + true + + true + true + + + CommonPicture.Информация32 + + + + + НадписьУдалениеНеТребуется + 181 + + <key>ru</key> + <value>Удаление не требуется. +Нет объектов, помеченных на удаление.</value> + + true + true + + true + + + НадписьУдалениеНеТребуетсяРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + НадписьУдалениеНеТребуетсяКонтекстноеМеню + 182 + true + + Label + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Состояние удаление не требуется</value> + + + Группа1РасширеннаяПодсказка2 + 694 + Label + true + true + + Left + + + Page + + AlwaysHorizontal auto false - СтраницаПомеченныеНаУдаление - 25 + СостояниеЧастичноеУдаление + 719 + + КартинкаСостояниеЧастичноеУдаление + 721 + + <key>ru</key> + <value>Картинка состояние частичное удаление</value> + + true + true + + true + + + КартинкаУдалениеНеТребуетсяРасширеннаяПодсказка1 + 723 + Label + true + true + + Left + + + + КартинкаУдалениеНеТребуетсяКонтекстноеМеню1 + 722 + true + + true + true + + + CommonPicture.Информация32 + + + + + НадписьСостояниеЧастичноеУдаление + 724 + + <key>ru</key> + <value>Объекты удалены частично</value> + + true + true + + true + + + НадписьУдалениеНеТребуетсяРасширеннаяПодсказка1 + 726 + Label + true + true + + Left + + + + НадписьУдалениеНеТребуетсяКонтекстноеМеню1 + 725 + true + + Label + true + Center + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Состояние удаление не требуется</value> + + + Группа1РасширеннаяПодсказка9 + 720 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы отображение состояния</value> + + + Группа1РасширеннаяПодсказка19 + 646 + Label + true + true + + Left + + + Pages + + Auto + + + + СтраницыИнформация + 536 + + СтраницаВыборОбрабатываемыхОбъектов + 540 ДеревоПомеченныхНаУдаление 26 <key>ru</key> - <value>Отметьте флажками объекты, которые необходимо удалить</value> + <value>Дерево помеченных на удаление</value> true true @@ -479,7 +1422,7 @@ ДеревоПомеченныхНаУдаление false - Top + None Add Change Copy @@ -528,7 +1471,9 @@ CheckBoxField Enter Left - + + true + ДеревоПомеченныхНаУдалениеПредставление @@ -601,207 +1546,6 @@ ДеревоПомеченныхНаУдалениеКоманднаяПанель 28 - - КомандыВыбора - 57 - - КомандаСписокПомеченныхУстановитьВсе - 37 - true - true - - true - - false - - КомандаСписокПомеченныхУстановитьВсеExtendedTooltip - 92 - Label - true - true - - Left - - - Form.Command.ДеревоПомеченныхНаУдалениеУстановитьВсе - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - ДеревоПомеченныхНаУдалениеСнятьВсе - 38 - true - true - - true - - false - - ДеревоПомеченныхНаУдалениеСнятьВсеРасширеннаяПодсказка - 93 - Label - true - true - - Left - - - Form.Command.ДеревоПомеченныхНаУдалениеСнятьВсе - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды выбора</value> - - - КомандыВыбораExtendedTooltip - 91 - Label - true - true - - Left - - - - Compact - - - - ДеревоПомеченныхНаУдалениеИзменить - 339 - true - true - - true - - - ДеревоПомеченныхНаУдалениеИзменитьРасширеннаяПодсказка - 340 - Label - true - true - - Left - - - Form.Command.ДеревоПомеченныхНаУдалениеИзменить - Normal - Auto - true - true - UserCmds - Auto - - - ДеревоПомеченныхНаУдалениеВспомогательныеКнопки - 301 - - ДеревоПомеченныхНаУдалениеОбновить - 70 - true - true - - true - - - ДеревоПомеченныхНаУдалениеОбновитьРасширеннаяПодсказка - 95 - Label - true - true - - Left - - - Form.Command.ДеревоПомеченныхНаУдалениеОбновить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокПомеченныхНаУдалениеВывестиСписок - 65 - true - true - - true - - - СписокПомеченныхНаУдалениеВывестиСписокExtendedTooltip - 96 - Label - true - true - - Left - - - Form.Item.ДеревоПомеченныхНаУдаление.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Дерево помеченных на удаление вспомогательные кнопки</value> - - - ДеревоПомеченныхНаУдалениеВспомогательныеКнопкиРасширеннаяПодсказка - 302 - Label - true - true - - Left - - - - Left @@ -1104,10 +1848,7 @@ AutoUse true true - false - false false - true Auto Auto true @@ -1130,11 +1871,11 @@ <key>ru</key> - <value>Страница помеченные на удаление</value> + <value>Страница выбор обрабатываемых объектов</value> - СтраницаПомеченныеНаУдалениеРасширеннаяПодсказка - 84 + Группа1РасширеннаяПодсказка6 + 541 Label true true @@ -1165,7 +1906,6 @@ ru Надпись итоги частичного удаления - true true true @@ -1283,121 +2023,12 @@ НеУдаленныеКоманднаяПанель 222 - - НеУдаленныеЗаменитьНа - 227 - true - true - - true - - - НеУдаленныеЗаменитьНаРасширеннаяПодсказка - 228 - Label - true - true - - Left - - - Form.Command.НеУдаленныеЗаменитьНа - Normal - Auto - true - true - UserCmds - Auto - - - НеУдаленныеУдалить - 283 - true - true - - true - - - НеУдаленныеУдалитьРасширеннаяПодсказка - 284 - Label - true - true - - Left - - - Form.Command.НеУдаленныеУдалить - Normal - Auto - true - true - UserCmds - Auto - - - НеУдаленныеИзменить - 285 - true - true - - true - - - НеУдаленныеИзменитьРасширеннаяПодсказка - 286 - Label - true - true - - Left - - - Form.Item.НеУдаленные.StandardCommand.Change - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - НеУдаленныеВывестиСписок - 343 - true - - true - - - НеУдаленныеВывестиСписокРасширеннаяПодсказка - 344 - Label - true - true - - Left - - - Form.Item.НеУдаленные.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - Left - true Selection НеУдаленныеВыбор - - BeforeDeleteRow - НеУдаленныеПередУдалением - OnActivateRow НеУдаленныеПриАктивизацииСтроки @@ -1516,58 +2147,6 @@ UserCmds Auto - - НеУдаленныеУдалитьИзМеню - 350 - true - true - - true - - - НеУдаленныеУдалитьИзМенюРасширеннаяПодсказка - 351 - Label - true - true - - Left - - - Form.Command.НеУдаленныеУдалить - Normal - Auto - true - true - UserCmds - Auto - - - НеУдаленныеЗаменитьНаИзМеню - 352 - true - true - - true - - - НеУдаленныеЗаменитьНаИзМенюРасширеннаяПодсказка - 353 - Label - true - true - - Left - - - Form.Command.НеУдаленныеЗаменитьНа - Normal - Auto - true - true - UserCmds - Auto - НеУдаленныеВывестиСписокИзМеню 354 @@ -1664,7 +2243,6 @@ Style.FieldTextColor - true true true @@ -1708,113 +2286,11 @@ СтраницыВариантовОтображенияПричин 255 - - СтраницаТекстОшибки - 259 - - ТекстОшибки - 475 - - <key>ru</key> - <value>Текст ошибки</value> - - true - true - - true - - - ТекстОшибкиРасширеннаяПодсказка - 477 - Label - true - true - - Left - - - - ТекстОшибкиКонтекстноеМеню - 476 - true - - Label - true - true - - Left - - - - СсылкаПодробнее - 452 - - <key>ru</key> - <value>Подробнее</value> - - true - true - - true - - - СсылкаПодробнееРасширеннаяПодсказка - 454 - Label - true - true - - Left - - - - СсылкаПодробнееКонтекстноеМеню - 453 - true - - Label - true - Right - - - Click - СсылкаПодробнееНажатие - - true - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница текст ошибки</value> - - - СтраницаТекстОшибкиРасширеннаяПодсказка - 260 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - СтраницаПричиныНеУдаления 257 - СвязиНеУдаленных + МестаИспользованияНеудаленных 235 <key>ru</key> @@ -1826,36 +2302,35 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>СвязиНеУдаленных</segments> + <segments>МестаИспользованияНеудаленных</segments> </dataPath> <titleLocation>None</titleLocation> <excludedCommands>Add</excludedCommands> - <excludedCommands>CancelSearch</excludedCommands> <excludedCommands>Copy</excludedCommands> <excludedCommands>CopyToClipboard</excludedCommands> <excludedCommands>Delete</excludedCommands> <excludedCommands>EndEdit</excludedCommands> - <excludedCommands>Find</excludedCommands> <excludedCommands>MoveDown</excludedCommands> <excludedCommands>MoveUp</excludedCommands> <excludedCommands>OutputList</excludedCommands> <excludedCommands>SelectAll</excludedCommands> + <excludedCommands>ShowMultipleSelection</excludedCommands> <excludedCommands>SortListAsc</excludedCommands> <excludedCommands>SortListDesc</excludedCommands> <items xsi:type="form:FormField"> <name>СвязиНеУдаленныхПредставление</name> - <id>248</id> + <id>601</id> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>СвязиНеУдаленных.Представление</segments> + <segments>МестаИспользованияНеудаленных.Представление</segments> </dataPath> <extendedTooltip> - <name>СвязиНеУдаленныхПредставлениеРасширеннаяПодсказка</name> - <id>250</id> + <name>РасширеннаяПодсказка</name> + <id>603</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1864,13 +2339,12 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>СвязиНеУдаленныхПредставлениеКонтекстноеМеню</name> - <id>249</id> + <name>КонтекстноеМеню</name> + <id>602</id> <autoFill>true</autoFill> </contextMenu> <type>InputField</type> - <warningOnEditRepresentation>DontShow</warningOnEditRepresentation> - <markRequiredComplete>false</markRequiredComplete> + <readOnly>true</readOnly> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -1878,91 +2352,102 @@ <extInfo xsi:type="form:InputFieldExtInfo"> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> - <horizontalStretch>true</horizontalStretch> <wrap>true</wrap> - <passwordMode>false</passwordMode> - <multiLine>false</multiLine> - <extendedEdit>true</extendedEdit> - <autoChoiceIncomplete>false</autoChoiceIncomplete> - <autoMarkIncomplete>false</autoMarkIncomplete> + <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> - <editTextUpdate>DontUse</editTextUpdate> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>СвязиНеУдаленныхДействие</name> + <id>604</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>МестаИспользованияНеудаленных.ДействиеПредставление</segments> + </dataPath> + <handlers> + <event>OnChange</event> + <name>СвязиНеУдаленныхДействиеПриИзменении</name> + </handlers> + <extendedTooltip> + <name>ПолеРасширеннаяПодсказка</name> + <id>606</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПолеКонтекстноеМеню</name> + <id>605</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <cellHyperlink>true</cellHyperlink> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <cellHyperlinkRepresentation>Show</cellHyperlinkRepresentation> + <cellHyperlinkDisplayVariant>Always</cellHyperlinkDisplayVariant> + <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>ChoiceProcessing</event> + <name>СвязиНеУдаленныхДействиеОбработкаВыбора</name> + </handlers> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <multiLine>true</multiLine> + <listChoiceMode>true</listChoiceMode> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <editTextUpdate>OnValueChange</editTextUpdate> + <choiceList> + <presentation> + <key>ru</key> + <value>Пометить на удаление и удалить</value> + </presentation> + <value xsi:type="core:StringValue"> + <value>ПометитьНаУдаление</value> + </value> + </choiceList> + <choiceList> + <presentation> + <key>ru</key> + <value>Заменить ссылку</value> + </presentation> + <value xsi:type="core:StringValue"> + <value>ЗаменитьСсылку</value> + </value> + </choiceList> <textSize>Normal</textSize> </extInfo> </items> <autoCommandBar> <name>СвязиНеУдаленныхКоманднаяПанель</name> <id>237</id> - <items xsi:type="form:Button"> - <name>СвязиНеУдаленныхУдалить</name> - <id>251</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>СвязиНеУдаленныхУдалитьРасширеннаяПодсказка</name> - <id>252</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>Picture</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <picture xsi:type="core:PictureRef"> - <picture>StdPicture.MarkToDelete</picture> - </picture> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>СвязиНеУдаленныхИзменить</name> - <id>253</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>СвязиНеУдаленныхИзменитьРасширеннаяПодсказка</name> - <id>254</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Item.СвязиНеУдаленных.StandardCommand.Change</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Picture</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> - </items> <horizontalAlign>Left</horizontalAlign> - <autoFill>true</autoFill> </autoCommandBar> <handlers> <event>Selection</event> <name>СвязиНеУдаленныхВыбор</name> </handlers> <handlers> - <event>BeforeDeleteRow</event> - <name>СвязиНеУдаленныхПередУдалением</name> + <event>OnActivateRow</event> + <name>МестаИСпользованияНЕудаленныхПриАктивизацииСтроки</name> </handlers> <handlers> - <event>BeforeRowChange</event> - <name>СвязиНеУдаленныхПередНачаломИзменения</name> + <event>ChoiceProcessing</event> + <name>МестаИспользованияНеудаленныхОбработкаВыбора</name> </handlers> <searchStringAddition> <name>СвязиНеУдаленныхСтрокаПоиска</name> @@ -1982,7 +2467,7 @@ <id>428</id> <autoFill>true</autoFill> </contextMenu> - <source>СвязиНеУдаленных</source> + <source>МестаИспользованияНеудаленных</source> <extInfo xsi:type="form:SearchStringAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> @@ -2006,7 +2491,7 @@ <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> - <source>СвязиНеУдаленных</source> + <source>МестаИспользованияНеудаленных</source> <extInfo xsi:type="form:ViewStatusAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> @@ -2030,7 +2515,7 @@ <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> - <source>СвязиНеУдаленных</source> + <source>МестаИспользованияНеудаленных</source> <extInfo xsi:type="form:SearchControlAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> @@ -2066,7 +2551,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Item.СвязиНеУдаленных.StandardCommand.Change</commandName> + <commandName>Form.Command.НеУдаленныеИзменить</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -2074,41 +2559,13 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> - <items xsi:type="form:Button"> - <name>СвязиНеУдаленныхУдалитьИзМеню</name> - <id>361</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>СвязиНеУдаленныхУдалитьИзМенюРасширеннаяПодсказка</name> - <id>362</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.СвязиНеУдаленныхУдалить</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <picture xsi:type="core:PictureRef"> - <picture>StdPicture.MarkToDelete</picture> - </picture> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <autoFill>true</autoFill> </contextMenu> + <representation>Tree</representation> <autoMaxWidth>true</autoMaxWidth> <height>5</height> <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> + <multipleChoice>true</multipleChoice> <selectionMode>MultiRow</selectionMode> <headerHeight>1</headerHeight> <footerHeight>1</footerHeight> @@ -2119,19 +2576,17 @@ <horizontalLinesBWA>false</horizontalLinesBWA> <verticalLinesBWA>false</verticalLinesBWA> <useAlternationRowColorBWA>false</useAlternationRowColorBWA> - <autoInsertNewRow>true</autoInsertNewRow> <searchOnInput>Auto</searchOnInput> <initialListView>Auto</initialListView> <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> <rowPictureDataPath xsi:type="form:DataPath"> - <segments>СвязиНеУдаленных.НомерКартинки</segments> + <segments>МестаИспользованияНеудаленных.НомерКартинки</segments> </rowPictureDataPath> <rowsPicture xsi:type="core:PictureRef"> <picture>CommonPicture.ПиктограммыЭлементов</picture> </rowsPicture> <autoMaxCardHeight>true</autoMaxCardHeight> - <rowFilter xsi:type="core:UndefinedValue"/> </items> <visible>true</visible> <enabled>true</enabled> @@ -2159,6 +2614,140 @@ <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> + <items xsi:type="form:FormGroup"> + <name>СтраницаТекстОшибки</name> + <id>259</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаТекстОшибки</name> + <id>634</id> + <items xsi:type="form:Decoration"> + <name>ТекстОшибки</name> + <id>636</id> + <title> + <key>ru</key> + <value>Текст ошибки</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка1 + 638 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню1 + 637 + true + + Label + true + true + + Left + + + + СсылкаПодробнее + 452 + + <key>ru</key> + <value>Подробнее</value> + + true + true + + true + + + СсылкаПодробнееРасширеннаяПодсказка + 454 + Label + true + true + + Left + + + + СсылкаПодробнееКонтекстноеМеню + 453 + true + + Label + true + Left + + + Click + СсылкаПодробнееНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Текст ошибки</value> + + + Группа1РасширеннаяПодсказка17 + 635 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница текст ошибки</value> + + + СтраницаТекстОшибкиРасширеннаяПодсказка + 260 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + true true @@ -2242,44 +2831,6 @@ Auto - - НадписьВПодвале - 449 - - <key>ru</key> - <value>Для удаления объектов необходимо либо пометить на удаление все связанные с ними объекты (в списке "Места использования"), либо очистить (заменить) их ссылки в перечисленных местах использования.</value> - - true - true - - true - - - НадписьВПодвалеРасширеннаяПодсказка - 451 - Label - true - true - - Left - - - - НадписьВПодвалеКонтекстноеМеню - 450 - true - - Label - 80 - true - - Style.ПоясняющийТекст - - - Left - Center - - true true @@ -2307,795 +2858,6 @@ false - - СтраницаДлительнаяОперация - 59 - - ГоризонтальнаяГруппа1 - 492 - - ФоновоеЗаданиеАнимация - 446 - - <key>ru</key> - <value>Фоновое задание анимация</value> - - true - true - - true - - - ФоновоеЗаданиеАнимацияРасширеннаяПодсказка - 448 - Label - true - true - - Left - - - - ФоновоеЗаданиеАнимацияКонтекстноеМеню - 447 - true - - true - true - Center - - - CommonPicture.ДлительнаяОперация48 - - - - - Группа2 - 444 - - НадписьДлительнаяОперация - 202 - - <key>ru</key> - <value>Надпись длительная операция</value> - - true - true - - true - - - НадписьДлительнаяОперацияРасширеннаяПодсказка - 204 - Label - true - true - - Left - - - - НадписьДлительнаяОперацияКонтекстноеМеню - 203 - true - - Label - 1 - true - Center - - Center - - - - ФоновоеЗаданиеПроцент - 469 - true - true - - true - - - ФоновоеЗаданиеПроцент - - None - - ФоновоеЗаданиеПроцентРасширеннаяПодсказка - 471 - Label - true - true - - Left - - - - ФоновоеЗаданиеПроцентКонтекстноеМеню - 470 - true - - ProgressBarField - Center - Enter - true - Left - true - - 32 - true - 1 - true - true - 100 - true - - - - ФоновоеЗаданиеСостояние - 472 - true - true - - true - - - ФоновоеЗаданиеСостояние - - None - - ФоновоеЗаданиеСостояниеРасширеннаяПодсказка - 474 - Label - true - true - - Left - - - - ФоновоеЗаданиеСостояниеКонтекстноеМеню - 473 - true - - LabelField - Center - Center - Center - Enter - true - Left - true - - true - - - true - true - - true - - Center - - Группа2РасширеннаяПодсказка - 445 - Label - true - true - - Left - - - UsualGroup - - Vertical - Center - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 1</value> - - - ГоризонтальнаяГруппа1РасширеннаяПодсказка - 493 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница длительная операция</value> - - true - - СтраницаДлительнаяОперацияРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - Page - - Vertical - Center - auto - false - - - - СтраницаУдалениеНеТребуется - 174 - - ГоризонтальнаяГруппа2 - 507 - - КартинкаУдалениеНеТребуется - 178 - true - true - - true - - - КартинкаУдалениеНеТребуетсяРасширеннаяПодсказка - 180 - Label - true - true - - Left - - - - КартинкаУдалениеНеТребуетсяКонтекстноеМеню - 179 - true - - true - true - Center - - - CommonPicture.Информация32 - - - - - НадписьУдалениеНеТребуется - 181 - - <key>ru</key> - <value>Удаление не требуется. -Нет объектов, помеченных на удаление.</value> - - true - true - - true - - - НадписьУдалениеНеТребуетсяРасширеннаяПодсказка - 183 - Label - true - true - - Left - - - - НадписьУдалениеНеТребуетсяКонтекстноеМеню - 182 - true - - Label - 5 - true - Center - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 2</value> - - - ГоризонтальнаяГруппа2РасширеннаяПодсказка - 508 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница удаление не требуется</value> - - true - - СтраницаУдалениеНеТребуетсяРасширеннаяПодсказка - 175 - Label - true - true - - Left - - - Page - - Vertical - Center - auto - false - - - - СтраницаУспешноЗавершено - 142 - - ГоризонтальнаяГруппа3 - 497 - - КартинкаУспешноЗавершено - 146 - true - true - - true - - - КартинкаУспешноЗавершеноРасширеннаяПодсказка - 148 - Label - true - true - - Left - - - - КартинкаУспешноЗавершеноКонтекстноеМеню - 147 - true - - true - true - Center - - - CommonPicture.Успешно32 - - - - - НадписьУспешноЗавершено - 149 - - <key>ru</key> - <value>Удаление помеченных объектов успешно завершено. -Удалено объектов: 47.</value> - - true - true - - true - - - НадписьУспешноЗавершеноРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - - НадписьУспешноЗавершеноКонтекстноеМеню - 150 - true - - Label - 5 - true - Center - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 3</value> - - - ГоризонтальнаяГруппа3РасширеннаяПодсказка - 498 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница успешно завершено</value> - - true - - СтраницаУспешноЗавершеноРасширеннаяПодсказка - 143 - Label - true - true - - Left - - - Page - - Vertical - Center - auto - false - - - - СтраницаВозниклаОшибка - 458 - - ГоризонтальнаяГруппа4 - 502 - - КартинкаПредупреждение32 - 460 - - <key>ru</key> - <value>Картинка предупреждение32</value> - - true - true - - true - - - КартинкаПредупреждение32РасширеннаяПодсказка - 462 - Label - true - true - - Left - - - - КартинкаПредупреждение32КонтекстноеМеню - 461 - true - - true - true - Top - - - CommonPicture.Предупреждение32 - - - - - НадписьТекстОшибки - 463 - - <key>ru</key> - <value>Надпись текст ошибки</value> - - true - true - - true - - - НадписьТекстОшибкиРасширеннаяПодсказка - 465 - Label - true - true - - Left - - - - НадписьТекстОшибкиКонтекстноеМеню - 464 - true - - Label - 10 - true - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа 4</value> - - - ГоризонтальнаяГруппа4РасширеннаяПодсказка - 503 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Auto - true - true - Auto - Auto - - - - СсылкаПодробнее1 - 466 - - <key>ru</key> - <value>Технические сведения о проблеме</value> - - true - true - - true - - - СсылкаПодробнее1РасширеннаяПодсказка - 468 - Label - true - true - - Left - - - - СсылкаПодробнее1КонтекстноеМеню - 467 - true - - Label - true - Center - - - Click - СсылкаПодробнееНажатие - - true - Left - Center - - - - ПодсказкаМонопольногоРежима - 509 - - КартинкаПодсказка - 511 - - <key>ru</key> - <value>Картинка подсказка</value> - - true - true - - true - - - КартинкаПодсказкаРасширеннаяПодсказка - 513 - Label - true - true - - Left - - - - КартинкаПодсказкаКонтекстноеМеню - 512 - true - - true - true - - - CommonPicture.Информация - - AsFileRef - - - - ПодсказкаМонопольно - 514 - - <key>ru</key> - <value>Снимите флажок <b>Заблокировать всю работу в программе и ускорить удаление</> и повторите удаление, чтобы получить информацию, какие именно объекты невозможно удалить. -Для удаления остальных объектов рекомендуется воспользоваться выборочным удалением.</value> - - true - true - - true - - - ПодсказкаМонопольноРасширеннаяПодсказка - 516 - Label - true - true - - Left - - - - ПодсказкаМонопольноКонтекстноеМеню - 515 - true - - true - Label - 60 - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Подсказка монопольного режима</value> - - - ПодсказкаМонопольногоРежимаРасширеннаяПодсказка - 510 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Возникла ошибка</value> - - true - - СтраницаВозниклаОшибкаРасширеннаяПодсказка - 459 - Label - true - true - - Left - - - Page - - Vertical - Center - auto - false - - true true @@ -3103,12 +2865,11 @@ <key>ru</key> - <value>Страницы</value> + <value>Страницы информация</value> - true - СтраницыРасширеннаяПодсказка - 81 + Группа1РасширеннаяПодсказка4 + 537 Label true true @@ -3122,51 +2883,19 @@ - КомандныеПанели - 164 - - ЛеваяКоманднаяПанель - 152 - - КнопкаНазад - 52 - true - true - - true - - false - - КнопкаНазадРасширеннаяПодсказка - 115 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - + ГруппаКартинок + 545 + + Предупреждение32 + 547 true true true - - <key>ru</key> - <value>Левая командная панель</value> - - true - ЛеваяКоманднаяПанельРасширеннаяПодсказка - 153 + Предупреждение32РасширеннаяПодсказка + 549 Label true true @@ -3174,107 +2903,30 @@ Left - CommandBar - - Left + + Предупреждение32КонтекстноеМеню + 548 + true + + true + true + + + CommonPicture.Предупреждение32 + - - ПраваяКоманднаяПанель - 2 - - КнопкаДалее - 3 - true - true - - true - - false - - КнопкаДалееРасширеннаяПодсказка - 116 - Label - true - true - - Left - - - Form.Command.КомандаДалее - Normal - Auto - true - true - UserCmds - Auto - - - КнопкаЗакрыть - 4 - true - true - - true - - false - - КнопкаЗакрытьРасширеннаяПодсказка - 118 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - true - true - UserCmds - Auto - - - КнопкаСправка - 5 - true - true - - true - - false - - КнопкаСправкаРасширеннаяПодсказка - 119 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - + + ДлительнаяОперация48 + 550 true true true - - <key>ru</key> - <value>Правая командная панель</value> - - true - ПраваяКоманднаяПанельРасширеннаяПодсказка - 114 + ДлительнаяОперация48РасширеннаяПодсказка + 552 Label true true @@ -3282,23 +2934,135 @@ Left - CommandBar - - Right + + ДлительнаяОперация48КонтекстноеМеню + 551 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + - true - true + + Информация32 + 553 + + <key>ru</key> + <value>Информация32</value> + + true + true + + true + + + Информация32РасширеннаяПодсказка + 555 + Label + true + true + + Left + + + + Информация32КонтекстноеМеню + 554 + true + + true + true + + + CommonPicture.Информация32 + + + + + Внимание16 + 556 + + <key>ru</key> + <value>Внимание16</value> + + true + true + + true + + + Внимание16РасширеннаяПодсказка + 558 + Label + true + true + + Left + + + + Внимание16КонтекстноеМеню + 557 + true + + true + true + + + CommonPicture.Предупреждение + + + + + Информация16 + 559 + + <key>ru</key> + <value>Информация16</value> + + true + true + + true + + + Информация16РасширеннаяПодсказка + 561 + Label + true + true + + Left + + + + Информация16КонтекстноеМеню + 560 + true + + true + true + + + CommonPicture.Информация + + + + false true <key>ru</key> - <value>Командные панели</value> + <value>Картинок</value> - КомандныеПанелиРасширеннаяПодсказка - 165 + ГруппаКартинокРасширеннаяПодсказка + 546 Label true true @@ -3308,7 +3072,7 @@ UsualGroup - HorizontalIfPossible + Vertical Auto true true @@ -3348,14 +3112,18 @@ Retry SaveValues Yes - LockOwner + DontBlock Use true true Vertical true auto - true + + + КоманднаяПанельФормы + + Объект 1 @@ -3370,27 +3138,6 @@
    true
    - - РежимУдаления - - <key>ru</key> - <value>Режим удаления</value> - - 2 - - String - - - - true - - - true - - - РежимУдаления - - ДеревоПомеченныхНаУдаление @@ -3415,7 +3162,10 @@ 1 - Boolean + Number + + 1 + true @@ -3425,7 +3175,7 @@ - Значение + УдаляемыйСсылка 2 @@ -3469,6 +3219,32 @@ true + + БылиОшибкиПриУдалении + 63 + + Boolean + + + true + + + true + + + + ЭтоОписаниеОбъектаМетаданных + 64 + + Boolean + + + true + + + true + + ТекстОшибки @@ -3562,10 +3338,11 @@ - ПометкаУдаления - 5 + ПредставлениеУдаляемый + 59 - Boolean + String + true @@ -3577,13 +3354,324 @@ СвязиНеУдаленных + 20 + + ValueTable + + + true + + + true + + + УдаляемыйСсылка + 1 + + + true + + + true + + + + ОбнаруженныйСсылка + 2 + + + true + + + true + + + + НомерКартинки + 3 + + Number + + 10 + + + + true + + + true + + + + Представление + 4 + + String + + + + true + + + true + + + + Видимость + 5 + + Boolean + + + true + + + true + + + + ПометкаУдаления + 6 + + Boolean + + + true + + + true + + + + СсылочногоТипа + 7 + + Boolean + + + true + + + true + + + + ЭтоОшибка + 8 + + Boolean + + + true + + + true + + + + ЭтоКонстанта + 9 + + Boolean + + + true + + + true + + + + ПометкаУдаленияМодифицирована + 10 + + Boolean + + + true + + + true + + + + ПредставлениеУдаляемый + 60 + + String + + + + true + + + true + + + + + НеУдаленныеПодсказка + + <key>ru</key> + <value>Не удаленные подсказка</value> + + 22 + + String + + + + true + + + true + + + + Монопольно + 8 + + Boolean + + + true + + + true + + + Монопольно + + + + ПодробныйТекстОшибки + 23 + + String + + + + true + + + true + + + + БыстрыйПоиск + 24 + + + true + + + true + + + + НеУдаленныеИдентификаторТекущейСтроки + 25 + + + true + + + true + + + + ПоказатьДиалогПередЗакрытием + 26 + + Boolean + + + true + + + true + + + + УдалениеПомеченныхИдентификатор + 29 + + + true + + + true + + + + УдалениеПомеченныхИспользование + 30 + + Boolean + + + true + + + true + + + + УдалениеПомеченныхРасписание + 31 + + + true + + + true + + + + ОтборМетаданных + 32 + + ValueList + + + true + + + true + + + ОтборМетаданных + + + + String + + + + + + ТекущаяОперация + 34 + + String + + + + true + + + true + + + + МестаИспользованияНеудаленных <key>ru</key> <value>Связи не удаленных</value> - 20 + 35 - ValueTable + ValueTree true @@ -3725,17 +3813,71 @@ true + + Действие + 37 + + String + + + + true + + + true + + + + ДействиеПредставление + + <key>ru</key> + <value>Действие представление</value> + + 43 + + String + + + + true + + + true + + + + ОсновнаяПричина + 48 + + Boolean + + + true + + + true + + + + ПредставлениеУдаляемый + 61 + + String + + + + true + + + true + + - НеУдаленныеПодсказка - - <key>ru</key> - <value>Не удаленные подсказка</value> - - 22 + КешПричинНеудаления + 36 - String - + ValueList true @@ -3743,16 +3885,109 @@ true + + + - Монопольно - - <key>ru</key> - <value>Монопольно</value> - - 8 + ТаблицаДействий + 38 - Boolean + ValueTable + + + true + + + true + + + ОбнаруженныйСсылка + 40 + + + true + + + true + + + + Действие + 41 + + String + + + + true + + + true + + + + ПараметрДействия + 42 + + + true + + + true + + + + Источник + 49 + + AnyRef + + + true + + + true + + + + + ВариантыДействий + 44 + + ValueList + + + true + + + true + + + + + + + ДействияМестИспользованияНеудаленных + 46 + + ValueList + + + true + + + true + + + + + + + ДополнительныеРеквизитыПомеченныхНаУдаления + 50 + + ValueTable true @@ -3761,12 +3996,84 @@ true - Монопольно + ДополнительныеРеквизитыПомеченныхНаУдаления + + + Реквизит + 51 + + String + + + + true + + + true + + + + Метаданные + 52 + + String + + + + true + + + true + + + + Представление + 53 + + String + + + + true + + + true + + + + + РежимУдаления + 54 + + String + + + + true + + + true + + + РежимУдаления - ПодробныйТекстОшибки - 23 + ИспользоватьРегламентноеУдаление + 58 + + Boolean + + + true + + + true + + + + ПодробныйТекстОшибкиФоновогоЗадания + 62 String @@ -3779,69 +4086,9 @@ - БыстрыйПоиск - 24 - - - true - - - true - - - - НеУдаленныеИдентификаторТекущейСтроки - 25 - - - true - - - true - - - - ПоказатьДиалогПередЗакрытием - 26 + АдресРезультатаПредыдущегоШага + 65 - Boolean - - - true - - - true - - - - ФоновоеЗаданиеПроцент - - <key>ru</key> - <value>Фоновое задание процент</value> - - 27 - - Number - - 10 - - - - true - - - true - - - - ФоновоеЗаданиеСостояние - - <key>ru</key> - <value>Фоновое задание состояние</value> - - 28 - - FormattedString String @@ -3853,23 +4100,8 @@ - УдалениеПомеченныхИдентификатор - 29 - - - true - - - true - - - - УдалениеПомеченныхИспользование - - <key>ru</key> - <value>Удаление помеченных использование</value> - - 30 + УдалятьПриОткрытии + 66 Boolean @@ -3881,9 +4113,11 @@ - УдалениеПомеченныхРасписание - 31 - + ЭтоМобильныйКлиент + 67 + + Boolean + true @@ -3891,24 +4125,6 @@ true - - КомандаДалее - - <key>ru</key> - <value>Далее ></value> - - 1 - - true - - - - КомандаДалее - - - DontUse - Auto - ДеревоПомеченныхНаУдалениеУстановитьВсе @@ -3959,24 +4175,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>КомандаНазад</name> - <title> - <key>ru</key> - <value>< Назад</value> - - 4 - - true - - - - КомандаНазад - - - DontUse - Auto - ДеревоПомеченныхНаУдалениеОбновить @@ -4004,53 +4202,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>СвязиНеУдаленныхУдалить</name> - <title> - <key>ru</key> - <value>Пометить на удаление / Снять пометку</value> - - 6 - - ru - Пометить на удаление / Снять пометку - - - true - - - StdPicture.MarkToDelete - - - - СвязиНеУдаленныхУдалить - - - DontUse - Auto - - - НеУдаленныеЗаменитьНа - - <key>ru</key> - <value>Заменить...</value> - - 7 - - ru - Заменить во всех местах использования... - - - true - - - - НеУдаленныеЗаменитьНа - - - DontUse - Auto - ДеревоПомеченныхНаУдалениеИзменить @@ -4078,52 +4229,279 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>НеУдаленныеУдалить</name> + <name>УдалитьВсе</name> <title> <key>ru</key> - <value>Пометить на удаление / Снять пометку</value> + <value>Удалить все</value> - 9 + 11 + + true + + + + УдалитьВсе + + + Auto + Auto + + + УдалитьВыбранные + + <key>ru</key> + <value>Удалить выбранные</value> + + 12 + + true + + + + УдалитьВыбранные + + + Auto + Auto + + + НастроитьОтбор + + <key>ru</key> + <value>Настроить отбор</value> + + 13 + + true + + + + НастроитьОтбор + + + Auto + Auto + + + Настроить + + <key>ru</key> + <value>Настроить...</value> + + 14 + + true + + + + Настроить + + + Auto + Auto + + + Обновить + + <key>ru</key> + <value>Обновить</value> + + 15 + + true + + F5 + + StdPicture.Reread + + + + Обновить + + + Picture + Auto + Auto + + + ОтменитьОперацию + + <key>ru</key> + <value>Отменить</value> + + 16 + + true + + + + ОтменитьОперацию + + + Auto + Auto + + + Назад + + <key>ru</key> + <value>К списку помеченных</value> + + 17 ru - Пометить на удаление / Снять пометку + Вернуться к выбору объектов для удаления true + + + КВыборуОбъектов + + + Auto + Auto + + + ВыполнитьДействияИУдалить + + <key>ru</key> + <value>Повторить удаление</value> + + 18 + + true + + + + ВыполнитьДействияИУдалить + + + Auto + Auto + + + НеУдаленныеИзменить + + <key>ru</key> + <value>Изменить</value> + + 19 + + true + - StdPicture.MarkToDelete + StdPicture.Change - НеУдаленныеУдалить + НеУдаленныеИзменить - DontUse + Picture + Auto Auto - УдалениеПомеченныхНастроитьРасписание + УстановитьУдалить <key>ru</key> - <value>Настроить расписание</value> + <value>Удалить</value> - 10 - - ru - Настроить расписание для автоматического удаления помеченных объектов в регламентном задании. - + 20 true - УдалениеПомеченныхНастроитьРасписание + УстановитьУдалить - DontUse + Auto Auto + + УстановитьЗаменитьНа + + <key>ru</key> + <value>Заменить на</value> + + 21 + + true + + + + УстановитьЗаменитьНа + + + Auto + Auto + + + СвернутьСтрокиДереваВыбораПомеченных + + <key>ru</key> + <value>Свернуть строки дерева выбора помеченных</value> + + 22 + + true + + + StdPicture.CollapseAll + + + + СвернутьСтрокиДереваВыбораПомеченных + + + Auto + Auto + + + РазвернутьСтрокиДереваПомеченных + + <key>ru</key> + <value>Развернуть строки дерева помеченных</value> + + 23 + + true + + + StdPicture.ExpandAll + + + + РазвернутьСтрокиДереваПомеченных + + + Auto + Auto + + + УдаляемыеОбъекты + + ValueList + + true + + + РежимУдаления + + String + + + + + ОтборМетаданных + + ValueList + + true + diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index ef7fb191e..17a193e12 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -6,6 +6,27 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// +#Область ОписаниеПеременных + +// Информация о текущем выполняемом фоновом задании +&НаКлиенте +Перем ВыполняемаяОперация;// см. Неопределено, ДлительныеОперации.ВыполнитьФункцию + +&НаКлиенте +Перем ПредставлениеОперации;// Строка + +// Результат, который возвращает УдалениеПомеченныхОбъектовКлиент.НачатьУдалениеПомеченных +&НаКлиенте +Перем СведенияОРезультатахУдаления;// см. УдалениеПомеченныхОбъектовСлужебныйКлиентСервер.НовыйСведенияОРезультатахУдаления, Неопределено + +&НаКлиенте +Перем ОчередьЗаданийФормы; // Массив из Строка + +&НаКлиенте +Перем РезультатПредыдущегоШага; + +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -16,52 +37,51 @@ Возврат; // Отказ устанавливается в ПриОткрытии. КонецЕсли; - Если ОбщегоНазначения.РазделениеВключено() - И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Если ОбщегоНазначения.РазделениеВключено() И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда ТекстОшибки = НСтр("ru = 'Для удаления помеченных необходимо войти в область данных.'"); Возврат; // Отказ устанавливается в ПриОткрытии. КонецЕсли; - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда - Элементы.НеУдаленныеЗаменитьНа.Видимость = Ложь; - Элементы.НеУдаленныеЗаменитьНаИзМеню.Видимость = Ложь; + Если Параметры.УдаляемыеОбъекты.Количество() > 0 Тогда + НастроитьФормуДляРаботыКакСервис(); КонецЕсли; - РегламентноеЗадание = РегламентныеЗаданияНайтиПредопределенное(); - - ВидимостьФлажка = (РегламентноеЗадание <> Неопределено); - Если ВидимостьФлажка Тогда - УдалениеПомеченныхИдентификатор = РегламентноеЗадание.УникальныйИдентификатор; - УдалениеПомеченныхИспользование = РегламентноеЗадание.Использование; - УдалениеПомеченныхРасписание = РегламентноеЗадание.Расписание; + Если Параметры.ОтборМетаданных.Количество() > 0 Тогда + УстановитьПереданныйОтборМетаданных(); КонецЕсли; - ВидимостьРасписания = ВидимостьФлажка - И Не ОбщегоНазначения.РазделениеВключено() - И Пользователи.ЭтоПолноправныйПользователь(, Истина); - - Элементы.УдалениеПомеченныхИспользование.Видимость = ВидимостьФлажка; - Элементы.УдалениеПомеченныхНастроитьРасписание.Видимость = ВидимостьРасписания; - Элементы.УдалениеПомеченныхПредставлениеРасписания.Видимость = ВидимостьРасписания; - Если Не ВидимостьРасписания Тогда - Элементы.УдалениеПомеченныхИспользование.Заголовок = НСтр("ru = 'Автоматически удалять помеченные объекты'"); + ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент(); + Если ЭтоМобильныйКлиент Тогда + Элементы.ДеревоПомеченныхНаУдалениеНастроить.Видимость = Ложь; + Элементы.ДеревоПомеченныхНаУдалениеИзменить.Видимость = Ложь; + Элементы.НеУдаленныеИзменить.Видимость = Ложь; + Элементы.Действия.Видимость = Ложь; + Элементы.Назад.Видимость = Ложь; КонецЕсли; - УстановитьДоступность(); - - БыстрыйПоиск = Новый Структура; - БыстрыйПоиск.Вставить("ПолныеИменаОбъектовМетаданных", Новый Соответствие); - - Монопольно = Истина; - РежимУдаления = "Полный"; - ПриСозданииНаСервереУстановитьТекстПоясненияКОбработке(); - ВидимостьДоступность(ЭтотОбъект); + УстановитьСостояниеВыбораПомеченныхНаУдаление(); + УстановитьУсловноеОформление(); + УстановитьСписокДействийМестИспользования(); + ТолькоПросмотр = Истина; КонецПроцедуры &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - ВидимостьДоступность(ЭтотОбъект); + НастройкиДополнительныхРеквизитов = Настройки["ДополнительныеРеквизитыПомеченныхНаУдаления"]; + Если НастройкиДополнительныхРеквизитов <> Неопределено Тогда + ЧислоДополнительныхРеквизитов = УдалениеПомеченныхОбъектовСлужебный.ЧислоДополнительныхРеквизитов( + НастройкиДополнительныхРеквизитов); + ДобавитьДополнительныеРеквизиты(1, ЧислоДополнительныхРеквизитов); + УстановитьУсловноеОформление(); + КонецЕсли; + + НастройкиОтбора = Настройки["ОтборМетаданных"]; + Если ЗначениеЗаполнено(НастройкиОтбора) Тогда + Элементы.НастроитьОтбор.Заголовок = ПредставлениеОтбораМетаданных(НастройкиОтбора); + ИначеЕсли ЗначениеЗаполнено(Параметры.ОтборМетаданных) Тогда + ОтборМетаданных = Параметры.ОтборМетаданных; + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -70,61 +90,99 @@ ПоказатьПредупреждение(, ТекстОшибки); Отказ = Истина; КонецЕсли; + + Если УдалятьПриОткрытии Тогда + ДобавитьЗадание(ЗаданияФормы().УдалениеПомеченных); + Иначе + ДобавитьЗадание(ЗаданияФормы().ПоискПомеченных); + КонецЕсли; + ПодключитьОбработчикОжидания("ЗапуститьЗаданиеСОжиданием", 0.1, Истина); КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) - - Если Не ПоказатьДиалогПередЗакрытием Тогда - Возврат; - КонецЕсли; - - Отказ = Истина; Если ЗавершениеРаботы Тогда Возврат; КонецЕсли; - ТекстВопроса = НСтр("ru = 'Удаление помеченных еще выполняется. - |Прервать?'"); - Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.Прервать); - Кнопки.Добавить(КодВозвратаДиалога.Пропустить, НСтр("ru = 'Не прерывать'")); - Обработчик = Новый ОписаниеОповещения("ПослеПодтвержденияОтменыЗадания", ЭтотОбъект); - ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, 60, КодВозвратаДиалога.Пропустить); - + Если ПоказатьДиалогПередЗакрытием Тогда + Отказ = Истина; + Обработчик = Новый ОписаниеОповещения("ПослеПодтвержденияОтменыЗадания", ЭтотОбъект); + ТекстВопроса = НСтр("ru = 'Выполняется %1. + |Прервать?'"); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(КодВозвратаДиалога.Прервать); + Кнопки.Добавить(КодВозвратаДиалога.Пропустить, НСтр("ru = 'Не прерывать'")); + + ПоказатьВопрос(Обработчик, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, НРег(ПредставлениеОперации)), + Кнопки, 60, КодВозвратаДиалога.Пропустить); + ИначеЕсли УдалятьПриОткрытии Тогда + ОписаниеОповещенияОЗакрытии.ДополнительныеПараметры.Вставить("РезультатЗакрытия", СведенияОРезультатахУдаления); + КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы -&НаКлиенте -Процедура РежимУдаленияПриИзменении(Элемент) - ВидимостьДоступность(ЭтотОбъект); -КонецПроцедуры - -&НаКлиенте -Процедура ПояснениеКОбработкеОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ПараметрыФормы = Новый Структура("ОтборИмяПриложения", "1CV8,1CV8C,WebClient"); - СтандартныеПодсистемыКлиент.ОткрытьСписокАктивныхПользователей(ПараметрыФормы); -КонецПроцедуры - &НаКлиенте Процедура СсылкаПодробнееНажатие(Элемент) - СтандартныеПодсистемыКлиент.ПоказатьПодробнуюИнформацию(Неопределено, ПодробныйТекстОшибки); + Если ЭтоОшибкаУстановкиМонопольногоРежима(ПодробныйТекстОшибкиФоновогоЗадания) Тогда + СтандартныеПодсистемыКлиент.ОткрытьСписокАктивныхПользователей(); + Иначе + ТекстОшибки = ?(Элемент.Имя = Элементы.ПодробнееОшибкаФоновогоЗадания.Имя, ПодробныйТекстОшибкиФоновогоЗадания, ПодробныйТекстОшибки); + СтандартныеПодсистемыКлиент.ПоказатьПодробнуюИнформацию(Неопределено, ТекстОшибки); + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура УдалениеПомеченныхИспользованиеПриИзменении(Элемент) - Если УдалениеПомеченныхИспользование И Элементы.УдалениеПомеченныхПредставлениеРасписания.Видимость Тогда - Если Элементы.УдалениеПомеченныхПредставлениеРасписания.Видимость Тогда - РегламентныеЗаданияИзменитьРасписание(); - Возврат; - КонецЕсли; +Процедура ОтменитьОперацию(Команда) + ОтменитьОперациюСервер(ВыполняемаяОперация); + + Если ТекущееЗадание() = "ВыполнениеДополнительнойОбработки" Тогда + УстановитьСостояниеНеуспешноеУдаление(); + Иначе + УстановитьСостояниеВыбораПомеченныхНаУдаление(); + КонецЕсли; + + ПоказатьДиалогПередЗакрытием = Ложь; + ВыполняемаяОперация = Неопределено; + Если УдалятьПриОткрытии Тогда + Закрыть(); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ОтменитьОперациюСервер(ВыполняемаяОперация) + Если ВыполняемаяОперация = Неопределено Тогда + Возврат; + КонецЕсли; + + ДлительныеОперации.ОтменитьВыполнениеЗадания(ВыполняемаяОперация.ИдентификаторЗадания); + УдалениеПомеченныхОбъектовСлужебный.СнятьБлокировкуИспользованияУдаляемыхОбъектов(УникальныйИдентификатор); + УстановитьМонопольныйРежимНаСервере(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура КВыборуОбъектов(Команда) + Оповещение = Новый ОписаниеОповещения("КВыборуОбъектовЗавершение", ЭтотОбъект); + Если ТаблицаДействий.Количество() > 0 Тогда + ПоказатьВопрос(Оповещение, + НСтр("ru='Не завершено удаление объектов. + |Вернуться к списку помеченных на удаление?'"), + РежимДиалогаВопрос.ДаНет); + Иначе + УстановитьСостояниеВыбораПомеченныхНаУдаление(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура КВыборуОбъектовЗавершение(Результат, ДополнительныеПараметры) Экспорт + Если Результат = КодВозвратаДиалога.Да Тогда + ТаблицаДействий.Очистить(); + УстановитьСостояниеВыбораПомеченныхНаУдаление(); КонецЕсли; - Изменения = Новый Структура("Использование", УдалениеПомеченныхИспользование); - РегламентныеЗаданияСохранить(Изменения); КонецПроцедуры #КонецОбласти @@ -134,9 +192,10 @@ &НаКлиенте Процедура ДеревоПомеченныхНаУдалениеПометкаПриИзменении(Элемент) ТекущиеДанные = Элементы.ДеревоПомеченныхНаУдаление.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; + Если ТекущиеДанные.Пометка = 2 Тогда + ТекущиеДанные.Пометка = 0; КонецЕсли; + ДеревоПомеченныхНаУдалениеУстановитьПометкуВСписке(ТекущиеДанные, ТекущиеДанные.Пометка, Истина); КонецПроцедуры @@ -161,12 +220,6 @@ ПоказатьОбъектТаблицы(Элемент); КонецПроцедуры -&НаКлиенте -Процедура НеУдаленныеПередУдалением(Элемент, Отказ) - Отказ = Истина; - ПометитьВыделенныеОбъектыТаблицыНаУдаление(Элемент); -КонецПроцедуры - &НаКлиенте Процедура НеУдаленныеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -179,26 +232,60 @@ ПоказатьОбъектТаблицы(Элемент); КонецПроцедуры -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыФормыСвязиНеУдаленных - -&НаКлиенте -Процедура СвязиНеУдаленныхПередНачаломИзменения(Элемент, Отказ) - Отказ = Истина; - ПоказатьОбъектТаблицы(Элемент); -КонецПроцедуры - -&НаКлиенте -Процедура СвязиНеУдаленныхПередУдалением(Элемент, Отказ) - Отказ = Истина; - ПометитьВыделенныеОбъектыТаблицыНаУдаление(Элемент); -КонецПроцедуры - &НаКлиенте Процедура СвязиНеУдаленныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + Если Поле.Имя <> Элементы.СвязиНеУдаленныхДействие.Имя Тогда + СтандартнаяОбработка = Ложь; + ПоказатьОбъектТаблицы(Элемент); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура МестаИспользованияНеудаленныхОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + УстановитьЗаменитьНаПродолжение(ВыбранноеЗначение); +КонецПроцедуры + +&НаКлиенте +Процедура СвязиНеУдаленныхДействиеПриИзменении(Элемент) + ТекущиеДанные = Элементы.МестаИспользованияНеудаленных.ТекущиеДанные; + ВыбранноеЗначение = ТекущиеДанные.ДействиеПредставление; + + Если НЕ ЗначениеЗаполнено(ВыбранноеЗначение) Тогда + + Если ТекущиеДанные.Действие = "ЗаменитьСсылку" Тогда + Для Каждого Элемент Из МестаИспользованияНеудаленных.ПолучитьЭлементы() Цикл + Элемент.Действие = Неопределено; + КонецЦикла; + + Фильтр = Новый Структура("Источник", ТекущиеДанные.УдаляемыйСсылка); + Действия = ТаблицаДействий.НайтиСтроки(Фильтр); + Для Каждого Действие Из Действия Цикл + ТаблицаДействий.Удалить(Действие); + КонецЦикла; + Иначе + ТекущиеДанные.Действие = Неопределено; + + Фильтр = Новый Структура("ОбнаруженныйСсылка", ТекущиеДанные.ОбнаруженныйСсылка); + Действия = ТаблицаДействий.НайтиСтроки(Фильтр); + Для Каждого Действие Из Действия Цикл + ТаблицаДействий.Удалить(Действие); + КонецЦикла; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СвязиНеУдаленныхДействиеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ПоказатьОбъектТаблицы(Элемент); + + ТекущиеДанные = Элементы.МестаИспользованияНеудаленных.ТекущиеДанные; + ТекущиеДанные.ДействиеПредставление = ""; + + Если ВыбранноеЗначение = "ЗаменитьСсылку" Тогда + УстановитьЗаменитьНа(Неопределено); + Иначе + ЗарегистрироватьДействиеМестаИспользования(ТекущиеДанные, ВыбранноеЗначение); + КонецЕсли; КонецПроцедуры #КонецОбласти @@ -206,20 +293,32 @@ #Область ОбработчикиКомандФормы &НаКлиенте -Процедура КомандаДалее(Команда) - ЗапуститьФоновоеЗаданиеКлиент(1); +Процедура Обновить(Команда) + Если ВыполняемаяОперация = Неопределено Тогда + ЗапуститьЗадание(ЗаданияФормы().ПоискПомеченных); + КонецЕсли;; КонецПроцедуры &НаКлиенте -Процедура КомандаНазад(Команда) - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыборРежимаУдаления; - ВидимостьДоступность(ЭтотОбъект); +Процедура ВыполнитьДействияИУдалить(Команда) + ДобавитьЗадание(ЗаданияФормы().ВыполнениеДополнительнойОбработки); + ДобавитьЗадание(ЗаданияФормы().УдалениеПомеченных); + ЗапуститьЗадание(); +КонецПроцедуры + +&НаКлиенте +Процедура НеУдаленныеИзменить(Команда) + Если НЕ ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ТекущийЭлемент, "ТекущиеДанные") Тогда + Возврат; + КонецЕсли; + + ПоказатьОбъектТаблицы(ТекущийЭлемент); КонецПроцедуры &НаКлиенте Процедура ДеревоПомеченныхНаУдалениеУстановитьВсе(Команда) - ЭлементыСписка = ДеревоПомеченныхНаУдаление.ПолучитьЭлементы(); + Для Каждого Элемент Из ЭлементыСписка Цикл ДеревоПомеченныхНаУдалениеУстановитьПометкуВСписке(Элемент, Истина, Истина); Родитель = Элемент.ПолучитьРодителя(); @@ -227,13 +326,12 @@ ДеревоПомеченныхНаУдалениеПроверитьРодителя(Элемент) КонецЕсли; КонецЦикла; - КонецПроцедуры &НаКлиенте Процедура ДеревоПомеченныхНаУдалениеСнятьВсе(Команда) - ЭлементыСписка = ДеревоПомеченныхНаУдаление.ПолучитьЭлементы(); + Для Каждого Элемент Из ЭлементыСписка Цикл ДеревоПомеченныхНаУдалениеУстановитьПометкуВСписке(Элемент, Ложь, Истина); Родитель = Элемент.ПолучитьРодителя(); @@ -241,7 +339,6 @@ ДеревоПомеченныхНаУдалениеПроверитьРодителя(Элемент) КонецЕсли; КонецЦикла; - КонецПроцедуры &НаКлиенте @@ -251,72 +348,526 @@ &НаКлиенте Процедура ДеревоПомеченныхНаУдалениеОбновить(Команда) - ЗапуститьФоновоеЗаданиеКлиент(2); + ЗапуститьЗадание(ЗаданияФормы().ПоискПомеченных); КонецПроцедуры &НаКлиенте -Процедура НеУдаленныеЗаменитьНа(Команда) - МассивИдентификаторов = Элементы.НеУдаленные.ВыделенныеСтроки; - Если МассивИдентификаторов.Количество() = 0 Тогда - Возврат; +Процедура УдалитьВсе(Команда) + + ДобавитьЗадание(ЗаданияФормы().УдалениеПомеченных); + Если ВыполняемаяОперация = Неопределено Тогда + ДеревоПомеченныхНаУдалениеУстановитьВсе(Команда); + ЗапуститьЗадание(); КонецЕсли; - МассивСсылок = Новый Массив; - Для Каждого Идентификатор Из МассивИдентификаторов Цикл - СтрокаТаблицы = НеУдаленные.НайтиПоИдентификатору(Идентификатор); - Если ТипЗнч(СтрокаТаблицы.УдаляемыйСсылка) = Тип("Строка") Тогда - Продолжить; // Пропуск групп. +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьУдалить(Команда) + Для Каждого ИдентификаторСтроки Из Элементы.МестаИспользованияНеудаленных.ВыделенныеСтроки Цикл + ВыделеннаяСтрока = МестаИспользованияНеудаленных.НайтиПоИдентификатору(ИдентификаторСтроки); + + Если ВыделеннаяСтрока.ОсновнаяПричина Тогда + ЗарегистрироватьДействиеМестаИспользования(ВыделеннаяСтрока, "Удалить"); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьЗаменитьНа(Команда) + ТекущиеДанные = Элементы.МестаИспользованияНеудаленных.ТекущиеДанные; + + Если ТекущиеДанные.ОсновнаяПричина Тогда + ПутьКФорме = ИмяМетаданных(ТекущиеДанные.УдаляемыйСсылка) + ".ФормаВыбора"; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ОткрытьФорму(ПутьКФорме, ПараметрыФормы, Элементы.МестаИспользованияНеудаленных, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Иначе + Состояние(НСтр("ru='Для выбранной строки нельзя указать действие'"),,,БиблиотекаКартинок.Предупреждение32); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьЗаменитьНаПродолжение(Результат) + ТекущиеДанные = Элементы.МестаИспользованияНеудаленных.ТекущиеДанные; + + Для Каждого ИдентификаторСтроки Из Элементы.МестаИспользованияНеудаленных.ВыделенныеСтроки Цикл + ВыделеннаяСтрока = МестаИспользованияНеудаленных.НайтиПоИдентификатору(ИдентификаторСтроки); + + Если ВыделеннаяСтрока.УдаляемыйСсылка <> ТекущиеДанные.УдаляемыйСсылка Тогда + Продолжить; + КонецЕсли; + + Если Результат = Неопределено Тогда + ЗарегистрироватьДействиеМестаИспользования(ВыделеннаяСтрока, Неопределено); + Иначе + Если ВыделеннаяСтрока.ОсновнаяПричина Тогда + ЗарегистрироватьДействиеМестаИспользования(ВыделеннаяСтрока, "ЗаменитьСсылку", Результат); + КонецЕсли; КонецЕсли; - МассивСсылок.Добавить(СтрокаТаблицы.УдаляемыйСсылка); КонецЦикла; - Если МассивСсылок.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выберите объекты'")); + Для Каждого ВыделеннаяСтрока Из МестаИспользованияНеудаленных.ПолучитьЭлементы() Цикл + Если ВыделеннаяСтрока.ОсновнаяПричина И ВыделеннаяСтрока.УдаляемыйСсылка = ТекущиеДанные.УдаляемыйСсылка Тогда + ЗарегистрироватьДействиеМестаИспользования(ВыделеннаяСтрока, "ЗаменитьСсылку", Результат); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура Настроить(Команда) + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьПродолжение", ЭтотОбъект); + + ПараметрыФормы = Новый Структура("АдресНастроек", НастройкиУдаленияПомеченных()); + ОткрытьФорму("Обработка.УдалениеПомеченныхОбъектов.Форма.НастройкиУдаленияОбъектов", ПараметрыФормы, ЭтотОбъект, , , , + ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +&НаСервере +Функция НастройкиУдаленияПомеченных() + Настройки = Новый Структура; + Настройки.Вставить("РежимУдаления", РежимУдаления); + Настройки.Вставить("ВыбранныеРеквизиты", ДополнительныеРеквизитыПомеченныхНаУдаления.Выгрузить()); + Возврат ПоместитьВоВременноеХранилище(Настройки, УникальныйИдентификатор); +КонецФункции + +&НаКлиенте +Процедура НастроитьПродолжение(Результат, ДополнительныеПараметры) Экспорт + Если Результат = Неопределено Тогда Возврат; КонецЕсли; - // Проверка подсистемы выполняется в ПриСозданииНаСервере. - МодульПоискИУдалениеДублейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПоискИУдалениеДублейКлиент"); - МодульПоискИУдалениеДублейКлиент.ЗаменитьВыделенные(МассивСсылок); + ТребуетсяОбновлениеПомеченныхНаУдаление = НастроитьПродолжениеСервер(Результат); + Если ТребуетсяОбновлениеПомеченныхНаУдаление Тогда + ЗапуститьЗадание(ЗаданияФормы().ПоискПомеченных); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция НастроитьПродолжениеСервер(АдресНастроек) + Настройки = ПолучитьИзВременногоХранилища(АдресНастроек); + УдалитьИзВременногоХранилища(АдресНастроек); + РежимУдаления = Настройки.РежимУдаления; + + НастройкиИзменились = НастройкиИзменились(Настройки.ВыбранныеРеквизиты); + + ТекущееЧислоДополнительныхРеквизитов = УдалениеПомеченныхОбъектовСлужебный.ЧислоДополнительныхРеквизитов( + ДополнительныеРеквизитыПомеченныхНаУдаления.Выгрузить()); + НовоеЧислоДополнительныхРеквизитов = УдалениеПомеченныхОбъектовСлужебный.ЧислоДополнительныхРеквизитов(Настройки.ВыбранныеРеквизиты); + ТекущееЧислоСозданныхРеквизитов = ТекущееЧислоСозданныхРеквизитов(ТекущееЧислоДополнительныхРеквизитов, НовоеЧислоДополнительныхРеквизитов); + + Если ТекущееЧислоСозданныхРеквизитов < НовоеЧислоДополнительныхРеквизитов Тогда + ЧислоДобавляемыхРеквизитов = НовоеЧислоДополнительныхРеквизитов - ТекущееЧислоСозданныхРеквизитов; + ДобавитьДополнительныеРеквизиты(ТекущееЧислоСозданныхРеквизитов + 1, ЧислоДобавляемыхРеквизитов); + КонецЕсли; + + Если ТекущееЧислоДополнительныхРеквизитов < ТекущееЧислоСозданныхРеквизитов + И ТекущееЧислоДополнительныхРеквизитов < НовоеЧислоДополнительныхРеквизитов Тогда + + УстановитьВидимостьДополнительныхРеквизитов(ТекущееЧислоДополнительныхРеквизитов+1, ТекущееЧислоСозданныхРеквизитов, Истина); + КонецЕсли; + + Если ТекущееЧислоДополнительныхРеквизитов > НовоеЧислоДополнительныхРеквизитов Тогда + УстановитьВидимостьДополнительныхРеквизитов(НовоеЧислоДополнительныхРеквизитов+1, + ТекущееЧислоДополнительныхРеквизитов, Ложь); + КонецЕсли; + + ДополнительныеРеквизитыПомеченныхНаУдаления.Загрузить(Настройки.ВыбранныеРеквизиты); + + УстановитьУсловноеОформление(); + + Возврат НовоеЧислоДополнительныхРеквизитов > ТекущееЧислоДополнительныхРеквизитов ИЛИ НастройкиИзменились; +КонецФункции + +&НаКлиенте +Процедура УдалитьВыбранные(Команда) + ЗапуститьЗадание(ЗаданияФормы().УдалениеПомеченных); КонецПроцедуры &НаКлиенте -Процедура НеУдаленныеУдалить(Команда) - ПометитьВыделенныеОбъектыТаблицыНаУдаление(Элементы.НеУдаленные); +Процедура НастроитьОтбор(Команда) + КоллекцияВыбираемыхОбъектов = Новый СписокЗначений(); + + КоллекцияВыбираемыхОбъектов.Добавить("Справочники"); + КоллекцияВыбираемыхОбъектов.Добавить("Документы"); + КоллекцияВыбираемыхОбъектов.Добавить("ПланыВидовХарактеристик"); + КоллекцияВыбираемыхОбъектов.Добавить("ПланыСчетов"); + КоллекцияВыбираемыхОбъектов.Добавить("ПланыСчетов"); + КоллекцияВыбираемыхОбъектов.Добавить("ПланыВидовРасчета"); + КоллекцияВыбираемыхОбъектов.Добавить("БизнесПроцессы"); + КоллекцияВыбираемыхОбъектов.Добавить("Задачи"); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("КоллекцииВыбираемыхОбъектовМетаданных", КоллекцияВыбираемыхОбъектов); + ПараметрыФормы.Вставить("ОбластиПоиска", ОтборМетаданных); + ПараметрыФормы.Вставить("ТолькоПодсистемыСКИ", Истина); + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьОтборЗавершение", ЭтотОбъект); + ОткрытьФорму("Обработка.УдалениеПомеченныхОбъектов.Форма.ВыборОбъектовМетаданныхПоПодсистемам", ПараметрыФормы, ЭтотОбъект, , , , ОповещениеОЗакрытии, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры &НаКлиенте -Процедура СвязиНеУдаленныхУдалить(Команда) - ПометитьВыделенныеОбъектыТаблицыНаУдаление(Элементы.СвязиНеУдаленных); +Процедура РазвернутьСтрокиДереваПомеченных(Команда) + СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "ДеревоПомеченныхНаУдаление"); КонецПроцедуры &НаКлиенте -Процедура УдалениеПомеченныхНастроитьРасписание(Команда) - РегламентныеЗаданияИзменитьРасписание(); +Процедура СвернутьСтрокиДереваВыбораПомеченных(Команда) + ВсеСтроки = Элементы.ДеревоПомеченныхНаУдаление; + Для Каждого ДанныеСтроки Из ДеревоПомеченныхНаУдаление.ПолучитьЭлементы() Цикл + ВсеСтроки.Свернуть(ДанныеСтроки.ПолучитьИдентификатор()); + КонецЦикла; КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область СостоянияФормы + +&НаСервере +Процедура УстановитьСостояниеВыбораПомеченныхНаУдаление() + Элементы.КоманднаяПанельФормы.Доступность = Истина; + Элементы.СостояниеВыполняется.Видимость = Ложь; + Элементы.СтраницыИнформация.Доступность = Истина; + + Элементы.СтраницыИнформация.ТекущаяСтраница = Элементы.СтраницаВыборОбрабатываемыхОбъектов; + Элементы.СтраницыОтображениеСостояния.Видимость = Ложь; + Элементы.СтраницыИнформация.ТолькоПросмотр = Ложь; + Элементы.ГруппаАктивныПослеПоискаПомеченные.Доступность = Истина; + + Элементы.КоманднаяПанельПоискПомеченных.Видимость = Истина; + Элементы.КоманднаяПанельОбработкаОшибок.Видимость = Ложь; + + Элементы.ГруппаНастройкиОтбораПоиска.Доступность = Истина; + Элементы.ПредставлениеПрогресса.Видимость = Ложь; + Элементы.ДеревоПомеченныхНаУдалениеУдалитьВсе.КнопкаПоУмолчанию = Истина; +КонецПроцедуры + +&НаСервере +Процедура УстановитьСостояниеВыбораПомеченныхНаУдалениеСПанельюСостояния() + Элементы.КоманднаяПанельФормы.Доступность = Истина; + Элементы.СостояниеВыполняется.Видимость = Истина; + Элементы.СтраницыИнформация.Доступность = Истина; + + Элементы.СтраницыИнформация.ТекущаяСтраница = Элементы.СтраницаВыборОбрабатываемыхОбъектов; + Элементы.СтраницыОтображениеСостояния.Видимость = Истина; + Элементы.СтраницыИнформация.ТолькоПросмотр = Ложь; + Элементы.ГруппаАктивныПослеПоискаПомеченные.Доступность = Истина; + + Элементы.КоманднаяПанельПоискПомеченных.Видимость = Истина; + Элементы.КоманднаяПанельОбработкаОшибок.Видимость = Ложь; + + Элементы.ГруппаНастройкиОтбораПоиска.Доступность = Истина; + Элементы.ПредставлениеПрогресса.Видимость = Ложь; + Элементы.ДеревоПомеченныхНаУдалениеУдалитьВсе.КнопкаПоУмолчанию = Истина; +КонецПроцедуры + +&НаСервере +Процедура УстановитьСостояниеНеуспешноеУдаление() + Элементы.КоманднаяПанельФормы.Доступность = Истина; + Элементы.СостояниеВыполняется.Видимость = Ложь; + Элементы.СтраницыИнформация.Доступность = Истина; + Элементы.СтраницыИнформация.Видимость = Истина; + + Элементы.СтраницыИнформация.ТекущаяСтраница = Элементы.СтраницаПричиныНевозможностиУдаления; + Элементы.СтраницыОтображениеСостояния.Видимость = Ложь; + Элементы.СтраницыИнформация.ТолькоПросмотр = Ложь; + Элементы.ГруппаАктивныПослеПоискаПомеченные.ТолькоПросмотр = Ложь; + + Элементы.КоманднаяПанельПоискПомеченных.Видимость = Ложь; + Элементы.КоманднаяПанельОбработкаОшибок.Видимость = Истина; + + Элементы.ГруппаНастройкиОтбораПоиска.Доступность = Ложь; + Элементы.ПредставлениеПрогресса.Видимость = Ложь; + Элементы.КоманднаяПанельФормы.Видимость = Истина; + Элементы.ВыполнитьДействияИУдалить.КнопкаПоУмолчанию = Истина; + Элементы.СсылкаПодробнее.Видимость = Ложь; +КонецПроцедуры + +&НаСервере +Процедура УстановитьСостояниеНеуспешноеУдалениеСПанельюСостояния() + Элементы.КоманднаяПанельФормы.Доступность = Истина; + Элементы.СостояниеВыполняется.Видимость = Истина; + Элементы.СтраницыИнформация.Доступность = Истина; + Элементы.СтраницыИнформация.Видимость = Истина; + + Элементы.СтраницыИнформация.ТекущаяСтраница = Элементы.СтраницаПричиныНевозможностиУдаления; + Элементы.СтраницыОтображениеСостояния.Видимость = Истина; + Элементы.СтраницыИнформация.ТолькоПросмотр = Ложь; + Элементы.ГруппаАктивныПослеПоискаПомеченные.ТолькоПросмотр = Ложь; + + Элементы.КоманднаяПанельПоискПомеченных.Видимость = Ложь; + Элементы.КоманднаяПанельОбработкаОшибок.Видимость = Истина; + + Элементы.ГруппаНастройкиОтбораПоиска.Доступность = Ложь; + Элементы.ПредставлениеПрогресса.Видимость = Ложь; + Элементы.КоманднаяПанельФормы.Видимость = Истина; + Элементы.ВыполнитьДействияИУдалить.КнопкаПоУмолчанию = Истина; + + Если ЭтоМобильныйКлиент Тогда + Элементы.ГруппаНеУдаленные.Видимость = Ложь; + КонецЕсли; + Элементы.СсылкаПодробнее.Видимость = Ложь; +КонецПроцедуры + +#КонецОбласти + +// Параметры: +// Ссылка - ЛюбаяСсылка +// Возвращаемое значение: +// Строка +// +&НаСервереБезКонтекста +Функция ИмяМетаданных(Ссылка) + Возврат Ссылка.Метаданные().ПолноеИмя(); +КонецФункции + +#Область Настройки + +&НаСервере +Функция НастройкиИзменились(ВыбранныеРеквизиты) + Результат = Ложь; + + ТаблицаСравнения = УдалениеПомеченныхОбъектовСлужебный.ОбъединениеТаблиц( + ВыбранныеРеквизиты, + ДополнительныеРеквизитыПомеченныхНаУдаления.Выгрузить()); + + ТаблицаСравнения.Колонки.Добавить("Число", Новый ОписаниеТипов("Число")); + ТаблицаСравнения.ЗаполнитьЗначения(1,"Число"); + ТаблицаСравнения.Свернуть("Метаданные, Реквизит", "Число"); + Для Каждого Элемент Из ТаблицаСравнения Цикл + Если Элемент.Число <> 2 Тогда + Результат = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ТекущееЧислоСозданныхРеквизитов(ТекущееЧислоДополнительныхРеквизитов, НовоеЧислоДополнительныхРеквизитов) + Результат = ТекущееЧислоДополнительныхРеквизитов; + + Для Сч = ТекущееЧислоДополнительныхРеквизитов + 1 По НовоеЧислоДополнительныхРеквизитов Цикл + Если Элементы.Найти("ДеревоПомеченныхНаУдалениеРеквизит"+Сч) <> Неопределено Тогда + Результат = Сч; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура УстановитьВидимостьДополнительныхРеквизитов(НачальноеНомер, КонечныйНомер, Видимость) + Для Сч = НачальноеНомер По КонечныйНомер Цикл + Элементы["ДеревоПомеченныхНаУдалениеРеквизит" + Сч].Видимость = Видимость; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ДобавитьДополнительныеРеквизиты(НачальныйНомер, ЧислоДобавляемыхРеквизитов) + ДобавляемыеРеквизиты = Новый Массив; + ПоследняяЦифраВИмениРеквизита = НачальныйНомер+ЧислоДобавляемыхРеквизитов-1; + Для Сч = НачальныйНомер По ПоследняяЦифраВИмениРеквизита Цикл + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Реквизит"+Сч, Новый ОписаниеТипов(), "ДеревоПомеченныхНаУдаление")); + КонецЦикла; + ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + Для Сч = НачальныйНомер По ПоследняяЦифраВИмениРеквизита Цикл + ЭлементФормы = Элементы.Добавить("ДеревоПомеченныхНаУдалениеРеквизит"+Сч, Тип("ПолеФормы"), Элементы.ДеревоПомеченныхНаУдаление); + ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода; + ЭлементФормы.ПутьКДанным = "ДеревоПомеченныхНаУдаление.Реквизит"+Сч; + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#Область КомандыФормы + +&НаКлиенте +Процедура ЗарегистрироватьДействиеМестаИспользования(МестоИспользования, Действие, Параметр = Неопределено) + МестоИспользования.Действие = Действие; + МестоИспользования.ДействиеПредставление = ?(Параметр = Неопределено, + ДействияМестИспользованияНеудаленных.НайтиПоЗначению(МестоИспользования.Действие), + ПредставлениеКомандыЗаменитьНа(МестоИспользования, Параметр)); + + Если Действие <> Неопределено Тогда + + ЗарегистрированноеДействие = ТаблицаДействий.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка",МестоИспользования.ОбнаруженныйСсылка)); + Если ЗарегистрированноеДействие.Количество() = 0 Тогда + ЗарегистрированноеДействие = ТаблицаДействий.Добавить(); + ЗарегистрированноеДействие.Действие = МестоИспользования.Действие; + ЗарегистрированноеДействие.ОбнаруженныйСсылка = МестоИспользования.ОбнаруженныйСсылка; + ЗарегистрированноеДействие.ПараметрДействия = Параметр; + ЗарегистрированноеДействие.Источник = МестоИспользования.УдаляемыйСсылка; + Иначе + ЗарегистрированноеДействие = ТаблицаДействий[0]; + ЗарегистрированноеДействие.Действие = МестоИспользования.Действие; + ЗарегистрированноеДействие.ПараметрДействия = Параметр; + КонецЕсли; + + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область СобытияФормы + +&НаСервере +Процедура УстановитьПереданныйОтборМетаданных() + Перем Элемент; + Перем УстановленныйОтбор; + УстановленныйОтбор = Новый СписокЗначений; + Для Каждого Элемент Из Параметры.ОтборМетаданных Цикл + УстановленныйОтбор.Добавить(Элемент.Значение, Метаданные.НайтиПоПолномуИмени(Элемент.Значение).Представление()); + КонецЦикла; + УстановитьОтборМетаданных(ЭтотОбъект, УстановленныйОтбор); + Параметры.ОтборМетаданных = УстановленныйОтбор; +КонецПроцедуры + +// Настройка формы, если форма открыта через клиентский АПИ. +&НаСервере +Процедура НастроитьФормуДляРаботыКакСервис() + УдалятьПриОткрытии = Истина; + Элементы.СтраницыИнформация.Видимость = Ложь; + Элементы.ДеревоПомеченныхНаУдалениеНастроить.Видимость = Ложь; + Элементы.Назад.Видимость = Ложь; + Элементы.ГруппаНастройкиОтбораПоиска.Видимость = Ложь; + Элементы.КоманднаяПанельФормы.Видимость = Ложь; + Элементы.СтраницыОтображениеСостояния.Видимость = Истина; + АвтоЗаголовок = Ложь; + Заголовок = ""; +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформление() + ЦветГиперссылка = Метаданные.ЭлементыСтиля.ГиперссылкаЦвет.Значение; + ЦветНеактивнойНадписи = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; + + ЭлементыУсловногоОформления = УсловноеОформление.Элементы; + ЭлементыУсловногоОформления.Очистить(); + + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ГруппаИ = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + ОтборОформления = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользованияНеудаленных.Действие"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + ОтборОформления = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользованияНеудаленных.ОсновнаяПричина"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Истина; + + ОтборОформления = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользованияНеудаленных.СсылочногоТипа"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Истина; + + ОтборОформления = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользованияНеудаленных.ОбнаруженныйСсылка"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='Выберите действие'")); + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ДействиеВКолонкеСпискаШрифт.Значение); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("СвязиНеУдаленныхДействие"); + + // Цвет гиперссылки + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользованияНеудаленных.ОсновнаяПричина"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Истина; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветГиперссылка); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("СвязиНеУдаленныхДействие"); + + // Заголовки колонок + УстановитьУсловноеОформлениеДополнительныхРеквизитов(ЭлементыУсловногоОформления, ЦветНеактивнойНадписи); + + // Доступность выбора действий + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользованияНеудаленных.ОсновнаяПричина"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Ложь; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("СвязиНеУдаленныхДействие"); +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформлениеДополнительныхРеквизитов(ЭлементыУсловногоОформления, ЦветНеактивнойНадписи) + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПомеченныхНаУдаление.ЭтоОписаниеОбъектаМетаданных"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Истина; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветНеактивнойНадписи); + + ЧислоДополнительныхРеквизитов = УдалениеПомеченныхОбъектовСлужебный.ЧислоДополнительныхРеквизитов( + ДополнительныеРеквизитыПомеченныхНаУдаления.Выгрузить()); + + Для Сч = 1 По ЧислоДополнительныхРеквизитов Цикл + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ДеревоПомеченныхНаУдалениеРеквизит" + Сч); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура УстановитьСписокДействийМестИспользования() + ДействияМестИспользованияНеудаленных.Добавить("Удалить", "Удалить"); + ДействияМестИспользованияНеудаленных.Добавить("ЗаменитьСсылку", "Заменить %ПредставлениеСсылка% на"); + + Элементы.СвязиНеУдаленныхДействие.СписокВыбора.Очистить(); + Для Каждого ЭлементСписка Из ДействияМестИспользованияНеудаленных Цикл + Элементы.СвязиНеУдаленныхДействие.СписокВыбора.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление); + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#Область ПриАктивизацииСтрокиНеУдаленных &НаКлиенте Процедура ПоказатьСвязиНеУдаленныхНаКлиенте() Если НеУдаленныеИдентификаторТекущейСтроки = Элементы.НеУдаленные.ТекущаяСтрока Тогда Возврат; КонецЕсли; - ПоказатьСвязиНеУдаленныхНаСервере(ЭтотОбъект); + + ПодробныйТекстОшибки = ""; + ЗаполнитьМестаИспользованияНеудаленныхОбъектов(ЭтотОбъект); + + Если МестаИспользованияНеудаленных.ПолучитьЭлементы().Количество() = 0 Тогда + Элементы.СтраницыВариантовОтображенияПричин.ТекущаяСтраница = Элементы.СтраницаТекстОшибки; + УстановитьТекстОшибки(); + Элементы.Действия.Доступность = Ложь; + Иначе + Элементы.СтраницыВариантовОтображенияПричин.ТекущаяСтраница = Элементы.СтраницаПричиныНеУдаления; + СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "МестаИспользованияНеудаленных", "*", Истина); + Элементы.Действия.Доступность = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьТекстОшибки() + Элементы.ТекстОшибки.Заголовок = ТекстОшибки; + Элементы.СсылкаПодробнее.Видимость = ЗначениеЗаполнено(ПодробныйТекстОшибки) ; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ПоказатьСвязиНеУдаленныхНаСервере(Форма) - - ПоказыватьТекстОшибки = Истина; - ТекстОшибки = ""; - ПодробныйТекстОшибки = ""; - +Процедура ЗаполнитьМестаИспользованияНеудаленныхОбъектов(Форма) НеУдаленныеИдентификаторТекущейСтроки = Форма.Элементы.НеУдаленные.ТекущаяСтрока; Если НеУдаленныеИдентификаторТекущейСтроки = Неопределено Тогда СтрокаДерева = Неопределено; @@ -324,47 +875,120 @@ СтрокаДерева = Форма.НеУдаленные.НайтиПоИдентификатору(НеУдаленныеИдентификаторТекущейСтроки); КонецЕсли; + ОтображаемыеСтроки = Форма.МестаИспользованияНеудаленных.ПолучитьЭлементы(); + ОтображаемыеСтроки.Очистить(); + Форма.КешПричинНеудаления.Очистить(); + Если СтрокаДерева = Неопределено Или СтрокаДерева.НомерКартинки < 1 Тогда // Ничего не выбрано или выбрана группа. - НеУдаленныеПодсказка = НСтр("ru = 'Выберите объект, чтобы узнать причину, - |по которой его не удалось удалить.'"); + Форма.ТекстОшибки = НСтр("ru = 'Выберите объект, чтобы узнать причину, + |по которой его не удалось удалить.'") Иначе // Выбрана ссылка не удаленного объекта. - Скрываемые = Форма.СвязиНеУдаленных.НайтиСтроки(Новый Структура("Видимость", Истина)); - Для Каждого СтрокаТаблицы Из Скрываемые Цикл - СтрокаТаблицы.Видимость = Ложь; - КонецЦикла; - - Форма.Элементы.СвязиНеУдаленных.ОтборСтрок = Новый ФиксированнаяСтруктура("УдаляемыйСсылка", СтрокаДерева.УдаляемыйСсылка); - Форма.НеУдаленныеПодсказка = " "; - Показываемые = Форма.СвязиНеУдаленных.НайтиСтроки(Новый Структура("УдаляемыйСсылка", СтрокаДерева.УдаляемыйСсылка)); + Показываемые = Форма.СвязиНеудаленных.НайтиСтроки(Новый Структура("УдаляемыйСсылка", СтрокаДерева.УдаляемыйСсылка)); Для Каждого СтрокаТаблицы Из Показываемые Цикл - СтрокаТаблицы.Видимость = Истина; Если СтрокаТаблицы.ЭтоОшибка Тогда - ТекстОшибки = СтрокаТаблицы.ОбнаруженныйСсылка; - ПодробныйТекстОшибки = СтрокаТаблицы.Представление; - Иначе - Если ПоказыватьТекстОшибки Тогда - Форма.Элементы.СвязиНеУдаленных.ТекущаяСтрока = СтрокаТаблицы.ПолучитьИдентификатор(); - ПоказыватьТекстОшибки = Ложь; - КонецЕсли; + Форма.ТекстОшибки = СтрокаТаблицы.ОбнаруженныйСсылка; + Форма.ПодробныйТекстОшибки = СтрокаТаблицы.Представление; + Прервать; КонецЕсли; + + ДобавитьПричиныНеудаленияРекурсивно(Форма, ОтображаемыеСтроки, СтрокаТаблицы); + Форма.КешПричинНеудаления.Добавить(СтрокаТаблицы.УдаляемыйСсылка); КонецЦикла; КонецЕсли; - Если ПоказыватьТекстОшибки Тогда - ТекущаяСтраница = Форма.Элементы.СтраницаТекстОшибки; - Форма.Элементы.СсылкаПодробнее.Видимость = ЗначениеЗаполнено(ПодробныйТекстОшибки); - Форма.Элементы.ТекстОшибки.Заголовок = ТекстОшибки; - Иначе - ТекущаяСтраница = Форма.Элементы.СтраницаПричиныНеУдаления; - Шаблон = НСтр("ru = 'Места использования объекта ""%1"" (%2):'"); - Форма.НеУдаленныеПодсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, СтрокаДерева.Представление, Формат(СтрокаДерева.КоличествоСвязей, "ЧН=0; ЧГ=")); - КонецЕсли; - Если Форма.Элементы.СтраницыВариантовОтображенияПричин.ТекущаяСтраница <> ТекущаяСтраница Тогда - Форма.Элементы.СтраницыВариантовОтображенияПричин.ТекущаяСтраница = ТекущаяСтраница; - КонецЕсли; КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьВыбранноеДействиеНадПричинойНеудаления(Форма, ПричинаНеудаления, Действие = "") + Если ПричинаНеудаления.ЭтоОшибка Тогда + Возврат; + КонецЕсли; + + ТаблицаДействий = Форма.ТаблицаДействий; + ВыбранныеДействия = ТаблицаДействий.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", ПричинаНеудаления.ОбнаруженныйСсылка)); + Если ВыбранныеДействия.Количество() > 0 Тогда + Действие = ВыбранныеДействия[0].Действие; + ПараметрДействия = ВыбранныеДействия[0].ПараметрДействия; + КонецЕсли; + + ПричинаНеудаления.Действие = Действие; + Если Действие = "ЗаменитьСсылку" Тогда + ПричинаНеудаления.ДействиеПредставление = ПредставлениеКомандыЗаменитьНа(ПричинаНеудаления, ПараметрДействия); + Иначе + ПричинаНеудаления.ДействиеПредставление = Форма.ДействияМестИспользованияНеудаленных.НайтиПоЗначению(Действие); + КонецЕсли; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ДобавитьПричиныНеудаленияРекурсивно(Форма, КоллекцияСтрокРодителя, ДанныеСтроки) + КешПричинНеудаления = Форма.КешПричинНеудаления; + + НоваяСтрока = КоллекцияСтрокРодителя.Добавить(); + ПодчиненныеСтроки = НоваяСтрока.ПолучитьЭлементы(); + Если ДанныеСтроки.ЭтоОшибка Тогда + ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеСтроки,"ЭтоОшибка,НомерКартинки"); + НоваяСтрока.Представление = ДанныеСтроки.ОбнаруженныйСсылка; + НоваяСтрока.ОбнаруженныйСсылка = ?(ЗначениеЗаполнено(ДанныеСтроки.Представление), ДанныеСтроки.Представление, ДанныеСтроки.ОбнаруженныйСсылка); + Иначе + ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеСтроки); + КонецЕсли; + Показываемые = Форма.СвязиНеудаленных.НайтиСтроки(Новый Структура("УдаляемыйСсылка", ДанныеСтроки.ОбнаруженныйСсылка)); + УстановитьВыбранноеДействиеНадПричинойНеудаления(Форма, + НоваяСтрока, + ?(Показываемые.Количество() <> 0, "Удалить", "")); + + СодержатьсяТолькоОшибки = Истина; + Для Каждого СтрокаТаблицы Из Показываемые Цикл + Если НЕ СтрокаТаблицы.ЭтоОшибка Тогда + СодержатьсяТолькоОшибки = Ложь; + КонецЕсли; + + Если КешПричинНеудаления.НайтиПоЗначению(СтрокаТаблицы.ОбнаруженныйСсылка) = Неопределено Тогда + КешПричинНеудаления.Добавить(СтрокаТаблицы.УдаляемыйСсылка); + ДобавитьПричиныНеудаленияРекурсивно(Форма, ПодчиненныеСтроки, СтрокаТаблицы); + КонецЕсли; + КонецЦикла; + + НоваяСтрока.ОсновнаяПричина = (ПодчиненныеСтроки.Количество() = 0 Или СодержатьсяТолькоОшибки) + И НоваяСтрока.СсылочногоТипа И Показываемые.Количество() = 0; +КонецПроцедуры + +#КонецОбласти + +#Область ПриАктивизацииСтрокиМестИспользованияНеудаленных + +&НаКлиенте +Процедура МестаИспользованияНеудаленныхПриАктивизацииСтроки(Элемент) + ТекущиеДанные = Элементы.МестаИспользованияНеудаленных.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекущиеДанные.ОбнаруженныйСсылка) Тогда + Элементы.СвязиНеУдаленныхДействие.СписокВыбора[1].Представление = ПредставлениеКомандыЗаменитьНа(ТекущиеДанные); + КонецЕсли; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеКомандыЗаменитьНа(ТекущиеДанные, Параметр = Неопределено) + СтрокаВерхнегоУровня = ТекущиеДанные.ПолучитьРодителя(); + + Если СтрокаВерхнегоУровня = Неопределено Тогда + ПредставлениеСтрокиВерхнегоУровня = ТекущиеДанные.ПредставлениеУдаляемый; + Иначе + ПредставлениеСтрокиВерхнегоУровня = СтрокаВерхнегоУровня.Представление; + КонецЕсли; + + ПредставлениеКомандыЗаменитьНа = СтрЗаменить( + "Заменить %ПредставлениеСсылка% на", "%ПредставлениеСсылка%", ПредставлениеСтрокиВерхнегоУровня) + + Символы.НПП + ?(Параметр = Неопределено, "", Параметр); + + Возврат ПредставлениеКомандыЗаменитьНа; +КонецФункции +#КонецОбласти + &НаКлиенте Процедура ПоказатьОбъектТаблицы(ТаблицаЭлемент) СтрокаТаблицы = ТаблицаЭлемент.ТекущиеДанные; @@ -373,176 +997,27 @@ КонецЕсли; Значение = Неопределено; - Если Не СтрокаТаблицы.Свойство("Значение", Значение) - И Не СтрокаТаблицы.Свойство("ОбнаруженныйСсылка", Значение) + Если Не СтрокаТаблицы.Свойство("ОбнаруженныйСсылка", Значение) И Не СтрокаТаблицы.Свойство("УдаляемыйСсылка", Значение) Тогда Возврат; КонецЕсли; - Если ТипЗнч(Значение) = Тип("Строка") Тогда + Если ТипЗнч(Значение) = Тип("Строка") + И НЕ ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы, "ЭтоОшибка", Ложь) Тогда + Если СтрокаТаблицы.Свойство("ЭтоКонстанта") И СтрокаТаблицы.ЭтоКонстанта Тогда ПутьКФорме = Значение + ".ФормаКонстант"; Иначе ПутьКФорме = Значение + ".ФормаСписка"; КонецЕсли; ОткрытьФорму(ПутьКФорме); + ИначеЕсли ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы, "ЭтоОшибка", Ложь) Тогда + СтандартныеПодсистемыКлиент.ПоказатьПодробнуюИнформацию(Неопределено, СтрокаТаблицы.ОбнаруженныйСсылка); Иначе ПоказатьЗначение(, Значение); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ПометитьВыделенныеОбъектыТаблицыНаУдаление(ТаблицаЭлемент) - Перем Значение; - - МассивИдентификаторов = ТаблицаЭлемент.ВыделенныеСтроки; - КоличествоВыделено = МассивИдентификаторов.Количество(); - Если КоличествоВыделено = 0 Тогда - Возврат; - КонецЕсли; - - ТаблицаИмя = ТаблицаЭлемент.Имя; - Если ТаблицаИмя = "ДеревоПомеченныхНаУдаление" Тогда - ИмяРеквизитаЗначение = "Значение"; - ЭтоСвязиНеУдаленных = Ложь; - ИначеЕсли ТаблицаИмя = "НеУдаленные" Тогда - ИмяРеквизитаЗначение = "УдаляемыйСсылка"; - ЭтоСвязиНеУдаленных = Ложь; - ИначеЕсли ТаблицаИмя = "СвязиНеУдаленных" Тогда - ИмяРеквизитаЗначение = "ОбнаруженныйСсылка"; - ЭтоСвязиНеУдаленных = Истина; - КонецЕсли; - - ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; - МассивСтрокТаблицы = Новый Массив; - МассивСсылокПомеченныхНаУдаление = Новый Массив; - МассивСсылокНеПомеченныхНаУдаление = Новый Массив; - УстанавливатьПометку = Ложь; - ЕстьЗаписиРегистров = Ложь; - ЕстьКонстанты = Ложь; - - Для Каждого Идентификатор Из МассивИдентификаторов Цикл - СтрокаТаблицы = ТаблицаРеквизит.НайтиПоИдентификатору(Идентификатор); - Если ЭтоСвязиНеУдаленных Тогда - Если Не СтрокаТаблицы.Видимость Тогда - Продолжить; // Обход особенности с CTRL+A. - ИначеЕсли СтрокаТаблицы.ЭтоКонстанта Тогда - ЕстьКонстанты = Истина; - Продолжить; - ИначеЕсли Не СтрокаТаблицы.СсылочногоТипа Тогда - ЕстьЗаписиРегистров = Истина; - Продолжить; - КонецЕсли; - КонецЕсли; - СтрокаТаблицы.Свойство(ИмяРеквизитаЗначение, Значение); - Если ТипЗнч(Значение) = Тип("Строка") Тогда - КоличествоВыделено = КоличествоВыделено - 1; // Группы не должны считаться выделенными. - Продолжить; // Пропуск групп. - КонецЕсли; - Если СтрокаТаблицы.ПометкаУдаления Тогда - МассивСсылокПомеченныхНаУдаление.Добавить(Значение); - Иначе - УстанавливатьПометку = Истина; - МассивСсылокНеПомеченныхНаУдаление.Добавить(Значение); - КонецЕсли; - Если ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыКоллекция") Тогда - Найденные = ТаблицаРеквизит.НайтиСтроки(Новый Структура(ИмяРеквизитаЗначение, Значение)); - Для Каждого СтрокаПоСсылке Из Найденные Цикл - МассивСтрокТаблицы.Добавить(СтрокаПоСсылке); - КонецЦикла; - Иначе - МассивСтрокТаблицы.Добавить(СтрокаТаблицы); - КонецЕсли; - КонецЦикла; - - МассивСсылок = ?(УстанавливатьПометку, МассивСсылокНеПомеченныхНаУдаление, МассивСсылокПомеченныхНаУдаление); - КоличествоМожноУдалить = МассивСсылок.Количество(); - Если КоличествоМожноУдалить = 0 Тогда - ТекстОшибки = НСтр("ru = 'Выберите объект.'"); - Если КоличествоВыделено = 1 Тогда - Если ЕстьЗаписиРегистров Тогда - ТекстОшибки = НСтр("ru = 'Удаление записи регистра выполняется из ее карточки.'"); - ИначеЕсли ЕстьКонстанты Тогда - ТекстОшибки = НСтр("ru = 'Очистка значения константы выполняется из ее карточки.'"); - КонецЕсли; - Иначе - Если ЕстьЗаписиРегистров Или ЕстьКонстанты Тогда - ТекстОшибки = НСтр("ru = 'Удаление записей регистров или очистка значений констант выполняется из их карточек.'"); - КонецЕсли; - КонецЕсли; - ПоказатьПредупреждение(, ТекстОшибки); - Возврат; - КонецЕсли; - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ТаблицаИмя", ТаблицаИмя); - ПараметрыВыполнения.Вставить("МассивСтрокТаблицы", МассивСтрокТаблицы); - ПараметрыВыполнения.Вставить("МассивСсылок", МассивСсылок); - ПараметрыВыполнения.Вставить("ИмяРеквизитаЗначение", ИмяРеквизитаЗначение); - ПараметрыВыполнения.Вставить("УстанавливатьПометку", УстанавливатьПометку); - - Обработчик = Новый ОписаниеОповещения("ПометитьВыделенныеОбъектыТаблицыНаУдалениеЗавершение", ЭтотОбъект, ПараметрыВыполнения); - - Если КоличествоМожноУдалить = 1 Тогда - Если УстанавливатьПометку Тогда - ТекстВопроса = НСтр("ru = 'Пометить ""%1"" на удаление?'"); - Иначе - ТекстВопроса = НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"); - КонецЕсли; - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, МассивСтрокТаблицы[0].Представление); - Иначе - Если УстанавливатьПометку Тогда - ТекстВопроса = НСтр("ru = 'Пометить выделенные объекты (%1) на удаление?'"); - Иначе - ТекстВопроса = НСтр("ru = 'Снять с выделенных объектов (%1) пометку на удаление?'"); - КонецЕсли; - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Формат(КоличествоМожноУдалить, "ЧН=0; ЧГ=")); - КонецЕсли; - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.Да); - Кнопки.Добавить(КодВозвратаДиалога.Нет); - - ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, 60, КодВозвратаДиалога.Нет); -КонецПроцедуры - -&НаКлиенте -Процедура ПометитьВыделенныеОбъектыТаблицыНаУдалениеЗавершение(Ответ, ПараметрыВыполнения) Экспорт - Если Ответ <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - - ОповещениеОбИзменениях = ИзменитьПометкуУдаленияОбъектов(ПараметрыВыполнения.МассивСсылок, ПараметрыВыполнения.УстанавливатьПометку); - - КоличествоОбъектов = ПараметрыВыполнения.МассивСсылок.Количество(); - Если КоличествоОбъектов > 0 Тогда - СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "НеУдаленные", "*", Истина); - КонецЕсли; - - СтандартныеПодсистемыКлиент.ОповеститьФормыОбИзменении(ОповещениеОбИзменениях, - Новый Структура("ПометкаУдаления", ПараметрыВыполнения.УстанавливатьПометку)); - - ОповещениеТекст = Неопределено; - ОповещениеСсылка = Неопределено; - Если КоличествоОбъектов = 0 Тогда - ОповещениеЗаголовок = НСтр("ru = 'Объект не найден'"); - Иначе - Если ПараметрыВыполнения.УстанавливатьПометку Тогда - ОповещениеЗаголовок = НСтр("ru = 'Пометка удаления установлена'"); - Иначе - ОповещениеЗаголовок = НСтр("ru = 'Пометка удаления снята'"); - КонецЕсли; - Если КоличествоОбъектов = 1 Тогда - ОповещениеСсылка = ПараметрыВыполнения.МассивСсылок[0]; - ОповещениеТекст = Строка(ОповещениеСсылка); - Иначе - ОповещениеЗаголовок = ОповещениеЗаголовок + " (" + Формат(КоличествоОбъектов, "ЧН=0; ЧГ=") + ")"; - КонецЕсли; - КонецЕсли; - ПоказатьОповещениеПользователя(ОповещениеЗаголовок, ОповещениеСсылка, ОповещениеТекст); - -КонецПроцедуры - &НаКлиенте Процедура ДеревоПомеченныхНаУдалениеУстановитьПометкуВСписке(Данные, Пометка, ПроверятьРодителя) @@ -566,949 +1041,560 @@ &НаКлиенте Процедура ДеревоПомеченныхНаУдалениеПроверитьРодителя(Родитель) - ПометкаРодителя = Истина; ЭлементыСтроки = Родитель.ПолучитьЭлементы(); - Для Каждого Элемент Из ЭлементыСтроки Цикл - Если Не Элемент.Пометка Тогда - ПометкаРодителя = Ложь; + Родитель.Пометка = ЗначениеПометкиЭлементов(ЭлементыСтроки); + +КонецПроцедуры + +// Параметры: +// Результат - СписокЗначений из Строка +// ДополнительныеПараметры - Структура +// +&НаКлиенте +Процедура НастроитьОтборЗавершение(Результат, ДополнительныеПараметры) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущийОтбор = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ОтборМетаданных); + УстановитьОтборМетаданных(ЭтотОбъект, Результат); + + Если ОтборМетаданныхИзменен(ТекущийОтбор, Результат) Тогда + ЗапуститьЗадание(ЗаданияФормы().ПоискПомеченных); + КонецЕсли; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьОтборМетаданных(Форма, Результат) + Форма.ОтборМетаданных = ?(Результат = Неопределено, Новый СписокЗначений, Результат.Скопировать());// СписокЗначений из Строка + Форма.Элементы.НастроитьОтбор.Заголовок = ПредставлениеОтбораМетаданных(Результат); +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеОтбораМетаданных(ЗначениеОтбора) + ПредставлениеОтбора = ""; + Представление = Новый Массив; + Для Каждого Отбор Из ЗначениеОтбора Цикл + Представление.Добавить(Отбор.Представление); + КонецЦикла; + ПредставлениеОтбора = СтрСоединить(Представление, ", "); + Возврат ?(ПустаяСтрока(ПредставлениеОтбора), НСтр("ru='Все помеченные на удаление'"), ПредставлениеОтбора); +КонецФункции + +&НаКлиенте +Функция ОтборМетаданныхИзменен(СтарыйОтбор, Результат) + ТребуетсяПовторныйПоиск = Ложь; + Для Каждого Элемент Из Результат Цикл + Если ОтборМетаданных.НайтиПоЗначению(Элемент.Значение) = Неопределено Тогда + ТребуетсяПовторныйПоиск = Истина; Прервать; КонецЕсли; КонецЦикла; - Родитель.Пометка = ПометкаРодителя; + Если СтарыйОтбор.Количество() <> Результат.Количество() Тогда + ТребуетсяПовторныйПоиск = Истина; + КонецЕсли; + + Возврат ТребуетсяПовторныйПоиск; +КонецФункции + +#Область ФоновыеЗадания + +#Область ПоискПомеченныхНаУдаление + +&НаКлиенте +Процедура НачатьПоискПомеченных() + УстановитьСостояниеВыбораПомеченныхНаУдалениеСПанельюСостояния(); + + ПредставлениеОперации = НСтр("ru='Поиск помеченных на удаление'"); + Элементы.СтраницыОтображениеСостояния.ТекущаяСтраница = Элементы.СостояниеВыполняется; + Элементы.ДекорацияПредставлениеДлительнойОперации.Заголовок = НСтр("ru='Выполняется поиск помеченных на удаление...'"); + Элементы.СтраницыИнформация.ТолькоПросмотр = Истина; + Элементы.ГруппаАктивныПослеПоискаПомеченные.Доступность = Ложь; + + Обработчик = Новый ОписаниеОповещения("ПослеЗавершенияПоискаПомеченных", ЭтотОбъект); + + ВыполняемаяОперация = НачатьПоискПомеченныхСервер(ОтборМетаданных, УникальныйИдентификатор); + ПриНачалеФоновогоЗадания(Обработчик); КонецПроцедуры &НаКлиенте -Процедура РегламентныеЗаданияИзменитьРасписание() - Обработчик = Новый ОписаниеОповещения("РегламентныеЗаданияПослеИзмененияРасписания", ЭтотОбъект); - Диалог = Новый ДиалогРасписанияРегламентногоЗадания(УдалениеПомеченныхРасписание); - Диалог.Показать(Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура РегламентныеЗаданияПослеИзмененияРасписания(Расписание, ПараметрыВыполнения) Экспорт - Если Расписание = Неопределено Тогда - УдалениеПомеченныхИспользование = Ложь; - Возврат; - КонецЕсли; - - УдалениеПомеченныхРасписание = Расписание; - УдалениеПомеченныхИспользование = Истина; - - Изменения = Новый Структура("Расписание", Расписание); - Изменения.Вставить("Использование", Истина); - РегламентныеЗаданияСохранить(Изменения); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Клиент, Сервер - -&НаКлиентеНаСервереБезКонтекста -Процедура ВидимостьДоступность(Форма) - Элементы = Форма.Элементы; - ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; - - Элементы.КнопкаДалее.Заголовок = НСтр("ru = 'Удалить'"); - Элементы.КнопкаЗакрыть.Заголовок = НСтр("ru = 'Закрыть'"); - Элементы.КнопкаНазад.Заголовок = НСтр("ru = '< В начало'"); - - Если ТекущаяСтраница = Элементы.СтраницаВыборРежимаУдаления Тогда - Элементы.КнопкаНазад.Видимость = Ложь; - Элементы.КнопкаДалее.Видимость = Истина; - Если Форма.РежимУдаления <> "Полный" Тогда - Элементы.КнопкаДалее.Заголовок = НСтр("ru = 'Далее >'"); - КонецЕсли; - Элементы.КнопкаДалее.КнопкаПоУмолчанию = Истина; - Элементы.КнопкаЗакрыть.Заголовок = НСтр("ru = 'Отмена'"); - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПомеченныеНаУдаление Тогда - Элементы.КнопкаНазад.Видимость = Истина; - Элементы.КнопкаНазад.Заголовок = НСтр("ru = '< Назад'"); - Элементы.КнопкаДалее.Видимость = Истина; - Элементы.КнопкаДалее.Заголовок = НСтр("ru = 'Удалить'"); - Элементы.КнопкаДалее.КнопкаПоУмолчанию = Истина; - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация Тогда - Элементы.КнопкаНазад.Видимость = Ложь; - Элементы.КнопкаДалее.Видимость = Ложь; - Элементы.КнопкаЗакрыть.Заголовок = НСтр("ru = 'Прервать и закрыть'"); - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПричиныНевозможностиУдаления Тогда - Элементы.КнопкаНазад.Видимость = Истина; - Элементы.КнопкаДалее.Видимость = Истина; - Элементы.КнопкаДалее.Заголовок = НСтр("ru = 'Повторить удаление'"); - Элементы.КнопкаДалее.КнопкаПоУмолчанию = Истина; - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаУдалениеНеТребуется Тогда - Элементы.КнопкаНазад.Видимость = Истина; - Элементы.КнопкаДалее.Видимость = Ложь; - Элементы.КнопкаЗакрыть.КнопкаПоУмолчанию = Истина; - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаУспешноЗавершено Тогда - Элементы.КнопкаНазад.Видимость = Истина; - Элементы.КнопкаДалее.Видимость = Ложь; - Элементы.КнопкаЗакрыть.КнопкаПоУмолчанию = Истина; - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаВозниклаОшибка Тогда - Элементы.КнопкаНазад.Видимость = Истина; - Элементы.КнопкаДалее.Видимость = Ложь; - КонецЕсли; - - Элементы.ПодсказкаМонопольногоРежима.Видимость = Форма.Монопольно; - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция НомерКартинки(Знач СсылкаИлиДанные, Знач СсылочногоТипа, Знач Вид, Знач Статус) - - Вид = ВРег(Вид); - Если СсылочногоТипа Тогда - Если Вид = "СПРАВОЧНИК" - Или Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда - НомерКартинки = 3; - ИначеЕсли Вид = "ДОКУМЕНТ" Тогда - НомерКартинки = 12; - ИначеЕсли Вид = "ПЛАНСЧЕТОВ" Тогда - НомерКартинки = 15; - ИначеЕсли Вид = "ПЛАНВИДОВРАСЧЕТА" Тогда - НомерКартинки = 17; - ИначеЕсли Вид = "БИЗНЕСПРОЦЕСС" Тогда - НомерКартинки = 19; - ИначеЕсли Вид = "ЗАДАЧА" Тогда - НомерКартинки = 21; - ИначеЕсли Вид = "ПЛАНОБМЕНА" Тогда - НомерКартинки = 23; - Иначе - НомерКартинки = -2; - КонецЕсли; - Если Статус = "Удален" Тогда - НомерКартинки = НомерКартинки + 1; - ИначеЕсли Статус = "Проведен" Тогда - НомерКартинки = НомерКартинки + 2; - КонецЕсли; - Иначе - Если Вид = "КОНСТАНТА" Тогда - НомерКартинки = 25; - ИначеЕсли Вид = "РЕГИСТРСВЕДЕНИЙ" Тогда - НомерКартинки = 26; - ИначеЕсли Вид = "РЕГИСТРНАКОПЛЕНИЯ" Тогда - НомерКартинки = 28; - ИначеЕсли Вид = "РЕГИСТРБУХГАЛТЕРИИ" Тогда - НомерКартинки = 34; - ИначеЕсли Вид = "РЕГИСТРРАСЧЕТА" Тогда - НомерКартинки = 38; - ИначеЕсли СсылкаИлиДанные = Неопределено Тогда - НомерКартинки = 11; - Иначе - НомерКартинки = 8; - КонецЕсли; - КонецЕсли; - - Возврат НомерКартинки; -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера, Сервер - -&НаСервере -Функция ПомеченныеНаУдалениеСоСтраницыРезультатов() - Результат = Новый Массив; - - ДеревоЗначений = РеквизитФормыВЗначение("НеУдаленные"); - Найденные = ДеревоЗначений.Строки.НайтиСтроки(Новый Структура("ПометкаУдаления", Истина), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - Если ТипЗнч(СтрокаДерева.УдаляемыйСсылка) <> Тип("Строка") - И Результат.Найти(СтрокаДерева.УдаляемыйСсылка) = Неопределено Тогда - Результат.Добавить(СтрокаДерева.УдаляемыйСсылка); - КонецЕсли; - КонецЦикла; - - ТаблицаЗначений = РеквизитФормыВЗначение("СвязиНеУдаленных"); - Если РежимУдаления = "Полный" Тогда - Фильтр = Новый Структура("ПометкаУдаления", Истина); - Иначе - Фильтр = Новый Структура("ПометкаУдаления, ПометкаУдаленияМодифицирована", Истина, Истина); - КонецЕсли; - Найденные = ТаблицаЗначений.НайтиСтроки(Фильтр); - Для Каждого СтрокаДерева Из Найденные Цикл - Если ТипЗнч(СтрокаДерева.ОбнаруженныйСсылка) <> Тип("Строка") - И Результат.Найти(СтрокаДерева.ОбнаруженныйСсылка) = Неопределено Тогда - Результат.Добавить(СтрокаДерева.ОбнаруженныйСсылка); - КонецЕсли; - КонецЦикла; - - Возврат Результат; -КонецФункции - -&НаСервере -Функция ПомеченныеНаУдалениеСоСтраницыУстановкиФлажков() - Результат = Новый Массив; - - ДеревоЗначений = РеквизитФормыВЗначение("ДеревоПомеченныхНаУдаление"); - Найденные = ДеревоЗначений.Строки.НайтиСтроки(Новый Структура("Пометка", Истина), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - Если ТипЗнч(СтрокаДерева.Значение) <> Тип("Строка") Тогда - Результат.Добавить(СтрокаДерева.Значение); - КонецЕсли; - КонецЦикла; - - Возврат Результат; -КонецФункции - -&НаСервере -Функция ИзменитьПометкуУдаленияОбъектов(МассивСсылок, ПометкаУдаления) - - Количество = МассивСсылок.Количество(); - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - Для Номер = 1 По Количество Цикл - Ссылка = МассивСсылок[Количество - Номер]; - ЭлементБлокировки = Блокировка.Добавить(Ссылка.Метаданные().ПолноеИмя()); - ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); - КонецЦикла; - Блокировка.Заблокировать(); - - Для Номер = 1 По Количество Цикл - ОбратныйИндекс = Количество - Номер; - ИзменяемыйОбъект = МассивСсылок[ОбратныйИндекс].ПолучитьОбъект(); - Если ИзменяемыйОбъект = Неопределено Тогда - МассивСсылок.Удалить(ОбратныйИндекс); - Иначе - ИзменяемыйОбъект.УстановитьПометкуУдаления(ПометкаУдаления); - КонецЕсли; - КонецЦикла; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - КоличествоОбъектов = МассивСсылок.Количество(); - - Если КоличествоОбъектов > 0 Тогда - ДеревоЗначений = РеквизитФормыВЗначение("НеУдаленные"); - ТаблицаЗначений = РеквизитФормыВЗначение("СвязиНеУдаленных"); - - Для Каждого Ссылка Из МассивСсылок Цикл - Найденные = ДеревоЗначений.Строки.НайтиСтроки(Новый Структура("УдаляемыйСсылка", Ссылка), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - Если СтрокаДерева.ПометкаУдаления = ПометкаУдаления Тогда - Продолжить; - КонецЕсли; - СтрокаДерева.ПометкаУдаления = ПометкаУдаления; - СтрокаДерева.НомерКартинки = НомерКартинки(Ссылка, Истина, ОбщегоНазначения.ВидОбъектаПоСсылке(Ссылка), - ?(ПометкаУдаления, "Удален", "")); - КонецЦикла; - - Найденные = ТаблицаЗначений.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", Ссылка)); - Для Каждого СтрокаТаблицы Из Найденные Цикл - Если СтрокаТаблицы.ПометкаУдаления = ПометкаУдаления Тогда - Продолжить; - КонецЕсли; - СтрокаТаблицы.ПометкаУдаления = ПометкаУдаления; - СтрокаТаблицы.НомерКартинки = НомерКартинки(Ссылка, Истина, ОбщегоНазначения.ВидОбъектаПоСсылке(Ссылка), - ?(ПометкаУдаления, "Удален", "")); - СтрокаТаблицы.ПометкаУдаленияМодифицирована = Истина; - КонецЦикла; - КонецЦикла; - - ТаблицаВРеквизитФормы("НеУдаленные", ДеревоЗначений, "УдаляемыйСсылка"); - ТаблицаВРеквизитФормы("СвязиНеУдаленных", ТаблицаЗначений, "УдаляемыйСсылка, ОбнаруженныйСсылка"); - НеУдаленныеИдентификаторТекущейСтроки = Элементы.НеУдаленные.ТекущаяСтрока; - КонецЕсли; - - Возврат СтандартныеПодсистемыСервер.ПодготовитьОповещениеФормОбИзменении(МассивСсылок); - -КонецФункции - -&НаСервере -Процедура ТаблицаВРеквизитФормы(ИмяТаблицы, ДанныеТаблицы, КлючевыеКолонки) - ВыделенныеСтроки = ЗапомнитьВыделенныеСтроки(ИмяТаблицы, КлючевыеКолонки); - ЗначениеВРеквизитФормы(ДанныеТаблицы, ИмяТаблицы); - ВосстановитьВыделенныеСтроки(ИмяТаблицы, ВыделенныеСтроки); -КонецПроцедуры - -&НаСервере -Функция ЗапомнитьВыделенныеСтроки(ИмяТаблицы, КлючевыеКолонки) - ТаблицаРеквизит = ЭтотОбъект[ИмяТаблицы]; - ТаблицаЭлемент = Элементы[ИмяТаблицы]; - - Результат = Новый Структура; - Результат.Вставить("Выделенные", Новый Массив); - Результат.Вставить("Текущая", Неопределено); - - ТекущаяИдентификатор = ТаблицаЭлемент.ТекущаяСтрока; - Если ТекущаяИдентификатор <> Неопределено Тогда - СтрокаТаблицы = ТаблицаРеквизит.НайтиПоИдентификатору(ТекущаяИдентификатор); - Если СтрокаТаблицы <> Неопределено Тогда - ДанныеСтроки = Новый Структура(КлючевыеКолонки); - ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаТаблицы); - Результат.Текущая = ДанныеСтроки; - КонецЕсли; - КонецЕсли; - - ВыделенныеСтроки = ТаблицаЭлемент.ВыделенныеСтроки; - Если ВыделенныеСтроки <> Неопределено Тогда - Для Каждого ВыделеннаяИдентификатор Из ВыделенныеСтроки Цикл - Если ВыделеннаяИдентификатор = ТекущаяИдентификатор Тогда - Продолжить; - КонецЕсли; - СтрокаТаблицы = ТаблицаРеквизит.НайтиПоИдентификатору(ВыделеннаяИдентификатор); - Если СтрокаТаблицы <> Неопределено Тогда - ДанныеСтроки = Новый Структура(КлючевыеКолонки); - ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаТаблицы); - Результат.Выделенные.Добавить(ДанныеСтроки); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Возврат Результат; -КонецФункции - -&НаСервере -Процедура ВосстановитьВыделенныеСтроки(ИмяТаблицы, СтрокиТаблицы) - ТаблицаРеквизит = ЭтотОбъект[ИмяТаблицы]; - ТаблицаЭлемент = Элементы[ИмяТаблицы]; - - ТаблицаЭлемент.ВыделенныеСтроки.Очистить(); - - Если СтрокиТаблицы.Текущая <> Неопределено Тогда - Найденные = НайтиСтрокиТаблицы(ТаблицаРеквизит, СтрокиТаблицы.Текущая); - Если Найденные <> Неопределено И Найденные.Количество() > 0 Тогда - Для Каждого СтрокаТаблицы Из Найденные Цикл - Если СтрокаТаблицы <> Неопределено Тогда - Идентификатор = СтрокаТаблицы.ПолучитьИдентификатор(); - ТаблицаЭлемент.ТекущаяСтрока = Идентификатор; - ТаблицаЭлемент.ВыделенныеСтроки.Добавить(Идентификатор); - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Для Каждого ДанныеСтроки Из СтрокиТаблицы.Выделенные Цикл - Найденные = НайтиСтрокиТаблицы(ТаблицаРеквизит, ДанныеСтроки); - Если Найденные <> Неопределено И Найденные.Количество() > 0 Тогда - Для Каждого СтрокаТаблицы Из Найденные Цикл - Если СтрокаТаблицы <> Неопределено Тогда - ТаблицаЭлемент.ВыделенныеСтроки.Добавить(СтрокаТаблицы.ПолучитьИдентификатор()); - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -&НаСервере -Функция НайтиСтрокиТаблицы(ТаблицаРеквизит, ДанныеСтроки) - Если ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыКоллекция") Тогда // Таблица значений. - Возврат ТаблицаРеквизит.НайтиСтроки(ДанныеСтроки); - ИначеЕсли ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыДерево") Тогда // Дерево значений. - Возврат НайтиРекурсивно(ТаблицаРеквизит.ПолучитьЭлементы(), ДанныеСтроки); - Иначе - Возврат Неопределено; - КонецЕсли; -КонецФункции - -&НаСервере -Функция НайтиРекурсивно(НаборСтрок, ДанныеСтроки, Найденные = Неопределено) - Если Найденные = Неопределено Тогда - Найденные = Новый Массив; - КонецЕсли; - Для Каждого СтрокаТаблицы Из НаборСтрок Цикл - ЗначенияСовпадают = Истина; - Для Каждого КлючИЗначение Из ДанныеСтроки Цикл - Если СтрокаТаблицы[КлючИЗначение.Ключ] <> КлючИЗначение.Значение Тогда - ЗначенияСовпадают = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - Если ЗначенияСовпадают Тогда - Найденные.Добавить(СтрокаТаблицы); - КонецЕсли; - НайтиРекурсивно(СтрокаТаблицы.ПолучитьЭлементы(), ДанныеСтроки, Найденные); - КонецЦикла; - Возврат Найденные; -КонецФункции - -&НаСервере -Процедура РегламентныеЗаданияСохранить(Изменения) - РегламентныеЗаданияСервер.ИзменитьЗадание(УдалениеПомеченныхИдентификатор, Изменения); - УстановитьДоступность(); -КонецПроцедуры - -&НаСервере -Функция РегламентныеЗаданияНайтиПредопределенное() - Фильтр = Новый Структура("Метаданные", "УдалениеПомеченных"); - Найденные = РегламентныеЗаданияСервер.НайтиЗадания(Фильтр); - Задание = ?(Найденные.Количество() = 0, Неопределено, Найденные[0]); - Возврат Задание; -КонецФункции - -&НаСервере -Процедура УстановитьДоступность() - - Если Элементы.УдалениеПомеченныхНастроитьРасписание.Видимость Тогда - Элементы.УдалениеПомеченныхНастроитьРасписание.Доступность = УдалениеПомеченныхИспользование; - Элементы.УдалениеПомеченныхПредставлениеРасписания.Видимость = УдалениеПомеченныхИспользование; - Если УдалениеПомеченныхИспользование Тогда - РасписаниеПредставление = Строка(УдалениеПомеченныхРасписание); - Представление = ВРег(Лев(РасписаниеПредставление, 1)) + Сред(РасписаниеПредставление, 2); - Иначе - Представление = НСтр("ru = '<Отключено>'"); - КонецЕсли; - Элементы.УдалениеПомеченныхПредставлениеРасписания.Заголовок = Представление; - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура СнятьМонопольныйРежим() - УстановитьМонопольныйРежим(Ложь); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - МодульСоединенияИБ = ОбщегоНазначения.ОбщийМодуль("СоединенияИБ"); - МодульСоединенияИБ.РазрешитьРаботуПользователей(); - КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Сервер - -&НаСервере -Процедура ПриСозданииНаСервереУстановитьТекстПоясненияКОбработке() - Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда - КоличествоСоединений = 0; - ВыводитьПодпись = Ложь; - ВыводитьКоличество = Ложь; - ИначеЕсли ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - КоличествоСоединений = 0; - НомерЭтогоСеанса = НомерСеансаИнформационнойБазы(); - Для Каждого СеансИнформационнойБазы Из ПолучитьСеансыИнформационнойБазы() Цикл - Если СеансИнформационнойБазы.НомерСеанса = НомерЭтогоСеанса Тогда - Продолжить; - КонецЕсли; - Если СеансИнформационнойБазы.ИмяПриложения = "1CV8" // Толстый клиент. - Или СеансИнформационнойБазы.ИмяПриложения = "1CV8C" // Тонкий клиент. - Или СеансИнформационнойБазы.ИмяПриложения = "WebClient" Тогда // Веб-клиент. - КоличествоСоединений = КоличествоСоединений + 1; - КонецЕсли; - КонецЦикла; - ВыводитьПодпись = (КоличествоСоединений > 0); - ВыводитьКоличество = Истина; - Иначе - КоличествоСоединений = 0; - ВыводитьПодпись = Истина; - ВыводитьКоличество = Ложь; - КонецЕсли; - - ШаблонЗаголовка = Элементы.ПояснениеКОбработке.Заголовок; - Если Не ВыводитьПодпись Тогда - Элементы.ПояснениеКОбработке.Заголовок = Лев(ШаблонЗаголовка, СтрНайти(ШаблонЗаголовка, "<1/>") - 1); - КлючСохраненияПоложенияОкна = "1"; - Иначе - Остаток = СтрЗаменить(ШаблонЗаголовка, "<1/>", ""); - МассивСтрок = Новый Массив; - - Позиция = СтрНайти(Остаток, ""); - ОпределениеСсылки = Лев(Остаток, Позиция -1); - Остаток = Сред(Остаток, Позиция + 4); - - Позиция = СтрНайти(ОпределениеСсылки, """"); - ОпределениеСсылки = Сред(ОпределениеСсылки, Позиция + 1); - - Позиция = СтрНайти(ОпределениеСсылки, """"); - АдресСсылки = Лев(ОпределениеСсылки, Позиция - 1); - ТекстСсылки = Сред(ОпределениеСсылки, Позиция + 2); - Если ВыводитьКоличество Тогда - ТекстСсылки = ТекстСсылки + " (" + Формат(КоличествоСоединений, "ЧГ=") + ")"; - КонецЕсли; - - МассивСтрок.Добавить(Новый ФорматированнаяСтрока(ТекстСсылки, , , , АдресСсылки)); - МассивСтрок.Добавить(Остаток); - - Элементы.ПояснениеКОбработке.Заголовок = Новый ФорматированнаяСтрока(МассивСтрок); - КлючСохраненияПоложенияОкна = "2"; - КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьКоллекцииОставшихсяОбъектов(РезультатВыполненияВФоне) - - ПрепятствующиеУдалению = РезультатВыполненияВФоне.ПрепятствующиеУдалению; - ИнформацияОТипах = РезультатВыполненияВФоне.ИнформацияОТипах; - - ДеревоНеУдаленные = РеквизитФормыВЗначение("НеУдаленные"); - ДеревоНеУдаленные.Строки.Очистить(); - ТаблицаСвязиНеУдаленных = РеквизитФормыВЗначение("СвязиНеУдаленных"); - ТаблицаСвязиНеУдаленных.Очистить(); - - ГруппыНеУдаленных = Новый Соответствие; - СтрокиНеУдаленных = Новый Соответствие; - - ОбнаруженыСсылочныеНеОтмеченные = Ложь; - ОбнаруженыРегистры = Ложь; - - Для Каждого Причина Из ПрепятствующиеУдалению Цикл - СтрокаНеУдаленного = СтрокиНеУдаленных.Получить(Причина.УдаляемыйСсылка); - Если СтрокаНеУдаленного = Неопределено Тогда - УдаляемыйИнформация = ИнформацияОТипах.Получить(Причина.УдаляемыйТип); - Если УдаляемыйИнформация.Технический Тогда - Продолжить; - КонецЕсли; - - ГруппаНеУдаленного = ГруппыНеУдаленных.Получить(Причина.УдаляемыйТип); - Если ГруппаНеУдаленного = Неопределено Тогда - ГруппаНеУдаленного = ДеревоНеУдаленные.Строки.Добавить(); - ГруппаНеУдаленного.НомерКартинки = -1; - ГруппаНеУдаленного.УдаляемыйСсылка = УдаляемыйИнформация.ПолноеИмя; - ГруппаНеУдаленного.Представление = УдаляемыйИнформация.ПредставлениеСписка; - - ГруппыНеУдаленных.Вставить(Причина.УдаляемыйТип, ГруппаНеУдаленного); - БыстрыйПоиск.ПолныеИменаОбъектовМетаданных.Вставить(Причина.УдаляемыйТип, УдаляемыйИнформация.ПолноеИмя); - КонецЕсли; - - ГруппаНеУдаленного.КоличествоСвязей = ГруппаНеУдаленного.КоличествоСвязей + 1; - - СтрокаНеУдаленного = ГруппаНеУдаленного.Строки.Добавить(); - СтрокаНеУдаленного.УдаляемыйСсылка = Причина.УдаляемыйСсылка; - СтрокаНеУдаленного.Представление = Строка(Причина.УдаляемыйСсылка); - СтрокаНеУдаленного.ПометкаУдаления = Истина; - СтрокаНеУдаленного.НомерКартинки = НомерКартинки(СтрокаНеУдаленного.УдаляемыйСсылка, - Истина, УдаляемыйИнформация.Вид, "Удален"); - СтрокиНеУдаленных.Вставить(Причина.УдаляемыйСсылка, СтрокаНеУдаленного); - КонецЕсли; - - СтрокаНеУдаленного.КоличествоСвязей = СтрокаНеУдаленного.КоличествоСвязей + 1; - - СтрокаПрепятствующегоУдалению = ТаблицаСвязиНеУдаленных.Добавить(); - СтрокаПрепятствующегоУдалению.УдаляемыйСсылка = Причина.УдаляемыйСсылка; - СтрокаПрепятствующегоУдалению.ОбнаруженныйСсылка = Причина.ОбнаруженныйСсылка; - СтрокаПрепятствующегоУдалению.ПометкаУдаления = (Причина.ОбнаруженныйСтатус = "Удален"); - СтрокаПрепятствующегоУдалению.ЭтоОшибка = (Причина.ОбнаруженныйТип = Тип("Строка")); - - Если СтрокаПрепятствующегоУдалению.ЭтоОшибка Тогда - СтрокаПрепятствующегоУдалению.Представление = Причина.Подробно; - Иначе - ОбнаруженныйИнформация = ИнформацияОТипах.Получить(Причина.ОбнаруженныйТип); - - СтрокаПрепятствующегоУдалению.СсылочногоТипа = ОбнаруженныйИнформация.Ссылочный; - - Если ОбнаруженныйИнформация.Вид = "РЕГИСТРСВЕДЕНИЙ" - Или ОбнаруженныйИнформация.Вид = "РЕГИСТРНАКОПЛЕНИЯ" - Или ОбнаруженныйИнформация.Вид = "РЕГИСТРБУХГАЛТЕРИИ" - Или ОбнаруженныйИнформация.Вид = "РЕГИСТРРАСЧЕТА" Тогда - ОбнаруженыРегистры = Истина; - КонецЕсли; - - Если Не ОбнаруженыСсылочныеНеОтмеченные // Оптимизация. - И ОбнаруженныйИнформация.Ссылочный - И РезультатВыполненияВФоне.НеУдаленные.Найти(Причина.ОбнаруженныйСсылка) = Неопределено Тогда - ОбнаруженыСсылочныеНеОтмеченные = Ложь; - КонецЕсли; - - Если Причина.ОбнаруженныйСсылка = Неопределено Тогда // Константа - СтрокаПрепятствующегоУдалению.ОбнаруженныйСсылка = ОбнаруженныйИнформация.ПолноеИмя; - СтрокаПрепятствующегоУдалению.ЭтоКонстанта = Истина; - СтрокаПрепятствующегоУдалению.Представление = ОбнаруженныйИнформация.ПредставлениеЭлемента + " (" + НСтр("ru = 'Константа'") + ")"; - Иначе - СтрокаПрепятствующегоУдалению.Представление = Строка(Причина.ОбнаруженныйСсылка) + " (" + ОбнаруженныйИнформация.ПредставлениеЭлемента + ")"; - БыстрыйПоиск.ПолныеИменаОбъектовМетаданных.Вставить(Причина.ОбнаруженныйТип, ОбнаруженныйИнформация.ПолноеИмя); - КонецЕсли; - - СтрокаПрепятствующегоУдалению.НомерКартинки = НомерКартинки(СтрокаПрепятствующегоУдалению.ОбнаруженныйСсылка, - СтрокаПрепятствующегоУдалению.СсылочногоТипа, ОбнаруженныйИнформация.Вид, Причина.ОбнаруженныйСтатус); - КонецЕсли; - КонецЦикла; - - Для Каждого ГруппаНеУдаленного Из ДеревоНеУдаленные.Строки Цикл - ГруппаНеУдаленного.Представление = ГруппаНеУдаленного.Представление + " (" + Формат(ГруппаНеУдаленного.КоличествоСвязей, "ЧН=0; ЧГ=") + ")"; - КонецЦикла; - - ЗаголовокПодвала = Элементы.НадписьВПодвале.Заголовок; - ПодписьДобавлена = (СтрЧислоВхождений(ЗаголовокПодвала, ".") = 2); - Если ОбнаруженыРегистры И Не ОбнаруженыСсылочныеНеОтмеченные Тогда - Если Не ПодписьДобавлена Тогда - Элементы.НадписьВПодвале.Заголовок = ЗаголовокПодвала + " " - + НСтр("ru = 'Для устранения сложных зависимостей рекомендуется повторить удаление с включенным флажком ""Заблокировать всю работу в программе и ускорить удаление"" (нажмите кнопку ""< В начало"").'"); - КонецЕсли; - Иначе - Если ПодписьДобавлена Тогда - Элементы.НадписьВПодвале.Заголовок = Лев(ЗаголовокПодвала, СтрНайти(ЗаголовокПодвала, ".")); - КонецЕсли; - КонецЕсли; - - ДеревоНеУдаленные.Строки.Сортировать("Представление", Истина); - ТаблицаСвязиНеУдаленных.Сортировать("УдаляемыйСсылка, Представление"); - - ЗначениеВРеквизитФормы(ДеревоНеУдаленные, "НеУдаленные"); - ЗначениеВРеквизитФормы(ТаблицаСвязиНеУдаленных, "СвязиНеУдаленных"); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Работа с длительными операциями - -&НаКлиенте -Процедура ЗапуститьФоновоеЗаданиеКлиент(Режим) - ПараметрыМетода = Новый Структура; - ПараметрыМетода.Вставить("ИскатьПомеченные", Ложь); - ПараметрыМетода.Вставить("УдалятьПомеченные", Ложь); - ПараметрыМетода.Вставить("ПрочитатьПомеченныеСоСтраницыРезультатов", Ложь); - ПараметрыМетода.Вставить("ПрочитатьПомеченныеСоСтраницыУстановкиФлажков", Ложь); - - Если Режим = 1 Тогда - ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; - Если ТекущаяСтраница = Элементы.СтраницаВыборРежимаУдаления Тогда - Если РежимУдаления = "Полный" Тогда - ПараметрыМетода.ИскатьПомеченные = Истина; - ПараметрыМетода.УдалятьПомеченные = Истина; - Иначе - ПараметрыМетода.ИскатьПомеченные = Истина; - КонецЕсли; - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПомеченныеНаУдаление Тогда - ПараметрыМетода.ПрочитатьПомеченныеСоСтраницыУстановкиФлажков = Истина; - ПараметрыМетода.УдалятьПомеченные = Истина; - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПричиныНевозможностиУдаления Тогда - Если РежимУдаления = "Полный" Тогда - ПараметрыМетода.ИскатьПомеченные = Истина; - Иначе - ПараметрыМетода.ПрочитатьПомеченныеСоСтраницыРезультатов = Истина; - КонецЕсли; - ПараметрыМетода.УдалятьПомеченные = Истина; - КонецЕсли; - ИначеЕсли Режим = 2 Тогда - ПараметрыМетода.ИскатьПомеченные = Истина; - ПараметрыМетода.ПрочитатьПомеченныеСоСтраницыУстановкиФлажков = Истина; - Иначе - Возврат; - КонецЕсли; - - Если ПараметрыМетода.ИскатьПомеченные Тогда - Текст = НСтр("ru = 'Поиск помеченных на удаление объектов...'"); - Иначе - Текст = НСтр("ru = 'Удаляются объекты, помеченные на удаление...'"); - КонецЕсли; - Элементы.НадписьДлительнаяОперация.Заголовок = Текст; - - Задание = ЗапуститьФоновоеЗадание(ПараметрыМетода); - Если Задание = Неопределено Тогда - Возврат; // Удаление не требуется. - ИначеЕсли Задание.ОшибкаПриУстановкеМонопольногоРежима Тогда - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - Оповещение = Новый ОписаниеОповещения("ПослеУстановкиМонопольногоРежима", ЭтотОбъект, Режим); - ПараметрыФормы = Новый Структура("УдалениеПомеченныхОбъектов", Истина); - МодульСоединенияИБКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СоединенияИБКлиент"); - МодульСоединенияИБКлиент.ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Оповещение, ПараметрыФормы); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось заблокировать работу в программе по причине: - |%1'"), - Задание.ТекстОшибкиУстановкиМонопольногоРежима); - КонецЕсли; - Возврат; - КонецЕсли; - +Процедура ПриНачалеФоновогоЗадания(Знач Обработчик) + Перем НастройкиОжидания; НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); НастройкиОжидания.ВыводитьОкноОжидания = Ложь; НастройкиОжидания.ВыводитьПрогрессВыполнения = Истина; НастройкиОжидания.ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ПриОбновленииПрогрессаФоновогоЗадания", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ВыполняемаяОперация, Обработчик, НастройкиОжидания); + Если ВыполняемаяОперация <> Неопределено Тогда + ПоказатьДиалогПередЗакрытием = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗавершенияФоновогоЗадания(Результат) + РезультатПредыдущегоШага = Результат; + ПоказатьДиалогПередЗакрытием = Ложь; + ВыполняемаяОперация = Неопределено; + УдалитьТекущееЗадание(); - Обработчик = Новый ОписаниеОповещения("ПослеЗавершенияФоновогоЗадания", ЭтотОбъект); + Если КоличествоЗаданийВОчереди() = 0 Тогда + УстановитьМонопольныйРежимНаСервере(Ложь); + КонецЕсли; - ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания); + Если Результат.Статус <> "Ошибка" Тогда + ЗапуститьЗадание(); + КонецЕсли; КонецПроцедуры &НаСервере -Функция ЗапуститьФоновоеЗадание(Знач ПараметрыМетода) - Если ПараметрыМетода.УдалятьПомеченные И Монопольно Тогда - ИнформацияОбОшибке = Неопределено; +Функция НачатьПоискПомеченныхСервер(ОтборМетаданных, УникальныйИдентификаторФормы) + ИмяМетода = "УдалениеПомеченныхОбъектовСлужебный.ПомеченныеНаУдаление"; + + ПараметрыМетода = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификаторФормы); + ПараметрыМетода.ЗапуститьВФоне = Истина; + ПараметрыМетода.НаименованиеФоновогоЗадания = НСтр("ru = 'Поиск помеченных на удаление'"); + Задание = ДлительныеОперации.ВыполнитьФункцию(ПараметрыМетода, ИмяМетода, + ОтборМетаданных, + ДополнительныеРеквизитыПомеченныхНаУдаления.Выгрузить(), + РеквизитФормыВЗначение("ДеревоПомеченныхНаУдаление")); + + Возврат Задание; +КонецФункции + +&НаКлиенте +Процедура ПослеЗавершенияПоискаПомеченных(Результат, ДополнительныеПараметры) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Результат.Статус = "Ошибка" Тогда + + ЗаполнитьИнформациюОшибкамиФоновогоЗадания(ЭтотОбъект, Результат); + УстановитьСостояниеВыбораПомеченныхНаУдалениеСПанельюСостояния(); + + Иначе + + ЗаполнитьДеревоПомеченныхНаУдаление(Результат); + + Если ДеревоПомеченныхНаУдаление.ПолучитьЭлементы().Количество() = 0 Тогда + Элементы.СтраницыОтображениеСостояния.ТекущаяСтраница = Элементы.СостояниеУдалениеНеТребуется; + УстановитьСостояниеВыбораПомеченныхНаУдалениеСПанельюСостояния(); + ОчиститьОчередьЗаданийФормы(); + Иначе + УстановитьСостояниеВыбораПомеченныхНаУдаление(); + КонецЕсли; + + КонецЕсли; + + ПослеЗавершенияФоновогоЗадания(Результат); +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ЗаполнитьИнформациюОшибкамиФоновогоЗадания(Форма, Результат) + Форма.ПодробныйТекстОшибкиФоновогоЗадания = Результат.ПодробноеПредставлениеОшибки; + Форма.Элементы.ДекорацияПредставлениеЗавершенияНеУспешно.Заголовок = + ?(ЭтоОшибкаУстановкиМонопольногоРежима(Результат.КраткоеПредставлениеОшибки), + НСтр("ru='Не удалось установить монопольный режим'"), + Результат.КраткоеПредставлениеОшибки); + Форма.Элементы.СтраницыОтображениеСостояния.ТекущаяСтраница = Форма.Элементы.СостояниеВыполненоСОшибками; +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьДеревоПомеченныхНаУдаление(Результат) + ДеревоЗначений = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); + УдалитьИзВременногоХранилища(Результат.АдресРезультата); + ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(ДеревоПомеченныхНаУдаление, ДеревоЗначений); + УдалитьИзВременногоХранилища(Результат.АдресРезультата); +КонецПроцедуры + +#КонецОбласти + +#Область УдалениеПомеченных + +&НаКлиенте +Процедура НачатьУдалениеПомеченных() + ПредставлениеОперации = НСтр("ru='Удаление помеченных'"); + Элементы.СтраницыОтображениеСостояния.ТекущаяСтраница = Элементы.СостояниеВыполняется; + Элементы.ДекорацияПредставлениеДлительнойОперации.Заголовок = НСтр("ru='Выполняется удаление помеченных...'"); + УстановитьСостояниеВыбораПомеченныхНаУдалениеСПанельюСостояния(); + + Элементы.КоманднаяПанельФормы.Доступность = Ложь; + Элементы.СтраницыИнформация.ТолькоПросмотр = Истина; + + Обработчик = Новый ОписаниеОповещения("ПослеЗавершенияУдаленияПомеченных", ЭтотОбъект); + ВыполняемаяОперация = НачатьУдалениеПомеченныхСервер(УникальныйИдентификатор, РезультатПредыдущегоШага); + ПриНачалеФоновогоЗадания(Обработчик); +КонецПроцедуры + +&НаСервере +Функция УстановитьМонопольныйРежимНаСервере(МонопольныйРежим) + Результат = Новый Структура; + Результат.Вставить("Успешно", Истина); + Результат.Вставить("ПодробноеПредставлениеОшибки", ""); + Результат.Вставить("КраткоеПредставлениеОшибки", ""); + Если МонопольныйРежим() <> МонопольныйРежим Тогда Попытка - УстановитьМонопольныйРежим(Истина); + УстановитьМонопольныйРежим(МонопольныйРежим); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); + Результат.Успешно = Ложь; + Результат.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + СведенияОРезультатахУдаления = УдалениеПомеченныхОбъектовСлужебныйКлиентСервер.НовыйСведенияОРезультатахУдаления(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление помеченных'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + Результат.КраткоеПредставлениеОшибки + + Символы.ПС + Символы.ПС + + Результат.ПодробноеПредставлениеОшибки); КонецПопытки; - Если ИнформацияОбОшибке <> Неопределено Тогда - Результат = Новый Структура; - Результат.Вставить("ОшибкаПриУстановкеМонопольногоРежима", Истина); - Результат.Вставить("ТекстОшибкиУстановкиМонопольногоРежима", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - Возврат Результат; - КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервере +Функция НачатьУдалениеПомеченныхСервер(УникальныйИдентификаторФормы, РезультатПредыдущегоШага) + Если УдалятьПриОткрытии Тогда + ИсточникУдаляемыхОбъектов = Параметры.УдаляемыеОбъекты; + Иначе + ИсточникУдаляемыхОбъектов = РеквизитФормыВЗначение("ДеревоПомеченныхНаУдаление"); КонецЕсли; - // Запуск фонового задания - Если Не ПараметрыМетода.ИскатьПомеченные Тогда - Если ПараметрыМетода.ПрочитатьПомеченныеСоСтраницыРезультатов Тогда - ПользовательскиеОбъекты = ПомеченныеНаУдалениеСоСтраницыРезультатов(); - ИначеЕсли ПараметрыМетода.ПрочитатьПомеченныеСоСтраницыУстановкиФлажков Тогда - ПользовательскиеОбъекты = ПомеченныеНаУдалениеСоСтраницыУстановкиФлажков(); - КонецЕсли; - Если ПользовательскиеОбъекты.Количество() = 0 Тогда - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаУдалениеНеТребуется; - ВидимостьДоступность(ЭтотОбъект); - Возврат Неопределено; - КонецЕсли; - ПараметрыМетода.Вставить("ПользовательскиеОбъекты", ПользовательскиеОбъекты); + НастройкиДополнительныхРеквизитов = РеквизитФормыВЗначение("ДополнительныеРеквизитыПомеченныхНаУдаления"); + ИмяМетода = "УдалениеПомеченныхОбъектовСлужебный.УдалитьПомеченныеОбъекты"; + + ПараметрыМетода = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификаторФормы); + ПараметрыМетода.НаименованиеФоновогоЗадания = НСтр("ru = 'Поиск помеченных на удаление'"); + ПараметрыМетода.ЗапуститьВФоне = Истина; + ЗначениеРезультатаПредыдущегоШага = ?(РезультатПредыдущегоШага <> Неопределено + И ЭтоАдресВременногоХранилища(РезультатПредыдущегоШага.АдресРезультата), + ПолучитьИзВременногоХранилища(РезультатПредыдущегоШага.АдресРезультата), + Неопределено); + + ДопустимыеРежимыУдаления = УдалениеПомеченныхОбъектовСлужебный.ДопустимыеРежимыУдаления(); + Задание = ДлительныеОперации.ВыполнитьФункцию(ПараметрыМетода, ИмяМетода, + ИсточникУдаляемыхОбъектов, + ?(ДопустимыеРежимыУдаления.Найти(РежимУдаления) <> Неопределено, РежимУдаления, "Стандартный"), + НастройкиДополнительныхРеквизитов, + ЗначениеРезультатаПредыдущегоШага, + УникальныйИдентификаторФормы); + + Возврат Задание; +КонецФункции + +&НаКлиенте +Процедура ПослеЗавершенияУдаленияПомеченных(Результат, ДополнительныеПараметры) Экспорт + Если Результат = Неопределено Тогда + Возврат; КонецЕсли; - ПараметрыМетода.Вставить("ПериодЗаписи", 3); // Секунд - ПараметрыМетода.Вставить("Монопольно", Монопольно); + Если Результат.Статус = "Ошибка" Тогда + УстановитьСостояниеВыбораПомеченныхНаУдалениеСПанельюСостояния(); + ЗаполнитьИнформациюОшибкамиФоновогоЗадания(ЭтотОбъект, Результат); + СведенияОРезультатахУдаления = УдалениеПомеченныхОбъектовСлужебныйКлиентСервер.НовыйСведенияОРезультатахУдаления(); + ИначеЕсли Результат.Статус = "Выполнено" Тогда + СведенияОРезультатахУдаления = ЗагрузитьРезультатУдаления( + Результат, УникальныйИдентификаторСУчетомВладельца(), СведенияОРезультатахУдаления); + ОбработатьРезультатВыполненияУдаления(СведенияОРезультатахУдаления); + ОбщегоНазначенияКлиент.ОповеститьОбИзмененииОбъектов(СведенияОРезультатахУдаления.Удаленные); + КонецЕсли; - // Переключение на страницу длительной операции. - ПоказатьДиалогПередЗакрытием = Истина; + УстановитьМонопольныйРежимНаСервере(Ложь); + ПослеЗавершенияФоновогоЗадания(Результат); - ПоказыватьБублик = ПараметрыМетода.УдалятьПомеченные И Монопольно; - Элементы.ФоновоеЗаданиеАнимация.Видимость = ПоказыватьБублик; - Элементы.ФоновоеЗаданиеПроцент.Видимость = Не ПоказыватьБублик; - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; - Если ПоказыватьБублик Тогда - Элементы.НадписьДлительнаяОперация.Заголовок = НСтр("ru = 'Пожалуйста, подождите...'"); - Элементы.НадписьДлительнаяОперация.ГоризонтальноеПоложениеВГруппе = ГоризонтальноеПоложениеЭлемента.Лево; - Элементы.ФоновоеЗаданиеСостояние.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево; - ИначеЕсли ПараметрыМетода.УдалятьПомеченные Тогда - Элементы.НадписьДлительнаяОперация.Заголовок = НСтр("ru = 'Удаляются объекты, помеченные на удаление...'"); - Элементы.НадписьДлительнаяОперация.ГоризонтальноеПоложениеВГруппе = ГоризонтальноеПоложениеЭлемента.Центр; - Элементы.ФоновоеЗаданиеСостояние.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; + Если УдалятьПриОткрытии И СведенияОРезультатахУдаления.Успешно Тогда + Закрыть(СведенияОРезультатахУдаления); + КонецЕсли; +КонецПроцедуры + +// Параметры: +// СведенияОРезультатахУдаления - см. УдалениеПомеченныхОбъектовСлужебныйКлиентСервер.НовыйСведенияОРезультатахУдаления +// +&НаКлиенте +Процедура ОбработатьРезультатВыполненияУдаления(СведенияОРезультатахУдаления) + + Если НеУдаленные.ПолучитьЭлементы().Количество() > 0 Тогда + Элементы.СтраницыОтображениеСостояния.ТекущаяСтраница = Элементы.СостояниеЧастичноеУдаление; + Элементы.НадписьСостояниеЧастичноеУдаление.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Удалено %1 из %2.'"), + СведенияОРезультатахУдаления.УдаленныеКоличество, + СведенияОРезультатахУдаления.НеУдаленныеКоличество + СведенияОРезультатахУдаления.УдаленныеКоличество); + УстановитьСостояниеНеуспешноеУдалениеСПанельюСостояния(); + ИначеЕсли СведенияОРезультатахУдаления.УдаленныеКоличество > 0 Тогда + УстановитьСостояниеВыбораПомеченныхНаУдалениеСПанельюСостояния(); + + Элементы.СтраницыОтображениеСостояния.ТекущаяСтраница = Элементы.СостояниеВыполнено; + Элементы.ДекорацияПредставлениеЗавершенияУспешно.Заголовок = НСтр("ru='Удаление успешно завершено.'"); Иначе - Элементы.НадписьДлительнаяОперация.Заголовок = НСтр("ru = 'Поиск объектов, помеченных на удаление...'"); - Элементы.НадписьДлительнаяОперация.ГоризонтальноеПоложениеВГруппе = ГоризонтальноеПоложениеЭлемента.Центр; - Элементы.ФоновоеЗаданиеСостояние.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; + УстановитьСостояниеВыбораПомеченныхНаУдаление(); КонецЕсли; - ВидимостьДоступность(ЭтотОбъект); +КонецПроцедуры + +// Параметры: +// РезультатУдаления - Структура: +// * АдресРезультата - Строка +// Возвращаемое значение: +// см. УдалениеПомеченныхОбъектовСлужебныйКлиентСервер.НовыйСведенияОРезультатахУдаления +// +&НаСервере +Функция ЗагрузитьРезультатУдаления(РезультатУдаления, ИдентификаторХранилищаРезультата, СведенияОРезультате) + РезультатВыполненияВФоне = ПолучитьИзВременногоХранилища(РезультатУдаления.АдресРезультата); + СведенияОРезультате = ?(УдалятьПриОткрытии, СведенияОРезультате, Неопределено); + + Результат = СформироватьРезультатУдаления(СведенияОРезультате, РезультатВыполненияВФоне, + ИдентификаторХранилищаРезультата); + + ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(ДеревоПомеченныхНаУдаление, + РезультатВыполненияВФоне.ДеревоПомеченныхНаУдаление); + ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(НеУдаленные, РезультатВыполненияВФоне.НеУдаленные); + + СвязиНеудаленных.Загрузить(РезультатВыполненияВФоне.СвязиНеудаленных); + + Возврат Результат; +КонецФункции + +// Дополняет/формирует сведения о результате удаления для клиентского АПИ. +&НаСервере +Функция СформироватьРезультатУдаления(СведенияОРезультате, РезультатВыполненияВФоне, ИдентификаторХранилищаРезультата) + Результат = ?(СведенияОРезультате = Неопределено, + УдалениеПомеченныхОбъектовСлужебныйКлиентСервер.НовыйСведенияОРезультатахУдаления(), + СведенияОРезультате); - // Определение параметров запуска. - ИмяМетода = "Обработки.УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъектыИнтерактивно"; + РезультатПрепятствующиеУдалению = ?(ЭтоАдресВременногоХранилища(Результат.АдресРезультата), + ПолучитьИзВременногоХранилища(Результат.АдресРезультата), + УдалениеПомеченныхОбъектовСлужебный.ПрепятствующиеУдалению()); - НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - НастройкиЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Удаление помеченных объектов (интерактивное)'"); + Результат.Удаленные = УдалениеПомеченныхОбъектовСлужебный.ОбъединениеМассивов( + Результат.Удаленные, + РезультатВыполненияВФоне.Удаленные); + Результат.УдаленныеКоличество = РезультатВыполненияВФоне.КоличествоУдаленных + Результат.УдаленныеКоличество; + Результат.НеУдаленныеКоличество = РезультатВыполненияВФоне.КоличествоНеУдаленных + Результат.НеУдаленныеКоличество; + Результат.Успешно = Результат.УдаленныеКоличество > 0 И Результат.НеУдаленныеКоличество = 0; - Задание = ДлительныеОперации.ВыполнитьВФоне(ИмяМетода, ПараметрыМетода, НастройкиЗапуска); - Задание.Вставить("ОшибкаПриУстановкеМонопольногоРежима", Ложь); - Задание.Вставить("ТекстОшибкиУстановкиМонопольногоРежима", Неопределено); + СвязиНеудаленныхРезультата = УдалениеПомеченныхОбъектовСлужебный.ОбъединениеТаблиц( + РезультатПрепятствующиеУдалению, + РезультатВыполненияВФоне.СвязиНеудаленных, + Истина); + Результат.АдресРезультата = ПоместитьВоВременноеХранилище( + СвязиНеудаленныхРезультата, ИдентификаторХранилищаРезультата); + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область ВыполнениеДействий + +&НаКлиенте +Процедура НачатьВыполнениеДополнительнойОбработки() + ПредставлениеОперации = НСтр("ru='Дополнительная обработка мешающих удалению объектов'"); + + УстановитьСостояниеНеуспешноеУдалениеСПанельюСостояния(); + + Элементы.СтраницыОтображениеСостояния.ТекущаяСтраница = Элементы.СостояниеВыполняется; + Элементы.ДекорацияПредставлениеДлительнойОперации.Заголовок = НСтр("ru='Выполняется дополнительная обработка причин неудаления...'"); + Элементы.КоманднаяПанельФормы.Доступность = Ложь; + Элементы.СтраницыИнформация.ТолькоПросмотр = Истина; + + + Обработчик = Новый ОписаниеОповещения("ПослеЗавершенияВыполненияДополнительнойОбработки", ЭтотОбъект); + ВыполняемаяОперация = НачатьВыполнениеДополнительнойОбработкиСервер(); + ПриНачалеФоновогоЗадания(Обработчик); +КонецПроцедуры + +&НаСервере +Функция НачатьВыполнениеДополнительнойОбработкиСервер() + ИмяМетода = "УдалениеПомеченныхОбъектовСлужебный.ВыполнитьОбработкуПричинНеудаления"; + + ПараметрыМетода = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор); + ПараметрыМетода.ЗапуститьВФоне = Истина; + ПараметрыМетода.НаименованиеФоновогоЗадания = НСтр("ru = 'Поиск помеченных на удаление'"); + + Задание = ДлительныеОперации.ВыполнитьФункцию(ПараметрыМетода, ИмяМетода, ТаблицаДействий.Выгрузить()); Возврат Задание; КонецФункции &НаКлиенте -Процедура ПослеУстановкиМонопольногоРежима(Результат, Режим) Экспорт - Если Результат = Ложь Тогда // Монопольный режим установлен. - ЗапуститьФоновоеЗаданиеКлиент(Режим); +Процедура ПослеЗавершенияВыполненияДополнительнойОбработки(Результат, ДополнительныеПараметры) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Результат.Статус = "Ошибка" Тогда + УстановитьСостояниеНеуспешноеУдалениеСПанельюСостояния(); + ЗаполнитьИнформациюОшибкамиФоновогоЗадания(ЭтотОбъект, Результат); + УстановитьМонопольныйРежимНаСервере(Ложь); + КонецЕсли; + + ПослеЗавершенияФоновогоЗадания(Результат); +КонецПроцедуры + +#КонецОбласти + +&НаКлиенте +Процедура ПослеПодтвержденияОтменыЗадания(Ответ, ПараметрыВыполнения) Экспорт + Если Ответ = КодВозвратаДиалога.Прервать Тогда + ПоказатьДиалогПередЗакрытием = Ложь; + ОтменитьОперациюСервер(ВыполняемаяОперация); + УстановитьМонопольныйРежимНаСервере(Ложь); + Закрыть(СведенияОРезультатахУдаления); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОбновленииПрогрессаФоновогоЗадания(Задание, ДополнительныеПараметры) Экспорт Если Задание.Прогресс <> Неопределено Тогда - ФоновоеЗаданиеПроцент = Задание.Прогресс.Процент; - ФоновоеЗаданиеСостояние = Задание.Прогресс.Текст; + Элементы.ПредставлениеПрогресса.Видимость = Истина; + Элементы.ПредставлениеПрогресса.Заголовок = Задание.Прогресс.Текст; КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ПослеЗавершенияФоновогоЗадания(Задание, ДополнительныеПараметры) Экспорт - ПоказатьДиалогПередЗакрытием = Ложь; - Если Монопольно Тогда - СнятьМонопольныйРежим(); - КонецЕсли; +Функция ЗначениеПометкиЭлементов(ЭлементыРодителя) - // задание было отменено. - Если Задание = Неопределено Тогда - Возврат; - КонецЕсли; + ЕстьПомеченные = Ложь; + ЕстьНепомеченные = Ложь; - Активизировать(); - - Если Задание.Статус = "Выполнено" Тогда + Для каждого ЭлементРодителя Из ЭлементыРодителя Цикл - Результат = ЗагрузитьРезультатФоновогоЗадания(Задание.АдресРезультата); - Если Результат = Неопределено Тогда - ВывестиОшибку(НСтр("ru = 'Не удалось прочитать результат удаления помеченных'"), ""); - Возврат; + Если ЭлементРодителя.Пометка = 0 Тогда + ЕстьНепомеченные = Истина; + ИначеЕсли ЭлементРодителя.Пометка = 1 Тогда + ЕстьПомеченные = Истина; КонецЕсли; - СтандартныеПодсистемыКлиент.ОповеститьФормыОбИзменении( - Результат.ОповещениеОбИзменениях, - Новый Структура("УдалениеПомеченных", Истина)); - - Если Не ПустаяСтрока(Результат.ОповещениеТекст) Тогда - ПоказатьОповещениеПользователя( - НСтр("ru = 'Удаление помеченных'"), - НавигационнаяСсылка, - Результат.ОповещениеТекст, - Результат.ОповещениеКартинка); + Если ЕстьНепомеченные И ЕстьПомеченные Тогда + Прервать; КонецЕсли; - Если Результат.РазвернутьДеревоПомеченныхНаУдаление Тогда - СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "ДеревоПомеченныхНаУдаление"); + КонецЦикла; + + Если ЕстьПомеченные Тогда + Если ЕстьНепомеченные Тогда + Возврат 2; + Иначе + Возврат 1; КонецЕсли; - Иначе - - ВывестиОшибку(Задание.КраткоеПредставлениеОшибки, Задание.ПодробноеПредставлениеОшибки); - + Возврат 0; КонецЕсли; -КонецПроцедуры +КонецФункции + +#КонецОбласти + +&НаКлиенте +Функция УникальныйИдентификаторСУчетомВладельца() + Возврат ?(ВладелецФормы = Неопределено, УникальныйИдентификатор, ВладелецФормы.УникальныйИдентификатор); +КонецФункции &НаСервере -Функция ЗагрузитьРезультатФоновогоЗадания(АдресРезультата) - Если Монопольно Тогда - СнятьМонопольныйРежим(); - КонецЕсли; - - // Получение результата. - РезультатВыполненияВФоне = ПолучитьИзВременногоХранилища(АдресРезультата); - Если РезультатВыполненияВФоне = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("ОповещениеОбИзменениях", Новый Соответствие); - Результат.Вставить("ОповещениеТекст", ""); - Результат.Вставить("ОповещениеКартинка", Неопределено); - Результат.Вставить("РазвернутьДеревоПомеченныхНаУдаление", Ложь); - - Если РезультатВыполненияВФоне.УдалятьПомеченные Тогда - - Результат.ОповещениеОбИзменениях = СтандартныеПодсистемыСервер.ПодготовитьОповещениеФормОбИзменении(РезультатВыполненияВФоне.Удаленные); - - УдаленныеКоличество = РезультатВыполненияВФоне.Удаленные.Количество(); - НеУдаленныеКоличество = РезультатВыполненияВФоне.НеУдаленные.Количество(); - - Если УдаленныеКоличество = 0 И НеУдаленныеКоличество = 0 Тогда - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаУдалениеНеТребуется; - ИначеЕсли НеУдаленныеКоличество = 0 Тогда - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаУспешноЗавершено; - Результат.ОповещениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удалено объектов: %1.'"), - Формат(УдаленныеКоличество, "ЧН=0; ЧГ=")); - Элементы.НадписьУспешноЗавершено.Заголовок = Результат.ОповещениеТекст; - Иначе - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПричиныНевозможностиУдаления; - Результат.ОповещениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удалено: %1, не удалено: %2.'"), - Формат(УдаленныеКоличество, "ЧН=0; ЧГ="), - Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=")); - Результат.ОповещениеКартинка = БиблиотекаКартинок.Предупреждение32; - - Если УдаленныеКоличество = 0 Тогда - Элементы.НадписьИтогиЧастичногоУдаления.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не получилось удалить объекты, помеченные на удаление (%1):'"), - Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=")); - Иначе - Элементы.НадписьИтогиЧастичногоУдаления.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Успешно удалено: %1 из %2, остальные объекты не удалены (%3):'"), - Формат(УдаленныеКоличество, "ЧН=0; ЧГ="), - Формат(УдаленныеКоличество+НеУдаленныеКоличество, "ЧН=0; ЧГ="), - Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=")); - КонецЕсли; - - Шаблон = Элементы.ГруппаНеУдаленные.Заголовок; - Шаблон = Лев(Шаблон, СтрНайти(Шаблон, "(")); - Элементы.ГруппаНеУдаленные.Заголовок = Шаблон + Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=") + ")"; - - ЗаполнитьКоллекцииОставшихсяОбъектов(РезультатВыполненияВФоне); - - ГруппыНеУдаленных = НеУдаленные.ПолучитьЭлементы(); - Если ГруппыНеУдаленных.Количество() > 0 Тогда - ЭлементыПервойГруппы = ГруппыНеУдаленных[0].ПолучитьЭлементы(); - Если ЭлементыПервойГруппы.Количество() > 0 Тогда - Элементы.НеУдаленные.ТекущаяСтрока = ЭлементыПервойГруппы[0].ПолучитьИдентификатор(); - ПоказатьСвязиНеУдаленныхНаСервере(ЭтотОбъект); - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - Иначе - - // Заполнение дерева помеченных на удаление. - Отмеченные = ПомеченныеНаУдалениеСоСтраницыРезультатов(); - ПометкиУстанавливаютсяВыборочно = (Отмеченные.Количество() > 0); - - ДеревоЗначений = РеквизитФормыВЗначение("ДеревоПомеченныхНаУдаление"); - ДеревоЗначений.Строки.Очистить(); - ДеревоЗначений.Колонки.Добавить("Количество"); - - УзлыПервогоУровня = Новый Соответствие; - - ПользовательскиеОбъекты = РезультатВыполненияВФоне.ПользовательскиеОбъекты; - Для Каждого УдаляемыйСсылка Из ПользовательскиеОбъекты Цикл - ТипУдаляемого = ТипЗнч(УдаляемыйСсылка); - УдаляемыйИнформация = Обработки.УдалениеПомеченныхОбъектов.СформироватьИнформациюОТипах(РезультатВыполненияВФоне, ТипУдаляемого); - - УзелТипа = УзлыПервогоУровня.Получить(ТипУдаляемого); - Если УзелТипа = Неопределено Тогда - УзелТипа = ДеревоЗначений.Строки.Добавить(); - УзелТипа.Значение = УдаляемыйИнформация.ПолноеИмя; - УзелТипа.Представление = УдаляемыйИнформация.ПредставлениеСписка; - УзелТипа.Пометка = Истина; - УзелТипа.Количество = 0; - УзелТипа.НомерКартинки = -1; - УзлыПервогоУровня.Вставить(ТипУдаляемого, УзелТипа); - БыстрыйПоиск.ПолныеИменаОбъектовМетаданных.Вставить(ТипУдаляемого, УдаляемыйИнформация.ПолноеИмя); - КонецЕсли; - УзелТипа.Количество = УзелТипа.Количество + 1; - - УзелУдаляемого = УзелТипа.Строки.Добавить(); - УзелУдаляемого.Значение = УдаляемыйСсылка; - УзелУдаляемого.Представление = Строка(УдаляемыйСсылка); - УзелУдаляемого.Пометка = Истина; - УзелУдаляемого.НомерКартинки = НомерКартинки(УдаляемыйСсылка, Истина, УдаляемыйИнформация.Вид, Истина); - - Если ПометкиУстанавливаютсяВыборочно И Отмеченные.Найти(УдаляемыйСсылка) = Неопределено Тогда - УзелУдаляемого.Пометка = Ложь; - УзелТипа.Пометка = Ложь; - КонецЕсли; - - КонецЦикла; - - Для Каждого УзелТипа Из ДеревоЗначений.Строки Цикл - УзелТипа.Представление = УзелТипа.Представление + " (" + УзелТипа.Количество + ")"; - КонецЦикла; - - ДеревоЗначений.Колонки.Удалить(ДеревоЗначений.Колонки.Количество); - ДеревоЗначений.Строки.Сортировать("Представление", Истина); - - ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоПомеченныхНаУдаление"); - - КоличествоТипов = УзлыПервогоУровня.Количество(); - - Если КоличествоТипов = 0 Тогда - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаУдалениеНеТребуется; - Иначе - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПомеченныеНаУдаление; - Если КоличествоТипов = 1 Тогда - Результат.РазвернутьДеревоПомеченныхНаУдаление = Истина; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - УдалитьИзВременногоХранилища(АдресРезультата); - ВидимостьДоступность(ЭтотОбъект); - - Возврат Результат; +Процедура ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(ДанныеФормы, ДеревоЗначений) + СтрокиДанныхФормы = ДанныеФормы.ПолучитьЭлементы(); + СтрокиДанныхФормы.Очистить(); + ОбщегоНазначения.ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(СтрокиДанныхФормы, ДеревоЗначений); +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ЭтоОшибкаУстановкиМонопольногоРежима(ПодробныйТекстОшибкиФоновогоЗадания) + ТекстОшибкиМонопольно = НСтр("ru='Ошибка разделенного доступа к базе'"); + Возврат (СтрНайти(ПодробныйТекстОшибкиФоновогоЗадания,ТекстОшибкиМонопольно) <> 0) КонецФункции &НаКлиенте -Процедура ВывестиОшибку(КраткоеПредставлениеОшибки, ПодробноеПредставлениеОшибки); - Кратко = НСтр("ru = 'Удаление не выполнено по причине:'") + Символы.ПС + КраткоеПредставлениеОшибки; - ПодробныйТекстОшибки = Кратко + Символы.ПС + Символы.ПС + ПодробноеПредставлениеОшибки; - Элементы.НадписьТекстОшибки.Заголовок = Кратко; - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВозниклаОшибка; - ВидимостьДоступность(ЭтотОбъект); +Процедура ДобавитьЗадание(ИмяОперации) + ОчередьЗаданийФормы.Добавить(ИмяОперации); КонецПроцедуры &НаКлиенте -Процедура ПослеПодтвержденияОтменыЗадания(Ответ, ПараметрыВыполнения) Экспорт - Если Ответ = КодВозвратаДиалога.Прервать Тогда - ПоказатьДиалогПередЗакрытием = Ложь; - Закрыть(); +Процедура УдалитьТекущееЗадание() + Если ОчередьЗаданийФормы.Количество() <> 0 Тогда + ОчередьЗаданийФормы.Удалить(0); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура УскоритьУдалениеПомеченныхПриИзменении(Элемент) - - ВидимостьДоступность(ЭтотОбъект); - +Функция ТекущееЗадание() + Возврат ?(ОчередьЗаданийФормы.Количество() = 0, "", ОчередьЗаданийФормы[0]); +КонецФункции + +&НаКлиенте +Процедура ЗапуститьЗаданиеСОжиданием() + ЗапуститьЗадание(); + ТолькоПросмотр = Ложь; КонецПроцедуры +&НаКлиенте +Процедура ЗапуститьЗадание(Задание = "") + Результат = Новый Структура("Успешно", Истина); + + Если НЕ ПустаяСтрока(Задание) И Задание <> ТекущееЗадание() Тогда + ДобавитьЗадание(Задание); + КонецЕсли; + + Если ВыполняемаяОперация <> Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущееЗаданиеФормы = ТекущееЗадание(); + Если НЕ ПустаяСтрока(ТекущееЗаданиеФормы) Тогда + + Если РежимУдаления = "Монопольный" + И ТекущееЗаданиеФормы <> ЗаданияФормы().ПоискПомеченных Тогда + + Результат = УстановитьМонопольныйРежимНаСервере(Истина); + Если НЕ Результат.Успешно Тогда + Результат.Вставить("Статус", "Ошибка"); + ЗаполнитьИнформациюОшибкамиФоновогоЗадания(ЭтотОбъект, Результат); + Элементы.СтраницыОтображениеСостояния.Видимость = Истина; + Элементы.СтраницыОтображениеСостояния.ТекущаяСтраница = Элементы.СостояниеВыполненоСОшибками; + Возврат; + КонецЕсли; + КонецЕсли; + + Если ТекущееЗаданиеФормы = ЗаданияФормы().УдалениеПомеченных Тогда + НачатьУдалениеПомеченных(); + ИначеЕсли ТекущееЗаданиеФормы = ЗаданияФормы().ПоискПомеченных Тогда + НачатьПоискПомеченных(); + ИначеЕсли ТекущееЗаданиеФормы = ЗаданияФормы().ВыполнениеДополнительнойОбработки Тогда + НачатьВыполнениеДополнительнойОбработки(); + КонецЕсли; + + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ЗаданияФормы() + Задания = Новый Структура; + Задания.Вставить("УдалениеПомеченных", "УдалениеПомеченных"); + Задания.Вставить("ПоискПомеченных", "ПоискПомеченных"); + Задания.Вставить("ВыполнениеДополнительнойОбработки", "ВыполнениеДополнительнойОбработки"); + Возврат Задания; +КонецФункции + +&НаКлиенте +Процедура ОчиститьОчередьЗаданийФормы() + ОчередьЗаданийФормы.Очистить(); +КонецПроцедуры + +&НаКлиенте +Функция КоличествоЗаданийВОчереди() + Возврат ОчередьЗаданийФормы.Количество(); +КонецФункции + + +#КонецОбласти + +#Область Инициализация + +СведенияОРезультатахУдаления = УдалениеПомеченныхОбъектовСлужебныйКлиентСервер.НовыйСведенияОРезультатахУдаления(); +ПредставлениеОперации = ""; +ОчередьЗаданийФормы = Новый Массив; + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html index 307c5c0b9..b3b1569a8 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html @@ -1,47 +1,51 @@

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

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

    -

    Команда Удаление помеченных объектов находится в разделе Администрирование - Обслуживание.

    +

    Команда Удаление помеченных объектов находится в разделе Администрирование - Обслуживание. Также можно найти эту команду в разделе Администрирование - Общие настройки - Удаление помеченных объектов. Также помощник Удаление помеченных объектов можно открыть из любого списка программы во время работы с ним по команде Еще - Сервис - Перейти к помеченным на удаление. В этом случае список будет отфильтрован и показывает только объекты из открытого списка.

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

    -

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

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

      Выбор объектов для удаления

      +

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

      +

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

      +

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

      +

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

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

      Удаление всех помеченных объектов 

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

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

      +

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

      +

      Удаление помеченных объектов 

      +

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

      +

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

      Действия при невозможности удаления объектов

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

      Выборочное удаление объектов

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

      Действия при невозможности удаления объектов

      -

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

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

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

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

      Настройка расписания автоматического удаления

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

    Настройка удаления объектов

    +

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

    +

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

    +

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

    +

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

    + + +

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

    +

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

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

    Настройка расписания автоматического удаления

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

    Удаление помеченных объектов в приложении в Интернете (в модели сервиса)

    diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index ddd1e7649..f36ca1e97 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -10,56 +10,15 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Интерактивное удаление помеченных. - -// Удаляет помеченные объекты, используется при интерактивном удалении в фоновом задании. -// -// Параметры: -// ПараметрыВыполнения - Структура - Параметры, необходимые для удаления. -// АдресХранилища - Строка - Адрес временного хранилища. -// -Процедура УдалитьПомеченныеОбъектыИнтерактивно(ПараметрыВыполнения, АдресХранилища) Экспорт - УдалитьПомеченныеОбъекты(ПараметрыВыполнения); - ПараметрыВыполнения.Удалить("ВсеПомеченныеНаУдаление"); - ПоместитьВоВременноеХранилище(ПараметрыВыполнения, АдресХранилища); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Удаление помеченных из регламентного задания. - -// Удаляет помеченные объекты из регламентного задания. -Процедура УдалитьПомеченныеОбъектыИзРегламентногоЗадания() Экспорт - - ПараметрыВыполнения = Новый Структура; - УдалитьПомеченныеОбъекты(ПараметрыВыполнения); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Инициализация и запуск. - -// Основная механика удаления помеченных объектов. -Процедура УдалитьПомеченныеОбъекты(ПараметрыВыполнения) +Функция УдалитьПомеченныеОбъекты(ПараметрыВыполнения, ИдентификаторЗадания = Неопределено) Экспорт Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции.'"); КонецЕсли; - ИнициализироватьПараметры(ПараметрыВыполнения); + Замер = ТекущаяУниверсальнаяДатаВМиллисекундах(); - Если ПараметрыВыполнения.ИскатьПомеченные Тогда - ПолучитьПомеченныеНаУдаление(ПараметрыВыполнения); - КонецЕсли; - - Если Не ПараметрыВыполнения.УдалятьПомеченные Тогда - Возврат; - КонецЕсли; - - Если ПараметрыВыполнения.Интерактивное - И ПараметрыВыполнения.ВсеПомеченныеНаУдаление.Количество() = 0 Тогда - Возврат; // Не удалять технологические объекты при интерактивном запуске если нет пользовательских объектов. - КонецЕсли; + УдалениеПомеченныхОбъектовПереопределяемый.ПередПоискомПомеченныхНаУдаление(ПараметрыВыполнения); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); @@ -67,11 +26,18 @@ КонецЕсли; Попытка + УдаляемыеОбъекты = ПараметрыВыполнения.ПользовательскиеОбъекты; + ПараметрыУдаления = ПараметрыУдаления(УдаляемыеОбъекты, ПараметрыВыполнения); - Если ПараметрыВыполнения.Монопольно Тогда - УдалитьПомеченныеОбъектыМонопольно(ПараметрыВыполнения); - Иначе // Не монопольно. - УдалитьПомеченныеОбъектыКонкурентно(ПараметрыВыполнения); + // Для отмены задания с клиента + Если ЗначениеЗаполнено(ИдентификаторЗадания)Тогда + ПараметрыУдаления.ИдентификаторЗадания = ИдентификаторЗадания; + КонецЕсли; + + Если ПараметрыУдаления.Монопольно Тогда + УдалитьПомеченныеОбъектыМонопольно(УдаляемыеОбъекты, ПараметрыУдаления); + Иначе + УдалитьПомеченныеОбъектыКонкурентно(УдаляемыеОбъекты, ПараметрыУдаления); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда @@ -88,530 +54,1319 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); - МодульВзаимодействия.ПослеУдаленияПомеченных(ПараметрыВыполнения); + МодульВзаимодействия.ПослеУдаленияПомеченных(ПараметрыУдаления); КонецЕсли; -КонецПроцедуры + Замер = ТекущаяУниверсальнаяДатаВМиллисекундах() - Замер; + ОтправитьСтатистику(ПараметрыВыполнения.Режим, Замер, ПараметрыУдаления.Всего); + + Возврат ПараметрыУдаления; +КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Конкурентное удаление помеченных. +#Область КонкурентноеУдаление -// Основная механика. -Процедура УдалитьПомеченныеОбъектыКонкурентно(ПараметрыВыполнения) - УстановитьПривилегированныйРежим(Истина); - - // Удаление технологических объектов (которые создавались и помечались на удаление без участия пользователя). - Если ПараметрыВыполнения.ТехнологическиеОбъекты <> Неопределено Тогда - ОтметитьНачалоОбходаКоллекции(ПараметрыВыполнения, "ТехнологическиеОбъекты"); - Для Каждого Ссылка Из ПараметрыВыполнения.ТехнологическиеОбъекты Цикл - УдалитьСсылку(ПараметрыВыполнения, Ссылка); // Для технологических объектов результат не выводится. - ОтметитьПрогрессОбходаКоллекции(ПараметрыВыполнения, "ТехнологическиеОбъекты"); - КонецЦикла; - КонецЕсли; - - // Удаление помеченных на удаление. - ОтметитьНачалоОбходаКоллекции(ПараметрыВыполнения, "ПользовательскиеОбъекты"); - Для Каждого Ссылка Из ПараметрыВыполнения.ПользовательскиеОбъекты Цикл - Результат = УдалитьСсылку(ПараметрыВыполнения, Ссылка); - ЗарегистрироватьРезультатУдаления(ПараметрыВыполнения, Ссылка, Результат, "ПользовательскиеОбъекты"); - ОтметитьПрогрессОбходаКоллекции(ПараметрыВыполнения, "ПользовательскиеОбъекты"); - КонецЦикла; - - // Удаление цепочек (линейно связанных объектов). - ОтметитьНачалоОбходаКоллекции(ПараметрыВыполнения, "ПовторноУдаляемые"); - Пока ПараметрыВыполнения.ПовторноУдаляемые.Количество() > 0 Цикл - Ссылка = ПараметрыВыполнения.ПовторноУдаляемые[0]; - ПараметрыВыполнения.ПовторноУдаляемые.Удалить(0); - - Результат = УдалитьСсылку(ПараметрыВыполнения, Ссылка); - ЗарегистрироватьРезультатУдаления(ПараметрыВыполнения, Ссылка, Результат, "ПовторноУдаляемые"); - ОтметитьПрогрессОбходаКоллекции(ПараметрыВыполнения, "ПовторноУдаляемые"); - КонецЦикла; - - // Удаление циклов (кольцевых связей объектов). - УдалитьОставшиесяОбъектыВОднойТранзакции(ПараметрыВыполнения); - - // Очистка от "спама". - ОчиститьСвязиОтИсключенийПоискаСсылок(ПараметрыВыполнения); - -КонецПроцедуры - -// Удаление одиночного объекта с контролем результата и откатом транзакции в случае неудачи. -// // Параметры: -// ПараметрыВыполнения - Структура - -// Ссылка - ЛюбаяСсылка - +// УдаляемыеОбъекты - Массив из ЛюбаяСсылка +// ПараметрыУдаления - см. ПараметрыУдаления // -// Возвращаемое значение: -// Структура - где: -// * Сообщения - ФиксированныйМассив из Строка - -// * Количество - Число - -// * ПрепятствующиеУдалению - см. НайтиПрепятствующиеУдалению -// * ИнформацияОбОшибке - ИнформацияОбОшибке - -// * Успех - Булево - -// -Функция УдалитьСсылку(ПараметрыВыполнения, Ссылка) - Результат = Новый Структура; // Результат обрабатывается в ЗарегистрироватьРезультатУдаления(). - Результат.Вставить("Успех", Ложь); - Результат.Вставить("ИнформацияОбОшибке", Неопределено); - Результат.Вставить("ПрепятствующиеУдалению", Неопределено); - Результат.Вставить("Количество", 0); - Результат.Вставить("Сообщения", Неопределено); +Процедура УдалитьПомеченныеОбъектыКонкурентно(УдаляемыеОбъекты, ПараметрыУдаления) - Информация = СформироватьИнформациюОТипах(ПараметрыВыполнения, ТипЗнч(Ссылка)); + СведенияОМетаданных = СведенияОМетаданных(ПараметрыУдаления, УдаляемыеОбъекты); + УдаляемыеОбъекты = УдаляемыеОбъекты(УдаляемыеОбъекты, СведенияОМетаданных); + РезультатОбработки = ОбработатьУдаляемыеОбъекты(ПараметрыУдаления, УдаляемыеОбъекты, СведенияОМетаданных); + + ОтразитьМестаИспользования(ПараметрыУдаления, РезультатОбработки.МестаИспользования); + ОтразитьНеУдаленные(ПараметрыУдаления, РезультатОбработки.НеудаленныеОбъекты); + ПараметрыУдаления.Удаленные = Новый Массив(Новый ФиксированныйМассив(РезультатОбработки.УдаленныеОбъекты)); +КонецПроцедуры + +#Область ПреобразованиеКФорматуРезультата + +// Параметры: +// ПараметрыУдаления - см. ПараметрыУдаления +// НеУдаленные - см. РезультатОбработки +// +Процедура ОтразитьНеУдаленные(ПараметрыУдаления, НеУдаленные) + Если Не (ПараметрыУдаления.Свойство("ИнформацияОТипах")) Тогда + ПараметрыУдаления.Вставить("ИнформацияОТипах", Новый Соответствие); + КонецЕсли; + + Для Каждого Элемент Из НеУдаленные Цикл + Если Элемент = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПараметрыУдаления.Неудаленные.Добавить(Элемент.УдаляемыйСсылка); + Если Элемент.РезультатУдаления <> КодыРезультатаУдаления().НеПомеченНаУдаление Тогда + РегистрыСведений.НеудаленныеОбъекты.Добавить(Элемент.УдаляемыйСсылка); + КонецЕсли; + + Если Элемент.РезультатУдаления = КодыРезультатаУдаления().ОшибкаПриУдалении Тогда + Причина = ПараметрыУдаления.ПрепятствующиеУдалению.Добавить(); + Причина.УдаляемыйСсылка = Элемент.УдаляемыйСсылка; + Причина.ОписаниеОшибки = КраткоеПредставлениеОшибки(Элемент.ИнформацияОбОшибке) + Элемент.Сообщения; + Причина.ПодробноеОписаниеОшибки = ПодробноеПредставлениеОшибки(Элемент.ИнформацияОбОшибке); + ИначеЕсли Элемент.РезультатУдаления = КодыРезультатаУдаления().НеПомеченНаУдаление Тогда + Причина = ПараметрыУдаления.ПрепятствующиеУдалению.Добавить(); + Причина.УдаляемыйСсылка = Элемент.УдаляемыйСсылка; + Причина.ОписаниеОшибки = НСтр("ru='Удаляемый объект не помечен на удаление'"); + КонецЕсли; + + СформироватьИнформациюОТипах(ПараметрыУдаления, ТипЗнч(Элемент.УдаляемыйСсылка)) + КонецЦикла; + +КонецПроцедуры + +Процедура ОтразитьМестаИспользования(ПараметрыУдаления, МестаИспользования) + ПрепятствующиеУдалению = ПараметрыУдаления.ПрепятствующиеУдалению; + + Для Каждого СведенияОМестеИспользования Из МестаИспользования Цикл + Если ОбъектУдален(СведенияОМестеИспользования.МестоИспользования) Тогда + Продолжить; + КонецЕсли; + + Причина = ПрепятствующиеУдалению.Добавить(); + Причина.УдаляемыйСсылка = СведенияОМестеИспользования.УдаляемыйСсылка; + Причина.МестоИспользования = СведенияОМестеИспользования.МестоИспользования; + Причина.Метаданные = СведенияОМестеИспользования.Метаданные; + КонецЦикла; +КонецПроцедуры +#КонецОбласти + +#Область УдалениеОбъектов + +// Параметры: +// ПараметрыУдаления - см. ПараметрыУдаления +// УдаляемыеОбъекты - см. УдаляемыеОбъекты +// СведенияОМетаданных - см. СведенияОМетаданных +// +// Возвращаемое значение: +// см. РезультатОбработки +// +Функция ОбработатьУдаляемыеОбъекты(ПараметрыУдаления, УдаляемыеОбъекты, СведенияОМетаданных) + + РезультатыУдаления = РезультатОбработки(); + Пакет = ПакетУдаляемыхОбъектов(); + ОбъектыСЗапретомУдаления = ПакетУдаляемыхОбъектов(); + + Для Каждого ЭлементОчереди Из УдаляемыеОбъекты Цикл + Если Пакет.Найти(ЭлементОчереди.УдаляемыйСсылка,"УдаляемыйСсылка") <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ЭлементОчередиВПакете = ЭлементОчередиВПакет(ЭлементОчереди, СведенияОМетаданных, Пакет); + + Если ЗапрещенаОбработкаЭлемента(ЭлементОчередиВПакете) Тогда + ОбъектыСЗапретомУдаления = ОбъединениеТаблиц( + ОбъектыСЗапретомУдаления, + ЭлементОчередиВПакете); + Иначе + Пакет = ОбъединениеТаблиц(Пакет, ЭлементОчередиВПакете, Истина); + КонецЕсли; + + Если Пакет.Количество() >= ПараметрыУдаления.РазмерПакета + ИЛИ УдаляемыеОбъекты.Индекс(ЭлементОчереди) = УдаляемыеОбъекты.Количество()-1 Тогда + + РезультатОбработкиПакета = ОбработатьПакет(ПараметрыУдаления, Пакет); + РезультатыУдаления = ОбъединитьРезультатУдаления( + РезультатыУдаления, + РезультатОбработкиПакета); + + Пакет.Очистить(); + КонецЕсли; + КонецЦикла; + + РезультатыУдаления = ОбъединитьРезультатУдаления( + РезультатыУдаления, + РезультатУдаленияИзНеобработанногоПакета(ПараметрыУдаления, ОбъектыСЗапретомУдаления)); + + // Попробуем удалить объекты, образующие циклические ссылки в одной транзакции + Если РезультатыУдаления.НеудаленныеОбъекты.Количество() > 0 Тогда + Пакет = ЦиклическиеСсылки(РезультатыУдаления.НеудаленныеОбъекты, РезультатыУдаления.МестаИспользования); + РезультатОбработкиЦиклическихСсылок = ОбработатьПакетВОднойТранзакции(ПараметрыУдаления, Пакет); + Если РезультатОбработкиЦиклическихСсылок.УдаленныеОбъекты.Количество() > 0 Тогда + РезультатыУдаления = РезультатПослеУдаленияЦиклическихСсылок(РезультатыУдаления, РезультатОбработкиЦиклическихСсылок); + КонецЕсли; + КонецЕсли; + + Возврат РезультатыУдаления; +КонецФункции + +Функция РезультатУдаленияИзНеобработанногоПакета(ПараметрыУдаления, ОбъектыСЗапретомУдаления) + РезультатыУдаления = РезультатОбработки(); + + РезультатыУдаления.НеудаленныеОбъекты = ОбъединениеТаблиц( + РезультатыУдаления.НеудаленныеОбъекты, + ОбъектыСЗапретомУдаления); + + РезультатыУдаления.МестаИспользования = ОбъединениеТаблиц( + РезультатыУдаления.МестаИспользования, + ОставшиесяМестаИспользованияУдаляемогоОбъекта(ПараметрыУдаления, + МестаИспользованияЭлементовПакета(ПараметрыУдаления, ОбъектыСЗапретомУдаления))); + + Возврат РезультатыУдаления; +КонецФункции + +Функция ЗапрещенаОбработкаЭлемента(ЭлементОчередиВПакете) + Возврат (ЭлементОчередиВПакете.Количество() > 0 И ЭлементОчередиВПакете[ЭлементОчередиВПакете.Количество() + - 1].РезультатУдаления <> КодыРезультатаУдаления().Успешно); +КонецФункции + +Функция ЭлементОчередиВПакет(ЭлементОчереди, СведенияОМетаданных, Исключения) + Пакет = ПакетУдаляемыхОбъектов(); + РезультатУдаления = Неопределено; + + // Пропускаем если объект удален или был добавлен в пакет как подчиненный объект + Если НЕ ОбъектУдален(ЭлементОчереди.УдаляемыйСсылка) + И Исключения.Найти(ЭлементОчереди.УдаляемыйСсылка, "УдаляемыйСсылка") = Неопределено Тогда + + ИнформацияОМетаданных = СведенияОМетаданных.Найти(ЭлементОчереди.Тип, "Тип"); + ПометкаУдаления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементОчереди.УдаляемыйСсылка, "ПометкаУдаления"); + ДочерниеПодчиненныеЭлементы = ?(ПометкаУдаления, + ДочерниеПодчиненныеЭлементы(ЭлементОчереди.УдаляемыйСсылка, ИнформацияОМетаданных), + ТаблицаДочернихПодчиненныхЭлементов()); + + Если НЕ ПометкаУдаления Тогда + РезультатУдаления = КодыРезультатаУдаления().НеПомеченНаУдаление; + ИначеЕсли РазрешеноУдалениеЭлемента(ДочерниеПодчиненныеЭлементы) Тогда + РезультатУдаления = КодыРезультатаУдаления().Успешно; + ДополнитьПакетДочернимиИПодчиненнымиЭлементами(Пакет, ДочерниеПодчиненныеЭлементы, Исключения); + Иначе + РезультатУдаления = КодыРезультатаУдаления().ЕстьДочерниеПодчиненныеЭлементыНепомеченныеНаУдаление; + КонецЕсли; + + ЭлементПакета = Пакет.Добавить(); + ЭлементПакета.УдаляемыйСсылка = ЭлементОчереди.УдаляемыйСсылка; + ЭлементПакета.ЕстьДочерниеОбъекты = ИнформацияОМетаданных.Иерархический; + ЭлементПакета.ЕстьПодчиненныеОбъекты = ИнформацияОМетаданных.ЕстьПодчиненныеОбъекты; + ЭлементПакета.ДочерниеПодчиненныеОбъекты = ДочерниеПодчиненныеЭлементы; + ЭлементПакета.РезультатУдаления = РезультатУдаления; + ЭлементПакета.ЭтоОсновнойОбъект = Истина; + КонецЕсли; + + Возврат Пакет; +КонецФункции + +Функция ОбработатьПакет(ПараметрыУдаления, Пакет) + РезультатОбработкиПакета = РезультатОбработки(); + + Если ЗначениеЗаполнено(ПараметрыУдаления.ИдентификаторЗадания) Тогда + Идентификатор = ПараметрыУдаления.ИдентификаторЗадания; + Иначе + Идентификатор = Новый УникальныйИдентификатор(); + КонецЕсли; + + ПередОбработкойПакета(Пакет, Идентификатор); + + МестаИспользования = МестаИспользованияЭлементовПакета(ПараметрыУдаления, Пакет); + + Для Каждого Элемент Из Пакет Цикл + РезультатУдаления = УдалитьЭлементПакета(ПараметрыУдаления, + Элемент, + МестаИспользования.Скопировать(Новый Структура("УдаляемыйСсылка", Элемент.УдаляемыйСсылка))); + ОтразитьРезультатУдаленияЭлементаПакета(ПараметрыУдаления, РезультатОбработкиПакета, Элемент, РезультатУдаления); + КонецЦикла; + + ПослеОбработкиПакета(ПараметрыУдаления, Идентификатор); + ОчиститьСсылкиНаУдаляемыеОбъекты(ПараметрыУдаления, РезультатОбработкиПакета); + + Возврат РезультатОбработкиПакета; +КонецФункции + +#Область ОчисткаСсылокНаУдаляемыеОбъекты + +// Параметры: +// ПараметрыУдаления - см. ПараметрыУдаления +// РезультатОбработкиПакета - см. РезультатОбработки +// +Процедура ОчиститьСсылкиНаУдаляемыеОбъекты(ПараметрыУдаления, РезультатОбработкиПакета) + Если Не ПараметрыУдаления.ОчищатьСсылкиВМестахИспользования + Или РезультатОбработкиПакета.МестаОчисткиСсылок.Количество() = 0 Тогда + + Возврат; + КонецЕсли; + + МестаИспользования = РезультатОбработкиПакета.МестаОчисткиСсылок; + МестаИспользования.Сортировать("МестоИспользования", Новый СравнениеЗначений()); + + УдаляемыеОбъектыВМестеИспользования = Новый Массив; + ПозицияТекущегоМестаИспользования = 0; + Для Каждого СведениеОМестеИспользования Из МестаИспользования Цикл + Если МестаИспользования[ПозицияТекущегоМестаИспользования].МестоИспользования + <> СведениеОМестеИспользования.МестоИспользования Тогда + + ОчиститьСсылкиВМестеИспользования(МестаИспользования[ПозицияТекущегоМестаИспользования].МестоИспользования, + УдаляемыеОбъектыВМестеИспользования); + ПозицияТекущегоМестаИспользования = МестаИспользования.Индекс(СведениеОМестеИспользования); + УдаляемыеОбъектыВМестеИспользования.Очистить(); + КонецЕсли; + + УдаляемыеОбъектыВМестеИспользования.Добавить(СведениеОМестеИспользования.УдаляемыйСсылка); + + Если МестаИспользования.Индекс(СведениеОМестеИспользования) = МестаИспользования.Количество() - 1 Тогда + ОчиститьСсылкиВМестеИспользования(СведениеОМестеИспользования.МестоИспользования, + УдаляемыеОбъектыВМестеИспользования); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +Процедура ОчиститьСсылкиВМестеИспользования(МестоИспользование, УдаляемыеОбъектыВМестеИспользования) + Если ОбъектУдален(МестоИспользование) Тогда + Возврат; + КонецЕсли; + + РедактируемыйОбъект = МестоИспользование.ПолучитьОбъект(); + МетаданныеОбъекта = РедактируемыйОбъект.Метаданные(); + + ОчиститьСсылкиВКоллекцииРеквизитов(РедактируемыйОбъект, МетаданныеОбъекта.СтандартныеРеквизиты, УдаляемыеОбъектыВМестеИспользования); + ОчиститьСсылкиВКоллекцииРеквизитов(РедактируемыйОбъект, МетаданныеОбъекта.Реквизиты, УдаляемыеОбъектыВМестеИспользования); + + Для Каждого ТабличнаяЧасть Из МетаданныеОбъекта.ТабличныеЧасти Цикл + ОчиститьСсылкиВТабличнойЧасти(РедактируемыйОбъект[ТабличнаяЧасть.Имя], ТабличнаяЧасть.Реквизиты, УдаляемыеОбъектыВМестеИспользования); + КонецЦикла; + + ЕстьСтандартныеТабличныеЧасти = ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(МетаданныеОбъекта, + "СтандартныеТабличныеЧасти"); + + СтандартныеТабличныеЧасти = ?(ЕстьСтандартныеТабличныеЧасти, + МетаданныеОбъекта.СтандартныеТабличныеЧасти, + Новый Массив); + + Для Каждого ТабличнаяЧасть Из СтандартныеТабличныеЧасти Цикл + ОчиститьСсылкиВТабличнойЧасти(РедактируемыйОбъект[ТабличнаяЧасть.Имя], ТабличнаяЧасть.СтандартныеРеквизиты, УдаляемыеОбъектыВМестеИспользования); + КонецЦикла; + + ЗаписатьРедактируемыйОбъект(МестоИспользование, РедактируемыйОбъект); +КонецПроцедуры + +Процедура ЗаписатьРедактируемыйОбъект(МестоИспользование, РедактируемыйОбъект) + РедактируемыйОбъект.ДополнительныеСвойства.Вставить("НеВыполнятьКонтрольУдаляемых"); + РедактируемыйОбъект.ОбменДанными.Загрузка = Истина; НачатьТранзакцию(); Попытка - ПопробоватьУдалитьСсылку(Ссылка, ПараметрыВыполнения, Информация, Результат); - Если Результат.Успех Тогда - ЗафиксироватьТранзакцию(); - Иначе - ОтменитьТранзакцию(); - КонецЕсли; + Блокировка = Новый БлокировкаДанных(); + Элемент = Блокировка.Добавить(МестоИспользование.Метаданные().ПолноеИмя()); + Элемент.УстановитьЗначение("Ссылка", МестоИспользование); + Блокировка.Заблокировать(); + + РедактируемыйОбъект.Записать(); + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - Результат.Успех = Ложь; - Результат.ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЗаписатьПредупреждение(МестоИспользование, ИнформацияОбОшибке()); КонецПопытки; - Результат.Сообщения = ДлительныеОперации.СообщенияПользователю(Истина); +КонецПроцедуры + +Процедура ОчиститьСсылкиВТабличнойЧасти(РедактируемыйОбъект, КоллекцияРеквизитов, УдаляемыеОбъектыВМестеИспользования) + Для Каждого СтрокаТЧ Из РедактируемыйОбъект Цикл + ОчиститьСсылкиВКоллекцииРеквизитов(СтрокаТЧ, КоллекцияРеквизитов, УдаляемыеОбъектыВМестеИспользования); + КонецЦикла; +КонецПроцедуры + +Процедура ОчиститьСсылкиВКоллекцииРеквизитов(РедактируемыйОбъект, КоллекцияРеквизитов, УдаляемыеОбъектыВМестеИспользования) + Для Каждого Реквизит Из КоллекцияРеквизитов Цикл + Если УдаляемыеОбъектыВМестеИспользования.Найти(РедактируемыйОбъект[Реквизит.Имя]) <> Неопределено Тогда + РедактируемыйОбъект[Реквизит.Имя] = Реквизит.Тип.ПривестиЗначение(Неопределено); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// Параметры: +// РезультатыУдаления - см. РезультатОбработки +// РезультатОбработкиЦиклическихСсылок - см. РезультатОбработки +// +// Возвращаемое значение: +// см. РезультатОбработки +// +Функция РезультатПослеУдаленияЦиклическихСсылок(РезультатыУдаления, РезультатОбработкиЦиклическихСсылок) + Результат = РезультатОбработки(); + Результат.УдаленныеОбъекты = Новый Массив(Новый ФиксированныйМассив(РезультатыУдаления.УдаленныеОбъекты)); + + Для Каждого Элемент Из РезультатыУдаления.НеудаленныеОбъекты Цикл + + Если РезультатОбработкиЦиклическихСсылок.УдаленныеОбъекты.Найти(Элемент.УдаляемыйСсылка) <> Неопределено Тогда + Результат.УдаленныеОбъекты.Добавить(Элемент.УдаляемыйСсылка); + Иначе + ЗаполнитьЗначенияСвойств(Результат.НеудаленныеОбъекты.Добавить(), Элемент); + Для Каждого МестоИспользования Из РезультатыУдаления.МестаИспользования.НайтиСтроки(Новый Структура("УдаляемыйСсылка", Элемент.УдаляемыйСсылка)) Цикл + ЗаполнитьЗначенияСвойств(Результат.МестаИспользования.Добавить(), МестоИспользования); + КонецЦикла; + КонецЕсли; + КонецЦикла; - Если Не Результат.Успех Тогда - ЗаписатьПредупреждение(Ссылка, Результат.ИнформацияОбОшибке); + Возврат Результат; +КонецФункции +#КонецОбласти + +#Область ФормированиеДочернихПодчиненныхЭлементов + +// Параметры: +// ЭлементОчереди - см. УдаляемыеОбъекты +// ИнформацияОМетаданных - см. СведенияОМетаданных +// +// Возвращаемое значение: +// см. ТаблицаДочернихПодчиненныхЭлементов +// +Функция ДочерниеПодчиненныеЭлементы(УдаляемыйСсылка, ИнформацияОМетаданных) + УстановитьПривилегированныйРежим(Истина); + ДочерниеПодчиненныеЭлементы = ТаблицаДочернихПодчиненныхЭлементов(); + + ПакетыЗапроса = Новый Массив; + + Если ИнформацияОМетаданных.Иерархический Тогда + ПакетыЗапроса.Добавить(ТекстЗапросаДочернихЭлементов(ИнформацияОМетаданных)); КонецЕсли; + Если ИнформацияОМетаданных.ОписаниеПодчиненныхОбъектов.Количество() > 0 Тогда + ПакетыЗапроса.Добавить(ТекстЗапросаПодчиненныхЭлементов(ИнформацияОМетаданных)); + КонецЕсли; + + Если ПакетыЗапроса.Количество() > 0 Тогда + ТекстЗапроса = СтрСоединить(ПакетыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов()); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Родитель", УдаляемыйСсылка); + Запрос.УстановитьПараметр("Ссылка", УдаляемыйСсылка); + + РезультатПакета = Запрос.ВыполнитьПакет(); + + Если ИнформацияОМетаданных.ОписаниеПодчиненныхОбъектов.Количество() > 0 Тогда + ВыборкаПодчиненныхЭлементов = РезультатПакета[РезультатПакета.Количество()-1].Выбрать(); + ДочерниеПодчиненныеЭлементы = ОбъединениеТаблиц(ДочерниеПодчиненныеЭлементы, ПодчиненныеЭлементы(ВыборкаПодчиненныхЭлементов)); + КонецЕсли; + + Если ИнформацияОМетаданных.Иерархический Тогда + ВыборкаДочернихЭлементов = РезультатПакета[0].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); + ДочерниеПодчиненныеЭлементы = ОбъединениеТаблиц(ДочерниеПодчиненныеЭлементы, ДочерниеЭлементы(УдаляемыйСсылка, ВыборкаДочернихЭлементов)); + КонецЕсли; + КонецЕсли; + + Возврат ДочерниеПодчиненныеЭлементы; +КонецФункции + +// Рекурсивно формирует таблицу дочерних элементов. +// +// Параметры: +// РезультатПакета - ДеревоЗначений +// +// Возвращаемое значение: +// см. ТаблицаДочернихПодчиненныхЭлементов +// +Функция ДочерниеЭлементы(ОсновнойЭлемент, РезультатПакета) + Результат = ТаблицаДочернихПодчиненныхЭлементов(); + + Для Каждого СтрокаДерева Из РезультатПакета.Строки Цикл + + Если СтрокаДерева.Элемент = ОсновнойЭлемент Тогда + ДочерниеЭлементы = ДочерниеЭлементы(ОсновнойЭлемент, СтрокаДерева); + Результат = ОбъединениеТаблиц(Результат, ДочерниеЭлементы) + Иначе + ЗаписьРезультата = Результат.Добавить(); + ЗаполнитьЗначенияСвойств(ЗаписьРезультата, СтрокаДерева); + ЗаписьРезультата.ДочерниеЭлементы = ДочерниеЭлементы(ОсновнойЭлемент, СтрокаДерева); + Результат = ОбъединениеТаблиц(Результат, ЗаписьРезультата.ДочерниеЭлементы); + КонецЕсли; + + КонецЦикла; + Возврат Результат; КонецФункции -Процедура ПопробоватьУдалитьСсылку(Ссылка, ПараметрыВыполнения, Информация, Результат) - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить(Информация.ПолноеИмя); - ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); - Блокировка.Заблокировать(); +// Параметры: +// РезультатПакета - ВыборкаИзРезультатаЗапроса +// +// Возвращаемое значение: +// см. ТаблицаДочернихПодчиненныхЭлементов +// +Функция ПодчиненныеЭлементы(РезультатПакета) + ДочерниеПодчиненныеЭлементы = ТаблицаДочернихПодчиненныхЭлементов(); + + Пока РезультатПакета.Следующий() Цикл + ЗаполнитьЗначенияСвойств(ДочерниеПодчиненныеЭлементы.Добавить(), РезультатПакета); + КонецЦикла; - Объект = Ссылка.ПолучитьОбъект(); - Если Объект = Неопределено Тогда - Результат.Успех = Истина; // Объект уже удален. - Возврат; - КонецЕсли; - Если Объект.ПометкаУдаления <> Истина Тогда - Результат.Успех = Ложь; - Результат.ИнформацияОбОшибке = НСтр("ru = 'Объект не помечен на удаление.'"); - Возврат; - КонецЕсли; + Возврат ДочерниеПодчиненныеЭлементы; +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений : +// * Элемент - ЛюбаяСсылка +// * ДочерниеЭлементы - см. ТаблицаДочернихПодчиненныхЭлементов +// * ПометкаУдаления - Булево +// * ТипЭлемента - Строка +// +Функция ТаблицаДочернихПодчиненныхЭлементов() + ДочерниеПодчиненныеЭлементы = Новый ТаблицаЗначений(); + ДочерниеПодчиненныеЭлементы.Колонки.Добавить("Элемент"); + ДочерниеПодчиненныеЭлементы.Колонки.Добавить("ДочерниеЭлементы", Новый ОписаниеТипов("ТаблицаЗначений")); + ДочерниеПодчиненныеЭлементы.Колонки.Добавить("ПометкаУдаления", Новый ОписаниеТипов("Булево")); + ДочерниеПодчиненныеЭлементы.Колонки.Добавить("ТипЭлемента", Новый ОписаниеТипов("Строка")); + Возврат ДочерниеПодчиненныеЭлементы +КонецФункции + +Функция ТекстЗапросаДочернихЭлементов(ИнформацияОМетаданных) + ШаблонЗапроса = "ВЫБРАТЬ + | Таб.Ссылка КАК Элемент, + | Таб.ПометкаУдаления КАК ПометкаУдаления, + | ""Дочерний"" КАК ТипЭлемента + |ИЗ + | &ИмяТаблицы КАК ТАБ + |ГДЕ + | Таб.Ссылка В ИЕРАРХИИ (&Родитель) + |УПОРЯДОЧИТЬ ПО + | Элемент ИЕРАРХИЯ"; - ДочерниеИПодчиненныеОбъекты = НайтиДочерниеИПодчиненныеОбъекты(Ссылка, Информация); - Результат.Количество = Результат.Количество + ДочерниеИПодчиненныеОбъекты.Количество(); + Таблица = ИнформацияОМетаданных.Метаданные.ПолноеИмя(); + ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "&ИмяТаблицы", Таблица); - // Удаление невозможно, если есть хотя бы один дочерний или подчиненный объект, не помеченный на удаление. - // Эта предварительная проверка позволяет избежать отката длинной транзакции при удалении в иерархических таблицах. - ДочерниеИПодчиненныеОбъектыПомечены = Истина; - Для каждого ПодчиненныйОбъект Из ДочерниеИПодчиненныеОбъекты Цикл - Если Не ПодчиненныйОбъект.ПометкаУдаления Тогда - ДочерниеИПодчиненныеОбъектыПомечены = Ложь; + Возврат ТекстЗапроса; +КонецФункции + +// Параметры: +// ИнформацияОМетаданных - см. СведенияОМетаданных +// +// Возвращаемое значение: +// Строка +// +Функция ТекстЗапросаПодчиненныхЭлементов(ИнформацияОМетаданных) + ТекстыЗапросов = Новый Массив;// Массив из Строка + + ШаблонУсловияСвязи = "Таб.%1 = &Ссылка"; + ШаблонЗапроса = "ВЫБРАТЬ + | Таб.Ссылка КАК Элемент, + | Таб.ПометкаУдаления КАК ПометкаУдаления, + | ""Подчиненный"" КАК ТипЭлемента + |ИЗ + | &ИмяТаблицы КАК ТАБ + |ГДЕ + | Таб.Ссылка <> &Ссылка + | И &УсловиеСвязи"; + + УсловиеСвязи = "ЛОЖЬ"; + Для Каждого ПодчиненныйОбъект Из ИнформацияОМетаданных.ОписаниеПодчиненныхОбъектов Цикл + УсловиеСвязи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловияСвязи, ПодчиненныйОбъект.ИмяРеквизита); + ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "&ИмяТаблицы", ПодчиненныйОбъект.Метаданные.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеСвязи", УсловиеСвязи); + ТекстыЗапросов.Добавить(ТекстЗапроса); + КонецЦикла; + + Возврат СтрСоединить(ТекстыЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС); +КонецФункции +#КонецОбласти + +// Параметры: +// РезультатыУдаления - см. РезультатОбработки +// РезультатОбработки - см. РезультатОбработки +// +Функция ОбъединитьРезультатУдаления(РезультатыУдаления, РезультатОбработки) + Результат = РезультатОбработки(); + + Результат.НеудаленныеОбъекты = ОбъединениеТаблиц( + РезультатыУдаления.НеудаленныеОбъекты, + РезультатОбработки.НеудаленныеОбъекты); + Результат.МестаИспользования = ОбъединениеТаблиц( + РезультатыУдаления.МестаИспользования, + РезультатОбработки.МестаИспользования); + + Результат.УдаленныеОбъекты = УдалениеПомеченныхОбъектовСлужебный.ОбъединениеМассивов( + РезультатыУдаления.УдаленныеОбъекты, + РезультатОбработки.УдаленныеОбъекты); + + Возврат Результат; +КонецФункции + +// Параметры: +// Приемник - ТаблицаЗначений +// Источник - ТаблицаЗначений +// КолонкаПриемника - Строка +// КолонкаИсточника - Строка +// +// Возвращаемое значение: +// Булево +// +Функция ИсточникаПодмножествоПриемника(Приемник, Источник, КолонкаПриемника, КолонкаИсточника) + Результат = Истина; + + Для Каждого СведенияОМестеИспользования Из Источник Цикл + Если НЕ ОбъектУдален(СведенияОМестеИспользования.МестоИспользования) + И Приемник.Найти(СведенияОМестеИспользования[КолонкаИсточника], КолонкаПриемника) = Неопределено Тогда + Результат = Ложь; Прервать; КонецЕсли; КонецЦикла; - Если ДочерниеИПодчиненныеОбъектыПомечены Тогда - Объект.Удалить(); - КонецЕсли; + Возврат Результат; +КонецФункции + +Функция РазрешеноУдалениеЭлемента(ДополнительныеСведения) + Результат = Истина; - ПрепятствующиеУдалению = НайтиПрепятствующиеУдалению(Ссылка, ПараметрыВыполнения); - ИсключениеОбъектовДопускающихУдаление(ПрепятствующиеУдалению, ОбъектыДопускающиеУдаление()); - - Результат.ПрепятствующиеУдалению = НайтиПрепятствующиеУдалению(Ссылка, ПараметрыВыполнения); - Результат.Количество = Результат.Количество + Результат.ПрепятствующиеУдалению.Количество(); - Результат.Успех = (Результат.Количество = 0); - Если Не Результат.Успех Тогда - Результат.ИнформацияОбОшибке = НСтр("ru = 'Объект используется в других объектах программы.'"); - Если ТипЗнч(Результат.ПрепятствующиеУдалению) = Тип("ТаблицаЗначений") Тогда - Результат.ПрепятствующиеУдалению.Колонки[0].Имя = "УдаляемыйСсылка"; - Результат.ПрепятствующиеУдалению.Колонки[1].Имя = "ОбнаруженныйСсылка"; - Результат.ПрепятствующиеУдалению.Колонки[2].Имя = "ОбнаруженныйМетаданные"; - Если ДочерниеИПодчиненныеОбъектыПомечены Тогда - Для Каждого ПодчиненныйОбъект Из ДочерниеИПодчиненныеОбъекты Цикл - СтрокаТаблицы = Результат.ПрепятствующиеУдалению.Добавить(); - СтрокаТаблицы.УдаляемыйСсылка = Ссылка; - СтрокаТаблицы.ОбнаруженныйСсылка = ПодчиненныйОбъект.Ссылка; - КонецЦикла; - КонецЕсли; + Для Каждого Элемент Из ДополнительныеСведения Цикл + Если НЕ Элемент.ПометкаУдаления Тогда + Результат = Ложь; + Прервать; КонецЕсли; + КонецЦикла; + Возврат Результат; +КонецФункции + +Функция ОбъектУдален(УдаляемыйСсылка) + Возврат ЗначениеЗаполнено(УдаляемыйСсылка) + И (ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(УдаляемыйСсылка, "ВерсияДанных") + И НЕ ЗначениеЗаполнено(УдаляемыйСсылка.ВерсияДанных)); +КонецФункции + +// Параметры: +// ПараметрыУдаления - см. ПараметрыУдаления +// РезультатОбработкиПакета - см. РезультатОбработки +// Элемент - см. ПакетУдаляемыхОбъектов +// РезультатУдаления - см. УдалитьЭлементПакета +// +Процедура ОтразитьРезультатУдаленияЭлементаПакета(ПараметрыУдаления, РезультатОбработкиПакета, Элемент, РезультатУдаления) + Если РезультатУдаления.Код <> КодыРезультатаУдаления().Успешно Тогда + НеудаленныйЭлемент = РезультатОбработкиПакета.НеудаленныеОбъекты.Добавить(); + ЗаполнитьЗначенияСвойств(НеудаленныйЭлемент, Элемент); + НеудаленныйЭлемент.РезультатУдаления = РезультатУдаления.Код; + НеудаленныйЭлемент.ИнформацияОбОшибке = РезультатУдаления.ИнформацияОбОшибке; + НеудаленныйЭлемент.Сообщения = СообщенияПользователяВСтроку(РезультатУдаления.Сообщения); + Если Элемент.ЭтоОсновнойОбъект Тогда + ПараметрыУдаления.КоличествоОбработанных = ПараметрыУдаления.КоличествоОбработанных + 1; + КонецЕсли; + РезультатОбработкиПакета.МестаИспользования = ОбъединениеТаблиц( + РезультатОбработкиПакета.МестаИспользования, + РезультатУдаления.МестаИспользования); + Иначе + РезультатОбработкиПакета.УдаленныеОбъекты.Добавить(Элемент.УдаляемыйСсылка); + РезультатОбработкиПакета.МестаОчисткиСсылок = ОбъединениеТаблиц( + РезультатОбработкиПакета.МестаОчисткиСсылок, + РезультатУдаления.МестаИспользования); КонецЕсли; + + ОповеститьОПрогрессе(ПараметрыУдаления); КонецПроцедуры -// Поиск ссылок вложенных и подчиненных (иерархия и связь по владельцу). Выполняется до удаления. -Функция НайтиДочерниеИПодчиненныеОбъекты(Ссылка, Информация) +Функция СообщенияПользователяВСтроку(Сообщения) + Результат = ""; - ВложенныеИПодчиненныеОбъекты = Новый Массив; - Если Информация.Иерархический Тогда - Запрос = Новый Запрос(Информация.ТекстЗапросаПоИерархии); - Запрос.УстановитьПараметр("УдаляемыйСсылка", Ссылка); - ВложенныеИПодчиненныеОбъекты = Запрос.Выполнить().Выгрузить(); - КонецЕсли; - - Если Информация.ЕстьПодчиненные Тогда - Запрос = Новый Запрос(Информация.ТекстЗапросаПоПодчиненным); - Запрос.УстановитьПараметр("УдаляемыйСсылка", Ссылка); - ПодчиненныеОбъекты = Запрос.Выполнить().Выгрузить(); - Если ВложенныеИПодчиненныеОбъекты.Количество() > 0 Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ВложенныеИПодчиненныеОбъекты, ПодчиненныеОбъекты); - Иначе - ВложенныеИПодчиненныеОбъекты = ПодчиненныеОбъекты; - КонецЕсли; - КонецЕсли; - Возврат ВложенныеИПодчиненныеОбъекты; + Для Каждого Элемент Из Сообщения Цикл + Результат = Символы.ПС + Результат + Элемент.Текст; + КонецЦикла; + Возврат Результат; КонецФункции -// Поиск ссылок путем сканирования всех таблиц - выполняется после удаления. -// -// Параметры: -// Ссылка - ЛюбаяСсылка - -// ПараметрыВыполнения - Структура - -// -// Возвращаемое значение: -// ТаблицаЗначений - где: -// * Данные - ЛюбаяСсылка - -// * Метаданные - ОбъектМетаданных - -// * РазделениеДанных - Неопределено - -// * Ссылка - ЛюбаяСсылка - -// -Функция НайтиПрепятствующиеУдалению(Ссылка, ПараметрыВыполнения) +Функция ОбработатьПакетВОднойТранзакции(ПараметрыУдаления, Пакет) + Результат = РезультатОбработки(); - ПоискСсылок = Новый Массив; - ПоискСсылок.Добавить(Ссылка); - - ПрепятствующиеУдалению = НайтиПоСсылкам(ПоискСсылок); - - // Пропуск ссылок из границ последовательности. - Количество = ПрепятствующиеУдалению.Количество(); - ИмяКолонки = ПрепятствующиеУдалению.Колонки[1].Имя; - Для Номер = 1 По Количество Цикл - Индекс = Количество - Номер; - СтрокаТаблицы = ПрепятствующиеУдалению[Индекс]; - ПрепятствующийСсылка = СтрокаТаблицы[ИмяКолонки]; - Если ПрепятствующийСсылка = Ссылка - Или ДокументУжеУдален(ПараметрыВыполнения, ПрепятствующийСсылка) Тогда - ПрепятствующиеУдалению.Удалить(СтрокаТаблицы); - КонецЕсли; - КонецЦикла; - - Возврат ПрепятствующиеУдалению; - -КонецФункции - -// Поиск ссылки документа в базе данных. -Функция ДокументУжеУдален(ПараметрыВыполнения, Ссылка) - Если Ссылка = Неопределено Тогда - Возврат Ложь; // Не документ. - КонецЕсли; - Информация = СформироватьИнформациюОТипах(ПараметрыВыполнения, ТипЗнч(Ссылка)); - Если Информация.Вид <> "ДОКУМЕНТ" Тогда - Возврат Ложь; // Не документ. - КонецЕсли; - ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ #ИмяТаблицы ГДЕ Ссылка = &Ссылка"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ИмяТаблицы", Информация.ПолноеИмя); - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Ссылка", Ссылка); - Возврат Запрос.Выполнить().Пустой(); -КонецФункции - -// Удаление циклов (кольцевых связей объектов). -Процедура УдалитьОставшиесяОбъектыВОднойТранзакции(ПараметрыВыполнения) - - // 0. Расчет объектов, допускающих удаления. - ДопускающиеУдаление = ОбъектыДопускающиеУдаление(); - - // 1. Объекты, которые невозможно удалить, получаются путем определения неразрешимых связей. - ОбъектыКоторыеНевозможноУдалить = Новый Массив; - ВложенныеНеразрешимыеСвязи = Новый Массив; - - Для Каждого Препятствующий Из ПараметрыВыполнения.ПрепятствующиеУдалению Цикл - - // 1.0. Обнаруженный тип может быть строкой в случае, когда препятствует удалению ошибка записи. - // потому исключать препятствующие объекты следует только в случае, когда это не ошибка. - Если Препятствующий.ОбнаруженныйТип <> Тип("Строка") Тогда - - // 1.1. Критерием для определения неразрешимых связей является тот факт, что объект, препятствующий удалению, - // не является регистром. В случае с регистрами предполагаем, что записи регистра будут удалены автоматически, - // при удалении объекта в его ведущем измерении. - Если Не ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(Метаданные.НайтиПоТипу(Препятствующий.ОбнаруженныйТип)) Тогда - Продолжить; - КонецЕсли; - - // 1.2. Этот объект не должен быть допущенным к удалению объектом. - Если ДопускающиеУдаление.Найти(Препятствующий.ОбнаруженныйСсылка.Метаданные()) <> Неопределено Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - - // 1.3. А также то, что объект, препятствующий удалению, не отмечен для удаления. - Если ПараметрыВыполнения.НеУдаленные.Найти(Препятствующий.ОбнаруженныйСсылка) = Неопределено - И ОбъектыКоторыеНевозможноУдалить.Найти(Препятствующий.УдаляемыйСсылка) = Неопределено Тогда - ОбъектыКоторыеНевозможноУдалить.Добавить(Препятствующий.УдаляемыйСсылка); - Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", Препятствующий.УдаляемыйСсылка)); - ВложенныеНеразрешимыеСвязи.Добавить(Найденные); - КонецЕсли; - КонецЦикла; - - // 1.3. Далее при помощи массива ВложенныеНеразрешимыеСвязи - // получаются неразрешимые подчиненные - "связи связей", "связи связей связей" и т.д... - Индекс = 0; - Пока Индекс < ВложенныеНеразрешимыеСвязи.Количество() Цикл - Найденные = ВложенныеНеразрешимыеСвязи[Индекс]; - Индекс = Индекс + 1; - Для Каждого Препятствующий Из Найденные Цикл - Если ОбъектыКоторыеНевозможноУдалить.Найти(Препятствующий.УдаляемыйСсылка) = Неопределено Тогда - ОбъектыКоторыеНевозможноУдалить.Добавить(Препятствующий.УдаляемыйСсылка); - Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", Препятствующий.УдаляемыйСсылка)); - ВложенныеНеразрешимыеСвязи.Добавить(Найденные); - КонецЕсли; - КонецЦикла; - КонецЦикла; - - // 2. Объекты, которые можно попробовать удалить в одной транзакции. - // = Массив удаляемых - Массив объектов, которые невозможно удалить. - УдаляемыеОбъекты = Новый Массив; - Для Каждого НеУдаленныйОбъект Из ПараметрыВыполнения.НеУдаленные Цикл - Если ОбъектыКоторыеНевозможноУдалить.Найти(НеУдаленныйОбъект) = Неопределено Тогда - УдаляемыеОбъекты.Добавить(НеУдаленныйОбъект); - КонецЕсли; - КонецЦикла; - - Количество = УдаляемыеОбъекты.Количество(); - Если Количество = 0 Тогда - Возврат; // Нет объектов для удаления. - КонецЕсли; - - // 3. Включение всех объектов в одну транзакцию и попытка удалить. - Успех = Ложь; НачатьТранзакцию(); Попытка - Для Номер = 1 По Количество Цикл - ОбратныйИндекс = Количество - Номер; - НеУдаленныйОбъект = УдаляемыеОбъекты[ОбратныйИндекс]; - - Информация = СформироватьИнформациюОТипах(ПараметрыВыполнения, ТипЗнч(НеУдаленныйОбъект)); - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить(Информация.ПолноеИмя); - ЭлементБлокировки.УстановитьЗначение("Ссылка", НеУдаленныйОбъект); + Для Каждого ЭлементПакета Из Пакет Цикл + Блокировка = Новый БлокировкаДанных(); + Элемент = Блокировка.Добавить(ЭлементПакета.УдаляемыйСсылка.Метаданные().ПолноеИмя()); + Элемент.УстановитьЗначение("Ссылка", ЭлементПакета.УдаляемыйСсылка); Блокировка.Заблокировать(); - Объект = НеУдаленныйОбъект.ПолучитьОбъект(); - Если Объект = Неопределено Тогда // Объект уже удален. - Продолжить; + Объект = ЭлементПакета.УдаляемыйСсылка.ПолучитьОбъект(); + Если Объект <> Неопределено Тогда + УдалитьОбъект(Объект); + Результат.УдаленныеОбъекты.Добавить(ЭлементПакета.УдаляемыйСсылка); КонецЕсли; - Если Объект.ПометкаУдаления <> Истина Тогда - УдаляемыеОбъекты.Удалить(ОбратныйИндекс); // Объект уже не помечен на удаление. - Продолжить; - КонецЕсли; - - Объект.Удалить(); КонецЦикла; - НеУдаленныйОбъект = Неопределено; - Если УдаляемыеОбъекты.Количество() > 0 Тогда - ПрепятствующиеУдалению = НайтиПоСсылкам(УдаляемыеОбъекты); - ИсключениеОбъектовДопускающихУдаление(ПрепятствующиеУдалению, ДопускающиеУдаление); - - // Исключение объектов, ранее удаленных в этой же транзакции. - ИмяКолонки = ПрепятствующиеУдалению.Колонки[1].Имя; - Для Каждого НеУдаленныйОбъект Из УдаляемыеОбъекты Цикл - ПоискНеПрепятствующих = Новый Структура(ИмяКолонки, НеУдаленныйОбъект); - НеПрепятствующие = ПрепятствующиеУдалению.НайтиСтроки(ПоискНеПрепятствующих); - Для Каждого Препятствующий Из НеПрепятствующие Цикл - ПрепятствующиеУдалению.Удалить(Препятствующий); - КонецЦикла; - КонецЦикла; - - Если ПрепятствующиеУдалению.Количество() = 0 Тогда - Успех = Истина; - КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + // Не смогли удалить ни один объект + // Будем отображать ошибку, произошедшую на предыдущем этапе удаления + ОтменитьТранзакцию(); + Результат.НеудаленныеОбъекты = Пакет.Скопировать(); + КонецПопытки; + + Возврат Результат; +КонецФункции + +// Возвращаемое значение: +// Структура: +// * Код - Строка +// * МестаИспользования - см. МестаИспользованияЭлементовПакета +// * Сообщения - Массив из СообщениеПользователю +// * ИнформацияОбОшибке - Неопределено +// - ИнформацияОбОшибке +// +Функция УдалитьЭлементПакета(ПараметрыУдаления, Элемент, МестаИспользования) + Результат = Новый Структура(); + Результат.Вставить("Код", КодыРезультатаУдаления().Успешно); + Результат.Вставить("МестаИспользования", МестаИспользования()); + Результат.Вставить("Сообщения", Новый ФиксированныйМассив(Новый Массив)); + Результат.Вставить("ИнформацияОбОшибке"); + + // Объект был удален ранее + Если ОбъектУдален(Элемент.УдаляемыйСсылка) Тогда + Возврат Результат; + КонецЕсли; + + // У элемента есть неудаленные дочерние или подчиненные объекты + Для Каждого ДочернийПодчиненныйЭлемент Из Элемент.ДочерниеПодчиненныеОбъекты Цикл + Если НЕ ОбъектУдален(ДочернийПодчиненныйЭлемент.Элемент) Тогда + Результат.Код = КодыРезультатаУдаления().ЕстьМестаИспользования; + Результат.МестаИспользования = ОставшиесяМестаИспользованияУдаляемогоОбъекта(ПараметрыУдаления, МестаИспользования); + Возврат Результат; КонецЕсли; + КонецЦикла; - Если Успех Тогда + МестаОчисткиСсылок = МестаОчисткиСсылок(ПараметрыУдаления, МестаИспользования); + + Объект = Элемент.УдаляемыйСсылка.ПолучитьОбъект(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить(Объект.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Объект.Ссылка); + Блокировка.Заблокировать(); + + УдалитьОбъект(Объект); + ОставшиесяМестаИспользования = ОставшиесяМестаИспользованияУдаляемогоОбъекта(ПараметрыУдаления, + МестаИспользования); + Если ОставшиесяМестаИспользования.Количество() = 0 + Или МестаОчисткиСсылок.Количество() = ОставшиесяМестаИспользования.Количество() Тогда + + Результат.МестаИспользования = МестаОчисткиСсылок; ЗафиксироватьТранзакцию(); Иначе + Результат.МестаИспользования = ОставшиесяМестаИспользования; + Результат.Код = КодыРезультатаУдаления().ЕстьМестаИспользования; ОтменитьТранзакцию(); КонецЕсли; - Исключение ОтменитьТранзакцию(); - Успех = Ложь; - ЗаписатьПредупреждение(НеУдаленныйОбъект, ИнформацияОбОшибке()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Результат.Сообщения = ДлительныеОперации.СообщенияПользователю(Истина); + Результат.ИнформацияОбОшибке = ИнформацияОбОшибке; + Результат.Код = КодыРезультатаУдаления().ОшибкаПриУдалении; КонецПопытки; - - // 4. Регистрация результата (если успех). - Если Успех Тогда - Для Каждого НеУдаленныйОбъект Из УдаляемыеОбъекты Цикл - // Регистрация ссылки в коллекции удаленных. - Если ПараметрыВыполнения.Удаленные.Найти(НеУдаленныйОбъект) = Неопределено Тогда - ПараметрыВыполнения.Удаленные.Добавить(НеУдаленныйОбъект); - КонецЕсли; - - // Удаление ссылки из коллекции не удаленных. - Индекс = ПараметрыВыполнения.НеУдаленные.Найти(НеУдаленныйОбъект); - Если Индекс <> Неопределено Тогда - ПараметрыВыполнения.НеУдаленные.Удалить(Индекс); - КонецЕсли; - - // Очистка информации о связях "от" удаленных объектов. - Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("УдаляемыйСсылка", НеУдаленныйОбъект)); - Для Каждого Препятствующий Из Найденные Цикл - ПараметрыВыполнения.ПрепятствующиеУдалению.Удалить(Препятствующий); - КонецЦикла; - - // Очистка информации о связях "к" удаленным объектам. - Найденные = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", НеУдаленныйОбъект)); - Для Каждого Препятствующий Из Найденные Цикл - ПараметрыВыполнения.ПрепятствующиеУдалению.Удалить(Препятствующий); - КонецЦикла; - КонецЦикла; - КонецЕсли; + + Возврат Результат; +КонецФункции + +Процедура УдалитьОбъект(Объект) + Объект.ДополнительныеСвойства.Вставить("НеВыполнятьКонтрольУдаляемых"); + Объект.Удалить(); КонецПроцедуры -// Очистка причин неудаления объектов от исключений поиска ссылок. -// Применяется при оперативном удалении помеченных для того, чтобы удалить из результата "дублирующие" связи. -Процедура ОчиститьСвязиОтИсключенийПоискаСсылок(ПараметрыВыполнения) - Если Не ПараметрыВыполнения.Свойство("ИсключенияПоискаСсылок") Тогда - ПараметрыВыполнения.Вставить("ИсключенияПоискаСсылок", ОбщегоНазначения.ИсключенияПоискаСсылок()); - КонецЕсли; - Если Не ПараметрыВыполнения.Свойство("ИсключающиеПравила") Тогда - ПараметрыВыполнения.Вставить("ИсключающиеПравила", Новый Соответствие); // Кэш правил исключений поиска. - КонецЕсли; - - ОбъектыСНеИсключениями = Новый Соответствие; - ОбъектыТолькоСИсключениями = Новый Соответствие; - - // Определение "спама". - ПрепятствующиеУдалению = ПараметрыВыполнения.ПрепятствующиеУдалению; - ПрепятствующиеУдалению.Колонки.Добавить("ЭтоИсключение", Новый ОписаниеТипов("Булево")); - Для Каждого Причина Из ПрепятствующиеУдалению Цикл - Если Причина.ОбнаруженныйТип <> Тип("Строка")Тогда - ОбнаруженныйМетаданные = Метаданные.НайтиПоТипу(Причина.ОбнаруженныйТип); - Причина.ЭтоИсключение = СвязьВИсключенияхПоискаСсылок(ПараметрыВыполнения, ОбнаруженныйМетаданные, Причина); - КонецЕсли; - Если Причина.ЭтоИсключение Тогда - Если ОбъектыСНеИсключениями[Причина.УдаляемыйСсылка] = Неопределено Тогда - ОбъектыТолькоСИсключениями.Вставить(Причина.УдаляемыйСсылка, Истина); - КонецЕсли; - Иначе - ОбъектыСНеИсключениями.Вставить(Причина.УдаляемыйСсылка, Истина); - ОбъектыТолькоСИсключениями.Удалить(Причина.УдаляемыйСсылка); - КонецЕсли; +Функция ЗаписьСуществует(СведенияОМестеИспользования) + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СведенияОМестеИспользования.Метаданные.ПолноеИмя());// РегистрСведенийМенеджер, РегистрБухгалтерииМенеджер, РегистрРасчетаМенеджер, РегистрНакопленияМенеджер + Набор = МенеджерРегистра.СоздатьНаборЗаписей(); + Для Сч = 0 По Набор.Отбор.Количество() - 1 Цикл + ЭлементОтбора = Набор.Отбор[Сч]; + ЭлементОтбора.Установить(СведенияОМестеИспользования.МестоИспользования[ЭлементОтбора.Имя]); КонецЦикла; - - // Если кроме "спама" ничего не осталось, - // то это ситуация, когда разработчик забыл добавить авто-очистку при удалении объекта. - // В таких редких случаях вместо вывода пустого списка причин, можно вывести "спам". - Для Каждого КлючИЗначение Из ОбъектыТолькоСИсключениями Цикл - Найденные = ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("УдаляемыйСсылка", КлючИЗначение.Ключ)); - Для Каждого Причина Из Найденные Цикл - Причина.ЭтоИсключение = Ложь; - КонецЦикла; - КонецЦикла; - - // Удаление "спама". - Найденные = ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ЭтоИсключение", Истина)); - Для Каждого Причина Из Найденные Цикл - ПрепятствующиеУдалению.Удалить(Причина); - КонецЦикла; - - ПрепятствующиеУдалению.Колонки.Удалить("ЭтоИсключение"); - ПараметрыВыполнения.Удалить("ИсключенияПоискаСсылок"); - ПараметрыВыполнения.Удалить("ИсключающиеПравила"); -КонецПроцедуры + Набор.Прочитать(); + Возврат Набор.Количество() > 0; +КонецФункции -// Регистрация результата удаления и заполнение коллекции ПовторноУдаляемые. -// // Параметры: -// ПараметрыВыполнения - Структура - где: -// * Удаленные - Массив - -// * ПовторноУдаляемые - Массив - -// Ссылка - ЛюбаяСсылка - -// Результат - см. УдалитьСсылку -// ИмяКоллекции - Строка - +// ПараметрыУдаления - Структура +// Пакет - см. ПакетУдаляемыхОбъектов +// +// Возвращаемое значение: +// см. МестаИспользования // -Процедура ЗарегистрироватьРезультатУдаления(ПараметрыВыполнения, Ссылка, Результат, ИмяКоллекции) - // Результат формируется в УдалитьСсылку. - Если Результат.Успех Тогда - // Регистрация ссылки в коллекции удаленных. - ПараметрыВыполнения.Удаленные.Добавить(Ссылка); - - // Исключение удаленного объекта из причин неудаления других объектов. Поиск. - НеактуальныеПричины = ПараметрыВыполнения.ПрепятствующиеУдалению.НайтиСтроки(Новый Структура("ОбнаруженныйСсылка", Ссылка)); - Для Каждого Причина Из НеактуальныеПричины Цикл - // Удаление причины неудаления другого объекта. - УдаляемыйСсылка = Причина.УдаляемыйСсылка; - ПараметрыВыполнения.ПрепятствующиеУдалению.Удалить(Причина); - // Поиск других причин неудаления другого объекта. - Если ПараметрыВыполнения.ПрепятствующиеУдалению.Найти(УдаляемыйСсылка, "УдаляемыйСсылка") = Неопределено Тогда - // Устранены все причины неудаления другого объекта. - // Регистрация другого объекта для повторного удаления. - ПараметрыВыполнения.ПовторноУдаляемые.Добавить(УдаляемыйСсылка); - Если ИмяКоллекции = "ПовторноУдаляемые" И ПараметрыВыполнения.Интерактивное Тогда - ПараметрыВыполнения.Всего = ПараметрыВыполнения.Всего + 1; - КонецЕсли; - // Очистка записи о другом объекте из коллекции "НеУдаленные". - Индекс = ПараметрыВыполнения.НеУдаленные.Найти(УдаляемыйСсылка); - Если Индекс <> Неопределено Тогда - ПараметрыВыполнения.НеУдаленные.Удалить(Индекс); - КонецЕсли; - КонецЕсли; - КонецЦикла; - Возврат; - КонецЕсли; - - ПараметрыВыполнения.НеУдаленные.Добавить(Ссылка); +Функция МестаИспользованияЭлементовПакета(ПараметрыУдаления, Пакет) + Результат = МестаИспользования(); - Если ТипЗнч(Результат.ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") - Или Результат.ПрепятствующиеУдалению = Неопределено Тогда // Текст ошибки - Если ТипЗнч(Результат.ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда - ТекстОшибки = КраткоеПредставлениеОшибки(Результат.ИнформацияОбОшибке); - Подробно = ПодробноеПредставлениеОшибки(Результат.ИнформацияОбОшибке); - Иначе - ТекстОшибки = Результат.ИнформацияОбОшибке; - Подробно = ""; + УстановитьПривилегированныйРежим(Истина); + ПараметрыПоискаМестИспользования = ОбщегоНазначения.ПараметрыПоискаМестИспользования(); + ПараметрыПоискаМестИспользования.ОтменаИсключенийПоискаСсылок = ОтменаИсключенийПоискаСсылокПриУдаленииОбъектов(); + МестаИспользования = ОбщегоНазначения.МестаИспользования(Пакет.ВыгрузитьКолонку("УдаляемыйСсылка"),,ПараметрыПоискаМестИспользования); + МестаИспользования.Колонки[0].Имя = "УдаляемыйСсылка"; + МестаИспользования.Колонки[1].Имя = "МестоИспользования"; + МестаИспользования.Колонки[2].Имя = "Метаданные"; + + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(МестаИспользования, Результат); + + Возврат Результат; +КонецФункции + +// Параметры: +// Пакет - см. ПакетУдаляемыхОбъектов +// ДочерниеПодчиненныеЭлементы - см. ДочерниеПодчиненныеЭлементы +// +Процедура ДополнитьПакетДочернимиИПодчиненнымиЭлементами(Пакет, ДочерниеПодчиненныеЭлементы, Исключения) + Для Каждого ОписаниеЭлемента Из ДочерниеПодчиненныеЭлементы Цикл + Если Пакет.Найти(ОписаниеЭлемента.Элемент, "УдаляемыйСсылка") <> Неопределено + ИЛИ Исключения.Найти(ОписаниеЭлемента.Элемент, "УдаляемыйСсылка") <> Неопределено Тогда + + Продолжить; КонецЕсли; - Для Каждого СообщениеОтОбъекта Из Результат.Сообщения Цикл - ТекстОшибки = СокрП(ТекстОшибки + Символы.ПС + Символы.ПС + СокрЛ(СообщениеОтОбъекта.Текст)); - Подробно = СокрП(Подробно + Символы.ПС + Символы.ПС + СокрЛ(СообщениеОтОбъекта.Текст)); - КонецЦикла; - Причина = ПараметрыВыполнения.ПрепятствующиеУдалению.Добавить(); - Причина.УдаляемыйСсылка = Ссылка; - Причина.УдаляемыйТип = ТипЗнч(Причина.УдаляемыйСсылка); - Причина.ОбнаруженныйСсылка = ТекстОшибки; - Причина.ОбнаруженныйТип = Тип("Строка"); - Причина.Подробно = Подробно; - СформироватьИнформациюОТипах(ПараметрыВыполнения, Причина.УдаляемыйТип); - Иначе // Регистрация связей (причин не удаления) для вывода пользователю. - Для Каждого СтрокаТаблицы Из Результат.ПрепятствующиеУдалению Цикл - ЗаписатьПричинуВРезультат(ПараметрыВыполнения, СтрокаТаблицы); - КонецЦикла; + + ЭлементПакета = Пакет.Добавить(); + ЭлементПакета.УдаляемыйСсылка = ОписаниеЭлемента.Элемент; + ЭлементПакета.ДочерниеПодчиненныеОбъекты = ОписаниеЭлемента.ДочерниеЭлементы; + КонецЦикла; +КонецПроцедуры + +// Параметры: +// ПараметрыУдаления - см. ПараметрыУдаления +// +Процедура ОповеститьОПрогрессе(ПараметрыВыполнения) + ПараметрыВыполнения.Всего = ПараметрыВыполнения.КоличествоУдаляемых; + ОтметитьПрогрессОбходаКоллекции(ПараметрыВыполнения, "ПользовательскиеОбъекты"); +КонецПроцедуры +#КонецОбласти + +#Область ФильтрыКоллекций + +// Параметры: +// Пакет - см. ПакетУдаляемыхОбъектов +// МестаИспользования - см. МестаИспользования +// +// Возвращаемое значение: +// см. ПакетУдаляемыхОбъектов +// +Функция ЦиклическиеСсылки(Пакет, МестаИспользования) + Результат = СсылкиТолькоНаЭлементыВнутриПакета(Пакет, МестаИспользования); + + КоличествоВПакете = Пакет.Количество(); + Пока (Результат[0].Количество() <> КоличествоВПакете) Цикл + КоличествоВПакете = Результат[0].Количество(); + Результат = СсылкиТолькоНаЭлементыВнутриПакета(Результат[0], Результат[1]); + КонецЦикла; + + Возврат Результат[0]; +КонецФункции + +// Параметры: +// ПараметрыУдаления - Структура: +// * РазмерПакета - Число +// * ИсключенияПоискаСсылок - Массив +// МестаИспользования - см. МестаИспользованияЭлементовПакета +// +// Возвращаемое значение: +// см. МестаИспользования +// +Функция ОставшиесяМестаИспользованияУдаляемогоОбъекта(ПараметрыУдаления, МестаИспользования) + Результат = МестаИспользования.СкопироватьКолонки(); + + Для Каждого СведенияОМестеИспользования Из МестаИспользования Цикл + ЭтоСсылка = СведенияОМестеИспользования.МестоИспользования <> Неопределено + И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(СведенияОМестеИспользования.МестоИспользования, "ВерсияДанных"); + + ЭтоКонстанта = Метаданные.Константы.Содержит(СведенияОМестеИспользования.Метаданные); + + Если ЭтоСсылка + И НЕ ОбъектУдален(СведенияОМестеИспользования.МестоИспользования) + И НЕ СведенияОМестеИспользования.ЭтоСлужебныеДанные Тогда + ЗаполнитьЗначенияСвойств(Результат.Добавить(), СведенияОМестеИспользования); + КонецЕсли; + + Если НЕ ЭтоСсылка + И НЕ ЭтоКонстанта + И ЗаписьСуществует(СведенияОМестеИспользования) + И НЕ СведенияОМестеИспользования.ЭтоСлужебныеДанные Тогда + ЗаполнитьЗначенияСвойств(Результат.Добавить(), СведенияОМестеИспользования); + КонецЕсли; + + Если НЕ ЭтоСсылка + И ЭтоКонстанта + И СведенияОМестеИспользования.МестоИспользования = Неопределено Тогда + ЗаполнитьЗначенияСвойств(Результат.Добавить(), СведенияОМестеИспользования); + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция МестаОчисткиСсылок(ПараметрыУдаления, МестаИспользования) + Результат = МестаИспользования(); + + Если Не ПараметрыУдаления.ОчищатьСсылкиВМестахИспользования Тогда + Возврат Результат; КонецЕсли; + МестаИспользования.Сортировать("Метаданные"); + Для Каждого СведенияОМестеИспользования Из МестаИспользования Цикл + + ТипМестаИспользования = ТипЗнч(СведенияОМестеИспользования.МестоИспользования); + ЭтоСсылка = ОбщегоНазначения.ЭтоСсылка(ТипМестаИспользования); + + Если ЭтоСсылка + И НЕ ОбъектУдален(СведенияОМестеИспользования.МестоИспользования) + И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СведенияОМестеИспользования.МестоИспользования, "ПометкаУдаления") + И Не СведенияОМестеИспользования.ЭтоСлужебныеДанные Тогда + + ЗаполнитьЗначенияСвойств(Результат.Добавить(), СведенияОМестеИспользования); + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция СсылкиТолькоНаЭлементыВнутриПакета(Пакет, МестаИспользования) + Результат = Новый Массив; + НовыйПакет = ПакетУдаляемыхОбъектов(); + МестаИспользованияКандидатов = МестаИспользования(); + + Для Каждого Элемент Из Пакет Цикл + Если Элемент.РезультатУдаления <> КодыРезультатаУдаления().ЕстьМестаИспользования + И Элемент.РезультатУдаления <> КодыРезультатаУдаления().ЕстьДочерниеПодчиненныеЭлементы Тогда + Продолжить; + КонецЕсли; + + МестаИспользованияЭлемента = МестаИспользования.Скопировать(Новый Структура("УдаляемыйСсылка", Элемент.УдаляемыйСсылка), "МестоИспользования"); + Если ИсточникаПодмножествоПриемника(Пакет, МестаИспользованияЭлемента, "УдаляемыйСсылка", "МестоИспользования") ИЛИ МестаИспользования.Количество() = 0 Тогда + ЗаполнитьЗначенияСвойств(НовыйПакет.Добавить(), Элемент); + + Для Каждого Элемент Из МестаИспользованияЭлемента Цикл + ЗаполнитьЗначенияСвойств(МестаИспользованияКандидатов.Добавить(), Элемент); + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Результат.Добавить(НовыйПакет); + Результат.Добавить(МестаИспользования); + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область ОбработчикиСобытийКонкурентногоОбновления + +Процедура ПослеОбработкиПакета(ПараметрыУдаления, Идентификатор) + УдалениеПомеченныхОбъектовСлужебный.СнятьБлокировкуИспользованияУдаляемыхОбъектов(Идентификатор); + ПараметрыСеанса.ВыполняетсяУдалениеОбъектов = Ложь; +КонецПроцедуры + +Процедура ПередОбработкойПакета(Пакет, Идентификатор) + ПараметрыСеанса.ВыполняетсяУдалениеОбъектов = Истина; + УдалениеПомеченныхОбъектовСлужебный.УстановитьБлокировкуИспользованияУдаляемыхОбъектов(Пакет, Идентификатор); +КонецПроцедуры + +#КонецОбласти + +#Область Конструкторы + +// Параметры: +// УдаляемыеОбъекты - Массив из ЛюбаяСсылка +// Параметры - Структура +// +// Возвращаемое значение: +// Структура: +// * КоличествоНеудаленных - Число +// * ПовторноУдаляемые - Массив из ЛюбаяСсылка +// * ПрепятствующиеУдалению - ТаблицаЗначений: +// ** УдаляемыйСсылка - ЛюбаяСсылка +// ** МестоИспользования - ЛюбаяСсылка +// ** ОбнаруженныйСтатус - Строка +// ** ПодробноеОписаниеОшибки - Строка +// ** ОписаниеОшибки - Строка +// * НеУдаленные - Массив +// * Удаленные - Массив +// * ПользовательскиеОбъекты - Массив +// * Монопольно - Булево +// * ОчищатьСсылкиВМестахИспользования - Булево +// * КешИнформацииОТипах - Соответствие +// * РазмерПакета - Число +// * ИсключенияПоискаСсылок - Массив из ОбъектМетаданных +// * ИдентификаторЗадания - УникальныйИдентификатор +// +Функция ПараметрыУдаления(УдаляемыеОбъекты, Параметры) + ИсключенияПоискаСсылок = ИсключенияПоискаСсылокПриУдалении(); + + ПараметрыОбработки = Новый Структура; + ПараметрыОбработки.Вставить("Монопольно", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Монопольно", Ложь)); + ПараметрыОбработки.Вставить("ИсключающиеПравила", Новый Соответствие); + ПараметрыОбработки.Вставить("ИсключенияПоискаСсылок", ИсключенияПоискаСсылок); + ПараметрыОбработки.Вставить("РазмерПакета", ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, + "РазмерПакета", 100)); + ПараметрыОбработки.Вставить("КешИнформацииОТипах", Новый Соответствие); + ПараметрыОбработки.Вставить("ОчищатьСсылкиВМестахИспользования", ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Параметры, "ОчищатьСсылкиВМестахИспользования", Ложь)); + + ПараметрыОбработки.Вставить("ПользовательскиеОбъекты", Новый Массив); + + ПрепятствующиеУдалению = Новый ТаблицаЗначений; + ПрепятствующиеУдалению.Колонки.Добавить("УдаляемыйСсылка"); + ПрепятствующиеУдалению.Колонки.Добавить("МестоИспользования"); + ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйСтатус", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(10))); + ПрепятствующиеУдалению.Колонки.Добавить("ОписаниеОшибки", Новый ОписаниеТипов("Строка")); + ПрепятствующиеУдалению.Колонки.Добавить("ПодробноеОписаниеОшибки", Новый ОписаниеТипов("Строка")); + ТипыКолонкиМетаданные = Новый Массив; + ТипыКолонкиМетаданные.Добавить("ОбъектМетаданных"); + ТипыКолонкиМетаданные.Добавить("Неопределено"); + ПрепятствующиеУдалению.Колонки.Добавить("Метаданные", Новый ОписаниеТипов(ТипыКолонкиМетаданные)); + + ПрепятствующиеУдалению.Индексы.Добавить("УдаляемыйСсылка"); + ПрепятствующиеУдалению.Индексы.Добавить("МестоИспользования"); + + ПараметрыОбработки.Вставить("Удаленные", Новый Массив); + ПараметрыОбработки.Вставить("НеУдаленные", Новый Массив); + ПараметрыОбработки.Вставить("ПрепятствующиеУдалению", ПрепятствующиеУдалению); + ПараметрыОбработки.Вставить("ПовторноУдаляемые", Новый Массив); + ПараметрыОбработки.Вставить("КоличествоУдаляемых", УдаляемыеОбъекты.Количество()); + ПараметрыОбработки.Вставить("КоличествоНеудаленных", 0); + ПараметрыОбработки.Вставить("КоличествоОбработанных", 0); + ПараметрыОбработки.Вставить("Всего", 0); + ПараметрыОбработки.Вставить("Номер", 0); + ПараметрыОбработки.Вставить("ИдентификаторЗадания", Новый УникальныйИдентификатор); + + Возврат ПараметрыОбработки; +КонецФункции + +Функция ИсключенияПоискаСсылокПриУдалении() + ИсключенияПоискаСсылок = ОбщегоНазначения.ИсключенияПоискаСсылок(); + Для Каждого Элемент Из УдалениеПомеченныхОбъектовСлужебный.ИсключенияПоискаСсылокРазрешающихУдаление() Цикл + ИсключенияПоискаСсылок.Вставить(Элемент, "*"); + КонецЦикла; + + ИсключенияПоискаСсылок.Удалить(Метаданные.Справочники.ВнешниеПользователи); + + Возврат ИсключенияПоискаСсылок; +КонецФункции + +// Возвращаемое значение: +// Структура: +// * МестаИспользования - см. ПакетУдаляемыхОбъектов +// * НеудаленныеОбъекты - см. МестаИспользования +// * УдаленныеОбъекты - Массив из ЛюбаяСсылка +// +Функция РезультатОбработки() + РезультатОбработкиПакета = Новый Структура(); + + РезультатОбработкиПакета.Вставить("УдаленныеОбъекты", Новый Массив); + РезультатОбработкиПакета.Вставить("НеудаленныеОбъекты", ПакетУдаляемыхОбъектов()); + РезультатОбработкиПакета.Вставить("МестаИспользования", МестаИспользования()); + РезультатОбработкиПакета.Вставить("МестаОчисткиСсылок", МестаИспользования()); + + Возврат РезультатОбработкиПакета +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * УдаляемыйСсылка - ЛюбаяСсылка +// * МестоИспользования - ЛюбаяСсылка +// * Метаданные - ОбъектМетаданных +// * ЭтоСлужебныеДанные - Булево +// +Функция МестаИспользования() Экспорт + Таблица = Новый ТаблицаЗначений(); + + Таблица.Колонки.Добавить("УдаляемыйСсылка"); + Таблица.Колонки.Добавить("МестоИспользования"); + Таблица.Колонки.Добавить("Метаданные"); + Таблица.Колонки.Добавить("ЭтоСлужебныеДанные", Новый ОписаниеТипов("Булево")); + + Таблица.Индексы.добавить("УдаляемыйСсылка"); + Таблица.Индексы.добавить("МестоИспользования"); + + Возврат Таблица; +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * УдаляемыйСсылка - ЛюбаяСсылка +// * ЕстьДочерниеОбъекты - Булево +// * ЕстьПодчиненныеОбъекты - Булево +// * ИнформацияОбОшибке - ИнформацияОбОшибке +// * Сообщения - Строка +// * РезультатУдаления - Число +// * ДочерниеПодчиненныеОбъекты - см. ТаблицаДочернихПодчиненныхЭлементов +// * ЭтоОсновнойОбъект - Булево +// +Функция ПакетУдаляемыхОбъектов() + Пакет = Новый ТаблицаЗначений; + + Пакет.Колонки.Добавить("УдаляемыйСсылка"); + Пакет.Колонки.Добавить("ЕстьДочерниеОбъекты", , Новый ОписаниеТипов("Булево")); + Пакет.Колонки.Добавить("ЕстьПодчиненныеОбъекты", Новый ОписаниеТипов("Булево")); + Пакет.Колонки.Добавить("ИнформацияОбОшибке", Новый ОписаниеТипов("ИнформацияОбОшибке")); + Пакет.Колонки.Добавить("Сообщения", Новый ОписаниеТипов("Строка")); + Пакет.Колонки.Добавить("РезультатУдаления", Новый ОписаниеТипов("Число")); + Пакет.Колонки.Добавить("ДочерниеПодчиненныеОбъекты", Новый ОписаниеТипов("ТаблицаЗначений")); + Пакет.Колонки.Добавить("ЭтоОсновнойОбъект", Новый ОписаниеТипов("Булево")); + + Возврат Пакет; +КонецФункции + +Функция КодыРезультатаУдаления() + ТипыОшибок = Новый Структура; + ТипыОшибок.Вставить("Успешно", -1); + ТипыОшибок.Вставить("ЕстьМестаИспользования", 0); + ТипыОшибок.Вставить("ОшибкаПриУдалении", 1); + ТипыОшибок.Вставить("ЕстьДочерниеПодчиненныеЭлементы", 2); + ТипыОшибок.Вставить("ЕстьДочерниеПодчиненныеЭлементыНепомеченныеНаУдаление", 3); + ТипыОшибок.Вставить("НеПомеченНаУдаление", 4); + Возврат ТипыОшибок; +КонецФункции + +// Параметры: +// МассивУдаляемыхОбъектов - Массив из ЛюбаяСсылка +// СведенияОМетаданных - ТаблицаЗначений: +// * Метаданные - ОбъектМетаданных +// * Иерархический - Булево +// * Приоритет - Число +// * Тип - Тип +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * УдаляемыйСсылка - ЛюбаяСсылка +// * Приоритет - Число +// * Тип - Тип +// +Функция УдаляемыеОбъекты(МассивУдаляемыхОбъектов, СведенияОМетаданных) + УдаляемыеОбъекты = Новый ТаблицаЗначений; + УдаляемыеОбъекты.Колонки.Добавить("УдаляемыйСсылка"); + УдаляемыеОбъекты.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число")); + УдаляемыеОбъекты.Колонки.Добавить("КоличествоПопыток", Новый ОписаниеТипов("Число")); + УдаляемыеОбъекты.Колонки.Добавить("Тип", Новый ОписаниеТипов("Тип")); + УдаляемыеОбъекты.Индексы.Добавить("УдаляемыйСсылка"); + + КоличествоПопытокОбъектов = РегистрыСведений.НеудаленныеОбъекты.КоличествоПопытокОбъектов(МассивУдаляемыхОбъектов); + + Для Каждого Элемент Из МассивУдаляемыхОбъектов Цикл + ТипЭлемента = ТипЗнч(Элемент); + ЭлементОчереди = УдаляемыеОбъекты.Добавить(); + ЭлементОчереди.УдаляемыйСсылка = Элемент; + ЭлементОчереди.Приоритет = СведенияОМетаданных.НайтиСтроки(Новый Структура("Тип", ТипЭлемента))[0].Приоритет; + ЭлементОчереди.Тип = ТипЭлемента; + КоличествоПопыток = КоличествоПопытокОбъектов.Найти(Элемент, "УдаляемыйСсылка"); + ЭлементОчереди.КоличествоПопыток = ?(КоличествоПопыток = Неопределено, 0, КоличествоПопыток.КоличествоПопыток); + КонецЦикла; + + УдаляемыеОбъекты.Сортировать("КоличествоПопыток, Приоритет"); + + Возврат УдаляемыеОбъекты; +КонецФункции +#КонецОбласти + +#Область ФормированиеСведенийОМетаданных + +// Параметры: +// ПараметрыУдаления - Структура +// УдаляемыеОбъекты - Массив из ЛюбаяСсылка +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Метаданные - ОбъектМетаданных +// * Иерархический - Булево +// * Приоритет - Число +// * Тип - Тип +// * ОписаниеПодчиненныхОбъектов - ТаблицаЗначений +// +Функция СведенияОМетаданных(ПараметрыУдаления, УдаляемыеОбъекты) + СведенияОМетаданных = Новый ТаблицаЗначений(); + СведенияОМетаданных.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); + СведенияОМетаданных.Колонки.Добавить("Иерархический", Новый ОписаниеТипов("Булево")); + СведенияОМетаданных.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число")); + СведенияОМетаданных.Колонки.Добавить("ЕстьПодчиненныеОбъекты", Новый ОписаниеТипов("Булево")); + СведенияОМетаданных.Колонки.Добавить("Тип", Новый ОписаниеТипов("Тип")); + СведенияОМетаданных.Колонки.Добавить("ОписаниеПодчиненныхОбъектов", Новый ОписаниеТипов("ТаблицаЗначений")); + СведенияОМетаданных.Индексы.Добавить("Тип"); + СведенияОМетаданных.Индексы.Добавить("Метаданные"); + + ЗаполнитьСведенияОМетаданных(СведенияОМетаданных, УдаляемыеОбъекты); + + Возврат СведенияОМетаданных; +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Тип - Тип +// * ПодчиненныеМетаданные - ОбъектМетаданных +// * Реквизиты - Массив +// +Функция ТаблицаПоискаПодчиненныхОбъектов() + Таблица = Новый ТаблицаЗначений; + Таблица.Колонки.Добавить("Тип", Новый ОписаниеТипов("Тип")); + Таблица.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); + Таблица.Колонки.Добавить("ИмяРеквизита", Новый ОписаниеТипов("Строка")); + + Возврат Таблица; +КонецФункции + +Процедура ЗаполнитьСведенияОМетаданных(СведенияОМетаданных, УдаляемыеОбъекты) + ПодчиненныеОбъекты = ОбщегоНазначения.ПодчиненныеОбъекты(); + + Для Каждого Элемент Из УдаляемыеОбъекты Цикл + Если СведенияОМетаданных.Найти(Элемент.Метаданные(), "Метаданные") = Неопределено Тогда + ИнформацияОМетаданных = СведенияОМетаданных.Добавить(); + ИнформацияОМетаданных.Метаданные = Элемент.Метаданные(); + ИнформацияОМетаданных.Приоритет = 0; + ИнформацияОМетаданных.Тип = ТипЗнч(Элемент); + ИнформацияОМетаданных.ОписаниеПодчиненныхОбъектов = ТаблицаПоискаПодчиненныхОбъектов(); + Кеш = Новый Структура("Иерархический"); + ЗаполнитьЗначенияСвойств(Кеш, ИнформацияОМетаданных.Метаданные); + ИнформацияОМетаданных.Иерархический = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Кеш, "Иерархический", Ложь); + КонецЕсли; + КонецЦикла; + + Для Каждого ОбъектМетаданных Из Метаданные.Справочники Цикл + ОписаниеПодчиненногоОбъекта = ПодчиненныеОбъекты.Найти(ОбъектМетаданных, "ПодчиненныйОбъект"); + + Если ОписаниеПодчиненногоОбъекта = Неопределено + И ОбъектМетаданных.Владельцы.Количество() > 0 Тогда + + ОписаниеПодчиненногоОбъекта = ПодчиненныеОбъекты.Добавить(); + ОписаниеПодчиненногоОбъекта.ПодчиненныйОбъект = ОбъектМетаданных; + ОписаниеПодчиненногоОбъекта.ПоляСвязей = "Владелец"; + ИначеЕсли ОбъектМетаданных.Владельцы.Количество() > 0 Тогда + + ОписаниеПодчиненногоОбъекта.ПоляСвязей = ?(СтрНайти(ОписаниеПодчиненногоОбъекта.ПоляСвязей, "Владелец") > 0, + ОписаниеПодчиненногоОбъекта.ПоляСвязей, + ОписаниеПодчиненногоОбъекта.ПоляСвязей + ",Владелец"); + КонецЕсли; + + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.СтандартныеРеквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.Реквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизитыТабличныхЧастей(СведенияОМетаданных, ОбъектМетаданных.ТабличныеЧасти); + КонецЦикла; + + Для Каждого ОбъектМетаданных Из Метаданные.Документы Цикл + ОписаниеПодчиненногоОбъекта = ПодчиненныеОбъекты.Найти(ОбъектМетаданных, "ПодчиненныйОбъект"); + + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.СтандартныеРеквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.Реквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизитыТабличныхЧастей(СведенияОМетаданных, ОбъектМетаданных.ТабличныеЧасти); + КонецЦикла; + + Для Каждого ОбъектМетаданных Из Метаданные.ПланыВидовХарактеристик Цикл + ОписаниеПодчиненногоОбъекта = ПодчиненныеОбъекты.Найти(ОбъектМетаданных, "ПодчиненныйОбъект"); + + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.СтандартныеРеквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.Реквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизитыТабличныхЧастей(СведенияОМетаданных, ОбъектМетаданных.ТабличныеЧасти); + КонецЦикла; + + Для Каждого ОбъектМетаданных Из Метаданные.ПланыВидовРасчета Цикл + ОписаниеПодчиненногоОбъекта = ПодчиненныеОбъекты.Найти(ОбъектМетаданных, "ПодчиненныйОбъект"); + + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.СтандартныеРеквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.Реквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизитыТабличныхЧастей(СведенияОМетаданных, ОбъектМетаданных.СтандартныеТабличныеЧасти); + ЗарегистрироватьРеквизитыТабличныхЧастей(СведенияОМетаданных, ОбъектМетаданных.ТабличныеЧасти); + КонецЦикла; + + Для Каждого ОбъектМетаданных Из Метаданные.ПланыСчетов Цикл + ОписаниеПодчиненногоОбъекта = ПодчиненныеОбъекты.Найти(ОбъектМетаданных, "ПодчиненныйОбъект"); + + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.СтандартныеРеквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.Реквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизитыТабличныхЧастей(СведенияОМетаданных, ОбъектМетаданных.СтандартныеТабличныеЧасти); + ЗарегистрироватьРеквизитыТабличныхЧастей(СведенияОМетаданных, ОбъектМетаданных.ТабличныеЧасти); + КонецЦикла; + + Для Каждого ОбъектМетаданных Из Метаданные.БизнесПроцессы Цикл + ОписаниеПодчиненногоОбъекта = ПодчиненныеОбъекты.Найти(ОбъектМетаданных, "ПодчиненныйОбъект"); + + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.СтандартныеРеквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.Реквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизитыТабличныхЧастей(СведенияОМетаданных, ОбъектМетаданных.ТабличныеЧасти); + КонецЦикла; + + Для Каждого ОбъектМетаданных Из Метаданные.Задачи Цикл + ОписаниеПодчиненногоОбъекта = ПодчиненныеОбъекты.Найти(ОбъектМетаданных, "ПодчиненныйОбъект"); + + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.СтандартныеРеквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.РеквизитыАдресации, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ОбъектМетаданных.Реквизиты, ОписаниеПодчиненногоОбъекта); + ЗарегистрироватьРеквизитыТабличныхЧастей(СведенияОМетаданных, ОбъектМетаданных.ТабличныеЧасти); + КонецЦикла; +КонецПроцедуры + +Процедура ЗарегистрироватьРеквизитыТабличныхЧастей(СведенияОМетаданных, ТабличныеЧасти) + Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + Если ТипЗнч(ТабличнаяЧасть) = Тип("ОбъектМетаданных") Тогда + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ТабличнаяЧасть.Реквизиты); + Иначе + ЗарегистрироватьРеквизиты(СведенияОМетаданных, ТабличнаяЧасть.СтандартныеРеквизиты); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +Процедура ЗарегистрироватьРеквизиты(СведенияОМетаданных, КоллекцияРеквизитов, ОписаниеПодчиненногоОбъекта = Неопределено) + + Для Каждого Реквизит Из КоллекцияРеквизитов Цикл + ЗарегистрироватьРеквизит(СведенияОМетаданных, Реквизит, ОписаниеПодчиненногоОбъекта); + КонецЦикла; + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Монопольное удаление помеченных. +Процедура ЗарегистрироватьРеквизит(СведенияОМетаданных, Реквизит, + ОписаниеПодчиненногоОбъекта) + ИменаПолейСвязи = ?(ЗначениеЗаполнено(ОписаниеПодчиненногоОбъекта), СтрРазделить(ОписаниеПодчиненногоОбъекта.ПоляСвязей, ","), Новый Массив); + ЭтоПолеСвязиПодчиненногоОбъекта = ИменаПолейСвязи.Найти(Реквизит.Имя) <> Неопределено; + + Для Каждого Тип Из Реквизит.Тип.Типы() Цикл + Если УдалениеПомеченныхОбъектовСлужебный.ЭтоПростойТип(Тип) Тогда + Продолжить; + КонецЕсли; + + НайденныеСведения = СведенияОМетаданных.Найти(Тип, "Тип"); + Если НайденныеСведения <> Неопределено Тогда + НайденныеСведения.Приоритет = НайденныеСведения.Приоритет + 1; + + Если ЭтоПолеСвязиПодчиненногоОбъекта Тогда + Связь = НайденныеСведения.ОписаниеПодчиненныхОбъектов.Добавить(); + Связь.Тип = Тип; + Связь.Метаданные = ОписаниеПодчиненногоОбъекта.ПодчиненныйОбъект; + Связь.ИмяРеквизита = Реквизит.Имя; + НайденныеСведения.ЕстьПодчиненныеОбъекты = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область МонопольноеУдаление // Основная механика удаления помеченных объектов. -Процедура УдалитьПомеченныеОбъектыМонопольно(ПараметрыВыполнения) +// +Процедура УдалитьПомеченныеОбъектыМонопольно(УдаляемыеОбъекты, ПараметрыВыполнения) + + ПараметрыВыполнения.ИсключенияПоискаСсылок = ОбщегоНазначения.ИсключенияПоискаСсылок(); + Для каждого ОтменаИсключения Из ОтменаИсключенийПоискаСсылокПриУдаленииОбъектов() Цикл + ПараметрыВыполнения.ИсключенияПоискаСсылок.Удалить(ОтменаИсключения); + КонецЦикла; - Если Не ПараметрыВыполнения.Свойство("ИсключенияПоискаСсылок") Тогда - ПараметрыВыполнения.Вставить("ИсключенияПоискаСсылок", ОбщегоНазначения.ИсключенияПоискаСсылок()); - КонецЕсли; Если Не ПараметрыВыполнения.Свойство("ИсключающиеПравила") Тогда ПараметрыВыполнения.Вставить("ИсключающиеПравила", Новый Соответствие); // Кэш правил исключений поиска. КонецЕсли; - УдаляемыеОбъекты = ПараметрыВыполнения.ВсеПомеченныеНаУдаление; + СведенияОМетаданных = СведенияОМетаданных(ПараметрыВыполнения, УдаляемыеОбъекты); + ПодчиненныеОбъекты = Новый Массив; + Для Сч = -(УдаляемыеОбъекты.Количество() - 1) По 0 Цикл + УдаляемыйОбъект = УдаляемыеОбъекты[-Сч]; + + Если НЕ ОбъектУдален(УдаляемыйОбъект) + И НЕ ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УдаляемыйОбъект, "ПометкаУдаления") Тогда + ПричинаНеудаления = Новый Структура; + ПричинаНеудаления.Вставить("УдаляемыйСсылка", УдаляемыйОбъект); + ПричинаНеудаления.Вставить("МестоИспользования", НСтр("ru='Удаляемый объект не помечен на удаление'")); + ПричинаНеудаления.Вставить("ОбнаруженныйМетаданные"); + ЗаписатьПричинуВРезультат(ПараметрыВыполнения, ПричинаНеудаления); + УдаляемыеОбъекты.Удалить(-Сч); + Продолжить; + КонецЕсли; + + ИнформацияОМетаданных = СведенияОМетаданных.Найти(ТипЗнч(УдаляемыйОбъект), "Тип"); + ИнформацияОМетаданных.Иерархический = Ложь;// Выполняем поиск только подчиненных элементов + ДочерниеПодчиненныеОбъекты = ДочерниеПодчиненныеЭлементы( + УдаляемыйОбъект, ИнформацияОМетаданных); + + Для Каждого ПодчиненныйОбъект Из ДочерниеПодчиненныеОбъекты Цикл + Если ПодчиненныйОбъект.ПометкаУдаления Тогда + ПодчиненныеОбъекты.Добавить(ПодчиненныйОбъект.Элемент); + КонецЕсли; + КонецЦикла; + КонецЦикла; + ОбщегоНазначенияКлиентСервер.ДополнитьМассив( + УдаляемыеОбъекты, ПодчиненныеОбъекты); Пока УдаляемыеОбъекты.Количество() > 0 Цикл - ОтметитьНачалоОбходаКоллекции(ПараметрыВыполнения, "МонопольноеУдаление"); - ПрепятствующиеУдалению = Новый ТаблицаЗначений; // Попытка удалить с контролем ссылочной целостности. @@ -642,23 +1397,25 @@ // Назначение имен колонок для таблицы конфликтов, возникших при удалении. ПрепятствующиеУдалению.Колонки[0].Имя = "УдаляемыйСсылка"; - ПрепятствующиеУдалению.Колонки[1].Имя = "ОбнаруженныйСсылка"; - ПрепятствующиеУдалению.Колонки[2].Имя = "ОбнаруженныйМетаданные"; + ПрепятствующиеУдалению.Колонки[1].Имя = "МестоИспользования"; + ПрепятствующиеУдалению.Колонки[2].Имя = "Метаданные"; ВсеСвязиВИсключениях = Истина; // Анализ причин не удаления (мест использования помеченных на удаление). - ОтметитьНачалоОбходаКоллекции(ПараметрыВыполнения, "ПрепятствующиеУдалению", ПрепятствующиеУдалению); Для Каждого СтрокаТаблицы Из ПрепятствующиеУдалению Цикл - ОтметитьПрогрессОбходаКоллекции(ПараметрыВыполнения, "ПрепятствующиеУдалению"); - // Проверка исключающих правил. - Если СвязьВИсключенияхПоискаСсылок(ПараметрыВыполнения, СтрокаТаблицы.ОбнаруженныйМетаданные, СтрокаТаблицы) Тогда + ОписаниеСвязиДанных = Новый Структура("Ссылка, Данные, Метаданные"); + ОписаниеСвязиДанных.Ссылка = СтрокаТаблицы.УдаляемыйСсылка; + ОписаниеСвязиДанных.Данные = СтрокаТаблицы.МестоИспользования; + ОписаниеСвязиДанных.Метаданные = СтрокаТаблицы.Метаданные; + Если ОбщегоНазначения.ЭтоСлужебнаяСвязьДанных(ОписаниеСвязиДанных, ПараметрыВыполнения.ИсключенияПоискаСсылок) + ИЛИ СвязьТолькоСВедущимиИзмерениямиРегистров(ОписаниеСвязиДанных) Тогда Продолжить; // Связь не препятствует удалению. КонецЕсли; // Проверка наличия обнаруженной ссылки среди удаляемых объектов. - Индекс = УдаляемыеОбъекты.Найти(СтрокаТаблицы.ОбнаруженныйСсылка); + Индекс = УдаляемыеОбъекты.Найти(СтрокаТаблицы.МестоИспользования); Если Индекс <> Неопределено Тогда Продолжить; // Связь не препятствует удалению. КонецЕсли; @@ -686,371 +1443,18 @@ КонецЦикла; ПараметрыВыполнения.Вставить("Удаленные", УдаляемыеОбъекты); - ПараметрыВыполнения.Удалить("ИсключенияПоискаСсылок"); - ПараметрыВыполнения.Удалить("ИсключающиеПравила"); - -КонецПроцедуры - -// Проверяет что связь в исключениях. -Функция СвязьВИсключенияхПоискаСсылок(ПараметрыВыполнения, ОбнаруженныйМетаданные, СтрокаТаблицы) - // Определение исключающего правила для объекта метаданных, препятствующего удалению: - // Для регистров (т.н. "необъектных таблиц") - массива реквизитов для поиска в записи регистра. - // Для ссылочных типов (т.н. "объектных таблиц") - готового запроса для поиска в реквизитах. - Правило = ПараметрыВыполнения.ИсключающиеПравила[ОбнаруженныйМетаданные]; // Кэш. - Если Правило = Неопределено Тогда - Правило = СформироватьИсключающееПравило(ПараметрыВыполнения, ОбнаруженныйМетаданные); - ПараметрыВыполнения.ИсключающиеПравила.Вставить(ОбнаруженныйМетаданные, Правило); - КонецЕсли; - - // Проверка исключающего правила. - Если Правило = "*" Тогда - Возврат Истина; // Можно удалять (обнаруженный объект метаданных не мешает). - ИначеЕсли ТипЗнч(Правило) = Тип("Массив") Тогда // Имена измерений регистра. - Для Каждого ИмяРеквизита Из Правило Цикл - Если СтрокаТаблицы.ОбнаруженныйСсылка[ИмяРеквизита] = СтрокаТаблицы.УдаляемыйСсылка Тогда - Возврат Истина; // Можно удалять (обнаруженная запись регистра не мешает). - КонецЕсли; - КонецЦикла; - ИначеЕсли ТипЗнч(Правило) = Тип("Запрос") Тогда // Запрос к ссылочному объекту. - Правило.УстановитьПараметр("УдаляемыйСсылка", СтрокаТаблицы.УдаляемыйСсылка); - Правило.УстановитьПараметр("ОбнаруженныйСсылка", СтрокаТаблицы.ОбнаруженныйСсылка); - Если Не Правило.Выполнить().Пустой() Тогда - Возврат Истина; // Можно удалять (обнаруженная ссылка не мешает). - КонецЕсли; - КонецЕсли; - - Возврат Ложь; -КонецФункции - -// Компонует правило оптимально для проверки. -Функция СформироватьИсключающееПравило(ПараметрыВыполнения, ОбнаруженныйМетаданные) - ИсключениеПоиска = ПараметрыВыполнения.ИсключенияПоискаСсылок[ОбнаруженныйМетаданные]; - Если ИсключениеПоиска = "*" Тогда - Возврат "*"; // Можно удалять (обнаруженный объект метаданных не мешает). - КонецЕсли; - - // Формирование исключающего правила. - ЭтоРегистрСведений = Метаданные.РегистрыСведений.Содержит(ОбнаруженныйМетаданные); - Если ЭтоРегистрСведений - Или Метаданные.РегистрыБухгалтерии.Содержит(ОбнаруженныйМетаданные) // ЭтоРегистрБухгалтерии - Или Метаданные.РегистрыНакопления.Содержит(ОбнаруженныйМетаданные) Тогда // ЭтоРегистрНакопления - - Правило = Новый Массив; - Если ЭтоРегистрСведений Тогда - Для Каждого Измерение Из ОбнаруженныйМетаданные.Измерения Цикл - Если Измерение.Ведущее Тогда - Правило.Добавить(Измерение.Имя); - КонецЕсли; - КонецЦикла; - Иначе - Для Каждого Измерение Из ОбнаруженныйМетаданные.Измерения Цикл - Правило.Добавить(Измерение.Имя); - КонецЦикла; - КонецЕсли; - - Если ТипЗнч(ИсключениеПоиска) = Тип("Массив") Тогда - Для Каждого ИмяРеквизита Из ИсключениеПоиска Цикл - Если Правило.Найти(ИмяРеквизита) = Неопределено Тогда - Правило.Добавить(ИмяРеквизита); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ИначеЕсли ТипЗнч(ИсключениеПоиска) = Тип("Массив") Тогда - - ТекстыЗапросов = Новый Соответствие; - ИмяКорневойТаблицы = ОбнаруженныйМетаданные.ПолноеИмя(); - - Для Каждого ПутьКРеквизиту Из ИсключениеПоиска Цикл - ПозицияТочки = СтрНайти(ПутьКРеквизиту, "."); - Если ПозицияТочки = 0 Тогда - ПолноеИмяТаблицы = ИмяКорневойТаблицы; - ИмяРеквизита = ПутьКРеквизиту; - Иначе - ПолноеИмяТаблицы = ИмяКорневойТаблицы + "." + Лев(ПутьКРеквизиту, ПозицияТочки - 1); - ИмяРеквизита = Сред(ПутьКРеквизиту, ПозицияТочки + 1); - КонецЕсли; - - ТекстВложенногоЗапроса = ТекстыЗапросов.Получить(ПолноеИмяТаблицы); - Если ТекстВложенногоЗапроса = Неопределено Тогда - ТекстВложенногоЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - |ИЗ - | "+ ПолноеИмяТаблицы +" КАК Таблица - |ГДЕ - | Таблица.Ссылка = &ОбнаруженныйСсылка - | И ("; - Иначе - ТекстВложенногоЗапроса = ТекстВложенногоЗапроса + Символы.ПС + Символы.Таб + Символы.Таб + "ИЛИ "; - КонецЕсли; - ТекстВложенногоЗапроса = ТекстВложенногоЗапроса + "Таблица." + ИмяРеквизита + " = &УдаляемыйСсылка"; - - ТекстыЗапросов.Вставить(ПолноеИмяТаблицы, ТекстВложенногоЗапроса); - КонецЦикла; - - ТекстЗапроса = ""; - Для Каждого КлючИЗначение Из ТекстыЗапросов Цикл - Если ТекстЗапроса <> "" Тогда - ТекстЗапроса = ТекстЗапроса + Символы.ПС + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + Символы.ПС; - КонецЕсли; - ТекстЗапроса = ТекстЗапроса + КлючИЗначение.Значение + ")"; - КонецЦикла; - - Правило = Новый Запрос; - Правило.Текст = ТекстЗапроса; - - Иначе - - Правило = ""; - - КонецЕсли; - - Возврат Правило; -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Общая механика. - -// Инициализирует структуру параметров, необходимых для выполнения других служебных методов. -Процедура ИнициализироватьПараметры(ПараметрыВыполнения) - // Определение параметров работы программы. - Если Не ПараметрыВыполнения.Свойство("ИскатьПомеченные") Тогда - ПараметрыВыполнения.Вставить("ИскатьПомеченные", Истина); - КонецЕсли; - Если Не ПараметрыВыполнения.Свойство("УдалятьПомеченные") Тогда - ПараметрыВыполнения.Вставить("УдалятьПомеченные", Истина); - КонецЕсли; - Если Не ПараметрыВыполнения.Свойство("Монопольно") Тогда - ПараметрыВыполнения.Вставить("Монопольно", Ложь); - КонецЕсли; - Если Не ПараметрыВыполнения.Свойство("ТехнологическиеОбъекты") Тогда - ПараметрыВыполнения.Вставить("ТехнологическиеОбъекты", Новый Массив); - КонецЕсли; - Если Не ПараметрыВыполнения.Свойство("ПользовательскиеОбъекты") Тогда - ПараметрыВыполнения.Вставить("ПользовательскиеОбъекты", Новый Массив); - КонецЕсли; - Если Не ПараметрыВыполнения.Свойство("ВсеПомеченныеНаУдаление") Тогда - ПараметрыВыполнения.Вставить("ВсеПомеченныеНаУдаление", Новый Массив); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПараметрыВыполнения.ВсеПомеченныеНаУдаление, ПараметрыВыполнения.ТехнологическиеОбъекты); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПараметрыВыполнения.ВсеПомеченныеНаУдаление, ПараметрыВыполнения.ПользовательскиеОбъекты); - КонецЕсли; - Если Не ПараметрыВыполнения.Свойство("МодельСервиса") Тогда - ПараметрыВыполнения.Вставить("МодельСервиса", ОбщегоНазначения.РазделениеВключено()); - Если ПараметрыВыполнения.МодельСервиса Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - РазделительОсновныхДанных = МодульРаботаВМоделиСервиса.РазделительОсновныхДанных(); - РазделительВспомогательныхДанных = МодульРаботаВМоделиСервиса.РазделительВспомогательныхДанных(); - Иначе - РазделительОсновныхДанных = Неопределено; - РазделительВспомогательныхДанных = Неопределено; - КонецЕсли; - - ПараметрыВыполнения.Вставить("ВОбластиДанных", ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()); - ПараметрыВыполнения.Вставить("РазделительОсновныхДанных", РазделительОсновныхДанных); - ПараметрыВыполнения.Вставить("РазделительВспомогательныхДанных", РазделительВспомогательныхДанных); - КонецЕсли; - КонецЕсли; - Если Не ПараметрыВыполнения.Свойство("ИнформацияОТипах") Тогда - ПараметрыВыполнения.Вставить("ИнформацияОТипах", Новый Соответствие); - КонецЕсли; - - ПрепятствующиеУдалению = Новый ТаблицаЗначений; - ПрепятствующиеУдалению.Колонки.Добавить("УдаляемыйСсылка"); - ПрепятствующиеУдалению.Колонки.Добавить("УдаляемыйТип", Новый ОписаниеТипов("Тип")); - ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйСсылка"); - ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйТип", Новый ОписаниеТипов("Тип")); - ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйСтатус", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(10))); - ПрепятствующиеУдалению.Колонки.Добавить("Подробно", Новый ОписаниеТипов("Строка")); - - ПрепятствующиеУдалению.Индексы.Добавить("УдаляемыйСсылка"); - ПрепятствующиеУдалению.Индексы.Добавить("ОбнаруженныйСсылка"); - - ПараметрыВыполнения.Вставить("Удаленные", Новый Массив); - ПараметрыВыполнения.Вставить("НеУдаленные", Новый Массив); - ПараметрыВыполнения.Вставить("ПрепятствующиеУдалению", ПрепятствующиеУдалению); - ПараметрыВыполнения.Вставить("ПовторноУдаляемые", Новый Массив); - ПараметрыВыполнения.Вставить("Интерактивное", ПараметрыВыполнения.Свойство("ПериодЗаписи")); - - ИнициализироватьПараметрыДляРегистрацииПрогресса(ПараметрыВыполнения); -КонецПроцедуры - -// Формирует массив помеченных на удаление с учетом разделения. -Процедура ПолучитьПомеченныеНаУдаление(ПараметрыВыполнения) - - ОтметитьНачалоОбходаКоллекции(ПараметрыВыполнения, "ПередПоискомПомеченныхНаУдаление"); - УдалениеПомеченныхОбъектовПереопределяемый.ПередПоискомПомеченныхНаУдаление(ПараметрыВыполнения); - - УстановитьПривилегированныйРежим(Истина); - - // Получение списка помеченных на удаление. - ОтметитьНачалоОбходаКоллекции(ПараметрыВыполнения, "ПоискПомеченныхНаУдаление"); - ПараметрыВыполнения.ВсеПомеченныеНаУдаление = НайтиПомеченныеНаУдаление(); - - // Распределение помеченных на удаление по коллекциям. - ОтметитьНачалоОбходаКоллекции(ПараметрыВыполнения, "ВсеПомеченныеНаУдаление"); - Количество = ПараметрыВыполнения.ВсеПомеченныеНаУдаление.Количество(); - Для Номер = 1 По Количество Цикл - Индекс = Количество - Номер; - Ссылка = ПараметрыВыполнения.ВсеПомеченныеНаУдаление[Индекс]; - - Информация = СформироватьИнформациюОТипах(ПараметрыВыполнения, ТипЗнч(Ссылка)); - ОтметитьПрогрессОбходаКоллекции(ПараметрыВыполнения, "ВсеПомеченныеНаУдаление"); - - Если ПараметрыВыполнения.МодельСервиса - И ПараметрыВыполнения.ВОбластиДанных - И Не Информация.Разделенный Тогда - ПараметрыВыполнения.ВсеПомеченныеНаУдаление.Удалить(Индекс); - Продолжить; // Неразделенные объекты запрещено изменять из области данных. - КонецЕсли; - - Если Информация.ЕстьПредопределенные И Информация.Предопределенные.Найти(Ссылка) <> Неопределено Тогда - ПараметрыВыполнения.ВсеПомеченныеНаУдаление.Удалить(Индекс); - Продолжить; // Предопределенные элементы создаются и удаляются только автоматически. - КонецЕсли; - - Если Информация.Технический = Истина Тогда - ПараметрыВыполнения.ТехнологическиеОбъекты.Добавить(Ссылка); - Иначе - ПараметрыВыполнения.ПользовательскиеОбъекты.Добавить(Ссылка); - КонецЕсли; - КонецЦикла; КонецПроцедуры // Формирует информацию о типе объекта метаданных, как то: полное имя, представления, вид и т.п. -Функция СформироватьИнформациюОТипах(ПараметрыВыполнения, Тип) Экспорт - Информация = ПараметрыВыполнения.ИнформацияОТипах.Получить(Тип); // Кэш. - Если Информация <> Неопределено Тогда - Возврат Информация; - КонецЕсли; - - Информация = Новый Структура("ПолноеИмя, ПредставлениеЭлемента, ПредставлениеСписка, - |Вид, Ссылочный, Технический, Разделенный, - |Иерархический, ТекстЗапросаПоИерархии, - |ЕстьПодчиненные, ТекстЗапросаПоПодчиненным, - |ЕстьПредопределенные, Предопределенные"); - - // Поиск объекта метаданных. - ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); - - // Заполнение базовой информации. - Информация.ПолноеИмя = ВРег(ОбъектМетаданных.ПолноеИмя()); - - // Представления: элемента и списка. - Информация.ПредставлениеЭлемента = ОбщегоНазначения.ПредставлениеОбъекта(ОбъектМетаданных); - Информация.ПредставлениеСписка = ОбщегоНазначения.ПредставлениеСписка(ОбъектМетаданных); - - // Вид и его свойства. - Информация.Вид = Лев(Информация.ПолноеИмя, СтрНайти(Информация.ПолноеИмя, ".")-1); - ЭтоСправочник = Ложь; - ЭтоДокумент = Ложь; - ЭтоПеречисление = Ложь; - ЭтоПланВидовХарактеристик = Ложь; - ЭтоПланСчетов = Ложь; - ЭтоПланВидовРасчета = Ложь; - ЭтоБизнесПроцесс = Ложь; - ЭтоЗадача = Ложь; - ЭтоПланОбмена = Ложь; - Если Информация.Вид = "СПРАВОЧНИК" Тогда - ЭтоСправочник = Истина; - ИначеЕсли Информация.Вид = "ДОКУМЕНТ" Тогда - ЭтоДокумент = Истина; - ИначеЕсли Информация.Вид = "ПЕРЕЧИСЛЕНИЕ" Тогда - ЭтоПеречисление = Истина; - ИначеЕсли Информация.Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда - ЭтоПланВидовХарактеристик = Истина; - ИначеЕсли Информация.Вид = "ПЛАНСЧЕТОВ" Тогда - ЭтоПланСчетов = Истина; - ИначеЕсли Информация.Вид = "ПЛАНВИДОВРАСЧЕТА" Тогда - ЭтоПланВидовРасчета = Истина; - ИначеЕсли Информация.Вид = "БИЗНЕСПРОЦЕСС" Тогда - ЭтоБизнесПроцесс = Истина; - ИначеЕсли Информация.Вид = "ЗАДАЧА" Тогда - ЭтоЗадача = Истина; - ИначеЕсли Информация.Вид = "ПЛАНОБМЕНА" Тогда - ЭтоПланОбмена = Истина; - КонецЕсли; - - Информация.Ссылочный = (ЭтоСправочник Или ЭтоДокумент Или ЭтоПеречисление Или ЭтоПланВидовХарактеристик - Или ЭтоПланСчетов Или ЭтоПланВидовРасчета Или ЭтоБизнесПроцесс Или ЭтоЗадача Или ЭтоПланОбмена); - Если ЭтоСправочник Или ЭтоПланВидовХарактеристик Тогда - Информация.Иерархический = ОбъектМетаданных.Иерархический; - Иначе - Информация.Иерархический = ЭтоПланСчетов; - КонецЕсли; - Если Информация.Иерархический Тогда - ШаблонЗапроса = "ВЫБРАТЬ Ссылка, ПометкаУдаления ИЗ &ПолноеИмя ГДЕ Родитель = &УдаляемыйСсылка"; - Информация.ТекстЗапросаПоИерархии = СтрЗаменить(ШаблонЗапроса, "&ПолноеИмя", Информация.ПолноеИмя); - КонецЕсли; - - Информация.ЕстьПодчиненные = Ложь; - Информация.ТекстЗапросаПоПодчиненным = ""; - Если ЭтоСправочник Или ЭтоПланВидовХарактеристик Или ЭтоПланОбмена Или ЭтоПланСчетов Или ЭтоПланВидовРасчета Тогда - - ШаблонЗапроса = "ВЫБРАТЬ Ссылка, ПометкаУдаления ИЗ Справочник.&Имя ГДЕ Владелец = &УдаляемыйСсылка"; - ТекстЗапроса = ""; - - Для Каждого Справочник Из Метаданные.Справочники Цикл - Если Не Справочник.Владельцы.Содержит(ОбъектМетаданных) Тогда - Продолжить; - КонецЕсли; - Если Информация.ЕстьПодчиненные = Ложь Тогда - Информация.ЕстьПодчиненные = Истина; - Иначе - ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС; - КонецЕсли; - ТекстЗапроса = ТекстЗапроса + СтрЗаменить(ШаблонЗапроса, "&Имя", Справочник.Имя); - КонецЦикла; - - Информация.ТекстЗапросаПоПодчиненным = ТекстЗапроса; - КонецЕсли; - - Информация.Технический = ЭтоТехническийОбъект(Информация.ПолноеИмя); - Если ПараметрыВыполнения.МодельСервиса Тогда - - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - ЭтоРазделенныйОбъектМетаданных = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных); - Иначе - ЭтоРазделенныйОбъектМетаданных = Ложь; - КонецЕсли; - Информация.Разделенный = ЭтоРазделенныйОбъектМетаданных; - - КонецЕсли; - - Если ЭтоСправочник Или ЭтоПланВидовХарактеристик Или ЭтоПланСчетов Или ЭтоПланВидовРасчета Тогда - ТекстЗапроса = "ВЫБРАТЬ Ссылка ИЗ &ИмяТаблицы ГДЕ Предопределенный И ПометкаУдаления"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", Информация.ПолноеИмя); - Запрос = Новый Запрос(ТекстЗапроса); - Информация.Предопределенные = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - Информация.ЕстьПредопределенные = Информация.Предопределенные.Количество() > 0; - Иначе - Информация.ЕстьПредопределенные = Ложь; - КонецЕсли; - - ПараметрыВыполнения.ИнформацияОТипах.Вставить(Тип, Информация); - +// +Функция СформироватьИнформациюОТипах(ПараметрыВыполнения, Тип) + КешИнформацииОТипах = ПараметрыВыполнения.КешИнформацииОТипах; + Информация = УдалениеПомеченныхОбъектовСлужебный.ИнформацияОТипе(Тип, КешИнформацииОТипах); Возврат Информация; КонецФункции -Функция ЭтоТехническийОбъект(Знач ПолноеИмяОбъекта) - - ЭтоТехническийОбъект = Ложь; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - МодульОтчетыСервер = ОбщегоНазначения.ОбщийМодуль("ОтчетыСервер"); - ЭтоТехническийОбъект = МодульОтчетыСервер.ЭтоТехническийОбъект(ПолноеИмяОбъекта); - КонецЕсли; - - Возврат ЭтоТехническийОбъект - Или ПолноеИмяОбъекта = ВРег("Справочник.ИдентификаторыОбъектовМетаданных") - Или ПолноеИмяОбъекта = ВРег("Справочник.ИдентификаторыОбъектовРасширений") - Или ПолноеИмяОбъекта = ВРег("Справочник.ВерсииРасширений"); - -КонецФункции - // Регистрирует предупреждение в журнале регистрации. +// Процедура ЗаписатьПредупреждение(Ссылка, ИнформацияОбОшибке) Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда ТекстДляЖурнала = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); @@ -1066,13 +1470,6 @@ ТекстДляЖурнала); КонецПроцедуры -// Регистрация причины неудаления. -// -// Параметры: -// ПараметрыВыполнения - Структура - где: -// * ПрепятствующиеУдалению - ТаблицаЗначений - -// СтрокаТаблицы - СтрокаТаблицыЗначений - -// Процедура ЗаписатьПричинуВРезультат(ПараметрыВыполнения, СтрокаТаблицы) УдаляемыйТип = ТипЗнч(СтрокаТаблицы.УдаляемыйСсылка); УдаляемыйИнформация = СформироватьИнформациюОТипах(ПараметрыВыполнения, УдаляемыйТип); @@ -1084,160 +1481,64 @@ Если ПараметрыВыполнения.НеУдаленные.Найти(СтрокаТаблицы.УдаляемыйСсылка) = Неопределено Тогда ПараметрыВыполнения.НеУдаленные.Добавить(СтрокаТаблицы.УдаляемыйСсылка); КонецЕсли; - + Причина = ПараметрыВыполнения.ПрепятствующиеУдалению.Добавить(); ЗаполнитьЗначенияСвойств(Причина, СтрокаТаблицы); - Причина.УдаляемыйТип = УдаляемыйТип; - Причина.ОбнаруженныйТип = ТипЗнч(Причина.ОбнаруженныйСсылка); - - Если СтрокаТаблицы.ОбнаруженныйСсылка = Неопределено Тогда - Если Метаданные.Константы.Содержит(СтрокаТаблицы.ОбнаруженныйМетаданные) Тогда - Причина.ОбнаруженныйТип = Тип("КонстантаМенеджерЗначения." + СтрокаТаблицы.ОбнаруженныйМетаданные.Имя); - Иначе - Причина.ОбнаруженныйСсылка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + + МестоИспользования = СтрокаТаблицы.МестоИспользования; + + Если ТипЗнч(МестоИспользования) = Тип("Строка") Тогда + Причина.ОписаниеОшибки = МестоИспользования; + Причина.МестоИспользования = Неопределено; + КонецЕсли; + + Если МестоИспользования = Неопределено Тогда + Если НЕ Метаданные.Константы.Содержит(СтрокаТаблицы.Метаданные) Тогда + Причина.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Обнаружены неразрешимые ссылки (%1)'"), СтрокаТаблицы.ОбнаруженныйМетаданные.Представление()); - Причина.ОбнаруженныйТип = Тип("Строка"); Возврат; КонецЕсли; КонецЕсли; - // Регистрация информации об объектах метаданных (если требуется). - ОбнаруженныйИнформация = СформироватьИнформациюОТипах(ПараметрыВыполнения, Причина.ОбнаруженныйТип); - - Если ОбнаруженныйИнформация.Вид = "ДОКУМЕНТ" Тогда - Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Причина.ОбнаруженныйСсылка, "ПометкаУдаления, Проведен"); - Причина.ОбнаруженныйСтатус = ?(Значения.ПометкаУдаления, "Удален", ?(Значения.Проведен, "Проведен", "")); - ИначеЕсли ОбнаруженныйИнформация.Ссылочный Тогда - Причина.ОбнаруженныйСтатус = ?(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Причина.ОбнаруженныйСсылка, "ПометкаУдаления"), "Удален", ""); - КонецЕсли; КонецПроцедуры -Функция ОбъектыДопускающиеУдаление() +Функция СвязьТолькоСВедущимиИзмерениямиРегистров(ОписаниеСвязиДанных) + Результат = Ложь; + + Если ОбщегоНазначения.ЭтоРегистр(ОписаниеСвязиДанных.Метаданные) Тогда + + Для каждого Измерение Из ОписаниеСвязиДанных.Метаданные.Измерения Цикл + + Если ОписаниеСвязиДанных.Данные[Измерение.Имя] = ОписаниеСвязиДанных.Ссылка + И Измерение.Ведущее Тогда + Результат = Истина; + Прервать; + КонецЕсли; + + Если ОписаниеСвязиДанных.Данные["Регистратор"] = ОписаниеСвязиДанных.Ссылка Тогда + Результат = Истина; + КонецЕсли; + + КонецЦикла; - Результат = Новый Массив; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(Результат); КонецЕсли; Возврат Результат; - КонецФункции -Процедура ИсключениеОбъектовДопускающихУдаление(ПрепятствующиеУдалению, ДопускающиеУдаление) - - Индекс = ПрепятствующиеУдалению.Количество() - 1; - Пока Индекс >= 0 Цикл - Если ДопускающиеУдаление.Найти(ПрепятствующиеУдалению[Индекс].Метаданные) <> Неопределено Тогда - ПрепятствующиеУдалению.Удалить(Индекс); - КонецЕсли; - Индекс = Индекс - 1; - КонецЦикла; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Передача информации на клиент. -// Инициализирует структуру параметров, необходимых для передачи на клиент. -Процедура ИнициализироватьПараметрыДляРегистрацииПрогресса(ПараметрыВыполнения) - Если Не ПараметрыВыполнения.Интерактивное Тогда - Возврат; - КонецЕсли; - - ПараметрыВыполнения.Вставить("ДостигнутыйПроцент", 0); - ПараметрыВыполнения.Вставить("Диапазон", 0); - ПараметрыВыполнения.Вставить("СледующийКонтрольныйНомер", 0); - ПараметрыВыполнения.Вставить("Номер", 0); - ПараметрыВыполнения.Вставить("Всего", 0); - ПараметрыВыполнения.Вставить("Время", ТекущаяДатаСеанса() - 0.1); - - ПараметрыВыполнения.Вставить("Диапазоны", Новый Соответствие); - - ОбщийВес = 0; - Если ПараметрыВыполнения.ИскатьПомеченные Тогда - ПараметрыВыполнения.Диапазоны.Вставить("ПередПоискомПомеченныхНаУдаление", 5); - ПараметрыВыполнения.Диапазоны.Вставить("ПоискПомеченныхНаУдаление", 4); - ПараметрыВыполнения.Диапазоны.Вставить("ВсеПомеченныеНаУдаление", 1); - ОбщийВес = ОбщийВес + 10; - КонецЕсли; - Если ПараметрыВыполнения.УдалятьПомеченные Тогда - Если ПараметрыВыполнения.Монопольно Тогда - ПараметрыВыполнения.Диапазоны.Вставить("МонопольноеУдаление", 80); - ПараметрыВыполнения.Диапазоны.Вставить("ПрепятствующиеУдалению", 10); - Иначе // Не монопольно. - ПараметрыВыполнения.Диапазоны.Вставить("ТехнологическиеОбъекты", 10); - ПараметрыВыполнения.Диапазоны.Вставить("ПользовательскиеОбъекты", 70); - ПараметрыВыполнения.Диапазоны.Вставить("ПовторноУдаляемые", 10); - КонецЕсли; - ОбщийВес = ОбщийВес + 90; - КонецЕсли; - Если ОбщийВес <> 0 И ОбщийВес <> 100 Тогда - Коэффициент = 100/ОбщийВес; - Для Каждого КлючИЗначение Из ПараметрыВыполнения.Диапазоны Цикл - ПараметрыВыполнения.Диапазоны.Вставить(КлючИЗначение.Ключ, Окр(КлючИЗначение.Значение*Коэффициент, 0)); - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - -// Регистрирует начало процесса. -Процедура ОтметитьНачалоОбходаКоллекции(ПараметрыВыполнения, ИмяКоллекции, Коллекция = Неопределено) - Если Не ПараметрыВыполнения.Интерактивное Тогда - Возврат; - КонецЕсли; - ПараметрыВыполнения.ДостигнутыйПроцент = ПараметрыВыполнения.ДостигнутыйПроцент + ПараметрыВыполнения.Диапазон; - ПараметрыВыполнения.Диапазон = ПараметрыВыполнения.Диапазоны[ИмяКоллекции]; - ПараметрыВыполнения.СледующийКонтрольныйНомер = 0; - ПараметрыВыполнения.Номер = 0; - - Если Коллекция <> Неопределено Или ПараметрыВыполнения.Свойство(ИмяКоллекции, Коллекция) Тогда - ПараметрыВыполнения.Всего = Коллекция.Количество(); - Иначе - ПараметрыВыполнения.Всего = 1; - ОтметитьПрогрессОбходаКоллекции(ПараметрыВыполнения, ИмяКоллекции); - КонецЕсли; -КонецПроцедуры - -// Регистрирует прогресс. +// Параметры: +// ПараметрыВыполнения - см. ПараметрыУдаления +// ИмяКоллекции - Строка +// Процедура ОтметитьПрогрессОбходаКоллекции(ПараметрыВыполнения, ИмяКоллекции) - Если Не ПараметрыВыполнения.Интерактивное Тогда - Возврат; - КонецЕсли; - - // Проверяется целесообразность передачи информации на клиент. - Если ПараметрыВыполнения.ИскатьПомеченные Тогда - Возврат; // Если текущий шаг - расчет помеченных, то оповещать клиент не требуется. - КонецЕсли; - - // Проверяется целесообразность передачи информации на клиент. - Если ПараметрыВыполнения.Всего < 10 Тогда - Возврат; // Если всего обрабатывается меньше 10 объектов - то оповещать клиент не требуется. - КонецЕсли; - - // Регистрация прогресса. ПараметрыВыполнения.Номер = ПараметрыВыполнения.Номер + 1; - // Проверка что подошло время передачи информации на клиент. - Если ТекущаяДатаСеанса() < ПараметрыВыполнения.Время Тогда - Возврат; // Не чаще, чем раз в 3 секунды. - КонецЕсли; - - // Установка следующего времени передачи информации на клиент. - ПараметрыВыполнения.Время = ПараметрыВыполнения.Время + ПараметрыВыполнения.ПериодЗаписи; - - // Проверка что набралось достаточно изменений для передачи информации на клиент. - Если ПараметрыВыполнения.Номер < ПараметрыВыполнения.СледующийКонтрольныйНомер Тогда - Возврат; // Не чаще, чем набралось измененных объектов для изменения прогресса на 1 шаг. - КонецЕсли; - ШагОповещения = Цел(ПараметрыВыполнения.Всего / 100) + 1; - ПараметрыВыполнения.СледующийКонтрольныйНомер = ПараметрыВыполнения.Номер + ШагОповещения; - - // Расчет информации для передачи на клиент. - - Процент = ПараметрыВыполнения.ДостигнутыйПроцент - + ПараметрыВыполнения.Диапазон * ПараметрыВыполнения.Номер / ПараметрыВыполнения.Всего; + Процент = (ПараметрыВыполнения.КоличествоОбработанных) + / ПараметрыВыполнения.КоличествоУдаляемых; // Подготовка передаваемых параметров. Если ИмяКоллекции = "ПередПоискомПомеченныхНаУдаление" Тогда @@ -1252,27 +1553,16 @@ Текст = НСтр("ru = 'Анализ помеченных на удаление.'"); - ИначеЕсли ИмяКоллекции = "ТехнологическиеОбъекты" Тогда - - Текст = НСтр("ru = 'Подготовка к удалению.'"); - ИначеЕсли ИмяКоллекции = "МонопольноеУдаление" Тогда Текст = НСтр("ru = 'Выполняется удаление объектов.'"); ИначеЕсли ИмяКоллекции = "ПользовательскиеОбъекты" Тогда - НеУдалено = ПараметрыВыполнения.НеУдаленные.Количество(); - ПредставлениеНомер = Формат(ПараметрыВыполнения.Номер, "ЧН=0; ЧГ="); - ПредставлениеВсего = Формат(ПараметрыВыполнения.Всего, "ЧН=0; ЧГ="); - ПредставлениеНеУдалено = Формат(НеУдалено, "ЧН=0; ЧГ="); - Если НеУдалено = 0 Тогда // Переход на СтрШаблон невозможен. - Текст = НСтр("ru = 'Удалено: %1 из %2 объектов.'"); - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ПредставлениеНомер, ПредставлениеВсего); - Иначе - Текст = НСтр("ru = 'Обработано: %1 из %2 объектов, из них не удалено: %3.'"); - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ПредставлениеНомер, ПредставлениеВсего, ПредставлениеНеУдалено); - КонецЕсли; + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обработано %1 из %2'"), + ПараметрыВыполнения.КоличествоОбработанных, + ПараметрыВыполнения.КоличествоУдаляемых); ИначеЕсли ИмяКоллекции = "ПовторноУдаляемые" Тогда @@ -1294,10 +1584,36 @@ КонецЕсли; - // Регистрация сообщения для чтения из клиентского сеанса. ДлительныеОперации.СообщитьПрогресс(Процент, Текст); КонецПроцедуры #КонецОбласти +Функция ОбъединениеТаблиц(Таблица1, Таблица2, СохранятьПорядок = Ложь) + Возврат УдалениеПомеченныхОбъектовСлужебный.ОбъединениеТаблиц(Таблица1, Таблица2, СохранятьПорядок); +КонецФункции + +Процедура ОтправитьСтатистику(РежимУдаления, ВремяВыполнения, КоличествоУдаляемыхЭлементов) + + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; + + ЦентрМониторингаМенеджер = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + ЦентрМониторингаМенеджер.ЗаписатьОперациюБизнесСтатистики( + "БазоваяФункциональность.УдалениеПомеченных."+РежимУдаления, ВремяВыполнения, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Количество элементов: %1'"), КоличествоУдаляемыхЭлементов)); + +КонецПроцедуры + +Функция ОтменаИсключенийПоискаСсылокПриУдаленииОбъектов() + + ОтменаИсключений = Новый Массив; + ОтменаИсключений.Добавить(Метаданные.Справочники.ВнешниеПользователи); + Возврат ОтменаИсключений; + +КонецФункции + +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo index efe09118a..cfac3cfc4 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo @@ -31,6 +31,29 @@ PersonalComputer MobileDevice + + НастройкиУдаленияОбъектов + + ru + Настройки удаления объектов + + PersonalComputer + MobileDevice + + + ВыборОбъектовМетаданныхПоПодсистемам + + ru + Выбор объектов метаданных по подсистемам + + + + ru + + + PersonalComputer + MobileDevice + УдалениеПомеченныхОбъектов diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl index 524bb2648..7dfd950b4 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -1100,7 +1100,8 @@ // Параметры: // ВыбранныеФайлы - Массив из Строка - результат выбора файла. // ДополнительныеПараметры - Структура - произвольные дополнительные параметры: -// * ОбъектХранения - Структура, ФормаКлиентскогоПриложения - приемник для хранения свойства. +// * ОбъектХранения - Структура +// - ФормаКлиентскогоПриложения - приемник для хранения свойства. // * ИмяСвойства - Строка - имя свойства объекта хранения. // * Элемент - ПолеФормы - источник события выбора файла. // @@ -1146,7 +1147,7 @@ // в зависимости от пометки текущей строки. // // Параметры: -// ТекСтрока - Строка дерева значений. +// ТекСтрока - строка дерева значений. // &НаКлиенте Процедура УстановитьПометкиПодчиненных(ТекСтрока, ИмяФлажка) @@ -1171,7 +1172,7 @@ // в зависимости от пометки текущей строки. // // Параметры: -// ТекСтрока - Строка дерева значений. +// ТекСтрока - строка дерева значений. // &НаКлиенте Процедура УстановитьПометкиРодителей(ТекСтрока, ИмяФлажка) @@ -1898,7 +1899,7 @@ // Возвращает Истина, если клиентское приложение запущено под управлением ОС Windows. // // Возвращаемое значение: -// Булево - Если нет клиентского приложения, возвращается Ложь. +// Булево - если нет клиентского приложения, возвращается Ложь. // &НаКлиенте Функция ЭтоWindowsКлиент() diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl index ba6ab5ae2..c56405c67 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl @@ -76,8 +76,9 @@ КонецПроцедуры // Параметры: -// ВыбранныеФайлы - Массив из Строка, Неопределено - результат выбора файла. -// ДополнительныеПараметры - Структура - произвольные параметры: +// ВыбранныеФайлы - Массив из Строка +// - Неопределено - результат выбора файла. +// ДополнительныеПараметры - Структура: // * Элемент - ПолеФормы - источник выбора файла. // &НаКлиенте diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index ac0e5656f..4e4b40b3d 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -191,11 +191,11 @@ // Преобразует значения из строки в массив, используя указанный разделитель. // // Параметры: -// Стр - Строка - Разбираемая строка. -// Разделитель - Строка - подстрока разделитель. +// Стр - Строка - разбираемая строка. +// Разделитель - Строка - подстрока разделитель. // // Возвращаемое значение: -// Массив - полученный массив значений. +// Массив из Строка - полученный массив значений. // Функция МассивИзСтроки(Знач Стр, Разделитель=",") Экспорт @@ -208,7 +208,7 @@ ПраваяЧасть = ОтделитьРазделителем(Стр, Разделитель); КонецЦикла; - Возврат(Массив); + Возврат Массив; КонецФункции @@ -221,13 +221,13 @@ // Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: // - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки // включаются в результат. -// Е если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в +// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в // случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а // при других разделителях результатом функции будет пустой массив. // // // Возвращаемое значение: -// Массив - массив строк. +// Массив из Строка - массив строк. // // Пример: // РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые @@ -312,12 +312,12 @@ // Разбирает строку, выделяя из нее префикс и числовую часть. // // Параметры: -// Стр - Строка - Разбираемая строка; -// ЧисловаяЧасть - Число - Переменная, в которую возвратится числовая часть строки; -// Режим - Строка - Если "Число", то возвратит числовую часть, иначе - префикс. +// Стр - Строка - разбираемая строка; +// ЧисловаяЧасть - Число - переменная, в которую возвратится числовая часть строки; +// Режим - Строка - если "Число", то возвратит числовую часть, иначе - префикс. // // Возвращаемое значение: -// Строка - Префикс строки +// Строка - префикс строки // Функция ПолучитьПрефиксЧислоНомера(Знач Стр, ЧисловаяЧасть = "", Режим = "") Экспорт @@ -408,7 +408,7 @@ // не является ошибкой проверки конфигурации. // // Параметры: -// Стр - Строка - Номер или код; +// Стр - Строка - номер или код; // Добавок - Строка - добавляемая к префиксу подстрока; // Длина - Число - требуемая результирующая длина строки; // Режим - Строка - "Слева" - подстрока добавляется слева к префиксу, иначе - справа. @@ -539,7 +539,8 @@ // Возвращает объект ОписаниеТипов, содержащий указанный тип. // // Параметры: -// ЗначениеТипа - Строка, Тип - Содержит имя типа или значение типа Тип. +// ЗначениеТипа - Строка +// - Тип - содержит имя типа или значение типа Тип. // // Возвращаемое значение: // ОписаниеТипов - объект Описание типов. @@ -569,10 +570,11 @@ // Возвращает пустое (дефолтное) значение указанного типа. // // Параметры: -// Тип - Строка, Тип - имя типа или значение типа Тип. +// Тип - Строка +// - Тип - имя типа или значение типа Тип. // // Возвращаемое значение: -// Произвольный - Пустое значение указанного типа. +// Произвольный - пустое значение указанного типа. // Функция одПолучитьПустоеЗначение(Тип) Экспорт @@ -592,14 +594,18 @@ // Осуществляет простой поиск объекта информационной базы по указанному свойству. // // Параметры: -// Менеджер - СправочникМенеджер, ДокументМенеджер - Менеджер искомого объекта; +// Менеджер - СправочникМенеджер +// - ДокументМенеджер - менеджер искомого объекта; // Свойство - Строка - свойство, по которому осуществляем поиск: Имя, Код, // Наименование или Имя индексируемого реквизита. -// Значение - Строка, Число, Дата - Значение свойства, по которому ищем объект. -// НайденныйОбъектПоУникальномуИдентификатору - СправочникОбъект, ДокументОбъект - Объект информационной базы, +// Значение - Строка +// - Число +// - Дата - значение свойства, по которому ищем объект. +// НайденныйОбъектПоУникальномуИдентификатору - СправочникОбъект +// - ДокументОбъект - объект информационной базы, // который был найден по уникальному идентификатору в ходе выполнения функции. // ОбщаяСтруктураСвойств - структура - свойства искомого объекта. -// ОбщиеСвойстваПоиска - Структура - общие свойства поиска. +// ОбщиеСвойстваПоиска - Структура // СтрокаЗапросаПоискаПоУникальномуИдентификатору - Строка - текст запроса для поиска по уникальному идентификатору. // // Возвращаемое значение: @@ -718,7 +724,7 @@ // Свойство - Строка - имя свойства, по-которому ищем объект. // // Возвращаемое значение: -// Произвольный - Найденный объект информационной базы. +// Произвольный - найденный объект информационной базы. // Функция одПолучитьЗначениеПоСтроке(Стр, Тип, Свойство = "") Экспорт @@ -752,7 +758,7 @@ // Возвращает строковое представление типа значения. // // Параметры: -// ЗначениеИлиТип - Произвольный - Значение любого типа или Тип. +// ЗначениеИлиТип - Произвольный - значение любого типа или Тип. // // Возвращаемое значение: // Строка - строковое представление типа значения. @@ -801,7 +807,7 @@ // Функция может быть использована в обработчиках событий, программный код // которых хранится в правила обмена данными. // Параметры: -// ОписаниеТипов - ОписаниеТипов - Объект ОписаниеТипов, XML представление которого требуется получить. +// ОписаниеТипов - ОписаниеТипов - объект ОписаниеТипов, XML представление которого требуется получить. // // Возвращаемое значение: // Строка - XML представление переданного объекта ОписаниеТипов. @@ -855,7 +861,7 @@ // Заменяет недопустимые символы XML на другой символ. // // Параметры: -// Текст - Строка - Текст, в котором следует заменить символы. +// Текст - Строка - текст, в котором следует заменить символы. // СимволЗамены - Строка - значение на которое следует заменять недопустимые символы. // Возвращаемое значение: // Строка - результат замены. @@ -947,8 +953,8 @@ // // Параметры: // Объект - ЗаписьXML - объект типа XMLЗапись. -// Имя - Строка - Имя элемента. -// Значение - Произвольный - Значение элемента. +// Имя - Строка - имя элемента. +// Значение - Произвольный - значение элемента. // Процедура одЗаписатьЭлемент(Объект, Имя, Значение="") Экспорт @@ -1016,11 +1022,11 @@ // Параметры: // Объект - ЧтениеXML - объект типа XMLЧтение, спозиционированный на начале элемента, // атрибут которого требуется получить. -// Тип - Тип - Тип атрибута. -// Имя - Строка - Имя атрибута. +// Тип - Тип - тип атрибута. +// Имя - Строка - имя атрибута. // // Возвращаемое значение: -// Произвольный - Значение атрибута полученное по имени и приведенное к указанному типу. +// Произвольный - значение атрибута полученное по имени и приведенное к указанному типу. // Функция одАтрибут(Объект, Тип, Имя) Экспорт @@ -1252,7 +1258,7 @@ // Параметры: // КодСообщения - Строка - код сообщения. // СтрокаОшибки - Строка - строковое содержание ошибки. -// Объект - Произвольный - Объект, к которому относится ошибка. +// Объект - Произвольный - объект, к которому относится ошибка. // ТипОбъекта - Тип - тип объекта к которому относится ошибка. // // Возвращаемое значение: @@ -1317,8 +1323,8 @@ // Параметры: // КодСообщения - Строка - код сообщения. // СтрокаОшибки - Строка - строковое содержание ошибки. -// ПКО - СтрокаТаблицыЗначений - Правило конвертации объекта. -// ПКС - СтрокаТаблицыЗначений - Правило конвертации свойства. +// ПКО - СтрокаТаблицыЗначений - правило конвертации объекта. +// ПКС - СтрокаТаблицыЗначений - правило конвертации свойства. // Источник - Произвольный - источник при конвертации которого возникла ошибка. // ИмяОбработчика - Строка - имя обработчика в котором возникла ошибка. // Значение - Произвольный - значение, при конвертации которого возникла ошибка. @@ -1408,9 +1414,9 @@ // // Возвращаемое значение: // СтрокаТаблицыЗначений - ссылка на правило конвертации (строка в таблице правил): -// * Имя - Строка - -// * Наименование - Строка - -// * Источник - Строка - +// * Имя - Строка +// * Наименование - Строка +// * Источник - Строка // * Свойства - см. КоллекцияПравилаКонвертацииСвойств // Функция НайтиПравило(Объект = Неопределено, ИмяПравила = "") Экспорт @@ -1488,7 +1494,7 @@ // Устанавливает значение параметра в таблице параметров в форме обработки. // // Параметры: -// ИмяПараметра - Строка - Имя параметра. +// ИмяПараметра - Строка - имя параметра. // ЗначениеПараметра - Произвольный - значение параметра. // Процедура УстановитьЗначениеПараметраВТаблице(ИмяПараметра, ЗначениеПараметра) Экспорт @@ -1524,10 +1530,10 @@ КонецЦикла; КонецЕсли; - Отказ = Ложь; + Отказ = Ложь; УдалитьНепосредственно = Правило.Непосредственно; - - + + // Обработчик ПередУдалениемОбъектаВыборки Если Не ПустаяСтрока(Правило.ПередУдалением) Тогда @@ -1545,8 +1551,8 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(29, ОписаниеОшибки(), Правило.Имя, Объект, "ПередУдалениемОбъектаВыборки"); - + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(29, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, Объект, "ПередУдалениемОбъектаВыборки"); + КонецПопытки; Если Отказ Тогда @@ -1554,19 +1560,19 @@ Возврат; КонецЕсли; - - КонецЕсли; - - + + КонецЕсли; + + Попытка ВыполнитьУдалениеОбъекта(Объект, Свойства, УдалитьНепосредственно); - + Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(24, ОписаниеОшибки(), Правило.Имя, Объект, ""); - - КонецПопытки; + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(24, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, Объект, ""); + + КонецПопытки; КонецПроцедуры @@ -1714,7 +1720,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ОписаниеОшибки(), ПКО, Источник, НСтр("ru = 'ПередКонвертациейОбъекта (глобальный)'")); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, НСтр("ru = 'ПередКонвертациейОбъекта (глобальный)'")); КонецПопытки; Если Отказ Тогда // Отказ от дальнейшей обработки правила. @@ -1740,7 +1746,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ОписаниеОшибки(), ПКО, Источник, "ПередВыгрузкойОбъекта"); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ПередВыгрузкойОбъекта"); КонецПопытки; Если Отказ Тогда // Отказ от дальнейшей обработки правила. @@ -2016,7 +2022,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(42, ОписаниеОшибки(), ПКО, Источник, "ПриВыгрузкеОбъекта"); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(42, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ПриВыгрузкеОбъекта"); КонецПопытки; Если Отказ Тогда // Отказ от записи объекта в файл. @@ -2053,7 +2059,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(43, ОписаниеОшибки(), ПКО, Источник, "ПослеВыгрузкиОбъекта"); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(43, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ПослеВыгрузкиОбъекта"); КонецПопытки; Если Отказ Тогда // Отказ от записи объекта в файл. @@ -2116,21 +2122,21 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(76, ОписаниеОшибки(), ПКО, Источник, "ЕстьОбработчикПослеВыгрузкиВФайл"); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(76, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ЕстьОбработчикПослеВыгрузкиВФайл"); КонецПопытки; КонецЕсли; Возврат УзелСсылки; -КонецФункции // ВыгрузитьПоПравилу() +КонецФункции // Возвращает фрагмент текста языка запросов, который выражает условие ограничения на интервал дат. // // Параметры: -// Свойства - Метаданные - Свойства объекта метаданных. -// ИмяТипа - Строка - Имя типа. -// ИмяГруппыТаблицы - Строка - Имя группы таблицы. +// Свойства - Метаданные - свойства объекта метаданных. +// ИмяТипа - Строка - имя типа. +// ИмяГруппыТаблицы - Строка - имя группы таблицы. // ВыборкаДляОчисткиДанных - Булево - выборка для очистки данных. // // Возвращаемое значение: @@ -2194,8 +2200,8 @@ // Формирует результат запроса для выгрузки очистки данных. // // Параметры: -// Свойства - Структура - описание типа значения, см. СтруктураПараметровМенеджера. -// ИмяТипа - Строка - Имя типа. +// Свойства - см. СтруктураПараметровМенеджера. +// ИмяТипа - Строка - имя типа. // ВыборкаДляОчисткиДанных - Булево - выборка для очистки данных. // УдалятьОбъектыНепосредственно - Булево - признак необходимости непосредственного удаления. // ВыбиратьВсеПоля - Булево - признак необходимости выбирать все поля. @@ -2335,8 +2341,8 @@ // Формирует выборку для выгрузки очистки данных. // // Параметры: -// Свойства - Менеджер - Свойства объекта метаданных. -// ИмяТипа - Строка - Имя типа. +// Свойства - Менеджер - свойства объекта метаданных. +// ИмяТипа - Строка - имя типа. // ВыборкаДляОчисткиДанных - Булево - выборка для очистки данных. // УдалятьОбъектыНепосредственно - Булево - признак необходимости удалять непосредственно. // ВыбиратьВсеПоля - Булево - признак необходимости выбирать все поля. @@ -2368,7 +2374,7 @@ // удаления. // // Параметры: -// ТаблицаДанных - ТаблицаЗначений - Таблица для заполнения. +// ТаблицаДанных - ТаблицаЗначений - таблица для заполнения. // Процедура ЗаполнитьСписокТиповДоступныхДляУдаления(ТаблицаДанных) Экспорт @@ -2425,8 +2431,8 @@ // в зависимости от пометки текущей строки. // // Параметры: -// ТекСтрока - СтрокаДереваЗначений - Строка, у которой следует обработать подчиненные строки. -// Реквизит - Строка - Имя реквизита, в котором содержится пометка. +// ТекСтрока - СтрокаДереваЗначений - строка, у которой следует обработать подчиненные строки. +// Реквизит - Строка - имя реквизита, в котором содержится пометка. // Процедура УстановитьПометкиПодчиненных(ТекСтрока, Реквизит) Экспорт @@ -2459,8 +2465,8 @@ // в зависимости от пометки текущей строки. // // Параметры: -// ТекСтрока - СтрокаДереваЗначений - Строка, у которой следует обработать родительские строки. -// Реквизит - Строка - Имя реквизита, в котором содержится пометка. +// ТекСтрока - СтрокаДереваЗначений - строка, у которой следует обработать родительские строки. +// Реквизит - Строка - имя реквизита, в котором содержится пометка. // Процедура УстановитьПометкиРодителей(ТекСтрока, Реквизит) Экспорт @@ -2576,7 +2582,7 @@ // Выполняет запись имени, типа и значения параметра в фай сообщения обмена для передачи в базу-приемник. // // Параметры: -// Имя - Строка - Имя параметра. +// Имя - Строка - имя параметра. // ИсходноеЗначениеПараметра - Произвольный - значение параметра. // ПравилоКонвертации - Строка - имя правила конвертации для ссылочных типов. // @@ -2654,7 +2660,7 @@ // Возвращает текущее значение версии обработки. // // Возвращаемое значение: -// Число - Текущее значение версии обработки. +// Число - текущее значение версии обработки. // Функция ВерсияОбъекта() Экспорт @@ -2788,7 +2794,7 @@ // Деструктор внешней обработки. // // Параметры: -// ВключенРежимОтладки - Булево - Признак включения режима отладки. +// ВключенРежимОтладки - Булево - признак включения режима отладки. // Процедура ДеструкторВнешнейОбработкиОбработчиковСобытий(ВключенРежимОтладки = Ложь) Экспорт @@ -2935,7 +2941,7 @@ ВременныйФайлЗаписей.Открыть(ИмяФайлаЗаписей, КодировкаТекста.UTF8); Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, - ОписаниеОшибки(), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'Ошибка при создании временного файла для выгрузки данных'")); ВызватьИсключение; КонецПопытки; @@ -2960,7 +2966,7 @@ ВременныйФайл.Открыть(ИмяВременногоФайла, КодировкаТекста.UTF8); Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, - ОписаниеОшибки(), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'Ошибка при открытии временного файла для переноса данных в файл обмена'")); ВызватьИсключение; КонецПопытки; @@ -3071,9 +3077,9 @@ // Сохраняет в протокол выполнения (или выводит на экран) сообщения указанной структуры. // // Параметры: -// Код - Число. Код сообщения. -// СтруктураЗаписи - Структура. Структура записи протокола. -// ВзвестиФлагОшибок - Если истина, то - это сообщение об ошибке. Взводится ФлагОшибки. +// Код - Число - код сообщения. +// СтруктураЗаписи - Структура - структура записи протокола. +// ВзвестиФлагОшибок - если истина, то - это сообщение об ошибке. Взводится ФлагОшибки. // Функция ЗаписатьВПротоколВыполнения(Код="", СтруктураЗаписи=Неопределено, ВзвестиФлагОшибок=Истина, Уровень=0, Выравнивание=22, БезусловнаяЗаписьВПротоколОбмена = Ложь) Экспорт @@ -3247,47 +3253,47 @@ // Возвращаемое значение: // ТаблицаЗначений - коллекция правил конвертации данных: -// * Имя - Строка - -// * Наименование - Строка - -// * Порядок - Число - -// * СинхронизироватьПоИдентификатору - Булево - -// * НеСоздаватьЕслиНеНайден - Булево - -// * НеВыгружатьОбъектыСвойствПоСсылкам - Булево - -// * ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли - Булево - -// * ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD - Булево - -// * ИспользоватьБыстрыйПоискПриЗагрузке - Булево - -// * ГенерироватьНовыйНомерИлиКодЕслиНеУказан - Булево - -// * МаленькоеКоличествоОбъектов - Булево - -// * КоличествоОбращенийДляВыгрузкиСсылки - Число - -// * КоличествоЭлементовВИБ - Число - -// * СпособВыгрузки - Произвольный - -// * Источник - Произвольный - -// * Приемник - Произвольный - -// * ТипИсточника - Строка - -// * ПередВыгрузкой - Произвольный - -// * ПриВыгрузке - Произвольный - -// * ПослеВыгрузки - Произвольный - -// * ПослеВыгрузкиВФайл - Произвольный - -// * ЕстьОбработчикПередВыгрузкой - Булево - -// * ЕстьОбработчикПриВыгрузке - Булево - -// * ЕстьОбработчикПослеВыгрузки - Булево - -// * ЕстьОбработчикПослеВыгрузкиВФайл - Булево - -// * ПередЗагрузкой - Произвольный - -// * ПриЗагрузке - Произвольный - -// * ПослеЗагрузки - Произвольный - -// * ПоследовательностьПолейПоиска - Произвольный - +// * Имя - Строка +// * Наименование - Строка +// * Порядок - Число +// * СинхронизироватьПоИдентификатору - Булево +// * НеСоздаватьЕслиНеНайден - Булево +// * НеВыгружатьОбъектыСвойствПоСсылкам - Булево +// * ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли - Булево +// * ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD - Булево +// * ИспользоватьБыстрыйПоискПриЗагрузке - Булево +// * ГенерироватьНовыйНомерИлиКодЕслиНеУказан - Булево +// * МаленькоеКоличествоОбъектов - Булево +// * КоличествоОбращенийДляВыгрузкиСсылки - Число +// * КоличествоЭлементовВИБ - Число +// * СпособВыгрузки - Произвольный +// * Источник - Произвольный +// * Приемник - Произвольный +// * ТипИсточника - Строка +// * ПередВыгрузкой - Произвольный +// * ПриВыгрузке - Произвольный +// * ПослеВыгрузки - Произвольный +// * ПослеВыгрузкиВФайл - Произвольный +// * ЕстьОбработчикПередВыгрузкой - Булево +// * ЕстьОбработчикПриВыгрузке - Булево +// * ЕстьОбработчикПослеВыгрузки - Булево +// * ЕстьОбработчикПослеВыгрузкиВФайл - Булево +// * ПередЗагрузкой - Произвольный +// * ПриЗагрузке - Произвольный +// * ПослеЗагрузки - Произвольный +// * ПоследовательностьПолейПоиска - Произвольный // * ПоискПоТабличнымЧастям - см. КоллекцияПоискПоТабличнымЧастям -// * ЕстьОбработчикПередЗагрузкой - Булево - -// * ЕстьОбработчикПриЗагрузке - Булево - -// * ЕстьОбработчикПослеЗагрузки - Булево - -// * ЕстьОбработчикПоследовательностьПолейПоиска - Булево - +// * ЕстьОбработчикПередЗагрузкой - Булево +// * ЕстьОбработчикПриЗагрузке - Булево +// * ЕстьОбработчикПослеЗагрузки - Булево +// * ЕстьОбработчикПоследовательностьПолейПоиска - Булево // * СвойстваПоиска - см. КоллекцияПравилаКонвертацииСвойств // * Свойства - см. КоллекцияПравилаКонвертацииСвойств -// * Выгруженные - ТаблицаЗначений - -// * ВыгружатьПредставлениеИсточника - Булево - -// * НеЗамещать - Булево - -// * ЗапоминатьВыгруженные - Булево - -// * ВсеОбъектыВыгружены - Булево - +// * Выгруженные - ТаблицаЗначений +// * ВыгружатьПредставлениеИсточника - Булево +// * НеЗамещать - Булево +// * ЗапоминатьВыгруженные - Булево +// * ВсеОбъектыВыгружены - Булево // Функция КоллекцияПравилаКонвертации() @@ -3297,24 +3303,24 @@ // Возвращаемое значение: // ДеревоЗначений - коллекция правил выгрузки данных: -// * Включить - Число - -// * ЭтоГруппа - Булево - -// * Имя - Строка - -// * Наименование - Строка - -// * Порядок - Число - -// * СпособОтбораДанных - Произвольный - -// * ОбъектВыборки - Произвольный - -// * ПравилоКонвертации - Произвольный - -// * ПередОбработкой - Строка - -// * ПослеОбработки - Строка - -// * ПередВыгрузкой - Строка - -// * ПослеВыгрузки - Строка - -// * ИспользоватьОтбор - Булево - -// * НастройкиПостроителя - Произвольный - -// * ИмяОбъектаДляЗапроса - Строка - -// * ИмяОбъектаДляЗапросаРегистра - Строка - -// * ВыбиратьДанныеДляВыгрузкиОднимЗапросом - Булево - -// * СсылкаНаУзелОбмена - ПланОбменаСсылка - +// * Включить - Число +// * ЭтоГруппа - Булево +// * Имя - Строка +// * Наименование - Строка +// * Порядок - Число +// * СпособОтбораДанных - Произвольный +// * ОбъектВыборки - Произвольный +// * ПравилоКонвертации - Произвольный +// * ПередОбработкой - Строка +// * ПослеОбработки - Строка +// * ПередВыгрузкой - Строка +// * ПослеВыгрузки - Строка +// * ИспользоватьОтбор - Булево +// * НастройкиПостроителя - Произвольный +// * ИмяОбъектаДляЗапроса - Строка +// * ИмяОбъектаДляЗапросаРегистра - Строка +// * ВыбиратьДанныеДляВыгрузкиОднимЗапросом - Булево +// * СсылкаНаУзелОбмена - ПланОбменаСсылка // Функция КоллекцияПравилаВыгрузки() @@ -3324,8 +3330,8 @@ // Возвращаемое значение: // ТаблицаЗначений - коллекция правил поиска по табличным частям: -// * ИмяЭлемента - Произвольный - -// * ПоляПоискаТЧ - Массив из Произвольный - +// * ИмяЭлемента - Произвольный +// * ПоляПоискаТЧ - Массив из Произвольный // Функция КоллекцияПоискПоТабличнымЧастям() @@ -3339,46 +3345,46 @@ // Возвращаемое значение: // ТаблицаЗначений - коллекция правил конвертации свойств данных: -// * Имя - Строка - -// * Наименование - Строка - -// * Порядок - Число - -// * ЭтоГруппа - Булево - -// * ЭтоПолеПоиска - Булево - +// * Имя - Строка +// * Наименование - Строка +// * Порядок - Число +// * ЭтоГруппа - Булево +// * ЭтоПолеПоиска - Булево // * ПравилаГруппы - см. КоллекцияПравилаКонвертацииСвойств -// * ПравилаГруппыОтключенные - Произвольный - -// * ВидИсточника - Произвольный - -// * ВидПриемника - Произвольный - -// * УпрощеннаяВыгрузкаСвойства - Булево - -// * НуженУзелXMLПриВыгрузке - Булево - -// * НуженУзелXMLПриВыгрузкеГруппы - Булево - -// * ТипИсточника - Строка - -// * ТипПриемника - Строка - -// * Источник - Произвольный - -// * Приемник - Произвольный - -// * ПравилоКонвертации - Произвольный - -// * ПолучитьИзВходящихДанных - Булево - -// * НеЗамещать - Булево - -// * ЭтоОбязательноеСвойство - Булево - -// * ПередВыгрузкой - Произвольный - -// * ИмяОбработчикаПередВыгрузкой - Произвольный - -// * ПриВыгрузке - Произвольный - -// * ИмяОбработчикаПриВыгрузке - Произвольный - -// * ПослеВыгрузки - Произвольный - -// * ИмяОбработчикаПослеВыгрузки - Произвольный - -// * ПередОбработкойВыгрузки - Произвольный - -// * ИмяОбработчикаПередОбработкойВыгрузки - Произвольный - -// * ПослеОбработкиВыгрузки - Произвольный - -// * ИмяОбработчикаПослеОбработкиВыгрузки - Произвольный - -// * ЕстьОбработчикПередВыгрузкой - Булево - -// * ЕстьОбработчикПриВыгрузке - Булево - -// * ЕстьОбработчикПослеВыгрузки - Булево - -// * ЕстьОбработчикПередОбработкойВыгрузки - Булево - -// * ЕстьОбработчикПослеОбработкиВыгрузки - Булево - -// * ПриводитьКДлине - Число - -// * ИмяПараметраДляПередачи - Строка - -// * ПоискПоДатеНаРавенство - Булево - -// * ВыгружатьГруппуЧерезФайл - Булево - -// * СтрокаПолейПоиска - Произвольный - +// * ПравилаГруппыОтключенные - Произвольный +// * ВидИсточника - Произвольный +// * ВидПриемника - Произвольный +// * УпрощеннаяВыгрузкаСвойства - Булево +// * НуженУзелXMLПриВыгрузке - Булево +// * НуженУзелXMLПриВыгрузкеГруппы - Булево +// * ТипИсточника - Строка +// * ТипПриемника - Строка +// * Источник - Произвольный +// * Приемник - Произвольный +// * ПравилоКонвертации - Произвольный +// * ПолучитьИзВходящихДанных - Булево +// * НеЗамещать - Булево +// * ЭтоОбязательноеСвойство - Булево +// * ПередВыгрузкой - Произвольный +// * ИмяОбработчикаПередВыгрузкой - Произвольный +// * ПриВыгрузке - Произвольный +// * ИмяОбработчикаПриВыгрузке - Произвольный +// * ПослеВыгрузки - Произвольный +// * ИмяОбработчикаПослеВыгрузки - Произвольный +// * ПередОбработкойВыгрузки - Произвольный +// * ИмяОбработчикаПередОбработкойВыгрузки - Произвольный +// * ПослеОбработкиВыгрузки - Произвольный +// * ИмяОбработчикаПослеОбработкиВыгрузки - Произвольный +// * ЕстьОбработчикПередВыгрузкой - Булево +// * ЕстьОбработчикПриВыгрузке - Булево +// * ЕстьОбработчикПослеВыгрузки - Булево +// * ЕстьОбработчикПередОбработкойВыгрузки - Булево +// * ЕстьОбработчикПослеОбработкиВыгрузки - Булево +// * ПриводитьКДлине - Число +// * ИмяПараметраДляПередачи - Строка +// * ПоискПоДатеНаРавенство - Булево +// * ВыгружатьГруппуЧерезФайл - Булево +// * СтрокаПолейПоиска - Произвольный // Функция КоллекцияПравилаКонвертацииСвойств() @@ -3387,7 +3393,7 @@ КонецФункции // Возвращаемое значение: -// ТаблицаЗначений - стек выгрузки: +// ТаблицаЗначений: // * Ссылка - ЛюбаяСсылка - ссылка на выгружаемый объект. // Функция КоллекцияСтекВызововВыгрузкиДанных() @@ -3397,16 +3403,16 @@ КонецФункции // Возвращаемое значение: -// Структура - структура правил: +// Структура: // * ТаблицаПравилВыгрузки - см. КоллекцияПравилаВыгрузки // * ТаблицаПравилКонвертации - см. КоллекцияПравилаКонвертации -// * Алгоритмы - Структура - -// * Запросы - Структура - -// * Конвертация - Произвольный - -// * мXMLПравила - Произвольный - -// * ТаблицаНастройкиПараметров - ТаблицаЗначений - -// * Параметры - Структура - -// * ВерсияПлатформыПриемника - Строка - +// * Алгоритмы - Структура +// * Запросы - Структура +// * Конвертация - Произвольный +// * мXMLПравила - Произвольный +// * ТаблицаНастройкиПараметров - ТаблицаЗначений +// * Параметры - Структура +// * ВерсияПлатформыПриемника - Строка // Функция ОписаниеСтруктурыПравил() @@ -3434,7 +3440,7 @@ // Осуществляет загрузку правила конвертации группы свойств. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // ТаблицаСвойств - см. КоллекцияПравилаКонвертацииСвойств // Процедура ЗагрузитьПКГС(ПравилаОбмена, ТаблицаСвойств) @@ -3660,7 +3666,7 @@ // Осуществляет загрузку правил конвертации свойств. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // ТаблицаСвойств - ТаблицаЗначений - таблица значений, содержащая ПКС. // ТаблицаПоиска - ТаблицаЗначений - таблица значений, содержащая ПКС (синхронизирующих). // @@ -3688,7 +3694,7 @@ // Осуществляет загрузку правила конвертации значений. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // Значения - соответствие значений объекта источника - строковым // представлениям объекта приемника. // ТипИсточника - значение Тип - типа Тип - тип объекта источника. @@ -3720,7 +3726,7 @@ // Осуществляет загрузку правил конвертации значений. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // Значения - соответствие значений объекта источника - строковым // представлениям объекта приемника. // ТипИсточника - значение Тип - типа Тип - тип объекта источника. @@ -3757,8 +3763,8 @@ // Осуществляет загрузку правила конвертации объектов. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьПравилоКонвертации(ПравилаОбмена, ЗаписьXML) @@ -3868,7 +3874,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеВПротокол(11, ОписаниеОшибки(), Строка(НоваяСтрока.Источник)); + ЗаписатьИнформациюОбОшибкеВПротокол(11, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Строка(НоваяСтрока.Источник)); КонецПопытки; @@ -4054,8 +4060,8 @@ // Осуществляет загрузку правил конвертации объектов. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьПравилаКонвертации(ПравилаОбмена, ЗаписьXML) @@ -4203,8 +4209,8 @@ // Осуществляет загрузку правил очистки данных. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьПравилаОчистки(ПравилаОбмена, ЗаписьXML) @@ -4259,8 +4265,8 @@ // Осуществляет загрузку алгоритма в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьАлгоритм(ПравилаОбмена, ЗаписьXML) @@ -4305,8 +4311,8 @@ // Осуществляет загрузку алгоритмов в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьАлгоритмы(ПравилаОбмена, ЗаписьXML) @@ -4332,8 +4338,8 @@ // Осуществляет загрузку запроса в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьЗапрос(ПравилаОбмена, ЗаписьXML) @@ -4378,8 +4384,8 @@ // Осуществляет загрузку запросов в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьЗапросы(ПравилаОбмена, ЗаписьXML) @@ -4407,7 +4413,7 @@ // Осуществляет загрузку параметров в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // Процедура ЗагрузитьПараметры(ПравилаОбмена, ЗаписьXML) @@ -4514,8 +4520,8 @@ // Осуществляет загрузку обработки в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьОбработку(ПравилаОбмена, ЗаписьXML) @@ -4563,8 +4569,8 @@ // Осуществляет загрузку внешних обработок в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. -// ЗаписьXML - ЗаписьXML - Объект типа ЗаписьXML - правила, сохраняемые в файл обмена и +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. +// ЗаписьXML - ЗаписьXML - объект типа ЗаписьXML - правила, сохраняемые в файл обмена и // используемые при загрузке данных. // Процедура ЗагрузитьОбработки(ПравилаОбмена, ЗаписьXML) @@ -4641,7 +4647,7 @@ // Осуществляет загрузку правила выгрузки данных в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // НоваяСтрока - СтрокаДереваЗначений - структура, описывающая правило выгрузки данных: // * Имя - Строка - идентификатор правила. // * Наименование - Строка - пользовательское представление правила. @@ -4716,7 +4722,7 @@ // Осуществляет загрузку правил выгрузки данных в соответствии с форматом правил обмена. // // Параметры: -// ПравилаОбмена - ЧтениеXML - Объект типа ЧтениеXML. +// ПравилаОбмена - ЧтениеXML - объект типа ЧтениеXML. // Процедура ЗагрузитьПравилаВыгрузки(ПравилаОбмена) @@ -4918,7 +4924,7 @@ // При выгрузке обработчиков из файла правил этот алгоритм выгружается как и другие. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. // Процедура ВыгрузитьОбработчикиКонвертации(Результат) @@ -4935,8 +4941,8 @@ // Выгружает обработчики правил выгрузки данных в текстовый файл. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. -// СтрокиДерева - КоллекцияСтрокДереваЗначений - Объект типа КоллекцияСтрокДереваЗначений - содержит ПВД данного уровня +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// СтрокиДерева - КоллекцияСтрокДереваЗначений - объект типа КоллекцияСтрокДереваЗначений - содержит ПВД данного уровня // дерева значений. // Процедура ВыгрузитьОбработчикиПравилВыгрузкиДанных(Результат, СтрокиДерева) @@ -4964,8 +4970,8 @@ // Выгружает обработчики правил очистки данных в текстовый файл. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. -// СтрокиДерева - КоллекцияСтрокДереваЗначений - Объект типа КоллекцияСтрокДереваЗначений - содержит ПОД данного уровня +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// СтрокиДерева - КоллекцияСтрокДереваЗначений - объект типа КоллекцияСтрокДереваЗначений - содержит ПОД данного уровня // дерева значений. // Процедура ВыгрузитьОбработчикиПравилОчисткиДанных(Результат, СтрокиДерева) @@ -4993,7 +4999,7 @@ // Выгружает обработчики правил конвертации: ПКО, ПКС, ПКГС в текстовый файл. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. // Процедура ВыгрузитьОбработчикиПравилКонвертации(Результат) @@ -5027,7 +5033,7 @@ // Выгружает обработчики правил конвертации свойств в текстовый файл. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. // ПКС - ТаблицаЗначений - содержит правила конвертации свойств или групп свойств объекта. // Процедура ВыгрузитьОбработчикиПравилКонвертацииСвойств(Результат, ПКС) @@ -5061,7 +5067,7 @@ // Выгружает алгоритмы в текстовый файл. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода алгоритмов в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода алгоритмов в текстовый файл. // Процедура ВыгрузитьАлгоритмы(Результат) @@ -5082,7 +5088,7 @@ // Ключ элемента структуры - имя алгоритма, значение - интерфейс вызова процедуры, содержащей код алгоритма. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода обработчиков в текстовый файл. // Процедура ВыгрузитьКонструкторВнешнейОбработки(Результат) @@ -5129,7 +5135,7 @@ // Добавляет в объект "Результат" обработчик ПКО, ПКС или ПКГС. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. // Правило - строка таблицы значений с правилами конвертации объекта. // ИмяОбработчика - строка - имя обработчика. // @@ -5148,7 +5154,7 @@ // Добавляет в объект "Результат" код алгоритма. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. // Алгоритм - элемент структуры - алгоритм для выгрузки. // Процедура ДобавитьВПотокАлгоритм(Результат, Алгоритм) @@ -5162,7 +5168,7 @@ // Добавляет в объект "Результат" обработчик ПВД или ПОД. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. // Правило - строка дерева значений с правилами. // ПрефиксОбработчика - строка - префикс обработчика: "ПВД" или "ПОД". // ИмяОбработчика - строка - имя обработчика. @@ -5182,7 +5188,7 @@ // Добавляет в объект "Результат" глобальный обработчик конвертации. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода обработчика в текстовый файл. // ИмяОбработчика - строка - имя обработчика. // Процедура ДобавитьВПотокОбработчикКонвертации(Результат, ИмяОбработчика) @@ -5202,7 +5208,7 @@ // Добавляет в объект "Результат" процедуру с кодом обработчика или кодом алгоритма. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода процедуры в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода процедуры в текстовый файл. // ИнтерфейсОбработчика - Строка - полное описание интерфейса обработчика: // имя процедуры, параметры процедуры, ключевое слово "Экспорт". // Обработчик - Строка - тело обработчика или алгоритма. @@ -5260,7 +5266,7 @@ // Добавляет в объект "Результат" комментарий. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода комментария в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода комментария в текстовый файл. // ИмяОбласти - Строка - имя области текстового макета "мМакетОбщиеПроцедурыФункции" // в которой содержится требуемый комментарий. // ВывестиКомментарий - Булево - признак необходимости вывода комментария. @@ -5286,7 +5292,7 @@ // Добавляет в объект "Результат" служебный код: параметры, общие процедуры и функции, деструктор внешней обработки. // // Параметры: -// Результат - ЗаписьТекста - Объект типа ЗаписьТекста - для вывода служебного кода в текстовый файл. +// Результат - ЗаписьТекста - объект типа ЗаписьТекста - для вывода служебного кода в текстовый файл. // ИмяОбласти - Строка - имя области текстового макета "мМакетОбщиеПроцедурыФункции" // в которой содержится требуемый служебный код. // @@ -5538,7 +5544,7 @@ // (смещение при котором производится вызов алгоритма). // СтрокаПрефикса - Строка - начальное смещение. // Возвращаемое значение: -// СтрокаПрефиксаДляВложенногоКода - Строка - Итоговое смещение кода алгоритма. +// СтрокаПрефиксаДляВложенногоКода - Строка - итоговое смещение кода алгоритма. // Функция ПолучитьПрефиксДляВложенногоАлгоритма(СтрокаОбработчика, СтрокаПрефикса) @@ -5746,7 +5752,7 @@ // // Параметры: // ТаблицаПОД - ДеревоЗначений - содержит правила очистки данных. -// СтрокиДерева - КоллекцияСтрокДереваЗначений - Объект типа КоллекцияСтрокДереваЗначений - содержит ПОД данного уровня +// СтрокиДерева - КоллекцияСтрокДереваЗначений - объект типа КоллекцияСтрокДереваЗначений - содержит ПОД данного уровня // дерева значений. // Процедура ДополнитьИнтерфейсамиОбработчиковПравилаОчисткиДанных(ТаблицаПОД, СтрокиДерева) @@ -5775,7 +5781,7 @@ // // Параметры: // ТаблицаПВД - ДеревоЗначений - содержит правила выгрузки данных. -// СтрокиДерева - КоллекцияСтрокДереваЗначений - Объект типа КоллекцияСтрокДереваЗначений - содержит ПВД данного уровня +// СтрокиДерева - КоллекцияСтрокДереваЗначений - объект типа КоллекцияСтрокДереваЗначений - содержит ПВД данного уровня // дерева значений. // Процедура ДополнитьИнтерфейсамиОбработчиковПравилаВыгрузкиДанных(ТаблицаПВД, СтрокиДерева) @@ -6011,7 +6017,7 @@ Менеджеры[Источник].ПКО = СтрокаТаблицы; КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВПротокол(11, ОписаниеОшибки(), Строка(Источник)); + ЗаписатьИнформациюОбОшибкеВПротокол(11, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Строка(Источник)); КонецПопытки; КонецЕсли; @@ -6115,7 +6121,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(27, ОписаниеОшибки(), Правило.Имя, "", "ПередОбработкойПравилаОчистки"); + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(27, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "", "ПередОбработкойПравилаОчистки"); КонецПопытки; @@ -6221,7 +6227,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(28, ОписаниеОшибки(), Правило.Имя, "", "ПослеОбработкиПравилаОчистки"); + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(28, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "", "ПослеОбработкиПравилаОчистки"); КонецПопытки; @@ -6232,7 +6238,7 @@ // Обходит дерево правил очистки данных и выполняет очистку. // // Параметры: -// Строки - Коллекция строк дерева значений. +// Строки - коллекция строк дерева значений. // Процедура ОбработатьПравилаОчистки(Строки) @@ -6305,10 +6311,11 @@ // Ищет объект по номеру в списке уже загруженных объектов. // // Параметры: -// НПП - номер искомого объекта в файле обмена. +// НПП - Число - номер искомого объекта в файле обмена. // // Возвращаемое значение: -// Ссылка на найденный объект. Если объект не найден, возвращается Неопределено. +// - ЛюбаяСсылка - ссылка на найденный объект. +// - Неопределено - если объект не найден. // Функция НайтиОбъектПоНомеру(НПП, РежимПоискаОсновногоОбъекта = Ложь) @@ -6355,7 +6362,7 @@ Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ОписаниеОшибки(), Объект, Тип); + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, Тип); Если Не ФлагРежимОтладки Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; @@ -6369,11 +6376,11 @@ // в структуре СвойстваПоиска. // // Параметры: -// Тип - тип создаваемого объекта. -// СвойстваПоиска - Структура, содержащая устанавливаемые реквизиты нового объекта. +// Тип - Тип - тип создаваемого объекта. +// СвойстваПоиска - Структура - содержит устанавливаемые реквизиты нового объекта. // // Возвращаемое значение: -// Новый объект информационной базы. +// Произвольный - новый объект информационной базы. // Функция СоздатьНовыйОбъект(Тип, СвойстваПоиска, Объект = Неопределено, ЗаписыватьОбъектСразуПослеСоздания = Истина, НаборЗаписейРегистра = Неопределено, @@ -6382,7 +6389,7 @@ СвойстваМД = Менеджеры[Тип]; ИмяТипа = СвойстваМД.ИмяТипа; - Менеджер = СвойстваМД.Менеджер; // СправочникМенеджер, ДокументМенеджер, РегистрСведенийМенеджер, и т.п. + Менеджер = СвойстваМД.Менеджер; // СправочникМенеджер, ДокументМенеджер, РегистрСведенийМенеджер, ПланСчетовМенеджер, ПланВидовРасчетаМенеджер, ПланОбменаМенеджер Если ИмяТипа = "Справочник" ИЛИ ИмяТипа = "ПланВидовХарактеристик" Тогда @@ -6436,7 +6443,7 @@ ИначеЕсли ИмяТипа = "БизнесПроцесс" Тогда - Объект = Менеджер.СоздатьБизнесПроцесс(); + Объект = Менеджер.СоздатьБизнесПроцесс(); ИначеЕсли ИмяТипа = "Перечисление" Тогда @@ -6494,7 +6501,7 @@ НоваяСсылка = Менеджер.ПолучитьСсылку(НовыйУникальныйИдентификатор); Объект.УстановитьСсылкуНового(НоваяСсылка); - КонецЕсли; + КонецЕсли; ДополнитьСтекНеЗаписанныхОбъектов(НПП, ГНПП, Объект, НоваяСсылка, Тип, ПараметрыОбъекта); @@ -6515,12 +6522,12 @@ // Читает из файла узел свойства объекта, устанавливает значение свойства. // // Параметры: -// Тип - тип значения свойства. -// ОбъектНайден - если после выполнения функции - Ложь, то значит -// объект свойства не найден в информационной базе и создан новый. +// Тип - Тип - тип значения свойства. +// ОбъектНайден - Булево - если после выполнения функции - Ложь, то значит +// объект свойства не найден в информационной базе и создан новый. // // Возвращаемое значение: -// Значение свойства +// Произвольный - значение свойства. // Функция ПрочитатьСвойство(Тип, ИмяПКО = "") @@ -7286,7 +7293,7 @@ Иначе ВыбранныеСвойства = СтрРазделить(СтрокаИменСвойствПоиска, ", ", Ложь); - + ВременныеСвойстваПоиска = Новый Соответствие; Для Каждого ЭлементСвойств Из СвойстваПоиска Цикл @@ -7462,7 +7469,7 @@ // // Параметры: // ТипОбъекта - тип искомого объекта. -// СвойстваПоиска - структура, содержащая свойства по которым производится поиск объекта. +// СвойстваПоиска - структура - содержащая свойства по которым производится поиск объекта. // ОбъектНайден - если Ложь, то объект не найден, а создан новый. // // Возвращаемое значение: @@ -7671,7 +7678,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(73, ОписаниеОшибки(), "", "", + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(73, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "", "", ТипОбъекта, Неопределено, НСтр("ru = 'Последовательность полей поиска'")); КонецПопытки; @@ -7841,7 +7848,7 @@ Исключение - ЗП = ПолучитьСтруктуруЗаписиПротокола(26, ОписаниеОшибки()); + ЗП = ПолучитьСтруктуруЗаписиПротокола(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ИмяПКО = ИмяПКО; ЗП.Объект = Объект; ЗП.ТипОбъекта = ТипЗнч(Объект); @@ -8536,7 +8543,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(53, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(53, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Неопределено, НСтр("ru = 'ПередЗагрузкойОбъекта (глобальный)'")); КонецПопытки; @@ -8570,7 +8577,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(19, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(19, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Неопределено, "ПередЗагрузкойОбъекта"); КонецПопытки; @@ -8627,7 +8634,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; @@ -8704,7 +8711,7 @@ Исключение - ЗП = ПолучитьСтруктуруЗаписиПротокола(26, ОписаниеОшибки()); + ЗП = ПолучитьСтруктуруЗаписиПротокола(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ИмяПКО = ИмяПравила; ЗП.НПП = НПП; ЗП.ГНПП = ГНПП; @@ -8800,7 +8807,7 @@ Исключение УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; @@ -8844,7 +8851,7 @@ Исключение УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; @@ -8909,7 +8916,7 @@ Исключение УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(54, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(54, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, НСтр("ru = 'ПослеЗагрузкиОбъекта (глобальный)'")); КонецПопытки; @@ -8938,7 +8945,7 @@ Исключение УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ОписаниеОшибки(), ИмяПравила, Источник, + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); КонецПопытки; @@ -9014,7 +9021,7 @@ ЗаписатьДокументВБезопасномРежиме(Объект, ТипОбъекта); - ЗП = ПолучитьСтруктуруЗаписиПротокола(25, ОписаниеОшибки()); + ЗП = ПолучитьСтруктуруЗаписиПротокола(25, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ИмяПКО = ИмяПравила; Если Не ПустаяСтрока(Источник) Тогда @@ -9473,7 +9480,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(48, ОписаниеОшибки(), ПКО, ПКГС, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(48, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПередОбработкойВыгрузкиГруппыСвойств",, Ложь); КонецПопытки; @@ -9562,7 +9569,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(49, ОписаниеОшибки(), ПКО, ПКГС, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(49, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПослеОбработкиВыгрузкиГруппыСвойств",, Ложь); КонецПопытки; @@ -9593,7 +9600,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(66, ОписаниеОшибки(), ПКО, ПКГС, Источник,,,Ложь); + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(66, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник,,,Ложь); Возврат; КонецПопытки; @@ -9665,7 +9672,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(50, ОписаниеОшибки(), ПКО, ПКГС, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(50, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПередВыгрузкойГруппыСвойств",, Ложь); Прервать; @@ -9707,7 +9714,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(51, ОписаниеОшибки(), ПКО, ПКГС, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(51, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПриВыгрузкеГруппыСвойств",, Ложь); Прервать; @@ -9749,7 +9756,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(52, ОписаниеОшибки(), ПКО, ПКГС, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(52, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПослеВыгрузкиГруппыСвойств",, Ложь); Прервать; @@ -9807,7 +9814,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(49, ОписаниеОшибки(), ПКО, ПКГС, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(49, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПослеОбработкиВыгрузкиГруппыСвойств",, Ложь); КонецПопытки; @@ -9892,7 +9899,7 @@ Исключение Если КодОшибки <> 14 Тогда - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(КодОшибки, ОписаниеОшибки(), ПКО, ПКС, Источник, ""); + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(КодОшибки, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, ""); КонецЕсли; КонецПопытки; @@ -9951,7 +9958,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПередВыгрузкойСвойства", Значение); КонецПопытки; @@ -9997,7 +10004,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПриВыгрузкеСвойства", Значение); КонецПопытки; @@ -10124,7 +10131,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПослеВыгрузкиСвойства", Значение); КонецПопытки; @@ -10542,7 +10549,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПередВыгрузкойСвойства", Значение); КонецПопытки; @@ -10673,7 +10680,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПриВыгрузкеСвойства", Значение); КонецПопытки; @@ -10792,7 +10799,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ОписаниеОшибки(), ПКО, ПКС, Источник, + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПослеВыгрузкиСвойства", Значение); КонецПопытки; @@ -10864,7 +10871,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(65, ОписаниеОшибки(), Правило.Имя, НСтр("ru = 'ПередВыгрузкойОбъектаВыборки (глобальный)'"), Объект); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(65, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, НСтр("ru = 'ПередВыгрузкойОбъектаВыборки (глобальный)'"), Объект); КонецПопытки; Если Отказ Тогда @@ -10889,7 +10896,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(33, ОписаниеОшибки(), Правило.Имя, "ПередВыгрузкойОбъектаВыборки", Объект); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(33, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПередВыгрузкойОбъектаВыборки", Объект); КонецПопытки; Если Отказ Тогда @@ -10918,7 +10925,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(69, ОписаниеОшибки(), Правило.Имя, НСтр("ru = 'ПослеВыгрузкиОбъектаВыборки (глобальный)'"), Объект); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(69, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, НСтр("ru = 'ПослеВыгрузкиОбъектаВыборки (глобальный)'"), Объект); КонецПопытки; КонецЕсли; @@ -10939,7 +10946,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(34, ОписаниеОшибки(), Правило.Имя, "ПослеВыгрузкиОбъектаВыборки", Объект); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(34, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПослеВыгрузкиОбъектаВыборки", Объект); КонецПопытки; КонецЕсли; @@ -10947,7 +10954,7 @@ КонецПроцедуры // Параметры: -// МетаданныеОбъекта - ОбъектМетаданных - +// МетаданныеОбъекта - ОбъектМетаданных // Функция ПолучитьИмяПервогоРеквизитаМетаданных(МетаданныеОбъекта) @@ -11164,7 +11171,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОписаниеОшибки(), Правило.Имя, "ПередОбработкойВыгрузкиДанных"); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПередОбработкойВыгрузкиДанных"); КонецПопытки; @@ -11293,7 +11300,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), Правило.Имя, "ПослеОбработкиВыгрузкиДанных"); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; @@ -11304,7 +11311,7 @@ // Обходит дерево правил выгрузки данных и выполняет выгрузку. // // Параметры: -// Строки - Коллекция строк дерева значений. +// Строки - коллекция строк дерева значений. // Процедура ОбработатьПравилаВыгрузки(Строки, СоответствиеУзловПланаОбменаИСтрокВыгрузки) @@ -11364,8 +11371,8 @@ // Возвращаемое значение: // СтрокаДереваЗначений - строка дерева правил выгрузки данных: -// * Имя - Строка - -// * Наименование - Строка - +// * Имя - Строка +// * Наименование - Строка // Функция НайтиСтрокуДереваПравилВыгрузкиПоТипуВыгрузки(МассивСтрок, ТипВыгрузки) @@ -11404,7 +11411,7 @@ КонецПроцедуры // Параметры: -// Данные - ЛюбаяСсылка, РегистрСведенийНаборЗаписей, и т.п. - +// Данные - ЛюбаяСсылка, РегистрСведенийНаборЗаписей, и т.п. // Процедура ПолучитьСтрокуПравилВыгрузкиПоОбъектуОбмена(Данные, МетаданныеПоследнегоОбъекта, МетаданныеОбъектаВыгрузки, ПоследняяСтрокаПравилВыгрузки, ТекущаяСтрокаПравилаВыгрузки, ВременныйМассивПравилКонвертации, ОбъектДляПравилВыгрузки, @@ -11592,7 +11599,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПоследняяСтрокаПравилаВыгрузки.Имя, "ПослеОбработкиВыгрузкиДанных"); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПоследняяСтрокаПравилаВыгрузки.Имя, "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; @@ -11632,7 +11639,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОписаниеОшибки(), ТекущаяСтрокаПравилаВыгрузки.Имя, "ПередОбработкойВыгрузкиДанных"); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ТекущаяСтрокаПравилаВыгрузки.Имя, "ПередОбработкойВыгрузкиДанных"); КонецПопытки; @@ -11715,7 +11722,7 @@ ОтменитьТранзакцию(); КонецЕсли; - ЗП = ПолучитьСтруктуруЗаписиПротокола(72, ОписаниеОшибки()); + ЗП = ПолучитьСтруктуруЗаписиПротокола(72, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.УзелПланаОбмена = УзелОбмена; ЗП.Объект = Данные; ЗП.ТипОбъекта = ТипДанныхДляВыгрузки; @@ -11746,7 +11753,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПоследняяСтрокаПравилаВыгрузки.Имя, "ПослеОбработкиВыгрузкиДанных"); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПоследняяСтрокаПравилаВыгрузки.Имя, "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; @@ -11838,7 +11845,7 @@ // Открывает файл обмена, читает атрибуты корневого узла файла в соответствии с форматом обмена. // // Параметры: -// ТолькоПрочитатьШапку - Булево. если Истина, то после прочтения шапки файла обмена +// ТолькоПрочитатьШапку - Булево - если Истина, то после прочтения шапки файла обмена // (корневой узел), файл закрывается. // Процедура ОткрытьФайлЗагрузки(ТолькоПрочитатьШапку=Ложь, ДанныеФайлаОбмена = "") Экспорт @@ -12255,8 +12262,8 @@ // Осуществляет загрузку правил обмена в соответствии с форматом. // // Параметры: -// Источник - Объект, из которого осуществляется загрузка правил обмена; -// ТипИсточника - Строка, указывающая тип источника: "XMLФайл", "ЧтениеXML", "Строка". +// Источник - объект, из которого осуществляется загрузка правил обмена; +// ТипИсточника - Строка - указывающая тип источника: "XMLФайл", "ЧтениеXML", "Строка". // Процедура ЗагрузитьПравилаОбмена(Источник="", ТипИсточника="XMLФайл") Экспорт @@ -12746,7 +12753,7 @@ Исключение - ЗП = ПолучитьСтруктуруЗаписиПротокола(75, ОписаниеОшибки()); + ЗП = ПолучитьСтруктуруЗаписиПротокола(75, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.Обработчик = "ПослеЗагрузкиПараметров"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(75, ЗП, Истина); @@ -12778,7 +12785,7 @@ Исключение - ЗП = ПолучитьСтруктуруЗаписиПротокола(39, ОписаниеОшибки()); + ЗП = ПолучитьСтруктуруЗаписиПротокола(39, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.Обработчик = "АлгоритмФайлаОбмена"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(39, ЗП, Истина); @@ -12815,7 +12822,7 @@ Исключение - СтрокаОшибки = ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при загрузке данных: %1'"), ОписаниеОшибки()); + СтрокаОшибки = ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при загрузке данных: %1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); РезультирующаяСтрокаСИнформациейОбОшибке = ЗаписатьВПротоколВыполнения(СтрокаОшибки, Неопределено, Истина, , , Истина); @@ -12931,7 +12938,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); Отказ = Истина; КонецПопытки; @@ -12987,7 +12994,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); КонецПопытки; КонецЕсли; @@ -13091,7 +13098,7 @@ Исключение - ЗП = ПолучитьСтруктуруЗаписиПротокола(2, ОписаниеОшибки()); + ЗП = ПолучитьСтруктуруЗаписиПротокола(2, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВПротоколВыполнения(2, ЗП, Истина); Возврат ""; @@ -13291,7 +13298,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ОписаниеОшибки(), НСтр("ru = 'ПередВыгрузкойДанных (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПередВыгрузкойДанных (конвертация)'")); Отказ = Истина; КонецПопытки; @@ -13346,7 +13353,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ОписаниеОшибки(), НСтр("ru = 'ПослеВыгрузкиДанных (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'ПослеВыгрузкиДанных (конвертация)'")); КонецПопытки; ПровестиЗаписьНеЗаписанныхОбъектов(); @@ -13382,7 +13389,7 @@ КонецЕсли; Отказ = Истина; - СтрокаОшибки = ОписаниеОшибки(); + СтрокаОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписатьВПротоколВыполнения(ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при выгрузке данных: %1'"), СтрокаОшибки), Неопределено, Истина, , , Истина); @@ -13432,7 +13439,7 @@ // Процедура установки значения глобальной переменной "ФлагОшибки". // // Параметры: -// Значение - Булево, новое значение переменной "ФлагОшибки". +// Значение - Булево - новое значение переменной "ФлагОшибки". // Процедура УстановитьФлагОшибки(Значение) @@ -13944,46 +13951,46 @@ КонецПроцедуры // Возвращаемое значение: -// Структура - поля: -// * ВерсияФормата - Строка - -// * Ид - Строка - -// * Наименование - Строка - -// * ДатаВремяСоздания - Дата - -// * ВерсияПлатформыИсточника - Строка - -// * СинонимКонфигурацииИсточника - Строка - -// * ВерсияКонфигурацииИсточника - Строка - -// * Источник - Строка - -// * ВерсияПлатформыПриемника - Строка - -// * СинонимКонфигурацииПриемника - Строка - -// * ВерсияКонфигурацииПриемника - Строка - -// * Приемник - Строка - -// * ПослеЗагрузкиПравилОбмена - Строка - -// * ПередВыгрузкойДанных - Строка - -// * ПередПолучениемИзмененныхОбъектов - Строка - -// * ПослеПолученияИнформацииОбУзлахОбмена - Строка - -// * ПослеВыгрузкиДанных - Строка - -// * ПередОтправкойИнформацииОбУдалении - Строка - -// * ПередВыгрузкойОбъекта - Строка - -// * ПослеВыгрузкиОбъекта - Строка - -// * ПередЗагрузкойОбъекта - Строка - -// * ПослеЗагрузкиОбъекта - Строка - -// * ПередКонвертациейОбъекта - Строка - -// * ПередЗагрузкойДанных - Строка - -// * ПослеЗагрузкиДанных - Строка - -// * ПослеЗагрузкиПараметров - Строка - -// * ПриПолученииИнформацииОбУдалении - Строка - +// Структура: +// * ВерсияФормата - Строка +// * Ид - Строка +// * Наименование - Строка +// * ДатаВремяСоздания - Дата +// * ВерсияПлатформыИсточника - Строка +// * СинонимКонфигурацииИсточника - Строка +// * ВерсияКонфигурацииИсточника - Строка +// * Источник - Строка +// * ВерсияПлатформыПриемника - Строка +// * СинонимКонфигурацииПриемника - Строка +// * ВерсияКонфигурацииПриемника - Строка +// * Приемник - Строка +// * ПослеЗагрузкиПравилОбмена - Строка +// * ПередВыгрузкойДанных - Строка +// * ПередПолучениемИзмененныхОбъектов - Строка +// * ПослеПолученияИнформацииОбУзлахОбмена - Строка +// * ПослеВыгрузкиДанных - Строка +// * ПередОтправкойИнформацииОбУдалении - Строка +// * ПередВыгрузкойОбъекта - Строка +// * ПослеВыгрузкиОбъекта - Строка +// * ПередЗагрузкойОбъекта - Строка +// * ПослеЗагрузкиОбъекта - Строка +// * ПередКонвертациейОбъекта - Строка +// * ПередЗагрузкойДанных - Строка +// * ПослеЗагрузкиДанных - Строка +// * ПослеЗагрузкиПараметров - Строка +// * ПриПолученииИнформацииОбУдалении - Строка // Функция Конвертация() Возврат Конвертация; КонецФункции // Возвращаемое значение: -// Структура - содержит поля: -// * Имя - Строка - -// * ИмяТипа - Строка - -// * ТипСсылкиСтрокой - Строка - -// * Менеджер - СправочникМенеджер, ДокументМенеджер, РегистрСведенийМенеджер, и т.п. - -// * ОбъектМД - ОбъектМетаданныхСправочник, ОбъектМетаданныхДокумент, ОбъектМетаданныхРегистрСведений, и т.п. - +// Структура: +// * Имя - Строка +// * ИмяТипа - Строка +// * ТипСсылкиСтрокой - Строка +// * Менеджер - СправочникМенеджер, ДокументМенеджер, РегистрСведенийМенеджер, и т.п. +// * ОбъектМД - ОбъектМетаданныхСправочник, ОбъектМетаданныхДокумент, ОбъектМетаданныхРегистрСведений, и т.п. // * ПКО - см. НайтиПравило // Функция Менеджеры(Тип) @@ -14200,7 +14207,7 @@ СтрокаСообщенияОбОшибке = НСтр("ru = 'При попытке соединения с COM-сервером произошла следующая ошибка: |%1'"); - СтрокаСообщенияОбОшибке = ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ОписаниеОшибки()); + СтрокаСообщенияОбОшибке = ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СообщитьПользователю(СтрокаСообщенияОбОшибке); @@ -14234,7 +14241,7 @@ // Выделяет из имени файла его расширение (набор символов после последней точки). // // Параметры: -// ИмяФайла - Строка, содержащая имя файла, неважно с именем каталога или без. +// ИмяФайла - Строка - содержащая имя файла, неважно с именем каталога или без. // // Возвращаемое значение: // Строка - расширение файла. @@ -14468,13 +14475,13 @@ // Возвращаемое значение: // Структура - описание менеджера типа значения: -// * Имя - Строка - -// * ИмяТипа - Строка - -// * ТипСсылкиСтрокой - Строка - -// * Менеджер - Произвольный - -// * ОбъектМД - ОбъектМетаданных - -// * ВозможенПоискПоПредопределенным - Булево - -// * ПКО - Произвольный - +// * Имя - Строка +// * ИмяТипа - Строка +// * ТипСсылкиСтрокой - Строка +// * Менеджер - Произвольный +// * ОбъектМД - ОбъектМетаданных +// * ВозможенПоискПоПредопределенным - Булево +// * ПКО - Произвольный // Функция СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД) Структура = Новый Структура(); diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index 65e24f08e..8aaf677e9 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -811,18 +811,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПолучитьОптимальныеАгрегатКлиентЗавершение(ПустойПараметр, РезультатВыполнения) Экспорт - - Если РезультатВыполнения.ЕстьОшибки Тогда - ВызватьИсключение РезультатВыполнения.ТекстСообщения; - Иначе - ПоказатьОповещениеПользователя(НСтр("ru = 'Агрегаты успешно получены.'"),, - РезультатВыполнения.ТекстСообщения, БиблиотекаКартинок.Успешно32); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ИзменитьАгрегатыКлиент(Знач ПараметрыИтогов, Знач ОчищатьСообщения = Истина) @@ -853,7 +841,7 @@ ПолеСообщенияОбОшибке = ""; Если Не ПустаяСтрока(ПараметрыИтогов.Поле) Тогда - ПолеСообщенияОбОшибке = "АгрегатыПоРегистрам[" + Выбранные[Счетчик-1] + "]." + ПараметрыИтогов.Поле; + ПолеСообщенияОбОшибке = "АгрегатыПоРегистрам[" + Формат(Выбранные[Счетчик-1], "ЧГ=0") + "]." + ПараметрыИтогов.Поле; КонецЕсли; Если Не ВыбраннаяСтрока.РежимАгрегатов @@ -967,7 +955,7 @@ ПолеСообщенияОбОшибке = ""; Если Не ПустаяСтрока(ПараметрыИтогов.Поле) Тогда - ПолеСообщенияОбОшибке = "СписокИтогов[" + Выбранные[Счетчик - 1] + "]." + ПараметрыИтогов.Поле; + ПолеСообщенияОбОшибке = "СписокИтогов[" + Формат(Выбранные[Счетчик-1], "ЧГ=0") + "]." + ПараметрыИтогов.Поле; КонецЕсли; ЕстьРегистрыДляОбработки = Истина; @@ -1024,32 +1012,39 @@ Результат = ПолучитьОптимальныеАгрегатыСервер(); Обработчик = Новый ОписаниеОповещения("ПолучитьОптимальныеАгрегатКлиентЗавершение", ЭтотОбъект, Результат); - Если Результат.МожноПолучить Тогда - #Если ВебКлиент Тогда - ПолучитьФайл(Результат.АдресФайла, Результат.ИмяФайла, Истина); - ВыполнитьОбработкуОповещения(Обработчик, Истина); - #Иначе - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(Результат.ИмяФайла, Результат.АдресФайла)); - Расширение = НРег(Сред(Результат.ИмяФайла, СтрНайти(Результат.ИмяФайла, ".") + 1)); - Если Расширение = "zip" Тогда - Фильтр = НСтр("ru = 'Архив ZIP (*.%1)|*.%1'"); - ИначеЕсли Расширение = "xml" Тогда - Фильтр = НСтр("ru = 'Документ XML (*.%1)|*.%1'"); - Иначе - Фильтр = ""; - КонецЕсли; - Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Фильтр, Расширение); - ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - ДиалогСохраненияФайла.ПолноеИмяФайла = Результат.ИмяФайла; - ДиалогСохраненияФайла.Фильтр = Фильтр; - ДиалогСохраненияФайла.МножественныйВыбор = Ложь; - НачатьПолучениеФайлов(Обработчик, ПолучаемыеФайлы, ДиалогСохраненияФайла, Истина); - #КонецЕсли - Иначе - ВыполнитьОбработкуОповещения(Обработчик, Истина); + Если Не Результат.МожноПолучить Тогда + Возврат; КонецЕсли; + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Сохранить оптимальные агрегаты в файл'"); + Расширение = НРег(Сред(Результат.ИмяФайла, СтрНайти(Результат.ИмяФайла, ".") + 1)); + Если Расширение = "zip" Тогда + Фильтр = НСтр("ru = 'Файлы настроек агрегатов (*.zip)|*.zip'"); + ИначеЕсли Расширение = "xml" Тогда + Фильтр = НСтр("ru = 'Файлы настроек агрегатов (*.xml)|*.xml'"); + Иначе + Фильтр = ""; + КонецЕсли; + ПараметрыСохранения.Диалог.Фильтр = Фильтр; + ПараметрыСохранения.Диалог.ПолноеИмяФайла = Результат.ИмяФайла; + ФайловаяСистемаКлиент.СохранитьФайл(Обработчик, Результат.АдресФайла, Результат.ИмяФайла, ПараметрыСохранения); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьОптимальныеАгрегатКлиентЗавершение(ПолученныеФайлы, РезультатВыполнения) Экспорт + + Если ПолученныеФайлы = Неопределено Тогда + Возврат; + КонецЕсли; + + Если РезультатВыполнения.ЕстьОшибки Тогда + ВызватьИсключение РезультатВыполнения.ТекстСообщения; + КонецЕсли; + ПоказатьОповещениеПользователя(НСтр("ru = 'Агрегаты успешно получены.'"),, + РезультатВыполнения.ТекстСообщения, БиблиотекаКартинок.Успешно32); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl index 008c5d6eb..f3ecbb3d4 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl @@ -471,7 +471,7 @@ Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Каталог = ПолучитьКаталогФайла(Элементы.ПолеФайлОбновления.ТекстРедактирования); Диалог.ПроверятьСуществованиеФайла = Истина; - Если ЭтоБазоваяВерсия Тогда + Если ЭтоБазоваяВерсия И Не ДоступнаУстановкаПатчейВБазовойВерсии Тогда Диалог.Фильтр = НСтр("ru = 'Все файлы поставки (*.cf*;*.cfu)|*.cf*;*.cfu|Файлы поставки конфигурации (*.cf)|*.cf|Файлы поставки обновления конфигурации(*.cfu)|*.cfu'"); Иначе Диалог.МножественныйВыбор = Истина; @@ -697,13 +697,16 @@ &НаКлиенте Процедура ПерейтиКУстановкеИсправлений() - ПомещаемыеФайлы = Новый Массив; + ЗагружаемыеФайлы = Новый Массив; Для Каждого ФайлИсправления Из ФайлыИсправлений Цикл - ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ФайлИсправления)); + ЗагружаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ФайлИсправления)); КонецЦикла; ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьУстановкуИсправлений", ЭтотОбъект); - НачатьПомещениеФайлов(ОписаниеОповещения, ПомещаемыеФайлы,, Ложь, УникальныйИдентификатор); + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + ПараметрыЗагрузки.Интерактивно = Ложь; + ФайловаяСистемаКлиент.ЗагрузитьФайлы(ОписаниеОповещения, ПараметрыЗагрузки, ЗагружаемыеФайлы); КонецПроцедуры @@ -745,6 +748,11 @@ Элементы.ДекорацияУстановленоИсправлений.Видимость = Ложь; Возврат; КонецЕсли; + Иначе + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + МодульЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("РучнаяУстановкаПатча", 1); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -865,6 +873,7 @@ // // Возвращаемое значение: // Строка - каталог файла +// Функция ПолучитьКаталогФайла(Знач ПутьКФайлу) ПозицияСимвола = СтрНайти(ПутьКФайлу, "\", НаправлениеПоиска.СКонца); diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt index 0417aeefe..fdc8a490a 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt @@ -27,7 +27,7 @@ var ret = 0 // Код возврата предыдущего шага. var finish = false var errStep = 0 - var loadStep = 8 // шаг начала загрузки первого файла обновления + var loadStep = 10 // шаг начала загрузки первого файла обновления var endLoadStep = loadStep + cfgFileNames.length * 6 // следующий шаг после завершения загрузки файлов обновления if (cfgFileNames.length === 0) { @@ -72,6 +72,12 @@ case 7: ret = runDeferredHandlers() break + case 8: + setProgress('[Шаг11УдалениеПатчей]') + break + case 9: + ret = DeletePatches() + break case endLoadStep: if (makeCompression) { setProgress('[Шаг7СжатиеТаблиц]') diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt index a50fb74eb..eac96ce88 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt @@ -883,7 +883,7 @@ function runEnterprise () { return 0 } -function addDeletePatches () { +function addDeletePatches() { var fixFileNamesString = fixFileNames.join('\n') var removeFixNamesString = removeFixNames.join('\n') @@ -902,6 +902,39 @@ function addDeletePatches () { return result } +function DeletePatches() { + + if (!useComConnector) { + return 0 + } + + var Action = 'RemoveAll' + + try { + var result = runApp('wscript.exe', + format('"{0}\\add-delete-patches.js" /ConnectionString:"{1}" /COMConnectorName:"{2}" /Action:"{3}" /Out:"{4}\\{5}"', + thisFileDir, + connectionString.replace(/"/g, '\''), + comConnectorName, + Action, + thisFileDir, + tempLogFileName + ), + SW_HIDE, true) + appendLog() + + } catch (e) { + log(format('Исключение при вызове ОбновлениеКонфигурацииВызовСервера.УдалитьИсправленияИзСкрипта: {0}, {1}.', e.name, e.message), true) + result = 2; + } + + if (result != 0) { + log('Не удалось удалить исправления конфигурации. Подробности см. в предыдущей записи.') + } + + return result +} + function registerCOM() { isSchedule = (taskNameScheduleService !== '') param = isSchedule ? format('/s "{0}"', v8comcntr) : format('/n /i:user /s "{0}"', v8comcntr) diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптУдаленияПатчей/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптУдаленияПатчей/Template.txt index 745275e11..d4ab73428 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптУдаленияПатчей/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптУдаленияПатчей/Template.txt @@ -22,6 +22,7 @@ try { var COMConnectorName = WScript.Arguments.Named.Item('COMConnectorName') var fixFileNames = WScript.Arguments.Named.Item('FixFileNames') var removeFixNames = WScript.Arguments.Named.Item('RemoveFixNames') + var Action = WScript.Arguments.Named.Item('Action') var outFileName = WScript.Arguments.Named.Item('Out') var outf = fso.OpenTextFile(outFileName, ForWriting, true, OpenAsASCII) @@ -29,7 +30,11 @@ try { var COMConnector = new ActiveXObject(COMConnectorName) var connection = COMConnector.Connect(ConnectionString) - connection.ОбновлениеКонфигурацииВызовСервера.ОбновитьИсправленияИзСкрипта(fixFileNames, removeFixNames) + if (Action == 'RemoveAll') { + connection.ОбновлениеКонфигурацииВызовСервера.УдалитьИсправленияИзСкрипта(); + } else { + connection.ОбновлениеКонфигурацииВызовСервера.ОбновитьИсправленияИзСкрипта(fixFileNames, removeFixNames) + } } catch (ex) { if (outf != null) { diff --git a/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаОбъект/ВладелецЗначенийКлючейДоступаОбъект.mdo b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаОбъект/ВладелецЗначенийКлючейДоступаОбъект.mdo index b6084f5e7..50517c755 100644 --- a/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаОбъект/ВладелецЗначенийКлючейДоступаОбъект.mdo +++ b/SSL/src/DefinedTypes/ВладелецЗначенийКлючейДоступаОбъект/ВладелецЗначенийКлючейДоступаОбъект.mdo @@ -34,7 +34,6 @@ CatalogObject.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы CatalogObject.ЗапланированноеВзаимодействиеПрисоединенныеФайлы CatalogObject.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы - CatalogObject.ИдентификаторыОбъектовМетаданных CatalogObject.ВариантыОтчетов TaskObject.ЗадачаИсполнителя CatalogObject.ПапкиЭлектронныхПисем diff --git a/SSL/src/DefinedTypes/КурсВалюты/КурсВалюты.mdo b/SSL/src/DefinedTypes/КурсВалюты/КурсВалюты.mdo new file mode 100644 index 000000000..7563776a0 --- /dev/null +++ b/SSL/src/DefinedTypes/КурсВалюты/КурсВалюты.mdo @@ -0,0 +1,19 @@ + + + + + + КурсВалюты + + ru + Курс валюты + + + Number + + 10 + 4 + true + + + diff --git a/SSL/src/DefinedTypes/ОбъектСНастраиваемымПорядком/ОбъектСНастраиваемымПорядком.mdo b/SSL/src/DefinedTypes/ОбъектСНастраиваемымПорядком/ОбъектСНастраиваемымПорядком.mdo index f83a16a35..844da5a1a 100644 --- a/SSL/src/DefinedTypes/ОбъектСНастраиваемымПорядком/ОбъектСНастраиваемымПорядком.mdo +++ b/SSL/src/DefinedTypes/ОбъектСНастраиваемымПорядком/ОбъектСНастраиваемымПорядком.mdo @@ -10,6 +10,7 @@ CatalogObject.ПравилаОбработкиЭлектроннойПочты + CatalogObject.СостоянияОригиналовПервичныхДокументов CatalogObject.ВидыКонтактнойИнформации CatalogObject.ВариантыОтветовАнкет CatalogObject.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/DefinedTypes/ОбъектСУчетомОригиналовПервичныхДокументов/ОбъектСУчетомОригиналовПервичныхДокументов.mdo b/SSL/src/DefinedTypes/ОбъектСУчетомОригиналовПервичныхДокументов/ОбъектСУчетомОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..88660d927 --- /dev/null +++ b/SSL/src/DefinedTypes/ОбъектСУчетомОригиналовПервичныхДокументов/ОбъектСУчетомОригиналовПервичныхДокументов.mdo @@ -0,0 +1,17 @@ + + + + + + ОбъектСУчетомОригиналовПервичныхДокументов + + ru + Объект с учетом оригиналов первичных документов + + + String + + 10 + + + diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl index c3ad3d891..39ab81a0e 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl @@ -148,7 +148,7 @@ &НаКлиенте Процедура ОткрытьВложениеПисьма() - + ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; @@ -167,19 +167,7 @@ КонецЕсли; Иначе - #Если Не ВебКлиент Тогда - Если ЭтоАдресВременногоХранилища(ТекущиеДанные.АдресВоВременномХранилище) Тогда - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяВременнойПапки); - ПутьКФайлу = ИмяВременнойПапки + "\" + ТекущиеДанные.ИмяФайла; - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ТекущиеДанные.АдресВоВременномХранилище); // ДвоичныеДанные. - ДвоичныеДанные.Записать(ПутьКФайлу); - КонецЕсли; - ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлу); - #Иначе - ПутьКФайлу = ТекущиеДанные.ИмяФайлаНаКомпьютере; - ПолучитьФайл(ПутьКФайлу, ТекущиеДанные.ИмяФайла, Истина); - #КонецЕсли + ФайловаяСистемаКлиент.ОткрытьФайл(ТекущиеДанные.АдресВоВременномХранилище); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form index 358c71f4c..41dfe71d7 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form @@ -4,6 +4,116 @@ ru Взаимодействия + + ПредупреждениеОНеотправленныхПисьмах + 926 + + ПредупреждениеОНеотправленныхПисьмахКартинка + 928 + + <key>ru</key> + <value>Картинка предупреждение</value> + + true + true + + true + + + КартинкаПредупреждениеРасширеннаяПодсказка1 + 930 + Label + true + true + + Left + + + + КартинкаПредупреждениеКонтекстноеМеню1 + 929 + true + + true + true + + + CommonPicture.Предупреждение + + AsFileRef + + + + ПредупреждениеОНеотправленныхПисьмахНадпись + 931 + + <key>ru</key> + <value>Регламентное задание <b>Получение</><b> </><b>и</><b> </><b>отправка</><b> </><b>писем</> отключено, доставка писем не выполняется. <link ВключитьПолучениеИОтправкуПисем>Включить</></value> + + true + true + + true + + Button + + ПредупреждениеОНебезопасномСодержимомРасширеннаяПодсказка1 + 933 + Label + true + true + + Left + + + + ПредупреждениеОНебезопасномСодержимомКонтекстноеМеню1 + 932 + true + + true + Label + 33 + true + true + + + URLProcessing + ПредупреждениеОНеотправленныхПисьмахНадписьОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа предупреждение</value> + + + ПредупреждениеБезопасностиРасширеннаяПодсказка1 + 927 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + Auto + Auto + + ГруппаПользовательскихНастроек 832 @@ -2205,32 +2315,6 @@ UserCmds Auto - - КонтактыПанелиНавигацииКонтекстноеМенюТолькоЗначимыеКонтакты - 782 - true - true - - true - - - КонтактыПанелиНавигацииКонтекстноеМенюТолькоЗначимыеКонтактыРасширеннаяПодсказка - 783 - Label - true - true - - Left - - - Form.Command.ТолькоЗначимыеКонтакты - Normal - Auto - true - true - UserCmds - Auto - true true @@ -2393,6 +2477,40 @@ true
    + + ДекорацияТолькоЗначимыеКонтакты + 937 + true + true + + true + + + ДекорацияТолькоЗначимыеКонтактыРасширеннаяПодсказка + 939 + Label + true + true + + Left + + + + ДекорацияТолькоЗначимыеКонтактыКонтекстноеМеню + 938 + true + + Label + true + true + + + URLProcessing + ДекорацияТолькоЗначимыеКонтактыОбработкаНавигационнойСсылки + + Left + + true true @@ -2959,32 +3077,6 @@ UserCmds Auto
    - - ПредметыПанельНавигацииКонтекстноеМенюТолькоЗначимыеПредметы - 788 - true - true - - true - - - ПредметыПанельНавигацииКонтекстноеМенюТолькоЗначимыеПредметыРасширеннаяПодсказка - 789 - Label - true - true - - Left - - - Form.Command.ТолькоЗначимыеПредметы - Normal - Auto - true - true - UserCmds - Auto - true true @@ -3140,6 +3232,40 @@ true
    + + ДекорацияТолькоЗначимыеПредметы + 934 + true + true + + true + + + ДекорацияТолькоЗначимыеПредметыРасширеннаяПодсказка + 936 + Label + true + true + + Left + + + + ДекорацияТолькоЗначимыеПредметыКонтекстноеМеню + 935 + true + + Label + true + true + + + URLProcessing + ДекорацияТолькоЗначимыеПредметыОбработкаНавигационнойСсылки + + Left + + true true @@ -6910,7 +7036,7 @@
    UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -8335,6 +8461,17 @@ true + + ГиперссылкаЦвет + 37 + + + true + + + true + + УстановитьВариантНавигацииПоПредмету @@ -9032,50 +9169,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>ТолькоЗначимыеКонтакты</name> - <title> - <key>ru</key> - <value>Только значимые</value> - - 30 - - ru - Только значимые контакты - - - true - - - - ТолькоЗначимыеКонтакты - - - DontUse - Auto - - - ТолькоЗначимыеПредметы - - <key>ru</key> - <value>Только значимые предметы</value> - - 31 - - ru - Только значимые предметы - - - true - - - - ТолькоЗначимыеПредметы - - - DontUse - Auto - ТолькоАктивныеПредметы diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index b03217159..c1b720d03 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -27,6 +27,8 @@ ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + ГиперссылкаЦвет = ЦветаСтиля.ГиперссылкаЦвет; + Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтотОбъект, Параметры); ОпределитьДоступностьПолнотекстовыйПоиск(); ПравоПометкиУдаленияПапок = ПравоДоступа("Изменение", Метаданные.Справочники.ПапкиЭлектронныхПисем); @@ -64,6 +66,10 @@ Взаимодействия.ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания); ЗапрещеноОтображениеНебезопасногоСодержимогоВПисьмах = Взаимодействия.ЗапрещеноОтображениеНебезопасногоСодержимогоВПисьмах(); + ПроверитьСостояниеОтправкиПисемНаСервере(); + СФормироватьДекорациюТолькоЗначимыеПредметы(); + СФормироватьДекорациюТолькоЗначимыеКонтакты(); + КонецПроцедуры &НаСервере @@ -147,6 +153,8 @@ ВосстановитьРаскрытыеУзлыДерева(); + ПодключитьОбработчикОжидания("ПроверитьСостояниеОтправкиПисем", 60, Истина); + КонецПроцедуры &НаСервере @@ -596,6 +604,42 @@ КонецПроцедуры +&НаКлиенте +Процедура ПредупреждениеОНеотправленныхПисьмахНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + ВзаимодействияКлиент.ОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияТолькоЗначимыеПредметыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если НавигационнаяСсылкаФорматированнойСтроки = "ИзменитьТолькоЗначимыеПредметы" Тогда + + ТолькоЗначимыеПредметы = Не ТолькоЗначимыеПредметы; + ЗаполнитьПанельПредметов(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияТолькоЗначимыеКонтактыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если НавигационнаяСсылкаФорматированнойСтроки = "ИзменитьТолькоЗначимыеКонтакты" Тогда + + ТолькоЗначимыеКонтакты = Не ТолькоЗначимыеКонтакты; + ЗаполнитьПанельКонтактов(); + + КонецЕсли; + +КонецПроцедуры + + //////////////////////////////////////////////////////////////////////////////////// // Обработка перетаскивания @@ -1127,7 +1171,17 @@ &НаКлиенте Процедура СоздатьЭлектронноеПисьмо(Команда) - СоздатьНовоеВзаимодействие("ЭлектронноеПисьмоИсходящее"); + ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьЭлектронноеПисьмоПродолжение", ЭтотОбъект, ); + РаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОписаниеОповещения); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьЭлектронноеПисьмоПродолжение(ПроверкаВыполнена, ДополнительныеПараметры) Экспорт + + Если ПроверкаВыполнена = Истина Тогда + СоздатьНовоеВзаимодействие("ЭлектронноеПисьмоИсходящее"); + КонецЕсли; КонецПроцедуры @@ -1221,22 +1275,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ТолькоЗначимыеКонтакты(Команда) - - ТолькоЗначимыеКонтакты = Не ТолькоЗначимыеКонтакты; - ЗаполнитьПанельКонтактов(); - -КонецПроцедуры - -&НаКлиенте -Процедура ТолькоЗначимыеПредметы(Команда) - - ТолькоЗначимыеПредметы = Не ТолькоЗначимыеПредметы; - ЗаполнитьПанельПредметов(); - -КонецПроцедуры - &НаКлиенте Процедура ТолькоАктивныеПредметы(Команда) @@ -1557,15 +1595,13 @@ ВключитьНебезопасноеСодержимое = Ложь; УстановитьВидимостьПредупрежденияБезопасности(ЭтотОбъект); - ИмяСписка = "Список"; - - Если ВыборКорректен(ИмяСписка,Истина) Тогда + Если ВыборКорректен("Список",Истина) Тогда Если ОтображатьОбластьЧтения Тогда ИмяСтраницыПредпросмотра = Элементы.СтраницыПредпросмотр.ТекущаяСтраница.Имя; - Если ВзаимодействиеДляКоторогоСформированПредпросмотр <> Элементы[ИмяСписка].ТекущиеДанные.Ссылка Тогда - ОтобразитьПредпросмотрВзаимодействия(Элементы[ИмяСписка].ТекущиеДанные.Ссылка, ИмяСтраницыПредпросмотра); + Если ВзаимодействиеДляКоторогоСформированПредпросмотр <> Элементы.Список.ТекущиеДанные.Ссылка Тогда + ОтобразитьПредпросмотрВзаимодействия(Элементы.Список.ТекущиеДанные.Ссылка, ИмяСтраницыПредпросмотра); Если ИмяСтраницыПредпросмотра <> Элементы.СтраницыПредпросмотр.ТекущаяСтраница.Имя Тогда Элементы.СтраницыПредпросмотр.ТекущаяСтраница = Элементы[ИмяСтраницыПредпросмотра]; КонецЕсли; @@ -1574,7 +1610,7 @@ КонецЕсли; Если РасширенныйПоиск Тогда - ЗаполнитьОписаниеНайденоПП(Элементы[ИмяСписка].ТекущиеДанные.Ссылка); + ЗаполнитьОписаниеНайденоПП(Элементы.Список.ТекущиеДанные.Ссылка); Иначе ОписаниеНайденоПП = ""; КонецЕсли; @@ -1949,6 +1985,8 @@ КонецЕсли; УстановитьЗаголовокВидаПанелиНавигации(); + СФормироватьДекорациюТолькоЗначимыеПредметы(); + СФормироватьДекорациюТолькоЗначимыеКонтакты(); КонецПроцедуры @@ -1975,7 +2013,7 @@ НайденныеСтроки = ТаблицаДопРеквизитовСвойств.НайтиСтроки(Новый Структура("ДопРеквизитСведение", ТекущееСвойствоПанелиНавигации)); Если НайденныеСтроки.Количество() > 0 Тогда - Элементы["ДопКнопкаВыбораВариантаНавигацииСвойства_" + Строка(НайденныеСтроки[0].ПорядковыйНомер)].Пометка = Истина; + Элементы["ДопКнопкаВыбораВариантаНавигацииСвойства_" + XMLСтрока(НайденныеСтроки[0].ПорядковыйНомер)].Пометка = Истина; КонецЕсли; ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда @@ -2260,17 +2298,14 @@ Запрос = Новый Запрос; ТекстЗапросаПоОтбору = ПолучитьТекстЗапросаПоОтборуСписка(Запрос); - СтрокаПоКоторойИщем = Прав(ТекстЗапросаПоОтбору, СтрДлина(ТекстЗапросаПоОтбору) - СтрНайти(ТекстЗапросаПоОтбору,"ГДЕ") + 1); + СтрокаПоКоторойИщем = Прав(ТекстЗапросаПоОтбору, СтрДлина(ТекстЗапросаПоОтбору) - СтрНайти(ТекстЗапросаПоОтбору, "ГДЕ") + 1); МассивСтрокУсловия = СтрРазделить(СтрокаПоКоторойИщем, Символы.ПС, Ложь); ТекстУсловийПоЖурналуДокументов = ""; ТекстУсловийПоРегистру = ""; Инд = 1; Для Каждого СтрокаУсловия Из МассивСтрокУсловия Цикл - СтрокаУсловия = СтрЗаменить(СтрокаУсловия,"&П","&Пар"); - Если Инд = 2 Тогда - СтрокаУсловия = " И " + СтрокаУсловия; - КонецЕсли; + СтрокаУсловия = СтрЗаменить(СтрокаУсловия, "&П", "&Пар"); Если СтрНайти(СтрокаУсловия, "ЖурналДокументовВзаимодействия") Тогда ТекстУсловийПоЖурналуДокументов = ТекстУсловийПоЖурналуДокументов + СтрокаУсловия + Символы.ПС; ИначеЕсли СтрНайти(СтрокаУсловия, "ПредметыВзаимодействий") Тогда @@ -2283,33 +2318,33 @@ Инд = Инд + 1; КонецЦикла; - Если Не ПустаяСтрока(ТекстУсловийПоРегистру) Тогда - ТекстУсловийПоРегистру = "ГДЕ" + " " + ТекстУсловийПоРегистру - КонецЕсли; + ТекстЗапросаДинамическийСписок = + "ВЫБРАТЬ + | СостоянияПредметовВзаимодействий.Предмет КАК Предмет, + | СостоянияПредметовВзаимодействий.КоличествоНеРассмотрено КАК КоличествоНеРассмотрено, + | СостоянияПредметовВзаимодействий.ДатаПоследнегоВзаимодействия КАК ДатаПоследнегоВзаимодействия, + | СостоянияПредметовВзаимодействий.Активен КАК Активен, + | ТИПЗНАЧЕНИЯ(СостоянияПредметовВзаимодействий.Предмет) КАК ТипПредмета + |ИЗ + | РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия + | ПО + | ПредметыВзаимодействий.Предмет = СостоянияПредметовВзаимодействий.Предмет + | И ПредметыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка + | И &ТекстУсловияЖурналДокументов + | ГДЕ + | &ТекстУсловияРегистрПапки)"; - ТекстЗапросаДинамическийСписок = " - |ВЫБРАТЬ - | СостоянияПредметовВзаимодействий.Предмет, - | СостоянияПредметовВзаимодействий.КоличествоНеРассмотрено, - | СостоянияПредметовВзаимодействий.ДатаПоследнегоВзаимодействия, - | СостоянияПредметовВзаимодействий.Активен КАК Активен, - | ТИПЗНАЧЕНИЯ(СостоянияПредметовВзаимодействий.Предмет) КАК ТипПредмета - |ИЗ - | РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий - |ГДЕ - | ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия - | ПО ПредметыВзаимодействий.Предмет = СостоянияПредметовВзаимодействий.Предмет - | И ПредметыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка - | %ТекстУсловияЖурналДокументов% - | %ТекстУсловияРегистрПапки%)"; - - ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияЖурналДокументов%", ТекстУсловийПоЖурналуДокументов); - ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияРегистрПапки%", ТекстУсловийПоРегистру); + ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "&ТекстУсловияЖурналДокументов", + ?(ПустаяСтрока(ТекстУсловийПоЖурналуДокументов), "ИСТИНА", ТекстУсловийПоЖурналуДокументов)); + ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "&ТекстУсловияРегистрПапки", + ?(ПустаяСтрока(ТекстУсловийПоРегистру), "ИСТИНА", ТекстУсловийПоРегистру)); ПараметрыСписка.ТекстЗапроса = ТекстЗапросаДинамическийСписок; ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.ПредметыПанельНавигации, ПараметрыСписка); @@ -2353,9 +2388,9 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ОтборПриемник,"Активен", Истина,ВидСравненияКомпоновкиДанных.Равно); КонецЕсли; - Элементы.ПредметыПанельНавигацииКонтекстноеМенюТолькоЗначимыеПредметы.Пометка = ТолькоЗначимыеПредметы; Элементы.ПредметыПанельНавигацииКонтекстноеМенюТолькоАктивныеПредметы.Пометка = ПоказыватьВсеАктивныеПредметы; - + СФормироватьДекорациюТолькоЗначимыеПредметы(); + КонецПроцедуры &НаСервере @@ -2672,7 +2707,7 @@ КонецЕсли; - Элементы.КонтактыПанелиНавигацииКонтекстноеМенюТолькоЗначимыеКонтакты.Пометка = ТолькоЗначимыеКонтакты; + СФормироватьДекорациюТолькоЗначимыеКонтакты(); КонецПроцедуры @@ -2786,7 +2821,6 @@ КонецЕсли; Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Строка.Значение) Тогда - СтрокаДетали = Строка.Строки[0]; НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 от %2 %3'"), @@ -2794,7 +2828,6 @@ Формат(СтрокаДетали.Дата, "ДЛФ=DT"), ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, "","(" + Строка(Строка.НеРассмотрено) + ")")); НоваяСтрока.НомерКартинки = СтрокаДетали.НомерКартинки; - Иначе НоваяСтрока.Представление = Строка(НоваяСтрока.Значение) + ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, @@ -3054,11 +3087,11 @@ НоваяСтрока = ТаблицаДопРеквизитовСвойствТипаБулево.Добавить(); Иначе - НоваяКоманда = Команды.Добавить("УстановитьВариантПоСвойству_" + Строка(Инд)); + НоваяКоманда = Команды.Добавить("УстановитьВариантПоСвойству_" + XMLСтрока(Инд)); НоваяКоманда.Действие = "ПереключитьПанельНавигации"; - ЭлементКнопкаПодменю = Элементы.Добавить("ДопКнопкаВыбораВариантаНавигацииСвойства_" - + Строка(Инд),Тип("КнопкаФормы"), Элементы.ВыборВариантаНавигации); + ЭлементКнопкаПодменю = Элементы.Добавить("ДопКнопкаВыбораВариантаНавигацииСвойства_" + XMLСтрока(Инд), + Тип("КнопкаФормы"), Элементы.ВыборВариантаНавигации); ЭлементКнопкаПодменю.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; ЭлементКнопкаПодменю.ИмяКоманды = НоваяКоманда.Имя; ЭлементКнопкаПодменю.Заголовок = НСтр("ru = 'По'") + " " + Выборка.Представление; @@ -3243,6 +3276,7 @@ ИмяЭлемента, СтрокаВсе = Неопределено) + ТекущаяТаблица = Элементы[ИмяЭлемента]; // ТаблицаФормы Если ЗначениеТекущейСтроки <> Неопределено Тогда Если ИмяЭлемента <> "Категории" Тогда ИдентификаторНайденнойСтроки = НайтиСтрокуВДанныхФормыДерево(ЭтотОбъект[ИмяЭлемента], @@ -3251,13 +3285,14 @@ ИдентификаторНайденнойСтроки = НайтиСтрокуВДанныхФормыКоллекция(ЭтотОбъект[ИмяЭлемента], ЗначениеТекущейСтроки,"Значение"); КонецЕсли; + Если ИдентификаторНайденнойСтроки > 0 Тогда - Элементы[ИмяЭлемента].ТекущаяСтрока = ИдентификаторНайденнойСтроки; + ТекущаяТаблица.ТекущаяСтрока = ИдентификаторНайденнойСтроки; Иначе - Элементы[ИмяЭлемента].ТекущаяСтрока = ?(СтрокаВсе = Неопределено, 0, СтрокаВсе.ПолучитьИдентификатор()); + ТекущаяТаблица.ТекущаяСтрока = ?(СтрокаВсе = Неопределено, 0, СтрокаВсе.ПолучитьИдентификатор()); КонецЕсли; Иначе - Элементы[ИмяЭлемента].ТекущаяСтрока = ?(СтрокаВсе = Неопределено, 0, СтрокаВсе.ПолучитьИдентификатор()); + ТекущаяТаблица.ТекущаяСтрока = ?(СтрокаВсе = Неопределено, 0, СтрокаВсе.ПолучитьИдентификатор()); КонецЕсли; КонецПроцедуры @@ -3269,6 +3304,7 @@ // Параметры: // Взаимодействия - список выбранных взаимодействий. // Ответственный - устанавливаемый ответственный. +// &НаСервере Процедура УстановитьОтветственного(Ответственный, Знач ДанныеДляОбработки) @@ -3308,6 +3344,7 @@ // Установить флаг "Рассмотрено" в выбранных взаимодействиях - серверная часть. // Параметры: // Взаимодействия - список выбранных взаимодействий. +// &НаСервере Процедура УстановитьФлагРассмотрено(Знач ДанныеДляОбработки, ЗначениеПризнака) @@ -3539,6 +3576,7 @@ // Параметры: // Взаимодействия - список выбранных взаимодействий. // Предмет - устанавливаемый предмет взаимодействий. +// &НаСервере Процедура УстановитьПредмет(Предмет, Знач ДанныеДляОбработки) @@ -4099,4 +4137,49 @@ И Форма.ЕстьНебезопасноеСодержимое И Не Форма.ВключитьНебезопасноеСодержимое; КонецПроцедуры -#КонецОбласти +&НаКлиенте +Процедура ПроверитьСостояниеОтправкиПисем() + + ПроверитьСостояниеОтправкиПисемНаСервере(); + Интервал = ?(Элементы.ПредупреждениеОНеотправленныхПисьмах.Видимость, 60, 600); + ПодключитьОбработчикОжидания("ПроверитьСостояниеОтправкиПисем", Интервал, Истина); + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьСостояниеОтправкиПисемНаСервере() + + Элементы.ПредупреждениеОНеотправленныхПисьмах.Видимость = Взаимодействия.ОтправкаПисемПриостановлена(); + Элементы.ПредупреждениеОНеотправленныхПисьмахНадпись.Заголовок = Взаимодействия.ТекстПредупрежденияОПриостановкеОтправкиПисем(); + +КонецПроцедуры + +&НаСервере +Процедура СФормироватьДекорациюТолькоЗначимыеКонтакты() + + МассивСтрок = Новый Массив; + Если ТолькоЗначимыеКонтакты Тогда + ТекстЗаголовка = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Контакты с взаимодействиями по отбору, <a href = ""ИзменитьТолькоЗначимыеКонтакты"">изменить</a>'")); + Иначе + ТекстЗаголовка = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Отображаются все контакты, <a href = ""ИзменитьТолькоЗначимыеКонтакты"">изменить</a>'")); + КонецЕсли; + + Элементы.ДекорацияТолькоЗначимыеКонтакты.Заголовок = ТекстЗаголовка; + +КонецПроцедуры + +&НаСервере +Процедура СФормироватьДекорациюТолькоЗначимыеПредметы() + + МассивСтрок = Новый Массив; + Если ТолькоЗначимыеПредметы Тогда + ТекстЗаголовка = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Предметы с взаимодействиями по отбору, <a href = ""ИзменитьТолькоЗначимыеПредметы"">изменить</a>'")); + Иначе + ТекстЗаголовка = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Отображаются все предметы, <a href = ""ИзменитьТолькоЗначимыеПредметы"">изменить</a>'")); + КонецЕсли; + + Элементы.ДекорацияТолькоЗначимыеПредметы.Заголовок = ТекстЗаголовка; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index b77a2b6ef..e782a4be0 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -1029,7 +1029,7 @@ // Контакт - Ссылка - контакт, для которого необходимо выполнить поиск связанных контактов. // // Возвращаемое значение: -// Массив - +// Массив // &НаСервере Функция ПараметрКонтактВЗависимостиОтТипа(Контакт) diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl index 2acac4eb7..ff31b08e9 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -316,6 +316,7 @@ // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты. // ДеревоАнкетыСервер - ДеревоЗначений - дерево значений, содержащее шаблон анкеты. +// &НаСервере Процедура УстановитьЗначениеРеквизита(ВопросШаблона,ВыборкаВопрос) @@ -343,6 +344,7 @@ // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты. // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты. +// &НаСервере Процедура УстановитьЗначениеРеквизитаПростойВопрос(Вопрос,ВыборкаВопрос,СтрокаДерева) @@ -399,6 +401,7 @@ // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты. // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты. +// &НаСервере Процедура УстановитьЗначениеРеквизитаТабличныйВопрос(Вопрос,ВыборкаВопрос,СтрокаДерева) @@ -430,6 +433,7 @@ // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты. // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты. +// &НаСервере Процедура УстановитьЗначенияРеквизитаТабличныйВопросСоставной(Вопрос,ВыборкаВопрос,СтрокаДерева); @@ -472,6 +476,7 @@ // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты. // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты. +// &НаСервере Процедура УстановитьЗначенияРеквизитаТабличныйВопросОтветыВСтроках(Вопрос,ВыборкаВопрос,СтрокаДерева); @@ -486,7 +491,7 @@ НомерВопросаВМассиве = МассивВопросы.Найти(ВыборкаВопрос.ЭлементарныйВопрос); Если (НомерВопросаВМассиве <> Неопределено) И (ВыборкаВопрос.НомерЯчейки <= Таблица.Количество()) Тогда - Таблица[ВыборкаВопрос.НомерЯчейки - 1][ИмяКолонкиБезНомера + Строка(НомерВопросаВМассиве+1)] = ВыборкаВопрос.Ответ; + Таблица[ВыборкаВопрос.НомерЯчейки - 1][ИмяКолонкиБезНомера + XMLСтрока(НомерВопросаВМассиве+1)] = ВыборкаВопрос.Ответ; КонецЕсли; КонецЦикла; @@ -503,6 +508,7 @@ // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты. // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты. +// &НаСервере Процедура УстановитьЗначенияРеквизитаТабличныйВопросОтветыВКолонках(Вопрос,ВыборкаВопрос,СтрокаДерева); @@ -519,7 +525,7 @@ НомерВопросаВМассиве = МассивВопросы.Найти(ВыборкаВопрос.ЭлементарныйВопрос); Если (НомерВопросаВМассиве <> Неопределено) Тогда Если (НомерВопросаВМассиве <= Таблица.Количество()) И (ВыборкаВопрос.НомерЯчейки <= Таблица.Колонки.Количество()) Тогда - Таблица[НомерВопросаВМассиве][ИмяКолонкиБезНомера + Строка(ВыборкаВопрос.НомерЯчейки + 1)] = ВыборкаВопрос.Ответ; + Таблица[НомерВопросаВМассиве][ИмяКолонкиБезНомера + XMLСтрока(ВыборкаВопрос.НомерЯчейки + 1)] = ВыборкаВопрос.Ответ; КонецЕсли; КонецЕсли; @@ -537,6 +543,7 @@ // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты. // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты. +// &НаСервере Процедура УстановитьЗначенияРеквизитаТабличныйВопросОтветыВСтрокахКолонках(Вопрос,ВыборкаВопрос,СтрокаДерева) @@ -552,7 +559,7 @@ Если ВыборкаВопрос.ЭлементарныйВопрос = ВопросЯчейка Тогда НомерКолонки = ?(ВыборкаВопрос.НомерЯчейки%(КоличествоКолонок - 1)=0,КоличествоКолонок - 1,ВыборкаВопрос.НомерЯчейки%(КоличествоКолонок - 1)); НомерСтроки = ЦЕЛ((ВыборкаВопрос.НомерЯчейки + ЦЕЛ(ВыборкаВопрос.НомерЯчейки/КоличествоКолонок))/КоличествоКолонок); - Таблица[НомерСтроки ][ИмяКолонкиБезНомера + Строка(НомерКолонки+1)] = ВыборкаВопрос.Ответ; + Таблица[НомерСтроки ][ИмяКолонкиБезНомера + XMLСтрока(НомерКолонки+1)] = ВыборкаВопрос.Ответ; КонецЕсли; КонецЦикла; @@ -568,6 +575,7 @@ // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты. // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты. +// &НаСервере Процедура УстановитьЗначенияРеквизитаКомплексныйВопрос(Вопрос,ВыборкаВопрос,СтрокаДерева); @@ -786,7 +794,7 @@ Для ИндексКолонки = 1 По СтрокаДерева.СоставТабличногоВопроса.Количество()-1 Цикл - Ответ = Таблица[ИндексСтроки][ИмяКолонкиБезНомера + Строка(ИндексКолонки+1)]; + Ответ = Таблица[ИндексСтроки][ИмяКолонкиБезНомера + XMLСтрока(ИндексКолонки+1)]; Если ЗначениеЗаполнено(Ответ) Тогда ЕстьХотяБыОдинОтветУказанныйРеспондентом = Истина; @@ -842,7 +850,7 @@ Для ИндексСтроки = 0 По Таблица.Количество() - 1 Цикл Для ИндексКолонки = 1 По Таблица.Колонки.Количество() - 1 Цикл - Ответ = Таблица[ИндексСтроки][ИмяКолонкиБезНомера + Строка(ИндексКолонки+1)]; + Ответ = Таблица[ИндексСтроки][ИмяКолонкиБезНомера + XMLСтрока(ИндексКолонки+1)]; Если ЗначениеЗаполнено(Ответ) Тогда НомерЯчейки = ИндексКолонки + ИндексСтроки * (Таблица.Колонки.Количество() - 1); @@ -890,7 +898,7 @@ Для ИндексСтроки = 0 По Таблица.Количество() - 1 Цикл - Ответ = Таблица[ИндексСтроки][ИмяКолонкиБезНомера + Строка(ИндексКолонки + 1)]; + Ответ = Таблица[ИндексСтроки][ИмяКолонкиБезНомера + XMLСтрока(ИндексКолонки + 1)]; Если ЗначениеЗаполнено(Ответ) Тогда ЕстьХотяБыОдинОтветУказанныйРеспондентом = Истина; @@ -1066,6 +1074,7 @@ // Возвращаемое значение: // Булево - Истина, в случае если проверка заполнения обязательных ответов закончилась неудачей, // Ложь, в обратном случае. +// &НаСервере Функция ПроверитьЗаполнениеАнкеты() @@ -1557,8 +1566,8 @@ КонецПроцедуры // Параметры: -// ИзмененныйТекст - Строка - . -// ДополнительныеПараметры - Структура - . +// ИзмененныйТекст - Строка +// ДополнительныеПараметры - Структура // &НаКлиенте Процедура РедактированиеМногострочногоТекстаПриОкончании(ИзмененныйТекст, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/Documents/Анкета/ManagerModule.bsl b/SSL/src/Documents/Анкета/ManagerModule.bsl index 2f98efb4d..c46b49f7e 100644 --- a/SSL/src/Documents/Анкета/ManagerModule.bsl +++ b/SSL/src/Documents/Анкета/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl index 6079aba87..4914d8549 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl @@ -108,7 +108,6 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства - ОбновитьОтображениеДанных(); ПроверитьДоступностьСозданияКонтакта(); // СтандартныеПодсистемы.РаботаСФайлами diff --git a/SSL/src/Documents/Встреча/ManagerModule.bsl b/SSL/src/Documents/Встреча/ManagerModule.bsl index efc098cbb..81e61b6fb 100644 --- a/SSL/src/Documents/Встреча/ManagerModule.bsl +++ b/SSL/src/Documents/Встреча/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl index 8bd1876f3..5ea9dcca2 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl @@ -36,7 +36,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl index 9e8ebdd6f..ce075409a 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl @@ -32,7 +32,7 @@ // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. // // Параметры: -// Таблица - см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа. +// Таблица - см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа // Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт diff --git a/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl b/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl index a1885761b..b18979da4 100644 --- a/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl +++ b/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -61,15 +62,15 @@ // Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений. // // Параметры: -// Реквизиты - ДеревоЗначений - список реквизитов шаблона. -// ** Имя - Строка - Уникальное имя общего реквизита. -// ** Представление - Строка - Представление общего реквизита. -// ** Тип - Тип - Тип реквизита. По умолчанию строка. -// ** Формат - Строка - Формат вывода значения для чисел, дат, строк и булевых значений. -// Вложения - ТаблицаЗначений - печатные формы и вложения -// ** Имя - Строка - Уникальное имя вложения. -// ** Представление - Строка - Представление варианта. -// ** ТипФайла - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl" +// Реквизиты - ДеревоЗначений - список реквизитов шаблона: +// ** Имя - Строка - уникальное имя общего реквизита. +// ** Представление - Строка - представление общего реквизита. +// ** Тип - Тип - тип реквизита. По умолчанию строка. +// ** Формат - Строка - формат вывода значения для чисел, дат, строк и булевых значений. +// Вложения - ТаблицаЗначений - печатные формы и вложения: +// ** Имя - Строка - уникальное имя вложения. +// ** Представление - Строка - представление варианта. +// ** ТипФайла - Строка - тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl" // и др. // ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений. // @@ -80,18 +81,19 @@ // Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений. // // Параметры: -// Сообщение - Структура - структура с ключами: -// * ЗначенияРеквизитов - Соответствие - список используемых в шаблоне реквизитов. +// Сообщение - Структура: +// * ЗначенияРеквизитов - Соответствие - список используемых в шаблоне реквизитов: // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. -// * ЗначенияОбщихРеквизитов - Соответствие - список используемых в шаблоне общих реквизитов. +// * ЗначенияОбщихРеквизитов - Соответствие - список используемых в шаблоне общих реквизитов: // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. -// * Вложения - Соответствие - значения реквизитов +// * Вложения - Соответствие: // ** Ключ - Строка - имя вложения в шаблоне; -// ** Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения. +// ** Значение - ДвоичныеДанные +// - Строка - двоичные данные или адрес во временном хранилище вложения. // ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных. -// ДополнительныеПараметры - Структура - Дополнительная информация о шаблоне сообщения. +// ДополнительныеПараметры - Структура - дополнительная информация о шаблоне сообщения. // Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт @@ -100,7 +102,7 @@ // Заполняет список получателей SMS при отправке сообщения сформированного по шаблону. // // Параметры: -// ПолучателиSMS - ТаблицаЗначений - список получателей SMS. +// ПолучателиSMS - ТаблицаЗначений: // * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS; // * Представление - Строка - представление получателя сообщения SMS; // * Контакт - Произвольный - контакт, которому принадлежит номер телефона. @@ -110,7 +112,7 @@ // * ВидСообщения - Строка - вид формируемого сообщения: "ЭлектроннаяПочта" или "СообщениеSMS"; // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров; // * ОтправитьСразу - Булево - признак мгновенной отправки; -// * ПараметрыСообщения - Структура - Дополнительные параметры сообщения. +// * ПараметрыСообщения - Структура - дополнительные параметры сообщения. // Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт @@ -119,7 +121,7 @@ // Заполняет список получателей почты при отправке сообщения сформированного по шаблону. // // Параметры: -// ПолучателиПисьма - ТаблицаЗначений - список получается письма. +// ПолучателиПисьма - ТаблицаЗначений - список получается письма: // * Адрес - Строка - адрес электронной почты получателя; // * Представление - Строка - представление получателя письма; // * Контакт - Произвольный - контакт, которому принадлежит адрес электронной почты. @@ -129,7 +131,7 @@ // * ВидСообщения - Строка - вид формируемого сообщения: "ЭлектроннаяПочта" или "СообщениеSMS"; // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров; // * ОтправитьСразу - Булево - признак мгновенной отправки письма; -// * ПараметрыСообщения - Структура - Дополнительные параметры сообщения; +// * ПараметрыСообщения - Структура - дополнительные параметры сообщения; // * ПреобразовыватьHTMLДляФорматированногоДокумента - Булево - признак преобразование HTML текста // сообщения содержащего картинки в тексте письма из-за особенностей вывода изображений // в форматированном документе; diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index dd65652fe..e6080b73d 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -288,15 +288,18 @@ &НаСервере Процедура ЗаполнитьДанныеСубъекта() - Если Объект.Субъект.ЭтоГруппа Тогда + Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Субъект, "ЭтоГруппа") Тогда ВызватьИсключение НСтр("ru = 'Для ввода согласия на обработку персональных данных необходимо выбрать элемент, а не группу.'"); - КонецЕсли; - ДанныеСубъекта = ЗащитаПерсональныхДанных.ОписаниеДанныхСубъекта(); + КонецЕсли; + + Документы.СогласиеНаОбработкуПерсональныхДанных.ПроверитьВозможностьОформленияСогласия(Объект.Субъект); + + ДанныеСубъекта = ЗащитаПерсональныхДанных.ОписаниеДанныхСубъекта(); ДанныеСубъекта.Субъект = Объект.Субъект; ДанныеСубъектов = Новый Массив; ДанныеСубъектов.Добавить(ДанныеСубъекта); - + ЗащитаПерсональныхДанныхПереопределяемый.ДополнитьДанныеСубъектовПерсональныхДанных(ДанныеСубъектов, Объект.ДатаПолучения); Объект.ФИОСубъекта = ДанныеСубъекта.ФИО; diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl index f982c2410..4fe4a5890 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -75,7 +75,6 @@ ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных(OfficeOpenXML)"); Если ПечатнаяФорма <> Неопределено Тогда - ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(OfficeOpenXML)"; МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати("Документ.СогласиеНаОбработкуПерсональныхДанных", ИмяМакета, МассивОбъектов); @@ -84,8 +83,8 @@ Шаблон = НСтр("ru = 'Согласие на обработку ПДн [Субъект] - [Организация] (№[Номер] получено [ДатаПолучения])'"); ЗначенияРеквизитовДокументов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивОбъектов, "Организация,Субъект,Номер,ДатаПолучения,Ссылка"); Для Каждого Ссылка Из МассивОбъектов Цикл - ЗначенияРеквизитовДокумента = ЗначенияРеквизитовДокументов[Ссылка]; + ПроверитьВозможностьОформленияСогласия(ЗначенияРеквизитовДокумента.Субъект); ЗначенияРеквизитовДокумента.ДатаПолучения = Формат(ЗначенияРеквизитовДокумента.ДатаПолучения, "ДЛФ=D"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") Тогда МодульПрефиксацияОбъектовКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПрефиксацияОбъектовКлиентСервер"); @@ -96,12 +95,10 @@ АдресХранилищаОфисныйДокумент = НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Ссылка, МакетИДанныеОбъекта, ИмяМакета); ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, ИмяДокумента); - КонецЦикла; ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Согласие на обработку персональных данных (документ Microsoft Word)'"); ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы; - КонецЕсли; КонецПроцедуры @@ -115,7 +112,7 @@ // Возвращаемое значение: // Соответствие - коллекция ссылок на объекты и их данные: // * Ключ - ЛюбаяСсылка - ссылка на объект информационной базы; -// * Значение - Структура - макет и данные: +// * Значение - Структура: // ** Ключ - Строка - имя макета, // ** Значение - Структура - данные объекта. // @@ -247,7 +244,7 @@ // Параметры: // Согласия - массив документов типа ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных. // -// Возвращаемое значение - массив структур, см. ОписаниеСогласия(). +// Возвращаемое значение - см. ОписаниеСогласия // Функция ДанныеДляПечатиСогласий(Согласия) @@ -279,6 +276,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл + ПроверитьВозможностьОформленияСогласия(Выборка.Субъект); Описание = ОписаниеСогласия(); ЗаполнитьЗначенияСвойств(Описание, Выборка); Если Не ПустаяСтрока(Выборка.НаименованиеОрганизации) Тогда @@ -307,7 +305,7 @@ // Параметры: // Согласия - массив документов типа ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных. // -// Возвращаемое значение - соответствие, в котором ключом является ссылкой, а значением описание, см. ОписаниеСогласия(). +// Возвращаемое значение - см. ОписаниеСогласия // Функция СоответствиеДанныхДляПечатиСогласий(Согласия) @@ -473,6 +471,14 @@ КонецФункции +Процедура ПроверитьВозможностьОформленияСогласия(СубъектПДн) Экспорт + + Если ЗащитаПерсональныхДанных.ЭтоОбъектСоСкрытымиПерсональнымиДанными(СубъектПДн) Тогда + ВызватьИсключение НСтр("ru = 'Оформление согласия невозможно, ПДн субъекта скрыты.'"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru/Template.bin b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru/Template.bin index 3036aa474..604be7ba1 100644 Binary files a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru/Template.bin and b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru/Template.bin differ diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx index d3e7387f4..65ff78867 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx @@ -925,7 +925,7 @@ <tl> <v8:item> <v8:lang>ru</v8:lang> - <v8:content> [ФИО], именуемый в дальнейшем «Субъект персональных данных» разрешает [ОрганизацияВДательномПадеже], в лице ответственного за обработку персональных данных [ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже] далее «Оператор», обработку персональных данных, приведенных в пункте 2 настоящего согласия, на следующих условиях:</v8:content> + <v8:content> [ФИО], именуемый в дальнейшем «Субъект персональных данных», разрешает [ОрганизацияВДательномПадеже], в лице ответственного за обработку персональных данных [ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже], далее «Оператор», обработку персональных данных, приведенных в пункте 2 настоящего согласия, на следующих условиях:</v8:content> </v8:item> </tl> </c> diff --git a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl index bcd3220df..cfff28a24 100644 --- a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl +++ b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl @@ -36,7 +36,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl index 4d36d2cfa..f8bdb7f0d 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl index 3e5353026..65dda991f 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl @@ -47,7 +47,7 @@ // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. // // Параметры: -// Таблица - см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа. +// Таблица - см. УправлениеДоступом.ТаблицаНаборыЗначенийДоступа // Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo index 9bde8ae69..f17820468 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo +++ b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo @@ -138,6 +138,7 @@ <maxValue xsi:type="core:UndefinedValue"/> <fillChecking>ShowError</fillChecking> <fillValue xsi:type="core:StringValue"/> + <indexing>Index</indexing> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl index 20cc90eb8..b8b46b46a 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo index a9dffc4de..136cb6966 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo @@ -346,6 +346,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <fillValue xsi:type="core:StringValue"/> + <indexing>Index</indexing> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> @@ -640,7 +641,7 @@ <dataHistory>Use</dataHistory> </attributes> <attributes uuid="efd4e0a3-2f98-40ef-8089-c853cd588fa6"> - <name>ХэшСумма</name> + <name>ХешСумма</name> <synonym> <key>ru</key> <value>Хеш сумма</value> diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form index 67b014e21..925c21580 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form @@ -1,252 +1,23 @@ <?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>361</id> - <items xsi:type="form:Table"> - <name>СписокПолучателей</name> - <id>399</id> + <name>ПредупреждениеОНеотправленныхПисьмах</name> + <id>472</id> + <items xsi:type="form:Decoration"> + <name>ПредупреждениеОНеотправленныхПисьмахКартинка</name> + <id>474</id> <title> <key>ru</key> - <value>Список получателей</value> + <value>Картинка предупреждение</value> true true true - - СписокПолучателей - - None - - СписокПолучателейВариантОтправки - 412 - true - true - - true - - - СписокПолучателей.ВариантОтправки - - - СписокПолучателейВариантОтправкиРасширеннаяПодсказка - 414 - Label - true - true - - Left - - - - СписокПолучателейВариантОтправкиКонтекстноеМеню - 413 - true - - InputField - Auto - true - Left - true - - 3 - true - true - true - true - OnActivate - true - - - ru - Кому: - - - Кому: - - - - - ru - Копия: - - - Копия: - - - - - ru - Скрытая копия: - - - Скрытая копия: - - - - - ru - Обратный адрес: - - - Обратный адрес: - - - Normal - - - - СписокПолучателейПредставление - 418 - true - true - - true - - - СписокПолучателей.Представление - - true - - СписокПолучателейПредставлениеРасширеннаяПодсказка - 420 - Label - true - true - - Left - - - - СписокПолучателейПредставлениеКонтекстноеМеню - 419 - true - - InputField - Auto - true - Left - true - - - AutoComplete - СписокПолучателейПредставлениеАвтоПодбор - - - StartChoice - СписокПолучателейПредставлениеНачалоВыбора - - - ChoiceProcessing - СписокПолучателейПредставлениеОбработкаВыбора - - true - true - true - true - true - true - true - Normal - - - - СписокПолучателейКоманднаяПанель - 401 - Left - - - BeforeDeleteRow - СписокПолучателейПередУдалением - - - BeforeEditEnd - СписокПолучателейПередОкончаниемРедактирования - - - OnStartEdit - СписокПолучателейПриНачалеРедактирования - - - OnChange - СписокПолучателейПриИзменении - - - СписокПолучателейСтрокаПоиска - 403 - - СписокПолучателейСтрокаПоискаРасширеннаяПодсказка - 405 - Label - true - true - - Left - - - - СписокПолучателейСтрокаПоискаКонтекстноеМеню - 404 - true - - СписокПолучателей - - true - - - - СписокПолучателейСостояниеПросмотра - 406 - - СписокПолучателейСостояниеПросмотраРасширеннаяПодсказка - 408 - Label - true - true - - Left - - - - СписокПолучателейСостояниеПросмотраКонтекстноеМеню - 407 - true - - ViewStatusAddition - СписокПолучателей - - true - - - - СписокПолучателейУправлениеПоиском - 409 - - СписокПолучателейУправлениеПоискомРасширеннаяПодсказка - 411 - Label - true - true - - Left - - - - СписокПолучателейУправлениеПоискомКонтекстноеМеню - 410 - true - - SearchControlAddition - СписокПолучателей - - true - - - СписокПолучателейРасширеннаяПодсказка - 402 + КартинкаПредупреждениеРасширеннаяПодсказка1 + 476 Label true true @@ -255,1082 +26,58 @@ - СписокПолучателейКонтекстноеМеню - 400 + КартинкаПредупреждениеКонтекстноеМеню1 + 475 true - true - true - 4 - 5 - 4 - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto + true + true + + + CommonPicture.Предупреждение + + AsFileRef + + + + ПредупреждениеОНеотправленныхПисьмахНадпись + 477 + + <key>ru</key> + <value>Регламентное задание <b>Получение</><b> </><b>и</><b> </><b>отправка</><b> </><b>писем</> отключено, доставка писем не выполняется. <link ВключитьПолучениеИОтправкуПисем>Включить</></value> + + true + true + + true + + Button + + ПредупреждениеОНебезопасномСодержимомРасширеннаяПодсказка1 + 479 + Label + true + true + + Left + + + + ПредупреждениеОНебезопасномСодержимомКонтекстноеМеню1 + 478 + true + + true + Label + 33 + true true - true - true - true - true - - - - СтраницыУказаныКонтакты - 255 - - СтраницаКонтактыЗаполнены - 256 - - ДекорацияПустая - 257 - true - true - - true - - - ДекорацияПустаяРасширеннаяПодсказка - 315 - Label - true - true - - Left - - - - ДекорацияПустаяКонтекстноеМеню - 258 - true - - Label - 10 - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница контакты заполнены</value> - - - СтраницаКонтактыЗаполненыExtendedTooltip - 314 - Label - true - true - - Left - - - Page - - HorizontalIfPossible - auto - false - - - - СтраницаКонтактыНеЗаполнены - 261 - - ГруппаКонтактыНеЗаполнены - 262 - - УточнитьКонтакты - 263 - true - true - - true - - - УточнитьКонтактыExtendedTooltip - 319 - Label - true - true - - Left - - - Hyperlink - Form.Command.УточнитьКонтакты - Normal - PictureAndText - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Контакты не заполнены</value> - - - ГруппаКонтактыНеЗаполненыExtendedTooltip - 318 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница контакты не заполнены</value> - - - СтраницаКонтактыНеЗаполненыExtendedTooltip - 317 - Label - true - true - - Left - - - Page - - HorizontalIfPossible - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы указаны контакты</value> - - Right - - СтраницыУказаныКонтактыExtendedTooltip - 313 - Label - true - true - - Left - - - Pages - - Auto - - - - Тема - 29 - true - true - - true - - - Объект.Тема - - None - - ТемаExtendedTooltip - 327 - Label - true - true - - Left - - - - ТемаКонтекстноеМеню - 30 - true - - InputField - Enter - true - Left - true - - 40 - true - true - true - true - Normal - - ru - Тема - - - - - СтраницыОписаниеДополнительно - 248 - - СтраницаОписание - 249 - - СтраницаПисьмо - 213 - - СтраницыТекстПисьма - 197 - - СтраницаОбычныйТекст - 198 - - ТекстПисьма - 25 - true - true - - true - - - ТекстПисьма - - None - - ТекстПисьмаExtendedTooltip - 349 - Label - true - true - - Left - - - - ТекстПисьмаКонтекстноеМеню - 26 - - ТекстПисьмаКонтекстноеМенюВставитьВнешнююСсылкуНаОбъектИнформационнойБазы - 385 - true - true - - true - - - ТекстПисьмаКонтекстноеМенюВставитьВнешнююСсылкуНаОбъектИнформационнойБазыРасширеннаяПодсказка - 386 - Label - true - true - - Left - - - Form.Command.ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаКонтекстноеМенюГруппа - 470 - - ФормаHTMLКонтекстноеМеню - 435 - true - true - - true - - - ФормаHTMLКонтекстноеМенюРасширеннаяПодсказка - 436 - Label - true - true - - Left - - - Form.Command.HTML - Normal - Auto - true - true - UserCmds - Auto - - - ФормаОбычныйТекстКонтекстноеМеню - 437 - true - true - - true - - - ФормаОбычныйТекстКонтекстноеМенюРасширеннаяПодсказка - 438 - Label - true - true - - Left - - - Form.Command.ОбычныйТекст - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Формат сообщения</value> - - - ТекстПисьмаКонтекстноеМенюГруппаРасширеннаяПодсказка - 471 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - true - - HTMLDocumentField - Enter - true - Left - true - - - OnClick - ТекстПисьмаПриНажатии - - 50 - true - 7 - true - true - true - - - true - true - - true - - - <key>ru</key> - <value>Страница обычный текст</value> - - - СтраницаОбычныйТекстExtendedTooltip - 348 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаФорматированныйДокумент - 199 - - ГруппаКоманднаяПанельФорматированногоДокумента - 202 - true - true - - true - - - <key>ru</key> - <value>Командная панель форматированного документа</value> - - - ГруппаКоманднаяПанельФорматированногоДокументаExtendedTooltip - 351 - Label - true - true - - Left - - - CommandBar - - Left - Item.ТекстПисьмаФорматированныйДокумент - - - - ТекстПисьмаФорматированныйДокумент - 200 - true - true - - true - - - ТекстПисьмаФорматированныйДокумент - - None - - ТекстПисьмаФорматированныйДокументExtendedTooltip - 352 - Label - true - true - - Left - - - - ТекстПисьмаФорматированныйДокументКонтекстноеМеню - 201 - - ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы - 387 - true - true - - true - - - ВставитьВнешнююСсылкуНаОбъектИнформационнойБазыРасширеннаяПодсказка - 388 - Label - true - true - - Left - - - Form.Command.ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы - Normal - Auto - true - true - UserCmds - Auto - - - ФорматСообщенияКонтекстноеМенюГруппа - 468 - - ФормаОбычныйТекстКонтекстноеМеню1 - 443 - true - true - - true - - - ФормаОбычныйТекстКонтекстноеМеню1РасширеннаяПодсказка - 444 - Label - true - true - - Left - - - Form.Command.ОбычныйТекст - Normal - Auto - true - true - UserCmds - Auto - - - ФормаHTMLКонтекстноеМеню1 - 441 - true - true - - true - - - ФормаHTMLКонтекстноеМеню1РасширеннаяПодсказка - 442 - Label - true - true - - Left - - - Form.Command.HTML - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Формат сообщения</value> - - - ФорматСообщенияКонтекстноеМенюГруппаРасширеннаяПодсказка - 469 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - true - - FormattedDocumentField - Enter - true - Left - true - - 50 - true - 7 - true - true - - - true - true - - true - - - <key>ru</key> - <value>Страница форматированный документ</value> - - - СтраницаФорматированныйДокументExtendedTooltip - 350 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы текст письма</value> - - - СтраницыТекстПисьмаExtendedTooltip - 347 - Label - true - true - - Left - - - Pages - - Auto - - - - ГруппаВходящее - 208 - - ПредупреждениеБезопасности - 423 - - КартинкаПредупреждение - 425 - - <key>ru</key> - <value>Картинка предупреждение</value> - - true - true - - true - - - КартинкаПредупреждениеРасширеннаяПодсказка - 427 - Label - true - true - - Left - - - - КартинкаПредупреждениеКонтекстноеМеню - 426 - true - - true - true - - - CommonPicture.Предупреждение - - AsFileRef - - - - ПредупреждениеОНебезопасномСодержимом - 428 - - <key>ru</key> - <value>В целях безопасности некоторые элементы письма отключены, письмо может отображаться некорректно. <link ВключитьНебезопасноеСодержимое>Отобразить небезопасное содержимое</></value> - - true - true - - true - - Button - - ПредупреждениеОНебезопасномСодержимомРасширеннаяПодсказка - 430 - - <key>ru</key> - <value>Входящие письма могут содержать элементы, позволяющие отправителю скрытно отслеживать действия с письмом, в частности, время просмотра и некоторые параметры устройства, на котором письмо было прочитано. К небезопасным элементам относятся, например, загружаемые из Интернета картинки письма или встроенные скрипты. В целях безопасности такие элементы автоматически отключаются при просмотре письма.</value> - - Label - true - true - - Left - - - - ПредупреждениеОНебезопасномСодержимомКонтекстноеМеню - 429 - true - - true - Label - 33 - true - true - - - URLProcessing - ПредупреждениеОНебезопасномСодержимомОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Предупреждение безопасности</value> - - - ПредупреждениеБезопасностиРасширеннаяПодсказка - 424 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Auto - true - true - Auto - Auto - - - - ТекстВходящегоПисьма - 203 - - <key>ru</key> - <value>Входящее сообщение</value> - - true - true - - true - - - ТекстВходящегоПисьма - - None - - ТекстВходящегоПисьмаExtendedTooltip - 354 - Label - true - true - - Left - - - - ТекстВходящегоПисьмаКонтекстноеМеню - 204 - true - - HTMLDocumentField - true - Enter - true - Left - true - - - OnClick - ТекстВходящегоПисьмаПриНажатии - - 50 - true - 7 - true - true - true - - - true - true - - true - - - <key>ru</key> - <value>Входящее</value> - - - ГруппаВходящееExtendedTooltip - 353 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаОтправленоНомер - 275 - true - true - - true - - - <key>ru</key> - <value>Отправлено номер</value> - - - ГруппаОтправленоНомерExtendedTooltip - 355 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Письмо</value> - - - СтраницаПисьмоExtendedTooltip - 346 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Письмо</value> - - - СтраницаОписаниеExtendedTooltip - 345 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаДополнительныеРеквизиты - 252 - true - true - - true - - - <key>ru</key> - <value>Дополнительно</value> - - - СтраницаДополнительныеРеквизитыExtendedTooltip - 358 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаКомментарий - 283 - - Комментарий - 284 - true - true - - true - - - Объект.Комментарий - - None - - КомментарийExtendedTooltip - 360 - Label - true - true - - Left - - - - КомментарийКонтекстноеМеню - 285 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Комментарий</value> - - - СтраницаКомментарийExtendedTooltip - 359 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы описание дополнительно</value> - - - СтраницыОписаниеДополнительноExtendedTooltip - 344 - Label - true - true - - Left - - - Pages - + - OnCurrentPageChange - СтраницыОписаниеДополнительноПриСменеСтраницы + URLProcessing + ПредупреждениеОНеотправленныхПисьмахНадписьОбработкаНавигационнойСсылки - TabsOnTop - Auto + Left true @@ -1340,11 +87,11 @@
    <key>ru</key> - <value>Лево</value> + <value>Группа предупреждение</value> - ГруппаЛевоРасширеннаяПодсказка - 362 + ПредупреждениеБезопасностиРасширеннаяПодсказка1 + 473 Label true true @@ -1354,8 +101,9 @@ UsualGroup - Vertical + AlwaysHorizontal Auto + WeakSeparation true true Auto @@ -1363,1281 +111,8 @@ - ГруппаПраво - 363 - - Вложения - 138 - - <key>ru</key> - <value>Вложения</value> - - true - true - - true - - - Вложения - - false - None - - Группа - 149 - - ИндексКартинки - 145 - true - true - - true - - - Вложения.ИндексКартинки - - None - - ИндексКартинкиExtendedTooltip - 339 - Label - true - true - - Left - - - - ИндексКартинкиКонтекстноеМеню - 146 - true - - PictureField - Enter - Left - true - - 2 - true - true - true - - CommonPicture.КоллекцияПиктограммФайлов - - - 1 - - - - - ИмяФайла - 143 - true - true - - true - - - Вложения.ИмяФайла - - - ИмяФайлаExtendedTooltip - 340 - Label - true - true - - Left - - - - ИмяФайлаКонтекстноеМеню - 144 - true - - InputField - Enter - Left - true - - true - true - true - true - Normal - - - - РазмерПредставление - 236 - true - true - - true - - - Вложения.РазмерПредставление - - - РазмерПредставлениеExtendedTooltip - 341 - Label - true - true - - Left - - - - РазмерПредставлениеКонтекстноеМеню - 237 - true - - InputField - true - Auto - Left - true - - 5 - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Вложения</value> - - - ГруппаExtendedTooltip - 338 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - true - - - None - - ВложенияКоманднаяПанель - 140 - Left - true - - - DragCheck - ВложенияПроверкаПеретаскивания - - - Selection - ВложенияВыбор - - - BeforeAddRow - ВложенияПередНачаломДобавления - - - BeforeDeleteRow - ВложенияПередУдалением - - - Drag - ВложенияПеретаскивание - - - OnActivateCell - ВложенияПриАктивизацииЯчейки - - - ВложенияСтрокаПоиска - 376 - - ВложенияСтрокаПоискаРасширеннаяПодсказка - 378 - Label - true - true - - Left - - - - ВложенияСтрокаПоискаКонтекстноеМеню - 377 - true - - Вложения - - true - - - - ВложенияСостояниеПросмотра - 379 - - ВложенияСостояниеПросмотраРасширеннаяПодсказка - 381 - Label - true - true - - Left - - - - ВложенияСостояниеПросмотраКонтекстноеМеню - 380 - true - - ViewStatusAddition - Вложения - - true - - - - ВложенияУправлениеПоиском - 382 - - ВложенияУправлениеПоискомРасширеннаяПодсказка - 384 - Label - true - true - - Left - - - - ВложенияУправлениеПоискомКонтекстноеМеню - 383 - true - - SearchControlAddition - Вложения - - true - - - - ВложенияExtendedTooltip - 336 - Label - true - true - - Left - - - - ВложенияКонтекстноеМеню - 139 - - ДобавитьВложение - 150 - true - true - - true - - false - - ДобавитьВложениеExtendedTooltip - 331 - Label - true - true - - Left - - - Form.Command.ДобавитьВложение - Normal - Auto - true - true - UserCmds - Auto - - - ДобавитьПисьмо - 397 - true - true - - true - - - ДобавитьПисьмоРасширеннаяПодсказка - 398 - Label - true - true - - Left - - - Form.Command.ДобавитьПисьмо - Normal - Auto - true - true - UserCmds - Auto - - - ОткрытьВложение - 152 - true - true - - true - - false - - ОткрытьВложениеExtendedTooltip - 332 - Label - true - true - - Left - - - Form.Command.ОткрытьВложение - Normal - Auto - true - true - UserCmds - Auto - - - СохранитьВложение - 153 - true - true - - true - - false - - СохранитьВложениеExtendedTooltip - 333 - Label - true - true - - Left - - - 0 - Normal - Auto - true - true - UserCmds - Auto - - - ВложенияКонтекстноеМенюГруппа - 466 - - УдалитьВложение - 187 - - <key>ru</key> - <value>Удалить вложение</value> - - true - true - - true - - false - - УдалитьВложениеExtendedTooltip - 334 - Label - true - true - - Left - - - Form.Item.Вложения.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Вложения контекстное меню группа</value> - - - ВложенияКонтекстноеМенюГруппаРасширеннаяПодсказка - 467 - Label - true - true - - Left - - - - - - ВложенияКонтекстноеМенюСвойстваВложения - 280 - true - true - - true - - - ВложенияКонтекстноеМенюСвойстваВложенияExtendedTooltip - 335 - Label - true - true - - Left - - - Form.Command.СвойстваВложения - Normal - Auto - true - true - UserCmds - Auto - - - true - true - 32 - true - 2 - true - MultiRow - Row -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - true - Auto - Auto - true - true - true - - Вложения.ИндексКартинки - - - CommonPicture.КоллекцияПиктограммФайлов - - true - -
    - - КомандыВложений - 450 - - ДобавитьВложениеКоманда - 452 - true - true - - true - - false - - ДобавитьВложениеКомандаРасширеннаяПодсказка - 453 - Label - true - true - - Left - - - Form.Command.ДобавитьВложение - Normal - Auto - true - true - UserCmds - Auto - - - ДобавитьПисьмоКоманда - 454 - true - true - - true - - - ДобавитьПисьмоКомандаРасширеннаяПодсказка - 455 - Label - true - true - - Left - - - Form.Command.ДобавитьПисьмо - Normal - Auto - true - true - UserCmds - Auto - - - ОткрытьВложениеКоманда - 456 - true - true - - true - - false - - ОткрытьВложениеКомандаРасширеннаяПодсказка - 457 - Label - true - true - - Left - - - Form.Command.ОткрытьВложение - Normal - Auto - true - true - UserCmds - Auto - - - СохранитьВложениеКоманда - 458 - true - true - - true - - false - - СохранитьВложениеКомандаРасширеннаяПодсказка - 459 - Label - true - true - - Left - - - 0 - Normal - Auto - true - true - UserCmds - Auto - - - ГруппаУдалить - 464 - - УдалитьВложениеКоманда - 460 - - <key>ru</key> - <value>Удалить вложение</value> - - true - true - - true - - false - - УдалитьВложениеКомандаРасширеннаяПодсказка - 461 - Label - true - true - - Left - - - Form.Item.Вложения.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Удалить</value> - - - ГруппаУдалитьРасширеннаяПодсказка - 465 - Label - true - true - - Left - - - - - - СвойстваВложения - 462 - true - true - - true - - - СвойстваВложенияРасширеннаяПодсказка - 463 - Label - true - true - - Left - - - Form.Command.СвойстваВложения - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды вложений</value> - - - КомандыВложенийРасширеннаяПодсказка - 451 - Label - true - true - - Left - - - CommandBar - - Right - - - - Предмет - 160 - true - true - - true - - - Предмет - - Top - - ПредметExtendedTooltip - 310 - Label - true - true - - Left - - - - ПредметКонтекстноеМеню - 161 - true - - InputField - Enter - true - Left - true - - - StartChoice - ПредметНачалоВыбора - - 32 - true - false - false - true - ShowInInputField - false - true - true - true - Normal - - - - Ответственный - 165 - true - true - - true - - - Объект.Ответственный - - Top - - ОтветственныйExtendedTooltip - 321 - Label - true - true - - Left - - - - ОтветственныйКонтекстноеМеню - 166 - true - - InputField - Enter - true - Left - true - - 32 - true - false - true - true - true - Normal - - - - ОтправительПредставление - 136 - - <key>ru</key> - <value>От</value> - - true - true - - true - - - Объект.ОтправительПредставление - - Top - - ОтправительПредставлениеExtendedTooltip - 305 - Label - true - true - - Left - - - - ОтправительПредставлениеКонтекстноеМеню - 137 - true - - InputField - Enter - true - Left - true - - - ChoiceProcessing - ПредставлениеОтправителяОбработкаВыбора - - 32 - true - true - true - true - true - Normal - - - - НаКонтроле - 245 - - <key>ru</key> - <value>На контроле</value> - - true - true - - true - - - НаКонтроле - - Right - - OnChange - НаКонтролеПриИзменении - - - НаКонтролеExtendedTooltip - 323 - Label - true - true - - Left - - - - НаКонтролеКонтекстноеМеню - 246 - true - - CheckBoxField - Enter - true - Left - true - - - - РассмотретьПосле - 167 - true - true - - true - - - РассмотретьПосле - - Top - - РассмотретьПослеExtendedTooltip - 324 - Label - true - true - - Left - - - - РассмотретьПослеКонтекстноеМеню - 168 - true - - InputField - Enter - true - Left - true - - - ChoiceProcessing - РассмотретьПослеОбработкаВыбора - - true - true - false - true - true - true - true - Normal - - - - Важность - 264 - true - true - - true - - - Объект.Важность - - Top - - ВажностьExtendedTooltip - 320 - Label - true - true - - Left - - - - ВажностьКонтекстноеМеню - 265 - true - - InputField - Enter - true - Left - true - - 17 - true - true - false - true - true - true - Normal - - - - ГруппаДатаОтправкиАктуальность - 368 - - ДатаКогдаОтправить - 370 - - <key>ru</key> - <value>Когда отправить</value> - - true - true - - true - - - Объект.ДатаКогдаОтправить - - Top - - ДатаКогдаОтправитьРасширеннаяПодсказка - 372 - Label - true - true - - Left - - - - ДатаКогдаОтправитьКонтекстноеМеню - 371 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - - - ДатаАктуальностиОтправки - 373 - - <key>ru</key> - <value>Не отправлять после</value> - - true - true - - true - - - Объект.ДатаАктуальностиОтправки - - Top - - ДатаАктуальностиОтправкиРасширеннаяПодсказка - 375 - Label - true - true - - Left - - - - ДатаАктуальностиОтправкиКонтекстноеМеню - 374 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дата отправки актуальность</value> - - - ГруппаДатаОтправкиАктуальностьРасширеннаяПодсказка - 369 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ГруппаДатаОтправленияНомер - 393 - - Номер - 276 - true - - true - - - Объект.Number - - - НомерExtendedTooltip - 356 - Label - true - true - - Left - - - - НомерКонтекстноеМеню - 277 - true - - LabelField - Bottom - Bottom - Enter - true - Left - true - - 9 - true - true - false - - - - ДатаОтправления - 278 - true - true - - true - - - Объект.ДатаОтправления - - - ДатаОтправленияExtendedTooltip - 357 - Label - true - true - - Left - - - - ДатаОтправленияКонтекстноеМеню - 279 - true - - LabelField - true - Bottom - Bottom - Enter - true - Left - true - - 11 - true - true - - ru - ДФ='дд.ММ.гггг Ч:мм' - - - - true - true - - true - - - <key>ru</key> - <value>Дата отправления номер</value> - - true - - ГруппаДатаОтправленияНомерРасширеннаяПодсказка - 394 - Label - true - true - - Left - - - UsualGroup - - Vertical - Bottom - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Право</value> - - - ГруппаПравоРасширеннаяПодсказка - 364 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - -
    - - ФормаКоманднаяПанель - -1 + КоманднаяПанель + 482 Отправить 135 @@ -3139,6 +614,2702 @@ UserCmds Auto + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + Группа2РасширеннаяПодсказка + 483 + Label + true + true + + Left + + + CommandBar + + Left + + + + ВсеЭлементы + 480 + + ГруппаЛево + 361 + + СписокПолучателей + 399 + + <key>ru</key> + <value>Список получателей</value> + + true + true + + true + + + СписокПолучателей + + None + + СписокПолучателейВариантОтправки + 412 + true + true + + true + + + СписокПолучателей.ВариантОтправки + + + СписокПолучателейВариантОтправкиРасширеннаяПодсказка + 414 + Label + true + true + + Left + + + + СписокПолучателейВариантОтправкиКонтекстноеМеню + 413 + true + + InputField + Auto + true + Left + true + + 3 + true + true + true + true + OnActivate + true + + + ru + Кому: + + + Кому: + + + + + ru + Копия: + + + Копия: + + + + + ru + Скрытая копия: + + + Скрытая копия: + + + + + ru + Обратный адрес: + + + Обратный адрес: + + + Normal + + + + СписокПолучателейПредставление + 418 + true + true + + true + + + СписокПолучателей.Представление + + true + + СписокПолучателейПредставлениеРасширеннаяПодсказка + 420 + Label + true + true + + Left + + + + СписокПолучателейПредставлениеКонтекстноеМеню + 419 + true + + InputField + Auto + true + Left + true + + + AutoComplete + СписокПолучателейПредставлениеАвтоПодбор + + + StartChoice + СписокПолучателейПредставлениеНачалоВыбора + + + ChoiceProcessing + СписокПолучателейПредставлениеОбработкаВыбора + + true + true + true + true + true + true + true + Normal + + + + СписокПолучателейКоманднаяПанель + 401 + Left + + + BeforeDeleteRow + СписокПолучателейПередУдалением + + + BeforeEditEnd + СписокПолучателейПередОкончаниемРедактирования + + + OnStartEdit + СписокПолучателейПриНачалеРедактирования + + + OnChange + СписокПолучателейПриИзменении + + + СписокПолучателейСтрокаПоиска + 403 + + СписокПолучателейСтрокаПоискаРасширеннаяПодсказка + 405 + Label + true + true + + Left + + + + СписокПолучателейСтрокаПоискаКонтекстноеМеню + 404 + true + + СписокПолучателей + + true + + + + СписокПолучателейСостояниеПросмотра + 406 + + СписокПолучателейСостояниеПросмотраРасширеннаяПодсказка + 408 + Label + true + true + + Left + + + + СписокПолучателейСостояниеПросмотраКонтекстноеМеню + 407 + true + + ViewStatusAddition + СписокПолучателей + + true + + + + СписокПолучателейУправлениеПоиском + 409 + + СписокПолучателейУправлениеПоискомРасширеннаяПодсказка + 411 + Label + true + true + + Left + + + + СписокПолучателейУправлениеПоискомКонтекстноеМеню + 410 + true + + SearchControlAddition + СписокПолучателей + + true + + + + СписокПолучателейРасширеннаяПодсказка + 402 + Label + true + true + + Left + + + + СписокПолучателейКонтекстноеМеню + 400 + true + + true + true + 4 + 5 + 4 + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + + + + СтраницыУказаныКонтакты + 255 + + СтраницаКонтактыЗаполнены + 256 + + ДекорацияПустая + 257 + true + true + + true + + + ДекорацияПустаяРасширеннаяПодсказка + 315 + Label + true + true + + Left + + + + ДекорацияПустаяКонтекстноеМеню + 258 + true + + Label + 10 + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница контакты заполнены</value> + + + СтраницаКонтактыЗаполненыExtendedTooltip + 314 + Label + true + true + + Left + + + Page + + HorizontalIfPossible + auto + false + + + + СтраницаКонтактыНеЗаполнены + 261 + + ГруппаКонтактыНеЗаполнены + 262 + + УточнитьКонтакты + 263 + true + true + + true + + + УточнитьКонтактыExtendedTooltip + 319 + Label + true + true + + Left + + + Hyperlink + Form.Command.УточнитьКонтакты + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Контакты не заполнены</value> + + + ГруппаКонтактыНеЗаполненыExtendedTooltip + 318 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница контакты не заполнены</value> + + + СтраницаКонтактыНеЗаполненыExtendedTooltip + 317 + Label + true + true + + Left + + + Page + + HorizontalIfPossible + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы указаны контакты</value> + + Right + + СтраницыУказаныКонтактыExtendedTooltip + 313 + Label + true + true + + Left + + + Pages + + Auto + + + + Тема + 29 + true + true + + true + + + Объект.Тема + + None + + ТемаExtendedTooltip + 327 + Label + true + true + + Left + + + + ТемаКонтекстноеМеню + 30 + true + + InputField + Enter + true + Left + true + + 40 + true + true + true + true + Normal + + ru + Тема + + + + + СтраницыОписаниеДополнительно + 248 + + СтраницаОписание + 249 + + СтраницаПисьмо + 213 + + СтраницыТекстПисьма + 197 + + СтраницаОбычныйТекст + 198 + + ТекстПисьма + 25 + true + true + + true + + + ТекстПисьма + + None + + ТекстПисьмаExtendedTooltip + 349 + Label + true + true + + Left + + + + ТекстПисьмаКонтекстноеМеню + 26 + + ТекстПисьмаКонтекстноеМенюВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + 385 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюВставитьВнешнююСсылкуНаОбъектИнформационнойБазыРасширеннаяПодсказка + 386 + Label + true + true + + Left + + + Form.Command.ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюГруппа + 470 + + ФормаHTMLКонтекстноеМеню + 435 + true + true + + true + + + ФормаHTMLКонтекстноеМенюРасширеннаяПодсказка + 436 + Label + true + true + + Left + + + Form.Command.HTML + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОбычныйТекстКонтекстноеМеню + 437 + true + true + + true + + + ФормаОбычныйТекстКонтекстноеМенюРасширеннаяПодсказка + 438 + Label + true + true + + Left + + + Form.Command.ОбычныйТекст + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Формат сообщения</value> + + + ТекстПисьмаКонтекстноеМенюГруппаРасширеннаяПодсказка + 471 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + true + + HTMLDocumentField + Enter + true + Left + true + + + OnClick + ТекстПисьмаПриНажатии + + 50 + true + 7 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Страница обычный текст</value> + + + СтраницаОбычныйТекстExtendedTooltip + 348 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаФорматированныйДокумент + 199 + + ГруппаКоманднаяПанельФорматированногоДокумента + 202 + true + true + + true + + + <key>ru</key> + <value>Командная панель форматированного документа</value> + + + ГруппаКоманднаяПанельФорматированногоДокументаExtendedTooltip + 351 + Label + true + true + + Left + + + CommandBar + + Left + Item.ТекстПисьмаФорматированныйДокумент + + + + ТекстПисьмаФорматированныйДокумент + 200 + true + true + + true + + + ТекстПисьмаФорматированныйДокумент + + None + + ТекстПисьмаФорматированныйДокументExtendedTooltip + 352 + Label + true + true + + Left + + + + ТекстПисьмаФорматированныйДокументКонтекстноеМеню + 201 + + ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + 387 + true + true + + true + + + ВставитьВнешнююСсылкуНаОбъектИнформационнойБазыРасширеннаяПодсказка + 388 + Label + true + true + + Left + + + Form.Command.ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + Normal + Auto + true + true + UserCmds + Auto + + + ФорматСообщенияКонтекстноеМенюГруппа + 468 + + ФормаОбычныйТекстКонтекстноеМеню1 + 443 + true + true + + true + + + ФормаОбычныйТекстКонтекстноеМеню1РасширеннаяПодсказка + 444 + Label + true + true + + Left + + + Form.Command.ОбычныйТекст + Normal + Auto + true + true + UserCmds + Auto + + + ФормаHTMLКонтекстноеМеню1 + 441 + true + true + + true + + + ФормаHTMLКонтекстноеМеню1РасширеннаяПодсказка + 442 + Label + true + true + + Left + + + Form.Command.HTML + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Формат сообщения</value> + + + ФорматСообщенияКонтекстноеМенюГруппаРасширеннаяПодсказка + 469 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + true + + FormattedDocumentField + Enter + true + Left + true + + 50 + true + 7 + true + true + + + true + true + + true + + + <key>ru</key> + <value>Страница форматированный документ</value> + + + СтраницаФорматированныйДокументExtendedTooltip + 350 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы текст письма</value> + + + СтраницыТекстПисьмаExtendedTooltip + 347 + Label + true + true + + Left + + + Pages + + Auto + + + + ГруппаВходящее + 208 + + ПредупреждениеБезопасности + 423 + + КартинкаПредупреждение + 425 + + <key>ru</key> + <value>Картинка предупреждение</value> + + true + true + + true + + + КартинкаПредупреждениеРасширеннаяПодсказка + 427 + Label + true + true + + Left + + + + КартинкаПредупреждениеКонтекстноеМеню + 426 + true + + true + true + + + CommonPicture.Предупреждение + + AsFileRef + + + + ПредупреждениеОНебезопасномСодержимом + 428 + + <key>ru</key> + <value>В целях безопасности некоторые элементы письма отключены, письмо может отображаться некорректно. <link ВключитьНебезопасноеСодержимое>Отобразить небезопасное содержимое</></value> + + true + true + + true + + Button + + ПредупреждениеОНебезопасномСодержимомРасширеннаяПодсказка + 430 + + <key>ru</key> + <value>Входящие письма могут содержать элементы, позволяющие отправителю скрытно отслеживать действия с письмом, в частности, время просмотра и некоторые параметры устройства, на котором письмо было прочитано. К небезопасным элементам относятся, например, загружаемые из Интернета картинки письма или встроенные скрипты. В целях безопасности такие элементы автоматически отключаются при просмотре письма.</value> + + Label + true + true + + Left + + + + ПредупреждениеОНебезопасномСодержимомКонтекстноеМеню + 429 + true + + true + Label + 33 + true + true + + + URLProcessing + ПредупреждениеОНебезопасномСодержимомОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Предупреждение безопасности</value> + + + ПредупреждениеБезопасностиРасширеннаяПодсказка + 424 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ТекстВходящегоПисьма + 203 + + <key>ru</key> + <value>Входящее сообщение</value> + + true + true + + true + + + ТекстВходящегоПисьма + + None + + ТекстВходящегоПисьмаExtendedTooltip + 354 + Label + true + true + + Left + + + + ТекстВходящегоПисьмаКонтекстноеМеню + 204 + true + + HTMLDocumentField + true + Enter + true + Left + true + + + OnClick + ТекстВходящегоПисьмаПриНажатии + + 50 + true + 7 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Входящее</value> + + + ГруппаВходящееExtendedTooltip + 353 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОтправленоНомер + 275 + true + true + + true + + + <key>ru</key> + <value>Отправлено номер</value> + + + ГруппаОтправленоНомерExtendedTooltip + 355 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Письмо</value> + + + СтраницаПисьмоExtendedTooltip + 346 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Письмо</value> + + + СтраницаОписаниеExtendedTooltip + 345 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаДополнительныеРеквизиты + 252 + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + + СтраницаДополнительныеРеквизитыExtendedTooltip + 358 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаКомментарий + 283 + + Комментарий + 284 + true + true + + true + + + Объект.Комментарий + + None + + КомментарийExtendedTooltip + 360 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 285 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + СтраницаКомментарийExtendedTooltip + 359 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы описание дополнительно</value> + + + СтраницыОписаниеДополнительноExtendedTooltip + 344 + Label + true + true + + Left + + + Pages + + + OnCurrentPageChange + СтраницыОписаниеДополнительноПриСменеСтраницы + + TabsOnTop + Auto + + + true + true + + true + + + <key>ru</key> + <value>Лево</value> + + + ГруппаЛевоРасширеннаяПодсказка + 362 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПраво + 363 + + Вложения + 138 + + <key>ru</key> + <value>Вложения</value> + + true + true + + true + + + Вложения + + false + None + + Группа + 149 + + ИндексКартинки + 145 + true + true + + true + + + Вложения.ИндексКартинки + + None + + ИндексКартинкиExtendedTooltip + 339 + Label + true + true + + Left + + + + ИндексКартинкиКонтекстноеМеню + 146 + true + + PictureField + Enter + Left + true + + 2 + true + true + true + + CommonPicture.КоллекцияПиктограммФайлов + + + 1 + + + + + ИмяФайла + 143 + true + true + + true + + + Вложения.ИмяФайла + + + ИмяФайлаExtendedTooltip + 340 + Label + true + true + + Left + + + + ИмяФайлаКонтекстноеМеню + 144 + true + + InputField + Enter + Left + true + + true + true + true + true + Normal + + + + РазмерПредставление + 236 + true + true + + true + + + Вложения.РазмерПредставление + + + РазмерПредставлениеExtendedTooltip + 341 + Label + true + true + + Left + + + + РазмерПредставлениеКонтекстноеМеню + 237 + true + + InputField + true + Auto + Left + true + + 5 + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Вложения</value> + + + ГруппаExtendedTooltip + 338 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + true + + + None + + ВложенияКоманднаяПанель + 140 + Left + true + + + DragCheck + ВложенияПроверкаПеретаскивания + + + Selection + ВложенияВыбор + + + BeforeAddRow + ВложенияПередНачаломДобавления + + + BeforeDeleteRow + ВложенияПередУдалением + + + Drag + ВложенияПеретаскивание + + + OnActivateCell + ВложенияПриАктивизацииЯчейки + + + ВложенияСтрокаПоиска + 376 + + ВложенияСтрокаПоискаРасширеннаяПодсказка + 378 + Label + true + true + + Left + + + + ВложенияСтрокаПоискаКонтекстноеМеню + 377 + true + + Вложения + + true + + + + ВложенияСостояниеПросмотра + 379 + + ВложенияСостояниеПросмотраРасширеннаяПодсказка + 381 + Label + true + true + + Left + + + + ВложенияСостояниеПросмотраКонтекстноеМеню + 380 + true + + ViewStatusAddition + Вложения + + true + + + + ВложенияУправлениеПоиском + 382 + + ВложенияУправлениеПоискомРасширеннаяПодсказка + 384 + Label + true + true + + Left + + + + ВложенияУправлениеПоискомКонтекстноеМеню + 383 + true + + SearchControlAddition + Вложения + + true + + + + ВложенияExtendedTooltip + 336 + Label + true + true + + Left + + + + ВложенияКонтекстноеМеню + 139 + + ДобавитьВложение + 150 + true + true + + true + + false + + ДобавитьВложениеExtendedTooltip + 331 + Label + true + true + + Left + + + Form.Command.ДобавитьВложение + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьПисьмо + 397 + true + true + + true + + + ДобавитьПисьмоРасширеннаяПодсказка + 398 + Label + true + true + + Left + + + Form.Command.ДобавитьПисьмо + Normal + Auto + true + true + UserCmds + Auto + + + ОткрытьВложение + 152 + true + true + + true + + false + + ОткрытьВложениеExtendedTooltip + 332 + Label + true + true + + Left + + + Form.Command.ОткрытьВложение + Normal + Auto + true + true + UserCmds + Auto + + + СохранитьВложение + 153 + true + true + + true + + false + + СохранитьВложениеExtendedTooltip + 333 + Label + true + true + + Left + + + 0 + Normal + Auto + true + true + UserCmds + Auto + + + ВложенияКонтекстноеМенюГруппа + 466 + + УдалитьВложение + 187 + + <key>ru</key> + <value>Удалить вложение</value> + + true + true + + true + + false + + УдалитьВложениеExtendedTooltip + 334 + Label + true + true + + Left + + + Form.Item.Вложения.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Вложения контекстное меню группа</value> + + + ВложенияКонтекстноеМенюГруппаРасширеннаяПодсказка + 467 + Label + true + true + + Left + + + + + + ВложенияКонтекстноеМенюСвойстваВложения + 280 + true + true + + true + + + ВложенияКонтекстноеМенюСвойстваВложенияExtendedTooltip + 335 + Label + true + true + + Left + + + Form.Command.СвойстваВложения + Normal + Auto + true + true + UserCmds + Auto + + + true + true + 32 + true + 2 + true + MultiRow + Row +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + true + + Вложения.ИндексКартинки + + + CommonPicture.КоллекцияПиктограммФайлов + + true + +
    + + КомандыВложений + 450 + + ДобавитьВложениеКоманда + 452 + true + true + + true + + false + + ДобавитьВложениеКомандаРасширеннаяПодсказка + 453 + Label + true + true + + Left + + + Form.Command.ДобавитьВложение + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьПисьмоКоманда + 454 + true + true + + true + + + ДобавитьПисьмоКомандаРасширеннаяПодсказка + 455 + Label + true + true + + Left + + + Form.Command.ДобавитьПисьмо + Normal + Auto + true + true + UserCmds + Auto + + + ОткрытьВложениеКоманда + 456 + true + true + + true + + false + + ОткрытьВложениеКомандаРасширеннаяПодсказка + 457 + Label + true + true + + Left + + + Form.Command.ОткрытьВложение + Normal + Auto + true + true + UserCmds + Auto + + + СохранитьВложениеКоманда + 458 + true + true + + true + + false + + СохранитьВложениеКомандаРасширеннаяПодсказка + 459 + Label + true + true + + Left + + + 0 + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаУдалить + 464 + + УдалитьВложениеКоманда + 460 + + <key>ru</key> + <value>Удалить вложение</value> + + true + true + + true + + false + + УдалитьВложениеКомандаРасширеннаяПодсказка + 461 + Label + true + true + + Left + + + Form.Item.Вложения.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Удалить</value> + + + ГруппаУдалитьРасширеннаяПодсказка + 465 + Label + true + true + + Left + + + + + + СвойстваВложения + 462 + true + true + + true + + + СвойстваВложенияРасширеннаяПодсказка + 463 + Label + true + true + + Left + + + Form.Command.СвойстваВложения + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды вложений</value> + + + КомандыВложенийРасширеннаяПодсказка + 451 + Label + true + true + + Left + + + CommandBar + + Right + + + + Предмет + 160 + true + true + + true + + + Предмет + + Top + + ПредметExtendedTooltip + 310 + Label + true + true + + Left + + + + ПредметКонтекстноеМеню + 161 + true + + InputField + Enter + true + Left + true + + + StartChoice + ПредметНачалоВыбора + + 32 + true + false + false + true + ShowInInputField + false + true + true + true + Normal + + + + Ответственный + 165 + true + true + + true + + + Объект.Ответственный + + Top + + ОтветственныйExtendedTooltip + 321 + Label + true + true + + Left + + + + ОтветственныйКонтекстноеМеню + 166 + true + + InputField + Enter + true + Left + true + + 32 + true + false + true + true + true + Normal + + + + ОтправительПредставление + 136 + + <key>ru</key> + <value>От</value> + + true + true + + true + + + Объект.ОтправительПредставление + + Top + + ОтправительПредставлениеExtendedTooltip + 305 + Label + true + true + + Left + + + + ОтправительПредставлениеКонтекстноеМеню + 137 + true + + InputField + Enter + true + Left + true + + + ChoiceProcessing + ПредставлениеОтправителяОбработкаВыбора + + 32 + true + true + true + true + true + Normal + + + + НаКонтроле + 245 + + <key>ru</key> + <value>На контроле</value> + + true + true + + true + + + НаКонтроле + + Right + + OnChange + НаКонтролеПриИзменении + + + НаКонтролеExtendedTooltip + 323 + Label + true + true + + Left + + + + НаКонтролеКонтекстноеМеню + 246 + true + + CheckBoxField + Enter + true + Left + true + + + + РассмотретьПосле + 167 + true + true + + true + + + РассмотретьПосле + + Top + + РассмотретьПослеExtendedTooltip + 324 + Label + true + true + + Left + + + + РассмотретьПослеКонтекстноеМеню + 168 + true + + InputField + Enter + true + Left + true + + + ChoiceProcessing + РассмотретьПослеОбработкаВыбора + + true + true + false + true + true + true + true + Normal + + + + Важность + 264 + true + true + + true + + + Объект.Важность + + Top + + ВажностьExtendedTooltip + 320 + Label + true + true + + Left + + + + ВажностьКонтекстноеМеню + 265 + true + + InputField + Enter + true + Left + true + + 17 + true + true + false + true + true + true + Normal + + + + ГруппаДатаОтправкиАктуальность + 368 + + ДатаКогдаОтправить + 370 + + <key>ru</key> + <value>Когда отправить</value> + + true + true + + true + + + Объект.ДатаКогдаОтправить + + Top + + ДатаКогдаОтправитьРасширеннаяПодсказка + 372 + Label + true + true + + Left + + + + ДатаКогдаОтправитьКонтекстноеМеню + 371 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + true + Normal + + + + ДатаАктуальностиОтправки + 373 + + <key>ru</key> + <value>Не отправлять после</value> + + true + true + + true + + + Объект.ДатаАктуальностиОтправки + + Top + + ДатаАктуальностиОтправкиРасширеннаяПодсказка + 375 + Label + true + true + + Left + + + + ДатаАктуальностиОтправкиКонтекстноеМеню + 374 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Дата отправки актуальность</value> + + + ГруппаДатаОтправкиАктуальностьРасширеннаяПодсказка + 369 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаДатаОтправленияНомер + 393 + + Номер + 276 + true + + true + + + Объект.Number + + + НомерExtendedTooltip + 356 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 277 + true + + LabelField + Bottom + Bottom + Enter + true + Left + true + + 9 + true + true + false + + + + ДатаОтправления + 278 + true + true + + true + + + Объект.ДатаОтправления + + + ДатаОтправленияExtendedTooltip + 357 + Label + true + true + + Left + + + + ДатаОтправленияКонтекстноеМеню + 279 + true + + LabelField + true + Bottom + Bottom + Enter + true + Left + true + + 11 + true + true + + ru + ДФ='дд.ММ.гггг Ч:мм' + + + + true + true + + true + + + <key>ru</key> + <value>Дата отправления номер</value> + + true + + ГруппаДатаОтправленияНомерРасширеннаяПодсказка + 394 + Label + true + true + + Left + + + UsualGroup + + Vertical + Bottom + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Право</value> + + + ГруппаПравоРасширеннаяПодсказка + 364 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
    + true + true + + true + + + <key>ru</key> + <value>Все элементы</value> + + + ВсеЭлементыРасширеннаяПодсказка + 481 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + +
    + None + false + + ФормаКоманднаяПанель + -1 Left @@ -3169,7 +3340,7 @@ true true true - HorizontalIfPossible + Vertical LeftWide true true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index d37081c09..869f99222 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -56,6 +56,8 @@ КонецЕсли; // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + ПроверитьСостояниеОтправкиПисемНаСервере(); + КонецПроцедуры &НаКлиенте @@ -76,6 +78,8 @@ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды УправлениеДоступностью(); + + ПодключитьОбработчикОжидания("ПроверитьСостояниеОтправкиПисем", 60, Истина); КонецПроцедуры @@ -537,13 +541,9 @@ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтотОбъект, - Объект, - ПараметрыЗаписи, - "ЭлектронноеПисьмоИсходящее"); + ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтотОбъект, Объект, + ПараметрыЗаписи, "ЭлектронноеПисьмоИсходящее"); - ОбновитьОтображениеДанных(); - КонецПроцедуры &НаСервере @@ -632,6 +632,13 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПредупреждениеОНеотправленныхПисьмахНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + ВзаимодействияКлиент.ОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыВложения @@ -762,7 +769,7 @@ Если НайденныеСтроки.Количество() > 1 Тогда ШаблонТекстаОшибки = НСтр("ru = 'Адрес %1 уже есть в списке.'"); ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, Адрес) - ,, "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(НайденныеСтроки[0])) + "].Представление"); + ,, "СписокПолучателей[" + Формат(СписокПолучателей.Индекс(НайденныеСтроки[0]), "ЧГ=0") + "].Представление"); Отказ = Истина; Возврат; КонецЕсли; @@ -1035,13 +1042,14 @@ Если Не ПустаяСтрока(СтруктураАдреса.ОписаниеОшибки) Тогда Отказ = Истина; - ОбщегоНазначенияКлиент.СообщитьПользователю(СтруктураАдреса.ОписаниеОшибки, , "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(СтрокаАдреса)) + "].Представление"); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтруктураАдреса.ОписаниеОшибки,, + "СписокПолучателей[" + Формат(СписокПолучателей.Индекс(СтрокаАдреса), "ЧГ=0") + "].Представление"); КонецЕсли; Если АдресаПоПредставлению.Получить(СтруктураАдреса.Адрес) <> Неопределено Тогда Отказ = Истина; ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, - СтруктураАдреса.Адрес),, "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(СтрокаАдреса)) + "].Представление"); + СтруктураАдреса.Адрес),, "СписокПолучателей[" + Формат(СписокПолучателей.Индекс(СтрокаАдреса), "ЧГ=0") + "].Представление"); Иначе АдресаПоПредставлению.Вставить(СтруктураАдреса.Адрес, СтрокаАдреса.ПолучитьИдентификатор()); КонецЕсли; @@ -1054,13 +1062,14 @@ Если Не ПустаяСтрока(СтруктураАдреса.ОписаниеОшибки) Тогда Отказ = Истина; - ОбщегоНазначенияКлиент.СообщитьПользователю(СтруктураАдреса.ОписаниеОшибки, , "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(СтрокаАдреса)) + "].Представление"); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтруктураАдреса.ОписаниеОшибки,, + "СписокПолучателей[" + Формат(СписокПолучателей.Индекс(СтрокаАдреса), "ЧГ=0") + "].Представление"); КонецЕсли; Если АдресаПоЗначению.Получить(СтруктураАдреса.Адрес) <> Неопределено Тогда Отказ = Истина; ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, - СтруктураАдреса.Адрес),, "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(СтрокаАдреса)) + "].Представление"); + СтруктураАдреса.Адрес),, "СписокПолучателей[" + Формат(СписокПолучателей.Индекс(СтрокаАдреса), "ЧГ=0") + "].Представление"); Иначе АдресаПоЗначению.Вставить(СтруктураАдреса.Адрес, СтрокаАдреса.ПолучитьИдентификатор()); КонецЕсли; @@ -1073,12 +1082,12 @@ Если НЕ Отказ Тогда Для каждого АдресПоЗначению Из АдресаПоЗначению Цикл - Если АдресаПоПредставлению.Получить(АдресПоЗначению.Ключ) <> Неопределено - И АдресаПоПредставлению.Получить(АдресПоЗначению.Ключ) <> АдресПоЗначению.Значение Тогда + Если АдресаПоПредставлению[АдресПоЗначению.Ключ] <> Неопределено + И АдресаПоПредставлению[АдресПоЗначению.Ключ] <> АдресПоЗначению.Значение Тогда Отказ = Истина; Индекс = СписокПолучателей.Индекс(СписокПолучателей.НайтиПоИдентификатору(АдресПоЗначению.Значение)); ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, - АдресПоЗначению.Ключ),, "СписокПолучателей[" + Строка(Индекс) + "].Представление"); + АдресПоЗначению.Ключ),, "СписокПолучателей[" + Формат(Индекс, "ЧГ=0") + "].Представление"); КонецЕсли; КонецЦикла; КонецЕсли; @@ -1323,7 +1332,6 @@ Если ТекущиеДанные <> Неопределено Тогда Индекс = Вложения.Индекс(ТекущиеДанные); Вложения.Удалить(Индекс); - ОбновитьОтображениеДанных(); КонецЕсли; КонецПроцедуры @@ -1545,7 +1553,7 @@ // // Параметры: // Размер - Число - размер файла. -// ДополнительныеПараметры - Структура - содержит: +// ДополнительныеПараметры - Структура: // * СтрокаТаблицыВложений - СтрокаТаблицыЗначений - содержит: // ** Размер - Число - размер файла. // @@ -1717,6 +1725,7 @@ // Определяет способ редактирования письма и // отображает текст письма согласно способу редактирования. +// &НаСервере Процедура ОпределитьСпособРедактированияПисьма() @@ -2117,11 +2126,7 @@ Иначе - ТекстПисьмаФорматированныйДокумент.Добавить(ТекстПисьма); - Объект.Текст = ""; - Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.HTML"); - Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент; - Элементы.ФорматСообщения.Заголовок = ФорматСообщения; + ПриИзмененииФорматаПодписиНаHTMLНаСервере(Объект.УчетнаяЗапись); КонецЕсли; @@ -2403,46 +2408,27 @@ Результат.Вставить("ТекстСообщения", ""); Результат.Вставить("ПисьмоОтправлено", Ложь); - Попытка - - ПараметрыПисьма = Неопределено; - ИмяСервераИсходящейПочты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.УчетнаяЗапись, "СерверИсходящейПочты", Истина); - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,, ПараметрыПисьма); - - Исключение - - ДанныеАнализаОшибочныхПолучателей = УправлениеЭлектроннойПочтой.РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ПараметрыПисьма.ОшибочныеПолучатели); - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = ДанныеАнализаОшибочныхПолучателей.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов; - ВсеАдресатыПисьмаОтвергнутыСервером = ДанныеАнализаОшибочныхПолучателей.ВсеАдресатыПисьмаОтвергнутыСервером; - ПредставлениеОшибочныхАдресатов = ДанныеАнализаОшибочныхПолучателей.ПредставлениеОшибочныхАдресатов; - - Если ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов И Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда - Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Следующие адресаты электронного письма не приняты почтовым сервером: - |%1. Письмо отправлено остальным адресатам.'", ОбщегоНазначения.КодОсновногоЯзыка()), - ПредставлениеОшибочныхАдресатов); - Иначе - - ШаблонСообщенияОбОшибке = НСтр("ru = 'Не удалось отправить письмо %1 по причине: - |%2'", ОбщегоНазначения.КодОсновногоЯзыка()); - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, - Взаимодействия.ПредставлениеПисьма(ПисьмоОбъект.Тема, ПисьмоОбъект.Дата), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, - ПисьмоОбъект.Ссылка.Метаданные(), - ПисьмоОбъект.Ссылка, - ТекстСообщенияОбОшибке); - + ПараметрыПисьма = Взаимодействия.ПараметрыПисьмаДляОтправки(ПисьмоОбъект); + Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(ПисьмоОбъект.УчетнаяЗапись, ПараметрыПисьма); + РезультатОтправки = РаботаСПочтовымиСообщениями.ОтправитьПисьмо(ПисьмоОбъект.УчетнаяЗапись, Письмо); + + ПараметрыОбработкиОшибки = УправлениеЭлектроннойПочтой.ПараметрыОбработкиОшибкиОтправки(); + ПараметрыОбработкиОшибки.ПисьмоОбъект = ПисьмоОбъект; + ПараметрыОбработкиОшибки.Ссылка = ПисьмоОбъект.Ссылка; + ПараметрыОбработкиОшибки.ПредставлениеПисьма = Взаимодействия.ПредставлениеПисьма(ПисьмоОбъект.Тема, ПисьмоОбъект.Дата); + ПараметрыОбработкиОшибки.КоличествоПопыток = 0; + ПараметрыОбработкиОшибки.ИнкрементироватьКоличествоПопыток = Ложь; + ПараметрыОбработкиОшибки.СообщатьПользователю = Истина; + + Если ЗначениеЗаполнено(РезультатОтправки.ОшибочныеПолучатели) Тогда + Результат = УправлениеЭлектроннойПочтой.ОбработатьОшибкуОтправкиПисьма(ПараметрыОбработкиОшибки, РезультатОтправки.ОшибочныеПолучатели); + Если Не Результат.ПисьмоОтправлено Тогда ЗначениеВРеквизитФормы(ПисьмоОбъект, "Объект"); - Результат.ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат Результат; КонецЕсли; - - КонецПопытки; + КонецЕсли; - ИдентификаторПисьма = ПараметрыПисьма.ИдентификаторСообщения; + ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьмаSMTP; Результат.ПисьмоОтправлено = Истина; НачатьТранзакцию(); @@ -2664,6 +2650,40 @@ КонецПроцедуры +&НаСервере +Процедура ПриИзмененииФорматаПодписиНаHTMLНаСервере(УчетнаяЗапись) + + ПараметрыУЗ = + Взаимодействия.ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма( + УчетнаяЗапись, + ФорматСообщения, + ?(Объект.ВзаимодействиеОснование = Неопределено, Истина, Ложь)); + + Если ПараметрыУЗ.Подпись <> Неопределено Тогда + + ТекстПодпись = ПараметрыУЗ.Подпись.ПолучитьТекст(); + + Если СтрЧислоВхождений(ТекстПисьма, ТекстПодпись) > 0 Тогда + ТекстПисьма = СтрЗаменить(ТекстПисьма, ТекстПодпись, ""); + КонецЕсли; + + ТекстПисьмаФорматированныйДокумент.Добавить(ТекстПисьма); + + ДобавитьФорматированныйДокументКФорматированномуДокументу(ТекстПисьмаФорматированныйДокумент, ПараметрыУЗ.Подпись); + + Иначе + + ТекстПисьмаФорматированныйДокумент.Добавить(ТекстПисьма); + + КонецЕсли; + + Объект.Текст = ""; + Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.HTML"); + Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент; + Элементы.ФорматСообщения.Заголовок = ФорматСообщения; + +КонецПроцедуры + &НаСервере Процедура УдалитьЭлементыСтаройПодписи(ТекстПисьмаФорматированныйДокумент, СтараяПодпись) @@ -2954,4 +2974,21 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Процедура ПроверитьСостояниеОтправкиПисем() + + ПроверитьСостояниеОтправкиПисемНаСервере(); + Интервал = ?(Элементы.ПредупреждениеОНеотправленныхПисьмах.Видимость, 60, 600); + ПодключитьОбработчикОжидания("ПроверитьСостояниеОтправкиПисем", Интервал, Истина); + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьСостояниеОтправкиПисемНаСервере() + + Элементы.ПредупреждениеОНеотправленныхПисьмах.Видимость = Взаимодействия.ОтправкаПисемПриостановлена(); + Элементы.ПредупреждениеОНеотправленныхПисьмахНадпись.Заголовок = Взаимодействия.ТекстПредупрежденияОПриостановкеОтправкиПисем(); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl index b727b2ef5..52f3462ef 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index 2da7a917d..1ac21a846 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -313,7 +313,7 @@ // Заполняет параметры нового письма из письма основания. // // Параметры: -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее - +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее // - ДокументСсылка.ЭлектронноеПисьмоИсходящее - письмо-основание. // ПереноситьОтправителяВПолучатели - Булево - признак необходимости переноса отправителя письма основания в // создаваемое письмо. diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo index ffc084c33..272c8a0ac 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo @@ -812,7 +812,7 @@ Use - ХэшСумма + ХешСумма ru Хеш сумма diff --git a/SSL/src/Enums/РежимыВыполненияОбработчиков/РежимыВыполненияОбработчиков.mdo b/SSL/src/Enums/РежимыВыполненияОбработчиков/РежимыВыполненияОбработчиков.mdo new file mode 100644 index 000000000..7be10b50a --- /dev/null +++ b/SSL/src/Enums/РежимыВыполненияОбработчиков/РежимыВыполненияОбработчиков.mdo @@ -0,0 +1,52 @@ + + + + + + + + РежимыВыполненияОбработчиков + + ru + Режимы выполнения обработчиков + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Монопольно + + ru + Монопольно + + + + Оперативно + + ru + Оперативно + + + + Отложенно + + ru + Отложенно + + + diff --git a/SSL/src/Enums/РежимыВыполненияОтложенныхОбработчиков/РежимыВыполненияОтложенныхОбработчиков.mdo b/SSL/src/Enums/РежимыВыполненияОтложенныхОбработчиков/РежимыВыполненияОтложенныхОбработчиков.mdo new file mode 100644 index 000000000..badbd4ae5 --- /dev/null +++ b/SSL/src/Enums/РежимыВыполненияОтложенныхОбработчиков/РежимыВыполненияОтложенныхОбработчиков.mdo @@ -0,0 +1,45 @@ + + + + + + + + РежимыВыполненияОтложенныхОбработчиков + + ru + Режимы выполнения отложенных обработчиков + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Последовательно + + ru + Последовательно + + + + Параллельно + + ru + Параллельно + + + diff --git a/SSL/src/Enums/СтатусыОбработчиковОбновления/ManagerModule.bsl b/SSL/src/Enums/СтатусыОбработчиковОбновления/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Enums/СтатусыОбработчиковОбновления/СтатусыОбработчиковОбновления.mdo b/SSL/src/Enums/СтатусыОбработчиковОбновления/СтатусыОбработчиковОбновления.mdo new file mode 100644 index 000000000..cc9cb3d13 --- /dev/null +++ b/SSL/src/Enums/СтатусыОбработчиковОбновления/СтатусыОбработчиковОбновления.mdo @@ -0,0 +1,66 @@ + + + + + + + + СтатусыОбработчиковОбновления + + ru + Статусы обработчиков обновления + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Выполнен + + ru + Выполнен + + + + НеВыполнялся + + ru + Не выполнялся + + + + Выполняется + + ru + Выполняется + + + + Приостановлен + + ru + Приостановлен + + + + Ошибка + + ru + Ошибка + + + diff --git a/SSL/src/EventSubscriptions/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения.mdo b/SSL/src/EventSubscriptions/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения.mdo index fdb079ead..42dc8ce58 100644 --- a/SSL/src/EventSubscriptions/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения.mdo +++ b/SSL/src/EventSubscriptions/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения/ДополнительныеРеквизитыОбработкаПроверкиЗаполнения.mdo @@ -6,8 +6,10 @@ Дополнительные реквизиты обработка проверки заполнения + BusinessProcessObject ChartOfCharacteristicTypesObject CatalogObject + TaskObject DocumentObject FillCheckProcessing diff --git a/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантах/ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантах.mdo b/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантах/ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантах.mdo new file mode 100644 index 000000000..0fc0e142a --- /dev/null +++ b/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантах/ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантах.mdo @@ -0,0 +1,13 @@ + + + ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантах + + ru + Запретить использование удаляемых объектов в константах + + + ConstantValueManager + + OnWrite + CommonModule.УдалениеПомеченныхОбъектовСлужебный.ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантахПриЗаписи + diff --git a/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписей/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписей.mdo b/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписей/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписей.mdo new file mode 100644 index 000000000..9ded03f67 --- /dev/null +++ b/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписей/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписей.mdo @@ -0,0 +1,15 @@ + + + ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписей + + ru + Запретить использование удаляемых объектов в наборах записей + + + InformationRegisterRecordSet + AccountingRegisterRecordSet + AccumulationRegisterRecordSet + + OnWrite + CommonModule.УдалениеПомеченныхОбъектовСлужебный.ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписейПриЗаписи + diff --git a/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчета/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчета.mdo b/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчета/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчета.mdo new file mode 100644 index 000000000..fbf9820e9 --- /dev/null +++ b/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчета/ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчета.mdo @@ -0,0 +1,13 @@ + + + ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчета + + ru + Запретить использование удаляемых объектов в наборах регистров расчета + + + CalculationRegisterRecordSet + + OnWrite + CommonModule.УдалениеПомеченныхОбъектовСлужебный.ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчетаПриЗаписи + diff --git a/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВОбъектах/ЗапретитьИспользованиеУдаляемыхОбъектовВОбъектах.mdo b/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВОбъектах/ЗапретитьИспользованиеУдаляемыхОбъектовВОбъектах.mdo new file mode 100644 index 000000000..86d6c97e8 --- /dev/null +++ b/SSL/src/EventSubscriptions/ЗапретитьИспользованиеУдаляемыхОбъектовВОбъектах/ЗапретитьИспользованиеУдаляемыхОбъектовВОбъектах.mdo @@ -0,0 +1,20 @@ + + + ЗапретитьИспользованиеУдаляемыхОбъектовВОбъектах + + ru + Запретить использование удаляемых объектов в объектах + + + BusinessProcessObject + ChartOfCalculationTypesObject + ChartOfAccountsObject + ChartOfCharacteristicTypesObject + ExchangePlanObject + CatalogObject + TaskObject + DocumentObject + + OnWrite + CommonModule.УдалениеПомеченныхОбъектовСлужебный.ЗапретитьИспользованиеУдаляемыхОбъектовВСправочникахПриЗаписи + diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo index b01e7cacb..6885b18e2 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo @@ -26,6 +26,7 @@ InformationRegisterRecordSet.ЗависимостиПравДоступа InformationRegisterRecordSet.ПараметрыРаботыПрограммы InformationRegisterRecordSet.ПакетыИнформацииПриЗапуске + InformationRegisterRecordSet.ОбработчикиОбновленияОбщихДанных InformationRegisterRecordSet.НастройкиТранспортаОбменаОбластейДанных InformationRegisterRecordSet.СвязиАдресныхОбъектов InformationRegisterRecordSet.ДомаЗданияСтроения diff --git a/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo b/SSL/src/EventSubscriptions/ОбновитьВнешнегоПользователя/ОбновитьВнешнегоПользователя.mdo similarity index 57% rename from SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo rename to SSL/src/EventSubscriptions/ОбновитьВнешнегоПользователя/ОбновитьВнешнегоПользователя.mdo index 10bb0dd97..0ba6713f8 100644 --- a/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo +++ b/SSL/src/EventSubscriptions/ОбновитьВнешнегоПользователя/ОбновитьВнешнегоПользователя.mdo @@ -1,13 +1,13 @@ - ОбновитьПредставлениеВнешнегоПользователя + ОбновитьВнешнегоПользователя ru - Обновить представление внешнего пользователя + Обновить внешнего пользователя DefinedType.ВнешнийПользовательОбъект OnWrite - CommonModule.ПользователиСлужебный.ОбновитьПредставлениеВнешнегоПользователяПриЗаписи + CommonModule.ПользователиСлужебный.ОбновитьВнешнегоПользователяПриЗаписи diff --git a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo index a48d60c35..b150dcbd8 100644 --- a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo +++ b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo @@ -80,11 +80,11 @@ Use ru - Обрабатываемый объект + Очередь отложенной обработки данных ru - Обрабатываемые объекты + Очереди отложенной обработки данных 9 Variable diff --git a/SSL/src/FunctionalOptions/ИспользоватьУчетОригиналовПервичныхДокументов/ИспользоватьУчетОригиналовПервичныхДокументов.mdo b/SSL/src/FunctionalOptions/ИспользоватьУчетОригиналовПервичныхДокументов/ИспользоватьУчетОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..0a036b0ee --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользоватьУчетОригиналовПервичныхДокументов/ИспользоватьУчетОригиналовПервичныхДокументов.mdo @@ -0,0 +1,14 @@ + + + ИспользоватьУчетОригиналовПервичныхДокументов + + ru + Использовать учет оригиналов первичных документов + + Constant.ИспользоватьУчетОригиналовПервичныхДокументов + true + Catalog.СостоянияОригиналовПервичныхДокументов + InformationRegister.СостоянияОригиналовПервичныхДокументов + Subsystem.СтандартныеПодсистемы.Subsystem.УчетОригиналовПервичныхДокументов + CommonCommand.ЖурналУчетаОригиналовПервичныхДокументов + diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index 0252215cb..069b5fd51 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -16,17 +16,73 @@ ГруппаУстановитьСнятьФлажки 208 - - СубъектыРФУстановитьФлажки - 47 + + КнопкиВыбора + 239 + + СубъектыРФУстановитьФлажки + 47 + true + true + + true + + + СубъектыРФУстановитьФлажкиРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СубъектыРФСнятьФлажки + 49 + true + true + + true + + + СубъектыРФСнятьФлажкиРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Выбрать все</value> + - СубъектыРФУстановитьФлажкиРасширеннаяПодсказка - 48 + КнопкиВыбораРасширеннаяПодсказка + 240 Label true true @@ -34,39 +90,9 @@ Left - Form.Command.УстановитьФлажки - Normal - Auto - true - true - UserCmds - Auto - - - СубъектыРФСнятьФлажки - 49 - true - true - - true - - - СубъектыРФСнятьФлажкиРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - Form.Command.СнятьФлажки - Normal - Auto - true - true - UserCmds - Auto + + Compact + true true @@ -154,6 +180,60 @@ ГруппаЕще 210 + + СубъектыРФУстановитьФлажки1 + 241 + true + true + + true + + + СубъектыРФУстановитьФлажки1РасширеннаяПодсказка + 242 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СубъектыРФСнятьФлажки1 + 243 + true + true + + true + + + СубъектыРФСнятьФлажки1РасширеннаяПодсказка + 244 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + СубъектыРФНайти 43 @@ -897,7 +977,7 @@ - ГруппаЗагрузкаИзПапки + ГруппаЗагрузкаИзКаталога 185 ДоступныеИсточникиЗагрузкиКаталог @@ -1017,7 +1097,7 @@ Загрузка из папки - ГруппаЗагрузкаИзПапкиРасширеннаяПодсказка + ГруппаЗагрузкаИзКаталогаРасширеннаяПодсказка 186 Label true @@ -1577,7 +1657,7 @@ <key>ru</key> - <value>Группа надписи завершение</value> + <value>Надписи завершение</value> ГруппаНадписиЗавершениеРасширеннаяПодсказка diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index eec437058..692cd5514 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -224,7 +224,7 @@ Процедура АдресЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) АдресныйКлассификаторКлиент.ВыбратьКаталог(ЭтотОбъект, "АдресЗагрузки", - НСтр("ru = 'Каталог с файлами адресного классификатора'"), + НСтр("ru = 'Папка с файлами адресного классификатора'"), СтандартнаяОбработка, Новый ОписаниеОповещения("ЗавершениеВыбораКаталогаАдресаЗагрузки", ЭтотОбъект)); @@ -310,8 +310,7 @@ Процедура Загрузить(Команда) Если КодИсточникаЗагрузки = "КАТАЛОГ" Тогда - Текст = НСтр("ru = 'Для загрузки адресного классификатора из папки - |необходимо установить расширение для работы с 1С:Предприятием.'"); + Текст = НСтр("ru = 'Для загрузки адресного классификатора из папки необходимо установить расширение для работы с 1С:Предприятием.'"); КонтрольРасширенияРаботыСФайлами(Текст, КодИсточникаЗагрузки, АдресЗагрузки); ИначеЕсли КодИсточникаЗагрузки = "САЙТ" Тогда @@ -756,7 +755,11 @@ ДополнительныеПараметры.Вставить("Позиция", 0); ОписаниеОповещения = Новый ОписаниеОповещения("ЗапуститьФоновуюЗагрузкуИзКаталогаКлиентаПослеПомещенияФайлов", ЭтотОбъект, ДополнительныеПараметры); - НачатьПомещениеФайлов(ОписаниеОповещения, ПомещаемыеФайлы,, Ложь, УникальныйИдентификатор); + + ПараметрыЗагрузкиФайла = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузкиФайла.ИдентификаторФормы = УникальныйИдентификатор; + ПараметрыЗагрузкиФайла.Интерактивно = Ложь; + ФайловаяСистемаКлиент.ЗагрузитьФайлы(ОписаниеОповещения, ПараметрыЗагрузкиФайла, ПомещаемыеФайлы); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form index 075b2db73..ae6d9eb74 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form @@ -192,17 +192,73 @@ - - СубъектыРФУстановитьФлажки - 47 + + КнопкиВыбора + 147 + + СубъектыРФУстановитьФлажки + 47 + true + true + + true + + + СубъектыРФУстановитьФлажкиРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СубъектыРФСнятьФлажки + 49 + true + true + + true + + + СубъектыРФСнятьФлажкиРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Кнопки выбора</value> + - СубъектыРФУстановитьФлажкиРасширеннаяПодсказка - 48 + КнопкиВыбораРасширеннаяПодсказка + 148 Label true true @@ -210,39 +266,9 @@ Left - Form.Command.УстановитьФлажки - Normal - Auto - true - true - UserCmds - Auto - - - СубъектыРФСнятьФлажки - 49 - true - true - - true - - - СубъектыРФСнятьФлажкиРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - Form.Command.СнятьФлажки - Normal - Auto - true - true - UserCmds - Auto + + Compact + СубъектыРФНайти @@ -1370,6 +1396,19 @@ true + + АдресныйКлассификаторСодержитЗагруженныеСведения + 2 + + Boolean + + + true + + + true + + Очистить diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl index 86832dec4..c13857167 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl @@ -26,12 +26,18 @@ // Автосохранение настроек СохраняемыеВНастройкахДанныеМодифицированы = Истина; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - ОбновитьИнтерфейсПоКоличествуОчищаемых(); + Если Не АдресныйКлассификаторСодержитЗагруженныеСведения Тогда + Отказ = Истина; + ПоказатьПредупреждение(, НСтр("ru='Адресные сведения для очистки отсутствуют'")); + Иначе + ОбновитьИнтерфейсПоКоличествуОчищаемых(); + КонецЕсли; КонецПроцедуры @@ -313,6 +319,8 @@ ТаблицаРегионов = АдресныйКлассификаторСлужебный.СведенияОЗагрузкеСубъектовРФ(); ТаблицаРегионов.Колонки.Добавить("Очищать", Новый ОписаниеТипов("Булево")); + АдресныйКлассификаторСодержитЗагруженныеСведения = Ложь; + Для Каждого Регион Из ТаблицаРегионов Цикл Регион.Представление = Формат(Регион.КодСубъектаРФ, "ЧЦ=2; ЧН=; ЧВН=; ЧГ=") + ", " + Регион.Представление; КонецЦикла; @@ -323,6 +331,8 @@ СтрокаТаблицы = ТаблицаРегионов.Получить(Индекс); Если НЕ СтрокаТаблицы.Загружено Тогда ТаблицаРегионов.Удалить(СтрокаТаблицы); + Иначе + АдресныйКлассификаторСодержитЗагруженныеСведения = Истина; КонецЕсли; Индекс = Индекс - 1; КонецЦикла; diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl index 04aa086a1..2024a9df2 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl @@ -110,12 +110,12 @@ Если ИПППодключена Тогда ИнформацияОСервисе = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(10); - URL = ИнформацияОСервисе.Сервер + ":" + ИнформацияОСервисе.Порт + "/"+ АдресныйКлассификаторСлужебный.ПрефиксВерсииЗапроса(); + СсылкаНаВебСервис = ИнформацияОСервисе.Сервер + ":" + ИнформацияОСервисе.Порт + "/"+ АдресныйКлассификаторСлужебный.ПрефиксВерсииЗапроса(); Если КлассификаторДоступен Тогда Шаблон = НСтр("ru = 'Веб-сервис доступен. |URL подключения: %1'"); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, URL)); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, СсылкаНаВебСервис)); Иначе @@ -124,7 +124,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); - Результат = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(URL); + Результат = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(СсылкаНаВебСервис); Сведения.Добавить(Результат.ЖурналДиагностики); КонецЕсли; diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl index 1a21009bb..4b4f02749 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl @@ -95,9 +95,9 @@ // // Возвращаемое значение: // ТаблицаЗначений - поставляемые данные. Колонки: -// * Уровень - Число - Уровень сокращения. -// * Наименование - Строка - Полное наименование адресного объекта. -// * Сокращение - Строка - Сокращенное наименование адресного объекта. +// * Уровень - Число - уровень сокращения. +// * Наименование - Строка - полное наименование адресного объекта. +// * Сокращение - Строка - сокращенное наименование адресного объекта. // Функция АдресныеСокращения() Экспорт diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt b/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt index 06b780ccc..c352892ae 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt @@ -53,98 +53,110 @@ <Type>UUID</Type> </ValueType> </column> + + <column> + <Name xsi:type="xs:string">ОКТМО</Name> + <ValueType> + <Type>xs:string</Type> + <StringQualifiers> + <Length>8</Length> + <AllowedLength>Variable</AllowedLength> + </StringQualifiers> + </ValueType> + </column> + <index><column>КодСубъектаРФ</column></index> <index><column>Наименование</column></index> <index><column>Наименование</column><column>Сокращение</column></index> <index><column>Идентификатор</column></index> + <index><column>ОКТМО</column></index> - <row><Value>01</Value><Value>Адыгея</Value> <Value>Респ</Value> <Value>385000</Value><Value>385</Value><Value>d8327a56-80de-4df2-815c-4f6ab1224c50</Value></row> - <row><Value>02</Value><Value>Башкортостан</Value> <Value>Респ</Value> <Value>450000</Value><Value>450-453</Value><Value>6f2cbfd8-692a-4ee4-9b16-067210bde3fc</Value></row> - <row><Value>03</Value><Value>Бурятия</Value> <Value>Респ</Value> <Value>670000</Value><Value>670-671</Value><Value>a84ebed3-153d-4ba9-8532-8bdf879e1f5a</Value></row> - <row><Value>04</Value><Value>Алтай</Value> <Value>Респ</Value> <Value>649000</Value><Value>649</Value><Value>5c48611f-5de6-4771-9695-7e36a4e7529d</Value></row> - <row><Value>05</Value><Value>Дагестан</Value> <Value>Респ</Value> <Value>368000</Value><Value>367-368</Value><Value>0bb7fa19-736d-49cf-ad0e-9774c4dae09b</Value></row> - <row><Value>06</Value><Value>Ингушетия</Value> <Value>Респ</Value> <Value>386000</Value><Value>386</Value><Value>b2d8cd20-cabc-4deb-afad-f3c4b4d55821</Value></row> - <row><Value>07</Value><Value>Кабардино-Балкарская</Value> <Value>Респ</Value> <Value>000000</Value><Value>360-367</Value><Value>1781f74e-be4a-4697-9c6b-493057c94818</Value></row> - <row><Value>08</Value><Value>Калмыкия</Value> <Value>Респ</Value> <Value>000000</Value><Value>358-359</Value><Value>491cde9d-9d76-4591-ab46-ea93c079e686</Value></row> - <row><Value>09</Value><Value>Карачаево-Черкесская</Value> <Value>Респ</Value> <Value>000000</Value><Value>369</Value><Value>61b95807-388a-4cb1-9bee-889f7cf811c8</Value></row> - <row><Value>10</Value><Value>Карелия</Value> <Value>Респ</Value> <Value>000000</Value><Value>185-186</Value><Value>248d8071-06e1-425e-a1cf-d1ff4c4a14a8</Value></row> - <row><Value>11</Value><Value>Коми</Value> <Value>Респ</Value> <Value>000000</Value><Value>167-169</Value><Value>c20180d9-ad9c-46d1-9eff-d60bc424592a</Value></row> - <row><Value>12</Value><Value>Марий Эл</Value> <Value>Респ</Value> <Value>000000</Value><Value>424-425</Value><Value>de2cbfdf-9662-44a4-a4a4-8ad237ae4a3e</Value></row> - <row><Value>13</Value><Value>Мордовия</Value> <Value>Респ</Value> <Value>000000</Value><Value>430-431</Value><Value>37a0c60a-9240-48b5-a87f-0d8c86cdb6e1</Value></row> - <row><Value>14</Value><Value>Саха /Якутия/</Value> <Value>Респ</Value> <Value>000000</Value><Value>677-678</Value><Value>c225d3db-1db6-4063-ace0-b3fe9ea3805f</Value></row> - <row><Value>15</Value><Value>Северная Осетия - Алания</Value> <Value>Респ</Value> <Value>000000</Value><Value>362-363</Value><Value>de459e9c-2933-4923-83d1-9c64cfd7a817</Value></row> - <row><Value>16</Value><Value>Татарстан</Value> <Value>Респ</Value> <Value>420000</Value><Value>420-423</Value><Value>0c089b04-099e-4e0e-955a-6bf1ce525f1a</Value></row> - <row><Value>17</Value><Value>Тыва</Value> <Value>Респ</Value> <Value>660000</Value><Value>667-668</Value><Value>026bc56f-3731-48e9-8245-655331f596c0</Value></row> - <row><Value>18</Value><Value>Удмуртская</Value> <Value>Респ</Value> <Value>000000</Value><Value>426-427</Value><Value>52618b9c-bcbb-47e7-8957-95c63f0b17cc</Value></row> - <row><Value>19</Value><Value>Хакасия</Value> <Value>Респ</Value> <Value>655000</Value><Value>655</Value><Value>8d3f1d35-f0f4-41b5-b5b7-e7cadf3e7bd7</Value></row> - <row><Value>20</Value><Value>Чеченская</Value> <Value>Респ</Value> <Value>000000</Value><Value>364-366</Value><Value>de67dc49-b9ba-48a3-a4cc-c2ebfeca6c5e</Value></row> - <row><Value>21</Value><Value>Чувашская Республика -</Value> <Value>Чувашия</Value><Value>000000</Value><Value>428-429</Value><Value>878fc621-3708-46c7-a97f-5a13a4176b3e</Value></row> - <row><Value>22</Value><Value>Алтайский</Value> <Value>край</Value> <Value>000000</Value><Value>656-659</Value><Value>8276c6a1-1a86-4f0d-8920-aba34d4cc34a</Value></row> - <row><Value>23</Value><Value>Краснодарский</Value> <Value>край</Value> <Value>000000</Value><Value>350-354</Value><Value>d00e1013-16bd-4c09-b3d5-3cb09fc54bd8</Value></row> - <row><Value>24</Value><Value>Красноярский</Value> <Value>край</Value> <Value>000000</Value><Value>660-663,647-648</Value><Value>db9c4f8b-b706-40e2-b2b4-d31b98dcd3d1</Value></row> - <row><Value>25</Value><Value>Приморский</Value> <Value>край</Value> <Value>000000</Value><Value>690-692</Value><Value>43909681-d6e1-432d-b61f-ddac393cb5da</Value></row> - <row><Value>26</Value><Value>Ставропольский</Value> <Value>край</Value> <Value>000000</Value><Value>355-357</Value><Value>327a060b-878c-4fb4-8dc4-d5595871a3d8</Value></row> - <row><Value>27</Value><Value>Хабаровский</Value> <Value>край</Value> <Value>000000</Value><Value>680-682</Value><Value>7d468b39-1afa-41ec-8c4f-97a8603cb3d4</Value></row> - <row><Value>28</Value><Value>Амурская</Value> <Value>обл</Value> <Value>675000</Value><Value>675-676</Value><Value>844a80d6-5e31-4017-b422-4d9c01e9942c</Value></row> - <row><Value>29</Value><Value>Архангельская</Value> <Value>обл</Value> <Value>000000</Value><Value>163-165</Value><Value>294277aa-e25d-428c-95ad-46719c4ddb44</Value></row> - <row><Value>30</Value><Value>Астраханская</Value> <Value>обл</Value> <Value>000000</Value><Value>414-416</Value><Value>83009239-25cb-4561-af8e-7ee111b1cb73</Value></row> - <row><Value>31</Value><Value>Белгородская</Value> <Value>обл</Value> <Value>000000</Value><Value>308-309</Value><Value>639efe9d-3fc8-4438-8e70-ec4f2321f2a7</Value></row> - <row><Value>32</Value><Value>Брянская</Value> <Value>обл</Value> <Value>000000</Value><Value>241-243</Value><Value>f5807226-8be0-4ea8-91fc-39d053aec1e2</Value></row> - <row><Value>33</Value><Value>Владимирская</Value> <Value>обл</Value> <Value>000000</Value><Value>600-602</Value><Value>b8837188-39ee-4ff9-bc91-fcc9ed451bb3</Value></row> - <row><Value>34</Value><Value>Волгоградская</Value> <Value>обл</Value> <Value>000000</Value><Value>400-404</Value><Value>da051ec8-da2e-4a66-b542-473b8d221ab4</Value></row> - <row><Value>35</Value><Value>Вологодская</Value> <Value>обл</Value> <Value>000000</Value><Value>160-162</Value><Value>ed36085a-b2f5-454f-b9a9-1c9a678ee618</Value></row> - <row><Value>36</Value><Value>Воронежская</Value> <Value>обл</Value> <Value>000000</Value><Value>394-397</Value><Value>b756fe6b-bbd3-44d5-9302-5bfcc740f46e</Value></row> - <row><Value>37</Value><Value>Ивановская</Value> <Value>обл</Value> <Value>000000</Value><Value>153-155</Value><Value>0824434f-4098-4467-af72-d4f702fed335</Value></row> - <row><Value>38</Value><Value>Иркутская</Value> <Value>обл</Value> <Value>000000</Value><Value>664-668,669</Value><Value>6466c988-7ce3-45e5-8b97-90ae16cb1249</Value></row> - <row><Value>39</Value><Value>Калининградская</Value> <Value>обл</Value> <Value>000000</Value><Value>236-238</Value><Value>90c7181e-724f-41b3-b6c6-bd3ec7ae3f30</Value></row> - <row><Value>40</Value><Value>Калужская</Value> <Value>обл</Value> <Value>000000</Value><Value>248-249</Value><Value>18133adf-90c2-438e-88c4-62c41656de70</Value></row> - <row><Value>41</Value><Value>Камчатский</Value> <Value>край</Value> <Value>000000</Value><Value>683-684,688</Value><Value>d02f30fc-83bf-4c0f-ac2b-5729a866a207</Value></row> - <row><Value>42</Value><Value>Кемеровская область -</Value> <Value>Кузбасс</Value><Value>000000</Value><Value>650-654</Value><Value>393aeccb-89ef-4a7e-ae42-08d5cebc2e30</Value></row> - <row><Value>43</Value><Value>Кировская</Value> <Value>обл</Value> <Value>610000</Value><Value>610-613</Value><Value>0b940b96-103f-4248-850c-26b6c7296728</Value></row> - <row><Value>44</Value><Value>Костромская</Value> <Value>обл</Value> <Value>000000</Value><Value>156-157</Value><Value>15784a67-8cea-425b-834a-6afe0e3ed61c</Value></row> - <row><Value>45</Value><Value>Курганская</Value> <Value>обл</Value> <Value>641000</Value><Value>640-641</Value><Value>4a3d970f-520e-46b9-b16c-50d4ca7535a8</Value></row> - <row><Value>46</Value><Value>Курская</Value> <Value>обл</Value> <Value>000000</Value><Value>305-307</Value><Value>ee594d5e-30a9-40dc-b9f2-0add1be44ba1</Value></row> - <row><Value>47</Value><Value>Ленинградская</Value> <Value>обл</Value> <Value>000000</Value><Value>187-188</Value><Value>6d1ebb35-70c6-4129-bd55-da3969658f5d</Value></row> - <row><Value>48</Value><Value>Липецкая</Value> <Value>обл</Value> <Value>000000</Value><Value>398-399</Value><Value>1490490e-49c5-421c-9572-5673ba5d80c8</Value></row> - <row><Value>49</Value><Value>Магаданская</Value> <Value>обл</Value> <Value>000000</Value><Value>685-686</Value><Value>9c05e812-8679-4710-b8cb-5e8bd43cdf48</Value></row> - <row><Value>50</Value><Value>Московская</Value> <Value>обл</Value> <Value>000000</Value><Value>140-144</Value><Value>29251dcf-00a1-4e34-98d4-5c47484a36d4</Value></row> - <row><Value>51</Value><Value>Мурманская</Value> <Value>обл</Value> <Value>000000</Value><Value>183-184</Value><Value>1c727518-c96a-4f34-9ae6-fd510da3be03</Value></row> - <row><Value>52</Value><Value>Нижегородская</Value> <Value>обл</Value> <Value>000000</Value><Value>603-607</Value><Value>88cd27e2-6a8a-4421-9718-719a28a0a088</Value></row> - <row><Value>53</Value><Value>Новгородская</Value> <Value>обл</Value> <Value>000000</Value><Value>173-175</Value><Value>e5a84b81-8ea1-49e3-b3c4-0528651be129</Value></row> - <row><Value>54</Value><Value>Новосибирская</Value> <Value>обл</Value> <Value>000000</Value><Value>630-633</Value><Value>1ac46b49-3209-4814-b7bf-a509ea1aecd9</Value></row> - <row><Value>55</Value><Value>Омская</Value> <Value>обл</Value> <Value>000000</Value><Value>644-646</Value><Value>05426864-466d-41a3-82c4-11e61cdc98ce</Value></row> - <row><Value>56</Value><Value>Оренбургская</Value> <Value>обл</Value> <Value>460000</Value><Value>460-462</Value><Value>8bcec9d6-05bc-4e53-b45c-ba0c6f3a5c44</Value></row> - <row><Value>57</Value><Value>Орловская</Value> <Value>обл</Value> <Value>000000</Value><Value>302-303</Value><Value>5e465691-de23-4c4e-9f46-f35a125b5970</Value></row> - <row><Value>58</Value><Value>Пензенская</Value> <Value>обл</Value> <Value>000000</Value><Value>440-442</Value><Value>c99e7924-0428-4107-a302-4fd7c0cca3ff</Value></row> - <row><Value>59</Value><Value>Пермский</Value> <Value>край</Value> <Value>000000</Value><Value>614-619</Value><Value>4f8b1a21-e4bb-422f-9087-d3cbf4bebc14</Value></row> - <row><Value>60</Value><Value>Псковская</Value> <Value>обл</Value> <Value>000000</Value><Value>180-182</Value><Value>f6e148a1-c9d0-4141-a608-93e3bd95e6c4</Value></row> - <row><Value>61</Value><Value>Ростовская</Value> <Value>обл</Value> <Value>000000</Value><Value>344-347</Value><Value>f10763dc-63e3-48db-83e1-9c566fe3092b</Value></row> - <row><Value>62</Value><Value>Рязанская</Value> <Value>обл</Value> <Value>390000</Value><Value>390-391</Value><Value>963073ee-4dfc-48bd-9a70-d2dfc6bd1f31</Value></row> - <row><Value>63</Value><Value>Самарская</Value> <Value>обл</Value> <Value>000000</Value><Value>443-446</Value><Value>df3d7359-afa9-4aaa-8ff9-197e73906b1c</Value></row> - <row><Value>64</Value><Value>Саратовская</Value> <Value>обл</Value> <Value>410000</Value><Value>410-413</Value><Value>df594e0e-a935-4664-9d26-0bae13f904fe</Value></row> - <row><Value>65</Value><Value>Сахалинская</Value> <Value>обл</Value> <Value>693000</Value><Value>693-694</Value><Value>aea6280f-4648-460f-b8be-c2bc18923191</Value></row> - <row><Value>66</Value><Value>Свердловская</Value> <Value>обл</Value> <Value>620000</Value><Value>620-624</Value><Value>92b30014-4d52-4e2e-892d-928142b924bf</Value></row> - <row><Value>67</Value><Value>Смоленская</Value> <Value>обл</Value> <Value>000000</Value><Value>214-216</Value><Value>e8502180-6d08-431b-83ea-c7038f0df905</Value></row> - <row><Value>68</Value><Value>Тамбовская</Value> <Value>обл</Value> <Value>392000</Value><Value>392-393</Value><Value>a9a71961-9363-44ba-91b5-ddf0463aebc2</Value></row> - <row><Value>69</Value><Value>Тверская</Value> <Value>обл</Value> <Value>000000</Value><Value>170-172</Value><Value>61723327-1c20-42fe-8dfa-402638d9b396</Value></row> - <row><Value>70</Value><Value>Томская</Value> <Value>обл</Value> <Value>000000</Value><Value>634-636</Value><Value>889b1f3a-98aa-40fc-9d3d-0f41192758ab</Value></row> - <row><Value>71</Value><Value>Тульская</Value> <Value>обл</Value> <Value>000000</Value><Value>300-301</Value><Value>d028ec4f-f6da-4843-ada6-b68b3e0efa3d</Value></row> - <row><Value>72</Value><Value>Тюменская</Value> <Value>обл</Value> <Value>000000</Value><Value>625-627</Value><Value>54049357-326d-4b8f-b224-3c6dc25d6dd3</Value></row> - <row><Value>73</Value><Value>Ульяновская</Value> <Value>обл</Value> <Value>433000</Value><Value>432-433</Value><Value>fee76045-fe22-43a4-ad58-ad99e903bd58</Value></row> - <row><Value>74</Value><Value>Челябинская</Value> <Value>обл</Value> <Value>454000</Value><Value>454-457</Value><Value>27eb7c10-a234-44da-a59c-8b1f864966de</Value></row> - <row><Value>75</Value><Value>Забайкальский</Value> <Value>край</Value> <Value>000000</Value><Value>672-674,687</Value><Value>b6ba5716-eb48-401b-8443-b197c9578734</Value></row> - <row><Value>76</Value><Value>Ярославская</Value> <Value>обл</Value> <Value>000000</Value><Value>150-152</Value><Value>a84b2ef4-db03-474b-b552-6229e801ae9b</Value></row> - <row><Value>77</Value><Value>Москва</Value> <Value>г</Value> <Value>000000</Value><Value>101-135</Value><Value>0c5b2444-70a0-4932-980c-b4dc0d3f02b5</Value></row> - <row><Value>78</Value><Value>Санкт-Петербург</Value> <Value>г</Value> <Value>190000</Value><Value>190-199</Value><Value>c2deb16a-0330-4f05-821f-1d09c93331e6</Value></row> - <row><Value>79</Value><Value>Еврейская</Value> <Value>Аобл</Value> <Value>000000</Value><Value>679</Value><Value>1b507b09-48c9-434f-bf6f-65066211c73e</Value></row> - <row><Value>80</Value><Value>Забайкальский край Агинский Бурятский</Value> <Value>округ</Value> <Value>000000</Value><Value>0</Value><Value>53ec9705-ec3e-4cbf-921f-229968e10aeb</Value></row> - <row><Value>83</Value><Value>Ненецкий</Value> <Value>АО</Value> <Value>166000</Value><Value>166</Value><Value>89db3198-6803-4106-9463-cbf781eff0b8</Value></row> - <row><Value>86</Value><Value>Ханты-Мансийский Автономный округ - Югра</Value><Value>АО</Value> <Value>000000</Value><Value>628</Value><Value>d66e5325-3a25-4d29-ba86-4ca351d9704b</Value></row> - <row><Value>87</Value><Value>Чукотский</Value> <Value>АО</Value> <Value>000000</Value><Value>689</Value><Value>f136159b-404a-4f1f-8d8d-d169e1374d5c</Value></row> - <row><Value>89</Value><Value>Ямало-Ненецкий</Value> <Value>АО</Value> <Value>629000</Value><Value>629</Value><Value>826fa834-3ee8-404f-bdbc-13a5221cfb6e</Value></row> - <row><Value>91</Value><Value>Крым</Value> <Value>Респ</Value> <Value>000000</Value><Value>295-298</Value><Value>bd8e6511-e4b9-4841-90de-6bbc231a789e</Value></row> - <row><Value>92</Value><Value>Севастополь</Value> <Value>г</Value> <Value>000000</Value><Value>299</Value><Value>6fdecb78-893a-4e3f-a5ba-aa062459463b</Value></row> - <row><Value>99</Value><Value>Байконур</Value> <Value>г</Value> <Value>468320</Value><Value>468</Value><Value>63ed1a35-4be6-4564-a1ec-0c51f7383314</Value></row> + <row><Value>01</Value><Value>Адыгея</Value> <Value>Респ</Value> <Value>385000</Value><Value>385</Value><Value>d8327a56-80de-4df2-815c-4f6ab1224c50</Value><Value>79</Value></row> + <row><Value>02</Value><Value>Башкортостан</Value> <Value>Респ</Value> <Value>450000</Value><Value>450-453</Value><Value>6f2cbfd8-692a-4ee4-9b16-067210bde3fc</Value><Value>80</Value></row> + <row><Value>03</Value><Value>Бурятия</Value> <Value>Респ</Value> <Value>670000</Value><Value>670-671</Value><Value>a84ebed3-153d-4ba9-8532-8bdf879e1f5a</Value><Value>81</Value></row> + <row><Value>04</Value><Value>Алтай</Value> <Value>Респ</Value> <Value>649000</Value><Value>649</Value><Value>5c48611f-5de6-4771-9695-7e36a4e7529d</Value><Value>84</Value></row> + <row><Value>05</Value><Value>Дагестан</Value> <Value>Респ</Value> <Value>368000</Value><Value>367-368</Value><Value>0bb7fa19-736d-49cf-ad0e-9774c4dae09b</Value><Value>82</Value></row> + <row><Value>06</Value><Value>Ингушетия</Value> <Value>Респ</Value> <Value>386000</Value><Value>386</Value><Value>b2d8cd20-cabc-4deb-afad-f3c4b4d55821</Value><Value>26</Value></row> + <row><Value>07</Value><Value>Кабардино-Балкарская</Value> <Value>Респ</Value> <Value>000000</Value><Value>360-367</Value><Value>1781f74e-be4a-4697-9c6b-493057c94818</Value><Value>83</Value></row> + <row><Value>08</Value><Value>Калмыкия</Value> <Value>Респ</Value> <Value>000000</Value><Value>358-359</Value><Value>491cde9d-9d76-4591-ab46-ea93c079e686</Value><Value>85</Value></row> + <row><Value>09</Value><Value>Карачаево-Черкесская</Value> <Value>Респ</Value> <Value>000000</Value><Value>369</Value><Value>61b95807-388a-4cb1-9bee-889f7cf811c8</Value><Value>91</Value></row> + <row><Value>10</Value><Value>Карелия</Value> <Value>Респ</Value> <Value>000000</Value><Value>185-186</Value><Value>248d8071-06e1-425e-a1cf-d1ff4c4a14a8</Value><Value>86</Value></row> + <row><Value>11</Value><Value>Коми</Value> <Value>Респ</Value> <Value>000000</Value><Value>167-169</Value><Value>c20180d9-ad9c-46d1-9eff-d60bc424592a</Value><Value>87</Value></row> + <row><Value>12</Value><Value>Марий Эл</Value> <Value>Респ</Value> <Value>000000</Value><Value>424-425</Value><Value>de2cbfdf-9662-44a4-a4a4-8ad237ae4a3e</Value><Value>88</Value></row> + <row><Value>13</Value><Value>Мордовия</Value> <Value>Респ</Value> <Value>000000</Value><Value>430-431</Value><Value>37a0c60a-9240-48b5-a87f-0d8c86cdb6e1</Value><Value>89</Value></row> + <row><Value>14</Value><Value>Саха /Якутия/</Value> <Value>Респ</Value> <Value>000000</Value><Value>677-678</Value><Value>c225d3db-1db6-4063-ace0-b3fe9ea3805f</Value><Value>98</Value></row> + <row><Value>15</Value><Value>Северная Осетия - Алания</Value> <Value>Респ</Value> <Value>000000</Value><Value>362-363</Value><Value>de459e9c-2933-4923-83d1-9c64cfd7a817</Value><Value>90</Value></row> + <row><Value>16</Value><Value>Татарстан</Value> <Value>Респ</Value> <Value>420000</Value><Value>420-423</Value><Value>0c089b04-099e-4e0e-955a-6bf1ce525f1a</Value><Value>92</Value></row> + <row><Value>17</Value><Value>Тыва</Value> <Value>Респ</Value> <Value>660000</Value><Value>667-668</Value><Value>026bc56f-3731-48e9-8245-655331f596c0</Value><Value>93</Value></row> + <row><Value>18</Value><Value>Удмуртская</Value> <Value>Респ</Value> <Value>000000</Value><Value>426-427</Value><Value>52618b9c-bcbb-47e7-8957-95c63f0b17cc</Value><Value>94</Value></row> + <row><Value>19</Value><Value>Хакасия</Value> <Value>Респ</Value> <Value>655000</Value><Value>655</Value><Value>8d3f1d35-f0f4-41b5-b5b7-e7cadf3e7bd7</Value><Value>95</Value></row> + <row><Value>20</Value><Value>Чеченская</Value> <Value>Респ</Value> <Value>000000</Value><Value>364-366</Value><Value>de67dc49-b9ba-48a3-a4cc-c2ebfeca6c5e</Value><Value>96</Value></row> + <row><Value>21</Value><Value>Чувашская Республика -</Value> <Value>Чувашия</Value><Value>000000</Value><Value>428-429</Value><Value>878fc621-3708-46c7-a97f-5a13a4176b3e</Value><Value>97</Value></row> + <row><Value>22</Value><Value>Алтайский</Value> <Value>край</Value> <Value>000000</Value><Value>656-659</Value><Value>8276c6a1-1a86-4f0d-8920-aba34d4cc34a</Value><Value>01</Value></row> + <row><Value>23</Value><Value>Краснодарский</Value> <Value>край</Value> <Value>000000</Value><Value>350-354</Value><Value>d00e1013-16bd-4c09-b3d5-3cb09fc54bd8</Value><Value>03</Value></row> + <row><Value>24</Value><Value>Красноярский</Value> <Value>край</Value> <Value>000000</Value><Value>660-663,647-648</Value><Value>db9c4f8b-b706-40e2-b2b4-d31b98dcd3d1</Value><Value>04</Value></row> + <row><Value>25</Value><Value>Приморский</Value> <Value>край</Value> <Value>000000</Value><Value>690-692</Value><Value>43909681-d6e1-432d-b61f-ddac393cb5da</Value><Value>05</Value></row> + <row><Value>26</Value><Value>Ставропольский</Value> <Value>край</Value> <Value>000000</Value><Value>355-357</Value><Value>327a060b-878c-4fb4-8dc4-d5595871a3d8</Value><Value>07</Value></row> + <row><Value>27</Value><Value>Хабаровский</Value> <Value>край</Value> <Value>000000</Value><Value>680-682</Value><Value>7d468b39-1afa-41ec-8c4f-97a8603cb3d4</Value><Value>08</Value></row> + <row><Value>28</Value><Value>Амурская</Value> <Value>обл</Value> <Value>675000</Value><Value>675-676</Value><Value>844a80d6-5e31-4017-b422-4d9c01e9942c</Value><Value>10</Value></row> + <row><Value>29</Value><Value>Архангельская</Value> <Value>обл</Value> <Value>000000</Value><Value>163-165</Value><Value>294277aa-e25d-428c-95ad-46719c4ddb44</Value><Value>11</Value></row> + <row><Value>30</Value><Value>Астраханская</Value> <Value>обл</Value> <Value>000000</Value><Value>414-416</Value><Value>83009239-25cb-4561-af8e-7ee111b1cb73</Value><Value>12</Value></row> + <row><Value>31</Value><Value>Белгородская</Value> <Value>обл</Value> <Value>000000</Value><Value>308-309</Value><Value>639efe9d-3fc8-4438-8e70-ec4f2321f2a7</Value><Value>14</Value></row> + <row><Value>32</Value><Value>Брянская</Value> <Value>обл</Value> <Value>000000</Value><Value>241-243</Value><Value>f5807226-8be0-4ea8-91fc-39d053aec1e2</Value><Value>15</Value></row> + <row><Value>33</Value><Value>Владимирская</Value> <Value>обл</Value> <Value>000000</Value><Value>600-602</Value><Value>b8837188-39ee-4ff9-bc91-fcc9ed451bb3</Value><Value>17</Value></row> + <row><Value>34</Value><Value>Волгоградская</Value> <Value>обл</Value> <Value>000000</Value><Value>400-404</Value><Value>da051ec8-da2e-4a66-b542-473b8d221ab4</Value><Value>18</Value></row> + <row><Value>35</Value><Value>Вологодская</Value> <Value>обл</Value> <Value>000000</Value><Value>160-162</Value><Value>ed36085a-b2f5-454f-b9a9-1c9a678ee618</Value><Value>19</Value></row> + <row><Value>36</Value><Value>Воронежская</Value> <Value>обл</Value> <Value>000000</Value><Value>394-397</Value><Value>b756fe6b-bbd3-44d5-9302-5bfcc740f46e</Value><Value>20</Value></row> + <row><Value>37</Value><Value>Ивановская</Value> <Value>обл</Value> <Value>000000</Value><Value>153-155</Value><Value>0824434f-4098-4467-af72-d4f702fed335</Value><Value>24</Value></row> + <row><Value>38</Value><Value>Иркутская</Value> <Value>обл</Value> <Value>000000</Value><Value>664-668,669</Value><Value>6466c988-7ce3-45e5-8b97-90ae16cb1249</Value><Value>25</Value></row> + <row><Value>39</Value><Value>Калининградская</Value> <Value>обл</Value> <Value>000000</Value><Value>236-238</Value><Value>90c7181e-724f-41b3-b6c6-bd3ec7ae3f30</Value><Value>27</Value></row> + <row><Value>40</Value><Value>Калужская</Value> <Value>обл</Value> <Value>000000</Value><Value>248-249</Value><Value>18133adf-90c2-438e-88c4-62c41656de70</Value><Value>29</Value></row> + <row><Value>41</Value><Value>Камчатский</Value> <Value>край</Value> <Value>000000</Value><Value>683-684,688</Value><Value>d02f30fc-83bf-4c0f-ac2b-5729a866a207</Value><Value>30</Value></row> + <row><Value>42</Value><Value>Кемеровская</Value> <Value>обл</Value> <Value>000000</Value><Value>650-654</Value><Value>393aeccb-89ef-4a7e-ae42-08d5cebc2e30</Value><Value>32</Value></row> + <row><Value>43</Value><Value>Кировская</Value> <Value>обл</Value> <Value>610000</Value><Value>610-613</Value><Value>0b940b96-103f-4248-850c-26b6c7296728</Value><Value>33</Value></row> + <row><Value>44</Value><Value>Костромская</Value> <Value>обл</Value> <Value>000000</Value><Value>156-157</Value><Value>15784a67-8cea-425b-834a-6afe0e3ed61c</Value><Value>34</Value></row> + <row><Value>45</Value><Value>Курганская</Value> <Value>обл</Value> <Value>641000</Value><Value>640-641</Value><Value>4a3d970f-520e-46b9-b16c-50d4ca7535a8</Value><Value>37</Value></row> + <row><Value>46</Value><Value>Курская</Value> <Value>обл</Value> <Value>000000</Value><Value>305-307</Value><Value>ee594d5e-30a9-40dc-b9f2-0add1be44ba1</Value><Value>38</Value></row> + <row><Value>47</Value><Value>Ленинградская</Value> <Value>обл</Value> <Value>000000</Value><Value>187-188</Value><Value>6d1ebb35-70c6-4129-bd55-da3969658f5d</Value><Value>41</Value></row> + <row><Value>48</Value><Value>Липецкая</Value> <Value>обл</Value> <Value>000000</Value><Value>398-399</Value><Value>1490490e-49c5-421c-9572-5673ba5d80c8</Value><Value>42</Value></row> + <row><Value>49</Value><Value>Магаданская</Value> <Value>обл</Value> <Value>000000</Value><Value>685-686</Value><Value>9c05e812-8679-4710-b8cb-5e8bd43cdf48</Value><Value>44</Value></row> + <row><Value>50</Value><Value>Московская</Value> <Value>обл</Value> <Value>000000</Value><Value>140-144</Value><Value>29251dcf-00a1-4e34-98d4-5c47484a36d4</Value><Value>46</Value></row> + <row><Value>51</Value><Value>Мурманская</Value> <Value>обл</Value> <Value>000000</Value><Value>183-184</Value><Value>1c727518-c96a-4f34-9ae6-fd510da3be03</Value><Value>47</Value></row> + <row><Value>52</Value><Value>Нижегородская</Value> <Value>обл</Value> <Value>000000</Value><Value>603-607</Value><Value>88cd27e2-6a8a-4421-9718-719a28a0a088</Value><Value>22</Value></row> + <row><Value>53</Value><Value>Новгородская</Value> <Value>обл</Value> <Value>000000</Value><Value>173-175</Value><Value>e5a84b81-8ea1-49e3-b3c4-0528651be129</Value><Value>49</Value></row> + <row><Value>54</Value><Value>Новосибирская</Value> <Value>обл</Value> <Value>000000</Value><Value>630-633</Value><Value>1ac46b49-3209-4814-b7bf-a509ea1aecd9</Value><Value>50</Value></row> + <row><Value>55</Value><Value>Омская</Value> <Value>обл</Value> <Value>000000</Value><Value>644-646</Value><Value>05426864-466d-41a3-82c4-11e61cdc98ce</Value><Value>52</Value></row> + <row><Value>56</Value><Value>Оренбургская</Value> <Value>обл</Value> <Value>460000</Value><Value>460-462</Value><Value>8bcec9d6-05bc-4e53-b45c-ba0c6f3a5c44</Value><Value>53</Value></row> + <row><Value>57</Value><Value>Орловская</Value> <Value>обл</Value> <Value>000000</Value><Value>302-303</Value><Value>5e465691-de23-4c4e-9f46-f35a125b5970</Value><Value>54</Value></row> + <row><Value>58</Value><Value>Пензенская</Value> <Value>обл</Value> <Value>000000</Value><Value>440-442</Value><Value>c99e7924-0428-4107-a302-4fd7c0cca3ff</Value><Value>56</Value></row> + <row><Value>59</Value><Value>Пермский</Value> <Value>край</Value> <Value>000000</Value><Value>614-619</Value><Value>4f8b1a21-e4bb-422f-9087-d3cbf4bebc14</Value><Value>57</Value></row> + <row><Value>60</Value><Value>Псковская</Value> <Value>обл</Value> <Value>000000</Value><Value>180-182</Value><Value>f6e148a1-c9d0-4141-a608-93e3bd95e6c4</Value><Value>58</Value></row> + <row><Value>61</Value><Value>Ростовская</Value> <Value>обл</Value> <Value>000000</Value><Value>344-347</Value><Value>f10763dc-63e3-48db-83e1-9c566fe3092b</Value><Value>60</Value></row> + <row><Value>62</Value><Value>Рязанская</Value> <Value>обл</Value> <Value>390000</Value><Value>390-391</Value><Value>963073ee-4dfc-48bd-9a70-d2dfc6bd1f31</Value><Value>61</Value></row> + <row><Value>63</Value><Value>Самарская</Value> <Value>обл</Value> <Value>000000</Value><Value>443-446</Value><Value>df3d7359-afa9-4aaa-8ff9-197e73906b1c</Value><Value>36</Value></row> + <row><Value>64</Value><Value>Саратовская</Value> <Value>обл</Value> <Value>410000</Value><Value>410-413</Value><Value>df594e0e-a935-4664-9d26-0bae13f904fe</Value><Value>63</Value></row> + <row><Value>65</Value><Value>Сахалинская</Value> <Value>обл</Value> <Value>693000</Value><Value>693-694</Value><Value>aea6280f-4648-460f-b8be-c2bc18923191</Value><Value>64</Value></row> + <row><Value>66</Value><Value>Свердловская</Value> <Value>обл</Value> <Value>620000</Value><Value>620-624</Value><Value>92b30014-4d52-4e2e-892d-928142b924bf</Value><Value>65</Value></row> + <row><Value>67</Value><Value>Смоленская</Value> <Value>обл</Value> <Value>000000</Value><Value>214-216</Value><Value>e8502180-6d08-431b-83ea-c7038f0df905</Value><Value>66</Value></row> + <row><Value>68</Value><Value>Тамбовская</Value> <Value>обл</Value> <Value>392000</Value><Value>392-393</Value><Value>a9a71961-9363-44ba-91b5-ddf0463aebc2</Value><Value>68</Value></row> + <row><Value>69</Value><Value>Тверская</Value> <Value>обл</Value> <Value>000000</Value><Value>170-172</Value><Value>61723327-1c20-42fe-8dfa-402638d9b396</Value><Value>28</Value></row> + <row><Value>70</Value><Value>Томская</Value> <Value>обл</Value> <Value>000000</Value><Value>634-636</Value><Value>889b1f3a-98aa-40fc-9d3d-0f41192758ab</Value><Value>69</Value></row> + <row><Value>71</Value><Value>Тульская</Value> <Value>обл</Value> <Value>000000</Value><Value>300-301</Value><Value>d028ec4f-f6da-4843-ada6-b68b3e0efa3d</Value><Value>70</Value></row> + <row><Value>72</Value><Value>Тюменская</Value> <Value>обл</Value> <Value>000000</Value><Value>625-627</Value><Value>54049357-326d-4b8f-b224-3c6dc25d6dd3</Value><Value>71</Value></row> + <row><Value>73</Value><Value>Ульяновская</Value> <Value>обл</Value> <Value>433000</Value><Value>432-433</Value><Value>fee76045-fe22-43a4-ad58-ad99e903bd58</Value><Value>73</Value></row> + <row><Value>74</Value><Value>Челябинская</Value> <Value>обл</Value> <Value>454000</Value><Value>454-457</Value><Value>27eb7c10-a234-44da-a59c-8b1f864966de</Value><Value>75</Value></row> + <row><Value>75</Value><Value>Забайкальский</Value> <Value>край</Value> <Value>000000</Value><Value>672-674,687</Value><Value>b6ba5716-eb48-401b-8443-b197c9578734</Value><Value></Value></row> + <row><Value>76</Value><Value>Ярославская</Value> <Value>обл</Value> <Value>000000</Value><Value>150-152</Value><Value>a84b2ef4-db03-474b-b552-6229e801ae9b</Value><Value>78</Value></row> + <row><Value>77</Value><Value>Москва</Value> <Value>г</Value> <Value>000000</Value><Value>101-135</Value><Value>0c5b2444-70a0-4932-980c-b4dc0d3f02b5</Value><Value>45</Value></row> + <row><Value>78</Value><Value>Санкт-Петербург</Value> <Value>г</Value> <Value>190000</Value><Value>190-199</Value><Value>c2deb16a-0330-4f05-821f-1d09c93331e6</Value><Value>40</Value></row> + <row><Value>79</Value><Value>Еврейская</Value> <Value>Аобл</Value> <Value>000000</Value><Value>679</Value><Value>1b507b09-48c9-434f-bf6f-65066211c73e</Value><Value>99</Value></row> + <row><Value>83</Value><Value>Ненецкий</Value> <Value>АО</Value> <Value>166000</Value><Value>166</Value><Value>89db3198-6803-4106-9463-cbf781eff0b8</Value><Value>118</Value></row> + <row><Value>86</Value><Value>Ханты-Мансийский Автономный округ - Югра</Value><Value>АО</Value> <Value>000000</Value><Value>628</Value><Value>d66e5325-3a25-4d29-ba86-4ca351d9704b</Value><Value>718</Value></row> + <row><Value>87</Value><Value>Чукотский</Value> <Value>АО</Value> <Value>000000</Value><Value>689</Value><Value>f136159b-404a-4f1f-8d8d-d169e1374d5c</Value><Value>77</Value></row> + <row><Value>89</Value><Value>Ямало-Ненецкий</Value> <Value>АО</Value> <Value>629000</Value><Value>629</Value><Value>826fa834-3ee8-404f-bdbc-13a5221cfb6e</Value><Value>719</Value></row> + <row><Value>91</Value><Value>Крым</Value> <Value>Респ</Value> <Value>000000</Value><Value>295-298</Value><Value>bd8e6511-e4b9-4841-90de-6bbc231a789e</Value><Value>35</Value></row> + <row><Value>92</Value><Value>Севастополь</Value> <Value>г</Value> <Value>000000</Value><Value>299</Value><Value>6fdecb78-893a-4e3f-a5ba-aa062459463b</Value><Value>67</Value></row> + <row><Value>99</Value><Value>Байконур</Value> <Value>г</Value> <Value>468320</Value><Value>468</Value><Value>63ed1a35-4be6-4564-a1ec-0c51f7383314</Value><Value></Value></row> -</ValueTable> +</ValueTable> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl index d12730abc..3d192e74e 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl @@ -189,7 +189,7 @@ ТаблицаИзмененийТабличныхЧастей[ИмяТаблицы][ИмяКолонкиТекущейВерсии] = ВерсияОбъекта.ТабличныеЧасти[ИмяТаблицы].Скопировать(); - СсылкаНаВерсиюТаблицы = ТаблицаИзмененийТабличныхЧастей[ИмяТаблицы][ИмяКолонкиТекущейВерсии]; + СсылкаНаВерсиюТаблицы = ТаблицаИзмененийТабличныхЧастей[ИмяТаблицы][ИмяКолонкиТекущейВерсии];// ТаблицаЗначений СсылкаНаВерсиюТаблицы.Колонки.Добавить("Версионирование_ИдСтроки"); Для Каждого СтрокаТаблицы Из СсылкаНаВерсиюТаблицы Цикл СтрокаТаблицы.Версионирование_ИдСтроки = СтрокаТаблицы.НомерСтроки; @@ -463,7 +463,7 @@ ПромежутокМеждуЗаполнениями = ПромежутокМеждуЗаполнениями + 1; ТекущаяКолонкаВерсииТЧ = "Версия" + Формат(МассивНомеровВерсий[ИндексПоВерсиям-1], "ЧГ=0"); // Табличная часть текущей версии (таблица значений с признаками модификации). - ТекущаяТЧВерсии = ВерсииТекущейТЧ[ТекущаяКолонкаВерсииТЧ]; + ТекущаяТЧВерсии = ВерсииТекущейТЧ[ТекущаяКолонкаВерсииТЧ];// ТаблицаЗначений НайденнаяСтрока = ТекущаяТЧВерсии.Найти(ТекСчетчикУникальныйИд, "Версионирование_ИдСтроки"); // В очередной версии найдено изменение строки (возможно это первое изменение с конца). @@ -835,8 +835,8 @@ // Формируем список ТабличныхДокументов // /////////////////////////////////////////////////////////////////////////////// - ТабличныеДокументы0 = РезультатРазбораВерсии_0.ТабличныеДокументы; - ТабличныеДокументы1 = РезультатРазбораВерсии_1.ТабличныеДокументы; + ТабличныеДокументы0 = РезультатРазбораВерсии_0.ТабличныеДокументы;// см. ВерсионированиеОбъектов.ТабличныеДокументыОбъекта + ТабличныеДокументы1 = РезультатРазбораВерсии_1.ТабличныеДокументы;// см. ВерсионированиеОбъектов.ТабличныеДокументыОбъекта СписокТабличныхДокументов0 = СоздатьТаблицуСравнения(); СписокТабличныхДокументов0.Колонки.Добавить("Представление"); @@ -1077,7 +1077,7 @@ ПодготовитьКолонкиТаблицИзмененийДляСоответствия(ТаблицаТЧ[ЭлементТЧ.Ключ], МассивНомеровВерсий); ТаблицаТЧ[ЭлементТЧ.Ключ]["Версия" + Формат(МладшаяВерсияОбъекта, "ЧГ=0")] = ЭлементТЧ.Значение.Скопировать(); - ТекущаяТЗ = ТаблицаТЧ[ЭлементТЧ.Ключ]["Версия" + Формат(МладшаяВерсияОбъекта, "ЧГ=0")]; + ТекущаяТЗ = ТаблицаТЧ[ЭлементТЧ.Ключ]["Версия" + Формат(МладшаяВерсияОбъекта, "ЧГ=0")];// ТаблицаЗначений ТекущаяТЗ.Колонки.Добавить("Версионирование_ИдСтроки"); ТекущаяТЗ.Колонки.Добавить("Версионирование_Модификация"); @@ -1119,6 +1119,13 @@ Возврат Истина; КонецФункции +// Параметры: +// СтрокаТЧ1 - СтрокаТаблицыЗначений +// СтрокаТЧ2 - СтрокаТаблицыЗначений +// Колонки - КоллекцияКолонокТаблицыЗначений +// Возвращаемое значение: +// Булево +// Функция СтрокиТЧРавны(СтрокаТЧ1, СтрокаТЧ2, Колонки) Для Каждого Колонка Из Колонки Цикл @@ -1307,6 +1314,10 @@ КонецФункции + +// Параметры: +// СтрокаТаблицы - СтрокаТаблицыЗначений +// Функция ИндексСтроки(СтрокаТаблицы) Возврат СтрокаТаблицы.Владелец().Индекс(СтрокаТаблицы); КонецФункции @@ -1314,7 +1325,7 @@ Процедура ДобавитьНомераСтрокВТабличныеЧасти(ТабличныеЧасти) Для Каждого Соответствие Из ТабличныеЧасти Цикл - Таблица = Соответствие.Значение; + Таблица = Соответствие.Значение;// ТаблицаЗначений Если Таблица.Колонки.Найти("НомерСтроки") <> Неопределено Тогда Продолжить; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl index 8d6ca3fbe..b8117667f 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl @@ -179,7 +179,7 @@ // Параметры: // ЗначенияДоступа - СправочникОбъект, // - СправочникСсылка. -// - Массив значений указанных выше типов. +// - массив значений указанных выше типов. // - Неопределено - без отбора. // Тип значений должен быть в составе типов измерения Значение // регистра сведений ГруппыЗначенийДоступа. @@ -256,6 +256,7 @@ Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт // Регистрация данных не требуется. + Возврат; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl index bcd09e1a1..d13b1ed32 100644 --- a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl @@ -14,9 +14,14 @@ // // Параметры: // Очередь - Число - очередь обработки, в которой выполняется текущий обработчик. -// Данные - Ссылка, Массив, НаборДанных - данные, по которым нужно зарегистрировать изменения. +// Данные - ЛюбаяСсылка +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей +// - Массив из ЛюбаяСсылка - данные, по которым нужно зарегистрировать изменения. // Регистрация по независимому регистру сведений не поддерживается. -// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки // Процедура ОтметитьВыполнениеОбработки(Очередь, Данные, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index 9022989af..4de762577 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -2186,16 +2186,16 @@ &НаСервереБезКонтекста Функция СсылкаДоступнаДляЧтения(ПроверяемаяСсылка) - ТекстЗапроса = " - |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | 1 + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина |ИЗ - | [ИмяТаблицы] + | &ИмяТаблицы КАК ТекущаяТаблица |ГДЕ - | Ссылка = &Ссылка - |"; + | ТекущаяТаблица.Ссылка = &Ссылка"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ОбщегоНазначения.ИмяТаблицыПоСсылке(ПроверяемаяСсылка)); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "&ИмяТаблицы", ОбщегоНазначения.ИмяТаблицыПоСсылке(ПроверяемаяСсылка)); Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl index 88b93d548..2dd210196 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl @@ -212,7 +212,7 @@ Возврат НастроечнаяТаблицаИнтервалов; -КонецФункции // НастроечнаяТаблицаИнтерваловПоУмолчанию() +КонецФункции // Формирует и возвращает таблицу интервалов из таблицы настроек интервалов // @@ -221,7 +221,7 @@ // Должна содержать колонки НижняяГраница, ВерхняяГраница, Шаг типа Число. // // Возвращаемое значение: -// ТаблицаИнтервалов - Таблица, содержащая нижнее и верхнее граничные значения для каждого из интервалов. +// ТаблицаИнтервалов - таблица, содержащая нижнее и верхнее граничные значения для каждого из интервалов. // Колонки: НижняяГраница, ВерхняяГраница. // Функция ТаблицаИнтерваловПоНастройкам(ТаблицаНастроек) @@ -281,7 +281,7 @@ Возврат ТаблицаИнтервалов; -КонецФункции // ТаблицаИнтерваловПоНастройкам() +КонецФункции // Формирует и возвращает часть текстам запроса по таблице интервалов // diff --git a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl index 02a4d359a..de2558813 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl @@ -171,7 +171,7 @@ Возврат НастроечнаяТаблицаИнтервалов; -КонецФункции // НастроечнаяТаблицаИнтерваловПоУмолчанию() +КонецФункции // Формирует и возвращает таблицу интервалов из таблицы настроек интервалов // @@ -180,7 +180,7 @@ // Должна содержать колонки НижняяГраница, ВерхняяГраница, Шаг типа Число. // // Возвращаемое значение: -// ТаблицаИнтервалов - Таблица, содержащая нижнее и верхнее граничные значения для каждого из интервалов. +// ТаблицаИнтервалов - таблица, содержащая нижнее и верхнее граничные значения для каждого из интервалов. // Колонки: НижняяГраница, ВерхняяГраница. // Функция ТаблицаИнтерваловПоНастройкам(ТаблицаНастроек) @@ -240,7 +240,7 @@ Возврат ТаблицаИнтервалов; -КонецФункции // ТаблицаИнтерваловПоНастройкам() +КонецФункции // Формирует и возвращает часть текстам запроса по таблице интервалов // diff --git a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index fd8e4e99a..78927601c 100644 --- a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -250,7 +250,7 @@ // Проверяет необходимость интерактивного запроса разрешений на использование внешних ресурсов. // // Возвращаемое значение: -// Булево - +// Булево // Функция ТребуетсяЗапросРазрешенийНаИспользованиеВнешнихРесурсов() @@ -265,7 +265,7 @@ // Проверяет возможность интерактивного запроса разрешений на использование внешних ресурсов. // // Возвращаемое значение: -// Булево - +// Булево // Функция ВозможенЗапросРазрешенийНаИспользованиеВнешнихРесурсов() diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl index 75f2fd2c2..fcfdc816b 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl @@ -36,7 +36,7 @@ // // Параметры: // ГруппыДоступа - СправочникСсылка.ГруппыДоступа. -// - Массив значений указанных выше типов. +// - массив значений указанных выше типов. // - Неопределено - без отбора. // // ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, @@ -56,9 +56,10 @@ ИспользуемыеВидыДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); ИспользуемыеВидыДоступа.Колонки.Добавить("ВидДоступаПользователи", Новый ОписаниеТипов("Булево")); ИспользуемыеВидыДоступа.Колонки.Добавить("ВидДоступаВнешниеПользователи", Новый ОписаниеТипов("Булево")); - СвойстваВидовДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(); - Для каждого СвойстваВидаДоступа Из СвойстваВидовДоступа Цикл + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); + + Для Каждого СвойстваВидаДоступа Из СвойстваВидовДоступа.Массив Цикл Если Не УправлениеДоступомСлужебный.ВидДоступаИспользуется(СвойстваВидаДоступа.Ссылка) И Не СвойстваВидаДоступа.Имя = "ДополнительныеОтчетыИОбработки" Тогда Продолжить; diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl index 215597149..490d2cbe0 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl @@ -11,7 +11,8 @@ #Область ОписаниеПеременных // СтандартныеПодсистемы.УправлениеДоступом -Перем ИзмененныеГруппыИсполнителей; // Группы исполнителей, состав которых был изменен. +Перем ИзмененныеГруппыИсполнителей; // Массив из СправочникСсылка.ГруппыИсполнителейЗадач - + // группы исполнителей, состав которых был изменен. // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти diff --git a/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl b/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl index 61db417b5..119d46000 100644 --- a/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl @@ -342,10 +342,10 @@ // Функция читает данные графика работы из регистра. // // Параметры: -// ГрафикРаботы - Ссылка на текущий элемент справочника. -// НомерГода - Номер года, за который необходимо прочитать график. +// ГрафикРаботы - ссылка на текущий элемент справочника. +// НомерГода - номер года, за который необходимо прочитать график. // -// Возвращаемое значение - соответствие, где Ключ - дата. +// Возвращаемое значение - соответствие - где Ключ - дата. // Функция ПрочитатьДанныеГрафикаИзРегистра(ГрафикРаботы, НомерГода) Экспорт @@ -380,8 +380,8 @@ // Процедура записывает данные графика в регистр. // // Параметры: -// ГрафикРаботы - Ссылка на текущий элемент справочника. -// НомерГода - Номер года, за который необходимо записать график. +// ГрафикРаботы - ссылка на текущий элемент справочника. +// НомерГода - номер года, за который необходимо записать график. // ДниВключенныеВГрафик - соответствие даты и данных к ней относящихся. // // Возвращаемое значение @@ -512,7 +512,7 @@ // ДниВключенныеВГрафик, ДниВключенныеВГрафикПоНеделям, ДниВключенныеВГрафикПроизвольнойДлины. // // Возвращаемое значение: -// Структура - Описание: +// Структура: // * ПроизводственныйКалендарь // * СпособЗаполнения // * ШаблонЗаполнения @@ -520,6 +520,7 @@ // * УчитыватьНерабочиеПериоды // * НерабочиеПериоды // * ДатаОтсчета +// Функция ПараметрыЗаполненияГрафика() Экспорт ПараметрыЗаполнения = Новый Структура( "ПроизводственныйКалендарь, @@ -538,13 +539,14 @@ // способа заполнения и других настроек. // // Параметры: -// ДатаНачала - Дата - Начало заполнения данных. -// ДатаОкончания - Дата - Окончание заполнения данных. -// ПараметрыЗаполнения - Структура - См. ПараметрыЗаполнения. +// ДатаНачала - Дата - начало заполнения данных. +// ДатаОкончания - Дата - окончание заполнения данных. +// ПараметрыЗаполнения - см. ПараметрыЗаполнения. // // Возвращаемое значение: -// Соответствие - где Ключ - дата, значение массив структур с описанием интервалов времени для +// Соответствие - где Ключ - дата, значение массив структур с описанием интервалов времени для: // указанной даты. +// Функция ДниВключенныеВГрафик(ДатаНачала, ДатаОкончания, ПараметрыЗаполнения) Экспорт ДниВключенныеВГрафик = Новый Соответствие; diff --git a/SSL/src/InformationRegisters/КодировкиФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/КодировкиФайлов/ManagerModule.bsl new file mode 100644 index 000000000..a692c95ca --- /dev/null +++ b/SSL/src/InformationRegisters/КодировкиФайлов/ManagerModule.bsl @@ -0,0 +1,327 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Возвращает кодировку версии файла. +// +// Параметры: +// ВерсияСсылка - ОпределяемыйТип.ПрисоединенныеФайлы - версия файла. +// +// Возвращаемое значение: +// Строка +// +Функция КодировкаВерсииФайла(ВерсияСсылка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.КодировкиФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Файл = ВерсияСсылка; + МенеджерЗаписи.Прочитать(); + + Возврат МенеджерЗаписи.Кодировка; + +КонецФункции + +// Записывает кодировку версии файла. +// +// Параметры: +// ВерсияСсылка - ОпределяемыйТип.ПрисоединенныеФайлы - ссылка на версию файла. +// Кодировка - Строка - новая кодировка версии файла. +// +Процедура ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.КодировкиФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Файл = ВерсияСсылка; + МенеджерЗаписи.Кодировка = Кодировка; + МенеджерЗаписи.Записать(Истина); + +КонецПроцедуры + +// Автоматически определяет и возвращает кодировку текстового файла. +// +// Параметры: +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныеФайлы +// Расширение - Строка - расширение файла. +// +// Возвращаемое значение: +// Строка +// +Функция ОпределитьКодировкуФайла(ПрисоединенныйФайл, Расширение) Экспорт + + Кодировка = КодировкаВерсииФайла(ПрисоединенныйФайл); + Если ЗначениеЗаполнено(Кодировка) Тогда + Возврат Кодировка; + КонецЕсли; + + ОбщиеНастройки = РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки; + АвтоопределениеКодировки = РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( + ОбщиеНастройки.СписокРасширенийТекстовыхФайлов, Расширение); + Если Не АвтоопределениеКодировки Тогда + Возврат Кодировка; + КонецЕсли; + + ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(ПрисоединенныйФайл, Ложь); + Если ДвоичныеДанные <> Неопределено Тогда + Кодировка = КодировкаИзДвоичныхДанных(ДвоичныеДанные); + Если Не ЗначениеЗаполнено(Кодировка) Тогда + Если СтрЗаканчиваетсяНа(НРег(Расширение), "xml") Тогда + Кодировка = КодировкаИзОбъявленияXML(ДвоичныеДанные); + Иначе + Кодировка = КодировкаИзСоответствияАлфавиту(ДвоичныеДанные); + КонецЕсли; + + Если НРег(Кодировка) = "utf-8" Тогда + Кодировка = НРег(Кодировка) + "_WithoutBOM"; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + Возврат Кодировка; + +КонецФункции + +// Возвращает кодировку, полученную из двоичных данных файла, если +// файл содержит сигнатуру BOM в начале. +// +// Параметры: +// ДвоичныеДанные - двоичные данные файла. +// +// Возвращаемое значение: +// Строка - кодировка файла. Если файл не содержит сигнатуру BOM, +// возвращает пустую строку. +// +Функция КодировкаИзДвоичныхДанных(ДвоичныеДанные) + + ЧтениеДанных = Новый ЧтениеДанных(ДвоичныеДанные); + БуферДвоичныхДанных = ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных(5); + + Возврат КодировкаBOM(БуферДвоичныхДанных); + +КонецФункции + +// Возвращает кодировку, полученную из двоичных данных файла, если +// файл содержит объявление XML. +// +// Параметры: +// ДвоичныеДанные - двоичные данные файла. +// +// Возвращаемое значение: +// КодировкаXML - Строка - кодировка файла. Если невозможно прочитать +// объявление XML, возвращает пустую строку. +// +Функция КодировкаИзОбъявленияXML(ДвоичныеДанные) + + БуферДвоичныхДанных = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные); + ПотокВПамяти = Новый ПотокВПамяти(БуферДвоичныхДанных); + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьПоток(ПотокВПамяти); + Попытка + ЧтениеXML.ПерейтиКСодержимому(); + КодировкаXML = ЧтениеXML.КодировкаXML; + Исключение + КодировкаXML = ""; + КонецПопытки; + ЧтениеXML.Закрыть(); + ПотокВПамяти.Закрыть(); + + Возврат КодировкаXML; + +КонецФункции + +// Возвращает кодировку текста, полученную из сигнатуры BOM в начале. +// +// Параметры: +// БуферДвоичныхДанных - коллекция байтов для определения кодировки. +// +// Возвращаемое значение: +// Кодировка - Строка - кодировка файла. Если файл не содержит сигнатуру BOM, +// возвращает пустую строку. +// +Функция КодировкаBOM(БуферДвоичныхДанных) + + ПрочитанныеБайты = Новый Массив(5); + Для Индекс = 0 По 4 Цикл + Если Индекс < БуферДвоичныхДанных.Размер Тогда + ПрочитанныеБайты[Индекс] = БуферДвоичныхДанных[Индекс]; + Иначе + ПрочитанныеБайты[Индекс] = ЧислоИзШестнадцатеричнойСтроки("0xA5"); + КонецЕсли; + КонецЦикла; + + Если ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0xFE") + И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0xFF") Тогда + Кодировка = "UTF-16BE"; + ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0xFF") + И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0xFE") Тогда + Если ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0x00") + И ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x00") Тогда + Кодировка = "UTF-32LE"; + Иначе + Кодировка = "UTF-16LE"; + КонецЕсли; + ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0xEF") + И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0xBB") + И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0xBF") Тогда + Кодировка = "UTF-8"; + ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0x00") + И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0x00") + И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0xFE") + И ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0xFF") Тогда + Кодировка = "UTF-32BE"; + ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0x0E") + И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0xFE") + И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0xFF") Тогда + Кодировка = "SCSU"; + ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0xFB") + И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0xEE") + И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0x28") Тогда + Кодировка = "BOCU-1"; + ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0x2B") + И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0x2F") + И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0x76") + И (ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x38") + Или ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x39") + Или ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x2B") + Или ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x2F")) Тогда + Кодировка = "UTF-7"; + ИначеЕсли ПрочитанныеБайты[0] = ЧислоИзШестнадцатеричнойСтроки("0xDD") + И ПрочитанныеБайты[1] = ЧислоИзШестнадцатеричнойСтроки("0x73") + И ПрочитанныеБайты[2] = ЧислоИзШестнадцатеричнойСтроки("0x66") + И ПрочитанныеБайты[3] = ЧислоИзШестнадцатеричнойСтроки("0x73") Тогда + Кодировка = "UTF-EBCDIC"; + Иначе + Кодировка = ""; + КонецЕсли; + + Возврат Кодировка; + +КонецФункции + +// Возвращает наиболее подходящую кодировку текста, полученную путем сравнения с алфавитом. +// +// Параметры: +// ДанныеТекста - ДвоичныеДанные - двоичные данные файла. +// +// Возвращаемое значение: +// СоответствующаяКодировка - Строка - кодировка файла. +// +Функция КодировкаИзСоответствияАлфавиту(ДанныеТекста) + + Кодировки = РаботаСФайламиСлужебный.Кодировки(); + Кодировки.Удалить(Кодировки.НайтиПоЗначению("utf-8_WithoutBOM")); + + КодировкаKOI8R = Кодировки.НайтиПоЗначению("koi8-r"); + Кодировки.Сдвинуть(КодировкаKOI8R, -Кодировки.Индекс(КодировкаKOI8R)); + + КодировкаWin1251 = Кодировки.НайтиПоЗначению("windows-1251"); + Кодировки.Сдвинуть(КодировкаWin1251, -Кодировки.Индекс(КодировкаWin1251)); + + КодировкаUTF8 = Кодировки.НайтиПоЗначению("utf-8"); + Кодировки.Сдвинуть(КодировкаUTF8, -Кодировки.Индекс(КодировкаUTF8)); + + СоответствующаяКодировка = ""; + МаксимальноеСоответствиеКодировки = 0; + Для Каждого Кодировка Из Кодировки Цикл + + СоответствиеКодировки = ПроцентСоответствияАлфавиту(ДанныеТекста, Кодировка.Значение); + Если СоответствиеКодировки > 0.95 Тогда + Возврат Кодировка.Значение; + КонецЕсли; + + Если СоответствиеКодировки > МаксимальноеСоответствиеКодировки Тогда + СоответствующаяКодировка = Кодировка.Значение; + МаксимальноеСоответствиеКодировки = СоответствиеКодировки; + КонецЕсли; + + КонецЦикла; + + Возврат СоответствующаяКодировка; + +КонецФункции + +Функция ПроцентСоответствияАлфавиту(ДвоичныеДанные, ПроверяемаяКодировка) + + // АПК:1036-выкл, АПК:163-выкл - алфавит не требует проверки орфографии. + Алфавит = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя" + + "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" + + "1234567890 "; + // АПК:1036-вкл, АПК:163-вкл + + ПотокАлфавита = Новый ПотокВПамяти(); + ЗаписьАлфавита = Новый ЗаписьДанных(ПотокАлфавита); + ЗаписьАлфавита.ЗаписатьСтроку(Алфавит, ПроверяемаяКодировка); + ЗаписьАлфавита.Закрыть(); + + ДанныеАлфавита = ПотокАлфавита.ЗакрытьИПолучитьДвоичныеДанные(); + ЧтениеДанныхАлфавита = Новый ЧтениеДанных(ДанныеАлфавита); + БуферАлфавитаВКодировке = ЧтениеДанныхАлфавита.ПрочитатьВБуферДвоичныхДанных(); + + Индекс = 0; + СимволыАлфавита = Новый Массив; + Пока Индекс <= БуферАлфавитаВКодировке.Размер - 1 Цикл + + ТекущийСимвол = БуферАлфавитаВКодировке[Индекс]; + + // Символы кириллицы в кодировке UTF-8 - двухбайтовые. + Если ПроверяемаяКодировка = "utf-8" + И (ТекущийСимвол = 208 + Или ТекущийСимвол = 209) Тогда + + Индекс = Индекс + 1; + ТекущийСимвол = Формат(ТекущийСимвол, "ЧН=0; ЧГ=") + Формат(БуферАлфавитаВКодировке[Индекс], "ЧН=0; ЧГ="); + КонецЕсли; + + Индекс = Индекс + 1; + СимволыАлфавита.Добавить(ТекущийСимвол); + + КонецЦикла; + + ЧтениеДанныхТекста = Новый ЧтениеДанных(ДвоичныеДанные); + БуферДанныхТекста = ЧтениеДанныхТекста.ПрочитатьВБуферДвоичныхДанных(?(ПроверяемаяКодировка = "utf-8", 200, 100)); + РазмерБуфераТекста = БуферДанныхТекста.Размер; + КоличествоСимволов = РазмерБуфераТекста; + + Индекс = 0; + КоличествоВхождений = 0; + Пока Индекс <= РазмерБуфераТекста - 1 Цикл + + ТекущийСимвол = БуферДанныхТекста[Индекс]; + Если ПроверяемаяКодировка = "utf-8" + И (ТекущийСимвол = 208 + Или ТекущийСимвол = 209) Тогда + + // Если последний байт в буфере является первым байтом двухбайтового символа, игнорируем его. + Если Индекс = РазмерБуфераТекста - 1 Тогда + Прервать; + КонецЕсли; + + Индекс = Индекс + 1; + КоличествоСимволов = КоличествоСимволов - 1; + ТекущийСимвол = Формат(ТекущийСимвол, "ЧН=0; ЧГ=") + Формат(БуферДанныхТекста[Индекс], "ЧН=0; ЧГ="); + + КонецЕсли; + + Индекс = Индекс + 1; + Если СимволыАлфавита.Найти(ТекущийСимвол) <> Неопределено Тогда + КоличествоВхождений = КоличествоВхождений + 1; + КонецЕсли; + + КонецЦикла; + + Возврат ?(КоличествоСимволов = 0, 100, КоличествоВхождений/КоличествоСимволов); + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo b/SSL/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo index 1defcc585..62c5500a4 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo +++ b/SSL/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo @@ -82,12 +82,7 @@ <value>Курс</value> </synonym> <type> - <types>Number</types> - <numberQualifiers> - <precision>10</precision> - <scale>4</scale> - <nonNegative>true</nonNegative> - </numberQualifiers> + <types>DefinedType.КурсВалюты</types> </type> <toolTip> <key>ru</key> @@ -98,9 +93,7 @@ <fillChecking>ShowError</fillChecking> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> - <fillValue xsi:type="core:NumberValue"> - <value>0</value> - </fillValue> + <fillValue xsi:type="core:UndefinedValue"/> </resources> <resources uuid="4bd1cae4-d5b5-444e-9cf5-67a969714293"> <name>Кратность</name> diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl index 89cf6ff83..4d7f28c25 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl @@ -14,7 +14,7 @@ // // Параметры: // Идентификатор - Строка - идентификатор записи кэша. -// ТипДанных - ПеречислениеСсылка.ТипыДанныхКэшаПрограммныхИнтерфейсов - +// ТипДанных - ПеречислениеСсылка.ТипыДанныхКэшаПрограммныхИнтерфейсов // ПараметрыПолучения - Строка - массив параметров сериализованный в XML для передачи в метод обновления кэша. // ИспользоватьУстаревшиеДанные - Булево - флаг определяющий необходимость ожидания обновления // данных в кэше перед возвратом значения, в случае обнаружения факта их устаревания. @@ -22,7 +22,7 @@ // обновления данных кэша, в случае обнаружения факта устаревания данных. // // Возвращаемое значение: -// ФиксированныйМассив, ДвоичныеДанные - . +// ФиксированныйМассив, ДвоичныеДанные // Функция ДанныеКэшаВерсий(Знач Идентификатор, Знач ТипДанных, Знач ПараметрыПолучения, Знач ИспользоватьУстаревшиеДанные = Истина) Экспорт @@ -246,7 +246,7 @@ // ПараметрыПолучения - Массив - дополнительные параметры получения данных в кэш. // // Возвращаемое значение: -// ФиксированныйМассив, ДвоичныеДанные - +// ФиксированныйМассив, ДвоичныеДанные // Функция ПодготовитьДанныеКэшаВерсий(Знач ТипДанных, Знач ПараметрыПолучения) Экспорт @@ -413,7 +413,7 @@ КонецФункции // Возвращаемое значение: -// ФиксированныйМассив - +// ФиксированныйМассив // Функция ПолучитьВерсииИнтерфейсаВКэш(Знач ПараметрыПодключения, Знач ИмяИнтерфейса) diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl index 09cb7ec98..e2ef6ebbb 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl @@ -14,12 +14,12 @@ // Например, иерархию элементов справочника ПапкиФайлов. // // Параметры: -// ВладельцыНастроекПрав - Ссылка, например, СправочникСсылка.ПапкиФайлов или другого типа, -// по которым права настраиваются непосредственно. -// - Тип владельца прав, например Тип("СправочникСсылка.ПапкиФайлов"). -// - Массив значений указанных выше типов. +// ВладельцыНастроекПрав - ОпределяемыйТип.ВладелецНастроекПрав - например, СправочникСсылка.ПапкиФайлов +// или другого типа, по которым права настраиваются непосредственно. +// - тип владельца прав, например Тип("СправочникСсылка.ПапкиФайлов"). +// - массив значений указанных выше типов. // - Неопределено - без отбора для всех типов. -// - Объект, например, СправочникОбъект.ПапкиФайлов, при передаче +// - объект, например, СправочникОбъект.ПапкиФайлов, при передаче // объекта обновление будет только, если объект перед записью и // он изменился (родитель изменен). // @@ -69,11 +69,11 @@ // Например, справочник ПапкиФайлов. // // Параметры: -// ВладелецНастроекПрав - Ссылка - например, СправочникСсылка.ПапкиФайлов или другого типа, -// по которым права настраиваются непосредственно. -// - Объект - например, СправочникОбъект.ПапкиФайлов, при передаче -// объекта обновление будет только, если объект перед записью и -// он изменился (родитель изменен). +// ВладелецНастроекПрав - ОпределяемыйТип.ВладелецНастроекПрав - например, СправочникСсылка.ПапкиФайлов +// или другого типа, по которым права настраиваются непосредственно. +// - ОпределяемыйТип.ВладелецНастроекПравОбъект - например, СправочникОбъект.ПапкиФайлов, +// при передаче объекта обновление будет если только объект в состоянии перед записью и +// родитель изменен. // // ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. @@ -157,7 +157,7 @@ НовыеЗаписи = РодителиОбъекта(Ссылка, Ссылка, СвойстваРодителяОбъекта); Иначе НовыеЗаписи = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Получить(); + Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Получить(); // ТаблицаЗначений НоваяСтрока = НовыеЗаписи.Добавить(); НоваяСтрока.Объект = Ссылка; @@ -200,21 +200,23 @@ // Заполняет НаборЗаписей родителями объекта, включая себя, как родителя. // // Параметры: -// Ссылка - Ссылка - ссылка в иерархии СсылкаОбъекта или СсылкаОбъекта. -// СсылкаОбъекта - Ссылка, Неопределено - ссылка на исходный объект. -// СвойстваРодителяОбъекта - Структура - со свойствами: -// * Ссылка - Ссылка - ссылка на родителя исходного объекта, +// Ссылка - ОпределяемыйТип.ВладелецНастроекПрав - ссылка в иерархии СсылкаОбъекта или СсылкаОбъекта. +// СсылкаОбъекта - ОпределяемыйТип.ВладелецНастроекПрав +// - Неопределено - ссылка на исходный объект. +// СвойстваРодителяОбъекта - Структура: +// * Ссылка - ОпределяемыйТип.ВладелецНастроекПрав - ссылка на родителя исходного объекта, // который может отличаться от родителя, // записанного в базе данных. // * Наследовать - Булево - наследование настроек родителем. +// ПолучатьНаследование - Булево // // Возвращаемое значение: -// НаборЗаписей - РегистрСведенийНаборЗаписей.НаследованиеНастроекПравОбъектов. +// РегистрСведенийНаборЗаписей.НаследованиеНастроекПравОбъектов // Функция РодителиОбъекта(Ссылка, СсылкаОбъекта = Неопределено, СвойстваРодителяОбъекта = "", ПолучатьНаследование = Истина) Экспорт НовыеЗаписи = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Получить(); + Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Получить(); // ТаблицаЗначений // Получение флажка наследования настроек прав родителей для ссылки. Если ПолучатьНаследование Тогда @@ -364,7 +366,8 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТаблицаОбъектов", Ссылка.Метаданные().ПолноеИмя()); - РезультатыЗапроса = Запрос.ВыполнитьПакет(); + РезультатыЗапроса = Запрос.ВыполнитьПакет(); // Массив из РезультатЗапроса + Выборка = РезультатыЗапроса[1].Выбрать(); Родитель = ?(Выборка.Следующий(), Выборка.Родитель, Неопределено); diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl index 6e4ff8a8e..4c599f805 100644 --- a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl @@ -46,30 +46,34 @@ // Записывает таблицу настроек в данные регистра по указанным измерениям. // // Параметры: -// ТаблицаНастроек - ТаблицаЗначений - -// Измерения - Структура - где:ъ -// * Пользователь - СправочникСсылка.Пользователи - -// - СправочникСсылка.ВнешниеПользователи - -// * Вариант - СправочникСсылка.ВариантыОтчетов - -// * Подсистема - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// Ресурсы - Структура - где: -// * Видимость - Булево - -// * БыстрыйДоступ - Булево - -// УдалятьСтарые - Булево - +// ТаблицаНастроек - ТаблицаЗначений +// Измерения - Структура: +// * Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// * Вариант - СправочникСсылка.ВариантыОтчетов +// * Подсистема - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// Ресурсы - Структура: +// * Видимость - Булево +// * БыстрыйДоступ - Булево +// УдалятьСтарые - Булево // Процедура ЗаписатьПакетНастроек(ТаблицаНастроек, Измерения, Ресурсы, УдалятьСтарые) Экспорт НаборЗаписей = СоздатьНаборЗаписей(); // РегистрСведенийНаборЗаписей.НастройкиВариантовОтчетов Для Каждого КлючИЗначение Из Измерения Цикл - НаборЗаписей.Отбор[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение, Истина); + ЭлементОтбора = НаборЗаписей.Отбор[КлючИЗначение.Ключ]; // ЭлементОтбора + ЭлементОтбора.Установить(КлючИЗначение.Значение, Истина); + ТаблицаНастроек.Колонки.Добавить(КлючИЗначение.Ключ); ТаблицаНастроек.ЗаполнитьЗначения(КлючИЗначение.Значение, КлючИЗначение.Ключ); КонецЦикла; + Для Каждого КлючИЗначение Из Ресурсы Цикл ТаблицаНастроек.Колонки.Добавить(КлючИЗначение.Ключ); ТаблицаНастроек.ЗаполнитьЗначения(КлючИЗначение.Значение, КлючИЗначение.Ключ); КонецЦикла; + Если Не УдалятьСтарые Тогда НаборЗаписей.Прочитать(); СтарыеЗаписи = НаборЗаписей.Выгрузить(); @@ -81,6 +85,7 @@ КонецЕсли; КонецЦикла; КонецЕсли; + НаборЗаписей.Загрузить(ТаблицаНастроек); НаборЗаписей.Записать(Истина); @@ -505,7 +510,7 @@ // которым предоставлены права на данный вариант отчета. // // Параметры: -// Записи - РегистрСведенийНаборЗаписей.НастройкиВариантовОтчетов - +// Записи - РегистрСведенийНаборЗаписей.НастройкиВариантовОтчетов // Процедура ОповеститьПользователейВариантаОтчета(Записи) Экспорт diff --git a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo index cb9c6ccde..c3792ec6e 100644 --- a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo +++ b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/НастройкиОбменаДаннымиXDTO.mdo @@ -97,6 +97,24 @@ <dataHistory>Use</dataHistory> <fillValue xsi:type="core:UndefinedValue"/> </resources> + <resources uuid="f98a7b6d-f364-4b84-9aeb-8dd822ef582f"> + <name>РасширениеФормата</name> + <synonym> + <key>ru</key> + <value>Расширение формата</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>250</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> <attributes uuid="44526cb1-561d-4b87-a628-d79cc64ccdec"> <name>ИмяПланаОбменаКорреспондента</name> <synonym> diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl index f883cc73e..ab38adde7 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl @@ -10,6 +10,17 @@ #Область СлужебныеПроцедурыИФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * ВладелецФайла - ЛюбаяСсылка +// * ИдентификаторВладельца - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ЭтоНастройкаДляЭлементаСправочника - БУлево +// * ТипВладельцаФайла - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * Действие - ПеречислениеСсылка.ВариантыОчисткиФайлов +// * ПериодОчистки - ПеречислениеСсылка.ПериодОчисткиФайлов +// * ЭтоФайл - Булево +// Функция ТекущиеНастройкиОчистки() Экспорт УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl index 9bcc532d3..03bba359a 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl @@ -90,24 +90,26 @@ // Возвращает настройки прав объекта. // // Параметры: -// СсылкаНаОбъект - ссылка на объект для которого нужно прочитать настройки прав. +// СсылкаНаОбъект - ОпределяемыйТип.ВладелецНастроекПрав - ссылка на объект для которого нужно прочитать настройки прав. // // Возвращаемое значение: -// Структура - +// Структура: // Наследовать - Булево - флажок наследования настроек прав родителей. -// Настройки - ТаблицаЗначений -// - ВладелецНастройки - ссылка на объект или родителя объекта -// (из иерархии родителей объекта). -// - НаследованиеРазрешено - Булево - разрешено наследование. -// - Пользователь - СправочникСсылка.Пользователи +// Настройки - ТаблицаЗначений: +// * ВладелецНастройки - ОпределяемыйТип.ВладелецНастроекПрав - ссылка на объект +// или родителя объекта (из иерархии родителей объекта) +// * НаследованиеРазрешено - Булево - разрешено наследование. +// * Пользователь - СправочникСсылка.Пользователи // СправочникСсылка.ГруппыПользователей // СправочникСсылка.ВнешниеПользователи // СправочникСсылка.ГруппыВнешнихПользователей. -// - <ИмяПрава1> - Неопределено, Булево +// * <ИмяПрава1> - Неопределено +// - Булево - // Неопределено - право не настроено, // Истина - право разрешено, // Ложь - право запрещено. -// - <ИмяПрава2> - ... +// * <ИмяПрава2> - Неопределено +// - Булево // Функция Прочитать(Знач СсылкаНаОбъект) Экспорт @@ -143,7 +145,7 @@ Если ВозможныеПрава.ИерархическиеТаблицы.Получить(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда НаследованиеНастроек = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Получить(); + Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Получить(); // ТаблицаЗначений НоваяСтрока = НаследованиеНастроек.Добавить(); НаследованиеНастроек.Колонки.Добавить("Уровень", Новый ОписаниеТипов("Число")); НоваяСтрока.Объект = СсылкаНаОбъект; @@ -238,15 +240,30 @@ // Записывает настройки прав объекта. // // Параметры: +// СсылкаНаОбъект - ОпределяемыйТип.ВладелецНастроекПрав +// Настройки - ТаблицаЗначений: +// * ВладелецНастройки - ОпределяемыйТип.ВладелецНастроекПрав - ссылка на объект +// или родителя объекта (из иерархии родителей объекта). +// * НаследованиеРазрешено - Булево - разрешено наследование. +// * Пользователь - СправочникСсылка.Пользователи +// СправочникСсылка.ГруппыПользователей +// СправочникСсылка.ВнешниеПользователи +// СправочникСсылка.ГруппыВнешнихПользователей. +// * <ИмяПрава1> - Неопределено +// - Булево - +// Неопределено - право не настроено, +// Истина - право разрешено, +// Ложь - право запрещено. +// * <ИмяПрава2> - Неопределено +// - Булево +// // Наследовать - Булево - флажок наследования настроек прав родителей. -// Настройки - ТаблицаЗначений со структурой возвращенной функцией Прочитать() -// записываются только строки, у которых ВладелецНастройки = СсылкаНаОбъект. // Процедура Записать(Знач СсылкаНаОбъект, Знач Настройки, Знач Наследовать) Экспорт СтандартныеПодсистемыСервер.ПроверитьДинамическоеОбновлениеВерсииПрограммы(); - ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваДляНастройкиПравОбъектов(); - ОписаниеПрав = ВозможныеПрава.ПоТипамСсылок.Получить(ТипЗнч(СсылкаНаОбъект)); + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваДляНастройкиПравОбъектов(); // См. ВозможныеПраваДляНастройкиПравОбъектов + ОписаниеПрав = ВозможныеПрава.ПоТипамСсылок.Получить(ТипЗнч(СсылкаНаОбъект)); // Массив из см. СвойстваВозможногоПрава Если ОписаниеПрав = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -425,7 +442,7 @@ Отбор = Новый Структура; Для каждого КлючИЗначение Из ВозможныеПрава.ПоТипамСсылок Цикл ТипВладельцаПрав = КлючИЗначение.Ключ; - ОписаниеПрав = КлючИЗначение.Значение; + ОписаниеПрав = КлючИЗначение.Значение; // Массив из см. СвойстваВозможногоПрава Если ПустыеСсылкиВладелецПрав.Получить(ТипВладельцаПрав) = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -628,6 +645,29 @@ КонецПроцедуры // См. РегистрыСведений.НастройкиПравОбъектов.ВозможныеПрава. +// +// Возвращаемое значение: +// Структура: +// * ПоТипам - ФиксированноеСоответствие: +// * Ключ - Тип - тип ссылки или объекта из ОпределяемыйТип.ВладельцыНастроекПрав +// * Значение - ФиксированноеСоответствие: +// ** Ключ - Строка - имя возможного права +// ** Значение - см. СвойстваВозможногоПрава +// * ПоТипамСсылок - ФиксированноеСоответствие: +// * Ключ - Тип - тип ссылки из ОпределяемыйТип.ВладельцыНастроекПрав +// * Значение - Массив из см. СвойстваВозможногоПрава +// * ПоПолнымИменам - ФиксированноеСоответствие: +// * Ключ - Строка - владелец прав (полное имя таблицы) +// * Значение - см. СвойстваВозможногоПрава +// * ТипыВладельцев - Массив из ОпределяемыйТип.ВладелецНастроекПрав +// * ОтдельныеТаблицы - ФиксированноеСоответствие: +// * Ключ - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификатор таблицы +// * Значение - Строка - полное имя таблицы +// * ИерархическиеТаблицы - ФиксированноеСоответствие: +// * Ключ - Тип - тип ссылки или объекта из ОпределяемыйТип.ВладельцыНастроекПрав +// * Значение - Булево - Истина. +// Функция ВозможныеПраваДляНастройкиПравОбъектов() Экспорт ВозможныеПрава = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы( @@ -650,6 +690,7 @@ Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт // Регистрация данных не требуется. + Возврат; КонецПроцедуры @@ -709,7 +750,11 @@ КонецФункции -// См. УправлениеДоступомПереопределяемый.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов. +// См. УправлениеДоступомПереопределяемый.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов +// +// Возвращаемое значение: +// см. ВозможныеПраваДляНастройкиПравОбъектов +// Функция ВозможныеПрава() ВозможныеПрава = ЗаполненныеВозможныеПрава(); @@ -764,7 +809,7 @@ ПраваВладельца = ПоПолнымИменам[ВозможноеПраво.ВладелецПрав]; Если ПраваВладельца = Неопределено Тогда - ПраваВладельца = Новый Соответствие; + ПраваВладельца = ПраваВладельца(); МассивПравВладельца = Новый Массив; ТипСсылки = СтандартныеПодсистемыСервер.ТипСсылкиИлиКлючаЗаписиОбъектаМетаданных( @@ -796,13 +841,14 @@ Строка(ТипСсылки)); КонецЕсли; - Если СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТипСсылки) <> Неопределено Тогда + СвойстваВидаДоступа = СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТипСсылки); // см. УправлениеДоступомСлужебный.СвойстваВидаДоступа + Если СвойстваВидаДоступа <> Неопределено Тогда ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Тип владельца прав ""%1"" |не может использоваться, как тип значений доступа, |но обнаружен в описании вида доступа ""%2"".'"), Строка(ТипСсылки), - СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТипСсылки).Имя); + СвойстваВидаДоступа.Имя); КонецЕсли; Если СвойстваВидовДоступа.ПоТипамГруппИЗначений.Получить(ТипСсылки) <> Неопределено Тогда @@ -811,7 +857,7 @@ |не может использоваться, как тип групп значений доступа, |но обнаружен в описании вида доступа ""%2"".'"), Строка(ТипСсылки), - СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТипСсылки).Имя); + СвойстваВидаДоступа.Имя); КонецЕсли; Если ТипыПодпискиОбновитьГруппыВладельцевНастроекПрав.Получить(ТипОбъекта) = Неопределено Тогда @@ -853,15 +899,7 @@ КонецЕсли; КонецЦикла; - СвойстваВозможногоПрава = Новый Структура( - "ВладелецПрав, - |Имя, - |НачальноеЗначение, - |ТребуемыеПрава, - |ЧтениеВТаблицах, - |ИзменениеВТаблицах, - |ИндексПрава"); - ЗаполнитьЗначенияСвойств(СвойстваВозможногоПрава, ВозможноеПраво); + СвойстваВозможногоПрава = СвойстваВозможногоПрава(ВозможноеПраво); СвойстваВозможногоПрава.ИндексПрава = ИндексыПравВладельцев[ВозможноеПраво.ВладелецПрав]; ИндексыПравВладельцев[ВозможноеПраво.ВладелецПрав] = СвойстваВозможногоПрава.ИндексПрава + 1; @@ -890,17 +928,64 @@ КонецЦикла; ВозможныеПрава = Новый Структура; - ВозможныеПрава.Вставить("ПоТипам", ПоТипам); - ВозможныеПрава.Вставить("ПоТипамСсылок", ПоТипамСсылок); - ВозможныеПрава.Вставить("ПоПолнымИменам", ПоПолнымИменам); - ВозможныеПрава.Вставить("ТипыВладельцев", ТипыВладельцев); - ВозможныеПрава.Вставить("ОтдельныеТаблицы", ОтдельныеТаблицы); - ВозможныеПрава.Вставить("ИерархическиеТаблицы", ИерархическиеТаблицы); + ВозможныеПрава.Вставить("ПоТипам", ПоТипам); + ВозможныеПрава.Вставить("ПоТипамСсылок", ПоТипамСсылок); + ВозможныеПрава.Вставить("ПоПолнымИменам", ПоПолнымИменам); + ВозможныеПрава.Вставить("ТипыВладельцев", ТипыВладельцев); + ВозможныеПрава.Вставить("ОтдельныеТаблицы", ОтдельныеТаблицы); + ВозможныеПрава.Вставить("ИерархическиеТаблицы", ИерархическиеТаблицы); Возврат ОбщегоНазначения.ФиксированныеДанные(ВозможныеПрава); КонецФункции +// Возвращаемое значение: +// Структура: +// * ВладелецПрав - Строка +// * Имя - Строка +// * Заголовок - Строка +// * Подсказка - Строка +// * НачальноеЗначение - Булево +// * ТребуемыеПрава - Массив Из Строка +// * ЧтениеВТаблицах - Массив Из Строка +// * ИзменениеВТаблицах - Массив Из Строка +// +Функция СвойстваВозможногоПрава(ВозможноеПраво) + + СвойстваВозможногоПрава = Новый Структура( + "ВладелецПрав, + |Имя, + |НачальноеЗначение, + |ТребуемыеПрава, + |ЧтениеВТаблицах, + |ИзменениеВТаблицах, + |ИндексПрава"); + + ЗаполнитьЗначенияСвойств(СвойстваВозможногоПрава, ВозможноеПраво); + + Возврат СвойстваВозможногоПрава; + +КонецФункции + +// Возвращаемое значение: +// Соответствие: +// Ключ - Тип +// Значение - см. СвойстваВозможногоПрава +// +Функция ПраваВладельца() + + Возврат Новый Соответствие(); + +КонецФункции + +// Возвращаемое значение: +// Соответствие: +// * Ключ - Строка - полное имя права. +// * Значение - ФиксированнаяСтруктура: +// * Имя - Строка - имя возможного права. +// * Заголовок - Строка - заголовок колонки. +// * Подсказка - Строка - подсказка колонки. +// Функция ПредставлениеВозможныхПрав() Экспорт ВозможныеПрава = ЗаполненныеВозможныеПрава(); @@ -909,14 +994,24 @@ Для Каждого ВозможноеПраво Из ВозможныеПрава Цикл ПолноеИмяПрава = ВозможноеПраво.ВладелецПрав + "_" + ВозможноеПраво.Имя; - ПредставлениеВозможныхПрав.Вставить(ПолноеИмяПрава, Новый ФиксированнаяСтруктура( - Новый Структура("Заголовок, Подсказка", ВозможноеПраво.Заголовок, ВозможноеПраво.Подсказка))); + ПредставлениеВозможныхПрав.Вставить(ПолноеИмяПрава, + Новый ФиксированнаяСтруктура(Новый Структура("Имя, Заголовок, Подсказка", + ВозможноеПраво.Имя, ВозможноеПраво.Заголовок, ВозможноеПраво.Подсказка))); КонецЦикла; Возврат Новый ФиксированноеСоответствие(ПредставлениеВозможныхПрав); КонецФункции +// Параметры: +// ОписаниеВозможногоПрава - см. СвойстваВозможногоПрава +// +// Возвращаемое значение: +// Структура: +// * Имя - Строка +// * Заголовок - Строка +// * Подсказка - Строка +// Функция ПредставлениеВозможногоПрава(ОписаниеВозможногоПрава) Экспорт ПредставлениеВозможныхПрав = УправлениеДоступомСлужебныйПовтИсп.ПредставлениеВозможныхПрав(); @@ -925,8 +1020,8 @@ Представление = ПредставлениеВозможныхПрав.Получить(ПолноеИмяПрава); Если Не ЗначениеЗаполнено(Представление) Тогда - Представление = Новый ФиксированнаяСтруктура( - Новый Структура("Заголовок, Подсказка", ОписаниеВозможногоПрава.Имя, "")); + Представление = Новый ФиксированнаяСтруктура( Новый Структура("Имя, Заголовок, Подсказка", + ОписаниеВозможногоПрава.Имя, ОписаниеВозможногоПрава.Имя, "")); КонецЕсли; Возврат Представление; diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl index b3462629d..cd25c1497 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl @@ -383,7 +383,11 @@ КонецПроцедуры // Параметры: -// ДополнительныеПараметры - Структура - . +// ВыбранноеЗначение - Структура: +// * ВладелецФайла - ЛюбаяСсылка +// * НоваяНастройка - Булево +// * Наименование - Строка +// ДополнительныеПараметры - Структура // &НаКлиенте Процедура УстановитьНастройкиОтбора(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт @@ -524,6 +528,11 @@ КонецФункции +// Параметры: +// Результат - Структура +// ДополнительныеПараметры - Структура: +// * ТекущаяСтрока - Число +// &НаКлиенте Процедура ОчиститьДанныеНастройкиЗавершение(Результат, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl index 733d9b640..3958709ee 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl @@ -10,6 +10,18 @@ #Область СлужебныеПроцедурыИФункции +// Возвращаемое значение: +// ТаблицаЗначений: +// * ВладелецФайла - ЛюбаяСсылка +// * ИдентификаторВладельца - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ЭтоНастройкаДляЭлементаСправочника - Булево +// * ТипВладельцаФайла - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ПравилоОтбора - ХранилищеЗначения +// * ЭтоФайл - Булево +// * Синхронизировать - Булево +// * УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов +// * Наименование - Строка +// Функция ТекущиеНастройкиСинхронизации() Экспорт УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/ДополнительныеНастройки/CommandModule.bsl similarity index 100% rename from SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl rename to SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/ДополнительныеНастройки/CommandModule.bsl diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form index 3c1e1b7fd..40e8e0ed5 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form @@ -2,7 +2,7 @@ <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> <title> <key>ru</key> - <value>Настройки учетной записи</value> + <value>Дополнительные настройки</value> СтраницыФормы diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/НастройкиУчетныхЗаписейЭлектроннойПочты.mdo b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/НастройкиУчетныхЗаписейЭлектроннойПочты.mdo index 772a18929..2550311b1 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/НастройкиУчетныхЗаписейЭлектроннойПочты.mdo +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/НастройкиУчетныхЗаписейЭлектроннойПочты.mdo @@ -418,10 +418,10 @@ MobileDevice - Настройки + ДополнительныеНастройки ru - Настройки + Дополнительные настройки FormNavigationPanelGoTo diff --git a/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl b/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl index f70a8cd71..b3bc98332 100644 --- a/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl @@ -13,7 +13,7 @@ // Возвращает список неразделенных администраторов // // Возвращаемое значение: -// СписокЗначений – список уникальных идентификаторов с представлениями (имена пользователей). +// СписокЗначений - список уникальных идентификаторов с представлениями (имена пользователей). // Функция СписокАдминистраторов() Экспорт @@ -53,6 +53,7 @@ // // Возвращаемое значение: // Число +// Функция МаксимальныйПорядковыйНомер() Экспорт ТекстЗапроса = "ВЫБРАТЬ @@ -76,6 +77,7 @@ // // Возвращаемое значение: // Число +// Функция ПорядковыйНомерПользователяИБ(Идентификатор) Экспорт Запрос = Новый Запрос; diff --git a/SSL/src/InformationRegisters/НеудаленныеОбъекты/ManagerModule.bsl b/SSL/src/InformationRegisters/НеудаленныеОбъекты/ManagerModule.bsl new file mode 100644 index 000000000..c071f3d95 --- /dev/null +++ b/SSL/src/InformationRegisters/НеудаленныеОбъекты/ManagerModule.bsl @@ -0,0 +1,60 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Формирует таблицу с количеством попыток для указанных объектов. +// Если объект ранее не удалялся, то запись о количестве попыток будет отсутствовать. +// +// Параметры: +// Объекты - Массив из ЛюбаяСсылка +// Возвращаемое значение: +// ТаблицаЗначений: +// * УдаляемыйСсылка - ЛюбаяСсылка +// * КоличествоПопыток - Число +// +Функция КоличествоПопытокОбъектов(Объекты) Экспорт + Запрос = Новый Запрос; + + Запрос.Текст = + "ВЫБРАТЬ + | НеудаленныеОбъекты.Объект КАК УдаляемыйСсылка, + | НеудаленныеОбъекты.КоличествоПопыток КАК КоличествоПопыток + |ИЗ + | РегистрСведений.НеудаленныеОбъекты КАК НеудаленныеОбъекты + |ГДЕ + | НеудаленныеОбъекты.Объект В (&СписокОбъектов) + | И НеудаленныеОбъекты.КоличествоПопыток > 0"; + + Запрос.УстановитьПараметр("СписокОбъектов", Объекты); + + РезультатЗапроса = Запрос.Выполнить(); + КоличествоПопытокОбъектов = РезультатЗапроса.Выгрузить(); + КоличествоПопытокОбъектов.Индексы.Добавить("УдаляемыйСсылка"); + + Возврат КоличествоПопытокОбъектов; +КонецФункции + +// Добавляет запись в регистр. +// +// Параметры: +// НеудаленнаяСсылка - ЛюбаяСсылка +// +Процедура Добавить(НеудаленнаяСсылка) Экспорт + Запись = РегистрыСведений.НеудаленныеОбъекты.СоздатьМенеджерЗаписи(); + Запись.Объект = НеудаленнаяСсылка; + Если ЗначениеЗаполнено(Запись.Объект) Тогда + Запись.Записать(); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НеудаленныеОбъекты/RecordSetModule.bsl b/SSL/src/InformationRegisters/НеудаленныеОбъекты/RecordSetModule.bsl new file mode 100644 index 000000000..13d103968 --- /dev/null +++ b/SSL/src/InformationRegisters/НеудаленныеОбъекты/RecordSetModule.bsl @@ -0,0 +1,79 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий +Процедура ПередЗаписью(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТекущийНаборЗаписей.Объект КАК Объект, + | 1 КАК КоличествоПопыток, + | &ВремяТекущейПопытки КАК ВремяПоследнейПопытки + |ПОМЕСТИТЬ ТекущийНабор + |ИЗ + | &ТекущийНаборЗаписей КАК ТекущийНаборЗаписей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Таблица.Объект КАК Объект, + | СУММА(Таблица.КоличествоПопыток) КАК КоличествоПопыток, + | МАКСИМУМ(Таблица.ВремяПоследнейПопытки) КАК ВремяПоследнейПопытки + |ИЗ + | (ВЫБРАТЬ + | НеудаленныеОбъекты.Объект КАК Объект, + | НеудаленныеОбъекты.КоличествоПопыток КАК КоличествоПопыток, + | НеудаленныеОбъекты.ВремяПоследнейПопытки КАК ВремяПоследнейПопытки + | ИЗ + | РегистрСведений.НеудаленныеОбъекты КАК НеудаленныеОбъекты + | ГДЕ + | НеудаленныеОбъекты.Объект В + | (ВЫБРАТЬ + | Таб.Объект + | ИЗ + | ТекущийНабор КАК Таб) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ТекущийНабор.Объект, + | ТекущийНабор.КоличествоПопыток, + | ТекущийНабор.ВремяПоследнейПопытки + | ИЗ + | ТекущийНабор КАК ТекущийНабор) КАК Таблица + |СГРУППИРОВАТЬ ПО + | Таблица.Объект"; + + Запрос.УстановитьПараметр("ВремяТекущейПопытки", ОбщегоНазначения.ТекущаяДатаПользователя()); + Запрос.УстановитьПараметр("ТекущийНаборЗаписей", Выгрузить()); + + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Очистить(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + ЗаполнитьЗначенияСвойств(Добавить(), ВыборкаДетальныеЗаписи); + КонецЦикла; + +КонецПроцедуры +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("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..e76f72248 --- /dev/null +++ b/SSL/src/InformationRegisters/НеудаленныеОбъекты/НеудаленныеОбъекты.mdo @@ -0,0 +1,103 @@ + + + + + + + + + + + + НеудаленныеОбъекты + + ru + Неудаленные объекты + + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + КоличествоПопыток + + ru + Количество попыток + + + Number + + 10 + true + + + + + Use + Use + + + + ВремяПоследнейПопытки + + ru + Время последней попытки + + + Date + + + + + Use + Use + + + + Объект + + ru + Объект + + + AnyRef + + + + Use + Use + + true + true + + diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form index ce5b1d4e8..98527c9d7 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Form.form @@ -309,6 +309,10 @@ true + + <key>ru</key> + <value>Количество потоков обновления доступа подсказка 1</value> + ShowBottom ГруппаКоличествоПотоковОбновленияДоступаПодсказка1РасширеннаяПодсказка @@ -432,6 +436,10 @@ true + + <key>ru</key> + <value>Балансировка нагрузки на диск подсказка 1</value> + ShowBottom ГруппаБалансировкаНагрузкиНаДискПодсказка1РасширеннаяПодсказка @@ -772,6 +780,10 @@ true + + <key>ru</key> + <value>Количество потоков обновления доступа подсказка 2</value> + ShowBottom ГруппаКоличествоПотоковОбновленияДоступаПодсказка2РасширеннаяПодсказка @@ -895,6 +907,10 @@ true + + <key>ru</key> + <value>Балансировка нагрузки на диск подсказка 2</value> + ShowBottom ГруппаБалансировкаНагрузкиНаДискПодсказка2РасширеннаяПодсказка diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl index 6863c078d..a2be0e3c4 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl @@ -178,55 +178,59 @@ ПараметрыОграничения, ИдентификаторТранзакции, Истина, ЕстьИзмененияПрав); Если ПараметрыОграничения.БезЗаписиКлючейДоступа Тогда - Текст = Текст + Символы.ПС + НСтр("ru = '1. Обновление не требуется. Ключ доступа объекта не используется.'"); - - ИначеЕсли ПараметрыОграничения.СЗаписьюВсегдаРазрешенногоКлючаДоступа Тогда - Если КлючДоступаИсточникаУстарел Тогда - Текст = Текст + Символы.ПС + НСтр("ru = '1. У объекта установлен всегда разрешенный ключ доступа.'"); + Если ПараметрыОграничения.ДоступЗапрещен + Или ПараметрыОграничения.ОграничениеОтключено Тогда + Текст = Текст + Символы.ПС + НСтр("ru = 'Обновление не требуется. Ключи доступа к объектам этого типа не нужны.'"); Иначе - Текст = Текст + Символы.ПС + НСтр("ru = '1. Обновление не требуется. У объекта ключ доступа уже всегда разрешенный.'"); + Текст = Текст + Символы.ПС + НСтр("ru = 'Обновление не требуется. Объекты этого типа используют ключи доступа к их владельцам.'"); + КонецЕсли; + Возврат; + КонецЕсли; + + Если ПараметрыОграничения.СЗаписьюВсегдаРазрешенногоКлючаДоступа Тогда + Если КлючДоступаИсточникаУстарел Тогда + Текст = Текст + Символы.ПС + НСтр("ru = '1. Установлен всегда разрешенный ключ доступа к объекту.'"); + Иначе + Текст = Текст + Символы.ПС + НСтр("ru = '1. Обновление не требуется. Всегда разрешенный ключ доступа к объекту уже установлен.'"); КонецЕсли; Иначе Если КлючДоступаИсточникаУстарел Тогда - Текст = Текст + Символы.ПС + НСтр("ru = '1. У объекта обновлен ключ доступа.'"); + Текст = Текст + Символы.ПС + НСтр("ru = '1. Обновлен ключ доступа к объекту.'"); Иначе - Текст = Текст + Символы.ПС + НСтр("ru = '1. Обновление не требуется. У объекта ключ доступа не устарел.'"); + Текст = Текст + Символы.ПС + НСтр("ru = '1. Обновление не требуется. Ключ доступа к объекту не устарел.'"); КонецЕсли; КонецЕсли; - Если ПараметрыОграничения.БезЗаписиКлючейДоступа Тогда - Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. Ключ доступа объекта не используется.'"); - - ИначеЕсли ПараметрыОграничения.СЗаписьюВсегдаРазрешенногоКлючаДоступа Тогда + Если ПараметрыОграничения.СЗаписьюВсегдаРазрешенногоКлючаДоступа Тогда Если ЕстьИзмененияПрав Тогда Текст = Текст + Символы.ПС - + НСтр("ru = '2. У всегда разрешенного ключа доступа обновлен состав - | групп доступа или пользователей или внешних пользователей.'"); + + НСтр("ru = '2. Обновлены права на всегда разрешенный ключ доступа + | у групп доступа или пользователей или внешних пользователей.'"); Иначе Текст = Текст + Символы.ПС - + НСтр("ru = '2. Обновление не требуется. У всегда разрешенного ключа доступа - | состав групп доступа, пользователей и внешних пользователей не устарел.'"); + + НСтр("ru = '2. Обновление не требуется. Права на всегда разрешенный ключ доступа + | у групп доступа, пользователей и внешних пользователей не устарели.'"); КонецЕсли; ИначеЕсли ЕстьИзмененияПрав Тогда Если ПараметрыОграничения.ЕстьОграничениеПоПользователям Тогда Если ДляВнешнихПользователей Тогда - Текст = Текст + Символы.ПС + НСтр("ru = '2. У ключа доступа обновлен состав внешних пользователей.'"); + Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновлены права на ключ доступа у внешних пользователей или групп доступа.'"); Иначе - Текст = Текст + Символы.ПС + НСтр("ru = '2. У ключа доступа обновлен состав пользователей.'"); + Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновлены права на ключ доступа у пользователей или групп доступа.'"); КонецЕсли; Иначе - Текст = Текст + Символы.ПС + НСтр("ru = '2. У ключа доступа обновлен состав групп доступа.'"); + Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновлены права на ключ доступа у групп доступа.'"); КонецЕсли; Иначе Если ПараметрыОграничения.ЕстьОграничениеПоПользователям Тогда Если ДляВнешнихПользователей Тогда - Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. У ключа доступа состав внешних пользователей не устарел.'"); + Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. Права на ключ доступа у внешних пользователей и групп доступа не устарели.'"); Иначе - Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. У ключа доступа состав пользователей не устарел.'"); + Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. Права на ключ доступа у пользователей и групп доступа не устарели.'"); КонецЕсли; Иначе - Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. У ключа доступа состав групп доступа не устарел.'"); + Текст = Текст + Символы.ПС + НСтр("ru = '2. Обновление не требуется. Права на ключ доступа у групп доступа не устарели.'"); КонецЕсли; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ОбработчикиОбновления/ОбработчикиОбновления.mdo b/SSL/src/InformationRegisters/ОбработчикиОбновления/ОбработчикиОбновления.mdo new file mode 100644 index 000000000..b1463c0fb --- /dev/null +++ b/SSL/src/InformationRegisters/ОбработчикиОбновления/ОбработчикиОбновления.mdo @@ -0,0 +1,495 @@ + + + + + + + + + + + + ОбработчикиОбновления + + ru + Обработчики обновления + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Статус + + ru + Статус + + + EnumRef.СтатусыОбработчиковОбновления + + + + Use + Use + + + + Версия + + ru + Версия + + + String + + 20 + + + + + Use + Use + + + + ИмяБиблиотеки + + ru + Имя библиотеки + + + String + + 100 + + + + + Use + Use + + + + ДлительностьОбработки + + ru + Длительность обработки + + + Number + + 10 + + + + + Use + Use + + + + РежимВыполнения + + ru + Режим выполнения + + + EnumRef.РежимыВыполненияОбработчиков + + + + Use + Use + + + + ВерсияРегистрации + + ru + Версия регистрации + + + String + + 20 + + + + + Use + Use + + + + ВерсияПорядок + + ru + Версия порядок + + + Number + + 11 + + + + + Use + Use + + + + Идентификатор + + ru + Идентификатор + + + UUID + + + + Use + + + + ЧислоПопыток + + ru + Число попыток + + + Number + + 10 + + + + + Use + Use + + + + СтатистикаВыполнения + + ru + Статистика выполнения + + + ValueStorage + + + + Use + Use + + + + ИнформацияОбОшибке + + ru + Информация об ошибке + + + String + + 1024 + + + + + Use + Use + + + + Комментарий + + ru + Комментарий + + + String + + 1024 + + + + + Use + Use + + + + Приоритет + + ru + Приоритет + + + String + + 100 + + + + + Use + Use + + + + ПроцедураПроверки + + ru + Процедура проверки + + + String + + 255 + + + + + Use + Use + + + + ПроцедураЗаполненияДанныхОбновления + + ru + Процедура заполнения данных обновления + + + String + + 255 + + + + + Use + Use + + + + ОчередьОтложеннойОбработки + + ru + Очередь отложенной обработки + + + Number + + 10 + + + + + Use + Use + + + + ЗапускатьТолькоВГлавномУзле + + ru + Запускать только в главном узле + + + Boolean + + + + Use + Use + + + + ЗапускатьИВПодчиненномУзлеРИБСФильтрами + + ru + Запускать и в подчиненном узле РИБ с фильтрами + + + Boolean + + + + Use + Use + + + + Многопоточный + + ru + Многопоточный + + + Boolean + + + + Use + Use + + + + ОбработкаПорцииЗавершена + + ru + Обработка порции завершена + + + Boolean + + + + Use + Use + + + + ГруппаОбновления + + ru + Группа обновления + + + Number + + 10 + + + + + Use + Use + + + + ИтерацияЗапуска + + ru + Итерация запуска + + + Number + + 10 + + + + + Use + Use + + + + ОбрабатываемыеДанные + + ru + Обрабатываемые данные + + + ValueStorage + + + + Use + Use + + + + РежимВыполненияОтложенногоОбработчика + + ru + Режим выполнения отложенного обработчика + + + EnumRef.РежимыВыполненияОтложенныхОбработчиков + + + + Use + Use + + + + ИзменяемыеОбъекты + + ru + Изменяемые объекты + + + String + + 1024 + + + + + Use + Use + + + + ИмяОбработчика + + ru + Имя обработчика + + + String + + 255 + + + + ru + Имя процедуры обработчика обновления + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ОбработчикиОбновленияОбщихДанных/ОбработчикиОбновленияОбщихДанных.mdo b/SSL/src/InformationRegisters/ОбработчикиОбновленияОбщихДанных/ОбработчикиОбновленияОбщихДанных.mdo new file mode 100644 index 000000000..25685edd9 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбработчикиОбновленияОбщихДанных/ОбработчикиОбновленияОбщихДанных.mdo @@ -0,0 +1,210 @@ + + + + + + + + + + + + ОбработчикиОбновленияОбщихДанных + + ru + Обработчики обновления общих данных + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Статус + + ru + Статус + + + EnumRef.СтатусыОбработчиковОбновления + + + + Use + Use + + + + Версия + + ru + Версия + + + String + + 20 + + + + + Use + Use + + + + ИмяБиблиотеки + + ru + Имя библиотеки + + + String + + 100 + + + + + Use + Use + + + + ДлительностьОбработки + + ru + Длительность обработки + + + Number + + 10 + + + + + Use + Use + + + + РежимВыполнения + + ru + Режим выполнения + + + EnumRef.РежимыВыполненияОбработчиков + + + + Use + Use + + + + ВерсияРегистрации + + ru + Версия регистрации + + + String + + 20 + + + + + Use + Use + + + + Комментарий + + ru + Комментарий + + + String + + 1024 + + + + + Use + Use + + + + ИнформацияОбОшибке + + ru + Информация об ошибке + + + String + + 1024 + + + + + Use + Use + + + + ИмяОбработчика + + ru + Имя обработчика + + + String + + 255 + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl index 911563e92..59c6baa98 100644 --- a/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl @@ -53,8 +53,8 @@ // Процедура выполняет обработчики, зарегистрированные для событий узлов планов обмена. // // Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - Узел информационной базы для выполнения обработчиков. -// Событие - Строка - Имя события, для которого необходимо выполнить обработчики. +// УзелИнформационнойБазы - ПланОбменаСсылка - узел информационной базы для выполнения обработчиков. +// Событие - Строка - имя события, для которого необходимо выполнить обработчики. // Процедура ВыполнитьОбработчики(УзелИнформационнойБазы, Событие) Экспорт diff --git a/SSL/src/InformationRegisters/ОбщиеПоставляемыеМакетыПечати/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбщиеПоставляемыеМакетыПечати/ManagerModule.bsl index 123848445..7b770aeaf 100644 --- a/SSL/src/InformationRegisters/ОбщиеПоставляемыеМакетыПечати/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбщиеПоставляемыеМакетыПечати/ManagerModule.bsl @@ -49,25 +49,29 @@ Попытка БлокировкаДанных.Заблокировать(); - МенеджерЗаписи = РегистрыСведений.ОбщиеПоставляемыеМакетыПечати.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ИмяМакета = Макет.Имя; - МенеджерЗаписи.Объект = ИдентификаторОбъектаМетаданныхВладельца; - МенеджерЗаписи.Прочитать(); - - Если Не МенеджерЗаписи.Выбран() Тогда - МенеджерЗаписи.ИмяМакета = Макет.Имя; - МенеджерЗаписи.Объект = ИдентификаторОбъектаМетаданныхВладельца; - КонецЕсли; + НаборЗаписей = РегистрыСведений.ОбщиеПоставляемыеМакетыПечати.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяМакета.Установить(Макет.Имя); + НаборЗаписей.Отбор.Объект.Установить(ИдентификаторОбъектаМетаданныхВладельца); + НаборЗаписей.Прочитать(); - Если МенеджерЗаписи.ВерсияМакета = ВерсияМакета Тогда + Если НаборЗаписей.Количество() > 0 Тогда + Запись = НаборЗаписей[0]; + Иначе + Запись = НаборЗаписей.Добавить(); + Запись.ИмяМакета = Макет.Имя; + Запись.Объект = ИдентификаторОбъектаМетаданныхВладельца; + КонецЕсли; + + Если Запись.ВерсияМакета = ВерсияМакета Тогда ОтменитьТранзакцию(); Продолжить; КонецЕсли; - МенеджерЗаписи.ВерсияМакета = ВерсияМакета; - МенеджерЗаписи.ПредыдущаяКонтрольнаяСумма = МенеджерЗаписи.КонтрольнаяСумма; - МенеджерЗаписи.КонтрольнаяСумма = КонтрольнаяСумма; - МенеджерЗаписи.Записать(); + Запись.ВерсияМакета = ВерсияМакета; + Запись.ПредыдущаяКонтрольнаяСумма = Запись.КонтрольнаяСумма; + Запись.КонтрольнаяСумма = КонтрольнаяСумма; + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); ЗафиксироватьТранзакцию(); Исключение @@ -117,8 +121,7 @@ // Параметры: // МассивОбъектов - Массив - ссылки на объекты, которые нужно распечатать; // ПараметрыПечати - Структура - дополнительные настройки печати; -// КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы (выходной параметр), -// см. УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм. +// КоллекцияПечатныхФорм - см. УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм. // ОбъектыПечати - СписокЗначений - значение - ссылка на объект; // представление - имя области в которой был выведен объект (выходной // параметр); diff --git a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl index 65e346953..c4643ccca 100644 --- a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl @@ -33,15 +33,15 @@ ТелоПакета = ЦентрМониторингаСлужебный.СтруктураJSONВСтроку(JSONСтруктура); ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); ХешMD5.Добавить(ТелоПакета + "hashSalt"); - HASH = ХешMD5.ХешСумма; - HASH = СтрЗаменить(Строка(HASH), " ", ""); + ХешПакета = ХешMD5.ХешСумма; + ХешПакета = СтрЗаменить(Строка(ХешПакета), " ", ""); НаборЗаписей = СоздатьНаборЗаписей(); НовЗапись = НаборЗаписей.Добавить(); НовЗапись.Период = ДатаЗаписи; НовЗапись.НомерПакета = СледующийНомерПакета; НовЗапись.ТелоПакета = ТелоПакета; - НовЗапись.ХешПакета = HASH; + НовЗапись.ХешПакета = ХешПакета; НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Записать(Ложь); diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl index e40027ee1..73edddb77 100644 --- a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl @@ -64,7 +64,9 @@ Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.1.1") > 0 И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.1.109") < 0 Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.1") > 0 - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.249") < 0 Тогда + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.249") < 0 + Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.3.1") > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.3.4") < 0 Тогда ЕстьТекущиеИзменения = Истина; КонецЕсли; @@ -148,14 +150,18 @@ Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.0.3.168") < 0 Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.1") > 0 - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.249") < 0 Тогда - + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.249") < 0 + Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.3.1") > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.3.4") < 0 Тогда + ЗапланироватьОбновление_00_00268406("ПереходНаВерсиюБСП_3.0.3.168"); КонецЕсли; Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.0.3.190") < 0 Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.1") > 0 - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.269") < 0 Тогда + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.2.269") < 0 + Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.3.1") > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "3.1.3.26") < 0 Тогда ЗапланироватьОбновление_00_00263154("ПереходНаВерсиюБСП_3.0.3.190"); КонецЕсли; @@ -307,6 +313,7 @@ Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию3(Параметры) Экспорт // Регистрация данных не требуется. + Возврат; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl index 240dde252..90de9bc5a 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl @@ -97,7 +97,7 @@ // Возвращает дату последнего заполнения параметров работы версии расширений. // // Возвращаемое значение: -// Дата - +// Дата // Функция ДатаПоследнегоЗаполненияВсехПараметровРаботыРасширений() Экспорт diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl index 211cee94a..706a7236e 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl @@ -978,9 +978,9 @@ КонецФункции // Возвращаемое значение: -// ТаблицаЗначений - Описание: -// * ВерсияКонфигурации - Строка - -// * Изменения - Произвольный - +// ТаблицаЗначений: +// * ВерсияКонфигурации - Строка +// * Изменения - Произвольный // Функция КоллекцияИзмененийПараметраРаботыПрограммы() diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form index c323520c1..c74ab860d 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form @@ -365,7 +365,7 @@ МакетыПечатныхФормОткрытьМакет 73 true - true + false true @@ -391,7 +391,7 @@ МакетыПечатныхФормИзменитьМакет 72 true - true + false true diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form index f3687a6ba..0440e398f 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form @@ -970,7 +970,7 @@ - ВременнаяПапка + ИмяВременногоКаталога 12 String diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl index 9fa544227..fee3db830 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl @@ -70,8 +70,8 @@ &НаКлиенте Процедура ПриЗакрытии(ЗавершениеРаботы) - Если Не ПустаяСтрока(ВременнаяПапка) Тогда - НачатьУдалениеФайлов(Новый ОписаниеОповещения, ВременнаяПапка); + Если Не ПустаяСтрока(ИмяВременногоКаталога) Тогда + НачатьУдалениеФайлов(Новый ОписаниеОповещения, ИмяВременногоКаталога); КонецЕсли; Если ЗавершениеРаботы Тогда @@ -111,7 +111,6 @@ &НаКлиенте Процедура ЗавершитьИзменение(Команда) - #Если Вебклиент ИЛИ МобильныйКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗагрузкеФайла", ЭтотОбъект); ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); @@ -228,11 +227,17 @@ &НаКлиенте Процедура ОткрытьМакетТонкийКлиент() + ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьМакетТонкийКлиентПослеСозданияВременногоКаталога", ЭтотОбъект); + ФайловаяСистемаКлиент.СоздатьВременныйКаталог(ОписаниеОповещения); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьМакетТонкийКлиентПослеСозданияВременногоКаталога(ИмяВременногоКаталога, ДополнительныеПараметры) Экспорт + #Если Не ВебКлиент И НЕ МобильныйКлиент Тогда Макет = МакетПечатнойФормы(ИмяОбъектаМетаданныхМакета); - ВременнаяПапка = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ВременнаяПапка); - ПутьКФайлуМакета = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВременнаяПапка) + ИмяФайлаМакета; + ПутьКФайлуМакета = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + ИмяФайлаМакета; Если ТипМакета = "MXL" Тогда Если Параметры.ТолькоОткрытие Тогда @@ -260,7 +265,7 @@ &НаКлиенте Процедура ОткрытьМакетВебКлиент() - ПолучитьФайл(ПоместитьМакетВоВременноеХранилище(), ИмяФайлаМакета); + ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, ПоместитьМакетВоВременноеХранилище(), ИмяФайлаМакета); ПерейтиНаСтраницуЗавершенияИзменения(); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl b/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl index 402e279c6..d73b92789 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl @@ -11,11 +11,19 @@ #Область СлужебныеПроцедурыИФункции // Записывает таблицу настроек в данные регистра по указанным измерениям. +// +// Параметры: +// ТаблицаНастроек - ТаблицаЗначений +// ЗначенияИзмерений - Структура +// ЗначенияРесурсов - Структура +// УдалятьСтарые - Булево +// Процедура ЗаписатьПакетНастроек(ТаблицаНастроек, ЗначенияИзмерений, ЗначенияРесурсов, УдалятьСтарые) Экспорт НаборЗаписей = СоздатьНаборЗаписей(); Для Каждого КлючИЗначение Из ЗначенияИзмерений Цикл - НаборЗаписей.Отбор[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение, Истина); + Отбор = НаборЗаписей.Отбор[КлючИЗначение.Ключ];// ЭлементОтбора + Отбор.Установить(КлючИЗначение.Значение, Истина); ТаблицаНастроек.Колонки.Добавить(КлючИЗначение.Ключ); ТаблицаНастроек.ЗаполнитьЗначения(КлючИЗначение.Значение, КлючИЗначение.Ключ); КонецЦикла; diff --git a/SSL/src/InformationRegisters/ПоставляемыеМакетыПечати/ManagerModule.bsl b/SSL/src/InformationRegisters/ПоставляемыеМакетыПечати/ManagerModule.bsl index a18e30350..d7059663b 100644 --- a/SSL/src/InformationRegisters/ПоставляемыеМакетыПечати/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПоставляемыеМакетыПечати/ManagerModule.bsl @@ -54,25 +54,29 @@ Попытка БлокировкаДанных.Заблокировать(); - МенеджерЗаписи = РегистрыСведений.ПоставляемыеМакетыПечати.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ИмяМакета = Макет.Имя; - МенеджерЗаписи.Объект = ИдентификаторОбъектаМетаданныхВладельца; - МенеджерЗаписи.Прочитать(); - - Если Не МенеджерЗаписи.Выбран() Тогда - МенеджерЗаписи.ИмяМакета = Макет.Имя; - МенеджерЗаписи.Объект = ИдентификаторОбъектаМетаданныхВладельца; - КонецЕсли; + НаборЗаписей = РегистрыСведений.ПоставляемыеМакетыПечати.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяМакета.Установить(Макет.Имя); + НаборЗаписей.Отбор.Объект.Установить(ИдентификаторОбъектаМетаданныхВладельца); + НаборЗаписей.Прочитать(); - Если МенеджерЗаписи.ВерсияМакета = ВерсияМакета Тогда + Если НаборЗаписей.Количество() > 0 Тогда + Запись = НаборЗаписей[0]; + Иначе + Запись = НаборЗаписей.Добавить(); + Запись.ИмяМакета = Макет.Имя; + Запись.Объект = ИдентификаторОбъектаМетаданныхВладельца; + КонецЕсли; + + Если Запись.ВерсияМакета = ВерсияМакета Тогда ОтменитьТранзакцию(); Продолжить; КонецЕсли; - МенеджерЗаписи.ВерсияМакета = ВерсияМакета; - МенеджерЗаписи.ПредыдущаяКонтрольнаяСумма = МенеджерЗаписи.КонтрольнаяСумма; - МенеджерЗаписи.КонтрольнаяСумма = КонтрольнаяСумма; - МенеджерЗаписи.Записать(); + Запись.ВерсияМакета = ВерсияМакета; + Запись.ПредыдущаяКонтрольнаяСумма = Запись.КонтрольнаяСумма; + Запись.КонтрольнаяСумма = КонтрольнаяСумма; + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); ЗафиксироватьТранзакцию(); Исключение diff --git a/SSL/src/InformationRegisters/ПотокиОбновления/ПотокиОбновления.mdo b/SSL/src/InformationRegisters/ПотокиОбновления/ПотокиОбновления.mdo new file mode 100644 index 000000000..722e50070 --- /dev/null +++ b/SSL/src/InformationRegisters/ПотокиОбновления/ПотокиОбновления.mdo @@ -0,0 +1,171 @@ + + + + + + + + + + + + ПотокиОбновления + + ru + Потоки обновления + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + АдресРезультата + + ru + Адрес результата + + + String + + 255 + + + + + + + + Группа + + ru + Группа + + + String + + 20 + + + + + + + + Наименование + + ru + Наименование + + + String + + 1024 + + + + + + + + ПараметрыПроцедуры + + ru + Параметры процедуры + + + ValueStorage + + + + + + + ПараметрыПроцедурыЗавершения + + ru + Параметры процедуры завершения + + + ValueStorage + + + + + + + ПриоритетЗавершения + + ru + Приоритет завершения + + + Number + + 10 + + + + + + + + ИдентификаторЗадания + + ru + Идентификатор задания + + + UUID + + + + + + + ИдентификаторПотока + + ru + Идентификатор потока + + + UUID + + + + Use + + true + + diff --git a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl index 6d500229c..8694a61d9 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl @@ -468,6 +468,22 @@ КонецФункции // Формирует пустую таблицу прав ролей. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ОбъектМетаданных - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * Роль - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * Изменение - Булево +// * Добавление - Булево +// * ЧтениеБезОграничения - Булево +// * ИзменениеБезОграничения - Булево +// * ДобавлениеБезОграничения - Булево +// * Просмотр - Булево +// * Редактирование - Булево +// * ИнтерактивноеДобавление - Булево +// * РольПолноеИмя - Строка +// * ОбъектМетаданныхПолноеИмя - Строка +// Функция ТаблицаПравРолей(ОбъектыРасширений = Ложь, ВидИзмененияСтроки = Ложь, КакРезультатЗапроса = Ложь) Экспорт ПраваРолей = СоздатьНаборЗаписей().Выгрузить(); diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl index 4d7b348bf..e94fb2fa0 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl @@ -565,13 +565,13 @@ &НаСервере Функция ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере() - // Создаем временный каталог на сервере и формируем пути к файлам и папкам. - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(""); - СоздатьКаталог(ИмяВременнойПапки); + // Создаем временный каталог на сервере и формируем пути к файлам и каталогам. + ИмяВременногоКаталога = ПолучитьИмяВременногоФайла(""); + СоздатьКаталог(ИмяВременногоКаталога); - ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + "ExchangeRules"; - ПутьКФайлуКорреспондента = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + "CorrespondentExchangeRules"; - ПутьКФайлуРегистрации = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + "RegistrationRules"; + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + "ExchangeRules"; + ПутьКФайлуКорреспондента = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + "CorrespondentExchangeRules"; + ПутьКФайлуРегистрации = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + "RegistrationRules"; Запрос = Новый Запрос; Запрос.Текст = @@ -592,7 +592,7 @@ НСтрока = НСтр("ru = 'Не удалось получить правила обмена.'"); ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока); - УдалитьФайлы(ИмяВременнойПапки); + УдалитьФайлы(ИмяВременногоКаталога); Возврат ""; Иначе @@ -619,13 +619,13 @@ КонецЦикла; - МаскаУпаковкиФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + "*.xml"; + МаскаУпаковкиФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + "*.xml"; ОбменДаннымиСервер.ЗапаковатьВZipФайл(ПутьКФайлу + ".zip", МаскаУпаковкиФайлов); // Помещаем архив правил в хранилище. ДвоичныеДанныеАрхиваПравил = Новый ДвоичныеДанные(ПутьКФайлу + ".zip"); АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанныеАрхиваПравил); - УдалитьФайлы(ИмяВременнойПапки); + УдалитьФайлы(ИмяВременногоКаталога); Возврат АдресВременногоХранилища; @@ -775,8 +775,14 @@ // // Параметры: // Шаблон - Строка - заготовка для формирования. -// Строка1 - Строка, ФорматированнаяСтрока, Картинка, Неопределено - подставляемое значение. -// Строка2 - Строка, ФорматированнаяСтрока, Картинка, Неопределено - подставляемое значение. +// Строка1 - Строка +// - ФорматированнаяСтрока +// - Картинка +// - Неопределено - подставляемое значение. +// Строка2 - Строка +// - ФорматированнаяСтрока +// - Картинка +// - Неопределено - подставляемое значение. // // Возвращаемое значение: // ФорматированнаяСтрока - сформированная по входящим параметрам. @@ -854,9 +860,9 @@ #Если МобильныйКлиент Тогда Возврат ""; #Иначе - App = Новый COMОбъект("Shell.Application"); - Folder = App.Namespace(26); - Результат = Folder.Self.Path; + Приложение = Новый COMОбъект("Shell.Application"); + Каталог = Приложение.Namespace(26); + Результат = Каталог.Self.Path; Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Результат); #КонецЕсли diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl index 73174e310..ef52d1b17 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl @@ -432,11 +432,11 @@ &НаСервере Функция ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере() - // Создаем временный каталог на сервере и формируем пути к файлам и папкам. - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(""); - СоздатьКаталог(ИмяВременнойПапки); - ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + "ExchangeRules"; - ПутьКФайлуКорреспондента = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + "CorrespondentExchangeRules"; + // Создаем временный каталог на сервере и формируем пути к файлам и каталогам. + ИмяВременногоКаталога = ПолучитьИмяВременногоФайла(""); + СоздатьКаталог(ИмяВременногоКаталога); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + "ExchangeRules"; + ПутьКФайлуКорреспондента = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + "CorrespondentExchangeRules"; Запрос = Новый Запрос; Запрос.Текст = @@ -455,7 +455,7 @@ НСтрока = НСтр("ru = 'Не удалось получить правила обмена.'"); ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока); - УдалитьФайлы(ИмяВременнойПапки); + УдалитьФайлы(ИмяВременногоКаталога); Возврат ""; Иначе @@ -470,13 +470,13 @@ ДвоичныеДанныеПравилКорреспондента = Выборка.ПравилаXMLКорреспондента.Получить(); // ДвоичныеДанные ДвоичныеДанныеПравилКорреспондента.Записать(ПутьКФайлуКорреспондента + ".xml"); - МаскаУпаковкиФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + "*.xml"; + МаскаУпаковкиФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога) + "*.xml"; ОбменДаннымиСервер.ЗапаковатьВZipФайл(ПутьКФайлу + ".zip", МаскаУпаковкиФайлов); // Помещаем архив правил в хранилище. ДвоичныеДанныеАрхиваПравил = Новый ДвоичныеДанные(ПутьКФайлу + ".zip"); АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанныеАрхиваПравил); - УдалитьФайлы(ИмяВременнойПапки); + УдалитьФайлы(ИмяВременногоКаталога); Возврат АдресВременногоХранилища; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl index f189fd119..a7de20bd7 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl @@ -110,10 +110,10 @@ ИмяФайла = Файл.Имя; // Распаковываем архив - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(""); - Если ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяФайлаПравил, ИмяВременнойПапки) Тогда + ИмяВременногоКаталога = ПолучитьИмяВременногоФайла(""); + Если ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяФайлаПравил, ИмяВременногоКаталога) Тогда - СписокРаспакованныхФайлов = НайтиФайлы(ИмяВременнойПапки, ПолучитьМаскуВсеФайлы(), Истина); + СписокРаспакованныхФайлов = НайтиФайлы(ИмяВременногоКаталога, ПолучитьМаскуВсеФайлы(), Истина); // В архиве не было ни одного файла - отказываемся от загрузки. Если СписокРаспакованныхФайлов.Количество() = 0 Тогда @@ -151,8 +151,8 @@ ВызватьИсключение НСтр("ru = 'Не удалось распаковать архив с правилами.'"); КонецЕсли; - // Удаляем временный архив и временную папку, в которую был распакован архив. - ФайловаяСистема.УдалитьВременныйФайл(ИмяВременнойПапки); + // Удаляем временный архив и временный каталог с ним. + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоКаталога); ИнформацияОПравилахКонвертации = "[ИнформацияОПравилахИсточника] | @@ -165,12 +165,7 @@ ДвоичныеДанные.Записать(ИмяВременногоФайла); // Зачитываем правила конвертации. - КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - - // свойства обработки - КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Выгрузка"; - КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = ИмяПланаОбмена; - КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + КонвертацияОбъектовИнформационныхБаз = НоваяОбработкаКонвертацияОбъектовИнформационныхБаз("Выгрузка", ИмяПланаОбмена); ОбменДаннымиСервер.УстановитьНастройкиОтладкиВыгрузкиДляПравилОбмена(КонвертацияОбъектовИнформационныхБаз, ИмяПланаОбмена, Ложь); @@ -184,12 +179,7 @@ ДвоичныеДанныеКорреспондента.Записать(ИмяВременногоФайлаКорреспондента); // Зачитываем правила конвертации. - КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - - // свойства обработки - КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Загрузка"; - КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = ИмяПланаОбмена; - КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + КонвертацияОбъектовИнформационныхБаз = НоваяОбработкаКонвертацияОбъектовИнформационныхБаз("Загрузка", ИмяПланаОбмена); // методы обработки ПравилаЗачитанныеКорреспондента = КонвертацияОбъектовИнформационныхБаз.ПравилаОбмена(ИмяВременногоФайлаКорреспондента); @@ -342,15 +332,36 @@ Возврат ПравилаТиповые; КонецФункции +// Параметры: +// РежимОбмена - Строка +// ИмяПланаОбмена - Строка +// +// Возвращаемое значение: +// ОбработкаОбъект.КонвертацияОбъектовИнформационныхБаз +// +Функция НоваяОбработкаКонвертацияОбъектовИнформационныхБаз(РежимОбмена, ИмяПланаОбмена) + + КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); + + КонвертацияОбъектовИнформационныхБаз.РежимОбмена = РежимОбмена; + КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = ИмяПланаОбмена; + + КонвертацияОбъектовИнформационныхБаз.УстановитьКлючСообщенияЖурналаРегистрации( + ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными()); + + Возврат КонвертацияОбъектовИнформационныхБаз; + +КонецФункции + // Загружает правила в регистр. // // Параметры: -// Отказ - Булево - Отказ от записи в регистр. +// Отказ - Булево - отказ от записи в регистр. // Запись - РегистрСведенийЗапись.ПравилаДляОбменаДанными - запись регистра, в которую будут помещены данные. -// АдресВременногоХранилища - Строка - Адрес временного хранилища, из которого будут загружены XML-правила. -// ИмяФайлаПравил - Строка - Имя файла из которого были загружены файлы(оно также фиксируется в регистре). +// АдресВременногоХранилища - Строка - адрес временного хранилища, из которого будут загружены XML-правила. +// ИмяФайлаПравил - Строка - имя файла из которого были загружены файлы(оно также фиксируется в регистре). // ДвоичныеДанные - ДвоичныеДанные - данные, в которые сохраняется XML-файл (в том числе и распакованный из ZIP-архива). -// ЭтоАрхив - Булево - Признак того, что правила загружаются из ZIP-архива, а не из XML-файла. +// ЭтоАрхив - Булево - признак того, что правила загружаются из ZIP-архива, а не из XML-файла. // Процедура ЗагрузитьПравила(Отказ, Запись, АдресВременногоХранилища = "", ИмяФайлаПравил = "", ЭтоАрхив = Ложь) Экспорт @@ -399,10 +410,10 @@ ДвоичныеДанные.Записать(ИмяВременногоАрхива); // Распаковываем архив - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(""); - Если ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяВременногоАрхива, ИмяВременнойПапки) Тогда + ИмяВременногоКаталога = ПолучитьИмяВременногоФайла(""); + Если ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяВременногоАрхива, ИмяВременногоКаталога) Тогда - СписокРаспакованныхФайлов = НайтиФайлы(ИмяВременнойПапки, ПолучитьМаскуВсеФайлы(), Истина); + СписокРаспакованныхФайлов = НайтиФайлы(ИмяВременногоКаталога, ПолучитьМаскуВсеФайлы(), Истина); // В архиве не было ни одного файла - отказываемся от загрузки. Если СписокРаспакованныхФайлов.Количество() = 0 Тогда @@ -467,8 +478,8 @@ ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); КонецЕсли; - // Удаляем временный архив и временную папку, в которую был распакован архив. - ФайловаяСистема.УдалитьВременныйФайл(ИмяВременнойПапки); + // Удаляем временный архив и временный каталог с ним. + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоКаталога); ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоАрхива); КонецЕсли; @@ -486,12 +497,7 @@ Если ЭтоПравилаКонвертации Тогда // Зачитываем правила конвертации. - КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - - // свойства обработки - КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Выгрузка"; - КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = Запись.ИмяПланаОбмена; - КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + КонвертацияОбъектовИнформационныхБаз = НоваяОбработкаКонвертацияОбъектовИнформационныхБаз("Выгрузка", Запись.ИмяПланаОбмена); ОбменДаннымиСервер.УстановитьНастройкиОтладкиВыгрузкиДляПравилОбмена(КонвертацияОбъектовИнформационныхБаз, Запись.ИмяПланаОбмена, Запись.РежимОтладки); @@ -510,12 +516,7 @@ ДвоичныеДанныеКорреспондента.Записать(ИмяВременногоФайлаКорреспондента); // Зачитываем правила конвертации. - КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - - // свойства обработки - КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Загрузка"; - КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = Запись.ИмяПланаОбмена; - КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + КонвертацияОбъектовИнформационныхБаз = НоваяОбработкаКонвертацияОбъектовИнформационныхБаз("Загрузка", Запись.ИмяПланаОбмена); // методы обработки ПравилаЗачитанныеКорреспондента = КонвертацияОбъектовИнформационныхБаз.ПравилаОбмена(ИмяВременногоФайлаКорреспондента); @@ -600,10 +601,10 @@ ДвоичныеДанные.Записать(ИмяВременногоАрхива); // Распаковываем архив - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(""); - Если ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяВременногоАрхива, ИмяВременнойПапки) Тогда + ИмяВременногоКаталога = ПолучитьИмяВременногоФайла(""); + Если ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяВременногоАрхива, ИмяВременногоКаталога) Тогда - СписокРаспакованныхФайлов = НайтиФайлы(ИмяВременнойПапки, ПолучитьМаскуВсеФайлы(), Истина); + СписокРаспакованныхФайлов = НайтиФайлы(ИмяВременногоКаталога, ПолучитьМаскуВсеФайлы(), Истина); // В архиве не было ни одного файла - отказываемся от загрузки. Если СписокРаспакованныхФайлов.Количество() = 0 Тогда @@ -646,8 +647,8 @@ ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); КонецЕсли; - // Удаляем временный архив и временную папку, в которую был распакован архив. - ФайловаяСистема.УдалитьВременныйФайл(ИмяВременнойПапки); + // Удаляем временный архив и временный каталог с ним. + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоКаталога); ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоАрхива); КонецЕсли; @@ -667,12 +668,7 @@ ДвоичныеДанные.Записать(ИмяВременногоФайла); // Зачитываем правила конвертации. - КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - - // свойства обработки - КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Выгрузка"; - КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = ЗаписьПравилКонвертации.ИмяПланаОбмена; - КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + КонвертацияОбъектовИнформационныхБаз = НоваяОбработкаКонвертацияОбъектовИнформационныхБаз("Выгрузка", ЗаписьПравилКонвертации.ИмяПланаОбмена); ОбменДаннымиСервер.УстановитьНастройкиОтладкиВыгрузкиДляПравилОбмена(КонвертацияОбъектовИнформационныхБаз, ЗаписьПравилКонвертации.ИмяПланаОбмена, ЗаписьПравилКонвертации.РежимОтладки); @@ -699,12 +695,7 @@ ДвоичныеДанныеКорреспондента.Записать(ИмяВременногоФайлаКорреспондента); // Зачитываем правила конвертации. - КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - - // свойства обработки - КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Загрузка"; - КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = ЗаписьПравилКонвертации.ИмяПланаОбмена; - КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + КонвертацияОбъектовИнформационныхБаз = НоваяОбработкаКонвертацияОбъектовИнформационныхБаз("Загрузка", ЗаписьПравилКонвертации.ИмяПланаОбмена); // методы обработки ПравилаЗачитанныеКорреспондента = КонвертацияОбъектовИнформационныхБаз.ПравилаОбмена(ИмяВременногоФайлаКорреспондента); @@ -775,7 +766,7 @@ // // Возвращаемое значение: // ПравилаЗачитанные - ХранилищеЗначения - зачитанные правила конвертации объектов. -// Неопределено - Если правила конвертации не были загружены в базу для плана обмена. +// Неопределено - если правила конвертации не были загружены в базу для плана обмена. // Функция ЗачитанныеПравилаКонвертацииОбъектов(Знач ИмяПланаОбмена, ПолучатьПравилаКорреспондента = Ложь) Экспорт diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl index 8fbe9c346..bcce3c949 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl @@ -93,7 +93,7 @@ Если Не КаталогПроверки.Существует() Тогда - СтрокаСообщения = НСтр("ru = 'Каталог файла протокола обмена ""%1"" не найден.'"); + СтрокаСообщения = НСтр("ru = 'Папка файла протокола обмена ""%1"" не найдена.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки); Отказ = Истина; diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl index 2c142594f..8e2cc4271 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl @@ -57,11 +57,11 @@ // Устанавливает папку, предмет и реквизиты рассмотрения для взаимодействий. // // Параметры: -// Ссылка - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее, -// ДокументСсылка.Встреча, -// ДокументСсылка.ЗапланированноеВзаимодействие, -// ДокументСсылка.ТелефонныйЗвонок - взаимодействие для которого будут установлены папка и предмет. +// Ссылка - ДокументСсылка.ЭлектронноеПисьмоВходящее +// - ДокументСсылка.ЭлектронноеПисьмоИсходящее +// - ДокументСсылка.Встреча +// - ДокументСсылка.ЗапланированноеВзаимодействие +// - ДокументСсылка.ТелефонныйЗвонок - взаимодействие для которого будут установлены папка и предмет. // Реквизиты - см. РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия. // НаборЗаписей - РегистрСведений.ПредметыПапкиВзаимодействий.НаборЗаписей - набор записей регистра, если он уже создан // на момент вызова процедуры. @@ -145,12 +145,12 @@ // // Параметры: // Блокировка - БлокировкаДанных - устанавливаемая блокировка -// Взаимодействия - Массив - -// - ДокументСсылка.ЗапланированноеВзаимодействие - -// - ДокументСсылка.Встреча - -// - ДокументСсылка.ТелефонныйЗвонок - -// - ДокументСсылка.СообщениеSMS - -// - ДокументСсылка.ЭлектронноеПисьмоВходящее - +// Взаимодействия - Массив +// - ДокументСсылка.ЗапланированноеВзаимодействие +// - ДокументСсылка.Встреча +// - ДокументСсылка.ТелефонныйЗвонок +// - ДокументСсылка.СообщениеSMS +// - ДокументСсылка.ЭлектронноеПисьмоВходящее // - ДокументСсылка.ЭлектронноеПисьмоИсходящее - документы, для которых устанавливается блокировка. // Процедура ЗаблокироватьПредметыПапокВзаимодействий(Блокировка, Взаимодействия) Экспорт diff --git a/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl b/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl index f2e115d17..928f2a7f7 100644 --- a/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl @@ -13,33 +13,37 @@ // Записывает таблицу настроек в данные регистра по указанным измерениям. // // Параметры: -// ТаблицаНастроек - ТаблицаЗначений - -// Измерения - Структура - где:ъ -// * Пользователь - СправочникСсылка.Пользователи - -// - СправочникСсылка.ВнешниеПользователи - -// * Вариант - СправочникСсылка.ВариантыОтчетов - -// * Подсистема - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// - СправочникСсылка.ИдентификаторыОбъектовРасширений - -// Ресурсы - Структура - где: -// * Видимость - Булево - -// * БыстрыйДоступ - Булево - -// ПоверхСуществующих - Булево - +// ТаблицаНастроек - ТаблицаЗначений +// Измерения - Структура: +// * Пользователь - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// * Вариант - СправочникСсылка.ВариантыОтчетов +// * Подсистема - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// Ресурсы - Структура: +// * Видимость - Булево +// * БыстрыйДоступ - Булево +// ПоверхСуществующих - Булево // // Возвращаемое значение: -// РегистрСведенийНаборЗаписей.ПредопределенныеВариантыОтчетовВерсийРасширений - +// РегистрСведенийНаборЗаписей.ПредопределенныеВариантыОтчетовВерсийРасширений // Функция Набор(ТаблицаНастроек, Измерения, Ресурсы, ПоверхСуществующих) Экспорт НаборЗаписей = СоздатьНаборЗаписей(); Для Каждого КлючИЗначение Из Измерения Цикл - НаборЗаписей.Отбор[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение, Истина); + ЭлементОтбора = НаборЗаписей.Отбор[КлючИЗначение.Ключ]; // ЭлементОтбора + ЭлементОтбора.Установить(КлючИЗначение.Значение, Истина); + ТаблицаНастроек.Колонки.Добавить(КлючИЗначение.Ключ); ТаблицаНастроек.ЗаполнитьЗначения(КлючИЗначение.Значение, КлючИЗначение.Ключ); КонецЦикла; + Для Каждого КлючИЗначение Из Ресурсы Цикл ТаблицаНастроек.Колонки.Добавить(КлючИЗначение.Ключ); ТаблицаНастроек.ЗаполнитьЗначения(КлючИЗначение.Значение, КлючИЗначение.Ключ); КонецЦикла; + Если Не ПоверхСуществующих Тогда НаборЗаписей.Прочитать(); СтарыеЗаписи = НаборЗаписей.Выгрузить(); @@ -51,6 +55,7 @@ КонецЕсли; КонецЦикла; КонецЕсли; + НаборЗаписей.Загрузить(ТаблицаНастроек); Возврат НаборЗаписей; diff --git a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl index f9b73e7bd..18b752785 100644 --- a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl +++ b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl @@ -213,32 +213,31 @@ КонецЕсли; РазностьДат = ""; - Приставка = НСтр("ru = 'Задание будет запущено'") + " "; - Корень = НСтр("ru = 'через'") + " "; Если ИспользоватьДатуИВремяВСрокахЗадач Тогда Если ЧислоДней > 0 И ЧислоЧасов > 0 Тогда - РазностьДат = Корень + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 дн. и %2 ч.'"), + РазностьДат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Задание будет запущено через %1 дн. и %2 ч.'"), Строка(ЧислоДней), Строка(ЧислоЧасов)); ИначеЕсли ЧислоДней > 0 Тогда - РазностьДат = Корень + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 дн.", Строка(ЧислоДней)); - ИначеЕсли ЧислоЧасов > 0 Тогда - РазностьДат = Корень + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 ч.", Строка(ЧислоЧасов)); - Иначе РазностьДат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'менее чем через час.'"), Строка(ЧислоЧасов)); + НСтр("ru='Задание будет запущено через %1 дн.'"), Строка(ЧислоДней)); + ИначеЕсли ЧислоЧасов > 0 Тогда + РазностьДат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Задание будет запущено через %1 ч.'"), Строка(ЧислоЧасов)); + Иначе + РазностьДат = НСтр("ru = 'Задание будет запущено менее чем через час.'"); КонецЕсли; Иначе Если ЧислоДней > 0 Тогда - РазностьДат = Корень + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 дн.", Строка(ЧислоДней)); - Иначе РазностьДат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'менее чем через день.'"), Строка(ЧислоДней)); + НСтр("ru='Задание будет запущено через %1 дн.'"), Строка(ЧислоДней)); + Иначе + РазностьДат = НСтр("ru = 'Задание будет запущено менее чем через день.'"); КонецЕсли; КонецЕсли; - Возврат Приставка + РазностьДат; + Возврат РазностьДат; КонецФункции diff --git a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl index 7f5f70761..f47047e5f 100644 --- a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl @@ -20,9 +20,11 @@ // Возвращает признак наличия записи в регистре по переданному отбору. // // Параметры: -// СтруктураЗаписи - Структура - структура отбора: +// СтруктураЗаписи - Структура: // * УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена. -// * Ссылка - ДокументСсылка, ПланВидовХарактеристикСсылка, СправочникСсылка - ссылка на объект. +// * Ссылка - ДокументСсылка +// - ПланВидовХарактеристикСсылка +// - СправочникСсылка - ссылка на объект. // // Возвращаемое значение: // Булево - Истина, если в регистре содержатся записи для заданного отбора. @@ -58,12 +60,13 @@ // В противном случае возвращается УИД переданной ссылки. // // Параметры: -// УзелИнформационнойБазы - Ссылка на узел плана обмена, в который происходит выгрузка данных. +// УзелИнформационнойБазы - ссылка на узел плана обмена, в который происходит выгрузка данных. // СсылкаНаОбъект - ссылка на объект информационной базы, для которого необходимо получить // уникальный идентификатор объекта XDTO. // // Возвращаемое значение: -// Строка - Уникальный идентификатор объекта. +// Строка - уникальный идентификатор объекта. +// Функция ПубличныйИдентификаторПоСсылкеОбъекта(УзелИнформационнойБазы, СсылкаНаОбъект) Экспорт УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index f8482a0e7..e0098dade 100644 --- a/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -17,7 +17,7 @@ // Разрешение - ОбъектXDTO. // // Возвращаемое значение: -// Строка - . +// Строка // Функция КлючРазрешения(Знач Разрешение) Экспорт @@ -64,12 +64,12 @@ // БезОписаний - Булево - если Истина - срез будет возвращен с очищенным полем Description у разрешений. // // Возвращаемое значение - ТаблицаЗначений, колонки: -// * ТипПрограммногоМодуля - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// * ИдентификаторПрограммногоМодуля - УникальныйИдентификатор - -// * ТипВладельца - СправочникСсылка.ИдентификаторыОбъектовМетаданных - -// * ИдентификаторВладельца - УникальныйИдентификатор - +// * ТипПрограммногоМодуля - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ИдентификаторПрограммногоМодуля - УникальныйИдентификатор +// * ТипВладельца - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ИдентификаторВладельца - УникальныйИдентификатор // * Тип - Строка - имя XDTO-типа, описывающего разрешения. -// * Разрешения - Соответствие - описание разрешений: +// * Разрешения - Соответствие: // ** Ключ - Строка - ключ разрешения (см. функцию КлючРазрешения в модуле менеджера регистра. // РазрешенияНаИспользованиеВнешнихРесурсов), // ** Значение - ОбъектXDTO - XDTO-описание разрешения. diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl index 5aab0773c..7366c8ecb 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl @@ -1270,7 +1270,7 @@ &НаКлиенте Процедура ОткрытьВерсиюНаКлиенте(ПолеВерсия) - ТекущиеДанные = Элементы.Коллизии.ТекущиеДанные; + ТекущиеДанные = ТекущиеДанныеТаблицыКоллизий(); Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; @@ -1281,6 +1281,26 @@ КонецПроцедуры +// Возвращаемое значение: +// ДанныеФормыСтруктура - поля: +// * Дата - Дата +// * Ссылка - ЛюбаяСсылка +// * ТипСтрокой - Строка +// * НомерЭтойВерсии - Число +// * НомерДругойВерсии - Число +// * АвторДругойВерсии - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.Пользователи +// - ПланОбменаСсылка +// * ДругаяВерсияПринята - Булево +// * ВерсияПроигнорирована - Булево +// +&НаКлиенте +Функция ТекущиеДанныеТаблицыКоллизий() + + Возврат Элементы.Коллизии.ТекущиеДанные; + +КонецФункции + &НаКлиенте Процедура ОткрытьОтчетСравненияВерсий(Ссылка, СравниваемыеВерсии) @@ -1299,8 +1319,6 @@ МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); КонецЕсли; - РазрешитьПроведениеДокумента = Метаданные.СвойстваОбъектов.Проведение.Разрешить; - СчетчикВсего = 0; СчетчикНеПринятые = 0; Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл @@ -1347,13 +1365,19 @@ // Отбор - ОтборКомпоновкиДанных - объект отбора. // // Возвращаемое значение: -// Структура - набор полей отбора: -// * Пропущена - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. -// * ДатаНачала - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. -// * ДатаОкончания - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. -// * УзелРавно - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. -// * Причина - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. -// * УзелВСписке - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. +// Структура: +// * Пропущена - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. +// * ДатаНачала - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. +// * ДатаОкончания - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. +// * УзелРавно - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. +// * Причина - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. +// * УзелВСписке - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. // &НаСервере Функция НастройкаОтбораПоРезультатамОбменов(Отбор) @@ -1382,13 +1406,19 @@ // ОтборПоПричине - Булево - Истина, если в настройку необходимо включить отбор по причине проблемы. // // Возвращаемое значение: -// Структура - набор полей отбора: -// * АвторРавно - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. -// * ДатаНачала - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. -// * ДатаОкончания - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. -// * ВерсияПроигнорирована - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. -// * АвторВСписке - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор элемента компоновки. -// * ПричинаЗапрета - ИдентификаторКомпоновкиДанных, Неопределено - (необязательное) идентификатор элемента компоновки. +// Структура: +// * АвторРавно - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. +// * ДатаНачала - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. +// * ДатаОкончания - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. +// * ВерсияПроигнорирована - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. +// * АвторВСписке - ИдентификаторКомпоновкиДанных +// - Неопределено - идентификатор элемента компоновки. +// * ПричинаЗапрета - ИдентификаторКомпоновкиДанных +// - Неопределено - (необязательное) идентификатор элемента компоновки. // &НаСервере Функция НастройкаОтбораПоВерсиямОбъектов(Отбор, ОтборПоПричине = Ложь) @@ -1416,7 +1446,7 @@ КонецФункции // Возвращаемое значение: -// Структура - набор настроек отборов: +// Структура: // * НепроведенныеДокументы - см. НастройкаОтбораПоРезультатамОбменов // * НезаполненныеРеквизиты - см. НастройкаОтбораПоРезультатамОбменов // * ОшибкиОбъектаXDTO - см. НастройкаОтбораПоРезультатамОбменов diff --git a/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl b/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl index 118247b63..747b5d219 100644 --- a/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl @@ -102,7 +102,6 @@ Строка.Файл, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, Строка.Файл.Метаданные(), Строка.Файл, ТекстСообщения); - КонецПопытки; КонецЦикла; diff --git a/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl index f131fcb33..7a0700c40 100644 --- a/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl @@ -13,7 +13,8 @@ // Удаляет либо одну, либо все записи из регистра. // // Параметры: -// Контакт - СправочникСсылка, Неопределено - контакт, для которого удаляется запись. +// Контакт - СправочникСсылка +// - Неопределено - контакт, для которого удаляется запись. // Если указано значение Неопределено, то регистр будет очищен полностью. // Процедура УдалитьЗаписьИзРегистра(Контакт = Неопределено) Экспорт diff --git a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Form.form b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Form.form new file mode 100644 index 000000000..d1cd8a184 --- /dev/null +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Form.form @@ -0,0 +1,1589 @@ + + + + <key>ru</key> + <value>Изменение состояния оригинала документа</value> + + + ГруппаДекорацияПредупреждение + 96 + + КартинкаИнфо + 93 + + <key>ru</key> + <value>Картинка инфо</value> + + true + true + + true + + + КартинкаИнфоРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + КартинкаИнфоКонтекстноеМеню + 94 + true + + true + true + Center + + + CommonPicture.Информация32 + + AutoSize + AsFileRef + + + + НадписьПредупреждение + 80 + + <key>ru</key> + <value>Состояние оригинала документа установлено по печатным формам.</value> + + true + true + + true + + + НадписьПредупреждениеРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + НадписьПредупреждениеКонтекстноеМеню + 81 + true + + Label + true + Center + + Left + + + true + true + + true + + + <key>ru</key> + <value>Декорация предупреждение</value> + + + ГруппаДекорацияПредупреждениеРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаКоманды + 131 + + ГруппУстановитьСостояниеОригинала + 151 + VeryHigh + + КоманднаяПанельУстановитьСостояниеОригинала + 70 + + ПодменюУстановитьНастроитьСостояниеОригинала + 143 + + ГруппаУстановитьСостояниеОригинала + 147 + true + true + + true + + + <key>ru</key> + <value>Установить состояние оригинала</value> + + + ru + Установить состояние оригинала первичного документа + + + ГруппаУстановитьСостояниеОригиналаРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + + + + ГруппаНастроитьСостоянияОригинала + 149 + true + true + + true + + + <key>ru</key> + <value>Группа установить состояние оригинала</value> + + + ru + Настроить состояние оригинала + + + ГруппаНастроитьСостоянияОригиналаРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Состояние оригинала</value> + + + ru + Подменю команд предназначенных для установки и изменения состояния оригинала первичных документов. + + + ПодменюУстановитьНастроитьСостояниеОригиналаРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + Popup + + + CommonPicture.УстановитьСостояниеОригиналаПервичногоДокумента + + PictureAndText + Normal + + + + ГруппаУстановитьОригиналПолучен + 145 + VeryHigh + true + true + + true + + + <key>ru</key> + <value>Установить оригинал получен</value> + + + ru + Команда предназначена для установки конечного состояния оригинала первичного документа"Оригинал получен". + + + ГруппаУстановитьОригиналПолученРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Установить состояние</value> + + + ru + Установить состояние оригинала + + false + + КоманднаяПанельУстановитьСостояниеОригиналаРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value>Установить состояние оригинала</value> + + + ГруппУстановитьСостояниеОригиналаРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Single + Auto + true + true + Auto + Auto + + + + ГруппаДополнительно + 153 + VeryLow + + ГруппаКартинкаДобавитьСвою + 136 + VeryHigh + + КартинкаДобавить + 133 + + <key>ru</key> + <value>Картинка добавить</value> + + true + true + + true + + + КартинкаДобавитьРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + КартинкаДобавитьКонтекстноеМеню + 134 + true + + true + true + Center + + + StdPicture.CreateListItem + + AsFileRef + + + + ДобавитьСвою + 98 + + ПечатнаяФормаВручную + 100 + + <key>ru</key> + <value>Печатная форма</value> + + true + true + + true + + + ПечатнаяФормаВручную + + + ПечатнаяФормаВручнуюРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + ПечатнаяФормаВручнуюКонтекстноеМеню + 101 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДобавитьВручную + 103 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + ДобавитьВручнуюРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + UsualButton + Form.Command.ДобавитьВручную + Normal + Auto + true + true + Right + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавить свою</value> + + + Style.ГиперссылкаЦвет + + + Style.NormalTextFont + + + ru + Добавить свою печатную форму + + Center + + ДобавитьСвоюРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + PopUp + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Добавить свою</value> + + Center + + ГруппаКартинкаДобавитьСвоюРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Half + Auto + true + true + Auto + Auto + + + + ГруппаПечатныеФормы + 129 + VeryHigh + + ПечатныеФормы + 83 + + ПоказатьОтслеживаемые + 87 + + <key>ru</key> + <value> Показать отслеживаемые</value> + + true + true + + true + + + ПоказатьОтслеживаемыеРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Form.Command.ПоказатьОтслеживаемые + Normal + true + true + Right + UserCmds + Auto + InCommandBar + + + ПоказатьВсе + 85 + + <key>ru</key> + <value> Показать все</value> + + true + true + + true + + + ПоказатьВсеРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + Form.Command.ПоказатьВсе + Normal + true + true + Right + UserCmds + InCommandBar + + true + true + + true + + + <key>ru</key> + <value>Фильтр форм</value> + + + ПечатныеФормыРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + Popup + + + CommonPicture.Отборы + + Picture + FormCommandPanelGlobalCommands + Normal + + + true + true + + true + + + <key>ru</key> + <value>Фильтр форм</value> + + false + Right + Bottom + + ГруппаПечатныеФормыРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + Right + + ГруппаДополнительноРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Right + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Команды</value> + + true + + ГруппаКомандыРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Single + Auto + true + true + Auto + Auto + + + + КомплектПечатныхФорм + 48 + VeryHigh + + <key>ru</key> + <value>Комплект печатных форм</value> + + true + true + + true + + + КомплектПечатныхФорм + + None + + КомплектПечатныхФормГруппа + 115 + + КомплектПечатныхФормКартинка + 112 + true + true + + true + + + КомплектПечатныхФорм.Картинка + + None + + КомплектПечатныхФормКартинкаРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + КомплектПечатныхФормКартинкаКонтекстноеМеню + 113 + true + + PictureField + true + Auto + true + Left + true + + 7 + true + true + true + + + 1 + + AsFileRef + + + + КомплектПечатныхФормПредставление + 61 + + <key>ru</key> + <value>Первичный документ</value> + + true + true + + true + + + КомплектПечатныхФорм.Представление + + + КомплектПечатныхФормПредставлениеРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + КомплектПечатныхФормПредставлениеКонтекстноеМеню + 62 + true + + InputField + true + Auto + true + Left + true + + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комплект печатных форм группа</value> + + + КомплектПечатныхФормГруппаРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОригиналПолученКартинка + 138 + true + true + + true + + + КомплектПечатныхФорм.ОригиналПолученКартинка + + None + + ОригиналПолученКартинкаРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + ОригиналПолученКартинкаКонтекстноеМеню + 139 + true + + PictureField + Auto + true + + CommonPicture.СостояниеОригиналаПервичногоДокументаОригиналПолучен + + Left + true + + true + true + true + true + + CommonPicture.КоллекцияПиктограммНаличиеОригиналаПервичногоДокумента + + + + 1 + + AsFileRef + + + + КомплектПечатныхФормСостояние + 64 + + <key>ru</key> + <value>Состояние оригинала</value> + + true + true + + true + + + КомплектПечатныхФорм.Состояние + + + OnChange + КомплектПечатныхФормСостояниеПриИзменении + + + КомплектПечатныхФормСостояниеРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + КомплектПечатныхФормСостояниеКонтекстноеМеню + 65 + true + + InputField + Auto + true + Left + true + + + ChoiceProcessing + КомплектПечатныхФормСостояниеОбработкаВыбора + + true + true + true + true + true + true + Normal + 5 + + + + КомплектПечатныхФормКоманднаяПанель + 50 + Left + + + Selection + КомплектПечатныхФормВыбор + + + BeforeAddRow + КомплектПечатныхФормПередНачаломДобавления + + + BeforeDeleteRow + КомплектПечатныхФормПередУдалением + + + КомплектПечатныхФормСтрокаПоиска + 52 + + КомплектПечатныхФормСтрокаПоискаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + КомплектПечатныхФормСтрокаПоискаКонтекстноеМеню + 53 + true + + КомплектПечатныхФорм + + true + + + + КомплектПечатныхФормСостояниеПросмотра + 55 + + КомплектПечатныхФормСостояниеПросмотраРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + КомплектПечатныхФормСостояниеПросмотраКонтекстноеМеню + 56 + true + + ViewStatusAddition + КомплектПечатныхФорм + + true + + + + КомплектПечатныхФормУправлениеПоиском + 58 + + КомплектПечатныхФормУправлениеПоискомРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + КомплектПечатныхФормУправлениеПоискомКонтекстноеМеню + 59 + true + + SearchControlAddition + КомплектПечатныхФорм + + true + + + + КомплектПечатныхФормРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + КомплектПечатныхФормКонтекстноеМеню + 49 + + ГруппаУстановитьСостояниеОригиналаКонтекстноеМеню + 141 + true + true + + true + + + <key>ru</key> + <value>Состояние оригинала</value> + + false + + ГруппаУстановитьСостояниеОригиналаКонтекстноеМенюРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + Popup + + + CommonPicture.УстановитьСостояниеОригиналаПервичногоДокумента + + Auto + Normal + + + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + true + true + true + true + AsFileRef + + КомплектПечатныхФорм.Картинка + + + CommonPicture.КоллекцияПиктограммПечатныеФормыОригиналаПервичногоДокумента + + true + +
    + + ГруппаКнопокНиз + 110 + + СсылкаНаДокумент + 117 + true + true + + true + + + СсылкаНаДокумент + + None + + СсылкаНаДокументРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + СсылкаНаДокументКонтекстноеМеню + 118 + true + + LabelField + Bottom + Enter + true + Left + true + + + Click + СсылкаНаДокументНажатие + + true + true + true + + + + ОК + 155 + true + true + + true + + + ОКРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + UsualButton + Form.Command.ОК + Auto + true + true + true + Right + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Кнопок низ</value> + + true + Bottom + + ГруппаКнопокНизРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Bottom + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + NotificationProcessing + ОбработкаОповещения + + + OnCreateAtServer + ПриСозданииНаСервере + + 50 + LockOwner + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.СостоянияОригиналовПервичныхДокументов + + + true + + + true + +
    true
    + true +
    + + КомплектПечатныхФорм + + <key>ru</key> + <value>Комплект печатных форм</value> + + 2 + + ValueTable + + + true + + + true + + + Представление + + <key>ru</key> + <value>Представление</value> + + 1 + + String + + + + true + + + true + + + + Состояние + + <key>ru</key> + <value>Состояние</value> + + 2 + + CatalogRef.СостоянияОригиналовПервичныхДокументов + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 3 + + Number + + 1 + true + + + + true + + + true + + + + Извне + 4 + + Boolean + + + true + + + true + + + + ОригиналПолученКартинка + + <key>ru</key> + <value>Оригинал получен картинка</value> + + 5 + + Number + + true + + + + true + + + true + + + + ИмяМакета + 6 + + String + + + + true + + + true + + + + + СоответствиеКомандСостояниямОригинала + 3 + + ValueTable + + + true + + + true + + + ИмяКоманды + 1 + + String + + + + true + + + true + + + + ИмяСостояния + 2 + + String + + + + true + + + true + + + + + ПечатнаяФормаВручную + + <key>ru</key> + <value>Печатная форма вручную</value> + + 4 + + String + + + + true + + + true + + + + СсылкаНаДокумент + + <key>ru</key> + <value>Ссылка на документ</value> + + 5 + + String + + + + true + + + true + + + + ФильтрПечатныхФорм + 6 + + String + + + + true + + + true + + + + ИзФормыДокумента + 7 + + Boolean + + + true + + + true + + + + СписокПечатныхФорм + 8 + + ValueList + + + true + + + true + + + + + + + СписокВыбораСостоянийОригинала + 9 + + ValueList + + + true + + + true + + + + + + + ПоказатьВсе + + <key>ru</key> + <value>Показать все</value> + + 5 + + ru + Показать все + + + true + + + + ПоказатьВсе + + + Auto + + КомплектПечатныхФорм + + Auto + + + ПоказатьОтслеживаемые + + <key>ru</key> + <value>Показать отслеживаемые</value> + + 6 + + ru + Показать отслеживаемые + + + true + + + + ПоказатьОтслеживаемые + + + Auto + + КомплектПечатныхФорм + + Auto + + + ДобавитьВручную + + <key>ru</key> + <value>Добавить вручную</value> + + 7 + + ru + Добавить вручную + + + true + + + + ДобавитьВручную + + + Auto + Auto + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + + + + +
    diff --git a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Module.bsl b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Module.bsl new file mode 100644 index 000000000..c23a32b3a --- /dev/null +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Module.bsl @@ -0,0 +1,621 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + СостоянияОригиналов = УчетОригиналовПервичныхДокументов.ИспользуемыеСостояния(); + УчетОригиналовПервичныхДокументов.ВывестиНаФормуКомандыСостоянияОригинала(ЭтотОбъект, КомплектПечатныхФорм, СостоянияОригиналов); + + ЗаполнитьСписокПечатныхФормПоСсылке(); + + Если Параметры.Свойство("Ссылка") Тогда + Запись.Ссылка = Параметры.Ссылка; + ФильтрПечатныхФорм = "Все"; + Элементы.НадписьПредупреждение.Заголовок = НСтр("ru='Состояние оригинала документа будет установлено по печатным формам'"); + ИначеЕсли КомплектПечатныхФорм.Количество()= 0 Тогда + ЗаполнитьВсеПечатныеФормы(); + ФильтрПечатныхФорм = "Все"; + Элементы.НадписьПредупреждение.Заголовок = НСтр("ru='Состояние оригинала документа будет установлено по печатным формам'"); + Иначе + ФильтрПечатныхФорм = "Отслеживаемые"; + КонецЕсли; + + УстановитьСсылкуНаОригинал(); + + Если КомплектПечатныхФорм.Количество()= 0 Тогда + ВосстанавливатьФильтр = Ложь; + Иначе + ВосстанавливатьФильтр = Истина; + КонецЕсли; + + ВосстановитьНастройки(ВосстанавливатьФильтр); + + УстановитьСсылкуНаОригинал(); + + УстановитьФильтрПечатныхФорм(); + + ЭлементОформления = УсловноеОформление.Элементы.Добавить(); + + ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("КомплектПечатныхФорм.Состояние"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + ЭлементОтбора.Использование = Истина; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СеребристоСерый); + ЭлементОформления.Использование = Истина; + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("КомплектПечатныхФормПредставление"); + ПолеОформления.Использование = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + // СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов + Если ИмяСобытия = "ДобавлениеУдалениеСостоянияОригиналаПервичногоДокумента" Тогда + Подключаемый_ОбновитьКомандыСостоянияОригинала(); + ОбновитьОтображениеДанных(); + ИначеЕсли ИмяСобытия = "ИзменениеСостоянияОригиналаПервичногоДокумента" Тогда + КомплектПечатныхФорм.Очистить(); + ПоказатьОтслеживаемыеНаСервере(); + Если КомплектПечатныхФорм.Количество()=0 Тогда + ПоказатьВсеНаСервере(); + КонецЕсли; + КонецЕсли; + // Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СсылкаНаДокументНажатие(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ПоказатьЗначение(,Запись.Ссылка); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормы + +&НаКлиенте +Процедура КомплектПечатныхФормВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Если Поле.Имя = "ОригиналПолученКартинка" Тогда + УстановитьСостояниеОригинала("УстановитьОригиналПолучен"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КомплектПечатныхФормПередУдалением(Элемент, Отказ) + + Отказ = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура КомплектПечатныхФормПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + Отказ = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура КомплектПечатныхФормСостояниеПриИзменении(Элемент) + + КоличествоСдвинуть = 0; + + Для Каждого Строка Из КомплектПечатныхФорм Цикл + Если ЗначениеЗаполнено(Строка.Состояние) Тогда + КоличествоСдвинуть = КоличествоСдвинуть+1; + КонецЕсли; + КонецЦикла; + + ТекущаяСтрока = Элементы.КомплектПечатныхФорм.ТекущиеДанные; + НовыйИндекс = КомплектПечатныхФорм.Индекс(ТекущаяСтрока); + + Если Не НовыйИндекс <= КоличествоСдвинуть Тогда + КоличествоСдвинуть = НовыйИндекс - КоличествоСдвинуть +1; + КомплектПечатныхФорм.Сдвинуть(НовыйИндекс,-КоличествоСдвинуть); + КонецЕсли; + + Если Не ЗначениеЗаполнено(Элементы.КомплектПечатныхФорм.ТекущиеДанные.Состояние) Тогда + Элементы.КомплектПечатныхФорм.ТекущиеДанные.ОригиналПолученКартинка = 0; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КомплектПечатныхФормСостояниеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Если ВыбранноеЗначение = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен") Тогда + Элементы.КомплектПечатныхФорм.ТекущиеДанные.ОригиналПолученКартинка = 1; + Иначе + Элементы.КомплектПечатныхФорм.ТекущиеДанные.ОригиналПолученКартинка = 0; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + ОчиститьНеОтслеживаемые(); + + УстановитьОбщееСостояние(); + + СохранитьНастройки(); + + Если КомплектПечатныхФорм.Количество()<> 0 Тогда + ЗаписатьСостоянияОригиналовПервичныхДокументов(); + Оповестить("ИзменениеСостоянияОригиналаПервичногоДокумента"); + Закрыть(); + УчетОригиналовПервичныхДокументовКлиент.ОповеститьПользователяОбУстановкеСостояний(1, Запись.Ссылка); + ИначеЕсли КомплектПечатныхФорм.Количество() = 0 Тогда + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_УстановитьСостояниеОригинала(Команда) + + Если Команда.Имя = "НастройкаСостояний" Тогда + УчетОригиналовПервичныхДокументовКлиент.ОткрытьФормуНастройкиСостояний(); + Иначе + УстановитьСостояниеОригинала(Команда.Имя); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура Подключаемый_ОбновитьКомандыСостоянияОригинала() + + УчетОригиналовПервичныхДокументов.ОбновитьКомандыСостоянияОригинала(ЭтотОбъект,Элементы.КомплектПечатныхФорм); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСостояниеОригинала(Команда) + + НайденноеСостояние = Элементы.Найти(Команда); + + Если Не НайденноеСостояние = Неопределено Тогда + ИмяСостояния = НайденноеСостояние.Заголовок; + ИначеЕсли Команда = "УстановитьОригиналПолучен" Тогда + ИмяСостояния = "Оригинал получен"; + Иначе + Возврат; + КонецЕсли; + + Для Каждого СтрокаСписка Из Элементы.КомплектПечатныхФорм.ВыделенныеСтроки Цикл + ДанныеСтроки = Элементы.КомплектПечатныхФорм.ДанныеСтроки(СтрокаСписка); + + ДанныеСтроки.Состояние = НайтиСостояниеВСправочнике(ИмяСостояния); + + Если ДанныеСтроки.Состояние = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен") Тогда + ДанныеСтроки.ОригиналПолученКартинка = 1; + Иначе + ДанныеСтроки.ОригиналПолученКартинка = 0; + КонецЕсли; + + ДанныеСтроки.Состояние = НайтиСостояниеВСправочнике(ИмяСостояния); + КонецЦикла; + + Элементы.КомплектПечатныхФорм.Обновить(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьВсе(Команда) + + ПоказатьВсеНаСервере() + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьОтслеживаемые(Команда) + + ПоказатьОтслеживаемыеНаСервере() + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьВручную(Команда) + + Если Не ЗначениеЗаполнено(ПечатнаяФормаВручную) Тогда + Возврат; + КонецЕсли; + + ПервичныйДокумент = СтрЗаменить(ПечатнаяФормаВручную," ",""); + + НайденныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета",ПервичныйДокумент)); + + Если НайденныеСтроки.Количество() > 0 Тогда + ОчиститьСообщения(); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'В списке уже есть такая форма.'")); + Возврат; + КонецЕсли; + + Элементы.ДобавитьСвою.Скрыть(); + КоличествоСдвинуть = 0; + + Для Каждого Строка Из КомплектПечатныхФорм Цикл + Если ЗначениеЗаполнено(Строка.Состояние) Тогда + КоличествоСдвинуть = КоличествоСдвинуть+1; + КонецЕсли; + КонецЦикла; + + Если КоличествоСдвинуть = 0 Тогда + КоличествоСдвинуть = КомплектПечатныхФорм.Количество(); + Иначе + КоличествоСдвинуть = КомплектПечатныхФорм.Количество() - КоличествоСдвинуть; + КонецЕсли; + + НоваяСтрока = КомплектПечатныхФорм.Добавить(); + НоваяСтрока.ИмяМакета = ПервичныйДокумент; + НоваяСтрока.Представление = ПечатнаяФормаВручную; + НоваяСтрока.Состояние = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана"); + НоваяСтрока.Извне = Истина; + НоваяСтрока.Картинка = 2; + НоваяСтрока.ОригиналПолученКартинка = 0; + + ПоследняяСтрока = КомплектПечатныхФорм.Количество()-1; + + КомплектПечатныхФорм.Сдвинуть(ПоследняяСтрока,-КоличествоСдвинуть); + + Элементы.КомплектПечатныхФорм.Обновить(); + Элементы.КомплектПечатныхФорм.ВыделенныеСтроки.Очистить(); + Элементы.КомплектПечатныхФорм.ВыделенныеСтроки.Добавить(НоваяСтрока.ПолучитьИдентификатор()); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ЗаполнениеТаблицыКомплектПечатныхФорм + +&НаСервере +Процедура ЗаполнитьПервоначальныйСписокПечатныхФорм() + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ОбщегоНазначения.ИмяТаблицыПоСсылке(Запись.Ссылка)); + СписокОбъектов = Новый Массив; + СписокОбъектов.Добавить(ОбъектМетаданных); + + КоллекцияПечатныхФорм = УправлениеПечатью.КомандыПечатиФормы("ФормаДокумента", СписокОбъектов); + + ОбъектМетаданных = ОбщегоНазначения.ИмяТаблицыПоСсылке(Запись.Ссылка); + ЗапросТаблицаКоманд = ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма,ОбъектМетаданных, Истина); + ТаблицаКоманд = ЗапросТаблицаКоманд.Выполнить().Выгрузить(); + + Для Каждого ТекСтрока Из КоллекцияПечатныхФорм Цикл + НоваяСтрока = КомплектПечатныхФорм.Добавить(); + НоваяСтрока.ИмяМакета = ТекСтрока.Идентификатор; + НоваяСтрока.Представление = ТекСтрока.Представление; + НоваяСтрока.Картинка = 1; + НоваяСтрока.ОригиналПолученКартинка = 0; + КонецЦикла; + + Если ТаблицаКоманд.Количество() > 0 Тогда + Для Каждого ТекСтрока Из ТаблицаКоманд Цикл + + Если КомплектПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета", ТекСтрока.Идентификатор)) = 0 Тогда + НоваяСтрока = КомплектПечатныхФорм.Добавить(); + НоваяСтрока.ИмяМакета = ТекСтрока.Идентификатор; + НоваяСтрока.Представление = ТекСтрока.Представление; + НоваяСтрока.Картинка = 1; + НоваяСтрока.ОригиналПолученКартинка = 0; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Новый Структура("Представление","Комплект документов на принтер")); + Для Каждого НеНужнаяСтрока Из НенужныеСтроки Цикл + КомплектПечатныхФорм.Удалить(НеНужнаяСтрока); + КонецЦикла; + + + НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Новый Структура("Представление","Комплект документов с настройкой...")); + Для Каждого НеНужнаяСтрока Из НенужныеСтроки Цикл + КомплектПечатныхФорм.Удалить(НеНужнаяСтрока); + КонецЦикла; + + Иначе + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокПечатныхФормПоСсылке() + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | СостоянияОригиналовПервичныхДокументов.ПервичныйДокумент КАК ПервичныйДокумент, + | СостоянияОригиналовПервичныхДокументов.Состояние КАК Состояние, + | СостоянияОригиналовПервичныхДокументов.ФормаИзвне КАК Извне, + | СостоянияОригиналовПервичныхДокументов.ПервичныйДокументПредставление КАК Представление + |ИЗ + | РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов + |ГДЕ + | НЕ СостоянияОригиналовПервичныхДокументов.ОбщееСостояние + | И СостоянияОригиналовПервичныхДокументов.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", Запись.Ссылка); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + НоваяСтрока = КомплектПечатныхФорм.Добавить(); + НоваяСтрока.ИмяМакета = Выборка.ПервичныйДокумент; + НоваяСтрока.Представление = Выборка.Представление; + НоваяСтрока.Состояние = Выборка.Состояние; + НоваяСтрока.Извне = Выборка.Извне; + + Если Выборка.Извне = Истина Тогда + НоваяСтрока.Картинка = 2; + Иначе + НоваяСтрока.Картинка = 1; + КонецЕсли; + + Если Выборка.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен Тогда + НоваяСтрока.ОригиналПолученКартинка = 1; + Иначе + НоваяСтрока.ОригиналПолученКартинка = 0; + КонецЕсли; + + КонецЦикла; + + КомплектПечатныхФорм.Сортировать("Представление"); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьВсеПечатныеФормы() + + ЗаполнитьСписокПечатныхФормПоСсылке(); + ЗаполнитьПервоначальныйСписокПечатныхФорм(); + + УдалитьДубликатыФорм(); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | СостоянияОригиналовПервичныхДокументов.ПервичныйДокумент КАК ПервичныйДокумент, + | СостоянияОригиналовПервичныхДокументов.ПервичныйДокументПредставление КАК Представление + |ИЗ + | РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов + |ГДЕ + | ТИПЗНАЧЕНИЯ(СостоянияОригиналовПервичныхДокументов.Ссылка) = &Тип + | И СостоянияОригиналовПервичныхДокументов.ДатаПоследнегоИзменения МЕЖДУ &ДатаНачала И &ДатаОкончания + | И СостоянияОригиналовПервичныхДокументов.ФормаИзвне + | + |СГРУППИРОВАТЬ ПО + | СостоянияОригиналовПервичныхДокументов.ПервичныйДокумент, + | СостоянияОригиналовПервичныхДокументов.ПервичныйДокументПредставление"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Тип","ТИП ("+ОбщегоНазначения.ИмяТаблицыПоСсылке(Запись.Ссылка)+")"); + Запрос.УстановитьПараметр("ДатаНачала",НачалоМесяца(НачалоДня(ТекущаяДатаСеанса()))); + Запрос.УстановитьПараметр("ДатаОкончания",КонецМесяца(КонецДня(ТекущаяДатаСеанса()))); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + НоваяСтрока = КомплектПечатныхФорм.Добавить(); + НоваяСтрока.ИмяМакета = Выборка.ПервичныйДокумент; + НоваяСтрока.Представление = Выборка.Представление; + НоваяСтрока.Извне = Истина; + НоваяСтрока.Картинка = 2; + НоваяСтрока.ОригиналПолученКартинка = 0; + КонецЦикла; + + УдалитьДубликатыФорм(); + +КонецПроцедуры + +&НаСервере +Процедура ОчиститьНеОтслеживаемые() + + Отбор = Новый Структура("Состояние",ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ПустаяСсылка")); + НайденныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Отбор); + Для Каждого Строка Из НайденныеСтроки Цикл + КомплектПечатныхФорм.Удалить(Строка); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УдалитьДубликатыФорм() + + Для Каждого Строка Из КомплектПечатныхФорм Цикл + Отбор = Новый Структура("ИмяМакета",Строка.ИмяМакета); + НайденныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество()> 1 Тогда + Счетчик = НайденныеСтроки.Количество(); + Пока Счетчик > НайденныеСтроки.Количество()-1 Цикл + КомплектПечатныхФорм.Удалить(НайденныеСтроки[Счетчик-1]); + Если Не Счетчик = 0 Тогда + Счетчик = Счетчик-1; + Иначе + Продолжить; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +&НаСервере +Процедура ПоказатьВсеНаСервере() + + Элементы.ПоказатьВсе.Пометка = Истина; + Элементы.ПоказатьОтслеживаемые.Пометка = Ложь; + ФильтрПечатныхФорм = "Все"; + + ОчиститьНеОтслеживаемые(); + ЗаполнитьВсеПечатныеФормы(); + +КонецПроцедуры + +&НаСервере +Процедура ПоказатьОтслеживаемыеНаСервере() + + Элементы.ПоказатьВсе.Пометка = Ложь; + Элементы.ПоказатьОтслеживаемые.Пометка = Истина; + ФильтрПечатныхФорм = "Отслеживаемые"; + + ОчиститьНеОтслеживаемые(); + ЗаполнитьСписокПечатныхФормПоСсылке(); + УдалитьДубликатыФорм(); +КонецПроцедуры + +&НаСервере +Процедура УстановитьФильтрПечатныхФорм() + + Если ФильтрПечатныхФорм = "Отслеживаемые" Тогда + ПоказатьОтслеживаемыеНаСервере(); + Иначе + ПоказатьВсеНаСервере(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьСсылкуНаОригинал() + + Документ = Запись.Ссылка.ПолучитьОбъект(); + ТипДокумента = Метаданные.НайтиПоПолномуИмени(ОбщегоНазначения.ИмяТаблицыПоСсылке(Запись.Ссылка)); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") Тогда + Значения = Новый Структура("Документ,Номер,Дата",СокрЛП(ТипДокумента), + ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Документ.Номер, Истина, Истина),Формат(Документ.Дата,НСтр("ru='ДЛФ=DD'"))); + СсылкаНаДокумент = НСтр("ru='[Документ] № [Номер] от [Дата]'"); + СсылкаНаДокумент = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(СсылкаНаДокумент,Значения); + Иначе + СсылкаНаДокумент = Запись.Ссылка; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция НайтиСостояниеВСправочнике(ИмяСостояния) + + СостояниеОригинала = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(ИмяСостояния); + + Возврат СостояниеОригинала + +КонецФункции + +&НаКлиенте +Процедура УстановитьОбщееСостояние() + + КоличествоЗаписываемых = 0; + + Для Каждого Строка Из КомплектПечатныхФорм Цикл + Если ЗначениеЗаполнено(Строка.Состояние) Тогда + КоличествоЗаписываемых = КоличествоЗаписываемых + 1; + КонецЕсли; + КонецЦикла; + + Для Каждого Строка Из КомплектПечатныхФорм Цикл + Если ЗначениеЗаполнено(Строка.Состояние) Тогда + Отбор = Новый Структура("Состояние",Строка.Состояние); + НайденныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() = КомплектПечатныхФорм.Количество() Или КоличествоЗаписываемых = 1 Тогда + Запись.Состояние = Строка.Состояние; + Иначе + Запись.Состояние = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе"); + КонецЕсли; + + Прервать; + КонецЕсли; + КонецЦикла + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьСостоянияОригиналовПервичныхДокументов() + + ПроверкаЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьНаборЗаписей(); + ПроверкаЗаписьСостоянияОригинала.Отбор.Ссылка.Установить(Запись.Ссылка); + ПроверкаЗаписьСостоянияОригинала.Прочитать(); + + Если ПроверкаЗаписьСостоянияОригинала.Количество() = 0 Тогда + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка,Запись.Состояние); + КонецЕсли; + + Если КомплектПечатныхФорм.Количество()<> 0 Тогда + Для Каждого ПечатнаяФорма Из КомплектПечатныхФорм Цикл + + Если ЗначениеЗаполнено(ПечатнаяФорма.Состояние) Тогда + ПроверкаЗаписьСостоянияОригинала.Отбор.ПервичныйДокумент.Установить(ПечатнаяФорма.ИмяМакета); + ПроверкаЗаписьСостоянияОригинала.Прочитать(); + Если ПроверкаЗаписьСостоянияОригинала.Количество() > 0 Тогда + + Если ПроверкаЗаписьСостоянияОригинала[0].Состояние <> ПечатнаяФорма.Состояние Тогда + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Ссылка, + ПечатнаяФорма.ИмяМакета,ПечатнаяФорма.Представление,ПечатнаяФорма.Состояние,ПечатнаяФорма.Извне); + КонецЕсли; + + Иначе + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Ссылка, + ПечатнаяФорма.ИмяМакета,ПечатнаяФорма.Представление,ПечатнаяФорма.Состояние,ПечатнаяФорма.Извне); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка,Запись.Состояние); + +КонецПроцедуры + +&НаСервере +Процедура ВосстановитьНастройки(ВосстанавливатьФильтр) + + Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("РегистрСведений.СостоянияОригиналовПервичныхДокументов.Форма.ИзменениеСостоянийОригиналовПервичныхДокументов","ФильтрПечатныхФорм"); + + Если ВосстанавливатьФильтр Тогда + Если ТипЗнч(Настройки) = Тип("Структура") Тогда + ФильтрПечатныхФорм = Настройки.ФильтрПечатныхФорм; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СохранитьНастройки() + + ИменаСохраняемыхРеквизитов = "ФильтрПечатныхФорм"; + + Настройки = Новый Структура(ИменаСохраняемыхРеквизитов); + ЗаполнитьЗначенияСвойств(Настройки, ЭтотОбъект); + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("РегистрСведений.СостоянияОригиналовПервичныхДокументов.Форма.ИзменениеСостоянийОригиналовПервичныхДокументов","ФильтрПечатныхФорм",Настройки); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..c66ef2dab --- /dev/null +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,344 @@ + + + + Ссылка + 1 + true + true + + true + + + СсылкаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 2 + true + + InputField + true + Enter + true + Left + 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 + Normal + + + + СостояниеОригиналаПервичногоДокумента + 10 + true + true + + true + + + Запись.Состояние + + + СостояниеОригиналаПервичногоДокументаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СостояниеОригиналаПервичногоДокументаКонтекстноеМеню + 11 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Ответственный + 13 + true + true + + true + + + ОтветственныйРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ОтветственныйКонтекстноеМеню + 14 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаПоследнегоИзмененияСостояния + 16 + true + true + + true + + + Запись.ДатаПоследнегоИзменения + + + ДатаПоследнегоИзмененияСостоянияРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаПоследнегоИзмененияСостоянияКонтекстноеМеню + 17 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаПризнаки + 22 + + ОбщееСостояние + 7 + true + true + + true + + + Запись.ОбщееСостояние + + Right + + ОбщееСостояниеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ОбщееСостояниеКонтекстноеМеню + 8 + true + + CheckBoxField + true + Enter + true + Left + true + + + + Извне + 19 + true + true + + true + + + Запись.ФормаИзвне + + Right + + ИзвнеРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ИзвнеКонтекстноеМеню + 20 + true + + CheckBoxField + true + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Признаки</value> + + + ГруппаПризнакиРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.СостоянияОригиналовПервичныхДокументов + + + true + + + true + +
    true
    + true +
    + + + + + +
    diff --git a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl new file mode 100644 index 000000000..19438d237 --- /dev/null +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl @@ -0,0 +1,169 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Делает записи состояний оригиналов печатных форм регистр, после печати формы. +// +// Параметры: +// ОбъектыПечати - СписокЗначений - список документов. +// ПечатныеФормы - СписокЗначений - наименование макетов и представление печатных форм. +// +Процедура ЗаписатьСостоянияОригиналовДокументаПослеПечатиФормы(ОбъектыПечати, ПечатныеФормы) Экспорт + + Состояние = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана"); + Если ЗначениеЗаполнено(ОбъектыПечати) Тогда + Если ОбъектыПечати.Количество() > 1 Тогда + Если ПечатныеФормы.Количество() > 1 Тогда + Для Каждого Документ Из ОбъектыПечати Цикл + Если УчетОригиналовПервичныхДокументов.ЭтоОбъектУчета(Документ.Значение) Тогда + // Записываем общее состояние + ЗаписатьОбщееСостояниеОригиналаДокумента(Документ.Значение,Состояние); + Для Каждого Форма Из ПечатныеФормы Цикл //Если документов и форм несколько, записываем для каждого документа, состояние каждой формы + ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ.Значение, Форма.Значение, Форма.Представление, Состояние, Ложь); + КонецЦикла; + КонецЕсли; + КонецЦикла; + Иначе + Для Каждого Документ Из ОбъектыПечати Цикл + Если УчетОригиналовПервичныхДокументов.ЭтоОбъектУчета(Документ.Значение) Тогда + ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ.Значение, ПечатныеФормы[0].Значение,ПечатныеФормы[0].Представление, Состояние, Ложь); + ЗаписатьОбщееСостояниеОригиналаДокумента(Документ.Значение,Состояние); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + Документ = ОбъектыПечати[0].Значение; + Если УчетОригиналовПервичныхДокументов.ЭтоОбъектУчета(Документ) Тогда + Если ПечатныеФормы.Количество() > 1 Тогда + Для Каждого Форма Из ПечатныеФормы Цикл + ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ, Форма.Значение,Форма.Представление, Состояние, Ложь); + КонецЦикла; + Иначе + ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ, ПечатныеФормы[0].Значение,ПечатныеФормы[0].Представление, Состояние, Ложь); + КонецЕсли; + ЗаписатьОбщееСостояниеОригиналаДокумента(Документ,Состояние); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Делает запись состояния оригинала печатной формы в регистр, после печати формы. +// +// Параметры: +// Документ - СсылкаДокумент - ссылка на документ. +// ПечатнаяФорма - Строка - имя макета печатной формы. +// Представление - Строка - наименование печатной формы. +// Состояние - Строка +// - СсылкаСправочник - наименование или ссылка на состояние оригинала печатной формы. +// Извне - Булево - признак, показывающий принадлежит ли форма системе 1С. +// +Процедура ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ, ПечатнаяФорма, Представление, Состояние, Извне) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + + Попытка + + ЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьМенеджерЗаписи(); + ЗаписьСостоянияОригинала.Ссылка = Документ.Ссылка; + ЗаписьСостоянияОригинала.ПервичныйДокумент = ПечатнаяФорма; + ЗаписьСостоянияОригинала.ПервичныйДокументПредставление = Представление; + ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(Состояние); + ЗаписьСостоянияОригинала.АвторИзменения = Пользователи.АвторизованныйПользователь(); + ЗаписьСостоянияОригинала.ОбщееСостояние = Ложь; + ЗаписьСостоянияОригинала.ФормаИзвне = Извне; + ЗаписьСостоянияОригинала.ДатаПоследнегоИзменения = ТекущаяДатаСеанса(); + ЗаписьСостоянияОригинала.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +// Делает запись общего состояния оригинала документа в регистр. +// +// Параметры: +// Документ - СсылкаДокумент - ссылка на документ. +// Состояние - Строка - наименование состояния оригинала. +// +Процедура ЗаписатьОбщееСостояниеОригиналаДокумента(Документ, Состояние) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных(); + Элемент = Блокировка.Добавить("РегистрСведений.СостоянияОригиналовПервичныхДокументов"); + Элемент.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + ЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьМенеджерЗаписи(); + ЗаписьСостоянияОригинала.Ссылка = Документ.Ссылка; + ЗаписьСостоянияОригинала.ПервичныйДокумент = ""; + + ПроверкаЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьНаборЗаписей(); + ПроверкаЗаписьСостоянияОригинала.Отбор.Ссылка.Установить(Документ.Ссылка); + ПроверкаЗаписьСостоянияОригинала.Отбор.ОбщееСостояние.Установить(Ложь); + ПроверкаЗаписьСостоянияОригинала.Прочитать(); + Если ПроверкаЗаписьСостоянияОригинала.Количество() > 1 Тогда + Для Каждого Запись Из ПроверкаЗаписьСостоянияОригинала Цикл + Если Запись.АвторИзменения <> Пользователи.ТекущийПользователь() Тогда + ЗаписьСостоянияОригинала.АвторИзменения = Неопределено; + Иначе + ЗаписьСостоянияОригинала.АвторИзменения = Пользователи.ТекущийПользователь(); + КонецЕсли; + КонецЦикла; + Иначе + ЗаписьСостоянияОригинала.АвторИзменения = Пользователи.ТекущийПользователь(); + КонецЕсли; + + Если ПроверкаЗаписьСостоянияОригинала.Количество() > 0 Тогда + Если УчетОригиналовПервичныхДокументов.СостояниеПечатныхФормОдинаково(Документ,Состояние) Тогда + ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(Состояние); + Иначе + ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе; + КонецЕсли; + Иначе + ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(Состояние); + КонецЕсли; + + + ЗаписьСостоянияОригинала.ОбщееСостояние = Истина; + ЗаписьСостоянияОригинала.ДатаПоследнегоИзменения = ТекущаяДатаСеанса(); + ЗаписьСостоянияОригинала.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли + diff --git a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/RecordSetModule.bsl b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/RecordSetModule.bsl new file mode 100644 index 000000000..dbd764cfb --- /dev/null +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/RecordSetModule.bsl @@ -0,0 +1,27 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 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/InformationRegisters/СостоянияОригиналовПервичныхДокументов/СостоянияОригиналовПервичныхДокументов.mdo b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/СостоянияОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..3d70b7b52 --- /dev/null +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/СостоянияОригиналовПервичныхДокументов.mdo @@ -0,0 +1,236 @@ + + + + + + + + + + + + СостоянияОригиналовПервичныхДокументов + + ru + Состояния оригиналов первичных документов + + InDialog + InformationRegister.СостоянияОригиналовПервичныхДокументов.Form.ФормаЗаписи + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Состояние + + ru + Состояние + + + CatalogRef.СостоянияОригиналовПервичныхДокументов + + + ru + Текущие состояние оригинала (или печатной формы) первичного документа + + + + ShowError + Use + Use + + Index + + + ДатаПоследнегоИзменения + + ru + Дата последнего изменения + + + Date + + + + ru + Дата изменения текущего состояния оригинала + + + + Use + Use + + + + АвторИзменения + + ru + Автор изменения + + + CatalogRef.Пользователи + + + ru + Ответственный за смену текущего состояния оригинала + + + + Index + Use + Use + + + + ПервичныйДокументПредставление + + ru + Первичный документ представление + + + String + + 150 + + + + + Use + Use + + + + Ссылка + + ru + Ссылка + + + en + Reference + + + DefinedType.ОбъектСУчетомОригиналовПервичныхДокументов + + + + true + Use + Use + true + + true + true + + + ПервичныйДокумент + + ru + Первичный документ + + + String + + 100 + + + + ru + Наименование печатной формы документа, которая отслеживается + + + + Use + Use + + true + + + ОбщееСостояние + + ru + Общее состояние + + + Boolean + + + ru + Признак, показывающий является ли текущее состоянии общим или нет + + + + Use + Use + + true + + + ФормаИзвне + + ru + Форма извне + + + Boolean + + + ru + Признак, показывающий является ли текущая печатная форма системной или добавлена вручную + + + + Use + Use + + true + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + + ИзменениеСостоянийОригиналовПервичныхДокументов + + ru + Изменение состояний оригиналов первичных документов + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl index 38585bc06..d960fbc65 100644 --- a/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl @@ -13,7 +13,8 @@ // Удаляет либо одну, либо все записи из регистра. // // Параметры: -// Папка - Справочник.ПапкиЭлектронныхПисем, Неопределено - папка, для которой удаляется запись. +// Папка - Справочник.ПапкиЭлектронныхПисем +// - Неопределено - папка, для которой удаляется запись. // Если указано значение Неопределено, то регистр будет очищен полностью. // Процедура УдалитьЗаписьИзРегистра(Папка = Неопределено) Экспорт diff --git a/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl index d7c059f99..49944c5ba 100644 --- a/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl @@ -13,9 +13,11 @@ // Удаляет либо одну, либо все записи из регистра. // // Параметры: -// Предмет - ДокументСсылка, СправочникСсылка, Неопределено - предмет, для которого удаляется запись. -// Если указано значение Неопределено, то регистр будет -// очищен полностью. +// Предмет - ДокументСсылка +// - СправочникСсылка +// - Неопределено - предмет, для которого удаляется запись. +// Если указано значение Неопределено, то регистр будет +// очищен полностью. // Процедура УдалитьЗаписьИзРегистра(Предмет = Неопределено) Экспорт @@ -33,7 +35,8 @@ // Выполняет запись в регистр сведений для указанного предмета. // // Параметры: -// Предмет - ДокументСсылка, СправочникСсылка - предмет, для которого выполняется запись. +// Предмет - ДокументСсылка +// - СправочникСсылка - предмет, для которого выполняется запись. // КоличествоНеРассмотрено - Число - количество не рассмотренных взаимодействий для предмета. // ДатаПоследнегоВзаимодействия - ДатаВремя - дата последнего взаимодействия по предмету. // Активен - Булево - признак активности предмета. diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl index 89348547a..b2768326d 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl @@ -51,11 +51,11 @@ // // Параметры: // ГруппыДоступа - СправочникСсылка.ГруппыДоступа. -// - Массив значений указанного выше типа. +// - массив значений указанного выше типа. // - Неопределено - без отбора. // // Таблицы - СправочникСсылка.ИдентификаторыОбъектовМетаданных. -// - Массив значений указанного выше типа. +// - массив значений указанного выше типа. // - Неопределено - без отбора. // // ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, diff --git a/SSL/src/InformationRegisters/УдаляемыеОбъекты/RecordSetModule.bsl b/SSL/src/InformationRegisters/УдаляемыеОбъекты/RecordSetModule.bsl new file mode 100644 index 000000000..4168e9e6a --- /dev/null +++ b/SSL/src/InformationRegisters/УдаляемыеОбъекты/RecordSetModule.bsl @@ -0,0 +1,30 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, Замещение) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + // Не поддерживаются ссылки на объекты расширений + Для Сч = -(Количество() - 1) По 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..0fb59ec45 --- /dev/null +++ b/SSL/src/InformationRegisters/УдаляемыеОбъекты/УдаляемыеОбъекты.mdo @@ -0,0 +1,100 @@ + + + + + + + + + + + + УдаляемыеОбъекты + + ru + Удаляемые объекты + + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ВремяБлокировки + + ru + Время блокировки + + + Date + + + + + Use + Use + + + + Объект + + ru + Объект + + + AnyRef + + + + Use + Use + + true + true + + + ИдентификаторСеанса + + ru + Идентификатор сеанса + + + UUID + + + + Index + Use + + true + + diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl index bf9363186..4a52e0a98 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -53,7 +53,7 @@ // по переданному периоду. // // Параметры: -// ПараметрыОтчета - Структура - со свойствами: +// ПараметрыОтчета - Структура: // * ДатаНачала - Дата - начало периода, по которому будет собираться информация. // * ДатаОкончания - Дата - окончание периода, по которому будет собираться информация. // * Пользователь - Строка - имя пользователя, по которому проводить анализ. @@ -198,6 +198,16 @@ // Расчет данных, необходимых для составления отчета. Для Каждого СтрокаДанныхЖурналаРегистрации Из ДанныеЖурналаРегистрации Цикл + СозданоДокументов = 0; + СозданоСправочников = 0; + ИзмененоДокументов = 0; + ИзмененоСправочников = 0; + СозданоБизнесПроцессов = 0; + ИзмененоБизнесПроцессов = 0; + ИзмененоЗадач = 0; + СозданоЗадач = 0; + ВидОбъекта = Неопределено; + СтрокаДанныхЖурналаРегистрации.Дата = СтрокаДанныхЖурналаРегистрации.Дата - СмещениеВремениСервера; Если СтрокаДанныхЖурналаРегистрации.ИмяПользователя = "" Тогда Продолжить; @@ -396,17 +406,7 @@ КонецЕсли; - СозданоДокументов = 0; - СозданоСправочников = 0; - ИзмененоДокументов = 0; - ИзмененоСправочников = 0; - СозданоБизнесПроцессов = 0; - ИзмененоБизнесПроцессов = 0; - ИзмененоЗадач = 0; - СозданоЗадач = 0; - ВидОбъекта = Неопределено; - - КонецЦикла; + КонецЦикла; Если СтрокаИсходныхДанных <> Неопределено Тогда СтрокаИсходныхДанных.ЧасовРаботы = ЧасовРаботы; @@ -656,7 +656,7 @@ // Функция формирует отчет по работе регламентных заданий. // // Параметры: -// ПараметрыЗаполнения - Структура - набор параметров, необходимых для построения отчета, где +// ПараметрыЗаполнения - Структура - набор параметров, необходимых для построения отчета, где: // * ДатаНачала - Дата - начало периода, по которому будет собираться информация. // * ДатаОкончания - Дата - окончание периода, по которому будет собираться информация. // РазмерОдновременноСессий - Число - минимальное количество одновременно работавших регламентных заданий для @@ -1456,18 +1456,19 @@ КонецФункции // Параметры: -// Макет - ТабличныйДокумент - -// ИмяОбласти - Строка - +// Макет - ТабличныйДокумент +// ИмяОбласти - Строка // // Возвращаемое значение: -// ТабличныйДокумент - где: -// * Параметры - ПараметрыМакетаТабличногоДокумента - где: -// ** ДатаНачала - Дата - -// ** ДатаОкончания - Дата - -// ** РежимОтображенияИнтервалов - Строка - -// ** СписокРегламентныхЗаданий - Строка - -// ** РасшифровкаЗадания - Массив из Строка, Дата - -// ** РасшифровкаИнтервала - Массив из Строка - +// ТабличныйДокумент: +// * Параметры - ПараметрыМакетаТабличногоДокумента: +// ** ДатаНачала - Дата +// ** ДатаОкончания - Дата +// ** РежимОтображенияИнтервалов - Строка +// ** СписокРегламентныхЗаданий - Строка +// ** РасшифровкаЗадания - Массив из Строка +// - Дата +// ** РасшифровкаИнтервала - Массив из Строка // Функция ОписаниеОбластиМакета(Макет, ИмяОбласти) diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl index ed99b4178..914a370ed 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl @@ -17,8 +17,10 @@ // Задать настройки формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, Неопределено - -// КлючВарианта - Строка, Неопределено - +// Форма - ФормаКлиентскогоПриложения +// - Неопределено +// КлючВарианта - Строка +// - Неопределено // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт @@ -31,9 +33,11 @@ // См. "Расширение управляемой формы для отчета.ПриЗагрузкеВариантаНаСервере" в синтакс-помощнике. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - Форма отчета, где: -// * Отчет - ДанныеФормыСтруктура, ОтчетОбъект - -// НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета - форма отчета, где: +// * Отчет - ДанныеФормыСтруктура +// - ОтчетОбъект +// НовыеНастройкиКД - НастройкиКомпоновкиДанных - настройки для загрузки в компоновщик настроек. // Процедура ПриЗагрузкеВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт Если ЖурналРегистрации.СмещениеВремениСервера() = 0 Тогда @@ -45,8 +49,10 @@ КонецПроцедуры // Параметры: -// Форма - ФормаКлиентскогоПриложения, РасширениеУправляемойФормыДляОтчета - где: -// * Отчет - ДанныеФормыСтруктура, ОтчетОбъект - +// Форма - ФормаКлиентскогоПриложения +// - РасширениеУправляемойФормыДляОтчета: +// * Отчет - ДанныеФормыСтруктура +// - ОтчетОбъект // СвойстваНастройки - см. ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора.СвойстваНастройки // Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт @@ -299,9 +305,9 @@ КонецПроцедуры // Возвращаемое значение: -// Массив из Структура - где: -// * УИД - УникальныйИдентификатор - -// * Наименование - Строка - +// Массив из Структура: +// * УИД - УникальныйИдентификатор +// * Наименование - Строка // Функция СписокВсехРегламентныхЗаданий() УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl index b9956593e..017bf2f57 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl @@ -347,7 +347,8 @@ ПредопределенныеОтветы.Загрузить(РеквизитыВопросШаблона.ПредопределенныеОтветы.Выгрузить()); ПолучитьФормулировкиЭлементарныхВопросов(ФормулировкиЭлементарныхВопросов); - Заголовок = НСтр("ru = 'Ответы на вопрос №'") + " " + ПолныйКод + " " + НСтр("ru = 'опроса'") + " " + НаименованиеОпроса + " " + НСтр("ru = 'от'") + " " + Формат(ДатаОпроса,"ДЛФ=D"); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ответы на вопрос № %1 опроса %2 от %3'"), ПолныйКод, НаименованиеОпроса, Формат(ДатаОпроса,"ДЛФ=D")); Возврат Ложь; diff --git a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl index a5b9f9f9f..e47010c4f 100644 --- a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl @@ -14,7 +14,7 @@ // // Параметры: // ТаблицаОтчета - ТабличныйДокумент - документ, в который выводятся данные. -// Опрос - ДокументСсылка.НазначениеОпросов - Опрос, по которому формируется отчет. +// Опрос - ДокументСсылка.НазначениеОпросов - опрос, по которому формируется отчет. // ВидОтчета - Строка - может принимать значения АнализОтветов и АнализОтветивших. // Процедура СформироватьОтчет(ТаблицаОтчета,Опрос,ВидОтчета) Экспорт @@ -52,7 +52,7 @@ Макет = ПолучитьМакет("МакетОтветы"); - Область = Макет.ПолучитьОбласть("Заголовок"); + Область = Макет.ПолучитьОбласть("Заголовок");// ТабличныйДокумент Область.Параметры.Заголовок = ШаблонАнкеты.Заголовок; Область.Параметры.Опрос = ПредставлениеОпросаДляЗаголовка(РеквизитыОпрос); ТаблицаОтчета.Вывести(Область,1); @@ -118,7 +118,8 @@ // // Параметры: // ТаблицаОтчета - ТабличныйДокумент - в него осуществляется вывод информации. -// СтрокаДерева - СтрокаДереваЗначений - текущая строка с данными. +// СтрокаДерева - СтрокаДереваЗначений - текущая строка с данными: +// * Наименование - Строка // Макет - Макет - макет, используемый для вывода информации. // ПолныйКод - Строка - полный код строки, выводимой в отчет. // @@ -135,7 +136,8 @@ // // Параметры: // ТаблицаОтчета - ТабличныйДокумент - в него осуществляется вывод информации. -// СтрокаДерева - СтрокаДереваЗначений - текущая строка с данными. +// СтрокаДерева - СтрокаДереваЗначений - текущая строка с данными: +// * Наименование - Строка // Макет - Макет - макет, используемый для вывода информации. // Полный код - Строка - полный код строки, выводимой в отчет. // @@ -543,7 +545,7 @@ // Выполняет запрос по шаблону анкеты и данным регистра ответов. // // Параметры: -// Опрос - ДокументСсылка.НазначениеОпросов - Опрос, по которому строится запрос. +// Опрос - ДокументСсылка.НазначениеОпросов - опрос, по которому строится запрос. // ШаблонАнкеты - СправочникСсылка.ШаблоныАнкет, по которому проводился опрос. // // Возвращаемое значение: @@ -947,7 +949,7 @@ Макет = ПолучитьМакет("МакетОтветившие"); - Область = Макет.ПолучитьОбласть("Заголовок"); + Область = Макет.ПолучитьОбласть("Заголовок");// ТабличныйДокумент Область.Параметры.Заголовок = РеквизитыОпрос.ШаблонАнкеты.Заголовок; Область.Параметры.Опрос = ПредставлениеОпросаДляЗаголовка(РеквизитыОпрос); ТаблицаОтчета.Вывести(Область,1); diff --git a/SSL/src/Reports/АнализПравДоступа/ManagerModule.bsl b/SSL/src/Reports/АнализПравДоступа/ManagerModule.bsl new file mode 100644 index 000000000..80278e63f --- /dev/null +++ b/SSL/src/Reports/АнализПравДоступа/ManagerModule.bsl @@ -0,0 +1,148 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов. +Процедура ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка) Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + Возврат; + КонецЕсли; + + Если Не ПравоДоступа("Просмотр", Метаданные.Отчеты["АнализПравДоступа"]) Тогда + Возврат; + КонецЕсли; + + Команда = КомандыОтчетов.Добавить(); + Команда.Представление = НСтр("ru = 'Права пользователей'"); + Команда.МножественныйВыбор = Истина; + Команда.Менеджер= "Отчет.АнализПравДоступа"; + + Если НастройкиФормы.ИмяФормы = "Справочник.Пользователи.Форма.ФормаСписка" Тогда + Команда.Представление = НСтр("ru = 'Права пользователя'"); + Команда.КлючВарианта = "ПраваПользователейНаТаблицы"; + ИначеЕсли НастройкиФормы.ИмяФормы = "Справочник.Пользователи.Форма.ФормаЭлемента" Тогда + Команда.Представление = НСтр("ru = 'Права пользователя'"); + Команда.КлючВарианта = "ПраваПользователяНаТаблицы"; + Иначе + Команда.КлючВарианта = "ПраваПользователейНаТаблицу"; + Команда.ТолькоВоВсехДействиях = Истина; + Команда.Важность = "СмТакже"; + КонецЕсли; + +КонецПроцедуры + +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + Иначе + Возврат; + КонецЕсли; + + МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Ложь); + НастройкиОтчета.ОпределитьНастройкиФормы = Истина; + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "АнализПравДоступа"); + НастройкиВарианта.Описание = НСтр("ru = 'Показывает текущие настройки прав доступа пользователей к таблицам информационной базы.'"); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваПользователейНаТаблицы"); + НастройкиВарианта.Включен = Ложь; + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваПользователяНаТаблицы"); + НастройкиВарианта.Включен = Ложь; + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваПользователейНаТаблицу"); + НастройкиВарианта.Включен = Ложь; + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваПользователяНаТаблицу"); + НастройкиВарианта.Включен = Ложь; + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваПользователяНаТаблицыОтчета"); + НастройкиВарианта.Включен = Ложь; + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваПользователейНаТаблицыОтчета"); + НастройкиВарианта.Включен = Ложь; + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваПользователяНаТаблицыОтчетов"); + НастройкиВарианта.Включен = Ложь; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Параметры: +// АдресДанныхРасшифровки - Строка - адрес временного хранилища данных расшифровки отчета. +// Расшифровка - ИдентификаторРасшифровкиКомпоновкиДанных - элемент расшифровки. +// +// Возвращаемое значение: +// Структура: +// * ИмяПоляРасшифровки - Строка +// * СписокПолей - Соответствие: +// ** Ключ - Строка +// ** Значение - Произвольный +// +Функция ПараметрыРасшифровки(АдресДанныхРасшифровки, Расшифровка) Экспорт + + ДанныеРасшифровки = ПолучитьИзВременногоХранилища(АдресДанныхРасшифровки); + ЭлементРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка]; + + СписокПолей = Новый Соответствие; + ЗаполнитьСписокПолей(СписокПолей, ЭлементРасшифровки); + + ИмяПоляРасшифровки = ""; + Для Каждого ЗначениеПоля Из ЭлементРасшифровки.ПолучитьПоля() Цикл + ИмяПоляРасшифровки = ЗначениеПоля.Поле; + Прервать; + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("ИмяПоляРасшифровки", ИмяПоляРасшифровки); + Результат.Вставить("СписокПолей", СписокПолей); + + Возврат Результат; + +КонецФункции + +// Параметры: +// СписокПолей - Соответствие +// ЭлементРасшифровки - ЭлементРасшифровкиКомпоновкиДанныхПоля +// - ЭлементРасшифровкиКомпоновкиДанныхГруппировка +// +Процедура ЗаполнитьСписокПолей(СписокПолей, ЭлементРасшифровки) + + Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда + Для Каждого ЗначениеПоля Из ЭлементРасшифровки.ПолучитьПоля() Цикл + Если СписокПолей[ЗначениеПоля.Поле] = Неопределено Тогда + СписокПолей.Вставить(ЗначениеПоля.Поле, ЗначениеПоля.Значение); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Для Каждого Родитель Из ЭлементРасшифровки.ПолучитьРодителей() Цикл + ЗаполнитьСписокПолей(СписокПолей, Родитель); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли + + diff --git a/SSL/src/Reports/АнализПравДоступа/ObjectModule.bsl b/SSL/src/Reports/АнализПравДоступа/ObjectModule.bsl new file mode 100644 index 000000000..0dcf291e5 --- /dev/null +++ b/SSL/src/Reports/АнализПравДоступа/ObjectModule.bsl @@ -0,0 +1,785 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// Задать настройки формы отчета. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// - Неопределено +// КлючВарианта - Строка +// - Неопределено +// Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию +// +Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт + + Настройки.ФормироватьСразу = Истина; + Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина; + Настройки.События.ПриСозданииНаСервере = Истина; + Настройки.События.ПриОпределенииИспользуемыхТаблиц = Истина; + +КонецПроцедуры + +// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// См. также: ФормаКлиентскогоПриложения.ПриСозданииНаСервере в синтакс-помощнике +// и ОтчетыПереопределяемый.ПриСозданииНаСервере. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма отчета. +// Отказ - Булево - передается из параметров обработчика "как есть". +// СтандартнаяОбработка - Булево - передается из параметров обработчика "как есть". +// +Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт + + Если ЗначениеЗаполнено(Форма.НастройкиОтчета.ВариантСсылка) Тогда + Форма.НастройкиОтчета.Наименование = Форма.НастройкиОтчета.ВариантСсылка; + КонецЕсли; + + Если Форма.КонтекстВарианта = Метаданные.Справочники.Пользователи.ПолноеИмя() Тогда + Если Форма.Параметры.ПараметрКоманды.Количество() > 1 Тогда + Форма.КлючТекущегоВарианта = "ПраваПользователейНаТаблицы"; + Форма.Параметры.КлючВарианта = "ПраваПользователейНаТаблицы"; + Иначе + Форма.КлючТекущегоВарианта = "ПраваПользователяНаТаблицы"; + Форма.Параметры.КлючВарианта = "ПраваПользователяНаТаблицы"; + КонецЕсли; + Форма.ВариантыКонтекста.Очистить(); + Форма.ВариантыКонтекста.Добавить(Форма.КлючТекущегоВарианта); + КонецЕсли; + + Если УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда + Форма.НастройкиОтчета.СхемаМодифицирована = Истина; + Схема = ПолучитьИзВременногоХранилища(Форма.НастройкиОтчета.АдресСхемы); + Поле = Схема.НаборыДанных.ПраваПользователей.Поля.Найти("ГруппаДоступа"); + Поле.Заголовок = НСтр("ru = 'Профиль пользователя'"); + Поле.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.ПрофилиГруппДоступа"); + Форма.НастройкиОтчета.АдресСхемы = ПоместитьВоВременноеХранилище(Схема, Форма.УникальныйИдентификатор); + КонецЕсли; + +КонецПроцедуры + +// Вызывается перед загрузкой новых настроек. Используется для изменения схемы компоновки. +// Например, если схема отчета зависит от ключа варианта или параметров отчета. +// Чтобы изменения схемы вступили в силу следует вызывать метод ОтчетыСервер.ПодключитьСхему(). +// +// Параметры: +// Контекст - Произвольный - +// Параметры контекста, в котором используется отчет. +// Используется для передачи в параметрах метода ОтчетыСервер.ПодключитьСхему(). +// КлючСхемы - Строка - +// Идентификатор текущей схемы компоновщика настроек. +// По умолчанию не заполнен (это означает что компоновщик инициализирован на основании основной схемы). +// Используется для оптимизации, чтобы переинициализировать компоновщик как можно реже). +// Может не использоваться если переинициализация выполняется безусловно. +// КлючВарианта - Строка +// - Неопределено - +// Имя предопределенного или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов для варианта расшифровки или без контекста. +// НовыеНастройкиКД - НастройкиКомпоновкиДанных +// - Неопределено - +// Настройки варианта отчета, которые будут загружены в компоновщик настроек после его инициализации. +// Неопределено когда настройки варианта не надо загружать (уже загружены ранее). +// НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных +// - Неопределено - +// Пользовательские настройки, которые будут загружены в компоновщик настроек после его инициализации. +// Неопределено когда пользовательские настройки не надо загружать (уже загружены ранее). +// +// Пример: +// // Компоновщик отчета инициализируется на основании схемы из общих макетов: +// Если КлючСхемы <> "1" Тогда +// КлючСхемы = "1"; +// СхемаКД = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки"); +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// КонецЕсли; +// +// // Схема зависит от значения параметра, выведенного в пользовательские настройки отчета: +// Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда +// ПолноеИмяОбъектаМетаданных = ""; +// Для Каждого ЭлементКД Из НовыеПользовательскиеНастройкиКД.Элементы Цикл +// Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда +// ИмяПараметра = Строка(ЭлементКД.Параметр); +// Если ИмяПараметра = "ОбъектМетаданных" Тогда +// ПолноеИмяОбъектаМетаданных = ЭлементКД.Значение; +// КонецЕсли; +// КонецЕсли; +// КонецЦикла; +// Если КлючСхемы <> ПолноеИмяОбъектаМетаданных Тогда +// КлючСхемы = ПолноеИмяОбъектаМетаданных; +// СхемаКД = Новый СхемаКомпоновкиДанных; +// // Наполнение схемы... +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// КонецЕсли; +// КонецЕсли; +// +Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт + + Если ТипЗнч(Контекст) = Тип("ФормаКлиентскогоПриложения") И НовыеНастройкиКД <> Неопределено Тогда + НовыеНастройкиКД.ДополнительныеСвойства.Вставить("АдресКартинкиПросмотр", ПоместитьВоВременноеХранилище(Неопределено, Контекст.УникальныйИдентификатор)); + НовыеНастройкиКД.ДополнительныеСвойства.Вставить("АдресКартинкиРедактирование", ПоместитьВоВременноеХранилище(Неопределено, Контекст.УникальныйИдентификатор)); + НовыеНастройкиКД.ДополнительныеСвойства.Вставить("АдресКартинкиСоздание", ПоместитьВоВременноеХранилище(Неопределено, Контекст.УникальныйИдентификатор)); + КонецЕсли; + + Если КлючСхемы = "1" Тогда + Возврат; + КонецЕсли; + + КлючСхемы = "1"; + + Если ТипЗнч(Контекст) = Тип("ФормаКлиентскогоПриложения") И НовыеНастройкиКД <> Неопределено Тогда + + РеквизитыФормы = Новый Структура("КонтекстВарианта"); + ЗаполнитьЗначенияСвойств(РеквизитыФормы, Контекст); + + Если ЗначениеЗаполнено(РеквизитыФормы.КонтекстВарианта) Тогда + Если КлючВарианта = "ПраваПользователейНаТаблицу" Тогда + ОбъектМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Контекст.КонтекстВарианта, Ложь); + Если ЗначениеЗаполнено(ОбъектМетаданных) Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(НовыеНастройкиКД.Отбор, "ОбъектМетаданных", ОбъектМетаданных, + ВидСравненияКомпоновкиДанных.Равно, , Истина); + КонецЕсли; + ИначеЕсли КлючВарианта = "ПраваПользователейНаТаблицы" Тогда + СписокПользователей = Новый СписокЗначений; + СписокПользователей.ЗагрузитьЗначения(Контекст.Параметры.ПараметрКоманды); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(НовыеНастройкиКД.Отбор, "Пользователь", СписокПользователей, + ВидСравненияКомпоновкиДанных.ВСписке, , Истина); + ИначеЕсли КлючВарианта = "ПраваПользователяНаТаблицы" Тогда + Если Контекст.Параметры.Свойство("ПараметрКоманды") Тогда + СписокПользователей = Новый СписокЗначений; + СписокПользователей.ЗагрузитьЗначения(Контекст.Параметры.ПараметрКоманды); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(НовыеНастройкиКД.Отбор, "Пользователь", СписокПользователей, + ВидСравненияКомпоновкиДанных.ВСписке, , Истина); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Список регистров и других объектов метаданных, по которым формируется отчет. +// Используется для проверки что отчет может содержать не обновленные данные. +// +// Параметры: +// КлючВарианта - Строка +// - Неопределено - +// Имя предопределенного или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов для варианта расшифровки или без контекста. +// ИспользуемыеТаблицы - Массив - +// Полные имена объектов метаданных (регистров, документов и других таблиц), +// данные которых выводятся в отчете. +// +// Пример: +// ИспользуемыеТаблицы.Добавить(Метаданные.Документы._ДемоЗаказПокупателя.ПолноеИмя()); +// +Процедура ПриОпределенииИспользуемыхТаблиц(КлючВарианта, ИспользуемыеТаблицы) Экспорт + + ИспользуемыеТаблицы.Добавить(Метаданные.РегистрыСведений.ПраваРолей.ПолноеИмя()); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + НастройкиКомпоновщика = КомпоновщикНастроек.ПолучитьНастройки(); + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновщика, ДанныеРасшифровки); + + ВнешниеНаборыДанных = Новый Структура; + ВнешниеНаборыДанных.Вставить("ПраваПользователей", ПраваПользователей()); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных , ДанныеРасшифровки); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВывода.УстановитьДокумент(ДокументРезультат); + + ПроцессорВывода.Вывести(ПроцессорКомпоновки); + + ГруппаДоступаЗаголовок = НСтр("ru = 'Группа доступа'"); + Если УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда + ГруппаДоступаЗаголовок = НСтр("ru = 'Профиль пользователя'"); + КонецЕсли; + + Для НомерСтроки = 1 По ДокументРезультат.ВысотаТаблицы Цикл + Для НомерКолонки = 1 По ДокументРезультат.ШиринаТаблицы Цикл + Область = ДокументРезультат.Область(НомерСтроки, НомерКолонки); + Если Область.Текст = "&ГруппаДоступаЗаголовок" Тогда + Область.Текст = ГруппаДоступаЗаголовок; + КонецЕсли; + + Если ТипЗнч(Область.Расшифровка) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + ЗначенияПолей = ДанныеРасшифровки.Элементы[Область.Расшифровка].ПолучитьПоля(); + + Если ЗначенияПолей.Найти("Право") <> Неопределено Тогда + Если Область.Текст = "1" Тогда + Область.Картинка = БиблиотекаКартинок.Просмотр; + Область.Текст = ""; + ИначеЕсли Область.Текст = "2" Тогда + Область.Картинка = БиблиотекаКартинок.Редактирование; + Область.Текст = ""; + ИначеЕсли Область.Текст = "3" Тогда + Область.Картинка = БиблиотекаКартинок.Создание; + Область.Текст = ""; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ТаблицыОтчетов() + + Результат = ПустаяКоллекцияТаблицОтчетов(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + Иначе + Возврат Результат; + КонецЕсли; + + ТаблицыОтчетов = Новый ТаблицаЗначений; + ТаблицыОтчетов.Колонки.Добавить("Отчет"); + ТаблицыОтчетов.Колонки.Добавить("ОбъектМетаданных"); + + ВладельцыТаблиц = Новый Соответствие; + + Для Каждого ОбъектМетаданных Из Метаданные.Отчеты Цикл + ИспользуемыеТаблицы = МодульВариантыОтчетов.ИспользуемыеТаблицыОтчета(ОбъектМетаданных); + + Для Каждого ИмяТаблицы Из ИспользуемыеТаблицы Цикл + ИспользуемаяТаблица = ВладельцыТаблиц[ИмяТаблицы]; + Если ИспользуемаяТаблица = Неопределено Тогда + ВладелецТаблицы = ИмяТаблицы; + ЧастиСтроки = СтрРазделить(ВладелецТаблицы, ".", Истина); + Если ЧастиСтроки.Количество() = 1 Тогда + Продолжить; + КонецЕсли; + Если ЧастиСтроки.Количество() > 2 Тогда + ВладелецТаблицы = ЧастиСтроки[0] + "." + ЧастиСтроки[1]; + КонецЕсли; + ВладельцыТаблиц.Вставить(ИмяТаблицы, ВладелецТаблицы); + ИспользуемаяТаблица = ВладелецТаблицы; + КонецЕсли; + + СтрокаТаблицы = ТаблицыОтчетов.Добавить(); + СтрокаТаблицы.Отчет = ОбъектМетаданных.ПолноеИмя(); + СтрокаТаблицы.ОбъектМетаданных = ИспользуемаяТаблица; + КонецЦикла; + КонецЦикла; + + ТаблицыОтчетов.Свернуть("Отчет, ОбъектМетаданных"); + + ИменаОбъектовМетаданных = ТаблицыОтчетов.ВыгрузитьКолонку("ОбъектМетаданных"); + Для Каждого ОбъектМетаданных Из Метаданные.Отчеты Цикл + ИменаОбъектовМетаданных.Добавить(ОбъектМетаданных.ПолноеИмя()); + КонецЦикла; + + ИдентификаторыОбъектовМетаданных = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ИменаОбъектовМетаданных, Ложь); + + Для Каждого СтрокаТаблицы Из ТаблицыОтчетов Цикл + ИмяТаблицы = СтрокаТаблицы.ОбъектМетаданных; + ИспользуемаяТаблица = ИдентификаторыОбъектовМетаданных[ИмяТаблицы]; + СтрокаТаблицы.ОбъектМетаданных = ИспользуемаяТаблица; + СтрокаТаблицы.Отчет = ИдентификаторыОбъектовМетаданных[СтрокаТаблицы.Отчет]; + КонецЦикла; + + Для Каждого СтрокаТаблицы Из ТаблицыОтчетов Цикл + ЗаполнитьЗначенияСвойств(Результат.Добавить(), СтрокаТаблицы); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПустаяКоллекцияТаблицОтчетов() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Отчет", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных,СправочникСсылка.ИдентификаторыОбъектовРасширений")); + Результат.Колонки.Добавить("ОбъектМетаданных", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных,СправочникСсылка.ИдентификаторыОбъектовРасширений")); + + Возврат Результат; + +КонецФункции + +Функция Отчеты() + + Результат = Новый СписокЗначений; + + ИменаОтчетов = Новый Массив; + Для Каждого ОбъектМетаданных Из Метаданные.Отчеты Цикл + ИменаОтчетов.Добавить(ОбъектМетаданных.ПолноеИмя()); + КонецЦикла; + + ИдентификаторыОбъектовМетаданных = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ИменаОтчетов, Ложь); + + Для Каждого Отчет Из ИменаОтчетов Цикл + Результат.Добавить(ИдентификаторыОбъектовМетаданных[Отчет]); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПраваОтчетов() + + Результат = ПустаяКоллекцияПравОтчетов(); + + ИменаОбъектовМетаданных = Новый Массив; + Для Каждого ИмяКоллекции Из СтрРазделить("Отчеты,Роли", ",", Ложь) Цикл + Для Каждого ОбъектМетаданных Из Метаданные[ИмяКоллекции] Цикл + ИменаОбъектовМетаданных.Добавить(ОбъектМетаданных.ПолноеИмя()); + КонецЦикла; + КонецЦикла; + + ИдентификаторыОбъектовМетаданных = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ИменаОбъектовМетаданных, Ложь); + + Для Каждого Отчет Из Метаданные.Отчеты Цикл + Для Каждого Роль Из Метаданные.Роли Цикл + СтрокаТаблицы = Результат.Добавить(); + СтрокаТаблицы.Отчет= ИдентификаторыОбъектовМетаданных[Отчет.ПолноеИмя()]; + СтрокаТаблицы.Роль = ИдентификаторыОбъектовМетаданных[Роль.ПолноеИмя()]; + СтрокаТаблицы.Просмотр = ПравоДоступа("Просмотр", Отчет, Роль); + КонецЦикла; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПустаяКоллекцияПравОтчетов() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Отчет", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных,СправочникСсылка.ИдентификаторыОбъектовРасширений")); + Результат.Колонки.Добавить("Роль", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных,СправочникСсылка.ИдентификаторыОбъектовРасширений")); + Результат.Колонки.Добавить("Просмотр", Новый ОписаниеТипов("Булево")); + + Возврат Результат; + +КонецФункции + +Функция ПраваПользователей() + + ТекстЗапроса = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка, + | НЕ Пользователи.Недействителен + | И НЕ Пользователи.ПометкаУдаления КАК ВходВПрограммуРазрешен + |ПОМЕСТИТЬ ВсеПользователи + |ИЗ + | Справочник.Пользователи КАК Пользователи + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ГруппыПользователей.Ссылка, + | НЕ ГруппыПользователей.ПометкаУдаления + |ИЗ + | Справочник.ГруппыПользователей КАК ГруппыПользователей + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ГруппыДоступаПользователи.Пользователь КАК Пользователь, + | ГруппыДоступа.Профиль КАК Профиль, + | ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа + |ПОМЕСТИТЬ ГруппыДоступаПользователей + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ПО ГруппыДоступаПользователи.Ссылка = ГруппыДоступа.Ссылка + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеПользователи КАК ВсеПользователи + | ПО ГруппыДоступаПользователи.Пользователь = ВсеПользователи.Ссылка + |ГДЕ + | НЕ ГруппыДоступа.ПометкаУдаления + | + |СГРУППИРОВАТЬ ПО + | ГруппыДоступаПользователи.Пользователь, + | ГруппыДоступа.Профиль, + | ГруппыДоступаПользователи.Ссылка + | + |ИНДЕКСИРОВАТЬ ПО + | Профиль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПраваРолей.Отчет КАК Отчет, + | ПраваРолей.Роль КАК Роль, + | ПраваРолей.Просмотр КАК Просмотр + |ПОМЕСТИТЬ ПраваРолейНаОтчеты + |ИЗ + | &ПраваОтчетов КАК ПраваРолей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПраваРолейРасширений.ОбъектМетаданных КАК ОбъектМетаданных, + | ПраваРолейРасширений.Роль КАК Роль, + | ПраваРолейРасширений.Просмотр КАК Просмотр, + | ПраваРолейРасширений.Редактирование КАК Редактирование, + | ПраваРолейРасширений.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление + |ПОМЕСТИТЬ ПраваРолейРасширений + |ИЗ + | &ПраваРолейРасширений КАК ПраваРолейРасширений + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных, + | ПраваРолей.Роль КАК Роль, + | ПраваРолей.Просмотр КАК Просмотр, + | ПраваРолей.Редактирование КАК Редактирование, + | ПраваРолей.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление + |ПОМЕСТИТЬ ПраваРолей + |ИЗ + | РегистрСведений.ПраваРолей КАК ПраваРолей + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ПраваРолейРасширений.ОбъектМетаданных, + | ПраваРолейРасширений.Роль, + | ПраваРолейРасширений.Просмотр, + | ПраваРолейРасширений.Редактирование, + | ПраваРолейРасширений.ИнтерактивноеДобавление + |ИЗ + | ПраваРолейРасширений КАК ПраваРолейРасширений + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ПраваРолей.Отчет, + | ПраваРолей.Роль, + | ПраваРолей.Просмотр, + | ЛОЖЬ, + | ЛОЖЬ + |ИЗ + | ПраваРолейНаОтчеты КАК ПраваРолей + | + |ИНДЕКСИРОВАТЬ ПО + | Роль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных, + | ПраваРолей.Роль КАК Роль, + | ПраваРолей.Просмотр КАК Просмотр, + | ПраваРолей.Редактирование КАК Редактирование, + | ПраваРолей.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление, + | ПрофилиГруппДоступаРоли.Ссылка КАК Профиль + |ПОМЕСТИТЬ ПраваПрофилей + |ИЗ + | ПраваРолей КАК ПраваРолей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли + | ПО ПраваРолей.Роль = ПрофилиГруппДоступаРоли.Роль + | + |СГРУППИРОВАТЬ ПО + | ПраваРолей.ОбъектМетаданных, + | ПраваРолей.Роль, + | ПрофилиГруппДоступаРоли.Ссылка, + | ПраваРолей.ИнтерактивноеДобавление, + | ПраваРолей.Просмотр, + | ПраваРолей.Редактирование + | + |ИНДЕКСИРОВАТЬ ПО + | Профиль + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ТаблицыОтчетов.Отчет КАК Отчет, + | ТаблицыОтчетов.ОбъектМетаданных КАК Таблица + |ПОМЕСТИТЬ ТаблицыОтчетов + |ИЗ + | &ТаблицыОтчетов КАК ТаблицыОтчетов + | + |ИНДЕКСИРОВАТЬ ПО + | Таблица + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ГруппыДоступаПользователей.Пользователь КАК Пользователь, + | ГруппыДоступаПользователей.ГруппаДоступа КАК ГруппаДоступа, + | ПраваПрофилей.ОбъектМетаданных КАК ОбъектМетаданных, + | МАКСИМУМ(ПраваПрофилей.Просмотр) КАК Просмотр, + | МАКСИМУМ(ПраваПрофилей.Редактирование) КАК Редактирование, + | МАКСИМУМ(ПраваПрофилей.ИнтерактивноеДобавление) КАК ИнтерактивноеДобавление, + | ПраваПрофилей.Профиль КАК Профиль + |ПОМЕСТИТЬ ПраваОбъектов + |ИЗ + | ГруппыДоступаПользователей КАК ГруппыДоступаПользователей + | ЛЕВОЕ СОЕДИНЕНИЕ ПраваПрофилей КАК ПраваПрофилей + | ПО ГруппыДоступаПользователей.Профиль = ПраваПрофилей.Профиль + | + |СГРУППИРОВАТЬ ПО + | ГруппыДоступаПользователей.Пользователь, + | ГруппыДоступаПользователей.ГруппаДоступа, + | ПраваПрофилей.ОбъектМетаданных, + | ПраваПрофилей.Профиль + | + |ИНДЕКСИРОВАТЬ ПО + | ОбъектМетаданных + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПраваОбъектов.Пользователь КАК Пользователь, + | ПраваОбъектов.ГруппаДоступа КАК ГруппаДоступа, + | ПраваОбъектов.ОбъектМетаданных КАК ОбъектМетаданных, + | ПраваОбъектов.Просмотр КАК Просмотр + |ПОМЕСТИТЬ ПраваОтчетов + |ИЗ + | ПраваОбъектов КАК ПраваОбъектов + |ГДЕ + | ПраваОбъектов.ОбъектМетаданных В(&Отчеты) + | + |ИНДЕКСИРОВАТЬ ПО + | ОбъектМетаданных, + | Пользователь, + | ГруппаДоступа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПраваОбъектов.Пользователь КАК Пользователь, + | ПраваОбъектов.ГруппаДоступа КАК ГруппаДоступа, + | ПраваОбъектов.ОбъектМетаданных КАК ОбъектМетаданных, + | ПраваОбъектов.Просмотр КАК Просмотр, + | ПраваОбъектов.Редактирование КАК Редактирование, + | ПраваОбъектов.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление, + | ТаблицыОтчетов.Отчет КАК Отчет, + | ПраваОбъектов.Профиль КАК Профиль + |ПОМЕСТИТЬ ПраваОбъектовИСвязанныеОтчеты + |ИЗ + | ПраваОбъектов КАК ПраваОбъектов + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыОтчетов КАК ТаблицыОтчетов + | ПО ПраваОбъектов.ОбъектМетаданных = ТаблицыОтчетов.Таблица + |ГДЕ + | НЕ ПраваОбъектов.ОбъектМетаданных В (&Отчеты) + | + |ИНДЕКСИРОВАТЬ ПО + | Пользователь, + | ОбъектМетаданных, + | ГруппаДоступа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПраваОбъектовИСвязанныеОтчеты.Пользователь КАК Пользователь, + | ПраваОбъектовИСвязанныеОтчеты.ГруппаДоступа КАК ГруппаДоступа, + | ПраваОбъектовИСвязанныеОтчеты.ОбъектМетаданных КАК ОбъектМетаданных, + | ПраваОбъектовИСвязанныеОтчеты.Просмотр КАК Просмотр, + | ПраваОбъектовИСвязанныеОтчеты.Редактирование КАК Редактирование, + | ПраваОбъектовИСвязанныеОтчеты.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление, + | ВЫБОР + | КОГДА ПраваОбъектовИСвязанныеОтчеты.ИнтерактивноеДобавление + | ТОГДА 3 + | КОГДА ПраваОбъектовИСвязанныеОтчеты.Редактирование + | ТОГДА 2 + | КОГДА ПраваОбъектовИСвязанныеОтчеты.Просмотр + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК Право, + | ВЫБОР + | КОГДА ПраваОбъектовИСвязанныеОтчеты.ИнтерактивноеДобавление + | ТОГДА &КартинкаСоздание + | КОГДА ПраваОбъектовИСвязанныеОтчеты.Редактирование + | ТОГДА &КартинкаРедактирование + | КОГДА ПраваОбъектовИСвязанныеОтчеты.Просмотр + | ТОГДА &КартинкаПросмотр + | ИНАЧЕ 0 + | КОНЕЦ КАК КартинкаПраво, + | ВЫБОР + | КОГДА ПраваОбъектовИСвязанныеОтчеты.Просмотр + | ТОГДА &КартинкаПросмотр + | ИНАЧЕ """" + | КОНЕЦ КАК КартинкаПросмотр, + | ВЫБОР + | КОГДА ПраваОбъектовИСвязанныеОтчеты.Редактирование + | ТОГДА &КартинкаРедактирование + | ИНАЧЕ """" + | КОНЕЦ КАК КартинкаРедактирование, + | ВЫБОР + | КОГДА ПраваОбъектовИСвязанныеОтчеты.ИнтерактивноеДобавление + | ТОГДА &КартинкаСоздание + | ИНАЧЕ """" + | КОНЕЦ КАК КартинкаСоздание, + | ПраваОбъектовИСвязанныеОтчеты.Отчет КАК Отчет, + | ПраваОтчетов.ГруппаДоступа КАК ГруппаДоступаОтчета, + | ВЫБОР + | КОГДА ПраваОтчетов.Просмотр + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ПравоОтчета, + | ПраваОбъектовИСвязанныеОтчеты.Профиль КАК Профиль + |ПОМЕСТИТЬ ПраваПользователейСНастроеннымиПравами + |ИЗ + | ПраваОбъектовИСвязанныеОтчеты КАК ПраваОбъектовИСвязанныеОтчеты + | ЛЕВОЕ СОЕДИНЕНИЕ ПраваОтчетов КАК ПраваОтчетов + | ПО ПраваОбъектовИСвязанныеОтчеты.Пользователь = ПраваОтчетов.Пользователь + | И ПраваОбъектовИСвязанныеОтчеты.Отчет = ПраваОтчетов.ОбъектМетаданных + | И ПраваОбъектовИСвязанныеОтчеты.ГруппаДоступа = ПраваОтчетов.ГруппаДоступа + |ГДЕ + | НЕ ПраваОбъектовИСвязанныеОтчеты.ОбъектМетаданных ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПраваОбъектовИСвязанныеОтчеты.ОбъектМетаданных КАК ОбъектМетаданных, + | ПраваОбъектовИСвязанныеОтчеты.Отчет КАК Отчет + |ПОМЕСТИТЬ ВсеОбъектыСПравами + |ИЗ + | ПраваОбъектовИСвязанныеОтчеты КАК ПраваОбъектовИСвязанныеОтчеты + | + |СГРУППИРОВАТЬ ПО + | ПраваОбъектовИСвязанныеОтчеты.ОбъектМетаданных, + | ПраваОбъектовИСвязанныеОтчеты.Отчет + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВсеПользователи.Ссылка КАК Пользователь, + | ВсеОбъектыСПравами.ОбъектМетаданных КАК ОбъектМетаданных, + | ВсеОбъектыСПравами.Отчет КАК Отчет, + | ВсеПользователи.ВходВПрограммуРазрешен КАК ВходВПрограммуРазрешен + |ПОМЕСТИТЬ ВсеПользователиИОбъекты + |ИЗ + | ВсеПользователи КАК ВсеПользователи, + | ВсеОбъектыСПравами КАК ВсеОбъектыСПравами + | + |СГРУППИРОВАТЬ ПО + | ВсеПользователи.Ссылка, + | ВсеОбъектыСПравами.ОбъектМетаданных, + | ВсеОбъектыСПравами.Отчет, + | ВсеПользователи.ВходВПрограммуРазрешен + | + |ИНДЕКСИРОВАТЬ ПО + | Пользователь, + | ОбъектМетаданных, + | Отчет + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЕСТЬNULL(ПраваПользователейСНастроеннымиПравами.Пользователь, ВсеПользователиИОбъекты.Пользователь) КАК Пользователь, + | ВЫБОР + | КОГДА &УпрощенныйИнтерфейсНастройкиПравДоступа + | ТОГДА ПраваПользователейСНастроеннымиПравами.Профиль + | ИНАЧЕ ПраваПользователейСНастроеннымиПравами.ГруппаДоступа + | КОНЕЦ КАК ГруппаДоступа, + | ЕСТЬNULL(ПраваПользователейСНастроеннымиПравами.ОбъектМетаданных, ВсеПользователиИОбъекты.ОбъектМетаданных) КАК ОбъектМетаданных, + | ЕСТЬNULL(ПраваПользователейСНастроеннымиПравами.Просмотр, ЛОЖЬ) КАК Просмотр, + | ЕСТЬNULL(ПраваПользователейСНастроеннымиПравами.Редактирование, ЛОЖЬ) КАК Редактирование, + | ЕСТЬNULL(ПраваПользователейСНастроеннымиПравами.ИнтерактивноеДобавление, ЛОЖЬ) КАК ИнтерактивноеДобавление, + | ЕСТЬNULL(ПраваПользователейСНастроеннымиПравами.Право, 0) КАК Право, + | ПраваПользователейСНастроеннымиПравами.КартинкаПраво КАК КартинкаПраво, + | ПраваПользователейСНастроеннымиПравами.КартинкаПросмотр КАК КартинкаПросмотр, + | ПраваПользователейСНастроеннымиПравами.КартинкаРедактирование КАК КартинкаРедактирование, + | ПраваПользователейСНастроеннымиПравами.КартинкаСоздание КАК КартинкаСоздание, + | ЕСТЬNULL(ПраваПользователейСНастроеннымиПравами.Отчет, ВсеПользователиИОбъекты.Отчет) КАК Отчет, + | ПраваПользователейСНастроеннымиПравами.ГруппаДоступаОтчета КАК ГруппаДоступаОтчета, + | ПраваПользователейСНастроеннымиПравами.ПравоОтчета КАК ПравоОтчета, + | ВсеПользователиИОбъекты.ВходВПрограммуРазрешен КАК ВходВПрограммуРазрешен + |ИЗ + | ВсеПользователиИОбъекты КАК ВсеПользователиИОбъекты + | ПОЛНОЕ СОЕДИНЕНИЕ ПраваПользователейСНастроеннымиПравами КАК ПраваПользователейСНастроеннымиПравами + | ПО (ПраваПользователейСНастроеннымиПравами.Пользователь = ВсеПользователиИОбъекты.Пользователь) + | И (ПраваПользователейСНастроеннымиПравами.ОбъектМетаданных = ВсеПользователиИОбъекты.ОбъектМетаданных)"; + + ВключенаГруппировкаПоОтчетам = ВключенаГруппировкаПоОтчетам(); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ПраваОтчетов", ?(ВключенаГруппировкаПоОтчетам, ПраваОтчетов(), ПустаяКоллекцияПравОтчетов())); + Запрос.УстановитьПараметр("ТаблицыОтчетов", ?(ВключенаГруппировкаПоОтчетам, ТаблицыОтчетов(), ПустаяКоллекцияТаблицОтчетов())); + Запрос.УстановитьПараметр("Отчеты", Отчеты()); + Запрос.УстановитьПараметр("УпрощенныйИнтерфейсНастройкиПравДоступа", УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа()); + Запрос.УстановитьПараметр("ПраваРолейРасширений", УправлениеДоступомСлужебный.ПраваРолейРасширений()); + + АдресКартинкиПросмотр = Неопределено; + АдресКартинкиРедактирование = Неопределено; + АдресКартинкиСоздание = Неопределено; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + АдресКартинкиПросмотр = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.АдресКартинкиПросмотр; + АдресКартинкиРедактирование = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.АдресКартинкиРедактирование; + АдресКартинкиСоздание = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.АдресКартинкиСоздание; + КонецЕсли; + + Запрос.УстановитьПараметр("КартинкаПросмотр", ПоместитьВоВременноеХранилище(БиблиотекаКартинок.Просмотр.ПолучитьДвоичныеДанные(), АдресКартинкиПросмотр)); + Запрос.УстановитьПараметр("КартинкаРедактирование", ПоместитьВоВременноеХранилище(БиблиотекаКартинок.Редактирование.ПолучитьДвоичныеДанные(), АдресКартинкиРедактирование)); + Запрос.УстановитьПараметр("КартинкаСоздание", ПоместитьВоВременноеХранилище(БиблиотекаКартинок.Создание.ПолучитьДвоичныеДанные(), АдресКартинкиСоздание)); + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +Функция ВключенаГруппировкаПоОтчетам() + + СписокПолей = Новый Массив; + ЗаполнитьСписокПолейГруппировок(КомпоновщикНастроек.ПолучитьНастройки().Структура, СписокПолей); + + Возврат СписокПолей.Найти(Новый ПолеКомпоновкиДанных("Отчет")) <> Неопределено; + +КонецФункции + +// Параметры: +// КоллекцияЭлементов - КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных +// СписокПолей - Массив +// +Процедура ЗаполнитьСписокПолейГруппировок(КоллекцияЭлементов, СписокПолей) + + Для Каждого Элемент Из КоллекцияЭлементов Цикл + Если (ТипЗнч(Элемент) = Тип("ГруппировкаКомпоновкиДанных") + Или ТипЗнч(Элемент) = Тип("ГруппировкаТаблицыКомпоновкиДанных")) + И Элемент.Использование Тогда + Для Каждого Поле Из Элемент.ПоляГруппировки.Элементы Цикл + Если ТипЗнч(Поле) = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда + Если Поле.Использование Тогда + СписокПолей.Добавить(Поле.Поле); + КонецЕсли; + КонецЕсли; + КонецЦикла; + ЗаполнитьСписокПолейГруппировок(Элемент.Структура, СписокПолей); + ИначеЕсли ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") И Элемент.Использование Тогда + ЗаполнитьСписокПолейГруппировок(Элемент.Строки, СписокПолей); + ЗаполнитьСписокПолейГруппировок(Элемент.Колонки, СписокПолей); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/АнализПравДоступа/Templates/Макет/Template.dcs b/SSL/src/Reports/АнализПравДоступа/Templates/Макет/Template.dcs new file mode 100644 index 000000000..245287a7c --- /dev/null +++ b/SSL/src/Reports/АнализПравДоступа/Templates/Макет/Template.dcs @@ -0,0 +1,4150 @@ + + + + ИсточникДанных1 + Local + + + ПраваПользователей + + ОбъектМетаданных + ОбъектМетаданных + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Таблица</v8:content> + </v8:item> + + + d5p1:CatalogRef.ИдентификаторыОбъектовРасширений + d5p1:CatalogRef.ИдентификаторыОбъектовМетаданных + + + + Пользователь + Пользователь + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пользователь</v8:content> + </v8:item> + + + d5p1:CatalogRef.ГруппыПользователей + d5p1:CatalogRef.Пользователи + + + + ГруппаДоступа + ГруппаДоступа + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа доступа</v8:content> + </v8:item> + + + d5p1:CatalogRef.ГруппыДоступа + + + + ИнтерактивноеДобавление + ИнтерактивноеДобавление + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Создание</v8:content> + </v8:item> + + + xs:boolean + + + + Просмотр + Просмотр + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Просмотр</v8:content> + </v8:item> + + + xs:boolean + + + + Редактирование + Редактирование + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Редактирование</v8:content> + </v8:item> + + + xs:boolean + + + + Право + Право + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уровень доступа</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Nonnegative + + + + 1 + + + ru + Просмотр + + + + + 2 + + + ru + Редактирование + + + + + 3 + + + ru + Создание + + + + + + КартинкаПросмотр + КартинкаПросмотр + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Картинка просмотр</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + КартинкаРедактирование + КартинкаРедактирование + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Картинка редактирование</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + КартинкаСоздание + КартинкаСоздание + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Картинка создание</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + Отчет + Отчет + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчет</v8:content> + </v8:item> + + + d5p1:CatalogRef.ИдентификаторыОбъектовРасширений + d5p1:CatalogRef.ИдентификаторыОбъектовМетаданных + + + + ГруппаДоступаОтчета + ГруппаДоступаОтчета + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа доступа отчета</v8:content> + </v8:item> + + + d5p1:CatalogRef.ГруппыДоступа + + + + ПравоОтчета + ПравоОтчета + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уровень доступа к отчету</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + ВходВПрограммуРазрешен + ВходВПрограммуРазрешен + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пользователю разрешен вход в программу</v8:content> + </v8:item> + + + xs:boolean + + + ИсточникДанных1 + ПраваПользователей + + + Право + Максимум(Право) + ОбъектМетаданных + + + КартинкаПросмотр + Максимум(КартинкаПросмотр) + + + КартинкаРедактирование + Максимум(КартинкаРедактирование) + + + КартинкаСоздание + Максимум(КартинкаСоздание) + + + Просмотр + Максимум(Просмотр) + + + Редактирование + Максимум(Редактирование) + + + ИнтерактивноеДобавление + Максимум(ИнтерактивноеДобавление) + + + Право + Максимум(ПравоОтчета) + Отчет + + + ВходВПрограммуРазрешен + Минимум(ВходВПрограммуРазрешен) + + + + + + + + + + + Пользователь + КолонкаПользователь + Header + + + + ГруппаДоступа + КолонкаГруппаДоступа + Header + + + + ПользовательЗаголовок + Header + + + + ОбъектМетаданныхЗаголовок + Header + + + + Легенда + Header + + + + ОтчетЗаголовок + Header + + + + ГруппаДоступа + КартинкаПросмотр + КартинкаРедактирование + КартинкаСоздание + ПраваПоГруппамДоступа + Header + + + + Пользователь + КартинкаПросмотр + КартинкаРедактирование + КартинкаСоздание + ПраваПользователя + Header + + + + АнализПравДоступа + + + ru + Анализ прав доступа + + + + + + ОбъектМетаданных + + + Пользователь + + + Право + + + + + false + ОбъектМетаданных + InList + + + -1 + + 91c5e0cc-63a9-4398-b8d3-561eeecd248d + + + Право + GreaterOrEqual + 1 + Normal + 39a199ad-a34a-4363-bcad-f674ea3b14c8 + + + false + Пользователь + InList + + + -1 + + ece687f5-e5a6-4d3c-9153-fca4b227345a + + + ВходВПрограммуРазрешен + Equal + true + + + ru + Скрыть пользователей с отключенным входом в программу + + + Normal + 685f8653-1edd-40d3-9129-5dbc8bab6e90 + + + + + + + Право + + + + + Право + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + + + + + Право + + + + + Право + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + + + + + Право + + + + + Право + Equal + 3 + + + + + ЦветФона + style:ПравоСозданияФон + + + + + + + Пользователь + + + + + + false + Размещение + Wrap + + + false + ОриентацияТекста + 90 + + + false + МаксимальнаяШирина + 2 + + + false + РастягиватьПоГоризонтали + true + + + МаксимальнаяВысота + 70 + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Пользователь + + + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + + + + + Право + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + false + РасположениеИтогов + None + + + false + РасположениеРесурсов + Vertically + + + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + None + + + false + ТипЗаголовкаПолей + Short + + + + + КолонкаПользователь + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Пользователь + + + Право + + + + + + + ОбъектМетаданных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ОбъектМетаданных + + + + + false + МакетОформления + Main + + + ru + Таблица + + + + + false + РасположениеРесурсов + Vertically + + + Normal + c3f2a0ca-524d-44fd-a05f-7cfa9f91711b + + + false + ГруппировкаПоОтчетам + + + Отчет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Отчет + Filled + + + + + + + + + + + ВыводитьОтбор + DontOutput + + + + + + ОбъектМетаданных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + Normal + e549951a-8e6c-4ab1-b173-c76d63d7f9b2 + + + + + + + Легенда + + + + + + + + + МакетОформления + БезОформления + + + КоличествоЗаписей + 1 + + + false + ТипМакета + Vertical + + + Normal + ebf1c91e-e3cf-426d-b2ee-13552003fa74 + + + ru + Легенда + + + + + + + ПраваПользователейНаТаблицы + + + ru + Права пользователей на таблицы + + + + + + ОбъектМетаданных + + + Пользователь + + + Право + + + + + false + ОбъектМетаданных + InList + + + -1 + + Normal + 0231de1c-3184-40d8-8247-c5650409922c + + + false + Пользователь + InList + + + -1 + + Normal + + + false + Право + GreaterOrEqual + 1 + Normal + 4befccc4-9010-4c6a-9575-82660bbc06bf + + + false + ВходВПрограммуРазрешен + Equal + true + + + ru + Скрыть пользователей с отключенным входом в программу + + + Normal + 98ef20f5-9394-4a5b-bd98-61d4fdfc5707 + + + + + + + Право + + + + + Право + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + + + + + Право + + + + + Право + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + + + + + Право + + + + + Право + Equal + 3 + + + + + ЦветФона + style:ПравоСозданияФон + + + + + + + Пользователь + + + + + + false + Размещение + Wrap + + + false + ОриентацияТекста + 90 + + + false + МаксимальнаяШирина + 2 + + + false + РастягиватьПоГоризонтали + true + + + МаксимальнаяВысота + 70 + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Право + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + Пользователь + + + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + + + + + false + МакетОформления + Основной + + + false + РасположениеИтогов + None + + + false + РасположениеРесурсов + Vertically + + + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + None + + + false + ТипЗаголовкаПолей + Short + + + + + КолонкаПользователь + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Пользователь + + + Право + + + + + + + ОбъектМетаданных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ОбъектМетаданных + + + + + false + МакетОформления + Main + + + ru + Таблица + + + + + false + РасположениеРесурсов + Vertically + + + + + + + + + Легенда + + + + + + + + + МакетОформления + БезОформления + + + КоличествоЗаписей + 1 + + + Normal + b7d4003d-6df0-435a-a7c9-7d59ce0d623a + + + ru + Легенда + + + + + + + ПраваПользователяНаТаблицы + + + ru + Права пользователя на таблицы + + + + + + ОбъектМетаданных + + + ГруппаДоступа + + + Право + + + + + false + Пользователь + Equal + Normal + + + false + Право + GreaterOrEqual + 1 + Normal + 12d5529f-b584-44b3-b37e-ffa717fce6f1 + + + + + + + Право + + + + + Право + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + + + + + Право + + + + + Право + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + + + + + Право + + + + + Право + Equal + 3 + + + + + ЦветФона + style:ПравоСозданияФон + + + + + + + ГруппаДоступа + + + + + + МаксимальнаяВысота + 70 + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Право + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + КартинкаПросмотр + + + Просмотр + + + + + Просмотр + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + КартинкаРедактирование + + + Редактирование + + + + + Редактирование + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + КартинкаСоздание + + + ИнтерактивноеДобавление + + + + + ИнтерактивноеДобавление + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ГруппаДоступа + + + + + ГруппаДоступа + NotFilled + + + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + Текст + + + ru + <Без доступа> + + + + + + + + + false + РасположениеИтогов + None + + + false + РасположениеРесурсов + Vertically + + + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + None + + + false + ТипЗаголовкаПолей + Short + + + ВыводитьОтбор + DontOutput + + + + ПользовательЗаголовок + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + КолонкаГруппаДоступа + + + ГруппаДоступа + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ГруппаДоступа + + + Право + + + + + + + ОбъектМетаданных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ОбъектМетаданных + + + + + false + МакетОформления + Main + + + ru + Таблица + + + + + false + РасположениеРесурсов + Vertically + + + + + + + + + + Легенда + + + + + + + + + МакетОформления + БезОформления + + + КоличествоЗаписей + 1 + + + Normal + d7ffd476-3d65-411a-b844-2e3c54a01723 + + + ru + Легенда + + + + + + + ПраваПользователейНаТаблицу + + + ru + Права пользователей на таблицу + + + + + + Пользователь + + + КартинкаПросмотр + + + КартинкаРедактирование + + + КартинкаСоздание + + + + + false + ОбъектМетаданных + Equal + Normal + + + false + Пользователь + Equal + Normal + 7a412447-4710-4980-a012-e951cdfc618f + + + false + Право + GreaterOrEqual + 1 + Normal + 333e101d-6632-4c33-b582-28b2863c71dc + + + false + ВходВПрограммуРазрешен + Equal + true + + + ru + Скрыть пользователей с отключенным входом в программу + + + Normal + 0c68038c-5afb-41d4-8210-50ddfee8fb65 + + + + + + + Право + + + + + Право + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + + + + + Право + + + + + Право + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + + + + + Право + + + + + Право + Equal + 3 + + + + + ЦветФона + style:ПравоСозданияФон + + + + + + + КартинкаПросмотр + + + КартинкаРедактирование + + + КартинкаСоздание + + + + + + ВыводитьКартинку + Auto + + + ВертикальноеПоложениеКартинки + Center + + + ГоризонтальноеПоложениеКартинки + Center + + + + + + + КартинкаПросмотр + + + Просмотр + + + + + Просмотр + Equal + true + + + + + ЦветФона + style:ПравоПросмотраФон + + + + + + + КартинкаРедактирование + + + Редактирование + + + + + Редактирование + Equal + true + + + + + ЦветФона + style:ПравоРедактированияФон + + + + + + + КартинкаСоздание + + + ИнтерактивноеДобавление + + + + + ИнтерактивноеДобавление + Equal + true + + + + + ЦветФона + style:ПравоСозданияФон + + + + + + + Пользователь + + + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + + + + + Право + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + КартинкаПросмотр + + + Просмотр + + + + + Просмотр + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + КартинкаРедактирование + + + Редактирование + + + + + Редактирование + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + КартинкаСоздание + + + ИнтерактивноеДобавление + + + + + ИнтерактивноеДобавление + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + false + РасположениеИтогов + None + + + false + РасположениеРесурсов + Vertically + + + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + None + + + false + ТипЗаголовкаПолей + Short + + + ВыводитьОтбор + DontOutput + + + + ОбъектМетаданныхЗаголовок + + + ОбъектМетаданных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + ПраваПользователя + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + Легенда + + + + + + + + + МакетОформления + БезОформления + + + КоличествоЗаписей + 1 + + + Normal + a71bf3f1-8265-4e84-9bde-1ebd2d3c71eb + + + ru + Легенда + + + + + + + ПраваПользователяНаТаблицу + + + ru + Права пользователя на таблицу + + + + + + ГруппаДоступа + + + КартинкаПросмотр + + + КартинкаРедактирование + + + КартинкаСоздание + + + + + ОбъектМетаданных + Equal + Normal + + + Пользователь + Equal + Normal + + + + + + + КартинкаПросмотр + + + КартинкаРедактирование + + + КартинкаСоздание + + + + + + ВыводитьКартинку + Auto + + + + + + + Просмотр + + + КартинкаПросмотр + + + + + Просмотр + Equal + true + + + + + ЦветФона + style:ПравоПросмотраФон + + + + + + + Редактирование + + + КартинкаРедактирование + + + + + Редактирование + Equal + true + + + + + ЦветФона + style:ПравоРедактированияФон + + + + + + + ИнтерактивноеДобавление + + + КартинкаСоздание + + + + + ИнтерактивноеДобавление + Equal + true + + + + + ЦветФона + style:ПравоСозданияФон + + + + + + + Просмотр + + + КартинкаПросмотр + + + + + Просмотр + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + Редактирование + + + КартинкаРедактирование + + + + + Редактирование + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ИнтерактивноеДобавление + + + КартинкаСоздание + + + + + ИнтерактивноеДобавление + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ГруппаДоступа + + + + + ГруппаДоступа + NotFilled + + + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + Текст + + + ru + <Без доступа> + + + + + + + + + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + None + + + ВыводитьОтбор + DontOutput + + + + ПользовательЗаголовок + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + false + ВыводитьЗаголовок + DontOutput + + + false + ВариантИспользованияГруппировки + AdditionalInformation + + + + ОбъектМетаданныхЗаголовок + + + ОбъектМетаданных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + false + ВариантИспользованияГруппировки + AdditionalInformation + + + + + ПраваПоГруппамДоступа + + + ГруппаДоступа + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ГруппаДоступа + + + КартинкаПросмотр + + + КартинкаРедактирование + + + КартинкаСоздание + + + + + + + Легенда + + + + + + + + + МакетОформления + БезОформления + + + КоличествоЗаписей + 1 + + + Normal + 15bee542-8025-4ad8-8ebd-ca7d183762d6 + + + ru + Легенда + + + + + + + ПраваПользователейНаТаблицыОтчета + + + ru + Права пользователей на таблицы отчета + + + + + + Отчет + + + ОбъектМетаданных + + + Пользователь + + + Право + + + + + Отчет + Equal + + Normal + + + false + Право + GreaterOrEqual + 1 + Normal + bb97c32b-6606-4e2f-84b8-5a3c1a36426c + + + false + ВходВПрограммуРазрешен + Equal + true + + + ru + Скрыть пользователей с отключенным входом в программу + + + Normal + e4741d14-20fa-466f-9e8d-892ca655c087 + + + + + false + + + Пользователь + + + + + + ОриентацияТекста + 90 + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Право + + + + + Право + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + + + + + Право + + + + + Право + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + + + + + Право + + + + + Право + Equal + 3 + + + + + ЦветФона + style:ПравоСозданияФон + + + + + + + Пользователь + + + + + + МаксимальнаяВысота + 70 + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Пользователь + + + + + ВходВПрограммуРазрешен + Equal + false + + + + + false + ЦветФона + style:ПравоНедействительногоПользователяФон + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + + + + + Право + + + + + ВходВПрограммуРазрешен + Equal + false + + + Право + Filled + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + false + РасположениеИтогов + None + + + false + РасположениеРесурсов + Vertically + + + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + None + + + false + ТипЗаголовкаПолей + Short + + + ВыводитьОтбор + DontOutput + + + + ОтчетЗаголовок + + + Отчет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + КолонкаПользователь + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Пользователь + + + Право + + + + + + + Отчет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + ОбъектМетаданных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ОбъектМетаданных + + + + + false + МакетОформления + Main + + + ru + Таблица + + + + + false + РасположениеРесурсов + Vertically + + + + + + + + + + Легенда + + + + + + + + + МакетОформления + БезОформления + + + КоличествоЗаписей + 1 + + + Normal + d08e0721-13c6-4e63-b708-48bf0eeefeeb + + + ru + Легенда + + + + + + + ПраваПользователяНаТаблицыОтчета + + + ru + Права пользователя на таблицы отчета + + + + + + ОбъектМетаданных + + + ГруппаДоступа + + + Право + + + + + Пользователь + InList + Normal + + + Отчет + Equal + Normal + + + false + Право + GreaterOrEqual + 1 + Normal + cfb5d8b8-61bf-438c-8847-a39255e414e6 + + + + + false + + + Пользователь + + + + + + ОриентацияТекста + 90 + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Право + + + + + Право + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + + + + + Право + + + + + Право + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + + + + + Право + + + + + Право + Equal + 3 + + + + + ЦветФона + style:ПравоСозданияФон + + + + + + + ГруппаДоступа + + + + + + МаксимальнаяВысота + 70 + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Право + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ГруппаДоступа + + + + + ГруппаДоступа + NotFilled + + + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + Текст + + + ru + <Без доступа> + + + + + + + + + false + РасположениеИтогов + None + + + false + РасположениеРесурсов + Vertically + + + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + None + + + false + ТипЗаголовкаПолей + Short + + + ВыводитьОтбор + DontOutput + + + + ОтчетЗаголовок + + + Отчет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + ПользовательЗаголовок + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + + КолонкаГруппаДоступа + + + ГруппаДоступа + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ГруппаДоступа + + + Право + + + + + + + Отчет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + ОбъектМетаданных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ОбъектМетаданных + + + + + false + МакетОформления + Main + + + ru + Таблица + + + + + false + РасположениеРесурсов + Vertically + + + + + + + + + + Легенда + + + + + + + + + МакетОформления + БезОформления + + + КоличествоЗаписей + 1 + + + Normal + b1b756b2-49f5-4c58-8c2d-bfc2cc80c9d2 + + + ru + Легенда + + + + + + + ПраваПользователяНаТаблицыОтчетов + + + ru + Права пользователя на таблицы отчетов + + + + + + ОбъектМетаданных + + + ГруппаДоступа + + + Право + + + + + false + Пользователь + InList + Normal + + + false + Право + GreaterOrEqual + 1 + Normal + 12d5529f-b584-44b3-b37e-ffa717fce6f1 + + + + + + + Право + + + + + Право + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + + + + + Право + + + + + Право + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + + + + + Право + + + + + Право + Equal + 3 + + + + + ЦветФона + style:ПравоСозданияФон + + + + + + + ГруппаДоступа + + + + + + МаксимальнаяВысота + 70 + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Право + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + КартинкаПросмотр + + + Просмотр + + + + + Просмотр + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + КартинкаРедактирование + + + Редактирование + + + + + Редактирование + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + КартинкаСоздание + + + ИнтерактивноеДобавление + + + + + ИнтерактивноеДобавление + Equal + true + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ГруппаДоступа + + + + + ГруппаДоступа + NotFilled + + + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + Текст + + + ru + <Без доступа> + + + + + + + + + false + РасположениеИтогов + None + + + false + РасположениеРесурсов + Vertically + + + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + None + + + false + ТипЗаголовкаПолей + Short + + + ВыводитьОтбор + DontOutput + + + + ПользовательЗаголовок + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + КолонкаГруппаДоступа + + + ГруппаДоступа + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ГруппаДоступа + + + Право + + + + + + + Отчет + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Отчет + Filled + + + + + + + + + + + ВыводитьОтбор + DontOutput + + + + + + ОбъектМетаданных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ОбъектМетаданных + + + + + false + МакетОформления + Main + + + ru + Таблица + + + + + false + РасположениеРесурсов + Vertically + + + + + + + + + + + Легенда + + + + + + + + + МакетОформления + БезОформления + + + КоличествоЗаписей + 1 + + + Normal + d7ffd476-3d65-411a-b844-2e3c54a01723 + + + ru + Легенда + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/АнализПравДоступа/АнализПравДоступа.mdo b/SSL/src/Reports/АнализПравДоступа/АнализПравДоступа.mdo new file mode 100644 index 000000000..3c6aa7cc0 --- /dev/null +++ b/SSL/src/Reports/АнализПравДоступа/АнализПравДоступа.mdo @@ -0,0 +1,24 @@ + + + + + + + АнализПравДоступа + + ru + Анализ прав доступа + + true + Report.АнализПравДоступа.Template.Макет + SettingsStorage.ХранилищеВариантовОтчетов + SettingsStorage.ХранилищеВариантовОтчетов + + Макет + + ru + Макет + + DataCompositionSchema + + diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl index 56244c3ea..c2321fb9b 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl @@ -16,14 +16,11 @@ // Задать настройки формы отчета. // -// Настройки общей формы отчета подсистемы "Варианты отчетов". -// // Параметры: -// Форма - ФормаКлиентскогоПриложения, Неопределено - Форма отчета или форма настроек отчета. -// Неопределено когда вызов без контекста. -// КлючВарианта - Строка, Неопределено - Имя предопределенного -// или уникальный идентификатор пользовательского варианта отчета. -// Неопределено когда вызов без контекста. +// Форма - ФормаКлиентскогоПриложения +// - Неопределено +// КлючВарианта - Строка +// - Неопределено // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl index a257fee21..b01807b76 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl @@ -17,8 +17,10 @@ // Задать настройки формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, Неопределено - -// КлючВарианта - Строка, Неопределено - +// Форма - ФормаКлиентскогоПриложения +// - Неопределено +// КлючВарианта - Строка +// - Неопределено // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт diff --git a/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl b/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl index a85e4630b..07df9fe59 100644 --- a/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl +++ b/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl @@ -49,7 +49,8 @@ // * ФункциональныеОпции - Строка - имена функциональных опций через запятую, определяющих видимость команды. // * УсловияВидимости - Массив - определяет видимость команды в зависимости от контекста. // * ИзменяетВыбранныеОбъекты - Булево - определяет доступность команды. -// * МножественныйВыбор - Булево, Неопределено - если Истина, то команда поддерживает множественный выбор. +// * МножественныйВыбор - Булево +// - Неопределено - если Истина, то команда поддерживает множественный выбор. // В этом случае в параметре выполнения будет передан список ссылок. // Необязательный. Значение по умолчанию: Истина. // * РежимЗаписи - Строка - действия, связанные с записью объекта, которые выполняются перед обработчиком команды. @@ -59,11 +60,13 @@ // * ИмяФормы - Строка - имя формы, которую требуется открыть или получить для выполнения команды. // * КлючВарианта - Строка - имя варианта отчета, открываемого при выполнении команды. // * ИмяПараметраФормы - Строка - имя параметра формы, в который следует передать ссылку или массив ссылок. -// * ПараметрыФормы - Неопределено, Структура - параметры формы, указанной в ИмяФормы. +// * ПараметрыФормы - Неопределено +// - Структура - параметры формы, указанной в ИмяФормы. // * Обработчик - Строка - описание процедуры, обрабатывающей основное действие команды. // * ДополнительныеПараметры - Структура - параметры обработчика, указанного в Обработчик. // Параметры - Структура - структура, содержащая параметры подключения команды. -// ДокументыСОтчетомОДвижениях - Массив, Неопределено - массив документов, в которых будет выводится +// ДокументыСОтчетомОДвижениях - Массив +// - Неопределено - массив документов, в которых будет выводится // команда открытия отчета. Неопределено в том случае когда отчет выводится // для всех документов со свойством "Проведение" установленным в "Разрешить" // и непустой коллекцией движений. diff --git a/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl index 2387d111a..a12357af3 100644 --- a/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl +++ b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl @@ -13,6 +13,7 @@ Перем КлючТекущегоВарианта; // Строка // Хранит идентификатор настроек варианта отчета. // Также см. Синтакс-помощник. +Перем КлючРодительскогоВарианта; // Строка Перем СвойстваРегистров; // см. ПалитраСвойствРегистров Перем Примечания; // см. ПалитраСвойствПримечаний @@ -26,21 +27,16 @@ // Задать настройки формы отчета. // -// Настройки общей формы отчета подсистемы "Варианты отчетов". -// // Параметры: -// Форма - ФормаКлиентскогоПриложения, Неопределено - Форма отчета или форма настроек отчета. -// Неопределено когда вызов без контекста. -// КлючВарианта - Строка, Неопределено - Имя предопределенного -// или уникальный идентификатор пользовательского варианта отчета. -// Неопределено когда вызов без контекста. +// Форма - ФормаКлиентскогоПриложения +// - Неопределено +// КлючВарианта - Строка +// - Неопределено // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт - Настройки.РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = Истина; - Настройки.СкрытьКомандыРассылки = Истина; - Настройки.ПараметрыРасположенияЭлементовУправления = ПараметрыРасположенияЭлементовУправления(); + Настройки.ПараметрыРасположенияЭлементовУправления = ПараметрыРасположенияЭлементовУправления(); Настройки.События.ПриСозданииНаСервере = Истина; Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина; @@ -64,13 +60,16 @@ // По умолчанию не заполнен (это означает что компоновщик инициализирован на основании основной схемы). // Используется для оптимизации, чтобы переинициализировать компоновщик как можно реже. // Может не использоваться если переинициализация выполняется безусловно. -// КлючВарианта - Строка, Неопределено - +// КлючВарианта - Строка +// - Неопределено - // Имя предопределенного или уникальный идентификатор пользовательского варианта отчета. // Неопределено когда вызов для варианта расшифровки или без контекста. -// Настройки - НастройкиКомпоновкиДанных, Неопределено - +// Настройки - НастройкиКомпоновкиДанных +// - Неопределено - // Настройки варианта отчета, которые будут загружены в компоновщик настроек после его инициализации. // Неопределено когда настройки варианта не надо загружать (уже загружены ранее). -// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - +// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных +// - Неопределено - // Пользовательские настройки, которые будут загружены в компоновщик настроек после его инициализации. // Неопределено когда пользовательские настройки не надо загружать (уже загружены ранее). // @@ -112,9 +111,11 @@ ПараметрыОтчета = ПараметрыОтчета(Настройки, ПользовательскиеНастройки); Если ПараметрыОтчета.ДокументВладелец = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Отчет о движениях документа не предназначен для рассылки.'"); + ВызватьИсключение НСтр("ru = 'Отчет о движениях документа возможно открыть из формы документа.'"); КонецЕсли; + КлючРодительскогоВарианта = КлючРодительскогоВарианта(Контекст, КлючВарианта, Настройки); + Если КлючСхемы = КлючВарианта Тогда Возврат; КонецЕсли; @@ -135,15 +136,20 @@ ЗначенияПараметров.Вставить("ДокументВладелец", ПараметрыОтчета.ДокументВладелец); ЗначенияПараметров.Вставить("СписокРегистров", СписокВыбранныхРегистров); + ОграничитьТипВладельца(ПараметрыОтчета.ДокументВладелец); УстановитьПараметрыДанных(Настройки, ЗначенияПараметров, ПользовательскиеНастройки); - Если КлючВарианта = "Основной" Тогда - ПодготовитьГоризонтальныйВариант(ПараметрыОтчета.ДокументВладелец, Настройки); - ИначеЕсли КлючВарианта = "Дополнительный" Тогда - ПодготовитьВертикальныйВариант(ПараметрыОтчета.ДокументВладелец, Настройки); + ЭтоПредопределенныйВариант = (КлючРодительскогоВарианта = КлючВарианта); + + Если КлючРодительскогоВарианта = "Основной" Тогда + ПодготовитьГоризонтальныйВариант(ПараметрыОтчета.ДокументВладелец, Настройки, ЭтоПредопределенныйВариант); + ИначеЕсли КлючРодительскогоВарианта = "Дополнительный" Тогда + ПодготовитьВертикальныйВариант(ПараметрыОтчета.ДокументВладелец, Настройки, ЭтоПредопределенныйВариант); КонецЕсли; - Настройки.ДополнительныеСвойства.Вставить("ИдентификаторыСвойствНастроек", Новый Массив); + ДополнительныеСвойства = Настройки.ДополнительныеСвойства; + ДополнительныеСвойства.Вставить("ИдентификаторыСвойствНастроек", Новый Массив); + ДополнительныеСвойства.Вставить("КлючРодительскогоВарианта", КлючРодительскогоВарианта); ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКомпоновкиДанных, КлючСхемы); @@ -158,20 +164,17 @@ ВызватьИсключение НСтр("ru = 'Выбранное действие в данном отчете не доступно.'"); КонецЕсли; - Если Форма.Параметры.Свойство("ДокументВладелец") Тогда - СтруктураПараметровДанных = Новый Структура("ДокументВладелец", Форма.Параметры.ДокументВладелец); - УстановитьПараметрыДанных(КомпоновщикНастроек.Настройки, СтруктураПараметровДанных); - ИначеЕсли Не Форма.Параметры.Свойство("ПараметрКоманды") Тогда - ВызватьИсключение НСтр("ru = 'Для начала работы с отчетом необходимо воспользоваться соответствующей командой в форме интересующего документа.'"); - КонецЕсли; - ДокументВладелец = Форма.Параметры.ПараметрКоманды; - Если Не ЗначениеЗаполнено(ДокументВладелец) Тогда - ВызватьИсключение НСтр("ru = 'Для начала работы с отчетом необходимо воспользоваться соответствующей командой в форме интересующего документа.'"); + ДокументВладелец = Неопределено; + + Если Не Форма.Параметры.Свойство("ДокументВладелец", ДокументВладелец) + И Не Форма.Параметры.Свойство("ПараметрКоманды", ДокументВладелец) + И Не ЗначениеЗаполнено(ДокументВладелец) Тогда + + Возврат; КонецЕсли; СтруктураПараметровДанных = Новый Структура("ДокументВладелец", ДокументВладелец); УстановитьПараметрыДанных(КомпоновщикНастроек.Настройки, СтруктураПараметровДанных); - Форма.КлючНазначенияИспользования = ДокументВладелец.Метаданные().ПолноеИмя(); КонецПроцедуры @@ -241,7 +244,7 @@ ПолучитьСвойстваРегистров(Настройки, ДокументВладелец); - НайденныйПараметр = Настройки.ПараметрыДанных.Элементы.Найти("Списокрегистров"); + НайденныйПараметр = Настройки.ПараметрыДанных.Элементы.Найти("СписокРегистров"); Если НайденныйПараметр <> Неопределено И Не НайденныйПараметр.Использование Тогда @@ -275,6 +278,16 @@ #Область ПодготовкаДанных +Процедура ОграничитьТипВладельца(Владелец) + + ТипыВладельца = Новый Массив; + ТипыВладельца.Добавить(ТипЗнч(Владелец)); + + НайденныйПараметр = СхемаКомпоновкиДанных.Параметры.Найти("ДокументВладелец"); + НайденныйПараметр.ТипЗначения = Новый ОписаниеТипов(ТипыВладельца); + +КонецПроцедуры + Функция НаборыДанныхОтчета(ДокументВладелец, ДополнительнаяНумерация = Ложь) НаборыДанных = Новый Массив; @@ -418,14 +431,10 @@ Для Каждого Ресурс Из Ресурсы Цикл Если Ресурс.Балансовый Или Не КорреспонденцияОбъекта Тогда - НаборДанных.Ресурсы.Вставить(Ресурс.Имя, Ресурс.Представление()); - Иначе - НаборДанных.РесурсыДт.Вставить(Ресурс.Имя + "Дт", Ресурс.Представление() + " " + ЛокализацияДебет); НаборДанных.РесурсыКт.Вставить(Ресурс.Имя + "Кт", Ресурс.Представление() + " " + ЛокализацияКредит); - КонецЕсли; КонецЦикла; @@ -433,13 +442,11 @@ Для ИндексСубконто = 1 По МаксимальноеКоличествоСубконто Цикл Если КорреспонденцияОбъекта Тогда - ИндексСтрокой = Формат(ИндексСубконто, "ЧГ=0"); НаборДанных.СубконтоДт.Вставить("СубконтоДт" + ИндексСтрокой, ЛокализацияСубконто + " " + ЛокализацияДебет + " " + ИндексСтрокой); НаборДанных.СубконтоКт.Вставить("СубконтоКт" + ИндексСтрокой, ЛокализацияСубконто + " " + ЛокализацияКредит + " " + ИндексСтрокой); - Иначе НаборДанных.Субконто.Вставить("Субконто" + ИндексСтрокой, ЛокализацияСубконто + " " + ИндексСтрокой); КонецЕсли; @@ -447,10 +454,9 @@ КонецЦикла; Если КорреспонденцияОбъекта Тогда - НаборДанных.ИзмеренияДт.Вставить("СчетДт", ЛокализацияСчет + " " +ЛокализацияДебет); + НаборДанных.ИзмеренияДт.Вставить("СчетДт", ЛокализацияСчет + " " + ЛокализацияДебет); НаборДанных.ИзмеренияКт.Вставить("СчетКт", ЛокализацияСчет + " " + ЛокализацияКредит); Иначе - ТекстИзмерения = ТекстИзмерения + ?(ЗначениеЗаполнено(ТекстИзмерения), ", ", "") + "Счет"; НаборДанных.Измерения.Вставить("Счет", ЛокализацияСчет); КонецЕсли; @@ -588,7 +594,7 @@ #Область ГоризонтальныйВариант -Процедура ПодготовитьГоризонтальныйВариант(ДокументВладелец, Настройки) +Процедура ПодготовитьГоризонтальныйВариант(ДокументВладелец, Настройки, ЭтоПредопределенныйВариант) Если СвойстваРегистров.Количество() = 0 Тогда Возврат; @@ -617,8 +623,10 @@ НаборДанных.ПредставлениеВидаРегистра, НаборДанных.ИмяРегистра); КонецЕсли; - - ПодготовитьГоризонтальныйВариантНабораДанных(Настройки, НаборДанных, ЭлементНабораДанных); + + Если ЭтоПредопределенныйВариант Тогда + ПодготовитьГоризонтальныйВариантНабораДанных(Настройки, НаборДанных, ЭлементНабораДанных); + КонецЕсли; КонецЦикла; @@ -657,7 +665,7 @@ СтруктураРеквизитов = ЭлементДанных.Реквизиты; ПользовательскийЗаголовок = ПредставлениеВидаРегистра + " " + ПредставлениеРегистра; - ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); + ГруппировкаДетальныеЗаписи = ДетальныеЗаписиПоРегистру(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда @@ -722,7 +730,7 @@ ПользовательскийЗаголовок = НСтр("ru = 'Регистр расчета'") + " " + ПредставлениеРегистра; - ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, + ГруппировкаДетальныеЗаписи = ДетальныеЗаписиПоРегистру(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда @@ -779,7 +787,7 @@ #Область ВертикальныйВариант -Процедура ПодготовитьВертикальныйВариант(ДокументВладелец, Настройки) +Процедура ПодготовитьВертикальныйВариант(ДокументВладелец, Настройки, ЭтоПредопределенныйВариант) Если СвойстваРегистров.Количество() = 0 Тогда Возврат; @@ -809,8 +817,10 @@ НаборДанных.ПредставлениеВидаРегистра, НаборДанных.ИмяРегистра); КонецЕсли; - - ПодготовитьВертикальныйВариантНабораДанных(Настройки, НаборДанных, ЭлементНабораДанных); + + Если ЭтоПредопределенныйВариант Тогда + ПодготовитьВертикальныйВариантНабораДанных(Настройки, НаборДанных, ЭлементНабораДанных); + КонецЕсли; КонецЦикла; @@ -850,7 +860,7 @@ СтруктураНумератора = ЭлементДанных.Нумератор; Заголовок = ПредставлениеВидаРегистра + " " + ПредставлениеРегистра; - ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, Заголовок); + ГруппировкаДетальныеЗаписи = ДетальныеЗаписиПоРегистру(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, Заголовок); Если СтруктураНумератора.Количество() > 0 Тогда @@ -929,7 +939,7 @@ ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр расчета %1'"), ПредставлениеРегистра); - ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, + ГруппировкаДетальныеЗаписи = ДетальныеЗаписиПоРегистру(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); Если СтруктураНумератора.Количество() > 0 Тогда @@ -1019,7 +1029,7 @@ ПользовательскийЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регистр бухгалтерии %1'"), ПредставлениеРегистра); - ГруппировкаДетальныеЗаписи = ДобавитьЭлементСтруктуры(НастройкиКД, + ГруппировкаДетальныеЗаписи = ДетальныеЗаписиПоРегистру(НастройкиКД, ВидРегистра + "_" + ИмяРегистра, ПользовательскийЗаголовок); Если СтруктураСтандартныхРеквизитов.Количество() > 0 Тогда @@ -1162,10 +1172,11 @@ // НаборДанных - НаборДанныхОбъединениеСхемыКомпоновкиДанных, // - НаборДанныхЗапросСхемыКомпоновкиДанных, // - НаборДанныхОбъектСхемыКомпоновкиДанных, -// - Неопределено - -// Поле - Строка - -// Заголовок - Строка - -// ПутьКДанным - Неопределено, Строка - +// - Неопределено +// Поле - Строка +// Заголовок - Строка +// ПутьКДанным - Неопределено +// - Строка // // Возвращаемое значение: // ПолеНабораДанныхСхемыКомпоновкиДанных, ПапкаПолейНабораДанныхСхемыКомпоновкиДанных - Описание @@ -1273,10 +1284,9 @@ КонецПроцедуры -Функция ДобавитьЭлементСтруктуры(НастройкиКД, ИмяГруппировки, ПользовательскийЗаголовок) +Функция ДетальныеЗаписиПоРегистру(НастройкиКД, ИмяГруппировки, ПользовательскийЗаголовок) ГруппировкаПоРегистру = НастройкиКД.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); - ГруппировкаПоРегистру.Имя = ИмяГруппировки; ГруппировкаПоРегистру.ПредставлениеПользовательскойНастройки = ПользовательскийЗаголовок; ГруппировкаПоРегистру.Использование = Истина; @@ -1286,18 +1296,17 @@ СкрытьОтборВТаблицеДвижений(ГруппировкаПоРегистру); - ПолеГруппировкиРегистр = ГруппировкаПоРегистру.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ПолеГруппировкиПоРегистру = ГруппировкаПоРегистру.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ПолеГруппировкиПоРегистру.Использование = Истина; + ПолеГруппировкиПоРегистру.Поле = Новый ПолеКомпоновкиДанных("ИмяРегистра"); + ПолеГруппировкиПоРегистру.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы; + ПолеГруппировкиПоРегистру.ТипДополнения = ТипДополненияПериодаКомпоновкиДанных.БезДополнения; - ПолеГруппировкиРегистр.Использование = Истина; - ПолеГруппировкиРегистр.Поле = Новый ПолеКомпоновкиДанных("ИмяРегистра"); - ПолеГруппировкиРегистр.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы; - ПолеГруппировкиРегистр.ТипДополнения = ТипДополненияПериодаКомпоновкиДанных.БезДополнения; + ДетальныеЗаписиПоРегистру = ГруппировкаПоРегистру.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + ДетальныеЗаписиПоРегистру.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); + ДетальныеЗаписиПоРегистру.Использование = Истина; - ДетальныеЗаписи = ГруппировкаПоРегистру.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); - ДетальныеЗаписи.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); - ДетальныеЗаписи.Использование = Истина; - - Возврат ДетальныеЗаписи; + Возврат ДетальныеЗаписиПоРегистру; КонецФункции @@ -1414,14 +1423,13 @@ ЗаполнитьПримечания(Настройки); - ПолноеИмяРегистра = Неопределено; + ПолноеИмяРегистра = Неопределено; Для НомерСтроки = 1 По ДокументРезультат.ВысотаТаблицы Цикл Для НомерКолонки = 1 По 2 Цикл // поиск заголовка таблицы в первых двух колонках - ИмяОбласти = "R" + Формат(НомерСтроки, "ЧГ=0") + "C" + Формат(НомерКолонки, "ЧГ=0"); - Область = ДокументРезультат.Область(ИмяОбласти); + Область = ДокументРезультат.Область(НомерСтроки, НомерКолонки); СвойстваРегистра = СвойстваРегистра(Область.Текст); Если СвойстваРегистра = Неопределено Тогда @@ -1444,8 +1452,7 @@ Прервать; КонецЦикла; - ИмяОбластиНумератора = "R" + Формат(НомерСтроки, "ЧГ=0") + "C1"; - ОбластьНумератора = ДокументРезультат.Область(ИмяОбластиНумератора); + ОбластьНумератора = ДокументРезультат.Область(НомерСтроки, 1); Если Не ЭтоЧисло(ОбластьНумератора.Текст) Тогда @@ -1460,7 +1467,9 @@ ОбластьНумератора.Отступ = 0; ОбластьНумератора.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; - Если ПолноеИмяРегистра = Неопределено Тогда + Если ПолноеИмяРегистра = Неопределено + Или Примечания = Неопределено Тогда + Продолжить; КонецЕсли; @@ -1688,21 +1697,21 @@ // регистратором которого является документ-владелец. // // Возвращаемое значение: -// ТаблицаЗначений - где: -// * Приоритет - Число - -// * ПолноеИмяРегистра - Строка - -// * ИмяГруппировки - Строка - -// * ИмяРегистра - Строка - -// * ПредставлениеРегистра - Строка - -// * ВидРегистра - Строка - -// * ВидРегистраНакопления - Строка - -// * ПредставлениеВидаРегистра - Строка - -// * ПериодичностьРегистраРасчета - Строка - -// * ПериодичностьРегистраСведений - Строка - -// * РежимЗаписиРегистраСведений - Строка - -// * ИмяПоляРегистратора - Строка - -// * КоличествоЗаписей - Число - -// * ЗаголовокТаблицы - Строка - +// ТаблицаЗначений: +// * Приоритет - Число +// * ПолноеИмяРегистра - Строка +// * ИмяГруппировки - Строка +// * ИмяРегистра - Строка +// * ПредставлениеРегистра - Строка +// * ВидРегистра - Строка +// * ВидРегистраНакопления - Строка +// * ПредставлениеВидаРегистра - Строка +// * ПериодичностьРегистраРасчета - Строка +// * ПериодичностьРегистраСведений - Строка +// * РежимЗаписиРегистраСведений - Строка +// * ИмяПоляРегистратора - Строка +// * КоличествоЗаписей - Число +// * ЗаголовокТаблицы - Строка // Функция ПалитраСвойствРегистров() @@ -1737,7 +1746,7 @@ Процедура ЗаполнитьПримечания(Настройки) - Если КлючТекущегоВарианта <> "Дополнительный" Тогда + Если КлючРодительскогоВарианта <> "Дополнительный" Тогда Возврат; КонецЕсли; @@ -1745,36 +1754,36 @@ Для Каждого СвойстваРегистра Из СвойстваРегистров Цикл - ВыбранныеГруппыПолей = Новый Массив; + ГруппыВыбранныхПолей = Новый Массив; Группировки = Настройки.Структура; - НайтиГруппировкуРекурсивно(Группировки, ВыбранныеГруппыПолей, СвойстваРегистра.ИмяГруппировки); + НайтиГруппыВыбранныхПолей(Группировки, ГруппыВыбранныхПолей, СвойстваРегистра.ИмяГруппировки); ПолеНумератора = Новый ПолеКомпоновкиДанных("Нумератор"); - ЭтажностьСтроки = ЭтажностьСтроки(ПолеНумератора, ВыбранныеГруппыПолей); + ЭтажностьСтроки = ЭтажностьСтроки(ПолеНумератора, ГруппыВыбранныхПолей); Для Индекс = 0 По ЭтажностьСтроки - 1 Цикл ТекстПримечания = ""; - Для Каждого ВыбраннаяГруппа Из ВыбранныеГруппыПолей Цикл - Если ВыбраннаяГруппа.Поле = ПолеНумератора Тогда + Для Каждого ГруппаПолей Из ГруппыВыбранныхПолей Цикл + Если ГруппаПолей.Поле = ПолеНумератора Тогда Продолжить; КонецЕсли; Заголовок = ""; - Если ВыбраннаяГруппа.Заголовок = НСтр("ru = 'Стандартные реквизиты'") Тогда + Если ГруппаПолей.Заголовок = НСтр("ru = 'Стандартные реквизиты'") Тогда Заголовок = НСтр("ru = 'Стандартный реквизит'"); - ИначеЕсли ВыбраннаяГруппа.Заголовок = НСтр("ru = 'Измерения'") Тогда + ИначеЕсли ГруппаПолей.Заголовок = НСтр("ru = 'Измерения'") Тогда Заголовок = НСтр("ru = 'Измерение'"); - ИначеЕсли ВыбраннаяГруппа.Заголовок = НСтр("ru = 'Ресурсы'") Тогда + ИначеЕсли ГруппаПолей.Заголовок = НСтр("ru = 'Ресурсы'") Тогда Заголовок = НСтр("ru = 'Ресурс'"); - ИначеЕсли ВыбраннаяГруппа.Заголовок = НСтр("ru = 'Реквизиты'") Тогда + ИначеЕсли ГруппаПолей.Заголовок = НСтр("ru = 'Реквизиты'") Тогда Заголовок = НСтр("ru = 'Реквизит'"); - ИначеЕсли ВыбраннаяГруппа.Заголовок = НСтр("ru = 'Данные расчета'") Тогда + ИначеЕсли ГруппаПолей.Заголовок = НСтр("ru = 'Данные расчета'") Тогда Заголовок = НСтр("ru = 'Данные расчета'"); КонецЕсли; - Элементы = ВыбраннаяГруппа.Элементы; // КоллекцияВыбранныхПолейКомпоновкиДанных + Элементы = ГруппаПолей.Элементы; // КоллекцияВыбранныхПолейКомпоновкиДанных Если Индекс <= Элементы.Количество() - 1 Тогда ВыбранноеПоле = Элементы[Индекс]; // ВыбранноеПолеКомпоновкиДанных @@ -1806,11 +1815,11 @@ // для нумерованных строк вертикального варианта отчета. // // Возвращаемое значение: -// ТаблицаЗначений - где: -// * ПолноеИмяРегистра - Строка - -// * Примечание - Строка - -// * Этаж - Строка - -// * Этажность - Число - +// ТаблицаЗначений: +// * ПолноеИмяРегистра - Строка +// * Примечание - Строка +// * Этаж - Строка +// * Этажность - Число // Функция ПалитраСвойствПримечаний() @@ -1832,7 +1841,6 @@ ЭтажностьСтроки = 0; Для Каждого ВыбраннаяГруппа Из МассивВыбранныхПолей Цикл - Если ВыбраннаяГруппа.Поле = ПолеНумератора Тогда Элементы = ВыбраннаяГруппа.Элементы; Для Каждого Элемент Из Элементы Цикл @@ -1841,7 +1849,6 @@ КонецЕсли; КонецЦикла; КонецЕсли; - КонецЦикла; Возврат ЭтажностьСтроки; @@ -1852,16 +1859,74 @@ #Область Прочее +Функция КлючРодительскогоВарианта(Контекст, КлючВарианта, Настройки) + + КлючРодительскогоВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Настройки.ДополнительныеСвойства, "КлючРодительскогоВарианта"); + + Если КлючРодительскогоВарианта <> Неопределено Тогда + Возврат КлючРодительскогоВарианта; + КонецЕсли; + + КлючПредопределенногоВарианта = КлючПредопределенногоВарианта(КлючВарианта); + + ВариантОтчета = Неопределено; + Если ТипЗнч(Контекст) = Тип("ФормаКлиентскогоПриложения") Тогда + ВариантОтчета = Контекст.НастройкиОтчета.ВариантСсылка; + ИначеЕсли ТипЗнч(Контекст) = Тип("Структура") Тогда + ВариантОтчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "СсылкаВарианта"); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ВариантОтчета) Тогда + Возврат КлючПредопределенногоВарианта; + КонецЕсли; + + РодительВариантаОтчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВариантОтчета, "Родитель"); + + Если Не ЗначениеЗаполнено(РодительВариантаОтчета) Тогда + Возврат КлючПредопределенногоВарианта; + КонецЕсли; + + Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РодительВариантаОтчета, "КлючВарианта"); + +КонецФункции + +Функция КлючПредопределенногоВарианта(КлючВарианта) + + КлючПредопределенногоВарианта = Неопределено; + + ВариантыНастроек = СхемаКомпоновкиДанных.ВариантыНастроек; + + Для Каждого ВариантНастроек Из ВариантыНастроек Цикл + + Если ВариантНастроек.Имя = КлючВарианта Тогда + КлючПредопределенногоВарианта = КлючВарианта; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если КлючПредопределенногоВарианта <> Неопределено Тогда + Возврат КлючПредопределенногоВарианта; + КонецЕсли; + + Возврат ВариантыНастроек[0].Имя; + +КонецФункции + // Возвращает коллекцию регистров, на которые текущий пользователь имеет право. // // Параметры: -// Регистратор - ДокументСсылка - -// Движения - КоллекцияДвижений, Неопределено - +// Регистратор - ДокументСсылка +// Движения - КоллекцияДвижений +// - Неопределено // // Возвращаемое значение: -// Соответствие - где: -// * Ключ - ОбъектМетаданныхРегистрСведений, ОбъектМетаданныхРегистрНакопления, ОбъектМетаданныхРегистрРасчета - -// * Значение - Строка - +// Соответствие: +// * Ключ - ОбъектМетаданныхРегистрСведений +// - ОбъектМетаданныхРегистрНакопления +// - ОбъектМетаданныхРегистрРасчета +// * Значение - Строка // Функция РегистрыСДвижениямиДокумента(Регистратор, Движения = Неопределено) @@ -2122,35 +2187,42 @@ КонецФункции -// Описание -// // Параметры: -// КоллекцияЭлементов - КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных - -// - КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных - -// - КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных - -// ВыбранныеПоляГруппировок - Массив из ВыбранноеПолеКомпоновкиДанных - -// ЗначениеПоиска - Строка - +// ЭлементыСтруктуры - КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных +// - КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных +// - КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных +// ВыбранныеПоляГруппировок - Массив из ВыбранноеПолеКомпоновкиДанных +// ЗначениеПоиска - Строка // -Процедура НайтиГруппировкуРекурсивно(КоллекцияЭлементов, ВыбранныеПоляГруппировок, ЗначениеПоиска) +Процедура НайтиГруппыВыбранныхПолей(ЭлементыСтруктуры, ГруппыВыбранныхПолей, ЗначениеПоиска) - Для каждого Элемент Из КоллекцияЭлементов Цикл + Для Каждого Элемент Из ЭлементыСтруктуры Цикл Если ТипЗнч(Элемент) = Тип("ГруппировкаКомпоновкиДанных") Тогда Если Элемент.Имя = ЗначениеПоиска Тогда - Если Элемент.Структура.Количество() > 0 Тогда - ДетальныеЗаписи = Элемент.Структура[0]; // ГруппировкаКомпоновкиДанных - ВыбранныеПоля = ДетальныеЗаписи.Выбор.Элементы; - Для Каждого ВыбранноеПоле Из ВыбранныеПоля Цикл - ВыбранныеПоляГруппировок.Добавить(ВыбранноеПоле); - КонецЦикла; - КонецЕсли; + НайтиГруппыВыбранныхПолейРегистра(Элемент.Структура, ГруппыВыбранныхПолей); КонецЕсли; - НайтиГруппировкуРекурсивно(Элемент.Структура, ВыбранныеПоляГруппировок, ЗначениеПоиска); - ИначеЕсли ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") Тогда - НайтиГруппировкуРекурсивно(Элемент.Строки, ВыбранныеПоляГруппировок, ЗначениеПоиска); - НайтиГруппировкуРекурсивно(Элемент.Колонки, ВыбранныеПоляГруппировок, ЗначениеПоиска); - ИначеЕсли ТипЗнч(Элемент) = Тип("ДиаграммаКомпоновкиДанных") Тогда - НайтиГруппировкуРекурсивно(Элемент.Серии, ВыбранныеПоляГруппировок, ЗначениеПоиска); - НайтиГруппировкуРекурсивно(Элемент.Точки, ВыбранныеПоляГруппировок, ЗначениеПоиска); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// ЭлементыСтруктуры - КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных +// - КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных +// - КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных +// ВыбранныеПоляГруппировок - Массив из ВыбранноеПолеКомпоновкиДанных +// +Процедура НайтиГруппыВыбранныхПолейРегистра(ЭлементыСтруктуры, ГруппыВыбранныхПолей) + + Для Каждого ЭлементСтруктуры Из ЭлементыСтруктуры Цикл + Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") Тогда + Для Каждого ЭлементВыбора Из ЭлементСтруктуры.Выбор.Элементы Цикл + Если ТипЗнч(ЭлементВыбора) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + ГруппыВыбранныхПолей.Добавить(ЭлементВыбора); + КонецЕсли; + КонецЦикла; + + НайтиГруппыВыбранныхПолейРегистра(ЭлементСтруктуры.Структура, ГруппыВыбранныхПолей); КонецЕсли; КонецЦикла; @@ -2167,7 +2239,8 @@ Если ТипЗнч(Элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда ИмяПараметра = Строка(Элемент.Параметр); Если ИмяПараметра = "ДокументВладелец" Тогда - НайденныйПараметр = Элемент; + НайденныйПараметр = Элемент; + Прервать; КонецЕсли; КонецЕсли; КонецЦикла; @@ -2198,6 +2271,7 @@ КонецЕсли; ЗаголовокТаблицы = Лев(ТекстОбласти, ПозицияКоличества - 2); + Возврат СвойстваРегистров.Найти(ЗаголовокТаблицы, "ЗаголовокТаблицы"); КонецФункции diff --git a/SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs index 796e02306..9a97f8566 100644 --- a/SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ДвиженияДокумента/Templates/ПустаяСхемаКомпоновкиДанных/Template.dcs @@ -19,7 +19,7 @@ d4p1:DocumentRef
    - true + false false true Always @@ -119,19 +119,6 @@ - - false - ДоступностьВариантаДляРассылки - true - Inaccessible - 75ac16ba-c451-4a6d-8e82-c39746a6aa8a - - - ru - Этот параметр служебный. Изменять его не рекомендуется. - - - diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl index bc36536ee..f5da13b24 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl @@ -228,7 +228,7 @@ // Параметры: // ТабличныйДокумент - ТабличныйДокумент, в который будет выведено представление операций, // Макет - ТабличныйДокумент, полученный из макета отчета ПредставленияРазрешений, -// ОперацииАдминистрирования - ТаблицаЗначений, см. +// ОперацииАдминистрирования - ТаблицаЗначений - см. // Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОперацииАдминистрированияВЗапросах(). // Процедура СформироватьПредставлениеОпераций(ТабличныйДокумент, Знач Макет, Знач ОперацииАдминистрирования) @@ -364,11 +364,11 @@ Если ТипРазрешения = "FileSystemAccess" Тогда Если Разрешение.Path = "/temp" Тогда - ДополнениеРазрешения.Вставить("Path", НСтр("ru = 'Каталог временных файлов'")); + ДополнениеРазрешения.Вставить("Path", НСтр("ru = 'Папка временных файлов'")); КонецЕсли; Если Разрешение.Path = "/bin" Тогда - ДополнениеРазрешения.Вставить("Path", НСтр("ru = 'Каталог, в который установлен сервер 1С:Предприятия'")); + ДополнениеРазрешения.Вставить("Path", НСтр("ru = 'Папка, в которой установлен сервер 1С:Предприятия'")); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl index 573d822a6..40776b955 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl @@ -17,8 +17,10 @@ // Задать настройки формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, Неопределено - -// КлючВарианта - Строка, Неопределено - +// Форма - ФормаКлиентскогоПриложения +// - Неопределено +// КлючВарианта - Строка +// - Неопределено // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl index 738b75f0d..0516c469f 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl @@ -17,8 +17,10 @@ // Задать настройки формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, Неопределено - -// КлючВарианта - Строка, Неопределено - +// Форма - ФормаКлиентскогоПриложения +// - Неопределено +// КлючВарианта - Строка +// - Неопределено // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl b/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl index af99d51a9..1e6fcf4fa 100644 --- a/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl @@ -68,6 +68,16 @@ #Область СлужебныеПроцедурыИФункции +// Параметры: +// ТаблицаНенужныхФайлов - ТаблицаЗначений: +// * ВладелецФайла - ЛюбаяСсылка +// * ОбъемНенужныхФайлов - Число +// НастройкаОчистки - СтрокаТаблицыЗначений: +// * Действие - ПеречислениеСсылка.ВариантыОчисткиФайлов +// МассивИсключений - Неопределено +// - Массив +// ЭтоНастройкаДляЭлементаСправочника - Булево +// Процедура ПолучитьОбъемНенужныхФайлов(ТаблицаНенужныхФайлов, НастройкаОчистки, МассивИсключений = Неопределено, ЭтоНастройкаДляЭлементаСправочника = Ложь) Если НастройкаОчистки.Действие = Перечисления.ВариантыОчисткиФайлов.НеОчищать Тогда diff --git a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl index f002d89b2..04a0649b0 100644 --- a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl @@ -1838,7 +1838,7 @@ КонецЕсли; ТипыЗначенийВидовДоступа = - УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав().Получить(); + УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав().Получить(); // ТаблицаЗначений Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПостоянныеВидыОграничений", diff --git a/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl b/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl index 58571c26e..b366f0be8 100644 --- a/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl +++ b/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl @@ -16,6 +16,10 @@ // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. // +// Параметры: +// Настройки - см. ВариантыОтчетов.КоллекцияПредопределенныхВариантовОтчетов +// НастройкиОтчета - см. ВариантыОтчетов.ОписаниеВарианта +// Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт НастройкиОтчета.Включен = Ложь; КонецПроцедуры diff --git a/SSL/src/Reports/ПрогрессОбновленияОбластейДанных/ObjectModule.bsl b/SSL/src/Reports/ПрогрессОбновленияОбластейДанных/ObjectModule.bsl new file mode 100644 index 000000000..39460bd4c --- /dev/null +++ b/SSL/src/Reports/ПрогрессОбновленияОбластейДанных/ObjectModule.bsl @@ -0,0 +1,71 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2020, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + ИнформацияПоОбновлению = ИнформацияПоОбновлению(); + + СтандартнаяОбработка = Ложь; + НастройкиКД = КомпоновщикНастроек.ПолучитьНастройки(); + ВнешниеНаборыДанных = Новый Структура("СводнаяИнформация, ОбластиСПроблемами", + ИнформацияПоОбновлению.СводнаяИнформация, ИнформацияПоОбновлению.ИнформацияПоОбработчикам); + + КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКомпоновкиДанных, НастройкиКД, ДанныеРасшифровки); + + ПроцессорКД = Новый ПроцессорКомпоновкиДанных; + ПроцессорКД.Инициализировать(МакетКД, ВнешниеНаборыДанных, ДанныеРасшифровки); + + ПроцессорВыводаРезультатаКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВыводаРезультатаКД.УстановитьДокумент(ДокументРезультат); + ПроцессорВыводаРезультатаКД.Вывести(ПроцессорКД); + + ДокументРезультат.ПоказатьУровеньГруппировокСтрок(2); + + КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ОтчетПустой", ИнформацияПоОбновлению.СводнаяИнформация.Количество() = 0); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ИнформацияПоОбновлению() + + ПрогрессОбновления = ОбновлениеИнформационнойБазы.ПрогрессОбновленияОбластейДанных("Отложенное"); + СводнаяИнформация = Новый ТаблицаЗначений; + СводнаяИнформация.Колонки.Добавить("Обновлено"); + СводнаяИнформация.Колонки.Добавить("Выполняется"); + СводнаяИнформация.Колонки.Добавить("Ожидают"); + СводнаяИнформация.Колонки.Добавить("Проблемы"); + + Строка = СводнаяИнформация.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, ПрогрессОбновления); + + Отбор = Новый Структура; + Отбор.Вставить("РежимВыполнения", "Отложенно"); + Отбор.Вставить("Статус", "Ошибка"); + ИнформацияПоОбработчикам = ОбновлениеИнформационнойБазы.ОбработчикиОбновления(Отбор); + + Результат = Новый Структура; + Результат.Вставить("СводнаяИнформация", СводнаяИнформация); + Результат.Вставить("ИнформацияПоОбработчикам", ИнформацияПоОбработчикам); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ПрогрессОбновленияОбластейДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ПрогрессОбновленияОбластейДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..4972de077 --- /dev/null +++ b/SSL/src/Reports/ПрогрессОбновленияОбластейДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,329 @@ + + + + ИсточникДанных1 + Local + + + СводнаяИнформация + + Обновлено + Обновлено + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обновлено</v8:content> + </v8:item> + + + + Выполняется + Выполняется + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выполняется</v8:content> + </v8:item> + + + + Ожидают + Ожидают + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ожидают</v8:content> + </v8:item> + + + + Проблемы + Проблемы + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проблемы</v8:content> + </v8:item> + + + ИсточникДанных1 + СводнаяИнформация + + + ОбластиСПроблемами + + ОбластьДанных + ОбластьДанных + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Область данных</v8:content> + </v8:item> + + + + ИмяОбработчика + ИмяОбработчика + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обработчик</v8:content> + </v8:item> + + + + ИнформацияОбОшибке + ИнформацияОбОшибке + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Информация об ошибке</v8:content> + </v8:item> + + + + ИмяБиблиотеки + ИмяБиблиотеки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Имя библиотеки</v8:content> + </v8:item> + + + + Статус + Статус + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Статус</v8:content> + </v8:item> + + + + ДлительностьОбработки + ДлительностьОбработки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Длительность обработки</v8:content> + </v8:item> + + + + Версия + Версия + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Версия</v8:content> + </v8:item> + + + + РежимВыполнения + РежимВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Режим выполнения</v8:content> + </v8:item> + + + ИсточникДанных1 + ОбластиСПроблемами + + + Количество + 1 + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество</v8:content> + </v8:item> + + + + Выполняется + Максимум(Выполняется) + + + Обновлено + Максимум(Обновлено) + + + Ожидают + Максимум(Ожидают) + + + Проблемы + Максимум(Проблемы) + + + Количество + Сумма(Количество) + + + Основной + + + ru + Прогресс обновления областей данных + + + + + + false + ТипДиаграммы + Pie + + + + + + Выполняется + + + Обновлено + + + Ожидают + + + Проблемы + + + + + ТипДиаграммы + Pie + + ТипДиаграммы.ВидПодписей + SeriesPercent + + + + Заголовок + + + ru + Сводная информация по областям данных + + + + + + + + + + ОбластьДанных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ОбластьДанных + + + Количество + + + + + + + ОбластьДанных + + + + + + ГоризонтальноеПоложение + Left + + + + + + + + ИмяБиблиотеки + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + Количество + + + + + + ИмяОбработчика + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + ИнформацияОбОшибке + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + + ИмяБиблиотеки + + + ИмяОбработчика + + + ИнформацияОбОшибке + + + ОбластьДанных + + + + + Заголовок + + + ru + Обработчики, завершенные с ошибкой + + + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/ПрогрессОбновленияОбластейДанных/ПрогрессОбновленияОбластейДанных.mdo b/SSL/src/Reports/ПрогрессОбновленияОбластейДанных/ПрогрессОбновленияОбластейДанных.mdo new file mode 100644 index 000000000..ce3695e72 --- /dev/null +++ b/SSL/src/Reports/ПрогрессОбновленияОбластейДанных/ПрогрессОбновленияОбластейДанных.mdo @@ -0,0 +1,22 @@ + + + + + + + ПрогрессОбновленияОбластейДанных + + ru + Прогресс обновления областей данных + + true + Report.ПрогрессОбновленияОбластейДанных.Template.ОсновнаяСхемаКомпоновкиДанных + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + diff --git a/SSL/src/Reports/ПрогрессОтложенногоОбновления/ObjectModule.bsl b/SSL/src/Reports/ПрогрессОтложенногоОбновления/ObjectModule.bsl index 9639fc493..077531657 100644 --- a/SSL/src/Reports/ПрогрессОтложенногоОбновления/ObjectModule.bsl +++ b/SSL/src/Reports/ПрогрессОтложенногоОбновления/ObjectModule.bsl @@ -129,10 +129,11 @@ КонецЦикла; КонецЕсли; - ДанныеПоОбработчикам = ОбработчикиОбновления(); - Для Каждого ДанныеПоОбработчику Из ДанныеПоОбработчикам Цикл - ИмяОбработчика = ДанныеПоОбработчику.Ключ; - Для Каждого ДанныеПоОбъекту Из ДанныеПоОбработчику.Значение.ДанныеОбработчика Цикл + Обработчики = ОбновлениеИнформационнойБазыСлужебный.ОбработчикиДляОтложеннойРегистрацииДанных(); + Для Каждого Обработчик Из Обработчики Цикл + ДанныеПоОбработчику = Обработчик.ОбрабатываемыеДанные.Получить(); + ИмяОбработчика = Обработчик.ИмяОбработчика; + Для Каждого ДанныеПоОбъекту Из ДанныеПоОбработчику.ДанныеОбработчика Цикл ПолноеИмяОбъекта = ДанныеПоОбъекту.Ключ; Очередь = ДанныеПоОбъекту.Значение.Очередь; Количество = ДанныеПоОбъекту.Значение.Количество; @@ -201,15 +202,6 @@ КонецФункции -Функция ОбработчикиОбновления() - - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - ОбрабатываемыеДанные = СведенияОбОбновлении.ОбрабатываемыеДанные; - - Возврат ОбрабатываемыеДанные; - -КонецФункции - #КонецОбласти #Иначе diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/Forms/АвтоисправлениеПроблемы/Module.bsl b/SSL/src/Reports/РезультатыПроверкиУчета/Forms/АвтоисправлениеПроблемы/Module.bsl index 894f089ee..4aa02505c 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/Forms/АвтоисправлениеПроблемы/Module.bsl +++ b/SSL/src/Reports/РезультатыПроверкиУчета/Forms/АвтоисправлениеПроблемы/Module.bsl @@ -106,17 +106,8 @@ Процедура ВосстановитьОтсутствующиеПредопределенныеЭлементы(ИдентификаторПроверки) // 1. Пытаемся найти имеющийся элемент, похожий на предопределенный и привязать его. - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Идентификатор", ИдентификаторПроверки); - Запрос.Текст = - "ВЫБРАТЬ - | ПравилаПроверкиУчета.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета - |ГДЕ - | ПравилаПроверкиУчета.Идентификатор = &Идентификатор"; - Результат = Запрос.Выполнить().Выгрузить(); - ПравилоПроверки = Результат[0].Ссылка; + Результат = ПравилоПроверкиПоИдентификатору(ИдентификаторПроверки); + ПравилоПроверки = Результат.Ссылка; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПравилоПроверки", ПравилоПроверки); @@ -194,10 +185,12 @@ Для Каждого Свойство Из Свойства Цикл Запрос.УстановитьПараметр("Наименование", Свойство.Наименование); Запрос.УстановитьПараметр("Родитель", Свойство.Родитель); - Если Запрос.Выполнить().Пустой() Тогда + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда Продолжить; КонецЕсли; - Ссылка = Запрос.Выполнить().Выгрузить()[0].Ссылка; + РезультатЗапроса = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка");// Массив из ЛюбаяСсылка + Ссылка = РезультатЗапроса[0]; Объект = Ссылка.ПолучитьОбъект(); Объект.ИмяПредопределенныхДанных = Свойство.ИмяПредопределенныхДанных; ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); @@ -210,6 +203,34 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Ссылка - СправочникСсылка.ПравилаПроверкиУчета +// +&НаСервереБезКонтекста +Функция ПравилоПроверкиПоИдентификатору( ИдентификаторПроверки) + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Идентификатор", ИдентификаторПроверки); + Запрос.Текст = + "ВЫБРАТЬ + | ПравилаПроверкиУчета.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета + |ГДЕ + | ПравилаПроверкиУчета.Идентификатор = &Идентификатор"; + Результат = Запрос.Выполнить().Выбрать(); + Результат.Следующий(); + Возврат Новый Структура("Ссылка", Результат.Ссылка); +КонецФункции + +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных +// ПредопределенныеВДанных - ТаблицаЗначений: +// * Ссылка - ЛюбаяСсылка +// Отсутствующие - Массив из ЛюбаяСсылка +// Возвращаемое значение: +// Массив +// &НаСервереБезКонтекста Функция СвойстваОтсутствующихПредопределенных(ОбъектМетаданных, ПредопределенныеВДанных, Отсутствующие) Свойства = Новый Массив; diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl b/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl index 9bf69a802..739398a09 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl +++ b/SSL/src/Reports/РезультатыПроверкиУчета/ManagerModule.bsl @@ -37,6 +37,12 @@ КонецПроцедуры // См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов. +// +// Параметры: +// КомандыОтчетов - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.КомандыОтчетов +// НастройкиФормы - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.Параметры +// СтандартнаяОбработка - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.СтандартнаяОбработка +// Процедура ПередДобавлениемКомандОтчетов(КомандыОтчетов, НастройкиФормы, СтандартнаяОбработка) Экспорт Если Не ПравоДоступа("Просмотр", Метаданные.Отчеты.РезультатыПроверкиУчета) Тогда diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl b/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl index 66ae6e0af..c7e2eb0c4 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl +++ b/SSL/src/Reports/РезультатыПроверкиУчета/ObjectModule.bsl @@ -17,8 +17,10 @@ // Задать настройки формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, Неопределено - -// КлючВарианта - Строка, Неопределено - +// Форма - ФормаКлиентскогоПриложения +// - Неопределено +// КлючВарианта - Строка +// - Неопределено // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт @@ -151,13 +153,16 @@ // По умолчанию не заполнен (это означает что компоновщик инициализирован на основании основной схемы). // Используется для оптимизации, чтобы переинициализировать компоновщик как можно реже. // Может не использоваться если переинициализация выполняется безусловно. -// КлючВарианта - Строка, Неопределено - +// КлючВарианта - Строка +// - Неопределено - // Имя предопределенного или уникальный идентификатор пользовательского варианта отчета. // Неопределено когда вызов для варианта расшифровки или без контекста. -// НовыеНастройкиКД - НастройкиКомпоновкиДанных, Неопределено - +// НовыеНастройкиКД - НастройкиКомпоновкиДанных +// - Неопределено - // Настройки варианта отчета, которые будут загружены в компоновщик настроек после его инициализации. // Неопределено когда настройки варианта не надо загружать (уже загружены ранее). -// НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - +// НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных +// - Неопределено - // Пользовательские настройки, которые будут загружены в компоновщик настроек после его инициализации. // Неопределено когда пользовательские настройки не надо загружать (уже загружены ранее). // @@ -203,8 +208,9 @@ Продолжить; КонецЕсли; - Отбор.ПравоеЗначение.Добавить(Пользователи.ТекущийПользователь()); - Отбор.ПравоеЗначение.Добавить(Справочники.Пользователи.ПустаяСсылка()); + ПравоеЗначениеОтбора = Отбор.ПравоеЗначение;// СписокЗначений + ПравоеЗначениеОтбора.Добавить(Пользователи.ТекущийПользователь()); + ПравоеЗначениеОтбора.Добавить(Справочники.Пользователи.ПустаяСсылка()); Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; Если Пользователи.ЭтоПолноправныйПользователь() Тогда Отбор.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; @@ -320,7 +326,7 @@ ТипСмещенияТабличногоДокумента.ПоВертикали); ДокументРезультат.ФиксацияСверху = 0; - ДокументРезультат.ФиксацияСлева = 0; + ДокументРезультат.ФиксацияСлева = 0; Иначе @@ -496,36 +502,45 @@ КонецПроцедуры Функция ПодготовитьСписокПроверок(МассивПроверок) - СписокПроверок = Новый СписокЗначений; ПервыйЭлемент = МассивПроверок.Получить(0); Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ПервыйЭлемент) Тогда СписокПроверок.ЗагрузитьЗначения(МассивПроверок); Иначе - ТекстЗапроса = - "ВЫБРАТЬ - | Таблица.Ссылка КАК Ссылка, - | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК ПредставлениеСсылки - |ИЗ - | &Таблица КАК Таблица - |ГДЕ - | Таблица.Ссылка В(&МассивСсылок)"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Таблица", ПервыйЭлемент.Метаданные().ПолноеИмя()); - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("МассивСсылок", МассивПроверок); - - РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + РезультатЗапроса = СписокПроверок(МассивПроверок, ПервыйЭлемент); Для Каждого ЭлементРезультата Из РезультатЗапроса Цикл СписокПроверок.Добавить(ЭлементРезультата.Ссылка, ЭлементРезультата.ПредставлениеСсылки); КонецЦикла; - - Запрос = Неопределено; КонецЕсли; Возврат СписокПроверок; +КонецФункции + +// Параметры: +// МассивПроверок - Массив Из ЛюбаяСсылка +// ПервыйЭлемент - ЛюбаяСсылка +// Возвращаемое значение: +// ТаблицаЗначений: +// *Ссылка - ЛюбаяСсылка +// *ПредставлениеСсылки - Строка +// +Функция СписокПроверок(Знач МассивПроверок, ПервыйЭлемент) + ТекстЗапроса = + "ВЫБРАТЬ + | Таблица.Ссылка КАК Ссылка, + | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК ПредставлениеСсылки + |ИЗ + | &Таблица КАК Таблица + |ГДЕ + | Таблица.Ссылка В(&МассивСсылок)"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Таблица", ПервыйЭлемент.Метаданные().ПолноеИмя()); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("МассивСсылок", МассивПроверок); + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Возврат РезультатЗапроса КонецФункции Процедура УстановитьПараметрыДанных(НастройкиКД, СтруктураПараметров) @@ -804,6 +819,12 @@ КонецФункции +// Параметры: +// ПервыйУзелКД - НастройкиКомпоновкиДанных +// ВторойУзелКД - НастройкиКомпоновкиДанных +// Возвращаемое значение: +// Булево +// Функция ВыбранныеПоляИдентичны(ПервыйУзелКД, ВторойУзелКД) ВыбранныеПоляПервогоУзла = ПервыйУзелКД.Выбор.Элементы; @@ -908,6 +929,12 @@ КонецФункции +// Параметры: +// ПерваяГруппировка - ГруппировкаТаблицыКомпоновкиДанных +// ВтораяГруппировка - ГруппировкаТаблицыКомпоновкиДанных +// Возвращаемое значение: +// Булево +// Функция ПоляГруппировокКомпоновкиИдентичны(ПерваяГруппировка, ВтораяГруппировка) ПерваяКоллекцияПолей = ПерваяГруппировка.ПоляГруппировки.Элементы; @@ -943,6 +970,12 @@ КонецФункции +// Параметры: +// ПервыеНастройкиКД - НастройкиКомпоновкиДанных +// ВторыеНастройкиКД - НастройкиКомпоновкиДанных +// Возвращаемое значение: +// Булево +// Функция ПользовательскиеПоляИдентичны(ПервыеНастройкиКД, ВторыеНастройкиКД) Если ПервыеНастройкиКД.ПользовательскиеПоля.Элементы.Количество() <> ВторыеНастройкиКД.ПользовательскиеПоля.Элементы.Количество() Тогда @@ -999,6 +1032,13 @@ КонецФункции +// Возвращаемое значение: +// ДеревоЗначений: +// * УзелКД - КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных +// * Тип - Строка +// * Подтип - Строка +// * ЕстьСтруктура - Булево +// Функция ДеревоСтруктуры() ДеревоСтруктуры = Новый ДеревоЗначений; diff --git a/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index b2468cfe1..f29ed936f 100644 --- a/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/РезультатыПроверкиУчета/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -767,12 +767,6 @@ ИнформацияОПоследнейПроверке - - - РастягиватьПоГоризонтали - true - - @@ -1188,6 +1182,10 @@ ТипЗаголовкаПолей Short + + ВыводитьЗаголовок + DontOutput + diff --git a/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl b/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl index d00f6bf27..a702dc891 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl @@ -48,17 +48,17 @@ // Возвращает значения специализированных параметров универсального отчета. // // Параметры: -// Настройки - НастройкиКомпоновкиДанных - -// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - -// ДоступныеЗначения - Структура - +// Настройки - НастройкиКомпоновкиДанных +// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных +// ДоступныеЗначения - Структура // // Возвращаемое значение: -// Структура - где: -// * Период - СтандартныйПериод - -// * ТипОбъектаМетаданных - Строка - -// * ИмяОбъектаМетаданных - Строка - -// * ИмяТаблицы - Строка - -// * ИсточникДанных - СправочникСсылка.ИдентификаторыОбъектовМетаданных - +// Структура: +// * Период - СтандартныйПериод +// * ТипОбъектаМетаданных - Строка +// * ИмяОбъектаМетаданных - Строка +// * ИмяТаблицы - Строка +// * ИсточникДанных - СправочникСсылка.ИдентификаторыОбъектовМетаданных // Функция ФиксированныеПараметры(Настройки, ПользовательскиеНастройки, ДоступныеЗначения) Экспорт ФиксированныеПараметры = Новый Структура("Период, ИсточникДанных, ТипОбъектаМетаданных, ИмяОбъектаМетаданных, ИмяТаблицы"); @@ -165,10 +165,10 @@ // Устанавливает значения специализированных параметров универсального отчета. // // Параметры: -// Отчет - +// Отчет // ФиксированныеПараметры - см. ФиксированныеПараметры -// Настройки - НастройкиКомпоновкиДанных - -// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - +// Настройки - НастройкиКомпоновкиДанных +// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных // Процедура УстановитьФиксированныеПараметры(Отчет, ФиксированныеПараметры, Настройки, ПользовательскиеНастройки) Экспорт ПараметрыДанных = Настройки.ПараметрыДанных; @@ -257,17 +257,20 @@ | ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода}"; КонецЕсли; - ТекстЗапроса = " - |ВЫБРАТЬ РАЗРЕШЕННЫЕ + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | * |ИЗ - | [ИмяИсточника] [ОтборИсточника] - |"; - ВыраженияТекстаЗапроса = Новый Структура; - ВыраженияТекстаЗапроса.Вставить("ИмяИсточника", ИмяИсточника); - ВыраженияТекстаЗапроса.Вставить("ОтборИсточника", ОтборИсточника); + | &ИмяИсточника КАК Таблица"; - Возврат СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ТекстЗапроса, ВыраженияТекстаЗапроса); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК Таблица", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяИсточника", ИмяИсточника); + + Если ЗначениеЗаполнено(ОтборИсточника) Тогда + ТекстЗапроса = ТекстЗапроса + ОтборИсточника; + КонецЕсли; + + Возврат ТекстЗапроса; КонецФункции Функция ДоступныеТипыОбъектовМетаданных() @@ -435,6 +438,8 @@ ДобавитьИтогиОбъекта(ПараметрыОтчета, СхемаКомпоновкиДанных); КонецЕсли; + ДобавитьИтогиКоличестваПодчиненныхЗаписей(СхемаКомпоновкиДанных); + КонецПроцедуры Процедура ДобавитьИтогиОбъекта(Знач ПараметрыОтчета, Знач СхемаКомпоновкиДанных) @@ -717,13 +722,34 @@ КонецПроцедуры +Процедура ДобавитьИтогиКоличестваПодчиненныхЗаписей(СхемаКомпоновкиДанных) + + ВычисляемоеПоле = СхемаКомпоновкиДанных.ВычисляемыеПоля.Добавить(); + ВычисляемоеПоле.ПутьКДанным = "КоличествоПодчиненныхЗаписей"; + ВычисляемоеПоле.Заголовок = НСтр("ru = 'Количество записей'"); + ВычисляемоеПоле.Выражение = "1"; + ВычисляемоеПоле.ТипЗначения = Новый ОписаниеТипов("Число"); + + ОформлениеПоля = ВычисляемоеПоле.Оформление.Элементы; + ИдентификаторыПараметров = СтрРазделить("МинимальнаяШирина, МаксимальнаяШирина", ", ", Ложь); + + Для Каждого Идентификатор Из ИдентификаторыПараметров Цикл + Параметр = ОформлениеПоля.Найти(Идентификатор); + Параметр.Значение = 12; + Параметр.Использование = Истина; + КонецЦикла; + + ДобавитьПолеИтога(СхемаКомпоновкиДанных, "КоличествоПодчиненныхЗаписей"); + +КонецПроцедуры + // Добавляет период в поля набора данных. // // Параметры: -// НаборДанных - НаборДанныхЗапросСхемыКомпоновкиДанных - +// НаборДанных - НаборДанныхЗапросСхемыКомпоновкиДанных // // Возвращаемое значение: -// СписокЗначений - Описание +// СписокЗначений // Функция ДобавитьПоляПериодаВНаборДанных(НаборДанных) @@ -765,16 +791,16 @@ // Добавить поле в набор данных. // // Параметры: -// НаборДанных - НаборДанныхЗапросСхемыКомпоновкиДанных - -// Поле - Строка - -// Заголовок - Строка - -// ПутьКДанным - Неопределено - -// - Строка - +// НаборДанных - НаборДанныхЗапросСхемыКомпоновкиДанных +// Поле - Строка +// Заголовок - Строка +// ПутьКДанным - Неопределено +// - Строка // // Возвращаемое значение: -// ПолеНабораДанныхСхемыКомпоновкиДанных - +// ПолеНабораДанныхСхемыКомпоновкиДанных // -Функция ДобавитьПолеНабораДанных(НаборДанных, Поле, Заголовок, ПутьКДанным = Неопределено) +Функция ДобавитьПолеНабораДанных(НаборДанных, Поле, Заголовок = "", ПутьКДанным = Неопределено) Если ПутьКДанным = Неопределено Тогда ПутьКДанным = Поле; @@ -798,6 +824,7 @@ ПолеИтога = СхемаКомпоновкиДанных.ПоляИтога.Добавить(); ПолеИтога.ПутьКДанным = ПутьКДанным; ПолеИтога.Выражение = Выражение; + Возврат ПолеИтога; КонецФункции @@ -806,7 +833,7 @@ // // Параметры: // ПараметрыОтчета - см. ФиксированныеПараметры -// НастройкиКД - НастройкиКомпоновкиДанных - +// НастройкиКД - НастройкиКомпоновкиДанных // Процедура ДобавитьПоказатели(ПараметрыОтчета, НастройкиКД) @@ -1075,10 +1102,10 @@ // Устанавливает настройки по умолчанию. // // Параметры: -// Отчет - ОтчетОбъект - +// Отчет - ОтчетОбъект // ФиксированныеПараметры - см. ФиксированныеПараметры -// Настройки - НастройкиКомпоновкиДанных - -// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - +// Настройки - НастройкиКомпоновкиДанных +// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных // Процедура УстановитьСтандартныеНастройки(Отчет, ФиксированныеПараметры, Настройки, ПользовательскиеНастройки) Экспорт ОтчетИнициализирован = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( @@ -1108,10 +1135,10 @@ // Возвращает загружаемую схему компоновки данных. // // Параметры: -// ЗагруженнаяСхема - ДвоичныеДанные - +// ЗагруженнаяСхема - ДвоичныеДанные // // Возвращаемое значение: -// СхемаКомпоновкиДанных - +// СхемаКомпоновкиДанных // Функция ИзвлечьСхемуИзДвоичныхДанных(ЗагруженнаяСхема) Экспорт @@ -1267,7 +1294,7 @@ // например, "Валюты" или "КурсыВалют" и т.д. // // Возвращаемое значение: -// СправочникСсылка.ИдентификаторыОбъектовМетаданных, Неопределено - +// СправочникСсылка.ИдентификаторыОбъектовМетаданных, Неопределено // ссылка на найденный элемент справочника, иначе - Неопределено. // Функция ИсточникДанных(ТипМенеджера, ИмяОбъекта) @@ -1318,6 +1345,339 @@ Возврат ?(Типы[ТипМенеджера] = Неопределено, "", Типы[ТипМенеджера]); КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Стандартный заголовок. + +Процедура УстановитьСтандартныйЗаголовокОтчета(Контекст, Настройки, ФиксированныеПараметры, ДоступныеЗначения) Экспорт + + ЗначенияПараметров = ЗначенияПараметровСтандартногоЗаголовка(Контекст, ФиксированныеПараметры, ДоступныеЗначения); + + ПредставлениеПериода = ""; + Если ЗначенияПараметров.Период <> Неопределено Тогда + + Период = ЗначенияПараметров.Период; + ПредставлениеПериода = СтроковыеФункции.ПредставлениеПериодаВТексте(Период.ДатаНачала, Период.ДатаОкончания); + + КонецЕсли; + + Если ЗначенияПараметров.ТипОбъектаМетаданных = Неопределено + И ЗначенияПараметров.ИмяОбъектаМетаданных = Неопределено + И ЗначенияПараметров.ИмяТаблицы = Неопределено Тогда + + Заголовок = Метаданные.Отчеты.УниверсальныйОтчет.Представление(); + + ИначеЕсли ЗначенияПараметров.ИмяТаблицы = Неопределено + И ЗначенияПараметров.Период = Неопределено Тогда + + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Универсальный отчет: %1 ""%2""'"), + ЗначенияПараметров.ТипОбъектаМетаданных, + ЗначенияПараметров.ИмяОбъектаМетаданных); + + ИначеЕсли ЗначенияПараметров.ИмяТаблицы <> Неопределено + И ЗначенияПараметров.Период = Неопределено Тогда + + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Универсальный отчет: %1 ""%2"" - таблица ""%3""'"), + ЗначенияПараметров.ТипОбъектаМетаданных, + ЗначенияПараметров.ИмяОбъектаМетаданных, + ЗначенияПараметров.ИмяТаблицы); + + ИначеЕсли ЗначенияПараметров.ИмяТаблицы = Неопределено + И ЗначенияПараметров.Период <> Неопределено Тогда + + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Универсальный отчет: %1 ""%2"" за %3'"), + ЗначенияПараметров.ТипОбъектаМетаданных, + ЗначенияПараметров.ИмяОбъектаМетаданных, + ПредставлениеПериода); + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Универсальный отчет: %1 ""%2"" - таблица ""%3"" за %4'"), + ЗначенияПараметров.ТипОбъектаМетаданных, + ЗначенияПараметров.ИмяОбъектаМетаданных, + ЗначенияПараметров.ИмяТаблицы, + ПредставлениеПериода); + КонецЕсли; + + ЗаголовокУстановленИнтерактивно = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Настройки.ДополнительныеСвойства, "ЗаголовокУстановленИнтерактивно", Ложь); + + Если Не ЗаголовокУстановленИнтерактивно Тогда + ПараметрЗаголовка = Настройки.ПараметрыВывода.Элементы.Найти("Заголовок"); + ПараметрЗаголовка.Значение = Заголовок; + КонецЕсли; + + Если ТипЗнч(Контекст) = Тип("ФормаКлиентскогоПриложения") + И Контекст.ТипФормыОтчета = ТипФормыОтчета.Основная Тогда + + Контекст.Заголовок = Заголовок; + Контекст.ОтчетНаименованиеТекущегоВарианта = Заголовок; + КонецЕсли; + +КонецПроцедуры + +Функция ЗначенияПараметровСтандартногоЗаголовка(Контекст, ФиксированныеПараметры, ДоступныеЗначения) + + ЗначенияПараметров = Новый Структура("ТипОбъектаМетаданных, ИмяОбъектаМетаданных, ИмяТаблицы, Период"); + + Если ТипЗнч(Контекст) = Тип("ФормаКлиентскогоПриложения") Тогда + АдресСхемы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст.НастройкиОтчета, "АдресСхемы"); + Иначе + АдресСхемы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "АдресСхемы"); + КонецЕсли; + + Схема = ПолучитьИзВременногоХранилища(АдресСхемы); + + Для Каждого Элемент Из ЗначенияПараметров Цикл + + НайденныйПараметр = Схема.Параметры.Найти(Элемент.Ключ); + Если НайденныйПараметр = Неопределено + Или НайденныйПараметр.ОграничениеИспользования Тогда + + Продолжить; + КонецЕсли; + + ЗначениеПараметра = ФиксированныеПараметры[Элемент.Ключ]; + + ДоступныеЗначенияПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ДоступныеЗначения, Элемент.Ключ); + + Если ЗначениеЗаполнено(ЗначениеПараметра) + И ТипЗнч(ДоступныеЗначенияПараметра) = Тип("СписокЗначений") Тогда + + НайденноеЗначение = ДоступныеЗначенияПараметра.НайтиПоЗначению(ЗначениеПараметра); + ЗначенияПараметров[Элемент.Ключ] = НайденноеЗначение.Представление; + Иначе + ЗначенияПараметров[Элемент.Ключ] = ?(ЗначениеЗаполнено(ЗначениеПараметра), ЗначениеПараметра, Неопределено); + КонецЕсли; + КонецЦикла; + + Возврат ЗначенияПараметров; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Количество подчиненных записей в группировках. + +Процедура ВывестиКоличествоПодчиненныхЗаписей(Настройки, Схема, СтандартнаяОбработка) Экспорт + + Если Схема.ВычисляемыеПоля.Найти("КоличествоПодчиненныхЗаписей") = Неопределено Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + ВыводитьКоличествоЗаписей = ВыводитьКоличествоЗаписей(Настройки); + + Для Каждого ЭлементСтруктуры Из Настройки.Структура Цикл + + Если Не ЭлементСтруктуры.Использование Тогда + Продолжить; + КонецЕсли; + + Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") Тогда + + ВывестиКоличествоПодчиненныхЗаписейГруппировки(ЭлементСтруктуры, ВыводитьКоличествоЗаписей); + + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда + + ВывестиКоличествоПодчиненныхЗаписейТаблицы(ЭлементСтруктуры, ВыводитьКоличествоЗаписей); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ВыводитьКоличествоЗаписей(Настройки) + + ВыводитьКоличествоЗаписей = Настройки.ПараметрыДанных.Элементы.Найти("ВыводитьКоличествоПодчиненныхЗаписей"); + + Возврат ВыводитьКоличествоЗаписей <> Неопределено + И ВыводитьКоличествоЗаписей.Значение; + +КонецФункции + +Процедура ВывестиКоличествоПодчиненныхЗаписейГруппировки(Группировка, Выводить) + + ПоляГруппировки = Группировка.ПоляГруппировки.Элементы; + + Если ПоляГруппировки.Количество() > 0 Тогда + + ВыбранныПоля = Группировка.Выбор; + ПолеКоличестваЗаписей = ПолеКоличестваПодчиненныхЗаписей(ВыбранныПоля, ВыбранныПоля.Элементы); + ПолеКоличестваЗаписей.Использование = Выводить; + + Иначе + СкрытьКоличествоЗаписейВДетальныхЗаписях(Группировка); + КонецЕсли; + + Для Каждого ЭлементСтруктуры Из Группировка.Структура Цикл + + Если Не ЭлементСтруктуры.Использование Тогда + Продолжить; + КонецЕсли; + + Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") Тогда + + ВывестиКоличествоПодчиненныхЗаписейГруппировки(ЭлементСтруктуры, Выводить); + + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда + + ВывестиКоличествоПодчиненныхЗаписейТаблицы(ЭлементСтруктуры, Выводить); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ВывестиКоличествоПодчиненныхЗаписейТаблицы(Таблица, Выводить) + + КолонкаКоличестваЗаписей = Неопределено; + + Для Каждого Колонка Из Таблица.Колонки Цикл + + ПоляГруппировки = Колонка.ПоляГруппировки.Элементы; + + Если ПоляГруппировки.Количество() = 0 Тогда + + КолонкаКоличестваЗаписей = Колонка; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Если КолонкаКоличестваЗаписей <> Неопределено Тогда + Возврат; + КонецЕсли; + + КолонкаКоличестваЗаписей = Таблица.Колонки.Добавить(); + + ВыбранныПоля = КолонкаКоличестваЗаписей.Выбор; + ПолеКоличестваЗаписей = ПолеКоличестваПодчиненныхЗаписей(ВыбранныПоля, ВыбранныПоля.Элементы); + ПолеКоличестваЗаписей.Использование = Выводить; + + СкрытьКоличествоЗаписейВДетальныхЗаписяхТаблицы(Таблица.Строки); + +КонецПроцедуры + +Функция ПолеКоличестваПодчиненныхЗаписей(ВыбранныПоля, Элементы) + + ПолеКоличестваЗаписей = Неопределено; + ИскомоеЗначение = Новый ПолеКомпоновкиДанных("КоличествоПодчиненныхЗаписей"); + + Для Каждого Элемент Из Элементы Цикл + + Если ТипЗнч(Элемент) = Тип("ВыбранноеПолеКомпоновкиДанных") Тогда + + Если Элемент.Поле = ИскомоеЗначение Тогда + + ПолеКоличестваЗаписей = Элемент; + Прервать; + + КонецЕсли; + + ИначеЕсли ТипЗнч(Элемент) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + + Если Элемент.Использование Тогда + ПолеКоличестваПодчиненныхЗаписей(ВыбранныПоля, Элемент.Элементы); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Если ПолеКоличестваЗаписей = Неопределено Тогда + + ПолеКоличестваЗаписей = ВыбранныПоля.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ПолеКоличестваЗаписей.Поле = ИскомоеЗначение; + + КонецЕсли; + + Возврат ПолеКоличестваЗаписей; + +КонецФункции + +Процедура СкрытьКоличествоЗаписейВДетальныхЗаписяхТаблицы(Строки) + + Для Каждого Строка Из Строки Цикл + + ПоляГруппировки = Строка.ПоляГруппировки.Элементы; + + Если ПоляГруппировки.Количество() = 0 Тогда + СкрытьКоличествоЗаписейВДетальныхЗаписях(Строка); + Иначе + СкрытьКоличествоЗаписейВДетальныхЗаписяхТаблицы(Строка.Структура); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура СкрытьКоличествоЗаписейВДетальныхЗаписях(ДетальныеЗаписи) + + Поле = Новый ПолеКомпоновкиДанных("КоличествоПодчиненныхЗаписей"); + + ОформлениеКоличестваЗаписей = ОформлениеКоличестваЗаписей(ДетальныеЗаписи, Поле); + + ОформляемоеПоле = ОформлениеКоличестваЗаписей.Поля.Элементы.Добавить(); + ОформляемоеПоле.Поле = Поле; + + УсловиеОформления = ОформлениеКоличестваЗаписей.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + УсловиеОформления.ЛевоеЗначение = Поле; + УсловиеОформления.ВидСРавнения = ВидСравненияКомпоновкиДанных.НеРавно; + УсловиеОформления.ПравоеЗначение = 0; + УсловиеОформления.Использование = Истина; + + ОформлениеКоличестваЗаписей.Оформление.УстановитьЗначениеПараметра("Текст", ""); + + ВариантыИспользования = Новый Структура("ВЗаголовке, ВЗаголовкеОбщегоИтога, + |ВЗаголовкеПолей, ВЗаголовкеПолейРесурсов, ВЗаголовкеПолейРесурсовОбщегоИтога, + |ВОбщемИтоге, ВОтборе, ВПараметрах"); + + Для Каждого Элемент Из ВариантыИспользования Цикл + + ВариантИспользования = "Использовать" + Элемент.Ключ; + ОформлениеКоличестваЗаписей[ВариантИспользования] = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать; + + КонецЦикла; + +КонецПроцедуры + +Функция ОформлениеКоличестваЗаписей(ДетальныеЗаписи, ИскомоеЗначение) + + ОформлениеКоличестваЗаписей = Неопределено; + + ЭлементыОформления = ДетальныеЗаписи.УсловноеОформление.Элементы; + + Для Каждого ЭлементОформления Из ЭлементыОформления Цикл + + ПоляОформления = ЭлементОформления.Поля.Элементы; + + Если ПоляОформления.Количество() > 0 + И ПоляОформления[0].Поле = ИскомоеЗначение Тогда + + ОформлениеКоличестваЗаписей = ЭлементОформления; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Если ОформлениеКоличестваЗаписей = Неопределено Тогда + ОформлениеКоличестваЗаписей = ЭлементыОформления.Добавить(); + КонецЕсли; + + ОформлениеКоличестваЗаписей.Поля.Элементы.Очистить(); + ОформлениеКоличестваЗаписей.Отбор.Элементы.Очистить(); + + Возврат ОформлениеКоличестваЗаписей; + +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl b/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl index 66379190d..128efaca0 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl @@ -17,8 +17,10 @@ // Задать настройки формы отчета. // // Параметры: -// Форма - ФормаКлиентскогоПриложения, Неопределено - -// КлючВарианта - Строка, Неопределено - +// Форма - ФормаКлиентскогоПриложения +// - Неопределено +// КлючВарианта - Строка +// - Неопределено // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт @@ -38,9 +40,9 @@ // См. ОтчетыПереопределяемый.ПриСозданииНаСервере. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - -// Отказ - Булево - -// СтандартнаяОбработка - Булево - +// Форма - ФормаКлиентскогоПриложения +// Отказ - Булево +// СтандартнаяОбработка - Булево // Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт РазрешеноИзменятьВарианты = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( @@ -77,8 +79,8 @@ // См. "Расширение управляемой формы для отчета.ПередЗагрузкойВариантаНаСервере" в синтакс-помощнике. // // Параметры: -// Форма - ФормаКлиентскогоПриложения - Форма отчета. -// Настройки - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. +// Форма - ФормаКлиентскогоПриложения - форма отчета. +// Настройки - НастройкиКомпоновкиДанных - настройки для загрузки в компоновщик настроек. // Процедура ПередЗагрузкойВариантаНаСервере(Форма, Настройки) Экспорт ТекущийКлючСхемы = Неопределено; @@ -130,13 +132,16 @@ // По умолчанию не заполнен (это означает что компоновщик инициализирован на основании основной схемы). // Используется для оптимизации, чтобы переинициализировать компоновщик как можно реже). // Может не использоваться если переинициализация выполняется безусловно. -// КлючВарианта - Строка, Неопределено - +// КлючВарианта - Строка +// - Неопределено - // Имя предопределенного или уникальный идентификатор пользовательского варианта отчета. // Неопределено когда вызов для варианта расшифровки или без контекста. -// Настройки - НастройкиКомпоновкиДанных, Неопределено - +// Настройки - НастройкиКомпоновкиДанных +// - Неопределено - // Настройки варианта отчета, которые будут загружены в компоновщик настроек после его инициализации. // Неопределено когда настройки варианта не надо загружать (уже загружены ранее). -// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - +// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных +// - Неопределено - // Пользовательские настройки, которые будут загружены в компоновщик настроек после его инициализации. // Неопределено когда пользовательские настройки не надо загружать (уже загружены ранее). // @@ -226,6 +231,9 @@ КонецЕсли; КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ДоступныеЗначения", ДоступныеЗначения); + + Отчеты.УниверсальныйОтчет.УстановитьСтандартныйЗаголовокОтчета( + Контекст, Настройки, ФиксированныеПараметры, ДоступныеЗначения); КонецПроцедуры // Вызывается после определения свойств элементов формы, связанных с пользовательскими настройками. @@ -234,7 +242,7 @@ // // Параметры: // ТипФормы - ТипФормыОтчета - см. Синтакс-помощник -// СвойстваЭлементов - см. ОтчетыСервер.СвойстваЭлементовФормыНастроек() +// СвойстваЭлементов - см. ОтчетыСервер.СвойстваЭлементовФормыНастроек // ПользовательскиеНастройки - КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных - элементы актуальных // пользовательских настроек, влияющих на создание связанных элементов формы. // @@ -280,12 +288,38 @@ #КонецОбласти +#Область ОбработчикиСобытий + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + Настройки = КомпоновщикНастроек.ПолучитьНастройки(); + + Отчеты.УниверсальныйОтчет.ВывестиКоличествоПодчиненныхЗаписей(Настройки, СхемаКомпоновкиДанных, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВывода.УстановитьДокумент(ДокументРезультат); + ПроцессорВывода.Вывести(ПроцессорКомпоновки); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Возвращает хеш-сумму двоичных данных. // // Параметры: -// ДвоичныеДанные - ДвоичныеДанные - Данные, от которых считается хеш-сумма. +// ДвоичныеДанные - ДвоичныеДанные - данные, от которых считается хеш-сумма. // Функция ХешДвоичныхДанных(ДвоичныеДанные) ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); diff --git a/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index cf72cbf8e..7e57bcdc3 100644 --- a/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -127,6 +127,21 @@ false Always + + ВыводитьКоличествоПодчиненныхЗаписей + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выводить количество подчиненных записей</v8:content> + </v8:item> + + + xs:boolean + + true + false + Always + Основной @@ -144,11 +159,6 @@ 60febb46-2215-4d7a-ac48-eac4758847c6 - - false - ИсточникДанных - - false ТипОбъектаМетаданных @@ -166,6 +176,12 @@ 733b31cf-f43e-49be-a7f5-4ddb8ff9ecd5 + + ВыводитьКоличествоПодчиненныхЗаписей + true + Normal + a3a6ec07-fa61-401b-9a36-84b845f2f021 + diff --git a/SSL/src/Roles/АдминистраторСистемы/Rights.rights b/SSL/src/Roles/АдминистраторСистемы/Rights.rights index 60256c6c7..05d5927e4 100644 --- a/SSL/src/Roles/АдминистраторСистемы/Rights.rights +++ b/SSL/src/Roles/АдминистраторСистемы/Rights.rights @@ -2435,93 +2435,6 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - true - - - DataAdministration - true - - - UpdateDataBaseConfiguration - true - - - ExclusiveMode - true - - - ActiveUsers - true - - - EventLog - true - - - ThinClient - true - - - WebClient - true - - - ThickClient - true - - - ExternalConnection - true - - - Automation - true - - - TechnicalSpecialistMode - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - SaveUserData - true - - - ConfigurationExtensionsAdministration - true - - - Output - true - - Catalog.ПроизводственныеКалендари @@ -3342,6 +3255,93 @@ true + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + true + + + DataAdministration + true + + + UpdateDataBaseConfiguration + true + + + ExclusiveMode + true + + + ActiveUsers + true + + + EventLog + true + + + ThinClient + true + + + WebClient + true + + + ThickClient + true + + + ExternalConnection + true + + + Automation + true + + + TechnicalSpecialistMode + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + SaveUserData + true + + + ConfigurationExtensionsAdministration + true + + + Output + true + + InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор @@ -4955,6 +4955,65 @@ true + + InformationRegister.ОбработчикиОбновленияОбщихДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском diff --git a/SSL/src/Roles/БазовыеПраваБСП/Rights.rights b/SSL/src/Roles/БазовыеПраваБСП/Rights.rights index 677f39d09..d3793a401 100644 --- a/SSL/src/Roles/БазовыеПраваБСП/Rights.rights +++ b/SSL/src/Roles/БазовыеПраваБСП/Rights.rights @@ -553,6 +553,17 @@ true + + InformationRegister.ОбработчикиОбновления + + Read + true + + + View + true + + CommonForm.ВходВПрограммуЗапрещен @@ -717,6 +728,17 @@ true + + SessionParameter.ВыполняетсяУдалениеОбъектов + + Get + true + + + Set + true + + DataProcessor.ИнформацияПриЗапуске.Command.ИнформацияПриЗапуске diff --git a/SSL/src/Roles/БазовыеПраваВнешнихПользователейБСП/Rights.rights b/SSL/src/Roles/БазовыеПраваВнешнихПользователейБСП/Rights.rights index 1e641777e..768ae1de3 100644 --- a/SSL/src/Roles/БазовыеПраваВнешнихПользователейБСП/Rights.rights +++ b/SSL/src/Roles/БазовыеПраваВнешнихПользователейБСП/Rights.rights @@ -484,6 +484,17 @@ true + + InformationRegister.ОбработчикиОбновления + + Read + true + + + View + true + + CommonForm.ВходВПрограммуЗапрещен @@ -641,6 +652,17 @@ true + + SessionParameter.ВыполняетсяУдалениеОбъектов + + Get + true + + + Set + true + + DataProcessor.ИнформацияПриЗапуске.Command.ИнформацияПриЗапуске diff --git a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights index 25dc808b2..7200adc6f 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights @@ -294,7 +294,7 @@ - InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Command.Настройки + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Command.ДополнительныеНастройки View true diff --git a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights index b74346c26..ec7c76e14 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights @@ -21,37 +21,6 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - Catalog.РассылкиОтчетов.Command.ВыполнитьСейчас @@ -107,6 +76,37 @@ true + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + ДляОбъекта(ПолеОбъекта) // ДляОбъекта(ПолеОбъекта = "") diff --git a/SSL/src/Roles/ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов/Rights.rights new file mode 100644 index 000000000..e8b67e1d3 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов/Rights.rights @@ -0,0 +1,81 @@ + + + false + true + false + + Catalog.СостоянияОригиналовПервичныхДокументов + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов/ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов.mdo b/SSL/src/Roles/ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов/ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..aea13d988 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов/ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов + + ru + Добавление изменение состояний оригиналов первичных документов + + diff --git a/SSL/src/Roles/ИзменениеСостоянийОригиналовПервичныхДокументов/Rights.rights b/SSL/src/Roles/ИзменениеСостоянийОригиналовПервичныхДокументов/Rights.rights new file mode 100644 index 000000000..f64de792b --- /dev/null +++ b/SSL/src/Roles/ИзменениеСостоянийОригиналовПервичныхДокументов/Rights.rights @@ -0,0 +1,47 @@ + + + false + true + false + + InformationRegister.СостоянияОригиналовПервичныхДокументов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Catalog.СостоянияОригиналовПервичныхДокументов + + Read + true + + + View + true + + + InputByString + true + + + + CommonCommand.ЖурналУчетаОригиналовПервичныхДокументов + + View + true + + + diff --git a/SSL/src/Roles/ИзменениеСостоянийОригиналовПервичныхДокументов/ИзменениеСостоянийОригиналовПервичныхДокументов.mdo b/SSL/src/Roles/ИзменениеСостоянийОригиналовПервичныхДокументов/ИзменениеСостоянийОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..c2843a2a7 --- /dev/null +++ b/SSL/src/Roles/ИзменениеСостоянийОригиналовПервичныхДокументов/ИзменениеСостоянийОригиналовПервичныхДокументов.mdo @@ -0,0 +1,8 @@ + + + ИзменениеСостоянийОригиналовПервичныхДокументов + + ru + Изменение состояний оригиналов первичных документов + + diff --git a/SSL/src/Roles/ПолныеПрава/Rights.rights b/SSL/src/Roles/ПолныеПрава/Rights.rights index 1076500fc..37a51de43 100644 --- a/SSL/src/Roles/ПолныеПрава/Rights.rights +++ b/SSL/src/Roles/ПолныеПрава/Rights.rights @@ -3354,45 +3354,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - false - - - UpdateDataBaseConfiguration - false - - - ThickClient - false - - - ExternalConnection - false - - - Automation - false - - - TechnicalSpecialistMode - false - - - ConfigurationExtensionsAdministration - false - - - InteractiveOpenExtDataProcessors - false - - - InteractiveOpenExtReports - false - - Catalog.ПроизводственныеКалендари @@ -3890,6 +3851,29 @@ false + + Catalog.СостоянияОригиналовПервичныхДокументов + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + Catalog.РассылкиОтчетов @@ -4606,6 +4590,45 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + TechnicalSpecialistMode + false + + + ConfigurationExtensionsAdministration + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + Catalog.ЗначенияСвойствОбъектовИерархия @@ -6642,6 +6665,65 @@ false + + InformationRegister.ОбработчикиОбновленияОбщихДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistorySettings + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском diff --git a/SSL/src/Roles/УдалениеДанныхOData/Rights.rights b/SSL/src/Roles/УдалениеДанныхOData/Rights.rights index 5081e140b..0de499b56 100644 --- a/SSL/src/Roles/УдалениеДанныхOData/Rights.rights +++ b/SSL/src/Roles/УдалениеДанныхOData/Rights.rights @@ -237,6 +237,17 @@ true + + InformationRegister.НеудаленныеОбъекты + + Read + true + + + Update + true + + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма @@ -487,6 +498,17 @@ true + + InformationRegister.СостоянияОригиналовПервичныхДокументов + + Read + true + + + Update + true + + Constant.ДнейДоСкрытияПерсональныхДанныхСубъектов @@ -1593,6 +1615,25 @@ true + + Catalog.СостоянияОригиналовПервичныхДокументов + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + InformationRegister.ОбновлениеКлючейДоступаПользователей @@ -1813,6 +1854,17 @@ true + + Constant.ПроверятьИспользованиеУдаляемыхОбъектов + + Read + true + + + Update + true + + Constant.ЗаголовокСистемы @@ -2290,6 +2342,17 @@ true + + InformationRegister.УдаляемыеОбъекты + + Read + true + + + Update + true + + Catalog.ВстречаПрисоединенныеФайлы @@ -2574,6 +2637,17 @@ true + + Constant.ИспользоватьУчетОригиналовПервичныхДокументов + + Read + true + + + Update + true + + Document.ЭлектронноеПисьмоВходящее diff --git a/SSL/src/Roles/ЧтениеСостоянийОригиналовПервичныхДокументов/Rights.rights b/SSL/src/Roles/ЧтениеСостоянийОригиналовПервичныхДокументов/Rights.rights new file mode 100644 index 000000000..15b530747 --- /dev/null +++ b/SSL/src/Roles/ЧтениеСостоянийОригиналовПервичныхДокументов/Rights.rights @@ -0,0 +1,32 @@ + + + false + true + false + + InformationRegister.СостоянияОригиналовПервичныхДокументов + + Read + true + + + View + true + + + + Catalog.СостоянияОригиналовПервичныхДокументов + + Read + true + + + View + true + + + InputByString + true + + + diff --git a/SSL/src/Roles/ЧтениеСостоянийОригиналовПервичныхДокументов/ЧтениеСостоянийОригиналовПервичныхДокументов.mdo b/SSL/src/Roles/ЧтениеСостоянийОригиналовПервичныхДокументов/ЧтениеСостоянийОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..4cb001936 --- /dev/null +++ b/SSL/src/Roles/ЧтениеСостоянийОригиналовПервичныхДокументов/ЧтениеСостоянийОригиналовПервичныхДокументов.mdo @@ -0,0 +1,8 @@ + + + ЧтениеСостоянийОригиналовПервичныхДокументов + + ru + Чтение состояний оригиналов первичных документов + + diff --git a/SSL/src/ScheduledJobs/ИсправлениеУстаревшихАдресов/Schedule.schedule b/SSL/src/ScheduledJobs/ИсправлениеУстаревшихАдресов/Schedule.schedule new file mode 100644 index 000000000..09a29cf19 --- /dev/null +++ b/SSL/src/ScheduledJobs/ИсправлениеУстаревшихАдресов/Schedule.schedule @@ -0,0 +1,16 @@ + + + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/ИсправлениеУстаревшихАдресов/ИсправлениеУстаревшихАдресов.mdo b/SSL/src/ScheduledJobs/ИсправлениеУстаревшихАдресов/ИсправлениеУстаревшихАдресов.mdo new file mode 100644 index 000000000..2dcca2739 --- /dev/null +++ b/SSL/src/ScheduledJobs/ИсправлениеУстаревшихАдресов/ИсправлениеУстаревшихАдресов.mdo @@ -0,0 +1,12 @@ + + + ИсправлениеУстаревшихАдресов + + ru + Исправление устаревших адресов + + CommonModule.УправлениеКонтактнойИнформациейСлужебный.ИсправлениеУстаревшихАдресов + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/ОтключениеПроверкиИспользованияУдаляемыхОбъектов/Schedule.schedule b/SSL/src/ScheduledJobs/ОтключениеПроверкиИспользованияУдаляемыхОбъектов/Schedule.schedule new file mode 100644 index 000000000..653ff621a --- /dev/null +++ b/SSL/src/ScheduledJobs/ОтключениеПроверкиИспользованияУдаляемыхОбъектов/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/ОтключениеПроверкиИспользованияУдаляемыхОбъектов/ОтключениеПроверкиИспользованияУдаляемыхОбъектов.mdo b/SSL/src/ScheduledJobs/ОтключениеПроверкиИспользованияУдаляемыхОбъектов/ОтключениеПроверкиИспользованияУдаляемыхОбъектов.mdo new file mode 100644 index 000000000..7faf25fc0 --- /dev/null +++ b/SSL/src/ScheduledJobs/ОтключениеПроверкиИспользованияУдаляемыхОбъектов/ОтключениеПроверкиИспользованияУдаляемыхОбъектов.mdo @@ -0,0 +1,13 @@ + + + ОтключениеПроверкиИспользованияУдаляемыхОбъектов + + ru + Отключение проверки использования удаляемых объектов + + CommonModule.УдалениеПомеченныхОбъектовСлужебный.ПроверкаАктивностиСеансаУдаленияОбъектов + ПроверкаАктивностиСеансаУдаленияОбъектов + true + 3 + 25 + diff --git a/SSL/src/SessionParameters/ВыполняетсяУдалениеОбъектов/ВыполняетсяУдалениеОбъектов.mdo b/SSL/src/SessionParameters/ВыполняетсяУдалениеОбъектов/ВыполняетсяУдалениеОбъектов.mdo new file mode 100644 index 000000000..a9fd842bc --- /dev/null +++ b/SSL/src/SessionParameters/ВыполняетсяУдалениеОбъектов/ВыполняетсяУдалениеОбъектов.mdo @@ -0,0 +1,11 @@ + + + ВыполняетсяУдалениеОбъектов + + ru + Выполняется удаление объектов + + + Boolean + + diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl index 00e25870d..737fb28a6 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl @@ -262,11 +262,11 @@ // Обработчик оповещения вопроса. // // Параметры: -// Ответ - КодВозвратаДиалога - -// ДополнительныеПараметры - Структура - где: -// * Вариант - ДанныеФормыЭлементДерева - где: -// ** Ссылка - СправочникСсылка.ВариантыОтчетов - -// ** ИндексКартинки - Число - +// Ответ - КодВозвратаДиалога +// ДополнительныеПараметры - Структура: +// * Вариант - ДанныеФормыЭлементДерева: +// ** Ссылка - СправочникСсылка.ВариантыОтчетов +// ** ИндексКартинки - Число // &НаКлиенте Процедура ДеревоВариантовОтчетаПередУдалениемЗавершение(Ответ, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl index aae622b0c..f2aa2227e 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl @@ -63,7 +63,8 @@ ТаблицаКД = ТаблицаКД(ЭтотОбъект); ДоступноеПолеКД = ТаблицаКД.НайтиПоле(ПолеКД); Если ДоступноеПолеКД <> Неопределено Тогда - Элементы[ИмяТаблицы + "Таблица"].ТекущаяСтрока = ТаблицаКД.ПолучитьИдентификаторПоОбъекту(ДоступноеПолеКД); + СписокПолей = Элементы[ИмяТаблицы + "Таблица"]; // ТаблицаФормы + СписокПолей.ТекущаяСтрока = ТаблицаКД.ПолучитьИдентификаторПоОбъекту(ДоступноеПолеКД); КонецЕсли; КонецЕсли; diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl index 42face747..f587f3b6b 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl @@ -33,7 +33,7 @@ // Обработчик нажатия на гиперссылку. // // Параметры: -// Элемент - ДекорацияФормы - +// Элемент - ДекорацияФормы // &НаКлиенте Процедура Подключаемый_ВариантНажатие(Элемент) @@ -95,52 +95,10 @@ ТаблицаВывода.Колонки.Добавить("ЭлементНадоОставить", Новый ОписаниеТипов("Булево")); ТаблицаВывода.Колонки.Добавить("Группа"); - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка, - | ВариантыОтчетов.Отчет, - | ВариантыОтчетов.КлючВарианта, - | ВариантыОтчетов.Наименование КАК Наименование, - | ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.ПредопределенныйВариант.Описание КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) - | КОНЕЦ КАК Описание, - | ВариантыОтчетов.Автор, - | ВариантыОтчетов.Пользовательский, - | ВариантыОтчетов.ТипОтчета, - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) - | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК Справочник.ИдентификаторыОбъектовМетаданных).Имя - | КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовРасширений) - | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК Справочник.ИдентификаторыОбъектовРасширений).Имя - | КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = ТИП(Справочник.ДополнительныеОтчетыИОбработки) - | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК Справочник.ДополнительныеОтчетыИОбработки).ИмяОбъекта - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК СТРОКА(150)) - | КОНЕЦ КАК ИмяОтчета - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.Отчет = &Отчет - | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | И (ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) - | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - | И ВариантыОтчетов.КлючВарианта <> """" - | - |УПОРЯДОЧИТЬ ПО - | Наименование"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Отчет", ОтчетСсылка); - Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); - Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); - Запрос.Текст = ТекстЗапроса; - ОбщиеНастройки = ВариантыОтчетов.ОбщиеНастройкиПанели(); ПоказыватьПодсказки = ОбщиеНастройки.ПоказыватьПодсказки = 1; - ТаблицаВариантов = Запрос.Выполнить().Выгрузить(); + ТаблицаВариантов = ДоступныеВариантыОтчетов(); Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл // Только другие варианты. Если СтрокаТаблицы.Ссылка = ВариантСсылка Тогда @@ -158,8 +116,10 @@ ПараметрыПоиска.Вставить("Подсистемы", Подсистемы); ПараметрыПоиска.Вставить("ТолькоВидимыеВПанелиОтчетов", Истина); ТаблицаВариантов = ВариантыОтчетов.ТаблицаВариантовОтчетов(ПараметрыПоиска); - - ТаблицаВариантов.Колонки.НаименованиеВарианта.Имя = "Наименование"; + + НайденнаяКолонка = ТаблицаВариантов.Колонки.Найти("НаименованиеВарианта"); + НайденнаяКолонка.Имя = "Наименование"; + ТаблицаВариантов.Сортировать("Наименование"); // Удаление строк, соответствующих текущему (открытому сейчас) варианту. @@ -198,20 +158,106 @@ ЗначениеВРеквизитФормы(ТаблицаВывода, "ВариантыПанели"); КонецПроцедуры +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - СправочникСсылка.ВариантыОтчетов +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - Строка +// * КлючВарианта - Строка +// * Наименование - Строка +// * Описание - Строка +// * Автор - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.Пользователи +// * Пользовательский - Булево +// * ТипОтчета - ПеречислениеСсылка.ТипыОтчетов +// * ИмяОтчета - Строка +// +&НаСервере +Функция ДоступныеВариантыОтчетов() + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.КлючВарианта, + | ВариантыОтчетов.Наименование КАК Наименование, + | ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.ПредопределенныйВариант.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) + | КОНЕЦ КАК Описание, + | ВариантыОтчетов.Автор, + | ВариантыОтчетов.Пользовательский, + | ВариантыОтчетов.ТипОтчета, + | &ИмяОтчета КАК ИмяОтчета + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И НЕ ВариантыОтчетов.ПометкаУдаления + | И (НЕ ВариантыОтчетов.ТолькоДляАвтора + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) + | И ВариантыОтчетов.КлючВарианта <> """" + | И ВариантыОтчетов.Контекст = """" + | + |УПОРЯДОЧИТЬ ПО + | Наименование"); + + ИмяОтчета = "ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК Справочник.ИдентификаторыОбъектовМетаданных).Имя + | КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовРасширений) + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК Справочник.ИдентификаторыОбъектовРасширений).Имя + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК СТРОКА(150)) + | КОНЕЦ"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + + ИмяОтчета = "ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК Справочник.ИдентификаторыОбъектовМетаданных).Имя + | КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовРасширений) + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК Справочник.ИдентификаторыОбъектовРасширений).Имя + | КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = ТИП(Справочник.ДополнительныеОтчетыИОбработки) + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК Справочник.ДополнительныеОтчетыИОбработки).ИмяОбъекта + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК СТРОКА(150)) + | КОНЕЦ"; + + КонецЕсли; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяОтчета", ИмяОтчета); + + Запрос.УстановитьПараметр("Отчет", ОтчетСсылка); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); + Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + // Создает элементы формы, ссылающиеся на вариант отчета. // // Параметры: -// ТаблицаВывода - ТаблицаЗначений - где: -// * ЭлементНадоДобавить - Булево - -// * ЭлементНадоОставить - Булево - -// * Группа - ГруппаФормы - -// Вариант - СтрокаТаблицыЗначений - где: -// * Ссылка - СправочникСсылка.ВариантыОтчетов - -// * ТипОтчета - ПеречислениеСсылка.ТипыОтчетов - -// * Описание - Строка - -// * Автор - СправочникСсылка.ВнешниеПользователи, СправочникСсылка.Пользователи - -// Группа - ГруппаФормы, Неопределено, ПолеФормы, ТаблицаФормы, КнопкаФормы, ДекорацияФормы - -// ПоказыватьПодсказки - Булево - +// ТаблицаВывода - ТаблицаЗначений: +// * ЭлементНадоДобавить - Булево +// * ЭлементНадоОставить - Булево +// * Группа - ГруппаФормы +// Вариант - СтрокаТаблицыЗначений: +// * Ссылка - СправочникСсылка.ВариантыОтчетов +// * ТипОтчета - ПеречислениеСсылка.ТипыОтчетов +// * Описание - Строка +// * Автор - СправочникСсылка.ВнешниеПользователи +// - СправочникСсылка.Пользователи +// Группа - ГруппаФормы +// - Неопределено +// - ПолеФормы +// - ТаблицаФормы +// - КнопкаФормы +// - ДекорацияФормы +// ПоказыватьПодсказки - Булево // &НаСервере Процедура ВывестиГиперссылкуВПанель(ТаблицаВывода, Вариант, Группа, ПоказыватьПодсказки) @@ -235,7 +281,7 @@ ЭлементыСтиля = Метаданные.ЭлементыСтиля; // Добавление надписи-гиперссылки варианта отчета. - Надпись = Элементы.Вставить(СтрокаВывода.НадписьИмя, Тип("ДекорацияФормы"), СтрокаВывода.Группа); + Надпись = Элементы.Вставить(СтрокаВывода.НадписьИмя, Тип("ДекорацияФормы"), СтрокаВывода.Группа); // ДекорацияФормы, РасширениеДекорацииФормыДляНадписи Надпись.Вид = ВидДекорацииФормы.Надпись; Надпись.Гиперссылка = Истина; Надпись.РастягиватьПоГоризонтали = Истина; diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form index 3f95a78ad..c303f4140 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form @@ -2103,6 +2103,40 @@ true + + ЭтоКонтекстныйВариантОтчета + 4 + + Boolean + + + true + + + true + + + + ВариантыКонтекста + 8 + + ValueList + + + true + + + true + + + + String + + 256 + + + + Далее diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl index a1128c5ef..4c62a71f6 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl @@ -15,18 +15,16 @@ ОпределитьПоведениеВМобильномКлиенте(); + ПрототипКлюч = Параметры.КлючТекущихНастроек; + ОтчетИнформация = ВариантыОтчетов.ИнформацияОбОтчете(Параметры.КлючОбъекта, Истина); + Контекст = Новый Структура; Контекст.Вставить("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); Контекст.Вставить("ПолныеПраваНаВарианты", ВариантыОтчетов.ПолныеПраваНаВарианты()); - - ПрототипКлюч = Параметры.КлючТекущихНастроек; - - ОтчетИнформация = ВариантыОтчетов.ИнформацияОбОтчете(Параметры.КлючОбъекта, Истина); - Контекст.Вставить("ОтчетСсылка", ОтчетИнформация.Отчет); - Контекст.Вставить("ОтчетИмя", ОтчетИнформация.ОтчетИмя); - Контекст.Вставить("ТипОтчета", ОтчетИнформация.ТипОтчета); - Контекст.Вставить("ЭтоВнешний", ОтчетИнформация.ТипОтчета = Перечисления.ТипыОтчетов.Внешний); + Контекст.Вставить("ОтчетИмя", ОтчетИнформация.ОтчетИмя); + Контекст.Вставить("ТипОтчета", ОтчетИнформация.ТипОтчета); + Контекст.Вставить("ЭтоВнешний", ОтчетИнформация.ТипОтчета = Перечисления.ТипыОтчетов.Внешний); Контекст.Вставить("ПоискПоНаименованию", Новый Соответствие); ЗаполнитьСписокВариантов(); @@ -59,6 +57,16 @@ ТекущийЭлемент = Элементы.Наименование; ВариантыОтчетовКлиент.ОформитьПользователейВариантаОтчета(ЭтотОбъект, Ложь); + ЭтоКонтекстныйВариантОтчета = ЗначениеЗаполнено(ВладелецФормы.КонтекстВарианта); + + Если ЭтоКонтекстныйВариантОтчета Тогда + Элементы.Назад.Видимость = Ложь; + Элементы.Далее.Видимость = Ложь; + + ВариантыКонтекста = ВладелецФормы.ВариантыКонтекста; + ПодключитьОбработчикОжидания("ЗаполнитьСписокВариантовОтложенно", 0.1, Истина); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -105,7 +113,7 @@ НаименованиеМодифицировано = Истина; УстановитьСценарийСохраненияВарианта(); - ВариантыОтчетовКлиент.ОформитьПользователейВариантаОтчета(ЭтотОбъект); + ВариантыОтчетовКлиент.ОформитьПользователейВариантаОтчета(ЭтотОбъект, Ложь); КонецПроцедуры @@ -209,14 +217,16 @@ &НаКлиенте Процедура ПодобратьПользователей(Команда) - ВариантыОтчетовКлиент.ПодобратьПользователейВариантаОтчета(ЭтотОбъект); + ВариантыОтчетовКлиент.ПодобратьПользователейВариантаОтчета( + ЭтотОбъект, Элементы.ПользователиВариантаГруппаПодобрать.Видимость); КонецПроцедуры &НаКлиенте Процедура ПодобратьГруппыВнешнихПользователей(Команда) - ВариантыОтчетовКлиент.ПодобратьПользователейВариантаОтчета(ЭтотОбъект, Истина); + ВариантыОтчетовКлиент.ПодобратьПользователейВариантаОтчета( + ЭтотОбъект, Элементы.ПользователиВариантаГруппаПодобрать.Видимость, Истина); КонецПроцедуры @@ -392,123 +402,15 @@ //////////////////////////////////////////////////////////////////////////////// // Клиент и сервер -&НаСервере -Процедура УстановитьСценарийСохраненияВарианта() - - БудетЗаписанНовый = Ложь; - БудетПерезаписанСуществующий = Ложь; - ПерезаписьНевозможна = Ложь; - - Если НаименованиеМодифицировано Тогда - Поиск = Новый Структура("Наименование", Объект.Наименование); - Иначе - Поиск = Новый Структура("КлючВарианта", ПрототипКлюч); - КонецЕсли; - - НайденныеВарианты = ВариантыОтчета.НайтиСтроки(Поиск); - - Если НайденныеВарианты.Количество() = 0 Тогда - - БудетЗаписанНовый = Истина; - ВариантСсылка = Неопределено; - - Если Не ОписаниеМодифицировано Тогда - Объект.Описание = ""; - КонецЕсли; - - Если Не Контекст.ПолныеПраваНаВарианты Тогда - Объект.ТолькоДляАвтора = Истина; - КонецЕсли; - - Иначе - - Вариант = НайденныеВарианты[0]; // ДанныеФормыЭлементКоллекции - ПравоЗаписиВарианта = ПравоЗаписиВарианта(Вариант, Контекст.ПолныеПраваНаВарианты); - - ЗаполнитьПредставления(Вариант.Ссылка); - - Если ПравоЗаписиВарианта Тогда - - БудетПерезаписанСуществующий = Истина; - НаименованиеМодифицировано = Ложь; - Объект.Наименование = Вариант.Наименование; - - ВариантСсылка = Вариант.Ссылка; - Если Контекст.ПолныеПраваНаВарианты Тогда - Объект.ТолькоДляАвтора = Вариант.ТолькоДляАвтора; - Иначе - Объект.ТолькоДляАвтора = Истина; - КонецЕсли; - - Если Не ОписаниеМодифицировано Тогда - Объект.Описание = Вариант.Описание; - КонецЕсли; - - Иначе - - Если НаименованиеМодифицировано Тогда - ПерезаписьНевозможна = Истина; - Иначе - БудетЗаписанНовый = Истина; - Объект.Наименование = СформироватьСвободноеНаименование(Вариант, ВариантыОтчета); - КонецЕсли; - - ВариантСсылка = Неопределено; - Объект.ТолькоДляАвтора = Истина; - - Если Не ОписаниеМодифицировано Тогда - Объект.Описание = ""; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Если НаименованиеМодифицировано Тогда - Поиск = Новый Структура("КодЯзыка", ТекущийЯзык().КодЯзыка); - НайденныеПредставления = Объект.Представления.НайтиСтроки(Поиск); - - Если НайденныеПредставления.Количество() > 0 Тогда - НайденныеПредставления[0].Наименование = Объект.Наименование; - КонецЕсли; - КонецЕсли; - - Доступен = ?(Объект.ТолькоДляАвтора, "ТолькоДляАвтора", "УказаннымПользователям"); - - Если БудетЗаписанНовый Тогда - - Элементы.ЧтоБудетДальше.ТекущаяСтраница = Элементы.Новый; - Элементы.СброситьНастройки.Видимость = Ложь; - Элементы.Далее.Доступность = Истина; - Элементы.Сохранить.Доступность = Истина; - - ИначеЕсли БудетПерезаписанСуществующий Тогда - - Элементы.ЧтоБудетДальше.ТекущаяСтраница = Элементы.Перезапись; - Элементы.СброситьНастройки.Видимость = Истина; - Элементы.Далее.Доступность = Истина; - Элементы.Сохранить.Доступность = Истина; - - ИначеЕсли ПерезаписьНевозможна Тогда - - Элементы.ЧтоБудетДальше.ТекущаяСтраница = Элементы.ПерезаписьНевозможна; - Элементы.СброситьНастройки.Видимость = Ложь; - Элементы.Далее.Доступность = Ложь; - Элементы.Сохранить.Доступность = Ложь; - - КонецЕсли; - -КонецПроцедуры - // Возвращает признак наличия права изменения варианта отчета. // // Параметры: -// Вариант - ДанныеФормыКоллекция - где: -// * Ссылка - СправочникСсылка.ВариантыОтчетов - -// ПолныеПраваНаВарианты - Булево - +// Вариант - ДанныеФормыКоллекция: +// * Ссылка - СправочникСсылка.ВариантыОтчетов +// ПолныеПраваНаВарианты - Булево // // Возвращаемое значение: -// Булево - +// Булево // &НаКлиентеНаСервереБезКонтекста Функция ПравоНастройкиВарианта(Вариант, ПолныеПраваНаВарианты) @@ -527,13 +429,13 @@ // Возвращает уникальное наименование варианта отчета. // // Параметры: -// Вариант - ДанныеФормыКоллекция - где: -// * Ссылка - СправочникСсылка.ВариантыОтчетов - -// * Наименование - Строка - -// ВариантыОтчета - ДанныеФормыКоллекция - +// Вариант - ДанныеФормыКоллекция: +// * Ссылка - СправочникСсылка.ВариантыОтчетов +// * Наименование - Строка +// ВариантыОтчета - ДанныеФормыКоллекция // // Возвращаемое значение: -// Строка - +// Строка // &НаКлиентеНаСервереБезКонтекста Функция СформироватьСвободноеНаименование(Вариант, ВариантыОтчета) @@ -558,6 +460,15 @@ КонецФункции +&НаКлиенте +Процедура ЗаполнитьСписокВариантовОтложенно() + + Если ВариантыКонтекста.Количество() > 0 Тогда + ЗаполнитьСписокВариантов(); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вызов сервера @@ -732,6 +643,8 @@ ПараметрыПоиска = Новый Структура("Отчеты, ТолькоЛичные", ОтборОтчеты, Истина); ТаблицаВариантов = ВариантыОтчетов.ТаблицаВариантовОтчетов(ПараметрыПоиска); + ОтчетыСервер.ДобавитьВариантыКонтекста(Контекст.ОтчетСсылка, ТаблицаВариантов, ВариантыКонтекста); + // Заполнить автовычисляемые колонки. ВариантыОтчета.Загрузить(ТаблицаВариантов); Для Каждого Вариант Из ВариантыОтчета Цикл @@ -753,6 +666,114 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьСценарийСохраненияВарианта() + + БудетЗаписанНовый = Ложь; + БудетПерезаписанСуществующий = Ложь; + ПерезаписьНевозможна = Ложь; + + Если НаименованиеМодифицировано Тогда + Поиск = Новый Структура("Наименование", Объект.Наименование); + Иначе + Поиск = Новый Структура("КлючВарианта", ПрототипКлюч); + КонецЕсли; + + НайденныеВарианты = ВариантыОтчета.НайтиСтроки(Поиск); + + Если НайденныеВарианты.Количество() = 0 Тогда + + БудетЗаписанНовый = Истина; + ВариантСсылка = Неопределено; + + Если Не ОписаниеМодифицировано Тогда + Объект.Описание = ""; + КонецЕсли; + + Если Не Контекст.ПолныеПраваНаВарианты Тогда + Объект.ТолькоДляАвтора = Истина; + КонецЕсли; + + Иначе + + Вариант = НайденныеВарианты[0]; // ДанныеФормыЭлементКоллекции + ПравоЗаписиВарианта = ПравоЗаписиВарианта(Вариант, Контекст.ПолныеПраваНаВарианты); + + ЗаполнитьПредставления(Вариант.Ссылка); + + Если ПравоЗаписиВарианта Тогда + + БудетПерезаписанСуществующий = Истина; + НаименованиеМодифицировано = Ложь; + Объект.Наименование = Вариант.Наименование; + + ВариантСсылка = Вариант.Ссылка; + Если Контекст.ПолныеПраваНаВарианты Тогда + Объект.ТолькоДляАвтора = Вариант.ТолькоДляАвтора; + Иначе + Объект.ТолькоДляАвтора = Истина; + КонецЕсли; + + Если Не ОписаниеМодифицировано Тогда + Объект.Описание = Вариант.Описание; + КонецЕсли; + + Иначе + + Если НаименованиеМодифицировано Тогда + ПерезаписьНевозможна = Истина; + Иначе + БудетЗаписанНовый = Истина; + Объект.Наименование = СформироватьСвободноеНаименование(Вариант, ВариантыОтчета); + КонецЕсли; + + ВариантСсылка = Неопределено; + Объект.ТолькоДляАвтора = Истина; + + Если Не ОписаниеМодифицировано Тогда + Объект.Описание = ""; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если НаименованиеМодифицировано Тогда + Поиск = Новый Структура("КодЯзыка", ТекущийЯзык().КодЯзыка); + НайденныеПредставления = Объект.Представления.НайтиСтроки(Поиск); + + Если НайденныеПредставления.Количество() > 0 Тогда + НайденныеПредставления[0].Наименование = Объект.Наименование; + КонецЕсли; + КонецЕсли; + + Доступен = ?(Объект.ТолькоДляАвтора, "ТолькоДляАвтора", "УказаннымПользователям"); + + Если БудетЗаписанНовый Тогда + + Элементы.ЧтоБудетДальше.ТекущаяСтраница = Элементы.Новый; + Элементы.СброситьНастройки.Видимость = Ложь; + Элементы.Далее.Доступность = Истина; + Элементы.Сохранить.Доступность = Истина; + + ИначеЕсли БудетПерезаписанСуществующий Тогда + + Элементы.ЧтоБудетДальше.ТекущаяСтраница = Элементы.Перезапись; + Элементы.СброситьНастройки.Видимость = Истина; + Элементы.Далее.Доступность = Истина; + Элементы.Сохранить.Доступность = Истина; + + ИначеЕсли ПерезаписьНевозможна Тогда + + Элементы.ЧтоБудетДальше.ТекущаяСтраница = Элементы.ПерезаписьНевозможна; + Элементы.СброситьНастройки.Видимость = Ложь; + Элементы.Далее.Доступность = Ложь; + Элементы.Сохранить.Доступность = Ложь; + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ЗаполнитьПредставления(Вариант) diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl index 735d654ad..4096fe303 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl @@ -43,11 +43,11 @@ Иначе УзелКДИсточник = УзелКД(ЭтотОбъект); Если УзелКДИсточник = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не найден узел отчета.'"); + ВызватьИсключение НСтр("ru = 'Не существует узел отчета.'"); КонецЕсли; ЭлементКДИсточник = УзелКДИсточник.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); Если ЭлементКДИсточник = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не найден элемент условного оформления.'"); + ВызватьИсключение НСтр("ru = 'Не существует элемент условного оформления.'"); КонецЕсли; ЭлементКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКДИсточник, УзелКД.Элементы, 0, Новый Соответствие); diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl index a06d28d9b..faa1382c1 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl @@ -13,11 +13,11 @@ // Обработчик чтения настроек варианта отчета. // // Параметры: -// КлючОтчета - Строка - Полное имя отчета с точкой. -// КлючВарианта - Строка - Ключ варианта отчета. -// Настройки - Произвольный - Настройки варианта отчета. -// ОписаниеНастроек - ОписаниеНастроек - Дополнительное описание настроек. -// Пользователь - Строка - Имя пользователя ИБ. +// КлючОтчета - Строка - полное имя отчета с точкой. +// КлючВарианта - Строка - ключ варианта отчета. +// Настройки - Произвольный - настройки варианта отчета. +// ОписаниеНастроек - ОписаниеНастроек - дополнительное описание настроек. +// Пользователь - Строка - имя пользователя ИБ. // Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. // Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. // @@ -65,11 +65,12 @@ // Обработчик записи настроек варианта отчета. // // Параметры: -// КлючОтчета - Строка - Полное имя отчета с точкой. -// КлючВарианта - Строка - Ключ варианта отчета. -// Настройки - Произвольный - Настройки варианта отчета. -// ОписаниеНастроек - ОписаниеНастроек - Дополнительное описание настроек. -// Пользователь - Строка, Неопределено - Имя пользователя ИБ. +// КлючОтчета - Строка - полное имя отчета с точкой. +// КлючВарианта - Строка - ключ варианта отчета. +// Настройки - Произвольный - настройки варианта отчета. +// ОписаниеНастроек - ОписаниеНастроек - дополнительное описание настроек. +// Пользователь - Строка +// - Неопределено - имя пользователя ИБ. // Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. // Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. // @@ -109,16 +110,25 @@ Блокировка.Заблокировать(); ВариантОбъект = СсылкаВарианта.ПолучитьОбъект(); - Если ТипЗнч(Настройки) = Тип("НастройкиКомпоновкиДанных") Тогда // Для платформы. + + Если ТипЗнч(Настройки) = Тип("НастройкиКомпоновкиДанных") Тогда Адрес = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Настройки.ДополнительныеСвойства, "Адрес"); Если ТипЗнч(Адрес) = Тип("Строка") И ЭтоАдресВременногоХранилища(Адрес) Тогда Настройки = ПолучитьИзВременногоХранилища(Адрес); КонецЕсли; + + Контекст = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Настройки.ДополнительныеСвойства, "КонтекстВарианта"); + Если ЗначениеЗаполнено(Контекст) Тогда + ВариантОбъект.Контекст = Контекст; + КонецЕсли; КонецЕсли; + ВариантОбъект.Настройки = Новый ХранилищеЗначения(Настройки); + Если ОписаниеНастроек <> Неопределено Тогда ВариантОбъект.Наименование = ОписаниеНастроек.Представление; КонецЕсли; + ВариантОбъект.Записать(); ЗафиксироватьТранзакцию(); @@ -132,10 +142,11 @@ // Обработчик получения описания настроек варианта отчета. // // Параметры: -// КлючОтчета - Строка - Полное имя отчета с точкой. -// КлючВарианта - Строка - Ключ варианта отчета. -// ОписаниеНастроек - ОписаниеНастроек - Дополнительное описание настроек. -// Пользователь - Строка, Неопределено - Имя пользователя ИБ. +// КлючОтчета - Строка - полное имя отчета с точкой. +// КлючВарианта - Строка - ключ варианта отчета. +// ОписаниеНастроек - ОписаниеНастроек - дополнительное описание настроек. +// Пользователь - Строка +// - Неопределено - имя пользователя ИБ. // Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. // Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. // @@ -191,10 +202,10 @@ // Обработчик установки описания настроек варианта отчета. // // Параметры: -// КлючОтчета - Строка - Полное имя отчета с точкой. -// КлючВарианта - Строка - Ключ варианта отчета. -// ОписаниеНастроек - ОписаниеНастроек - Дополнительное описание настроек. -// Пользователь - Строка - Имя пользователя ИБ. +// КлючОтчета - Строка - полное имя отчета с точкой. +// КлючВарианта - Строка - ключ варианта отчета. +// ОписаниеНастроек - ОписаниеНастроек - дополнительное описание настроек. +// Пользователь - Строка - имя пользователя ИБ. // Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. // Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. // @@ -264,6 +275,42 @@ Список = Новый СписокЗначений; #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + ВариантыОтчетовАвтора = ВариантыОтчетовАвтора(КлючОтчета, Пользователь); + + Если ВариантыОтчетовАвтора <> Неопределено Тогда + + Для Каждого Строка Из ВариантыОтчетовАвтора Цикл + Список.Добавить(Строка.КлючВарианта, Строка.Наименование); + КонецЦикла; + + КонецЕсли; + +#КонецЕсли + + Возврат Список; +КонецФункции + +// АПК:361-вкл + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +// Параметры: +// КлючОтчета - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - СправочникСсылка.ИдентификаторыОбъектовРасширений +// - СправочникСсылка.ДополнительныеОтчетыИОбработки +// - Строка +// Автор - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи +// - УникальныйИдентификатор +// +// Возвращаемое значение: +// - Неопределено +// - ТаблицаЗначений: +// * КлючВарианта - Строка +// * Наименование - Строка +// +Функция ВариантыОтчетовАвтора(КлючОтчета, Автор) Если ТипЗнч(КлючОтчета) = Тип("Строка") Тогда ОтчетИнформация = ВариантыОтчетов.ИнформацияОбОтчете(КлючОтчета, Истина); @@ -287,47 +334,49 @@ Запрос.УстановитьПараметр("Отчет", Отчет); - Если Пользователь = "" Тогда - Пользователь = Пользователи.СсылкаНеуказанногоПользователя(); - ИначеЕсли Пользователь = Неопределено Тогда - Пользователь = Пользователи.АвторизованныйПользователь(); + Если Автор = "" Тогда + Автор = Пользователи.СсылкаНеуказанногоПользователя(); + ИначеЕсли Автор = Неопределено Тогда + Автор = Пользователи.АвторизованныйПользователь(); КонецЕсли; - Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда - Запрос.УстановитьПараметр("Автор", Пользователь); + Если ТипЗнч(Автор) = Тип("СправочникСсылка.Пользователи") Тогда + + Запрос.УстановитьПараметр("Автор", Автор); Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Автор.ИдентификаторПользователяИБ = &GUID", ""); Иначе - Если ТипЗнч(Пользователь) = Тип("УникальныйИдентификатор") Тогда - ИдентификаторПользователя = Пользователь; + Если ТипЗнч(Автор) = Тип("УникальныйИдентификатор") Тогда + ИдентификаторПользователя = Автор; Иначе - Если ТипЗнч(Пользователь) = Тип("Строка") Тогда + Если ТипЗнч(Автор) = Тип("Строка") Тогда + УстановитьПривилегированныйРежим(Истина); - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Автор); УстановитьПривилегированныйРежим(Ложь); + Если ПользовательИБ = Неопределено Тогда - Возврат Список; + Возврат Неопределено; КонецЕсли; - ИначеЕсли ТипЗнч(Пользователь) = Тип("ПользовательИнформационнойБазы") Тогда - ПользовательИБ = Пользователь; + + ИначеЕсли ТипЗнч(Автор) = Тип("ПользовательИнформационнойБазы") Тогда + + ПользовательИБ = Автор; Иначе - Возврат Список; + Возврат Неопределено; КонецЕсли; + ИдентификаторПользователя = ПользовательИБ.УникальныйИдентификатор; КонецЕсли; + Запрос.УстановитьПараметр("GUID", ИдентификаторПользователя); Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Автор = &Автор", ""); КонецЕсли; - ТаблицаВариантов = Запрос.Выполнить().Выгрузить(); - Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл - Список.Добавить(СтрокаТаблицы.КлючВарианта, СтрокаТаблицы.Наименование); - КонецЦикла; -#КонецЕсли - - Возврат Список; + Возврат Запрос.Выполнить().Выгрузить(); + КонецФункции -// АПК:361-вкл +#КонецЕсли Процедура Удалить(КлючОтчета, КлючВарианта, Знач Пользователь) Экспорт #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -407,6 +456,14 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +// Параметры: +// ВариантыОтчета - см. ВариантыОтчетов.ТаблицаВариантовОтчетов +// ПолноеИмяОтчета - Строка +// ИмяОтчета - Строка +// +// Возвращаемое значение: +// Булево +// Функция ДобавитьВариантыВнешнегоОтчета(ВариантыОтчета, ПолноеИмяОтчета, ИмяОтчета) Экспорт Попытка ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПолноеИмяОтчета); diff --git a/SSL/src/StyleItems/ДействиеВКолонкеСпискаШрифт/ДействиеВКолонкеСпискаШрифт.mdo b/SSL/src/StyleItems/ДействиеВКолонкеСпискаШрифт/ДействиеВКолонкеСпискаШрифт.mdo new file mode 100644 index 000000000..b09550c26 --- /dev/null +++ b/SSL/src/StyleItems/ДействиеВКолонкеСпискаШрифт/ДействиеВКолонкеСпискаШрифт.mdo @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:StyleItem 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="75561d71-4b06-40fc-8a46-ed5d33c80dea"> + <name>ДействиеВКолонкеСпискаШрифт</name> + <synonym> + <key>ru</key> + <value>Действие в колонке списка шрифт</value> + </synonym> + <type>Font</type> + <value xsi:type="core:FontValue"> + <value xsi:type="core:FontRef"> + <font>Style.NormalTextFont</font> + <bold>false</bold> + <italic>false</italic> + <underline>true</underline> + <strikeout>false</strikeout> + </value> + </value> +</mdclass:StyleItem> diff --git a/SSL/src/StyleItems/ОбразецНастройкиКолонтитуловШрифт/ОбразецНастройкиКолонтитуловШрифт.mdo b/SSL/src/StyleItems/ОбразецНастройкиКолонтитуловШрифт/ОбразецНастройкиКолонтитуловШрифт.mdo new file mode 100644 index 000000000..497248885 --- /dev/null +++ b/SSL/src/StyleItems/ОбразецНастройкиКолонтитуловШрифт/ОбразецНастройкиКолонтитуловШрифт.mdo @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:StyleItem 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="3cf15377-a5bb-4c37-9780-0dbff8d3d5bb"> + <name>ОбразецНастройкиКолонтитуловШрифт</name> + <synonym> + <key>ru</key> + <value>Образец настройки колонтитулов шрифт</value> + </synonym> + <type>Font</type> + <value xsi:type="core:FontValue"> + <value xsi:type="core:FontDef"> + <faceName>Arial</faceName> + <height>20.0</height> + </value> + </value> +</mdclass:StyleItem> diff --git a/SSL/src/StyleItems/ПравоНедействительногоПользователяФон/ПравоНедействительногоПользователяФон.mdo b/SSL/src/StyleItems/ПравоНедействительногоПользователяФон/ПравоНедействительногоПользователяФон.mdo new file mode 100644 index 000000000..5779fc629 --- /dev/null +++ b/SSL/src/StyleItems/ПравоНедействительногоПользователяФон/ПравоНедействительногоПользователяФон.mdo @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:StyleItem 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="46692974-34aa-45e1-8fec-9b36064073cd"> + <name>ПравоНедействительногоПользователяФон</name> + <synonym> + <key>ru</key> + <value>Право недействительного пользователя фон</value> + </synonym> + <value xsi:type="core:ColorValue"> + <value xsi:type="core:ColorRef"> + <color>Web.WhiteSmoke</color> + </value> + </value> +</mdclass:StyleItem> diff --git a/SSL/src/StyleItems/ПравоПросмотраФон/ПравоПросмотраФон.mdo b/SSL/src/StyleItems/ПравоПросмотраФон/ПравоПросмотраФон.mdo new file mode 100644 index 000000000..1d1e2c5ab --- /dev/null +++ b/SSL/src/StyleItems/ПравоПросмотраФон/ПравоПросмотраФон.mdo @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:StyleItem 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="a6308250-2b1b-40ef-bd20-589d519e3c38"> + <name>ПравоПросмотраФон</name> + <synonym> + <key>ru</key> + <value>Право просмотра фон</value> + </synonym> + <value xsi:type="core:ColorValue"> + <value xsi:type="core:ColorRef"> + <color>Web.HoneyDew</color> + </value> + </value> +</mdclass:StyleItem> diff --git a/SSL/src/StyleItems/ПравоРедактированияФон/ПравоРедактированияФон.mdo b/SSL/src/StyleItems/ПравоРедактированияФон/ПравоРедактированияФон.mdo new file mode 100644 index 000000000..ac9ccc0ce --- /dev/null +++ b/SSL/src/StyleItems/ПравоРедактированияФон/ПравоРедактированияФон.mdo @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:StyleItem 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="22eafd3b-dc42-4a99-89af-3cd5311dc29f"> + <name>ПравоРедактированияФон</name> + <synonym> + <key>ru</key> + <value>Право редактирования фон</value> + </synonym> + <value xsi:type="core:ColorValue"> + <value xsi:type="core:ColorRef"> + <color>Web.LightYellow</color> + </value> + </value> +</mdclass:StyleItem> diff --git a/SSL/src/StyleItems/ПравоСозданияФон/ПравоСозданияФон.mdo b/SSL/src/StyleItems/ПравоСозданияФон/ПравоСозданияФон.mdo new file mode 100644 index 000000000..068930420 --- /dev/null +++ b/SSL/src/StyleItems/ПравоСозданияФон/ПравоСозданияФон.mdo @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:StyleItem 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="c67f671a-3c83-44f4-9c6a-e06667ac8da6"> + <name>ПравоСозданияФон</name> + <synonym> + <key>ru</key> + <value>Право создания фон</value> + </synonym> + <value xsi:type="core:ColorValue"> + <value xsi:type="core:ColorRef"> + <color>Web.MistyRose</color> + </value> + </value> +</mdclass:StyleItem> diff --git a/SSL/src/Subsystems/Администрирование/Администрирование.mdo b/SSL/src/Subsystems/Администрирование/Администрирование.mdo index 8ccf62e8b..c35b7ad24 100644 --- a/SSL/src/Subsystems/Администрирование/Администрирование.mdo +++ b/SSL/src/Subsystems/Администрирование/Администрирование.mdo @@ -104,4 +104,5 @@ <content>DataProcessor.НастройкаСтандартногоИнтерфейсаOData</content> <content>Catalog.ВнешниеКомпоненты</content> <content>Catalog.ШаблоныСообщений</content> + <content>Report.АнализПравДоступа</content> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo index f38a58c81..82c1f079b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo @@ -267,6 +267,7 @@ <content>CommonModule.МультиязычностьПереопределяемый</content> <content>SessionParameter.ОсновнойЯзык</content> <content>CommonModule.МультиязычностьПовтИсп</content> + <content>CommonPicture.ПодменюСервис</content> <content>CommonForm.КонтрольДинамическогоОбновления</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo index fb54ae0c3..cbb346ffe 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo @@ -29,5 +29,6 @@ <content>CommonModule.РаботаСКурсамиВалютСлужебный</content> <content>CommonCommand.ЗагрузитьКурсыВалют</content> <content>XDTOPackage.CurrencyRates</content> + <content>DefinedType.КурсВалюты</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo index 4b315aeb1..58c7fd339 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -82,5 +82,6 @@ <content>StyleItem.РазделВариантовОтчетовШрифт</content> <content>StyleItem.ФонРезультатовПоиска</content> <content>StyleItem.ОбразецНастройкиКолонтитуловЦвет</content> + <content>StyleItem.ОбразецНастройкиКолонтитуловШрифт</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo index 10f9ca14e..1f3085dd4 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo @@ -13,5 +13,6 @@ <content>DataProcessor.ГрупповоеИзменениеРеквизитов</content> <content>CommonModule.ГрупповоеИзменениеОбъектовКлиент</content> <content>CommonModule.ГрупповоеИзменениеОбъектовПереопределяемый</content> + <content>CommonModule.ГрупповоеИзменениеОбъектов</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo index f0dc8d6e8..636b3a30b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo @@ -49,5 +49,6 @@ <content>CommonModule.УправлениеКонтактнойИнформациейПереопределяемый</content> <content>SessionParameter.ИнтерактивнаяПроверкаЗаполненияКонтактнойИнформации</content> <content>EventSubscription.КонтактнаяИнформацияОбработкаПроверкиЗаполнения</content> + <content>ScheduledJob.ИсправлениеУстаревшихАдресов</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo index e0cab1b55..dacbde08c 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo @@ -35,5 +35,12 @@ <content>CommonModule.ОбновлениеИнформационнойБазыБСП</content> <content>Constant.КоличествоПотоковОбновленияИнформационнойБазы</content> <content>EventSubscription.ОбновлениеВерсииИБПередУдалениемСсылочногоОбъекта</content> + <content>InformationRegister.ОбработчикиОбновления</content> + <content>InformationRegister.ПотокиОбновления</content> + <content>InformationRegister.ОбработчикиОбновленияОбщихДанных</content> + <content>Enum.СтатусыОбработчиковОбновления</content> + <content>Enum.РежимыВыполненияОбработчиков</content> + <content>Enum.РежимыВыполненияОтложенныхОбработчиков</content> + <content>DataProcessor.ОписаниеОбработчиковОбновления</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo index 7d9bf7f65..fcbfb8b27 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Обсуждения/Обсуждения.mdo @@ -11,5 +11,12 @@ <content>CommonModule.ОбсужденияСлужебныйВызовСервера</content> <content>CommonModule.ОбсужденияСлужебный</content> <content>CommonCommand.Обсуждения</content> + <content>CommonModule.ОбсужденияСлужебныйКлиентСервер</content> + <content>CommonModule.Обсуждения</content> + <content>CommonPicture.Телеграм16х16</content> + <content>CommonPicture.ВКонтакте16х16</content> + <content>CommonPicture.BotFather</content> + <content>CommonPicture.BotFatherВконтакте</content> + <content>CommonModule.ОбсужденияКлиент</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo index 6cb664906..1589dfbcf 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo @@ -35,7 +35,7 @@ <content>Catalog.ГруппыВнешнихПользователей</content> <content>Catalog.ВнешниеПользователи</content> <content>Constant.ИспользоватьВнешнихПользователей</content> - <content>EventSubscription.ОбновитьПредставлениеВнешнегоПользователя</content> + <content>EventSubscription.ОбновитьВнешнегоПользователя</content> <content>Role.ЧтениеВнешнихПользователей</content> <content>Role.ДобавлениеИзменениеВнешнихПользователей</content> <content>SessionParameter.ТекущийВнешнийПользователь</content> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбновлениеВерсииИБВМоделиСервиса/ОбновлениеВерсииИБВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбновлениеВерсииИБВМоделиСервиса/ОбновлениеВерсииИБВМоделиСервиса.mdo index a87bb8323..13a9fd518 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбновлениеВерсииИБВМоделиСервиса/ОбновлениеВерсииИБВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбновлениеВерсииИБВМоделиСервиса/ОбновлениеВерсииИБВМоделиСервиса.mdo @@ -9,5 +9,6 @@ <content>InformationRegister.ВерсииПодсистемОбластейДанных</content> <content>CommonForm.ПриоритетОбновленияВОбластяхДанных</content> <content>Constant.ПриоритетОбновленияВОбластяхДанных</content> + <content>Report.ПрогрессОбновленияОбластейДанных</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo index 419c06494..a446fca9e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo @@ -23,7 +23,7 @@ <content>CommonModule.РаботаСПочтовымиСообщениямиПереопределяемый</content> <content>CommonModule.РаботаСПочтовымиСообщениямиКлиентПереопределяемый</content> <content>Role.ЧтениеУчетныхЗаписейЭлектроннойПочты</content> - <content>CommonPicture.ВводимыеСимволыВидны</content> <content>CommonPicture.ВводимыеСимволыСкрыты</content> + <content>CommonPicture.ВводимыеСимволыВидны</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СтруктураПодчиненности/СтруктураПодчиненности.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СтруктураПодчиненности/СтруктураПодчиненности.mdo index 4857ca9a2..05fbe4b2e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СтруктураПодчиненности/СтруктураПодчиненности.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СтруктураПодчиненности/СтруктураПодчиненности.mdo @@ -48,5 +48,6 @@ <content>CommonPicture.СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх</content> <content>CommonPicture.СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз</content> <content>CommonPicture.СправочникПВХПомеченНаУдалениеКоннекторНиз</content> + <content>CommonPicture.СтруктураПодчиненности</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo index e62d334a3..40d376e07 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo @@ -14,5 +14,17 @@ <content>CommonModule.УдалениеПомеченныхОбъектов</content> <content>CommonModule.УдалениеПомеченныхОбъектовКлиент</content> <content>CommonModule.УдалениеПомеченныхОбъектовСлужебныйВызовСервера</content> + <content>Constant.ПроверятьИспользованиеУдаляемыхОбъектов</content> + <content>InformationRegister.УдаляемыеОбъекты</content> + <content>EventSubscription.ЗапретитьИспользованиеУдаляемыхОбъектовВОбъектах</content> + <content>EventSubscription.ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахЗаписей</content> + <content>EventSubscription.ЗапретитьИспользованиеУдаляемыхОбъектовВНаборахРегистровРасчета</content> + <content>EventSubscription.ЗапретитьИспользованиеУдаляемыхОбъектовВКонстантах</content> + <content>ScheduledJob.ОтключениеПроверкиИспользованияУдаляемыхОбъектов</content> + <content>InformationRegister.НеудаленныеОбъекты</content> + <content>CommonModule.УдалениеПомеченныхОбъектовСлужебныйКлиентСервер</content> + <content>CommonModule.УдалениеПомеченныхПовтИсп</content> + <content>StyleItem.ДействиеВКолонкеСпискаШрифт</content> + <content>SessionParameter.ВыполняетсяУдалениеОбъектов</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo index 5df9aac4c..3d49bfa08 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo @@ -112,5 +112,13 @@ <content>EventSubscription.ПроверитьДоступПередУдалением</content> <content>Constant.ПервоеОбновлениеДоступаЗавершилось</content> <content>EventSubscription.ОбновитьЗначенияГруппДоступа</content> + <content>Report.АнализПравДоступа</content> + <content>CommonPicture.Создание</content> + <content>CommonPicture.Редактирование</content> + <content>CommonPicture.Просмотр</content> + <content>StyleItem.ПравоПросмотраФон</content> + <content>StyleItem.ПравоРедактированияФон</content> + <content>StyleItem.ПравоСозданияФон</content> + <content>StyleItem.ПравоНедействительногоПользователяФон</content> <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> </mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УчетОригиналовПервичныхДокументов/CommandInterface.cmi b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УчетОригиналовПервичныхДокументов/CommandInterface.cmi new file mode 100644 index 000000000..9ab0c789e --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УчетОригиналовПервичныхДокументов/CommandInterface.cmi @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"> + <commandsVisibility> + <visibilityFragments> + <command>Catalog.СостоянияОригиналовПервичныхДокументов.StandardCommand.OpenList</command> + <visible> + <common>true</common> + </visible> + </visibilityFragments> + <visibilityFragments> + <command>Catalog.СостоянияОригиналовПервичныхДокументов.StandardCommand.Create</command> + <visible> + <common>true</common> + </visible> + </visibilityFragments> + </commandsVisibility> + <commandsPlacement> + <placementFragments> + <group>NavigationPanelOrdinary</group> + <commands>Catalog.СостоянияОригиналовПервичныхДокументов.StandardCommand.OpenList</commands> + </placementFragments> + </commandsPlacement> + <commandsOrder> + <orderFragments> + <group>NavigationPanelOrdinary</group> + <commands>Catalog.СостоянияОригиналовПервичныхДокументов.StandardCommand.OpenList</commands> + </orderFragments> + </commandsOrder> +</cmi:CommandInterface> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УчетОригиналовПервичныхДокументов/УчетОригиналовПервичныхДокументов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УчетОригиналовПервичныхДокументов/УчетОригиналовПервичныхДокументов.mdo new file mode 100644 index 000000000..ae60aedf3 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УчетОригиналовПервичныхДокументов/УчетОригиналовПервичныхДокументов.mdo @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Subsystem xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bc89af7a-1971-4245-8d88-1a5a50c50a8b"> + <name>УчетОригиналовПервичныхДокументов</name> + <synonym> + <key>ru</key> + <value>Учет оригиналов первичных документов</value> + </synonym> + <content>InformationRegister.СостоянияОригиналовПервичныхДокументов</content> + <content>Catalog.СостоянияОригиналовПервичныхДокументов</content> + <content>FunctionalOption.ИспользоватьУчетОригиналовПервичныхДокументов</content> + <content>Constant.ИспользоватьУчетОригиналовПервичныхДокументов</content> + <content>CommonModule.УчетОригиналовПервичныхДокументовВызовСервера</content> + <content>CommonModule.УчетОригиналовПервичныхДокументовКлиентПереопределяемый</content> + <content>CommonModule.УчетОригиналовПервичныхДокументов</content> + <content>CommonModule.УчетОригиналовПервичныхДокументовКлиент</content> + <content>Role.ИзменениеСостоянийОригиналовПервичныхДокументов</content> + <content>Role.ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов</content> + <content>CommonCommand.ЖурналУчетаОригиналовПервичныхДокументов</content> + <content>CommonPicture.УстановитьСостояниеОригиналаПервичногоДокумента</content> + <content>CommonPicture.УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам</content> + <content>CommonPicture.СостояниеОригиналаПервичногоДокументаОригиналПолучен</content> + <content>CommonPicture.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен</content> + <content>CommonPicture.НастроитьСостоянияОригиналаПервичногоДокумента</content> + <content>CommonPicture.КоллекцияПиктограммПечатныеФормыОригиналаПервичногоДокумента</content> + <content>CommonPicture.КоллекцияПиктограммНаличиеОригиналаПервичногоДокумента</content> + <content>CommonPicture.ПиктограммыЭлементовСправочникаСостоянияОригиналовПервичныхДокументов</content> + <content>DefinedType.ОбъектСУчетомОригиналовПервичныхДокументов</content> + <content>Role.ЧтениеСостоянийОригиналовПервичныхДокументов</content> + <content>CommonModule.УчетОригиналовПервичныхДокументовПереопределяемый</content> + <parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem> +</mdclass:Subsystem> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЭлектроннаяПодпись/ЭлектроннаяПодпись.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЭлектроннаяПодпись/ЭлектроннаяПодпись.mdo index 790d51afb..8a6541b1b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЭлектроннаяПодпись/ЭлектроннаяПодпись.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЭлектроннаяПодпись/ЭлектроннаяПодпись.mdo @@ -46,7 +46,7 @@ <content>DataProcessor.ПрограммыЭлектроннойПодписиИШифрования</content> <content>DataProcessor.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата</content> <content>CommonForm.РезультатПроверки</content> - <content>CommonModule.ЭлектроннаяПодписьЛокализацияКлиентСервер</content> + <content>CommonModule.ЭлектроннаяПодписьКлиентСерверЛокализация</content> <content>CommonModule.ЗаявлениеНаСертификатПереопределяемый</content> <content>StyleItem.ЗаявлениеНаВыпускСертификатаЗаголовокКлючевогоПоляШрифт</content> <content>Constant.КлассификаторОшибокКриптографии</content> diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo index 7bd914600..24e4ad4ea 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo @@ -64,6 +64,7 @@ <subsystems>УдалениеПомеченныхОбъектов</subsystems> <subsystems>УправлениеДоступом</subsystems> <subsystems>УправлениеИтогамиИАгрегатами</subsystems> + <subsystems>УчетОригиналовПервичныхДокументов</subsystems> <subsystems>ЦентрМониторинга</subsystems> <subsystems>ШаблоныСообщений</subsystems> <subsystems>ЭлектроннаяПодпись</subsystems> diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl index 3462b0ab1..3196b50a4 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl @@ -111,13 +111,15 @@ &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) + Если Элемент.ТекущиеДанные <> Неопределено И Элемент.ТекущиеДанные.Свойство("ПринятаКИсполнению") И НЕ Элемент.ТекущиеДанные.ПринятаКИсполнению Тогда - Элементы.ПринятьКИсполнению.Доступность= Истина; + ДоступностьПунктаПринятьКИсполнению(Истина); Иначе - Элементы.ПринятьКИсполнению.Доступность= Ложь; + ДоступностьПунктаПринятьКИсполнению(Ложь); КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -128,13 +130,15 @@ Процедура ПринятьКИсполнению(Команда) БизнесПроцессыИЗадачиКлиент.ПринятьЗадачиКИсполнению(Элементы.Список.ВыделенныеСтроки); - + ДоступностьПунктаПринятьКИсполнению(Ложь); + КонецПроцедуры &НаКлиенте Процедура ОтменитьПринятиеКИсполнению(Команда) БизнесПроцессыИЗадачиКлиент.ОтменитьПринятиеЗадачКИсполнению(Элементы.Список.ВыделенныеСтроки); + ДоступностьПунктаПринятьКИсполнению(Истина); КонецПроцедуры @@ -229,4 +233,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ДоступностьПунктаПринятьКИсполнению(ЗначениеФлага) + + Элементы.ПринятьКИсполнению.Доступность = ЗначениеФлага; + Элементы.СписокКонтекстноеМенюПринятьКИсполнению.Доступность = ЗначениеФлага; + Элементы.СписокКонтекстноеМенюОтменитьПринятиеКИсполнению.Доступность = Не ЗначениеФлага; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl index 8fcedce8d..8191de026 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl @@ -55,9 +55,9 @@ Если Элемент.ТекущиеДанные <> Неопределено И Элемент.ТекущиеДанные.Свойство("ПринятаКИсполнению") И НЕ Элемент.ТекущиеДанные.ПринятаКИсполнению Тогда - Элементы.ПринятьКИсполнению.Доступность= Истина; + ДоступностьПунктаПринятьКИсполнению(Истина); Иначе - Элементы.ПринятьКИсполнению.Доступность= Ложь; + ДоступностьПунктаПринятьКИсполнению(Ложь); КонецЕсли; КонецПроцедуры @@ -109,6 +109,7 @@ Процедура ПринятьКИсполнению(Команда) БизнесПроцессыИЗадачиКлиент.ПринятьЗадачиКИсполнению(Элементы.Список.ВыделенныеСтроки); + ДоступностьПунктаПринятьКИсполнению(Ложь); КонецПроцедуры @@ -116,6 +117,7 @@ Процедура ОтменитьПринятиеКИсполнению(Команда) БизнесПроцессыИЗадачиКлиент.ОтменитьПринятиеЗадачКИсполнению(Элементы.Список.ВыделенныеСтроки); + ДоступностьПунктаПринятьКИсполнению(Истина); КонецПроцедуры @@ -207,4 +209,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ДоступностьПунктаПринятьКИсполнению(ЗначениеФлага) + + Элементы.ПринятьКИсполнению.Доступность = ЗначениеФлага; + Элементы.СписокКонтекстноеМенюПринятьКИсполнению.Доступность = ЗначениеФлага; + Элементы.СписокКонтекстноеМенюОтменитьПринятиеКИсполнению.Доступность = Не ЗначениеФлага; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form index c8eae800c..2275bcb8d 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form @@ -1039,7 +1039,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>OK</name> + <name>Перенаправить</name> </handler> </action> <currentRowUse>DontUse</currentRowUse> diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl index a8bac2bd9..1a9752b14 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl @@ -125,7 +125,7 @@ #Область ОбработчикиКомандФормы &НаКлиенте -Процедура OK(Команда) +Процедура Перенаправить(Команда) ОчиститьСообщения(); Если НЕ ПроверитьЗаполнение() Тогда diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl index 430e4af03..c3dc962b1 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl @@ -136,9 +136,9 @@ Если Элемент.ТекущиеДанные <> Неопределено И Элемент.ТекущиеДанные.Свойство("ПринятаКИсполнению") И НЕ Элемент.ТекущиеДанные.ПринятаКИсполнению Тогда - Элементы.ПринятьКИсполнению.Доступность= Истина; + ДоступностьПунктаПринятьКИсполнению(Истина); Иначе - Элементы.ПринятьКИсполнению.Доступность= Ложь; + ДоступностьПунктаПринятьКИсполнению(Ложь); КонецЕсли; КонецПроцедуры @@ -150,6 +150,7 @@ Процедура ПринятьКИсполнению(Команда) БизнесПроцессыИЗадачиКлиент.ПринятьЗадачиКИсполнению(Элементы.Список.ВыделенныеСтроки); + ДоступностьПунктаПринятьКИсполнению(Ложь); КонецПроцедуры @@ -157,6 +158,7 @@ Процедура ОтменитьПринятиеКИсполнению(Команда) БизнесПроцессыИЗадачиКлиент.ОтменитьПринятиеЗадачКИсполнению(Элементы.Список.ВыделенныеСтроки); + ДоступностьПунктаПринятьКИсполнению(Истина); КонецПроцедуры @@ -251,4 +253,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ДоступностьПунктаПринятьКИсполнению(ЗначениеФлага) + + Элементы.ПринятьКИсполнению.Доступность = ЗначениеФлага; + Элементы.СписокКонтекстноеМенюПринятьКИсполнению.Доступность = ЗначениеФлага; + Элементы.СписокКонтекстноеМенюОтменитьПринятиеКИсполнению.Доступность = Не ЗначениеФлага; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl index bda3ab757..01b4b9c30 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl @@ -18,7 +18,8 @@ // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив Из Строка - +// Массив Из Строка +// Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl index 5d486453a..5618ba824 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl @@ -150,7 +150,7 @@ // Определяет, заполнены ли реквизиты адресации: исполнитель или роль исполнителя // // Возвращаемое значение: -// Булево - Возвращает Истина, если в задаче указан исполнитель или роль исполнителя. +// Булево - возвращает Истина, если в задаче указан исполнитель или роль исполнителя. // Функция РеквизитыАдресацииЗаполнены() diff --git a/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl index de2057eeb..1f5450383 100644 --- a/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl +++ b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl @@ -114,7 +114,8 @@ ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка данных в информационную базу через web-сервис ""Enterprise Data Exchange""'"); ПараметрыВыполнения.КлючФоновогоЗадания = Строка(Новый УникальныйИдентификатор); - ПараметрыВыполнения.ЗапуститьВФоне = Истина; + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", @@ -148,7 +149,8 @@ ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Подготовка к выгрузке данных из информационной базы через web-сервис ""Enterprise Data Exchange""'"); ПараметрыВыполнения.КлючФоновогоЗадания = Строка(Новый УникальныйИдентификатор); - ПараметрыВыполнения.ЗапуститьВФоне = Истина; + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "ОбменДаннымиСлужебный.ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы", diff --git a/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl index 998fb4cf3..adfcbcbeb 100644 --- a/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl +++ b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl @@ -71,7 +71,8 @@ ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка данных в информационную базу через web-сервис ""Enterprise Data Upload""'"); ПараметрыВыполнения.КлючФоновогоЗадания = Строка(Новый УникальныйИдентификатор); - ПараметрыВыполнения.ЗапуститьВФоне = Истина; + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", diff --git a/SSL/src/WebServices/Exchange_3_0_1_1/Module.bsl b/SSL/src/WebServices/Exchange_3_0_1_1/Module.bsl index f03a21dc8..471404909 100644 --- a/SSL/src/WebServices/Exchange_3_0_1_1/Module.bsl +++ b/SSL/src/WebServices/Exchange_3_0_1_1/Module.bsl @@ -100,7 +100,6 @@ Параметры = СериализаторXDTO.ПрочитатьXDTO(ПараметрыXDTO); НастройкиПодключения = Параметры.НастройкиПодключения; - СтрокаПараметровXML = Параметры.СтрокаПараметровXML; МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); Попытка diff --git a/SSL/src/WebServices/InterfaceVersion/Module.bsl b/SSL/src/WebServices/InterfaceVersion/Module.bsl index f7badc69d..7689e128c 100644 --- a/SSL/src/WebServices/InterfaceVersion/Module.bsl +++ b/SSL/src/WebServices/InterfaceVersion/Module.bsl @@ -11,7 +11,7 @@ // Возвращает массив поддерживаемых подсистемой InterfaceName названий номеров версий. // // Параметры: -// InterfaceName - Строка - Имя подсистемы. +// InterfaceName - Строка - имя подсистемы. // // Возвращаемое значение: // Массив строк. diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_1_6_1/Module.bsl b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_1_6_1/Module.bsl index 81c458fff..3f1888875 100644 --- a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_1_6_1/Module.bsl +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_1_6_1/Module.bsl @@ -215,8 +215,7 @@ // Соответствует операции Ping Функция Ping() - // Заглушка. Необходима, чтобы не выдавалась ошибка проверки конфигурации. - Заглушка = Истина; + Возврат ""; КонецФункции diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_4_5_1/Module.bsl b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_4_5_1/Module.bsl index 1ec98fb22..937ee0426 100644 --- a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_4_5_1/Module.bsl +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_4_5_1/Module.bsl @@ -244,8 +244,7 @@ // Соответствует операции Ping Функция Ping() - // Заглушка. Необходима, чтобы не выдавалась ошибка проверки конфигурации. - Заглушка = Истина; + Возврат ""; КонецФункции diff --git a/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto b/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto index 618916d41..6ecf541ae 100644 --- a/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto +++ b/SSL/src/XDTOPackages/ExchangeMessage/Package.xdto @@ -15,6 +15,7 @@ <property name="NewFrom" type="xs:string" lowerBound="0"/> <property xmlns:d3p1="http://www.1c.ru/SSL/Exchange/Message" name="AvailableObjectTypes" type="d3p1:AvailableObjectTypes" lowerBound="0" nillable="true"/> <property name="Prefix" type="xs:string" lowerBound="0"/> + <property xmlns:d3p1="http://www.1c.ru/SSL/Exchange/Message" name="AvailableExtensions" type="d3p1:AvailableExtensions" lowerBound="0"/> </objectType> <objectType name="Object" open="false" abstract="true"> <property name="AdditionalInfo" type="xs:anyType" lowerBound="0"/> @@ -27,4 +28,11 @@ <property name="Sending" type="xs:string" lowerBound="0"/> <property name="Receiving" type="xs:string" lowerBound="0"/> </objectType> + <objectType name="AvailableExtensions"> + <property xmlns:d3p1="http://www.1c.ru/SSL/Exchange/Message" name="Extension" type="d3p1:Extension" lowerBound="0" upperBound="-1"/> + </objectType> + <objectType name="Extension" open="true"> + <property name="Namespace" type="xs:string"/> + <property name="BaseVersion" type="xs:string"/> + </objectType> </package> \ No newline at end of file